From 88575795199f65b4554a39019dd34a032518ac07 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 20 Jul 2020 12:20:25 -0600 Subject: [PATCH 001/544] add stair warps --- include/constants/metatile_behaviors.h | 8 +- include/field_screen_effect.h | 2 + include/global.fieldmap.h | 1 + include/metatile_behavior.h | 5 + src/field_control_avatar.c | 28 +++- src/field_player_avatar.c | 8 + src/field_screen_effect.c | 211 +++++++++++++++++++++++++ src/metatile_behavior.c | 48 +++++- src/overworld.c | 4 + 9 files changed, 302 insertions(+), 13 deletions(-) diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 94cb0ffcaa..59ed97d079 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -236,10 +236,10 @@ #define MB_WIRELESS_BOX_RESULTS 0xE8 #define MB_TRAINER_HILL_TIMER 0xE9 #define MB_SKY_PILLAR_CLOSED_DOOR 0xEA -#define MB_UNUSED_EB 0xEB -#define MB_UNUSED_EC 0xEC -#define MB_UNUSED_ED 0xED -#define MB_UNUSED_EE 0xEE +#define MB_UP_RIGHT_STAIR_WARP 0xEB +#define MB_UP_LEFT_STAIR_WARP 0xEC +#define MB_DOWN_RIGHT_STAIR_WARP 0xED +#define MB_DOWN_LEFT_STAIR_WARP 0xEE #define MB_UNUSED_EF 0xEF #endif // GUARD_METATILE_BEHAVIORS diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index e05e30378a..0f97bdc3f3 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -40,5 +40,7 @@ void FadeOutOrbEffect(void); void sub_80B05B4(void); void WriteFlashScanlineEffectBuffer(u8 flashLevel); bool8 IsPlayerStandingStill(void); +void DoStairWarp(u16 metatileBehavior, u16 delay); +bool8 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 59610f9adb..a3ef192b77 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -283,6 +283,7 @@ enum COLLISION_ISOLATED_HORIZONTAL_RAIL, COLLISION_VERTICAL_RAIL, COLLISION_HORIZONTAL_RAIL, + COLLISION_STAIR_WARP, }; // player running states diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index b5dae6de09..a801d8b27b 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -145,5 +145,10 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); +bool8 MetatileBehavior_IsDirectionalUpRightStairWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalUpLeftStairWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalDownRightStairWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalDownLeftStairWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalStairWarp(u8 metatileBehavior); #endif // GUARD_METATILE_BEHAVIOR diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index e41b5a69a5..a5beff0930 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -689,13 +689,31 @@ static bool8 CheckStandardWildEncounter(u16 metatileBehavior) static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8 direction) { s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position); + u16 delay; - if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE && warpEventId != -1) + if (warpEventId != -1) { - StoreInitialPlayerAvatarState(); - SetupWarp(&gMapHeader, warpEventId, position); - DoWarp(); - return TRUE; + if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE) + { + StoreInitialPlayerAvatarState(); + SetupWarp(&gMapHeader, warpEventId, position); + DoWarp(); + return TRUE; + } + else if (IsDirectionalStairWarpMetatileBehavior(metatileBehavior, direction) == TRUE) + { + delay = 0; + if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + { + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); + delay = 12; + } + + StoreInitialPlayerAvatarState(); + SetupWarp(&gMapHeader, warpEventId, position); + DoStairWarp(metatileBehavior, delay); + return TRUE; + } } return FALSE; } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index f5f6e99f7d..dae437d629 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -6,6 +6,7 @@ #include "field_camera.h" #include "field_effect.h" #include "field_effect_helpers.h" +#include "field_screen_effect.h" #include "field_player_avatar.h" #include "fieldmap.h" #include "menu.h" @@ -625,6 +626,10 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) PlayerNotOnBikeCollideWithFarawayIslandMew(direction); return; } + else if (collision == COLLISION_STAIR_WARP) + { + PlayerFaceDirection(direction); + } else { u8 adjustedCollision = collision - COLLISION_STOP_SURFING; @@ -661,6 +666,9 @@ static u8 CheckForPlayerAvatarCollision(u8 direction) x = playerObjEvent->currentCoords.x; y = playerObjEvent->currentCoords.y; + if (IsDirectionalStairWarpMetatileBehavior(MapGridGetMetatileBehaviorAt(x, y), direction)) + return COLLISION_STAIR_WARP; + MoveCoords(direction, &x, &y); return CheckForObjectEventCollision(playerObjEvent, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 53057fc31d..6d9269915e 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -49,6 +49,7 @@ static void task0A_mpl_807E31C(u8 taskId); static void Task_WarpAndLoadMap(u8 taskId); static void Task_DoDoorWarp(u8 taskId); static void Task_EnableScriptAfterMusicFade(u8 taskId); +static void Task_ExitStairs(u8 taskId); // const static const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 }; @@ -266,6 +267,8 @@ static void SetUpWarpExitTask(void) behavior = MapGridGetMetatileBehaviorAt(x, y); if (MetatileBehavior_IsDoor(behavior) == TRUE) func = Task_ExitDoor; + else if (MetatileBehavior_IsDirectionalStairWarp(behavior) == TRUE) + func = Task_ExitStairs; else if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE) func = Task_ExitNonAnimDoor; else @@ -1267,3 +1270,211 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId) EnableBothScriptContexts(); } } + +//stair warps +static void GetStairsMovementDirection(u8 a0, s16 *a1, s16 *a2) +{ + if (MetatileBehavior_IsDirectionalUpRightStairWarp(a0)) + { + *a1 = 16; + *a2 = -10; + } + else if (MetatileBehavior_IsDirectionalUpLeftStairWarp(a0)) + { + *a1 = -17; + *a2 = -10; + } + else if (MetatileBehavior_IsDirectionalDownRightStairWarp(a0)) + { + *a1 = 17; + *a2 = 3; + } + else if (MetatileBehavior_IsDirectionalDownLeftStairWarp(a0)) + { + *a1 = -17; + *a2 = 3; + } + else + { + *a1 = 0; + *a2 = 0; + } +} + +static bool8 WaitStairExitMovementFinished(s16 *a0, s16 *a1, s16 *a2, s16 *a3, s16 *a4) +{ + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + if (*a4 != 0) + { + *a2 += *a0; + *a3 += *a1; + sprite->pos2.x = *a2 >> 5; + sprite->pos2.y = *a3 >> 5; + (*a4)--; + return TRUE; + } + else + { + sprite->pos2.x = 0; + sprite->pos2.y = 0; + return FALSE; + } +} + +static void ExitStairsMovement(s16 *a0, s16 *a1, s16 *a2, s16 *a3, s16 *a4) +{ + s16 x, y; + u8 behavior; + s32 r1; + struct Sprite *sprite; + + PlayerGetDestCoords(&x, &y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsDirectionalDownRightStairWarp(behavior) || MetatileBehavior_IsDirectionalUpRightStairWarp(behavior)) + r1 = 3; + else + r1 = 4; + + ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetWalkInPlaceSlowMovementAction(r1)); + GetStairsMovementDirection(behavior, a0, a1); + *a2 = *a0 * 16; + *a3 = *a1 * 16; + *a4 = 16; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.x = *a2 >> 5; + sprite->pos2.y = *a3 >> 5; + *a0 *= -1; + *a1 *= -1; +} + +static void Task_ExitStairs(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + switch (data[0]) + { + default: + if (WaitForWeatherFadeIn() == TRUE) + { + CameraObjectReset1(); + ScriptContext2_Disable(); + DestroyTask(taskId); + } + break; + case 0: + Overworld_PlaySpecialMapMusic(); + WarpFadeInScreen(); + ScriptContext2_Enable(); + ExitStairsMovement(&data[1], &data[2], &data[3], &data[4], &data[5]); + data[0]++; + break; + case 1: + if (!WaitStairExitMovementFinished(&data[1], &data[2], &data[3], &data[4], &data[5])) + data[0]++; + break; + } +} + +bool8 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection) +{ + switch (playerDirection) + { + case DIR_WEST: + if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior)) + return TRUE; + if (MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) + return TRUE; + break; + case DIR_EAST: + if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) + return TRUE; + if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) + return TRUE; + break; + } + return FALSE; +} + +static void ForceStairsMovement(u16 a0, s16 *a1, s16 *a2) +{ + ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); + GetStairsMovementDirection(a0, a1, a2); +} + +static void UpdateStairsMovement(s16 a0, s16 a1, s16 *a2, s16 *a3, s16 *a4) +{ + struct Sprite *playerSpr = &gSprites[gPlayerAvatar.spriteId]; + struct ObjectEvent *playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + + if (a1 > 0 || *a4 > 6) + *a3 += a1; + + *a2 += a0; + (*a4)++; + playerSpr->pos2.x = *a2 >> 5; + playerSpr->pos2.y = *a3 >> 5; + if (playerObj->heldMovementFinished) + ObjectEventForceSetHeldMovement(playerObj, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); +} + +static void Task_StairWarp(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + struct ObjectEvent *playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite *playerSpr = &gSprites[gPlayerAvatar.spriteId]; + + switch (data[0]) + { + case 0: + ScriptContext2_Enable(); + FreezeObjectEvents(); + CameraObjectReset2(); + data[0]++; + break; + case 1: + if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj)) + { + if (data[15] != 0) + data[15]--; + else + { + TryFadeOutOldMapMusic(); + PlayRainStoppingSoundEffect(); + playerSpr->oam.priority = 1; + ForceStairsMovement(data[1], &data[2], &data[3]); + PlaySE(SE_KAIDAN); + data[0]++; + } + } + break; + case 2: + UpdateStairsMovement(data[2], data[3], &data[4], &data[5], &data[6]); + data[15]++; + if (data[15] >= 12) + { + WarpFadeOutScreen(); + data[0]++; + } + break; + case 3: + UpdateStairsMovement(data[2], data[3], &data[4], &data[5], &data[6]); + if (!PaletteFadeActive() && BGMusicStopped()) + data[0]++; + break; + default: + gFieldCallback = FieldCB_DefaultWarpExit; + WarpIntoMap(); + SetMainCallback2(CB2_LoadMap); + DestroyTask(taskId); + break; + } +} + +void DoStairWarp(u16 metatileBehavior, u16 delay) +{ + u8 taskId = CreateTask(Task_StairWarp, 10); + gTasks[taskId].data[1] = metatileBehavior; + gTasks[taskId].data[15] = delay; + Task_StairWarp(taskId); +} + diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 435ad72336..782a49e36c 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -245,10 +245,10 @@ static const u8 sTileBitAttributes[] = [MB_WIRELESS_BOX_RESULTS] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_TRAINER_HILL_TIMER] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_SKY_PILLAR_CLOSED_DOOR] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_EB] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_EC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_ED] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_EE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_UP_RIGHT_STAIR_WARP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_UP_LEFT_STAIR_WARP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_DOWN_RIGHT_STAIR_WARP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_DOWN_LEFT_STAIR_WARP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_UNUSED_EF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), }; @@ -1488,3 +1488,43 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) else return FALSE; } + +bool8 MetatileBehavior_IsDirectionalUpRightStairWarp(u8 metatileBehavior) +{ + if(metatileBehavior == MB_UP_RIGHT_STAIR_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsDirectionalUpLeftStairWarp(u8 metatileBehavior) +{ + if (metatileBehavior == MB_UP_LEFT_STAIR_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsDirectionalDownRightStairWarp(u8 metatileBehavior) +{ + if (metatileBehavior == MB_DOWN_RIGHT_STAIR_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsDirectionalDownLeftStairWarp(u8 metatileBehavior) +{ + if (metatileBehavior == MB_DOWN_LEFT_STAIR_WARP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsDirectionalStairWarp(u8 metatileBehavior) +{ + if (metatileBehavior >= MB_UP_RIGHT_STAIR_WARP && metatileBehavior <= MB_DOWN_LEFT_STAIR_WARP) + return TRUE; + else + return FALSE; +} diff --git a/src/overworld.c b/src/overworld.c index ea0d633bcf..dcf30af89f 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -962,6 +962,10 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr return DIR_EAST; else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE) return DIR_WEST; + else if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior) == TRUE || MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior) == TRUE) + return DIR_WEST; + else if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior) == TRUE || MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior) == TRUE) + return DIR_EAST; else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING) || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER )) return playerStruct->direction; From 11828238685cac8b2056902d50399fd082905141 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 23 Sep 2020 13:46:04 -0600 Subject: [PATCH 002/544] update stair warp SE --- src/field_screen_effect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index eccf9dc9d6..7c47075141 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1444,7 +1444,7 @@ static void Task_StairWarp(u8 taskId) PlayRainStoppingSoundEffect(); playerSpr->oam.priority = 1; ForceStairsMovement(data[1], &data[2], &data[3]); - PlaySE(SE_KAIDAN); + PlaySE(SE_EXIT); data[0]++; } } From dfce7f15489de5e94d9476dc76e33e2b60672130 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Thu, 1 Apr 2021 09:45:17 -0600 Subject: [PATCH 003/544] add auto read signposts --- data/event_scripts.s | 4 + .../primary/general/metatile_attributes.bin | Bin 1024 -> 1024 bytes include/constants/metatile_behaviors.h | 2 +- include/event_scripts.h | 2 + include/field_control_avatar.h | 1 + include/field_message_box.h | 2 + include/metatile_behavior.h | 1 + include/script.h | 8 ++ include/text_window.h | 1 + src/field_control_avatar.c | 124 +++++++++++++++++- src/field_message_box.c | 10 +- src/metatile_behavior.c | 8 +- src/overworld.c | 1 + src/scrcmd.c | 2 + src/script.c | 35 +++++ src/text_window.c | 9 ++ 16 files changed, 206 insertions(+), 4 deletions(-) diff --git a/data/event_scripts.s b/data/event_scripts.s index 8039be6876..886c55f71c 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -690,6 +690,10 @@ EventScript_BackupMrBrineyLocation:: @ 8271E95 .include "data/scripts/rival_graphics.inc" .include "data/scripts/set_gym_trainers.inc" +EventScript_CancelMessageBox:: + release + end + Common_EventScript_ShowBagIsFull:: @ 8272054 msgbox gText_TooBadBagIsFull, MSGBOX_DEFAULT release diff --git a/data/tilesets/primary/general/metatile_attributes.bin b/data/tilesets/primary/general/metatile_attributes.bin index d9cd29016d792fb568494dbf2f820100081a14f8..af9326451d561c4103afe500c5ae8c7656092fc6 100644 GIT binary patch delta 21 ZcmZqRXy9OH00Y^H?D~wd8_iEL0{|lp1I_>d delta 21 YcmZqRXy9OHfPjhY`iu-4%}+7|03liflmGw# diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 94cb0ffcaa..cd2f70fe0f 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -30,7 +30,7 @@ #define MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2 0x1A #define MB_STAIRS_OUTSIDE_ABANDONED_SHIP 0x1B #define MB_SHOAL_CAVE_ENTRANCE 0x1C -#define MB_UNUSED_1D 0x1D +#define MB_SIGNPOST 0x1D #define MB_UNUSED_1E 0x1E #define MB_UNUSED_1F 0x1F #define MB_ICE 0x20 diff --git a/include/event_scripts.h b/include/event_scripts.h index 79ef0ea142..eff980f138 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -610,4 +610,6 @@ extern const u8 EventScript_TradeCenter_Chair0[]; extern const u8 EventScript_ConfirmLeaveTradeRoom[]; extern const u8 EventScript_TerminateLink[]; +extern const u8 EventScript_CancelMessageBox[]; + #endif // GUARD_EVENT_SCRIPTS_H diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 17e5afb63e..e6c90e8e5b 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -40,5 +40,6 @@ u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); void ClearPoisonStepCounter(void); +void FieldInput_HandleCancelSignpost(struct FieldInput *input); #endif // GUARD_FIELDCONTROLAVATAR_H diff --git a/include/field_message_box.h b/include/field_message_box.h index 34b3324e72..eed6c7a9c0 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -19,4 +19,6 @@ u8 GetFieldMessageBoxMode(void); void StopFieldMessage(void); void InitFieldMessageBox(void); +extern u8 gWalkAwayFromSignInhibitTimer; + #endif // GUARD_FIELD_MESSAGE_BOX_H diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index d4bd9e6832..886422e63e 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -145,5 +145,6 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); +bool8 MetatileBehavior_IsSignpost(u8 mb); #endif // GUARD_METATILE_BEHAVIOR diff --git a/include/script.h b/include/script.h index 63f6f5aef9..92309eb653 100644 --- a/include/script.h +++ b/include/script.h @@ -62,4 +62,12 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize); // srccmd.h void SetMovingNpcId(u16 npcId); +// auto read signs +void SetWalkingIntoSignVars(void); +void MsgSetSignPost(void); +void ResetFacingNpcOrSignPostVars(void); +bool32 IsMsgSignPost(void); +bool32 CanWalkAwayToCancelMsgBox(void); +void ClearMsgBoxCancelableState(void); + #endif // GUARD_SCRIPT_H diff --git a/include/text_window.h b/include/text_window.h index 7bdcacd17c..d6bf83e0b3 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -23,5 +23,6 @@ void rbox_fill_rectangle(u8 windowId); const u16 *GetTextWindowPalette(u8 id); const u16 *GetOverworldTextboxPalettePtr(void); void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset); +void LoadSignPostWindowFrameGfx(void); #endif // GUARD_TEXT_WINDOW_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 6ec280fd0d..16e334f429 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -9,6 +9,7 @@ #include "event_scripts.h" #include "fieldmap.h" #include "field_control_avatar.h" +#include "field_message_box.h" #include "field_player_avatar.h" #include "field_poison.h" #include "field_screen_effect.h" @@ -41,6 +42,13 @@ static EWRAM_DATA u16 sPreviousPlayerMetatileBehavior = 0; u8 gSelectedObjectEvent; +#define SIGNPOST_POKECENTER 0 +#define SIGNPOST_POKEMART 1 +#define SIGNPOST_INDIGO_1 2 +#define SIGNPOST_INDIGO_2 3 +#define SIGNPOST_SCRIPTED 240 +#define SIGNPOST_NA 255 + static void GetPlayerPosition(struct MapPosition *); static void GetInFrontOfPlayerPosition(struct MapPosition *); static u16 GetPlayerCurMetatileBehavior(int); @@ -69,6 +77,10 @@ static bool8 TryStartMiscWalkingScripts(u16); static bool8 TryStartStepCountScript(u16); static void UpdateFriendshipStepCounter(void); static bool8 UpdatePoisonStepCounter(void); +static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection); +static u8 GetFacingSignpostType(u16 metatileBehvaior, u8 direction); +static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition * position); void FieldClearPlayerInput(struct FieldInput *input) { @@ -140,7 +152,8 @@ int ProcessPlayerFieldInput(struct FieldInput *input) gSpecialVar_LastTalked = 0; gSelectedObjectEvent = 0; - + + ResetFacingNpcOrSignPostVars(); playerDirection = GetPlayerFacingDirection(); GetPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); @@ -160,6 +173,20 @@ int ProcessPlayerFieldInput(struct FieldInput *input) if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE) return TRUE; } + + if (input->checkStandardWildEncounter) + { + if (input->dpadDirection == 0 || input->dpadDirection == playerDirection) + { + GetInFrontOfPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) + return TRUE; + GetPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + } + } + if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE) return TRUE; if (input->heldDirection && input->dpadDirection == playerDirection) @@ -170,6 +197,13 @@ int ProcessPlayerFieldInput(struct FieldInput *input) GetInFrontOfPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + + if (input->heldDirection && input->dpadDirection == playerDirection) + { + if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) + return TRUE; + } + if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE) return TRUE; @@ -1005,3 +1039,91 @@ int SetCableClubWarp(void) SetupWarp(&gMapHeader, GetWarpEventAtMapPosition(&gMapHeader, &position), &position); return 0; } + +// auto read signposts +// signposts +static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u16 metatileBehavior, u8 playerDirection) +{ + u8 signpostType; + const u8 *script; + + if (JOY_HELD(DPAD_LEFT | DPAD_RIGHT)) + return FALSE; + if (playerDirection != DIR_NORTH) + return FALSE; + + switch (GetFacingSignpostType(metatileBehavior, playerDirection)) + { + /* leaving this commented out for examples of custom signpost types + case SIGNPOST_POKECENTER: + SetUpWalkIntoSignScript(EventScript_PokecenterSign, playerDirection); + return TRUE; + case SIGNPOST_POKEMART: + SetUpWalkIntoSignScript(EventScript_PokemartSign, playerDirection); + return TRUE;*/ + case SIGNPOST_SCRIPTED: + script = GetSignpostScriptAtMapPosition(position); + if (script == NULL) + return FALSE; + SetUpWalkIntoSignScript(script, playerDirection); + return TRUE; + default: + return FALSE; + } +} + +static u8 GetFacingSignpostType(u16 metatileBehavior, u8 playerDirection) +{ + /*if (MetatileBehavior_IsPlayerFacingPokemonCenterSign(metatileBehavior, playerDirection) == TRUE) + return SIGNPOST_POKECENTER; + if (MetatileBehavior_IsPlayerFacingPokeMartSign(metatileBehavior, playerDirection) == TRUE) + return SIGNPOST_POKEMART;*/ + + if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE) + return SIGNPOST_SCRIPTED; + + return SIGNPOST_NA; +} + +static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection) +{ + gSpecialVar_Facing = playerDirection; + ScriptContext1_SetupScript(script); + SetWalkingIntoSignVars(); + MsgSetSignPost(); +} + +static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition *position) +{ + const struct BgEvent *event = GetBackgroundEventAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height); + if (event == NULL) + return NULL; + if (event->bgUnion.script != NULL) + return event->bgUnion.script; + return EventScript_TestSignpostMsg; +} + +void FieldInput_HandleCancelSignpost(struct FieldInput *input) +{ + if (ScriptContext1_IsScriptSetUp() == TRUE) + { + if (gWalkAwayFromSignInhibitTimer != 0) + { + gWalkAwayFromSignInhibitTimer--; + } + else if (CanWalkAwayToCancelMsgBox() == TRUE) + { + //ClearMsgBoxCancelableState(); + if (input->dpadDirection != 0 && GetPlayerFacingDirection() != input->dpadDirection) + { + ScriptContext1_SetupScript(EventScript_CancelMessageBox); + ScriptContext2_Enable(); + } + else if (input->pressedStartButton) + { + ScriptContext1_SetupScript(EventScript_CancelMessageBox); + ScriptContext2_Enable(); + } + } + } +} diff --git a/src/field_message_box.c b/src/field_message_box.c index 69d470b84e..9bb1bd52c4 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -5,8 +5,11 @@ #include "text.h" #include "match_call.h" #include "field_message_box.h" +#include "text_window.h" +#include "script.h" static EWRAM_DATA u8 sFieldMessageBoxMode = 0; +EWRAM_DATA u8 gWalkAwayFromSignInhibitTimer = 0; static void ExpandStringAndStartDrawFieldMessage(const u8*, bool32); static void StartDrawFieldMessage(void); @@ -29,7 +32,12 @@ static void Task_DrawFieldMessage(u8 taskId) switch (task->tState) { case 0: - LoadMessageBoxAndBorderGfx(); + if (IsMsgSignPost()) + LoadSignPostWindowFrameGfx(); + else + LoadMessageBoxAndBorderGfx(); + task->tState++; + break; task->tState++; break; case 1: diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 2a9304a4d8..4656e94b0f 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -39,7 +39,7 @@ static const u8 sTileBitAttributes[] = [MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_STAIRS_OUTSIDE_ABANDONED_SHIP] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), [MB_SHOAL_CAVE_ENTRANCE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_1D] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIGNPOST] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_UNUSED_1E] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_UNUSED_1F] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_ICE] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), @@ -1495,3 +1495,9 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) else return FALSE; } + +bool8 MetatileBehavior_IsSignpost(u8 mb) +{ + return (mb == MB_SIGNPOST); +} + diff --git a/src/overworld.c b/src/overworld.c index 9d5e40fb37..7082eb078c 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1422,6 +1422,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) UpdatePlayerAvatarTransitionState(); FieldClearPlayerInput(&inputStruct); FieldGetPlayerInput(&inputStruct, newKeys, heldKeys); + FieldInput_HandleCancelSignpost(&inputStruct); if (!ScriptContext2_IsEnabled()) { if (ProcessPlayerFieldInput(&inputStruct) == 1) diff --git a/src/scrcmd.c b/src/scrcmd.c index 7dc02b6a8f..710a58c246 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1248,6 +1248,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); + ClearMsgBoxCancelableState(); return FALSE; } @@ -1262,6 +1263,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); + ClearMsgBoxCancelableState(); return FALSE; } diff --git a/src/script.c b/src/script.c index 726c065439..977298f833 100644 --- a/src/script.c +++ b/src/script.c @@ -3,6 +3,7 @@ #include "event_data.h" #include "mevent.h" #include "util.h" +#include "field_message_box.h" #include "constants/map_scripts.h" #define RAM_SCRIPT_MAGIC 51 @@ -19,6 +20,8 @@ static u8 sScriptContext1Status; static struct ScriptContext sScriptContext1; static struct ScriptContext sScriptContext2; static bool8 sScriptContext2Enabled; +static u8 sMsgIsSignPost; +static u8 sMsgBoxIsCancelable; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; @@ -444,3 +447,35 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize) scriptSize = sizeof(gSaveBlock1Ptr->ramScript.data.script); InitRamScript(script, scriptSize, 0xFF, 0xFF, 0xFF); } + +// auto read signposts +void SetWalkingIntoSignVars(void) +{ + gWalkAwayFromSignInhibitTimer = 6; + sMsgBoxIsCancelable = TRUE; +} + +bool32 IsMsgSignPost(void) +{ + return sMsgIsSignPost; +} + +void ResetFacingNpcOrSignPostVars(void) +{ + sMsgIsSignPost = FALSE; +} + +void MsgSetSignPost(void) +{ + sMsgIsSignPost = TRUE; +} + +void ClearMsgBoxCancelableState(void) +{ + sMsgBoxIsCancelable = FALSE; +} + +bool32 CanWalkAwayToCancelMsgBox(void) +{ + return sMsgBoxIsCancelable; +} diff --git a/src/text_window.c b/src/text_window.c index 864bd08316..7d59ce2d35 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -5,6 +5,7 @@ #include "palette.h" #include "bg.h" #include "graphics.h" +#include "menu.h" // const rom data const u8 gTextWindowFrame1_Gfx[] = INCBIN_U8("graphics/text_window/1.4bpp"); @@ -195,3 +196,11 @@ void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset) LoadBgTiles(bg, sWindowFrames[gSaveBlock2Ptr->optionsWindowFrameType].tiles, 0x120, destOffset); LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, 0x20); } + +void LoadSignPostWindowFrameGfx(void) +{ + // TODO signpost msgbox frames + //LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gUnknown_8470B0C, 0x260, destOffset); + //LoadPalette(GetWindowFrameTilesPal(1), palIdx, 32); + LoadMessageBoxAndBorderGfx(); +} From 33dfa321b04420e8b213408dde0afbf07a647587 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 31 May 2020 23:16:15 -0600 Subject: [PATCH 004/544] init branch --- include/constants/metatile_behaviors.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 94cb0ffcaa..7fe10a7d20 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -236,10 +236,14 @@ #define MB_WIRELESS_BOX_RESULTS 0xE8 #define MB_TRAINER_HILL_TIMER 0xE9 #define MB_SKY_PILLAR_CLOSED_DOOR 0xEA -#define MB_UNUSED_EB 0xEB -#define MB_UNUSED_EC 0xEC -#define MB_UNUSED_ED 0xED -#define MB_UNUSED_EE 0xEE -#define MB_UNUSED_EF 0xEF + +//sideways stairs +#define MB_SIDEWAYS_STAIRS_0 0xEB +#define MB_SIDEWAYS_STAIRS_1 0xEC +#define MB_SIDEWAYS_STAIRS_2 0xED +#define MB_SIDEWAYS_STAIRS_3 0xEE +#define MB_SIDEWAYS_STAIRS_4 0xEF +#define MB_SIDEWAYS_STAIRS_5 0xF0 + #endif // GUARD_METATILE_BEHAVIORS From 31e9f97d52d4b82b9e75b4a86c699ea57d463fdf Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 3 Jun 2020 14:23:28 -0600 Subject: [PATCH 005/544] cherry pick 4eb7fcc261934c0f9f10985761cd3e7b7abf0dab --- include/constants/event_object_movement.h | 24 + include/constants/metatile_behaviors.h | 19 +- include/event_object_movement.h | 12 + include/field_player_avatar.h | 10 + include/global.fieldmap.h | 5 + include/metatile_behavior.h | 4 + src/bike.c | 75 ++- .../movement_action_func_tables.h | 156 +++++++ src/event_object_movement.c | 441 ++++++++++++++++-- src/field_player_avatar.c | 198 +++++++- src/metatile_behavior.c | 30 +- 11 files changed, 909 insertions(+), 65 deletions(-) diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 2236500810..9bd3e87c6c 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H #define GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H +#define SLOW_MOVEMENT_ON_STAIRS TRUE // change to false to keep emerald's normal movement speed on outdoor stairs + #define MOVEMENT_TYPE_NONE 0x0 #define MOVEMENT_TYPE_LOOK_AROUND 0x1 #define MOVEMENT_TYPE_WANDER_AROUND 0x2 @@ -241,6 +243,28 @@ #define MOVEMENT_ACTION_FIGURE_8 0x9B #define MOVEMENT_ACTION_FLY_UP 0x9C #define MOVEMENT_ACTION_FLY_DOWN 0x9D +// slow running (for stairs) +#define MOVEMENT_ACTION_RUN_DOWN_SLOW 0x9E +#define MOVEMENT_ACTION_RUN_UP_SLOW 0x9F +#define MOVEMENT_ACTION_RUN_LEFT_SLOW 0xA0 +#define MOVEMENT_ACTION_RUN_RIGHT_SLOW 0xA1 +// sideways stairs - walking +#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT 0xA2 +#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT 0xA3 +#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT 0xA4 +#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT 0xA5 +// sideways stairs - running +#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING 0xA6 +#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING 0xA7 +#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING 0xA8 +#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING 0xA9 +// sideways stairs - acro bike +#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT 0xAA +#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT 0xAB +#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT 0xAC +#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT 0xAD +//sideways stairs - mach bike + #define MOVEMENT_ACTION_STEP_END 0xFE diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 7fe10a7d20..ef79f0b6d3 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -74,9 +74,9 @@ #define MB_SLIDE_NORTH 0x46 #define MB_SLIDE_SOUTH 0x47 #define MB_TRICK_HOUSE_PUZZLE_8_FLOOR 0x48 -#define MB_UNUSED_49 0x49 -#define MB_UNUSED_4A 0x4A -#define MB_UNUSED_4B 0x4B +#define MB_SIDEWAYS_STAIRS_RIGHT 0x49 +#define MB_SIDEWAYS_STAIRS_LEFT 0x4A +#define MB_ROCK_STAIRS 0x4B #define MB_UNUSED_4C 0x4C #define MB_UNUSED_4D 0x4D #define MB_UNUSED_4E 0x4E @@ -236,14 +236,11 @@ #define MB_WIRELESS_BOX_RESULTS 0xE8 #define MB_TRAINER_HILL_TIMER 0xE9 #define MB_SKY_PILLAR_CLOSED_DOOR 0xEA - -//sideways stairs -#define MB_SIDEWAYS_STAIRS_0 0xEB -#define MB_SIDEWAYS_STAIRS_1 0xEC -#define MB_SIDEWAYS_STAIRS_2 0xED -#define MB_SIDEWAYS_STAIRS_3 0xEE -#define MB_SIDEWAYS_STAIRS_4 0xEF -#define MB_SIDEWAYS_STAIRS_5 0xF0 +#define MB_UNUSED_EB 0xEB +#define MB_UNUSED_EC 0xEC +#define MB_UNUSED_ED 0xED +#define MB_UNUSED_EE 0xEE +#define MB_UNUSED_EF 0xEF #endif // GUARD_METATILE_BEHAVIORS diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 1e754dcd93..e8f8df1a4b 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -428,4 +428,16 @@ void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId); void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum); bool32 IsObjectEventSpriteAnimating(u8 objectEventId); +// run slow +u8 GetPlayerRunSlowMovementAction(u32); +//sideways stairs +u8 GetSidewaysStairsToRightDirection(s16, s16, u8); +u8 GetSidewaysStairsToLeftDirection(s16, s16, u8); +u8 GetDiagonalRightStairsMovement(u32); +u8 GetDiagonalLeftStairsMovement(u32); +u8 GetDiagonalRightStairsRunningMovement(u32); +u8 GetDiagonalLeftStairsRunningMovement(u32); +u8 GetDiagonalLeftAcroBikeMovement(u32); +u8 GetDiagonalRightAcroBikeMovement(u32); + #endif //GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index c30ce0b6fb..3177a887ce 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -64,5 +64,15 @@ bool32 IsPlayerSpinExitActive(void); void SetPlayerInvisibility(bool8 invisible); u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); void StartFishing(u8 rod); +bool32 PlayerIsMovingOnRockStairs(u8 direction); +//sideways stairs +u8 GetRightStairsDirection(u8 direction); +u8 GetLeftStairsDirection(u8 direction); +void PlayerSidewaysStairsToRight(u8 direction); +void PlayerSidewaysStairsToLeft(u8 direction); +void PlayerSidewaysStairsToRightRunning(u8 direction); +void PlayerSidewaysStairsToLeftRunning(u8 direction); +void PlayerSidewaysStairsToAcroBikeLeft(u8 direction); +void PlayerSidewaysStairsToAcroBikeRight(u8 direction); #endif // GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index c4d7be35da..baedb9bf37 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -278,6 +278,11 @@ enum COLLISION_ISOLATED_HORIZONTAL_RAIL, COLLISION_VERTICAL_RAIL, COLLISION_HORIZONTAL_RAIL, + //sideways_stairs + COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING, + COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING, + COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_RUNNING, + COLLISION_SIDEWAYS_STAIRS_TO_LEFT_RUNNING, }; // player running states diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index d4bd9e6832..f5781a3371 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -145,5 +145,9 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); +bool8 MetatileBehavior_IsRockStairs(u8 metatileBehavior); +//sideways stairs +bool8 MetatileBehavior_IsSidewaysStairsRight(u8); +bool8 MetatileBehavior_IsSidewaysStairsLeft(u8); #endif // GUARD_METATILE_BEHAVIOR diff --git a/src/bike.c b/src/bike.c index bbcda989c9..18dbda6ba3 100644 --- a/src/bike.c +++ b/src/bike.c @@ -179,6 +179,9 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) // the difference between face direction and turn direction is that one changes direction while the other does the animation of turning as well as changing direction. static void MachBikeTransition_FaceDirection(u8 direction) { + //if (direction > DIR_EAST) + // direction -= DIR_EAST; + PlayerFaceDirection(direction); Bike_SetBikeStill(); } @@ -187,6 +190,9 @@ static void MachBikeTransition_TurnDirection(u8 direction) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + //if (direction > DIR_EAST) + // direction -= DIR_EAST; + if (CanBikeFaceDirOnMetatile(direction, playerObjEvent->currentMetatileBehavior)) { PlayerTurnInPlace(direction); @@ -194,6 +200,9 @@ static void MachBikeTransition_TurnDirection(u8 direction) } else { + //if (playerObjEvent->facingDirection > DIR_EAST) + // playerObjEvent->facingDirection -= DIR_EAST; + MachBikeTransition_FaceDirection(playerObjEvent->facingDirection); } } @@ -231,9 +240,28 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) PlayerOnBikeCollide(direction); } } + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + { + gPlayerAvatar.bikeFrameCounter = 0; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; + PlayerGoSpeed2(GetLeftStairsDirection(direction)); + //PlayerSidewaysStairsToAcroBikeLeft(direction); + return; + } + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + { + gPlayerAvatar.bikeFrameCounter = 0; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; + //PlayerSidewaysStairsToAcroBikeRight(direction); + PlayerGoSpeed2(GetRightStairsDirection(direction)); + return; + } else { - // we did not hit anything that can slow us down, so perform the advancement callback depending on the bikeFrameCounter and try to increase the mach bike's speed. + // to do: this sometimes crashes based on the metatile behaviours (eg. holding up while traveling down sideways stairs to sw) + if (PlayerIsMovingOnRockStairs(direction)) + gPlayerAvatar.bikeFrameCounter--; + sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array @@ -268,6 +296,18 @@ static void MachBikeTransition_TrySlowDown(u8 direction) } else { + /* + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + { + return PlayerGoSpeed2(GetLeftStairsDirection(direction)); + //return PlayerSidewaysStairsToLeftMachBike(direction); + } + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + { + return PlayerGoSpeed2(GetRightStairsDirection(direction)); + //return PlayerSidewaysStairsToRightMachBike(direction); + }*/ + sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); } } @@ -563,7 +603,27 @@ static void AcroBikeTransition_Moving(u8 direction) } else { - PlayerRideWaterCurrent(direction); + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + return PlayerGoSpeed2(GetRightStairsDirection(direction)); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + return PlayerGoSpeed2(GetLeftStairsDirection(direction)); + + if (PlayerIsMovingOnRockStairs(direction)) + PlayerGoSpeed2(direction); + else + PlayerRideWaterCurrent(direction); + + /* works, but might be better to keep rock stairs to up/down for mach bike + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + direction = GetRightStairsDirection(direction); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + direction = GetLeftStairsDirection(direction); + + if (PlayerIsMovingOnRockStairs(direction)) + PlayerGoSpeed2(direction); + else + PlayerRideWaterCurrent(direction); + */ } } @@ -632,6 +692,11 @@ static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) else { derp: + /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + direction = GetLeftStairsDirection(direction); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + direction = GetRightStairsDirection(direction); + */ PlayerMovingHoppingWheelie(direction); } } @@ -699,6 +764,12 @@ static void AcroBikeTransition_WheelieMoving(u8 direction) } return; } + + /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + direction = GetLeftStairsDirection(direction); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + direction = GetRightStairsDirection(direction);*/ + PlayerWheelieMove(direction); gPlayerAvatar.runningState = MOVING; } diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index 8cf7d1699f..cc1b522159 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -261,6 +261,26 @@ u8 MovementAction_FlyUp_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_Fly_Finish(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyDown_Step1(struct ObjectEvent *, struct Sprite *); +//slow running +u8 MovementActionFunc_RunSlowDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementActionFunc_RunSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementActionFunc_RunSlowLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementActionFunc_RunSlowRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite); +//sideways stairs +u8 MovementAction_WalkStairDiagonalUpLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkStairDiagonalUpRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkStairDiagonalDownLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkStairDiagonalDownRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_RunStairDiagonalUpLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_RunStairDiagonalUpRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_RunStairDiagonalDownLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_RunStairDiagonalDownRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_RunStairDiagonal_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_AcroBikeDiagonalUpLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_AcroBikeDiagonalDownLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_AcroBikeDiagonalUpRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_AcroBikeDiagonalDownRight_Step0(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FaceUp[])(struct ObjectEvent *, struct Sprite *); @@ -420,6 +440,24 @@ u8 (*const gMovementActionFuncs_DestroyExtraTaskIfAtTop[])(struct ObjectEvent *, u8 (*const gMovementActionFuncs_Figure8[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FlyUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *); +//run slow +u8 (*const gMovementActionFuncs_RunDownSlow[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_RunUpSlow[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_RunLeftSlow[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Sprite *); +//sideways stairs +u8 (*const gMovementActionFuncs_WalkStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_RunStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_RunStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_RunStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_RunStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_AcroBikeDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_AcroBikeDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_AcroBikeDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_AcroBikeDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *); u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) = { [MOVEMENT_ACTION_FACE_DOWN] = gMovementActionFuncs_FaceDown, @@ -580,6 +618,24 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) [MOVEMENT_ACTION_FIGURE_8] = gMovementActionFuncs_Figure8, [MOVEMENT_ACTION_FLY_UP] = gMovementActionFuncs_FlyUp, [MOVEMENT_ACTION_FLY_DOWN] = gMovementActionFuncs_FlyDown, + //run slow + [MOVEMENT_ACTION_RUN_DOWN_SLOW] = gMovementActionFuncs_RunDownSlow, + [MOVEMENT_ACTION_RUN_UP_SLOW] = gMovementActionFuncs_RunUpSlow, + [MOVEMENT_ACTION_RUN_LEFT_SLOW] = gMovementActionFuncs_RunLeftSlow, + [MOVEMENT_ACTION_RUN_RIGHT_SLOW] = gMovementActionFuncs_RunRightSlow, + //sideways stairs + [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT] = gMovementActionFuncs_WalkStairDiagonalUpLeft, + [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT] = gMovementActionFuncs_WalkStairDiagonalUpRight, + [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT] = gMovementActionFuncs_WalkStairDiagonalDownLeft, + [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT] = gMovementActionFuncs_WalkStairDiagonalDownRight, + [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING] = gMovementActionFuncs_RunStairDiagonalUpLeft, + [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING] = gMovementActionFuncs_RunStairDiagonalUpRight, + [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING] = gMovementActionFuncs_RunStairDiagonalDownLeft, + [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING] = gMovementActionFuncs_RunStairDiagonalDownRight, + [MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT] = gMovementActionFuncs_AcroBikeDiagonalUpLeft, + [MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT] = gMovementActionFuncs_AcroBikeDiagonalUpRight, + [MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT] = gMovementActionFuncs_AcroBikeDiagonalDownLeft, + [MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT] = gMovementActionFuncs_AcroBikeDiagonalDownRight, }; u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = { @@ -1511,3 +1567,103 @@ u8 (*const gMovementActionFuncs_DestroyExtraTaskIfAtTop[])(struct ObjectEvent *, MovementAction_DestroyExtraTaskIfAtTop_Step0, MovementAction_Finish, }; + +//slow running +u8 (*const gMovementActionFuncs_RunDownSlow[])(struct ObjectEvent *, struct Sprite *) = { + MovementActionFunc_RunSlowDown_Step0, + MovementActionFunc_RunSlow_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_RunUpSlow[])(struct ObjectEvent *, struct Sprite *) = { + MovementActionFunc_RunSlowUp_Step0, + MovementActionFunc_RunSlow_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_RunLeftSlow[])(struct ObjectEvent *, struct Sprite *) = { + MovementActionFunc_RunSlowLeft_Step0, + MovementActionFunc_RunSlow_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Sprite *) = { + MovementActionFunc_RunSlowRight_Step0, + MovementActionFunc_RunSlow_Step1, + MovementAction_PauseSpriteAnim, +}; + +//sideways stairs +u8 (*const gMovementActionFuncs_WalkStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkStairDiagonalUpLeft_Step0, + MovementAction_WalkSlowDiagonalUpLeft_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_WalkStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkStairDiagonalUpRight_Step0, + MovementAction_WalkSlowDiagonalUpRight_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_WalkStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkStairDiagonalDownLeft_Step0, + MovementAction_WalkSlowDiagonalDownLeft_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_WalkStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkStairDiagonalDownRight_Step0, + MovementAction_WalkSlowDiagonalDownRight_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_RunStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_RunStairDiagonalUpLeft_Step0, + MovementAction_RunStairDiagonal_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_RunStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_RunStairDiagonalUpRight_Step0, + MovementAction_RunStairDiagonal_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_RunStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_RunStairDiagonalDownLeft_Step0, + MovementAction_RunStairDiagonal_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_RunStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_RunStairDiagonalDownRight_Step0, + MovementAction_RunStairDiagonal_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_AcroBikeDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_AcroBikeDiagonalUpLeft_Step0, + MovementAction_RideWaterCurrentLeft_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_AcroBikeDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_AcroBikeDiagonalDownLeft_Step0, + MovementAction_RideWaterCurrentLeft_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_AcroBikeDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_AcroBikeDiagonalUpRight_Step0, + MovementAction_RideWaterCurrentRight_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_AcroBikeDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_AcroBikeDiagonalDownRight_Step0, + MovementAction_RideWaterCurrentRight_Step1, + MovementAction_PauseSpriteAnim, +}; + + diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 1a7d08db27..edbc20acb9 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -841,6 +841,18 @@ const u8 gRunningDirectionAnimNums[] = { [DIR_NORTHEAST] = 21, }; +const u8 gStairsRunningDirectionAnimNums[] = { + [DIR_NONE] = 20, + [DIR_SOUTH] = 20, + [DIR_NORTH] = 21, + [DIR_WEST] = 22, + [DIR_EAST] = 23, + [DIR_SOUTHWEST] = 22, + [DIR_SOUTHEAST] = 23, + [DIR_NORTHWEST] = 22, + [DIR_NORTHEAST] = 23, +}; + const u8 gTrainerFacingDirectionMovementTypes[] = { [DIR_NONE] = MOVEMENT_TYPE_FACE_DOWN, [DIR_SOUTH] = MOVEMENT_TYPE_FACE_DOWN, @@ -876,50 +888,78 @@ static const struct Coords16 sDirectionToVectors[] = { {-1, 1}, { 1, 1}, {-1, -1}, - { 1, -1} + { 1, -1}, + {-2, 1}, + { 2, 1}, + {-2, -1}, + { 2, -1} }; const u8 gFaceDirectionMovementActions[] = { - MOVEMENT_ACTION_FACE_DOWN, - MOVEMENT_ACTION_FACE_DOWN, - MOVEMENT_ACTION_FACE_UP, - MOVEMENT_ACTION_FACE_LEFT, - MOVEMENT_ACTION_FACE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_FACE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_FACE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_FACE_UP, + [DIR_WEST] = MOVEMENT_ACTION_FACE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_FACE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_FACE_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_FACE_RIGHT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_FACE_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_FACE_RIGHT }; const u8 gWalkSlowMovementActions[] = { - MOVEMENT_ACTION_WALK_SLOW_DOWN, - MOVEMENT_ACTION_WALK_SLOW_DOWN, - MOVEMENT_ACTION_WALK_SLOW_UP, - MOVEMENT_ACTION_WALK_SLOW_LEFT, - MOVEMENT_ACTION_WALK_SLOW_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_SLOW_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_SLOW_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_SLOW_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT }; const u8 gWalkNormalMovementActions[] = { - MOVEMENT_ACTION_WALK_NORMAL_DOWN, - MOVEMENT_ACTION_WALK_NORMAL_DOWN, - MOVEMENT_ACTION_WALK_NORMAL_UP, - MOVEMENT_ACTION_WALK_NORMAL_LEFT, - MOVEMENT_ACTION_WALK_NORMAL_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_NORMAL_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_NORMAL_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_NORMAL_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT }; const u8 gWalkFastMovementActions[] = { - MOVEMENT_ACTION_WALK_FAST_DOWN, - MOVEMENT_ACTION_WALK_FAST_DOWN, - MOVEMENT_ACTION_WALK_FAST_UP, - MOVEMENT_ACTION_WALK_FAST_LEFT, - MOVEMENT_ACTION_WALK_FAST_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_WALK_FAST_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_FAST_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_FAST_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_FAST_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_FAST_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT, }; const u8 gRideWaterCurrentMovementActions[] = { - MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN, - MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN, - MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP, - MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, - MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP, + [DIR_WEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT }; const u8 gWalkFastestMovementActions[] = { - MOVEMENT_ACTION_WALK_FASTEST_DOWN, - MOVEMENT_ACTION_WALK_FASTEST_DOWN, - MOVEMENT_ACTION_WALK_FASTEST_UP, - MOVEMENT_ACTION_WALK_FASTEST_LEFT, - MOVEMENT_ACTION_WALK_FASTEST_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_WALK_FASTEST_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_FASTEST_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_FASTEST_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_FASTEST_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_FASTEST_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT }; const u8 gSlideMovementActions[] = { MOVEMENT_ACTION_SLIDE_DOWN, @@ -999,11 +1039,11 @@ const u8 gWalkInPlaceFastestMovementActions[] = { MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT, }; const u8 gAcroWheelieFaceDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP, - MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT, - MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT, }; const u8 gAcroPopWheelieFaceDirectionMovementActions[] = { MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN, @@ -1027,11 +1067,15 @@ const u8 gAcroWheelieHopFaceDirectionMovementActions[] = { MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT, }; const u8 gAcroWheelieHopDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP, - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT, - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT, + /*[DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT*/ }; const u8 gAcroWheelieJumpDirectionMovementActions[] = { MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN, @@ -1068,6 +1112,59 @@ const u8 gAcroEndWheelieMoveDirectionMovementActions[] = { MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT, MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT, }; +// run slow +const u8 gRunSlowMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_RUN_DOWN_SLOW, + [DIR_SOUTH] = MOVEMENT_ACTION_RUN_DOWN_SLOW, + [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, + [DIR_WEST] = MOVEMENT_ACTION_RUN_LEFT_SLOW, + [DIR_EAST] = MOVEMENT_ACTION_RUN_RIGHT_SLOW, +}; + +// sideways stairs +const u8 gDiagonalStairRightMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_JUMP_2_RIGHT, + [DIR_SOUTH] = MOVEMENT_ACTION_JUMP_2_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_JUMP_2_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT, +}; +const u8 gDiagonalStairLeftMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_JUMP_2_LEFT, + [DIR_SOUTH] = MOVEMENT_ACTION_JUMP_2_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_JUMP_2_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT, +}; +const u8 gDiagonalStairRightRunningMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_JUMP_2_RIGHT, + [DIR_SOUTH] = MOVEMENT_ACTION_JUMP_2_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_JUMP_2_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING, + [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING, +}; +const u8 gDiagonalStairLeftRunningMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_JUMP_2_LEFT, + [DIR_SOUTH] = MOVEMENT_ACTION_JUMP_2_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_JUMP_2_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING, + [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING, +}; +const u8 gDiagonalStairLeftAcroBikeMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, + [DIR_SOUTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, + [DIR_NORTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, + [DIR_WEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT, + +}; +const u8 gDiagonalStairRightAcroBikeMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, + [DIR_SOUTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, + [DIR_NORTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, + [DIR_WEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT, +}; const u8 gOppositeDirections[] = { DIR_NORTH, @@ -5058,12 +5155,21 @@ u8 name(u32 idx)\ u8 animIds[sizeof(table)];\ direction = idx;\ memcpy(animIds, (table), sizeof(table));\ - if (direction > DIR_EAST) direction = 0;\ + if (direction > sizeof(table)) direction = 0;\ return animIds[direction];\ } +//sideways stairs +dirn_to_anim(GetDiagonalRightStairsMovement, gDiagonalStairRightMovementActions); +dirn_to_anim(GetDiagonalLeftStairsMovement, gDiagonalStairLeftMovementActions); +dirn_to_anim(GetDiagonalRightStairsRunningMovement, gDiagonalStairRightRunningMovementActions); +dirn_to_anim(GetDiagonalLeftStairsRunningMovement, gDiagonalStairLeftRunningMovementActions); +dirn_to_anim(GetDiagonalLeftAcroBikeMovement, gDiagonalStairLeftAcroBikeMovementActions); +dirn_to_anim(GetDiagonalRightAcroBikeMovement, gDiagonalStairRightAcroBikeMovementActions); + dirn_to_anim(GetFaceDirectionMovementAction, gFaceDirectionMovementActions); dirn_to_anim(GetWalkSlowMovementAction, gWalkSlowMovementActions); +dirn_to_anim(GetPlayerRunSlowMovementAction, gRunSlowMovementActions); dirn_to_anim(GetWalkNormalMovementAction, gWalkNormalMovementActions); dirn_to_anim(GetWalkFastMovementAction, gWalkFastMovementActions); dirn_to_anim(GetRideWaterCurrentMovementAction, gRideWaterCurrentMovementActions); @@ -9044,3 +9150,254 @@ u8 MovementAction_Fly_Finish(struct ObjectEvent *objectEvent, struct Sprite *spr { return TRUE; } + +// running slow +static void StartSlowRunningAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction) +{ + sub_8093AF0(objectEvent, sprite, direction); + npc_apply_anim_looping(objectEvent, sprite, GetRunningDirectionAnimNum(objectEvent->facingDirection)); +} + +#define tDirection data[3] +#define tDelay data[4] +#define tStepNo data[5] +static bool8 obj_npc_ministep_slow(struct Sprite *sprite) +{ + if ((++sprite->tDelay) & 1) + { + Step1(sprite, sprite->tDirection); + sprite->tStepNo++; + } + else + { + Step2(sprite, sprite->tDirection); + sprite->tStepNo += 2; + } + + if (sprite->tStepNo > 15) + return TRUE; + else + return FALSE; +} +static bool8 npc_obj_ministep_stop_on_arrival_slow(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (obj_npc_ministep_slow(sprite)) + { + ShiftStillObjectEventCoords(objectEvent); + objectEvent->triggerGroundEffectsOnStop = TRUE; + sprite->animPaused = TRUE; + return TRUE; + } + return FALSE; +} + + +bool8 MovementActionFunc_RunSlowDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTH); + return MovementActionFunc_RunSlow_Step1(objectEvent, sprite); +} + +bool8 MovementActionFunc_RunSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + StartSlowRunningAnim(objectEvent, sprite, DIR_NORTH); + return MovementActionFunc_RunSlow_Step1(objectEvent, sprite); +} + +bool8 MovementActionFunc_RunSlowLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + StartSlowRunningAnim(objectEvent, sprite, DIR_WEST); + return MovementActionFunc_RunSlow_Step1(objectEvent, sprite); +} + +bool8 MovementActionFunc_RunSlowRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + StartSlowRunningAnim(objectEvent, sprite, DIR_EAST); + return MovementActionFunc_RunSlow_Step1(objectEvent, sprite); +} + +bool8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival_slow(objectEvent, sprite)) + { + sprite->data[2] = 2; + return TRUE; + } + return FALSE; +} + +//sideways stairs +u8 GetSidewaysStairsToRightDirection(s16 x, s16 y, u8 z) +{ + static bool8 (*const direction[])(u8) = { + MetatileBehavior_IsWalkSouth, + MetatileBehavior_IsWalkNorth, + MetatileBehavior_IsSidewaysStairsRight, + MetatileBehavior_IsSidewaysStairsRight, + }; + + u8 b; + u8 index = z; + + if (index == 0) + return 0; + else if (index > 4) + index -= 4; + + index--; + b = MapGridGetMetatileBehaviorAt(x, y); + + if (direction[index](b) == 1) + return index + 1; + + return 0; +} + +u8 GetSidewaysStairsToLeftDirection(s16 x, s16 y, u8 z) +{ + static bool8 (*const direction[])(u8) = { + MetatileBehavior_IsWalkSouth, + MetatileBehavior_IsWalkNorth, + MetatileBehavior_IsSidewaysStairsLeft, + MetatileBehavior_IsSidewaysStairsLeft, + }; + + u8 b; + u8 index = z; + + if (index == 0) + return 0; + else if (index > 4) + index -= 4; + + index--; + b = MapGridGetMetatileBehaviorAt(x, y); + + if (direction[index](b) == 1) + return index + 1; + + return 0; +} + +bool8 MovementAction_WalkStairDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_WEST; + objectEvent->facingDirectionLocked = TRUE; + sub_8093B60(objectEvent, sprite, DIR_NORTHWEST); + return MovementAction_WalkSlowDiagonalUpLeft_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkStairDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_EAST; + objectEvent->facingDirectionLocked = TRUE; + sub_8093B60(objectEvent, sprite, DIR_NORTHEAST); + return MovementAction_WalkSlowDiagonalUpRight_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkStairDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_WEST; + objectEvent->facingDirectionLocked = TRUE; + sub_8093B60(objectEvent, sprite, DIR_SOUTHWEST); + return MovementAction_WalkSlowDiagonalDownLeft_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkStairDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_EAST; + objectEvent->facingDirectionLocked = TRUE; + sub_8093B60(objectEvent, sprite, DIR_SOUTHEAST); + return MovementAction_WalkSlowDiagonalDownRight_Step1(objectEvent, sprite); +} + +bool8 MovementAction_RunStairDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_WEST; + objectEvent->facingDirectionLocked = TRUE; + StartSlowRunningAnim(objectEvent, sprite, DIR_NORTHWEST); + return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); +} + +bool8 MovementAction_RunStairDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_EAST; + objectEvent->facingDirectionLocked = TRUE; + StartSlowRunningAnim(objectEvent, sprite, DIR_NORTHEAST); + return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); +} + +bool8 MovementAction_RunStairDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_WEST; + objectEvent->facingDirectionLocked = TRUE; + StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTHWEST); + return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); +} + +bool8 MovementAction_RunStairDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_EAST; + objectEvent->facingDirectionLocked = TRUE; + StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTHEAST); + return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); +} + +bool8 MovementAction_RunStairDiagonal_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(objectEvent, sprite)) + { + sprite->data[2] = 2; + return TRUE; + } + return FALSE; +} + +bool8 MovementAction_AcroBikeDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_WEST; + objectEvent->facingDirectionLocked = TRUE; + #if SLOW_MOVEMENT_ON_STAIRS + do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 0); + #else + do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 2); + #endif + return MovementAction_RideWaterCurrentLeft_Step1(objectEvent, sprite); +} + +bool8 MovementAction_AcroBikeDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_WEST; + objectEvent->facingDirectionLocked = TRUE; + #if SLOW_MOVEMENT_ON_STAIRS + do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 0); + #else + do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 2); + #endif + return MovementAction_RideWaterCurrentLeft_Step1(objectEvent, sprite); +} + +bool8 MovementAction_AcroBikeDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_EAST; + objectEvent->facingDirectionLocked = TRUE; + #if SLOW_MOVEMENT_ON_STAIRS + do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 0); + #else + do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 2); + #endif + return MovementAction_RideWaterCurrentRight_Step1(objectEvent, sprite); +} + +bool8 MovementAction_AcroBikeDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + objectEvent->facingDirection = DIR_EAST; + objectEvent->facingDirectionLocked = TRUE; + #if SLOW_MOVEMENT_ON_STAIRS + do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 0); + #else + do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 2); + #endif + return MovementAction_RideWaterCurrentRight_Step1(objectEvent, sprite); +} + diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 4f85ad628b..0a98f3dc7c 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -44,6 +44,8 @@ static void MovePlayerAvatarUsingKeypadInput(u8, u16, u16); static void PlayerAllowForcedMovementIfMovingSameDirection(); static bool8 TryDoMetatileBehaviorForcedMovement(); static u8 GetForcedMovementByMetatileBehavior(); +static bool8 IsSidewaysStairToRight(s16, s16, u8); +static bool8 IsSidewaysStairToLeft(s16, s16, u8); static bool8 ForcedMovement_None(void); static bool8 ForcedMovement_Slip(void); @@ -90,6 +92,8 @@ static bool8 sub_808B618(void); static bool8 PlayerIsAnimActive(void); static bool8 PlayerCheckIfAnimFinishedOrInactive(void); +static void PlayerGoSlow(u8 direction); +static void PlayerRunSlow(u8 direction); static void PlayerRun(u8); static void PlayerNotOnBikeCollide(u8); static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8); @@ -407,7 +411,7 @@ static u8 GetForcedMovementByMetatileBehavior(void) { u8 metatileBehavior = gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior; - for (i = 0; i < 18; i++) + for (i = 0; i < NELEMS(sForcedMovementTestFuncs); i++) { if (sForcedMovementTestFuncs[i](metatileBehavior)) return i + 1; @@ -607,7 +611,7 @@ static void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys) static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) { u8 collision = CheckForPlayerAvatarCollision(direction); - + if (collision) { if (collision == COLLISION_LEDGE_JUMP) @@ -620,6 +624,26 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) PlayerNotOnBikeCollideWithFarawayIslandMew(direction); return; } + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + { + PlayerSidewaysStairsToRight(direction); + return; + } + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + { + PlayerSidewaysStairsToLeft(direction); + return; + } + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_RUNNING) + { + PlayerSidewaysStairsToRightRunning(direction); + return; + } + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_RUNNING) + { + PlayerSidewaysStairsToLeftRunning(direction); + return; + } else { u8 adjustedCollision = collision - COLLISION_STOP_SURFING; @@ -628,10 +652,10 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) return; } } - + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) { - // speed 2 is fast, same speed as running + // speed 2 is fast, same speed as running PlayerGoSpeed2(direction); return; } @@ -639,16 +663,65 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_UNDERWATER) && (heldKeys & B_BUTTON) && FlagGet(FLAG_SYS_B_DASH) && IsRunningDisallowed(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) == 0) { - PlayerRun(direction); + if (PlayerIsMovingOnRockStairs(direction)) + PlayerRunSlow(direction); + else + PlayerRun(direction); + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH; return; } else { - PlayerGoSpeed1(direction); + if (PlayerIsMovingOnRockStairs(direction)) + PlayerGoSlow(direction); + else + PlayerGoSpeed1(direction); } } +bool32 PlayerIsMovingOnRockStairs(u8 direction) +{ + #if SLOW_MOVEMENT_ON_STAIRS + struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + s16 x = objectEvent->currentCoords.x; + s16 y = objectEvent->currentCoords.y; + + switch (direction) + { + case DIR_NORTH: + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); + case DIR_SOUTH: + MoveCoords(DIR_SOUTH, &x, &y); + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); + /* + case DIR_WEST: + MoveCoords(DIR_WEST, &x, &y); + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); + case DIR_EAST: + MoveCoords(DIR_EAST, &x, &y); + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); + case DIR_SOUTHWEST: + MoveCoords(DIR_SOUTHWEST, &x, &y); + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); + case DIR_SOUTHEAST: + MoveCoords(DIR_SOUTHEAST, &x, &y); + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); + case DIR_NORTHWEST: + MoveCoords(DIR_NORTHWEST, &x, &y); + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); + case DIR_NORTHEAST: + MoveCoords(DIR_NORTHEAST, &x, &y); + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); + */ + default: + return FALSE; + } + #else + return FALSE + #endif +} + static u8 CheckForPlayerAvatarCollision(u8 direction) { s16 x, y; @@ -656,6 +729,7 @@ static u8 CheckForPlayerAvatarCollision(u8 direction) x = playerObjEvent->currentCoords.x; y = playerObjEvent->currentCoords.y; + MoveCoords(direction, &x, &y); return CheckForObjectEventCollision(playerObjEvent, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); } @@ -691,7 +765,26 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u return COLLISION_ROTATING_GATE; CheckAcroBikeCollision(x, y, metatileBehavior, &collision); } - return collision; + + if (collision != COLLISION_IMPASSABLE) + { + if (IsSidewaysStairToRight(x, y, direction)) + { + if (gMain.heldKeys & B_BUTTON) + return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_RUNNING; + else + return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING; + } + else if (IsSidewaysStairToLeft(x, y, direction)) + { + if (gMain.heldKeys & B_BUTTON) + return COLLISION_SIDEWAYS_STAIRS_TO_LEFT_RUNNING; + else + return COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING; + } + } + + return collision; } static u8 sub_808B164(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) @@ -953,6 +1046,16 @@ void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement) } } +// slow +static void PlayerGoSlow(u8 direction) +{ + PlayerSetAnimId(GetWalkSlowMovementAction(direction), 2); +} +static void PlayerRunSlow(u8 direction) +{ + PlayerSetAnimId(GetPlayerRunSlowMovementAction(direction), 2); +} + // normal speed (1 speed) void PlayerGoSpeed1(u8 a) { @@ -965,6 +1068,7 @@ void PlayerGoSpeed2(u8 a) PlayerSetAnimId(GetWalkFastMovementAction(a), 2); } +// acro bike speed void PlayerRideWaterCurrent(u8 a) { PlayerSetAnimId(GetRideWaterCurrentMovementAction(a), 2); @@ -2215,3 +2319,83 @@ static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *delayTimer) *delayTimer = 0; return sSpinDirections[object->facingDirection]; } + +//sideways stairs +static bool8 IsSidewaysStairToRight(s16 x, s16 y, u8 z) +{ + if (GetSidewaysStairsToRightDirection(x, y, z) != 0) + return TRUE; + else + return FALSE; +} + +static bool8 IsSidewaysStairToLeft(s16 x, s16 y, u8 z) +{ + if (GetSidewaysStairsToLeftDirection(x, y, z) != 0) + return TRUE; + else + return FALSE; +} + +u8 GetRightStairsDirection(u8 direction) +{ + switch (direction) + { + case DIR_WEST: + return DIR_SOUTHWEST; + case DIR_EAST: + return DIR_NORTHEAST; + default: + if (direction > DIR_EAST) + direction -= DIR_EAST; + + return direction; + } +} + +u8 GetLeftStairsDirection(u8 direction) +{ + switch (direction) + { + case DIR_WEST: + return DIR_NORTHWEST; + case DIR_EAST: + return DIR_SOUTHEAST; + default: + if (direction > DIR_EAST) + direction -= DIR_EAST; + + return direction; + } +} + +void PlayerSidewaysStairsToRight(u8 direction) +{ + PlayerSetAnimId(GetDiagonalRightStairsMovement(direction), 8); +} + +void PlayerSidewaysStairsToLeft(u8 direction) +{ + PlayerSetAnimId(GetDiagonalLeftStairsMovement(direction), 8); +} + +void PlayerSidewaysStairsToRightRunning(u8 direction) +{ + PlayerSetAnimId(GetDiagonalRightStairsRunningMovement(direction), 8); +} + +void PlayerSidewaysStairsToLeftRunning(u8 direction) +{ + PlayerSetAnimId(GetDiagonalLeftStairsRunningMovement(direction), 8); +} + +void PlayerSidewaysStairsToAcroBikeLeft(u8 direction) +{ + PlayerSetAnimId(GetDiagonalLeftAcroBikeMovement(direction), 8); +} + +void PlayerSidewaysStairsToAcroBikeRight(u8 direction) +{ + PlayerSetAnimId(GetDiagonalRightAcroBikeMovement(direction), 8); +} + diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 2a9304a4d8..fa773a3b7e 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -83,9 +83,9 @@ static const u8 sTileBitAttributes[] = [MB_SLIDE_NORTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), [MB_SLIDE_SOUTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_49] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_4A] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_UNUSED_4B] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_RIGHT] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_LEFT] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_ROCK_STAIRS] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_UNUSED_4C] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_UNUSED_4D] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_UNUSED_4E] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), @@ -1495,3 +1495,27 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) else return FALSE; } + +bool8 MetatileBehavior_IsSidewaysStairsRight(u8 metatileBehavior) +{ + if (metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSidewaysStairsLeft(u8 metatileBehavior) +{ + if (metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsRockStairs(u8 metatileBehavior) +{ + if (metatileBehavior == MB_ROCK_STAIRS) // || metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT || metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT) + return TRUE; + else + return FALSE; +} From e4674ccd03d351e70571ec805729e5b8639ec31c Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 4 Jun 2020 20:30:27 -0600 Subject: [PATCH 006/544] fully working walk/run/mach bike/acro bike regular movement --- include/constants/event_object_movement.h | 3 - include/constants/global.h | 2 + include/constants/metatile_behaviors.h | 14 +-- include/field_player_avatar.h | 12 +- include/global.fieldmap.h | 6 +- include/metatile_behavior.h | 10 +- src/bike.c | 51 +++++---- src/event_object_movement.c | 86 ++++++++------- src/field_player_avatar.c | 127 +++++++++++++--------- src/metatile_behavior.c | 72 ++++++++++-- 10 files changed, 234 insertions(+), 149 deletions(-) diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 9bd3e87c6c..5172e12d51 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -1,8 +1,6 @@ #ifndef GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H #define GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H -#define SLOW_MOVEMENT_ON_STAIRS TRUE // change to false to keep emerald's normal movement speed on outdoor stairs - #define MOVEMENT_TYPE_NONE 0x0 #define MOVEMENT_TYPE_LOOK_AROUND 0x1 #define MOVEMENT_TYPE_WANDER_AROUND 0x2 @@ -265,7 +263,6 @@ #define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT 0xAD //sideways stairs - mach bike - #define MOVEMENT_ACTION_STEP_END 0xFE #endif // GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H diff --git a/include/constants/global.h b/include/constants/global.h index 213ccca5b5..4a3f0618a8 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -118,4 +118,6 @@ #define DIR_NORTHWEST 7 #define DIR_NORTHEAST 8 +#define SLOW_MOVEMENT_ON_STAIRS TRUE // change to false to keep emerald's normal movement speed on outdoor stairs + #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index ef79f0b6d3..07e0553800 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -74,13 +74,13 @@ #define MB_SLIDE_NORTH 0x46 #define MB_SLIDE_SOUTH 0x47 #define MB_TRICK_HOUSE_PUZZLE_8_FLOOR 0x48 -#define MB_SIDEWAYS_STAIRS_RIGHT 0x49 -#define MB_SIDEWAYS_STAIRS_LEFT 0x4A -#define MB_ROCK_STAIRS 0x4B -#define MB_UNUSED_4C 0x4C -#define MB_UNUSED_4D 0x4D -#define MB_UNUSED_4E 0x4E -#define MB_UNUSED_4F 0x4F +#define MB_SIDEWAYS_STAIRS_RIGHT_SIDE 0x49 +#define MB_SIDEWAYS_STAIRS_LEFT_SIDE 0x4A +#define MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP 0x4B +#define MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP 0x4C +#define MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM 0x4D +#define MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM 0x4E +#define MB_ROCK_STAIRS 0x4F #define MB_EASTWARD_CURRENT 0x50 #define MB_WESTWARD_CURRENT 0x51 #define MB_NORTHWARD_CURRENT 0x52 diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 3177a887ce..d7b04d40ff 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -66,12 +66,12 @@ u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); void StartFishing(u8 rod); bool32 PlayerIsMovingOnRockStairs(u8 direction); //sideways stairs -u8 GetRightStairsDirection(u8 direction); -u8 GetLeftStairsDirection(u8 direction); -void PlayerSidewaysStairsToRight(u8 direction); -void PlayerSidewaysStairsToLeft(u8 direction); -void PlayerSidewaysStairsToRightRunning(u8 direction); -void PlayerSidewaysStairsToLeftRunning(u8 direction); +u8 GetRightSideStairsDirection(u8 direction); +u8 GetLeftSideStairsDirection(u8 direction); +void PlayerSidewaysStairsRightSide(u8 direction); +void PlayerSidewaysStairsLeftSide(u8 direction); +void PlayerSidewaysStairsRightSideRunning(u8 direction); +void PlayerSidewaysStairsLeftSideRunning(u8 direction); void PlayerSidewaysStairsToAcroBikeLeft(u8 direction); void PlayerSidewaysStairsToAcroBikeRight(u8 direction); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index baedb9bf37..a4c486c960 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -279,10 +279,8 @@ enum COLLISION_VERTICAL_RAIL, COLLISION_HORIZONTAL_RAIL, //sideways_stairs - COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING, - COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING, - COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_RUNNING, - COLLISION_SIDEWAYS_STAIRS_TO_LEFT_RUNNING, + COLLISION_SIDEWAYS_STAIRS_TO_RIGHT, + COLLISION_SIDEWAYS_STAIRS_TO_LEFT }; // player running states diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index f5781a3371..715f9ef127 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -147,7 +147,13 @@ bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); bool8 MetatileBehavior_IsRockStairs(u8 metatileBehavior); //sideways stairs -bool8 MetatileBehavior_IsSidewaysStairsRight(u8); -bool8 MetatileBehavior_IsSidewaysStairsLeft(u8); +bool8 MetatileBehavior_IsSidewaysStairsRightSide(u8); +bool8 MetatileBehavior_IsSidewaysStairsLeftSide(u8); +bool8 MetatileBehavior_IsSidewaysStairsRightSideTop(u8 metatileBehavior); +bool8 MetatileBehavior_IsSidewaysStairsLeftSideTop(u8 metatileBehavior); +bool8 MetatileBehavior_IsSidewaysStairsRightSideBottom(u8 metatileBehavior); +bool8 MetatileBehavior_IsSidewaysStairsLeftSideBottom(u8 metatileBehavior); +bool8 MetatileBehavior_IsSidewaysStairsRightSideAny(u8 metatileBehavior); +bool8 MetatileBehavior_IsSidewaysStairsLeftSideAny(u8 metatileBehavior); #endif // GUARD_METATILE_BEHAVIOR diff --git a/src/bike.c b/src/bike.c index 18dbda6ba3..a26451778e 100644 --- a/src/bike.c +++ b/src/bike.c @@ -240,25 +240,24 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) PlayerOnBikeCollide(direction); } } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) { gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeSpeed = SPEED_STANDING; - PlayerGoSpeed2(GetLeftStairsDirection(direction)); + PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); //PlayerSidewaysStairsToAcroBikeLeft(direction); return; } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) { gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeSpeed = SPEED_STANDING; //PlayerSidewaysStairsToAcroBikeRight(direction); - PlayerGoSpeed2(GetRightStairsDirection(direction)); + PlayerGoSpeed2(GetRightSideStairsDirection(direction)); return; } else { - // to do: this sometimes crashes based on the metatile behaviours (eg. holding up while traveling down sideways stairs to sw) if (PlayerIsMovingOnRockStairs(direction)) gPlayerAvatar.bikeFrameCounter--; @@ -296,15 +295,14 @@ static void MachBikeTransition_TrySlowDown(u8 direction) } else { - /* - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) { - return PlayerGoSpeed2(GetLeftStairsDirection(direction)); + return PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); //return PlayerSidewaysStairsToLeftMachBike(direction); } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) { - return PlayerGoSpeed2(GetRightStairsDirection(direction)); + return PlayerGoSpeed2(GetRightSideStairsDirection(direction)); //return PlayerSidewaysStairsToRightMachBike(direction); }*/ @@ -315,6 +313,7 @@ static void MachBikeTransition_TrySlowDown(u8 direction) // the acro bike requires the input handler to be executed before the transition can. static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys) { + sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection); } @@ -603,10 +602,10 @@ static void AcroBikeTransition_Moving(u8 direction) } else { - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) - return PlayerGoSpeed2(GetRightStairsDirection(direction)); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) - return PlayerGoSpeed2(GetLeftStairsDirection(direction)); + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) + return PlayerGoSpeed2(GetRightSideStairsDirection(direction)); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + return PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); if (PlayerIsMovingOnRockStairs(direction)) PlayerGoSpeed2(direction); @@ -614,10 +613,10 @@ static void AcroBikeTransition_Moving(u8 direction) PlayerRideWaterCurrent(direction); /* works, but might be better to keep rock stairs to up/down for mach bike - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) - direction = GetRightStairsDirection(direction); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) - direction = GetLeftStairsDirection(direction); + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) + direction = GetRightSideStairsDirection(direction); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + direction = GetLeftSideStairsDirection(direction); if (PlayerIsMovingOnRockStairs(direction)) PlayerGoSpeed2(direction); @@ -692,10 +691,10 @@ static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) else { derp: - /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) - direction = GetLeftStairsDirection(direction); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) - direction = GetRightStairsDirection(direction); + /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + direction = GetLeftSideStairsDirection(direction); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) + direction = GetRightSideStairsDirection(direction); */ PlayerMovingHoppingWheelie(direction); } @@ -765,10 +764,10 @@ static void AcroBikeTransition_WheelieMoving(u8 direction) return; } - /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) - direction = GetLeftStairsDirection(direction); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) - direction = GetRightStairsDirection(direction);*/ + /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + direction = GetLeftSideStairsDirection(direction); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) + direction = GetRightSideStairsDirection(direction);*/ PlayerWheelieMove(direction); gPlayerAvatar.runningState = MOVING; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index edbc20acb9..f6bc55f398 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1122,34 +1122,34 @@ const u8 gRunSlowMovementActions[] = { }; // sideways stairs -const u8 gDiagonalStairRightMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_JUMP_2_RIGHT, - [DIR_SOUTH] = MOVEMENT_ACTION_JUMP_2_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_JUMP_2_UP, +const u8 gDiagonalStairLeftSideMovementActions[] = { //movement actions for stairs on left side of a wall (southwest and northeast) + [DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT, [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT, }; -const u8 gDiagonalStairLeftMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_JUMP_2_LEFT, - [DIR_SOUTH] = MOVEMENT_ACTION_JUMP_2_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_JUMP_2_UP, +const u8 gDiagonalStairRightSideMovementActions[] = { //movement actions for stairs on right side of a wall (southeast and northwest) + [DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT, [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT, }; -const u8 gDiagonalStairRightRunningMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_JUMP_2_RIGHT, - [DIR_SOUTH] = MOVEMENT_ACTION_JUMP_2_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_JUMP_2_UP, - [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING, - [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING, -}; -const u8 gDiagonalStairLeftRunningMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_JUMP_2_LEFT, - [DIR_SOUTH] = MOVEMENT_ACTION_JUMP_2_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_JUMP_2_UP, +const u8 gDiagonalStairRightSideRunningMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_RUN_DOWN_SLOW, + [DIR_SOUTH] = MOVEMENT_ACTION_RUN_DOWN_SLOW, + [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING, [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING, }; +const u8 gDiagonalStairLeftSideRunningMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_RUN_DOWN_SLOW, + [DIR_SOUTH] = MOVEMENT_ACTION_RUN_DOWN_SLOW, + [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, + [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING, + [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING, +}; const u8 gDiagonalStairLeftAcroBikeMovementActions[] = { [DIR_NONE] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, [DIR_SOUTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, @@ -5160,10 +5160,10 @@ u8 name(u32 idx)\ } //sideways stairs -dirn_to_anim(GetDiagonalRightStairsMovement, gDiagonalStairRightMovementActions); -dirn_to_anim(GetDiagonalLeftStairsMovement, gDiagonalStairLeftMovementActions); -dirn_to_anim(GetDiagonalRightStairsRunningMovement, gDiagonalStairRightRunningMovementActions); -dirn_to_anim(GetDiagonalLeftStairsRunningMovement, gDiagonalStairLeftRunningMovementActions); +dirn_to_anim(GetDiagonalRightStairsMovement, gDiagonalStairRightSideMovementActions); +dirn_to_anim(GetDiagonalLeftStairsMovement, gDiagonalStairLeftSideMovementActions); +dirn_to_anim(GetDiagonalRightStairsRunningMovement, gDiagonalStairRightSideRunningMovementActions); +dirn_to_anim(GetDiagonalLeftStairsRunningMovement, gDiagonalStairLeftSideRunningMovementActions); dirn_to_anim(GetDiagonalLeftAcroBikeMovement, gDiagonalStairLeftAcroBikeMovementActions); dirn_to_anim(GetDiagonalRightAcroBikeMovement, gDiagonalStairRightAcroBikeMovementActions); @@ -9227,57 +9227,63 @@ bool8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct S } //sideways stairs +/* u8 GetSidewaysStairsToRightDirection(s16 x, s16 y, u8 z) { - static bool8 (*const direction[])(u8) = { + static bool8 (*const sRightStairsBehaviors[])(u8) = { MetatileBehavior_IsWalkSouth, MetatileBehavior_IsWalkNorth, MetatileBehavior_IsSidewaysStairsRight, MetatileBehavior_IsSidewaysStairsRight, }; - u8 b; + u8 metatileBehavior; u8 index = z; - if (index == 0) - return 0; - else if (index > 4) - index -= 4; + if (index == DIR_NONE) + return DIR_NONE; + else if (index > DIR_EAST) + index -= DIR_EAST; index--; - b = MapGridGetMetatileBehaviorAt(x, y); - - if (direction[index](b) == 1) + metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsEastBlocked(metatileBehavior)) + return DIR_NONE; + + if (sRightStairsBehaviors[index](metatileBehavior)) return index + 1; - return 0; + return DIR_NONE; } u8 GetSidewaysStairsToLeftDirection(s16 x, s16 y, u8 z) { - static bool8 (*const direction[])(u8) = { + static bool8 (*const sLeftStairsBehaviors[])(u8) = { MetatileBehavior_IsWalkSouth, MetatileBehavior_IsWalkNorth, MetatileBehavior_IsSidewaysStairsLeft, MetatileBehavior_IsSidewaysStairsLeft, }; - u8 b; + u8 metatileBehavior; u8 index = z; - if (index == 0) - return 0; + if (index == DIR_NONE) + return DIR_NONE; else if (index > 4) index -= 4; index--; - b = MapGridGetMetatileBehaviorAt(x, y); + metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsWestBlocked(metatileBehavior)) + return DIR_NONE; - if (direction[index](b) == 1) + if (sLeftStairsBehaviors[index](metatileBehavior) == 1) return index + 1; - return 0; + return DIR_NONE; } +*/ bool8 MovementAction_WalkStairDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 0a98f3dc7c..cec876555c 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -624,24 +624,20 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) PlayerNotOnBikeCollideWithFarawayIslandMew(direction); return; } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING) + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) { - PlayerSidewaysStairsToRight(direction); + if (heldKeys & B_BUTTON && FlagGet(FLAG_SYS_B_DASH)) + PlayerSidewaysStairsRightSideRunning(direction); + else + PlayerSidewaysStairsRightSide(direction); return; } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING) + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) { - PlayerSidewaysStairsToLeft(direction); - return; - } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_RUNNING) - { - PlayerSidewaysStairsToRightRunning(direction); - return; - } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT_RUNNING) - { - PlayerSidewaysStairsToLeftRunning(direction); + if (heldKeys & B_BUTTON && FlagGet(FLAG_SYS_B_DASH)) + return PlayerSidewaysStairsLeftSideRunning(direction); + else + return PlayerSidewaysStairsLeftSide(direction); return; } else @@ -748,6 +744,8 @@ static u8 sub_808B028(u8 direction) u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) { u8 collision = GetCollisionAtCoords(objectEvent, x, y, direction); + u8 currentBehavior = MapGridGetMetatileBehaviorAt(objectEvent->currentCoords.x, objectEvent->currentCoords.y); + if (collision == COLLISION_ELEVATION_MISMATCH && CanStopSurfing(x, y, direction)) return COLLISION_STOP_SURFING; @@ -766,25 +764,50 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u CheckAcroBikeCollision(x, y, metatileBehavior, &collision); } - if (collision != COLLISION_IMPASSABLE) + //sideways stairs logic + if (MetatileBehavior_IsSidewaysStairsLeftSideTop(metatileBehavior) && direction == DIR_EAST) + return COLLISION_IMPASSABLE; //moving onto left-side top edge east from ground -> cannot move + else if (MetatileBehavior_IsSidewaysStairsRightSideTop(metatileBehavior) && direction == DIR_WEST) + return COLLISION_IMPASSABLE; //moving onto left-side top edge east from ground -> cannot move + else if (MetatileBehavior_IsSidewaysStairsRightSideBottom(metatileBehavior) && (direction == DIR_EAST || direction == DIR_SOUTH)) + return COLLISION_IMPASSABLE; + else if (MetatileBehavior_IsSidewaysStairsLeftSideBottom(metatileBehavior) && (direction == DIR_WEST || direction == DIR_SOUTH)) + return COLLISION_IMPASSABLE; + + if (MetatileBehavior_IsSidewaysStairsLeftSide(metatileBehavior)) { - if (IsSidewaysStairToRight(x, y, direction)) - { - if (gMain.heldKeys & B_BUTTON) - return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_RUNNING; - else - return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT_WALKING; - } - else if (IsSidewaysStairToLeft(x, y, direction)) - { - if (gMain.heldKeys & B_BUTTON) - return COLLISION_SIDEWAYS_STAIRS_TO_LEFT_RUNNING; - else - return COLLISION_SIDEWAYS_STAIRS_TO_LEFT_WALKING; - } + //moving ONTO left side stair + if (direction == DIR_WEST && currentBehavior != metatileBehavior) + return collision; //moving onto top part of left-stair going left, so no diagonal + else + return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; // move diagonally + } + else if (MetatileBehavior_IsSidewaysStairsRightSide(metatileBehavior)) + { + //moving ONTO right side stair + if (direction == DIR_EAST && currentBehavior != metatileBehavior) + return collision; //moving onto top part of right-stair going right, so no diagonal + else + return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; + } + else if (MetatileBehavior_IsSidewaysStairsLeftSideAny(currentBehavior)) + { + //moving OFF of any left side stair + if (direction == DIR_WEST && metatileBehavior != currentBehavior) + return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; //moving off of left stairs onto non-stair -> move diagonal + else + return collision; //moving off of left side stair to east -> move east + } + else if (MetatileBehavior_IsSidewaysStairsRightSideAny(currentBehavior)) + { + //moving OFF of any right side stair + if (direction == DIR_EAST && metatileBehavior != currentBehavior) + return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; //moving off right stair onto non-stair -> move diagonal + else + return collision; } - return collision; + return collision; } static u8 sub_808B164(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) @@ -2321,6 +2344,7 @@ static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *delayTimer) } //sideways stairs +/* static bool8 IsSidewaysStairToRight(s16 x, s16 y, u8 z) { if (GetSidewaysStairsToRightDirection(x, y, z) != 0) @@ -2336,24 +2360,9 @@ static bool8 IsSidewaysStairToLeft(s16 x, s16 y, u8 z) else return FALSE; } +*/ -u8 GetRightStairsDirection(u8 direction) -{ - switch (direction) - { - case DIR_WEST: - return DIR_SOUTHWEST; - case DIR_EAST: - return DIR_NORTHEAST; - default: - if (direction > DIR_EAST) - direction -= DIR_EAST; - - return direction; - } -} - -u8 GetLeftStairsDirection(u8 direction) +u8 GetRightSideStairsDirection(u8 direction) { switch (direction) { @@ -2365,26 +2374,42 @@ u8 GetLeftStairsDirection(u8 direction) if (direction > DIR_EAST) direction -= DIR_EAST; + return direction; + } +} + +u8 GetLeftSideStairsDirection(u8 direction) +{ + switch (direction) + { + case DIR_WEST: + return DIR_SOUTHWEST; + case DIR_EAST: + return DIR_NORTHEAST; + default: + if (direction > DIR_EAST) + direction -= DIR_EAST; + return direction; } } -void PlayerSidewaysStairsToRight(u8 direction) +void PlayerSidewaysStairsRightSide(u8 direction) { PlayerSetAnimId(GetDiagonalRightStairsMovement(direction), 8); } -void PlayerSidewaysStairsToLeft(u8 direction) +void PlayerSidewaysStairsLeftSide(u8 direction) { PlayerSetAnimId(GetDiagonalLeftStairsMovement(direction), 8); } -void PlayerSidewaysStairsToRightRunning(u8 direction) +void PlayerSidewaysStairsRightSideRunning(u8 direction) { PlayerSetAnimId(GetDiagonalRightStairsRunningMovement(direction), 8); } -void PlayerSidewaysStairsToLeftRunning(u8 direction) +void PlayerSidewaysStairsLeftSideRunning(u8 direction) { PlayerSetAnimId(GetDiagonalLeftStairsRunningMovement(direction), 8); } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index fa773a3b7e..f490d25931 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -83,13 +83,13 @@ static const u8 sTileBitAttributes[] = [MB_SLIDE_NORTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), [MB_SLIDE_SOUTH] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_ATTRIBUTES(TRUE, FALSE, FALSE), - [MB_SIDEWAYS_STAIRS_RIGHT] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SIDEWAYS_STAIRS_LEFT] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_LEFT_SIDE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_ROCK_STAIRS] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_4C] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_4D] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_4E] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_4F] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_EASTWARD_CURRENT] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), [MB_WESTWARD_CURRENT] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), [MB_NORTHWARD_CURRENT] = TILE_ATTRIBUTES(TRUE, TRUE, FALSE), @@ -1496,17 +1496,69 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsSidewaysStairsRight(u8 metatileBehavior) +bool8 MetatileBehavior_IsSidewaysStairsRightSide(u8 metatileBehavior) { - if (metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT) + if (metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE || metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM) return TRUE; else return FALSE; } -bool8 MetatileBehavior_IsSidewaysStairsLeft(u8 metatileBehavior) +bool8 MetatileBehavior_IsSidewaysStairsLeftSide(u8 metatileBehavior) { - if (metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT) + if (metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE || metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSidewaysStairsRightSideTop(u8 metatileBehavior) +{ + if (metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSidewaysStairsLeftSideTop(u8 metatileBehavior) +{ + if (metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSidewaysStairsRightSideBottom(u8 metatileBehavior) +{ + if (metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSidewaysStairsLeftSideBottom(u8 metatileBehavior) +{ + if (metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSidewaysStairsRightSideAny(u8 metatileBehavior) +{ + if (metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE + || metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM + || metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP) + return TRUE; + else + return FALSE; +} + +bool8 MetatileBehavior_IsSidewaysStairsLeftSideAny(u8 metatileBehavior) +{ + if (metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE + || metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM + || metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP) return TRUE; else return FALSE; From 228b76e136e162655bc27f0713cb9968599093f4 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 4 Jun 2020 22:56:25 -0600 Subject: [PATCH 007/544] finish conditional slow stairs movement, clean up code a bit --- include/event_object_movement.h | 3 +- include/field_player_avatar.h | 2 - src/bike.c | 107 +++--- .../movement_action_func_tables.h | 24 +- src/event_object_movement.c | 346 +++++++++--------- src/field_player_avatar.c | 51 +-- src/metatile_behavior.c | 2 +- 7 files changed, 251 insertions(+), 284 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index e8f8df1a4b..84c89a85d3 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -437,7 +437,6 @@ u8 GetDiagonalRightStairsMovement(u32); u8 GetDiagonalLeftStairsMovement(u32); u8 GetDiagonalRightStairsRunningMovement(u32); u8 GetDiagonalLeftStairsRunningMovement(u32); -u8 GetDiagonalLeftAcroBikeMovement(u32); -u8 GetDiagonalRightAcroBikeMovement(u32); +extern u8 gSidewaysStairsDirection; #endif //GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index d7b04d40ff..f9cdfa838d 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -72,7 +72,5 @@ void PlayerSidewaysStairsRightSide(u8 direction); void PlayerSidewaysStairsLeftSide(u8 direction); void PlayerSidewaysStairsRightSideRunning(u8 direction); void PlayerSidewaysStairsLeftSideRunning(u8 direction); -void PlayerSidewaysStairsToAcroBikeLeft(u8 direction); -void PlayerSidewaysStairsToAcroBikeRight(u8 direction); #endif // GUARD_FIELD_PLAYER_AVATAR_H diff --git a/src/bike.c b/src/bike.c index a26451778e..a21dcb33e1 100644 --- a/src/bike.c +++ b/src/bike.c @@ -178,10 +178,7 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) // the difference between face direction and turn direction is that one changes direction while the other does the animation of turning as well as changing direction. static void MachBikeTransition_FaceDirection(u8 direction) -{ - //if (direction > DIR_EAST) - // direction -= DIR_EAST; - +{ PlayerFaceDirection(direction); Bike_SetBikeStill(); } @@ -190,19 +187,13 @@ static void MachBikeTransition_TurnDirection(u8 direction) { struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - //if (direction > DIR_EAST) - // direction -= DIR_EAST; - if (CanBikeFaceDirOnMetatile(direction, playerObjEvent->currentMetatileBehavior)) { PlayerTurnInPlace(direction); Bike_SetBikeStill(); } else - { - //if (playerObjEvent->facingDirection > DIR_EAST) - // playerObjEvent->facingDirection -= DIR_EAST; - + { MachBikeTransition_FaceDirection(playerObjEvent->facingDirection); } } @@ -242,19 +233,33 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) } else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) { - gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.bikeSpeed = SPEED_STANDING; - PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); - //PlayerSidewaysStairsToAcroBikeLeft(direction); - return; + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + gPlayerAvatar.bikeFrameCounter = 0; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; + PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); + return; + #else + gPlayerAvatar.bikeFrameCounter = 2; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; + PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); + return; + #endif + } else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) { - gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.bikeSpeed = SPEED_STANDING; - //PlayerSidewaysStairsToAcroBikeRight(direction); - PlayerGoSpeed2(GetRightSideStairsDirection(direction)); - return; + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + gPlayerAvatar.bikeFrameCounter = 0; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; + PlayerGoSpeed2(GetRightSideStairsDirection(direction)); + return; + #else + gPlayerAvatar.bikeFrameCounter = 2; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; + PlayerGoSpeed2(GetRightSideStairsDirection(direction)); + return; + #endif + } else { @@ -295,16 +300,12 @@ static void MachBikeTransition_TrySlowDown(u8 direction) } else { - /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - { - return PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); - //return PlayerSidewaysStairsToLeftMachBike(direction); - } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - { - return PlayerGoSpeed2(GetRightSideStairsDirection(direction)); - //return PlayerSidewaysStairsToRightMachBike(direction); - }*/ + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + return PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) + return PlayerGoSpeed2(GetRightSideStairsDirection(direction)); + #endif sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); } @@ -313,12 +314,13 @@ static void MachBikeTransition_TrySlowDown(u8 direction) // the acro bike requires the input handler to be executed before the transition can. static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys) { - + gSidewaysStairsDirection = newDirection; sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection); } static u8 CheckMovementInputAcroBike(u8 *newDirection, u16 newKeys, u16 heldKeys) { + gSidewaysStairsDirection = *newDirection; return sAcroBikeInputHandlers[gPlayerAvatar.acroBikeState](newDirection, newKeys, heldKeys); } @@ -407,6 +409,8 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16 struct ObjectEvent *playerObjEvent; direction = GetPlayerMovementDirection(); + gSidewaysStairsDirection = direction; + playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; gPlayerAvatar.runningState = NOT_MOVING; @@ -611,18 +615,6 @@ static void AcroBikeTransition_Moving(u8 direction) PlayerGoSpeed2(direction); else PlayerRideWaterCurrent(direction); - - /* works, but might be better to keep rock stairs to up/down for mach bike - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - direction = GetRightSideStairsDirection(direction); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - direction = GetLeftSideStairsDirection(direction); - - if (PlayerIsMovingOnRockStairs(direction)) - PlayerGoSpeed2(direction); - else - PlayerRideWaterCurrent(direction); - */ } } @@ -691,11 +683,11 @@ static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) else { derp: - /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - direction = GetLeftSideStairsDirection(direction); + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + gSidewaysStairsDirection = GetLeftSideStairsDirection(direction); else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - direction = GetRightSideStairsDirection(direction); - */ + gSidewaysStairsDirection = GetRightSideStairsDirection(direction); + PlayerMovingHoppingWheelie(direction); } } @@ -764,10 +756,10 @@ static void AcroBikeTransition_WheelieMoving(u8 direction) return; } - /*if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - direction = GetLeftSideStairsDirection(direction); + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + gSidewaysStairsDirection = GetLeftSideStairsDirection(direction); else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - direction = GetRightSideStairsDirection(direction);*/ + gSidewaysStairsDirection = GetRightSideStairsDirection(direction); PlayerWheelieMove(direction); gPlayerAvatar.runningState = MOVING; @@ -803,6 +795,12 @@ static void AcroBikeTransition_WheelieRisingMoving(u8 direction) } return; } + + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + gSidewaysStairsDirection = GetLeftSideStairsDirection(direction); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) + gSidewaysStairsDirection = GetRightSideStairsDirection(direction); + PlayerPopWheelieWhileMoving(direction); gPlayerAvatar.runningState = MOVING; } @@ -826,6 +824,12 @@ static void AcroBikeTransition_WheelieLoweringMoving(u8 direction) PlayerEndWheelie(direction); return; } + + if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) + gSidewaysStairsDirection = GetLeftSideStairsDirection(direction); + else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) + gSidewaysStairsDirection = GetRightSideStairsDirection(direction); + PlayerEndWheelieWhileMoving(direction); } @@ -1086,6 +1090,7 @@ void Bike_UpdateBikeCounterSpeed(u8 counter) static void Bike_SetBikeStill(void) { + gSidewaysStairsDirection = gObjectEvents[gPlayerAvatar.objectEventId].facingDirection; gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeSpeed = SPEED_STANDING; } diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index cc1b522159..30c1fac2aa 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -1596,25 +1596,41 @@ u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Spr //sideways stairs u8 (*const gMovementActionFuncs_WalkStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { MovementAction_WalkStairDiagonalUpLeft_Step0, - MovementAction_WalkSlowDiagonalUpLeft_Step1, + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + MovementAction_WalkSlowDiagonalUpLeft_Step1, + #else + MovementAction_WalkNormalDiagonalUpLeft_Step1, + #endif MovementAction_PauseSpriteAnim, }; u8 (*const gMovementActionFuncs_WalkStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *) = { MovementAction_WalkStairDiagonalUpRight_Step0, - MovementAction_WalkSlowDiagonalUpRight_Step1, + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + MovementAction_WalkSlowDiagonalUpRight_Step1, + #else + MovementAction_WalkNormalDiagonalUpRight_Step1, + #endif MovementAction_PauseSpriteAnim, }; u8 (*const gMovementActionFuncs_WalkStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *) = { MovementAction_WalkStairDiagonalDownLeft_Step0, - MovementAction_WalkSlowDiagonalDownLeft_Step1, + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + MovementAction_WalkSlowDiagonalDownLeft_Step1, + #else + MovementAction_WalkNormalDiagonalDownLeft_Step1, + #endif MovementAction_PauseSpriteAnim, }; u8 (*const gMovementActionFuncs_WalkStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *) = { MovementAction_WalkStairDiagonalDownRight_Step0, - MovementAction_WalkSlowDiagonalDownRight_Step1, + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + MovementAction_WalkSlowDiagonalDownRight_Step1, + #else + MovementAction_WalkNormalDiagonalDownRight_Step1, + #endif MovementAction_PauseSpriteAnim, }; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index f6bc55f398..70970c80bc 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -57,6 +57,7 @@ static u8 setup##_callback(struct ObjectEvent *objectEvent, struct Sprite *sprit EWRAM_DATA u8 sCurrentReflectionType = 0; EWRAM_DATA u16 sCurrentSpecialObjectPaletteTag = 0; EWRAM_DATA struct LockedAnimObjectEvents *gLockedAnimObjectEvents = {0}; +EWRAM_DATA u8 gSidewaysStairsDirection = 0; static void MoveCoordsInDirection(u32, s16 *, s16 *, s16, s16); static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *, struct Sprite *); @@ -681,10 +682,10 @@ const u8 gFaceDirectionAnimNums[] = { [DIR_NORTH] = 1, [DIR_WEST] = 2, [DIR_EAST] = 3, - [DIR_SOUTHWEST] = 0, - [DIR_SOUTHEAST] = 0, - [DIR_NORTHWEST] = 1, - [DIR_NORTHEAST] = 1, + [DIR_SOUTHWEST] = 2, //0, + [DIR_SOUTHEAST] = 3, //0, + [DIR_NORTHWEST] = 2, //1, + [DIR_NORTHEAST] = 3, //1, }; const u8 gMoveDirectionAnimNums[] = { [DIR_NONE] = 4, @@ -747,10 +748,10 @@ const u8 gAcroWheelieDirectionAnimNums[] = { [DIR_NORTH] = 21, [DIR_WEST] = 22, [DIR_EAST] = 23, - [DIR_SOUTHWEST] = 20, - [DIR_SOUTHEAST] = 20, - [DIR_NORTHWEST] = 21, - [DIR_NORTHEAST] = 21, + [DIR_SOUTHWEST] = 22, //20, + [DIR_SOUTHEAST] = 23, //20, + [DIR_NORTHWEST] = 22, //21, + [DIR_NORTHEAST] = 23, //21, }; const u8 gUnrefAnimNums_08375633[] = { [DIR_NONE] = 24, @@ -769,10 +770,10 @@ const u8 gAcroEndWheelieDirectionAnimNums[] = { [DIR_NORTH] = 29, [DIR_WEST] = 30, [DIR_EAST] = 31, - [DIR_SOUTHWEST] = 28, - [DIR_SOUTHEAST] = 28, - [DIR_NORTHWEST] = 29, - [DIR_NORTHEAST] = 29, + [DIR_SOUTHWEST] = 30, //28, + [DIR_SOUTHEAST] = 31, //28, + [DIR_NORTHWEST] = 30, //29, + [DIR_NORTHEAST] = 31, //29, }; const u8 gAcroUnusedActionDirectionAnimNums[] = { [DIR_NONE] = 32, @@ -791,10 +792,10 @@ const u8 gAcroWheeliePedalDirectionAnimNums[] = { [DIR_NORTH] = 37, [DIR_WEST] = 38, [DIR_EAST] = 39, - [DIR_SOUTHWEST] = 36, - [DIR_SOUTHEAST] = 36, - [DIR_NORTHWEST] = 37, - [DIR_NORTHEAST] = 37, + [DIR_SOUTHWEST] = 38, //36, + [DIR_SOUTHEAST] = 39, //36, + [DIR_NORTHWEST] = 38, //37, + [DIR_NORTHEAST] = 39, //37, }; const u8 gFishingDirectionAnimNums[] = { [DIR_NONE] = 0, @@ -1044,27 +1045,43 @@ const u8 gAcroWheelieFaceDirectionMovementActions[] = { [DIR_NORTH] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP, [DIR_WEST] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT, [DIR_EAST] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT }; const u8 gAcroPopWheelieFaceDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN, - MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN, - MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP, - MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT, - MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT, }; const u8 gAcroEndWheelieFaceDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN, - MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN, - MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP, - MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT, - MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT, }; const u8 gAcroWheelieHopFaceDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP, - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT, - MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT, }; const u8 gAcroWheelieHopDirectionMovementActions[] = { [DIR_NONE] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN, @@ -1072,45 +1089,65 @@ const u8 gAcroWheelieHopDirectionMovementActions[] = { [DIR_NORTH] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP, [DIR_WEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT, [DIR_EAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT, - /*[DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT, - [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT, [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT, - [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT*/ + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT, }; const u8 gAcroWheelieJumpDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP, - MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT, - MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT, }; const u8 gAcroWheelieInPlaceDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP, - MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT, - MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT, }; const u8 gAcroPopWheelieMoveDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN, - MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN, - MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP, - MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT, - MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT, }; const u8 gAcroWheelieMoveDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN, - MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP, - MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT, - MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT, }; const u8 gAcroEndWheelieMoveDirectionMovementActions[] = { - MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN, - MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN, - MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP, - MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT, - MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP, + [DIR_WEST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT, }; // run slow const u8 gRunSlowMovementActions[] = { @@ -1150,21 +1187,6 @@ const u8 gDiagonalStairLeftSideRunningMovementActions[] = { [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING, [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING, }; -const u8 gDiagonalStairLeftAcroBikeMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, - [DIR_SOUTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, - [DIR_NORTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, - [DIR_WEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT, - [DIR_EAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT, - -}; -const u8 gDiagonalStairRightAcroBikeMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, - [DIR_SOUTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, - [DIR_NORTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, - [DIR_WEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT, - [DIR_EAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT, -}; const u8 gOppositeDirections[] = { DIR_NORTH, @@ -5164,8 +5186,6 @@ dirn_to_anim(GetDiagonalRightStairsMovement, gDiagonalStairRightSideMovementActi dirn_to_anim(GetDiagonalLeftStairsMovement, gDiagonalStairLeftSideMovementActions); dirn_to_anim(GetDiagonalRightStairsRunningMovement, gDiagonalStairRightSideRunningMovementActions); dirn_to_anim(GetDiagonalLeftStairsRunningMovement, gDiagonalStairLeftSideRunningMovementActions); -dirn_to_anim(GetDiagonalLeftAcroBikeMovement, gDiagonalStairLeftAcroBikeMovementActions); -dirn_to_anim(GetDiagonalRightAcroBikeMovement, gDiagonalStairRightAcroBikeMovementActions); dirn_to_anim(GetFaceDirectionMovementAction, gFaceDirectionMovementActions); dirn_to_anim(GetWalkSlowMovementAction, gWalkSlowMovementActions); @@ -7123,7 +7143,7 @@ bool8 MovementAction_AcroWheelieHopFaceRight_Step1(struct ObjectEvent *objectEve bool8 MovementAction_AcroWheelieHopDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, DIR_SOUTH, 1, 1); + sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 1, 1); return MovementAction_AcroWheelieHopDown_Step1(objectEvent, sprite); } @@ -7140,7 +7160,7 @@ bool8 MovementAction_AcroWheelieHopDown_Step1(struct ObjectEvent *objectEvent, s bool8 MovementAction_AcroWheelieHopUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, DIR_NORTH, 1, 1); + sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 1, 1); return MovementAction_AcroWheelieHopUp_Step1(objectEvent, sprite); } @@ -7157,7 +7177,7 @@ bool8 MovementAction_AcroWheelieHopUp_Step1(struct ObjectEvent *objectEvent, str bool8 MovementAction_AcroWheelieHopLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, DIR_WEST, 1, 1); + sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 1, 1); return MovementAction_AcroWheelieHopLeft_Step1(objectEvent, sprite); } @@ -7174,7 +7194,7 @@ bool8 MovementAction_AcroWheelieHopLeft_Step1(struct ObjectEvent *objectEvent, s bool8 MovementAction_AcroWheelieHopRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, DIR_EAST, 1, 1); + sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 1, 1); return MovementAction_AcroWheelieHopRight_Step1(objectEvent, sprite); } @@ -7191,7 +7211,7 @@ bool8 MovementAction_AcroWheelieHopRight_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, DIR_SOUTH, 2, 0); + sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 2, 0); return MovementAction_AcroWheelieJumpDown_Step1(objectEvent, sprite); } @@ -7208,7 +7228,7 @@ bool8 MovementAction_AcroWheelieJumpDown_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, DIR_NORTH, 2, 0); + sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 2, 0); return MovementAction_AcroWheelieJumpUp_Step1(objectEvent, sprite); } @@ -7225,7 +7245,7 @@ bool8 MovementAction_AcroWheelieJumpUp_Step1(struct ObjectEvent *objectEvent, st bool8 MovementAction_AcroWheelieJumpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, DIR_WEST, 2, 0); + sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 2, 0); return MovementAction_AcroWheelieJumpLeft_Step1(objectEvent, sprite); } @@ -7242,7 +7262,7 @@ bool8 MovementAction_AcroWheelieJumpLeft_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, DIR_EAST, 2, 0); + sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 2, 0); return MovementAction_AcroWheelieJumpRight_Step1(objectEvent, sprite); } @@ -7259,25 +7279,25 @@ bool8 MovementAction_AcroWheelieJumpRight_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieInPlaceDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, DIR_SOUTH, GetAcroWheeliePedalDirectionAnimNum(DIR_SOUTH), 8); + sub_8094554(objectEvent, sprite, gSidewaysStairsDirection, GetAcroWheeliePedalDirectionAnimNum(gSidewaysStairsDirection), 8); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } bool8 MovementAction_AcroWheelieInPlaceUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, DIR_NORTH, GetAcroWheeliePedalDirectionAnimNum(DIR_NORTH), 8); + sub_8094554(objectEvent, sprite, gSidewaysStairsDirection, GetAcroWheeliePedalDirectionAnimNum(gSidewaysStairsDirection), 8); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } bool8 MovementAction_AcroWheelieInPlaceLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, DIR_WEST, GetAcroWheeliePedalDirectionAnimNum(DIR_WEST), 8); + sub_8094554(objectEvent, sprite, gSidewaysStairsDirection, GetAcroWheeliePedalDirectionAnimNum(gSidewaysStairsDirection), 8); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } bool8 MovementAction_AcroWheelieInPlaceRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, DIR_EAST, GetAcroWheeliePedalDirectionAnimNum(DIR_EAST), 8); + sub_8094554(objectEvent, sprite, gSidewaysStairsDirection, GetAcroWheeliePedalDirectionAnimNum(gSidewaysStairsDirection), 8); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } @@ -7290,7 +7310,7 @@ void sub_80960C8(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 dire bool8 MovementAction_AcroPopWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_80960C8(objectEvent, sprite, DIR_SOUTH, 1); + sub_80960C8(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroPopWheelieMoveDown_Step1(objectEvent, sprite); } @@ -7306,7 +7326,7 @@ bool8 MovementAction_AcroPopWheelieMoveDown_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroPopWheelieMoveUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_80960C8(objectEvent, sprite, DIR_NORTH, 1); + sub_80960C8(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroPopWheelieMoveUp_Step1(objectEvent, sprite); } @@ -7322,7 +7342,7 @@ bool8 MovementAction_AcroPopWheelieMoveUp_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroPopWheelieMoveLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_80960C8(objectEvent, sprite, DIR_WEST, 1); + sub_80960C8(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroPopWheelieMoveLeft_Step1(objectEvent, sprite); } @@ -7338,7 +7358,7 @@ bool8 MovementAction_AcroPopWheelieMoveLeft_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroPopWheelieMoveRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_80960C8(objectEvent, sprite, DIR_EAST, 1); + sub_80960C8(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroPopWheelieMoveRight_Step1(objectEvent, sprite); } @@ -7360,7 +7380,7 @@ void sub_8096200(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 dire bool8 MovementAction_AcroWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096200(objectEvent, sprite, DIR_SOUTH, 1); + sub_8096200(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroWheelieMoveDown_Step1(objectEvent, sprite); } @@ -7376,7 +7396,7 @@ bool8 MovementAction_AcroWheelieMoveDown_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieMoveUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096200(objectEvent, sprite, DIR_NORTH, 1); + sub_8096200(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroWheelieMoveUp_Step1(objectEvent, sprite); } @@ -7392,7 +7412,7 @@ bool8 MovementAction_AcroWheelieMoveUp_Step1(struct ObjectEvent *objectEvent, st bool8 MovementAction_AcroWheelieMoveLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096200(objectEvent, sprite, DIR_WEST, 1); + sub_8096200(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroWheelieMoveLeft_Step1(objectEvent, sprite); } @@ -7408,7 +7428,7 @@ bool8 MovementAction_AcroWheelieMoveLeft_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieMoveRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096200(objectEvent, sprite, DIR_EAST, 1); + sub_8096200(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroWheelieMoveRight_Step1(objectEvent, sprite); } @@ -7431,7 +7451,7 @@ void sub_8096330(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 dire bool8 MovementAction_AcroEndWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096330(objectEvent, sprite, DIR_SOUTH, 1); + sub_8096330(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroEndWheelieMoveDown_Step1(objectEvent, sprite); } @@ -7447,7 +7467,7 @@ bool8 MovementAction_AcroEndWheelieMoveDown_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroEndWheelieMoveUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096330(objectEvent, sprite, DIR_NORTH, 1); + sub_8096330(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroEndWheelieMoveUp_Step1(objectEvent, sprite); } @@ -7463,7 +7483,7 @@ bool8 MovementAction_AcroEndWheelieMoveUp_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroEndWheelieMoveLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096330(objectEvent, sprite, DIR_WEST, 1); + sub_8096330(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroEndWheelieMoveLeft_Step1(objectEvent, sprite); } @@ -7479,7 +7499,7 @@ bool8 MovementAction_AcroEndWheelieMoveLeft_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroEndWheelieMoveRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096330(objectEvent, sprite, DIR_EAST, 1); + sub_8096330(objectEvent, sprite, gSidewaysStairsDirection, 1); return MovementAction_AcroEndWheelieMoveRight_Step1(objectEvent, sprite); } @@ -9227,101 +9247,67 @@ bool8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct S } //sideways stairs -/* -u8 GetSidewaysStairsToRightDirection(s16 x, s16 y, u8 z) -{ - static bool8 (*const sRightStairsBehaviors[])(u8) = { - MetatileBehavior_IsWalkSouth, - MetatileBehavior_IsWalkNorth, - MetatileBehavior_IsSidewaysStairsRight, - MetatileBehavior_IsSidewaysStairsRight, - }; - - u8 metatileBehavior; - u8 index = z; - - if (index == DIR_NONE) - return DIR_NONE; - else if (index > DIR_EAST) - index -= DIR_EAST; - - index--; - metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (MetatileBehavior_IsEastBlocked(metatileBehavior)) - return DIR_NONE; - - if (sRightStairsBehaviors[index](metatileBehavior)) - return index + 1; - - return DIR_NONE; -} - -u8 GetSidewaysStairsToLeftDirection(s16 x, s16 y, u8 z) -{ - static bool8 (*const sLeftStairsBehaviors[])(u8) = { - MetatileBehavior_IsWalkSouth, - MetatileBehavior_IsWalkNorth, - MetatileBehavior_IsSidewaysStairsLeft, - MetatileBehavior_IsSidewaysStairsLeft, - }; - - u8 metatileBehavior; - u8 index = z; - - if (index == DIR_NONE) - return DIR_NONE; - else if (index > 4) - index -= 4; - - index--; - metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (MetatileBehavior_IsWestBlocked(metatileBehavior)) - return DIR_NONE; - - if (sLeftStairsBehaviors[index](metatileBehavior) == 1) - return index + 1; - - return DIR_NONE; -} -*/ - bool8 MovementAction_WalkStairDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->facingDirection = DIR_WEST; objectEvent->facingDirectionLocked = TRUE; - sub_8093B60(objectEvent, sprite, DIR_NORTHWEST); - return MovementAction_WalkSlowDiagonalUpLeft_Step1(objectEvent, sprite); + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + sub_8093B60(objectEvent, sprite, DIR_NORTHWEST); + return MovementAction_WalkSlowDiagonalUpLeft_Step1(objectEvent, sprite); + #else + do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 0); + return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); + #endif } bool8 MovementAction_WalkStairDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->facingDirection = DIR_EAST; objectEvent->facingDirectionLocked = TRUE; - sub_8093B60(objectEvent, sprite, DIR_NORTHEAST); - return MovementAction_WalkSlowDiagonalUpRight_Step1(objectEvent, sprite); + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + sub_8093B60(objectEvent, sprite, DIR_NORTHEAST); + return MovementAction_WalkSlowDiagonalUpRight_Step1(objectEvent, sprite); + #else + do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 0); + return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); + #endif } bool8 MovementAction_WalkStairDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->facingDirection = DIR_WEST; objectEvent->facingDirectionLocked = TRUE; - sub_8093B60(objectEvent, sprite, DIR_SOUTHWEST); - return MovementAction_WalkSlowDiagonalDownLeft_Step1(objectEvent, sprite); + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + sub_8093B60(objectEvent, sprite, DIR_SOUTHWEST); + return MovementAction_WalkSlowDiagonalDownLeft_Step1(objectEvent, sprite); + #else + do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 0); + return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); + #endif } bool8 MovementAction_WalkStairDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->facingDirection = DIR_EAST; objectEvent->facingDirectionLocked = TRUE; - sub_8093B60(objectEvent, sprite, DIR_SOUTHEAST); - return MovementAction_WalkSlowDiagonalDownRight_Step1(objectEvent, sprite); + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + sub_8093B60(objectEvent, sprite, DIR_SOUTHEAST); + return MovementAction_WalkSlowDiagonalDownRight_Step1(objectEvent, sprite); + #else + do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 0); + return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); + #endif } bool8 MovementAction_RunStairDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->facingDirection = DIR_WEST; objectEvent->facingDirectionLocked = TRUE; - StartSlowRunningAnim(objectEvent, sprite, DIR_NORTHWEST); + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + StartSlowRunningAnim(objectEvent, sprite, DIR_NORTHWEST); + #else + StartRunningAnim(objectEvent, sprite, DIR_NORTHWEST); + #endif return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); } @@ -9329,7 +9315,11 @@ bool8 MovementAction_RunStairDiagonalUpRight_Step0(struct ObjectEvent *objectEve { objectEvent->facingDirection = DIR_EAST; objectEvent->facingDirectionLocked = TRUE; - StartSlowRunningAnim(objectEvent, sprite, DIR_NORTHEAST); + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + StartSlowRunningAnim(objectEvent, sprite, DIR_NORTHEAST); + #else + StartRunningAnim(objectEvent, sprite, DIR_NORTHEAST); + #endif return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); } @@ -9337,7 +9327,11 @@ bool8 MovementAction_RunStairDiagonalDownLeft_Step0(struct ObjectEvent *objectEv { objectEvent->facingDirection = DIR_WEST; objectEvent->facingDirectionLocked = TRUE; - StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTHWEST); + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTHWEST); + #else + StartRunningAnim(objectEvent, sprite, DIR_SOUTHWEST); + #endif return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); } @@ -9345,7 +9339,11 @@ bool8 MovementAction_RunStairDiagonalDownRight_Step0(struct ObjectEvent *objectE { objectEvent->facingDirection = DIR_EAST; objectEvent->facingDirectionLocked = TRUE; - StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTHEAST); + #if SLOW_MOVEMENT_ON_STAIRS == TRUE + StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTHEAST); + #else + StartRunningAnim(objectEvent, sprite, DIR_SOUTHEAST); + #endif return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); } @@ -9363,7 +9361,7 @@ bool8 MovementAction_AcroBikeDiagonalUpLeft_Step0(struct ObjectEvent *objectEven { objectEvent->facingDirection = DIR_WEST; objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS + #if SLOW_MOVEMENT_ON_STAIRS == TRUE do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 0); #else do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 2); @@ -9375,7 +9373,7 @@ bool8 MovementAction_AcroBikeDiagonalDownLeft_Step0(struct ObjectEvent *objectEv { objectEvent->facingDirection = DIR_WEST; objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS + #if SLOW_MOVEMENT_ON_STAIRS == TRUE do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 0); #else do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 2); @@ -9387,7 +9385,7 @@ bool8 MovementAction_AcroBikeDiagonalUpRight_Step0(struct ObjectEvent *objectEve { objectEvent->facingDirection = DIR_EAST; objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS + #if SLOW_MOVEMENT_ON_STAIRS == TRUE do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 0); #else do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 2); @@ -9399,7 +9397,7 @@ bool8 MovementAction_AcroBikeDiagonalDownRight_Step0(struct ObjectEvent *objectE { objectEvent->facingDirection = DIR_EAST; objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS + #if SLOW_MOVEMENT_ON_STAIRS == TRUE do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 0); #else do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 2); diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index cec876555c..b130021912 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -690,31 +690,11 @@ bool32 PlayerIsMovingOnRockStairs(u8 direction) case DIR_SOUTH: MoveCoords(DIR_SOUTH, &x, &y); return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - /* - case DIR_WEST: - MoveCoords(DIR_WEST, &x, &y); - return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - case DIR_EAST: - MoveCoords(DIR_EAST, &x, &y); - return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - case DIR_SOUTHWEST: - MoveCoords(DIR_SOUTHWEST, &x, &y); - return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - case DIR_SOUTHEAST: - MoveCoords(DIR_SOUTHEAST, &x, &y); - return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - case DIR_NORTHWEST: - MoveCoords(DIR_NORTHWEST, &x, &y); - return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - case DIR_NORTHEAST: - MoveCoords(DIR_NORTHEAST, &x, &y); - return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - */ default: return FALSE; } #else - return FALSE + return FALSE; #endif } @@ -2344,24 +2324,6 @@ static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *delayTimer) } //sideways stairs -/* -static bool8 IsSidewaysStairToRight(s16 x, s16 y, u8 z) -{ - if (GetSidewaysStairsToRightDirection(x, y, z) != 0) - return TRUE; - else - return FALSE; -} - -static bool8 IsSidewaysStairToLeft(s16 x, s16 y, u8 z) -{ - if (GetSidewaysStairsToLeftDirection(x, y, z) != 0) - return TRUE; - else - return FALSE; -} -*/ - u8 GetRightSideStairsDirection(u8 direction) { switch (direction) @@ -2413,14 +2375,3 @@ void PlayerSidewaysStairsLeftSideRunning(u8 direction) { PlayerSetAnimId(GetDiagonalLeftStairsRunningMovement(direction), 8); } - -void PlayerSidewaysStairsToAcroBikeLeft(u8 direction) -{ - PlayerSetAnimId(GetDiagonalLeftAcroBikeMovement(direction), 8); -} - -void PlayerSidewaysStairsToAcroBikeRight(u8 direction) -{ - PlayerSetAnimId(GetDiagonalRightAcroBikeMovement(direction), 8); -} - diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index f490d25931..86e4ec98b3 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1566,7 +1566,7 @@ bool8 MetatileBehavior_IsSidewaysStairsLeftSideAny(u8 metatileBehavior) bool8 MetatileBehavior_IsRockStairs(u8 metatileBehavior) { - if (metatileBehavior == MB_ROCK_STAIRS) // || metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT || metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT) + if (metatileBehavior == MB_ROCK_STAIRS) return TRUE; else return FALSE; From 492683eeb6367d86bc84d2040828cbd0de065dd1 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 6 Jun 2020 13:19:17 -0600 Subject: [PATCH 008/544] fix stairs north dir bug --- src/field_player_avatar.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index b130021912..e156774d42 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -753,6 +753,9 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u return COLLISION_IMPASSABLE; else if (MetatileBehavior_IsSidewaysStairsLeftSideBottom(metatileBehavior) && (direction == DIR_WEST || direction == DIR_SOUTH)) return COLLISION_IMPASSABLE; + else if ((MetatileBehavior_IsSidewaysStairsLeftSideTop(currentBehavior) || MetatileBehavior_IsSidewaysStairsRightSideTop(currentBehavior)) + && direction == DIR_NORTH && collision == COLLISION_NONE) + return COLLISION_IMPASSABLE; //trying to move north off of top-most tile onto same level doesn't work if (MetatileBehavior_IsSidewaysStairsLeftSide(metatileBehavior)) { From 7d4545c088e9d181c763dc23a2d9223f0a0d160e Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 7 Jun 2020 07:13:47 -0600 Subject: [PATCH 009/544] fix same-level movement on stairs --- src/event_object_movement.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 70970c80bc..5ce8a8e986 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1160,30 +1160,30 @@ const u8 gRunSlowMovementActions[] = { // sideways stairs const u8 gDiagonalStairLeftSideMovementActions[] = { //movement actions for stairs on left side of a wall (southwest and northeast) - [DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_DOWN, - [DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, + [DIR_NONE] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_NORMAL_UP, [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT, [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT, }; const u8 gDiagonalStairRightSideMovementActions[] = { //movement actions for stairs on right side of a wall (southeast and northwest) - [DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_DOWN, - [DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, + [DIR_NONE] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_NORMAL_UP, [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT, [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT, }; const u8 gDiagonalStairRightSideRunningMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_RUN_DOWN_SLOW, - [DIR_SOUTH] = MOVEMENT_ACTION_RUN_DOWN_SLOW, - [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, + [DIR_NONE] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_PLAYER_RUN_UP, [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING, [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING, }; const u8 gDiagonalStairLeftSideRunningMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_RUN_DOWN_SLOW, - [DIR_SOUTH] = MOVEMENT_ACTION_RUN_DOWN_SLOW, - [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, + [DIR_NONE] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_PLAYER_RUN_UP, [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING, [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING, }; From 3f94abf03d7b63bcd4a8332a7833759f8c72fe35 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 7 Jun 2020 07:37:39 -0600 Subject: [PATCH 010/544] fix collision freezing --- src/event_object_movement.c | 22 +++++++++++ src/field_player_avatar.c | 75 ++++++++++++++++--------------------- 2 files changed, 55 insertions(+), 42 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 5ce8a8e986..9e02edfef4 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4873,6 +4873,28 @@ static u8 GetCollisionInDirection(struct ObjectEvent *objectEvent, u8 direction) u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) { u8 direction = dir; + u8 currentBehavior = MapGridGetMetatileBehaviorAt(objectEvent->currentCoords.x, objectEvent->currentCoords.y); + u8 nextBehavior = MapGridGetMetatileBehaviorAt(x, y); + + //sideways stairs checks + if (MetatileBehavior_IsSidewaysStairsLeftSideTop(nextBehavior) && dir == DIR_EAST) + return COLLISION_IMPASSABLE; //moving onto left-side top edge east from regular ground -> nope + else if (MetatileBehavior_IsSidewaysStairsRightSideTop(nextBehavior) && dir == DIR_WEST) + return COLLISION_IMPASSABLE; //moving onto left-side top edge east from regular ground -> nope + else if (MetatileBehavior_IsSidewaysStairsRightSideBottom(nextBehavior) && (dir == DIR_EAST || dir == DIR_SOUTH)) + return COLLISION_IMPASSABLE; //moving into right-side bottom edge from regular ground -> nah + else if (MetatileBehavior_IsSidewaysStairsLeftSideBottom(nextBehavior) && (dir == DIR_WEST || dir == DIR_SOUTH)) + return COLLISION_IMPASSABLE; //moving onto left-side bottom edge from regular ground -> nah + else if ((MetatileBehavior_IsSidewaysStairsLeftSideTop(currentBehavior) || MetatileBehavior_IsSidewaysStairsRightSideTop(currentBehavior)) + && dir == DIR_NORTH) + return COLLISION_IMPASSABLE; //trying to move north off of top-most tile onto same level doesn't work + else if (!(MetatileBehavior_IsSidewaysStairsLeftSideTop(currentBehavior) || MetatileBehavior_IsSidewaysStairsRightSideTop(currentBehavior)) + && dir == DIR_SOUTH && (MetatileBehavior_IsSidewaysStairsLeftSideTop(nextBehavior) || MetatileBehavior_IsSidewaysStairsRightSideTop(nextBehavior))) + return COLLISION_IMPASSABLE; //trying to move south onto top stair tile at same level from non-stair -> no + else if (!(MetatileBehavior_IsSidewaysStairsLeftSideBottom(currentBehavior) || MetatileBehavior_IsSidewaysStairsRightSideBottom(currentBehavior)) + && dir == DIR_NORTH && (MetatileBehavior_IsSidewaysStairsLeftSideBottom(nextBehavior) || MetatileBehavior_IsSidewaysStairsRightSideBottom(nextBehavior))) + return COLLISION_IMPASSABLE; //trying to move north onto top stair tile at same level from non-stair -> no + if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y)) return COLLISION_OUTSIDE_RANGE; else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction)) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e156774d42..dd52e3a612 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -745,49 +745,40 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u } //sideways stairs logic - if (MetatileBehavior_IsSidewaysStairsLeftSideTop(metatileBehavior) && direction == DIR_EAST) - return COLLISION_IMPASSABLE; //moving onto left-side top edge east from ground -> cannot move - else if (MetatileBehavior_IsSidewaysStairsRightSideTop(metatileBehavior) && direction == DIR_WEST) - return COLLISION_IMPASSABLE; //moving onto left-side top edge east from ground -> cannot move - else if (MetatileBehavior_IsSidewaysStairsRightSideBottom(metatileBehavior) && (direction == DIR_EAST || direction == DIR_SOUTH)) - return COLLISION_IMPASSABLE; - else if (MetatileBehavior_IsSidewaysStairsLeftSideBottom(metatileBehavior) && (direction == DIR_WEST || direction == DIR_SOUTH)) - return COLLISION_IMPASSABLE; - else if ((MetatileBehavior_IsSidewaysStairsLeftSideTop(currentBehavior) || MetatileBehavior_IsSidewaysStairsRightSideTop(currentBehavior)) - && direction == DIR_NORTH && collision == COLLISION_NONE) - return COLLISION_IMPASSABLE; //trying to move north off of top-most tile onto same level doesn't work - - if (MetatileBehavior_IsSidewaysStairsLeftSide(metatileBehavior)) + if (direction == DIR_WEST || direction == DIR_EAST) { - //moving ONTO left side stair - if (direction == DIR_WEST && currentBehavior != metatileBehavior) - return collision; //moving onto top part of left-stair going left, so no diagonal - else - return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; // move diagonally - } - else if (MetatileBehavior_IsSidewaysStairsRightSide(metatileBehavior)) - { - //moving ONTO right side stair - if (direction == DIR_EAST && currentBehavior != metatileBehavior) - return collision; //moving onto top part of right-stair going right, so no diagonal - else - return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; - } - else if (MetatileBehavior_IsSidewaysStairsLeftSideAny(currentBehavior)) - { - //moving OFF of any left side stair - if (direction == DIR_WEST && metatileBehavior != currentBehavior) - return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; //moving off of left stairs onto non-stair -> move diagonal - else - return collision; //moving off of left side stair to east -> move east - } - else if (MetatileBehavior_IsSidewaysStairsRightSideAny(currentBehavior)) - { - //moving OFF of any right side stair - if (direction == DIR_EAST && metatileBehavior != currentBehavior) - return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; //moving off right stair onto non-stair -> move diagonal - else - return collision; + if (MetatileBehavior_IsSidewaysStairsLeftSide(metatileBehavior)) + { + //moving ONTO left side stair + if (direction == DIR_WEST && currentBehavior != metatileBehavior) + return collision; //moving onto top part of left-stair going left, so no diagonal + else + return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; // move diagonally + } + else if (MetatileBehavior_IsSidewaysStairsRightSide(metatileBehavior)) + { + //moving ONTO right side stair + if (direction == DIR_EAST && currentBehavior != metatileBehavior) + return collision; //moving onto top part of right-stair going right, so no diagonal + else + return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; + } + else if (MetatileBehavior_IsSidewaysStairsLeftSideAny(currentBehavior)) + { + //moving OFF of any left side stair + if (direction == DIR_WEST && metatileBehavior != currentBehavior) + return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; //moving off of left stairs onto non-stair -> move diagonal + else + return collision; //moving off of left side stair to east -> move east + } + else if (MetatileBehavior_IsSidewaysStairsRightSideAny(currentBehavior)) + { + //moving OFF of any right side stair + if (direction == DIR_EAST && metatileBehavior != currentBehavior) + return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; //moving off right stair onto non-stair -> move diagonal + else + return collision; + } } return collision; From d3d29d7cb565aeb39952c4b4c0945cabb4d304c9 Mon Sep 17 00:00:00 2001 From: Evan Date: Fri, 19 Jun 2020 23:40:12 -0600 Subject: [PATCH 011/544] cherry pick 0cccbfd0ba608287d5f2b642ea613d9674cd919d --- include/constants/event_object_movement.h | 18 +- include/constants/global.h | 2 - include/event_object_movement.h | 16 +- include/field_player_avatar.h | 4 - include/global.fieldmap.h | 3 +- include/metatile_behavior.h | 1 - src/bike.c | 95 +-- .../movement_action_func_tables.h | 130 ---- src/event_object_movement.c | 693 +++++++++--------- src/field_control_avatar.c | 46 +- src/field_player_avatar.c | 127 +--- src/metatile_behavior.c | 7 - 12 files changed, 451 insertions(+), 691 deletions(-) diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 5172e12d51..7a02b2b976 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -241,27 +241,11 @@ #define MOVEMENT_ACTION_FIGURE_8 0x9B #define MOVEMENT_ACTION_FLY_UP 0x9C #define MOVEMENT_ACTION_FLY_DOWN 0x9D -// slow running (for stairs) +// slow running #define MOVEMENT_ACTION_RUN_DOWN_SLOW 0x9E #define MOVEMENT_ACTION_RUN_UP_SLOW 0x9F #define MOVEMENT_ACTION_RUN_LEFT_SLOW 0xA0 #define MOVEMENT_ACTION_RUN_RIGHT_SLOW 0xA1 -// sideways stairs - walking -#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT 0xA2 -#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT 0xA3 -#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT 0xA4 -#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT 0xA5 -// sideways stairs - running -#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING 0xA6 -#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING 0xA7 -#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING 0xA8 -#define MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING 0xA9 -// sideways stairs - acro bike -#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT 0xAA -#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT 0xAB -#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT 0xAC -#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT 0xAD -//sideways stairs - mach bike #define MOVEMENT_ACTION_STEP_END 0xFE diff --git a/include/constants/global.h b/include/constants/global.h index 4a3f0618a8..213ccca5b5 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -118,6 +118,4 @@ #define DIR_NORTHWEST 7 #define DIR_NORTHEAST 8 -#define SLOW_MOVEMENT_ON_STAIRS TRUE // change to false to keep emerald's normal movement speed on outdoor stairs - #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 84c89a85d3..61e7c5d6c2 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -82,6 +82,7 @@ bool8 TryGetObjectEventIdByLocalIdAndMap(u8, u8, u8, u8 *); u8 GetObjectEventIdByXY(s16, s16); void SetObjectEventDirection(struct ObjectEvent *, u8); u8 GetFirstInactiveObjectEventId(void); +void RemoveObjectEvent(struct ObjectEvent *objectEvent); void RemoveObjectEventByLocalIdAndMap(u8, u8, u8); void LoadPlayerObjectReflectionPalette(u16, u8); void LoadSpecialObjectReflectionPalette(u16, u8); @@ -125,6 +126,7 @@ u8 GetWalkInPlaceFastMovementAction(u32); u8 GetWalkInPlaceNormalMovementAction(u32); u8 GetWalkInPlaceSlowMovementAction(u32); u8 GetCollisionAtCoords(struct ObjectEvent *, s16, s16, u32); +u8 GetCollisionInDirection(struct ObjectEvent *objectEvent, u8 direction); void MoveCoords(u8, s16 *, s16 *); bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *); u8 ObjectEventClearHeldMovementIfFinished(struct ObjectEvent *); @@ -205,6 +207,8 @@ void CameraObjectReset2(void); u8 GetObjectEventBerryTreeId(u8 objectEventId); void SetBerryTreeJustPicked(u8 mapId, u8 mapNumber, u8 mapGroup); bool8 IsBerryTreeSparkling(u8, u8, u8); +struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup); +u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY); void MovementType_None(struct Sprite *); void MovementType_LookAround(struct Sprite *); @@ -422,21 +426,23 @@ u8 MovementType_RunInPlace_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *); + void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible); bool32 IsObjectEventSpriteInvisible(u8 objectEventId); void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId); void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum); bool32 IsObjectEventSpriteAnimating(u8 objectEventId); +// NEW +u16 GetMiniStepCount(u8 speed); +void RunMiniStep(struct Sprite *sprite, u8 speed, u8 currentFrame); +bool8 PlayerIsUnderWaterfall(struct ObjectEvent *objectEvent); + // run slow u8 GetPlayerRunSlowMovementAction(u32); //sideways stairs u8 GetSidewaysStairsToRightDirection(s16, s16, u8); u8 GetSidewaysStairsToLeftDirection(s16, s16, u8); -u8 GetDiagonalRightStairsMovement(u32); -u8 GetDiagonalLeftStairsMovement(u32); -u8 GetDiagonalRightStairsRunningMovement(u32); -u8 GetDiagonalLeftStairsRunningMovement(u32); -extern u8 gSidewaysStairsDirection; +u8 GetSidewaysStairsCollision(struct ObjectEvent *objectEvent, u8 dir, u8 currentBehavior, u8 nextBehavior, u8 collision); #endif //GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index f9cdfa838d..0f53e0b28d 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -68,9 +68,5 @@ bool32 PlayerIsMovingOnRockStairs(u8 direction); //sideways stairs u8 GetRightSideStairsDirection(u8 direction); u8 GetLeftSideStairsDirection(u8 direction); -void PlayerSidewaysStairsRightSide(u8 direction); -void PlayerSidewaysStairsLeftSide(u8 direction); -void PlayerSidewaysStairsRightSideRunning(u8 direction); -void PlayerSidewaysStairsLeftSideRunning(u8 direction); #endif // GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index a4c486c960..234bf9f914 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -205,7 +205,8 @@ struct ObjectEvent /*0x1D*/ u8 trainerRange_berryTreeId; /*0x1E*/ u8 currentMetatileBehavior; /*0x1F*/ u8 previousMetatileBehavior; - /*0x20*/ u8 previousMovementDirection; + /*0x20*/ u8 previousMovementDirection:4; + u8 directionOverwrite:4; /*0x21*/ u8 directionSequenceIndex; /*0x22*/ u8 playerCopyableMovement; /*size = 0x24*/ diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 715f9ef127..128978cae6 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -145,7 +145,6 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); -bool8 MetatileBehavior_IsRockStairs(u8 metatileBehavior); //sideways stairs bool8 MetatileBehavior_IsSidewaysStairsRightSide(u8); bool8 MetatileBehavior_IsSidewaysStairsLeftSide(u8); diff --git a/src/bike.c b/src/bike.c index a21dcb33e1..1fe5b58b43 100644 --- a/src/bike.c +++ b/src/bike.c @@ -142,6 +142,19 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) { // if the dir updated before this function, get the relevent new direction to check later. u8 direction = GetPlayerMovementDirection(); + + // fix direction when moving on sideways stairs + switch (direction) + { + case DIR_SOUTHWEST: + case DIR_NORTHWEST: + direction = DIR_WEST; + break; + case DIR_SOUTHEAST: + case DIR_NORTHEAST: + direction = DIR_EAST; + break; + } // is the player standing still? if (*dirTraveling == 0) @@ -178,7 +191,7 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) // the difference between face direction and turn direction is that one changes direction while the other does the animation of turning as well as changing direction. static void MachBikeTransition_FaceDirection(u8 direction) -{ +{ PlayerFaceDirection(direction); Bike_SetBikeStill(); } @@ -231,41 +244,8 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) PlayerOnBikeCollide(direction); } } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - { - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.bikeSpeed = SPEED_STANDING; - PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); - return; - #else - gPlayerAvatar.bikeFrameCounter = 2; - gPlayerAvatar.bikeSpeed = SPEED_STANDING; - PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); - return; - #endif - - } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - { - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.bikeSpeed = SPEED_STANDING; - PlayerGoSpeed2(GetRightSideStairsDirection(direction)); - return; - #else - gPlayerAvatar.bikeFrameCounter = 2; - gPlayerAvatar.bikeSpeed = SPEED_STANDING; - PlayerGoSpeed2(GetRightSideStairsDirection(direction)); - return; - #endif - - } else { - if (PlayerIsMovingOnRockStairs(direction)) - gPlayerAvatar.bikeFrameCounter--; - sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array @@ -300,13 +280,6 @@ static void MachBikeTransition_TrySlowDown(u8 direction) } else { - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - return PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - return PlayerGoSpeed2(GetRightSideStairsDirection(direction)); - #endif - sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); } } @@ -314,13 +287,11 @@ static void MachBikeTransition_TrySlowDown(u8 direction) // the acro bike requires the input handler to be executed before the transition can. static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys) { - gSidewaysStairsDirection = newDirection; sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection); } static u8 CheckMovementInputAcroBike(u8 *newDirection, u16 newKeys, u16 heldKeys) { - gSidewaysStairsDirection = *newDirection; return sAcroBikeInputHandlers[gPlayerAvatar.acroBikeState](newDirection, newKeys, heldKeys); } @@ -409,7 +380,7 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16 struct ObjectEvent *playerObjEvent; direction = GetPlayerMovementDirection(); - gSidewaysStairsDirection = direction; + //gSidewaysStairsDirection = direction; playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; gPlayerAvatar.runningState = NOT_MOVING; @@ -606,15 +577,7 @@ static void AcroBikeTransition_Moving(u8 direction) } else { - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - return PlayerGoSpeed2(GetRightSideStairsDirection(direction)); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - return PlayerGoSpeed2(GetLeftSideStairsDirection(direction)); - - if (PlayerIsMovingOnRockStairs(direction)) - PlayerGoSpeed2(direction); - else - PlayerRideWaterCurrent(direction); + PlayerRideWaterCurrent(direction); } } @@ -683,11 +646,6 @@ static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) else { derp: - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - gSidewaysStairsDirection = GetLeftSideStairsDirection(direction); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - gSidewaysStairsDirection = GetRightSideStairsDirection(direction); - PlayerMovingHoppingWheelie(direction); } } @@ -756,11 +714,6 @@ static void AcroBikeTransition_WheelieMoving(u8 direction) return; } - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - gSidewaysStairsDirection = GetLeftSideStairsDirection(direction); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - gSidewaysStairsDirection = GetRightSideStairsDirection(direction); - PlayerWheelieMove(direction); gPlayerAvatar.runningState = MOVING; } @@ -795,12 +748,7 @@ static void AcroBikeTransition_WheelieRisingMoving(u8 direction) } return; } - - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - gSidewaysStairsDirection = GetLeftSideStairsDirection(direction); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - gSidewaysStairsDirection = GetRightSideStairsDirection(direction); - + PlayerPopWheelieWhileMoving(direction); gPlayerAvatar.runningState = MOVING; } @@ -824,12 +772,7 @@ static void AcroBikeTransition_WheelieLoweringMoving(u8 direction) PlayerEndWheelie(direction); return; } - - if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - gSidewaysStairsDirection = GetLeftSideStairsDirection(direction); - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - gSidewaysStairsDirection = GetRightSideStairsDirection(direction); - + PlayerEndWheelieWhileMoving(direction); } @@ -1090,7 +1033,7 @@ void Bike_UpdateBikeCounterSpeed(u8 counter) static void Bike_SetBikeStill(void) { - gSidewaysStairsDirection = gObjectEvents[gPlayerAvatar.objectEventId].facingDirection; + //gSidewaysStairsDirection = gObjectEvents[gPlayerAvatar.objectEventId].facingDirection; gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeSpeed = SPEED_STANDING; } diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index 30c1fac2aa..ffc0611a1d 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -267,20 +267,6 @@ u8 MovementActionFunc_RunSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sp u8 MovementActionFunc_RunSlowLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementActionFunc_RunSlowRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite); -//sideways stairs -u8 MovementAction_WalkStairDiagonalUpLeft_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkStairDiagonalUpRight_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkStairDiagonalDownLeft_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_WalkStairDiagonalDownRight_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_RunStairDiagonalUpLeft_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_RunStairDiagonalUpRight_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_RunStairDiagonalDownLeft_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_RunStairDiagonalDownRight_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_RunStairDiagonal_Step1(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_AcroBikeDiagonalUpLeft_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_AcroBikeDiagonalDownLeft_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_AcroBikeDiagonalUpRight_Step0(struct ObjectEvent *, struct Sprite *); -u8 MovementAction_AcroBikeDiagonalDownRight_Step0(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FaceUp[])(struct ObjectEvent *, struct Sprite *); @@ -445,19 +431,6 @@ u8 (*const gMovementActionFuncs_RunDownSlow[])(struct ObjectEvent *, struct Spri u8 (*const gMovementActionFuncs_RunUpSlow[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RunLeftSlow[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Sprite *); -//sideways stairs -u8 (*const gMovementActionFuncs_WalkStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_WalkStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_RunStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_RunStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_RunStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_RunStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_AcroBikeDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_AcroBikeDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_AcroBikeDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *); -u8 (*const gMovementActionFuncs_AcroBikeDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *); u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) = { [MOVEMENT_ACTION_FACE_DOWN] = gMovementActionFuncs_FaceDown, @@ -623,19 +596,6 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) [MOVEMENT_ACTION_RUN_UP_SLOW] = gMovementActionFuncs_RunUpSlow, [MOVEMENT_ACTION_RUN_LEFT_SLOW] = gMovementActionFuncs_RunLeftSlow, [MOVEMENT_ACTION_RUN_RIGHT_SLOW] = gMovementActionFuncs_RunRightSlow, - //sideways stairs - [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT] = gMovementActionFuncs_WalkStairDiagonalUpLeft, - [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT] = gMovementActionFuncs_WalkStairDiagonalUpRight, - [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT] = gMovementActionFuncs_WalkStairDiagonalDownLeft, - [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT] = gMovementActionFuncs_WalkStairDiagonalDownRight, - [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING] = gMovementActionFuncs_RunStairDiagonalUpLeft, - [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING] = gMovementActionFuncs_RunStairDiagonalUpRight, - [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING] = gMovementActionFuncs_RunStairDiagonalDownLeft, - [MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING] = gMovementActionFuncs_RunStairDiagonalDownRight, - [MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT] = gMovementActionFuncs_AcroBikeDiagonalUpLeft, - [MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT] = gMovementActionFuncs_AcroBikeDiagonalUpRight, - [MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT] = gMovementActionFuncs_AcroBikeDiagonalDownLeft, - [MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT] = gMovementActionFuncs_AcroBikeDiagonalDownRight, }; u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = { @@ -1593,93 +1553,3 @@ u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Spr MovementAction_PauseSpriteAnim, }; -//sideways stairs -u8 (*const gMovementActionFuncs_WalkStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkStairDiagonalUpLeft_Step0, - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - MovementAction_WalkSlowDiagonalUpLeft_Step1, - #else - MovementAction_WalkNormalDiagonalUpLeft_Step1, - #endif - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_WalkStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkStairDiagonalUpRight_Step0, - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - MovementAction_WalkSlowDiagonalUpRight_Step1, - #else - MovementAction_WalkNormalDiagonalUpRight_Step1, - #endif - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_WalkStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkStairDiagonalDownLeft_Step0, - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - MovementAction_WalkSlowDiagonalDownLeft_Step1, - #else - MovementAction_WalkNormalDiagonalDownLeft_Step1, - #endif - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_WalkStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_WalkStairDiagonalDownRight_Step0, - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - MovementAction_WalkSlowDiagonalDownRight_Step1, - #else - MovementAction_WalkNormalDiagonalDownRight_Step1, - #endif - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_RunStairDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_RunStairDiagonalUpLeft_Step0, - MovementAction_RunStairDiagonal_Step1, - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_RunStairDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_RunStairDiagonalUpRight_Step0, - MovementAction_RunStairDiagonal_Step1, - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_RunStairDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_RunStairDiagonalDownLeft_Step0, - MovementAction_RunStairDiagonal_Step1, - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_RunStairDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_RunStairDiagonalDownRight_Step0, - MovementAction_RunStairDiagonal_Step1, - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_AcroBikeDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_AcroBikeDiagonalUpLeft_Step0, - MovementAction_RideWaterCurrentLeft_Step1, - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_AcroBikeDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_AcroBikeDiagonalDownLeft_Step0, - MovementAction_RideWaterCurrentLeft_Step1, - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_AcroBikeDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_AcroBikeDiagonalUpRight_Step0, - MovementAction_RideWaterCurrentRight_Step1, - MovementAction_PauseSpriteAnim, -}; - -u8 (*const gMovementActionFuncs_AcroBikeDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *) = { - MovementAction_AcroBikeDiagonalDownRight_Step0, - MovementAction_RideWaterCurrentRight_Step1, - MovementAction_PauseSpriteAnim, -}; - - diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 9e02edfef4..ebfc902ca3 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -22,11 +22,13 @@ #include "trainer_see.h" #include "trainer_hill.h" #include "util.h" +#include "follow_me.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" #include "constants/field_effects.h" #include "constants/items.h" #include "constants/mauville_old_man.h" +#include "constants/metatile_behaviors.h" #include "constants/trainer_types.h" #include "constants/union_room.h" @@ -57,13 +59,11 @@ static u8 setup##_callback(struct ObjectEvent *objectEvent, struct Sprite *sprit EWRAM_DATA u8 sCurrentReflectionType = 0; EWRAM_DATA u16 sCurrentSpecialObjectPaletteTag = 0; EWRAM_DATA struct LockedAnimObjectEvents *gLockedAnimObjectEvents = {0}; -EWRAM_DATA u8 gSidewaysStairsDirection = 0; static void MoveCoordsInDirection(u32, s16 *, s16 *, s16, s16); static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *, struct Sprite *); static void SetMovementDelay(struct Sprite *, s16); static bool8 WaitForMovementDelay(struct Sprite *); -static u8 GetCollisionInDirection(struct ObjectEvent *, u8); static u32 state_to_direction(u8, u32, u32); static void TryEnableObjectEventAnim(struct ObjectEvent *, struct Sprite *); static void ObjectEventExecHeldMovementAction(struct ObjectEvent *, struct Sprite *); @@ -113,7 +113,7 @@ static u16 GetObjectEventFlagIdByObjectEventId(u8); static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *); static void MakeObjectTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetObjectEventMovingCameraOffset(s16 *, s16 *); -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); +//static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); static void LoadObjectEventPalette(u16); static void RemoveObjectEventIfOutsideView(struct ObjectEvent *); static void sub_808E1B8(u8, s16, s16); @@ -135,6 +135,9 @@ static void InitSpriteForFigure8Anim(struct Sprite *sprite); static bool8 AnimateSpriteInFigure8(struct Sprite *sprite); static void UpdateObjectEventSprite(struct Sprite *); +static void StartSlowRunningAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction); +static bool8 npc_obj_ministep_stop_on_arrival_slow(struct ObjectEvent *objectEvent, struct Sprite *sprite); + const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; const struct SpriteTemplate gCameraSpriteTemplate = {0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, ObjectCB_CameraObject}; @@ -693,10 +696,10 @@ const u8 gMoveDirectionAnimNums[] = { [DIR_NORTH] = 5, [DIR_WEST] = 6, [DIR_EAST] = 7, - [DIR_SOUTHWEST] = 4, - [DIR_SOUTHEAST] = 4, - [DIR_NORTHWEST] = 5, - [DIR_NORTHEAST] = 5, + [DIR_SOUTHWEST] = 6, + [DIR_SOUTHEAST] = 7, + [DIR_NORTHWEST] = 6, + [DIR_NORTHEAST] = 7, }; const u8 gMoveDirectionFastAnimNums[] = { [DIR_NONE] = 8, @@ -704,10 +707,10 @@ const u8 gMoveDirectionFastAnimNums[] = { [DIR_NORTH] = 9, [DIR_WEST] = 10, [DIR_EAST] = 11, - [DIR_SOUTHWEST] = 8, - [DIR_SOUTHEAST] = 8, - [DIR_NORTHWEST] = 9, - [DIR_NORTHEAST] = 9, + [DIR_SOUTHWEST] = 10, + [DIR_SOUTHEAST] = 11, + [DIR_NORTHWEST] = 10, + [DIR_NORTHEAST] = 11, }; const u8 gMoveDirectionFasterAnimNums[] = { [DIR_NONE] = 12, @@ -715,10 +718,10 @@ const u8 gMoveDirectionFasterAnimNums[] = { [DIR_NORTH] = 13, [DIR_WEST] = 14, [DIR_EAST] = 15, - [DIR_SOUTHWEST] = 12, - [DIR_SOUTHEAST] = 12, - [DIR_NORTHWEST] = 13, - [DIR_NORTHEAST] = 13, + [DIR_SOUTHWEST] = 14, + [DIR_SOUTHEAST] = 15, + [DIR_NORTHWEST] = 14, + [DIR_NORTHEAST] = 15, }; const u8 gMoveDirectionFastestAnimNums[] = { [DIR_NONE] = 16, @@ -726,10 +729,10 @@ const u8 gMoveDirectionFastestAnimNums[] = { [DIR_NORTH] = 17, [DIR_WEST] = 18, [DIR_EAST] = 19, - [DIR_SOUTHWEST] = 16, - [DIR_SOUTHEAST] = 16, - [DIR_NORTHWEST] = 17, - [DIR_NORTHEAST] = 17, + [DIR_SOUTHWEST] = 18, + [DIR_SOUTHEAST] = 19, + [DIR_NORTHWEST] = 18, + [DIR_NORTHEAST] = 19, }; const u8 gJumpSpecialDirectionAnimNums[] = { // used for jumping onto surf mon [DIR_NONE] = 20, @@ -831,18 +834,6 @@ const u8 gFishingBiteDirectionAnimNums[] = { [DIR_NORTHEAST] = 9, }; const u8 gRunningDirectionAnimNums[] = { - [DIR_NONE] = 20, - [DIR_SOUTH] = 20, - [DIR_NORTH] = 21, - [DIR_WEST] = 22, - [DIR_EAST] = 23, - [DIR_SOUTHWEST] = 20, - [DIR_SOUTHEAST] = 20, - [DIR_NORTHWEST] = 21, - [DIR_NORTHEAST] = 21, -}; - -const u8 gStairsRunningDirectionAnimNums[] = { [DIR_NONE] = 20, [DIR_SOUTH] = 20, [DIR_NORTH] = 21, @@ -913,10 +904,6 @@ const u8 gWalkSlowMovementActions[] = { [DIR_NORTH] = MOVEMENT_ACTION_WALK_SLOW_UP, [DIR_WEST] = MOVEMENT_ACTION_WALK_SLOW_LEFT, [DIR_EAST] = MOVEMENT_ACTION_WALK_SLOW_RIGHT, - [DIR_SOUTHWEST] = MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT, - [DIR_SOUTHEAST] = MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT, - [DIR_NORTHWEST] = MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_LEFT, - [DIR_NORTHEAST] = MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT }; const u8 gWalkNormalMovementActions[] = { [DIR_NONE] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, @@ -924,10 +911,6 @@ const u8 gWalkNormalMovementActions[] = { [DIR_NORTH] = MOVEMENT_ACTION_WALK_NORMAL_UP, [DIR_WEST] = MOVEMENT_ACTION_WALK_NORMAL_LEFT, [DIR_EAST] = MOVEMENT_ACTION_WALK_NORMAL_RIGHT, - [DIR_SOUTHWEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT, - [DIR_SOUTHEAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT, - [DIR_NORTHWEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT, - [DIR_NORTHEAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT }; const u8 gWalkFastMovementActions[] = { [DIR_NONE] = MOVEMENT_ACTION_WALK_FAST_DOWN, @@ -935,10 +918,6 @@ const u8 gWalkFastMovementActions[] = { [DIR_NORTH] = MOVEMENT_ACTION_WALK_FAST_UP, [DIR_WEST] = MOVEMENT_ACTION_WALK_FAST_LEFT, [DIR_EAST] = MOVEMENT_ACTION_WALK_FAST_RIGHT, - [DIR_SOUTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT, - [DIR_SOUTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT, - [DIR_NORTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT, - [DIR_NORTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT, }; const u8 gRideWaterCurrentMovementActions[] = { [DIR_NONE] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN, @@ -946,10 +925,6 @@ const u8 gRideWaterCurrentMovementActions[] = { [DIR_NORTH] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP, [DIR_WEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT, [DIR_EAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT, - [DIR_SOUTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT, - [DIR_SOUTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT, - [DIR_NORTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT, - [DIR_NORTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT }; const u8 gWalkFastestMovementActions[] = { [DIR_NONE] = MOVEMENT_ACTION_WALK_FASTEST_DOWN, @@ -957,24 +932,20 @@ const u8 gWalkFastestMovementActions[] = { [DIR_NORTH] = MOVEMENT_ACTION_WALK_FASTEST_UP, [DIR_WEST] = MOVEMENT_ACTION_WALK_FASTEST_LEFT, [DIR_EAST] = MOVEMENT_ACTION_WALK_FASTEST_RIGHT, - [DIR_SOUTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_LEFT, - [DIR_SOUTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT, - [DIR_NORTHWEST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT, - [DIR_NORTHEAST] = MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_RIGHT }; const u8 gSlideMovementActions[] = { - MOVEMENT_ACTION_SLIDE_DOWN, - MOVEMENT_ACTION_SLIDE_DOWN, - MOVEMENT_ACTION_SLIDE_UP, - MOVEMENT_ACTION_SLIDE_LEFT, - MOVEMENT_ACTION_SLIDE_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_SLIDE_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_SLIDE_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_SLIDE_UP, + [DIR_WEST] = MOVEMENT_ACTION_SLIDE_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_SLIDE_RIGHT, }; const u8 gPlayerRunMovementActions[] = { - MOVEMENT_ACTION_PLAYER_RUN_DOWN, - MOVEMENT_ACTION_PLAYER_RUN_DOWN, - MOVEMENT_ACTION_PLAYER_RUN_UP, - MOVEMENT_ACTION_PLAYER_RUN_LEFT, - MOVEMENT_ACTION_PLAYER_RUN_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_PLAYER_RUN_UP, + [DIR_WEST] = MOVEMENT_ACTION_PLAYER_RUN_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_PLAYER_RUN_RIGHT, }; const u8 gJump2MovementActions[] = { MOVEMENT_ACTION_JUMP_2_DOWN, @@ -1012,32 +983,48 @@ const u8 gJumpSpecialMovementActions[] = { MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT, }; const u8 gWalkInPlaceSlowMovementActions[] = { - MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP, - MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT, - MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT }; const u8 gWalkInPlaceNormalMovementActions[] = { - MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP, - MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT, - MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT }; const u8 gWalkInPlaceFastMovementActions[] = { - MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP, - MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT, - MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT }; const u8 gWalkInPlaceFastestMovementActions[] = { - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN, - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP, - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT, - MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT, + [DIR_NONE] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT, + [DIR_NORTHWEST] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT, + [DIR_NORTHEAST] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT }; const u8 gAcroWheelieFaceDirectionMovementActions[] = { [DIR_NONE] = MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN, @@ -1158,36 +1145,6 @@ const u8 gRunSlowMovementActions[] = { [DIR_EAST] = MOVEMENT_ACTION_RUN_RIGHT_SLOW, }; -// sideways stairs -const u8 gDiagonalStairLeftSideMovementActions[] = { //movement actions for stairs on left side of a wall (southwest and northeast) - [DIR_NONE] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, - [DIR_SOUTH] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_WALK_NORMAL_UP, - [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT, - [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT, -}; -const u8 gDiagonalStairRightSideMovementActions[] = { //movement actions for stairs on right side of a wall (southeast and northwest) - [DIR_NONE] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, - [DIR_SOUTH] = MOVEMENT_ACTION_WALK_NORMAL_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_WALK_NORMAL_UP, - [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT, - [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT, -}; -const u8 gDiagonalStairRightSideRunningMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, - [DIR_SOUTH] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_PLAYER_RUN_UP, - [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING, - [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING, -}; -const u8 gDiagonalStairLeftSideRunningMovementActions[] = { - [DIR_NONE] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, - [DIR_SOUTH] = MOVEMENT_ACTION_PLAYER_RUN_DOWN, - [DIR_NORTH] = MOVEMENT_ACTION_PLAYER_RUN_UP, - [DIR_WEST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_LEFT_RUNNING, - [DIR_EAST] = MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_RIGHT_RUNNING, -}; - const u8 gOppositeDirections[] = { DIR_NORTH, DIR_SOUTH, @@ -1271,10 +1228,11 @@ u8 GetFirstInactiveObjectEventId(void) u8 GetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId) { - if (localId < OBJ_EVENT_ID_PLAYER) - { + if (localId == 0xFE) + return GetFollowerObjectId(); + else if (localId < OBJ_EVENT_ID_PLAYER) return GetObjectEventIdByLocalIdAndMapInternal(localId, mapNum, mapGroupId); - } + return GetObjectEventIdByLocalId(localId); } @@ -1430,7 +1388,7 @@ static bool8 GetAvailableObjectEventId(u16 localId, u8 mapNum, u8 mapGroup, u8 * return FALSE; } -static void RemoveObjectEvent(struct ObjectEvent *objectEvent) +void RemoveObjectEvent(struct ObjectEvent *objectEvent) { objectEvent->active = FALSE; RemoveObjectEventInternal(objectEvent); @@ -1525,7 +1483,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl return objectEventId; } -static u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 objectEventId; struct SpriteTemplate spriteTemplate; @@ -2457,7 +2415,10 @@ void SetObjectEventDirection(struct ObjectEvent *objectEvent, u8 direction) static const u8 *GetObjectEventScriptPointerByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->script; + if (GetFollowerLocalId() == 0 || GetFollowerLocalId() != localId) + return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->script; + else + return GetFollowerScriptPointer(); } const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId) @@ -2516,7 +2477,7 @@ u8 GetObjectEventBerryTreeId(u8 objectEventId) return gObjectEvents[objectEventId].trainerRange_berryTreeId; } -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { struct ObjectEventTemplate *templates; const struct MapHeader *mapHeader; @@ -4860,7 +4821,7 @@ u8 GetTrainerFacingDirectionMovementType(u8 direction) return gTrainerFacingDirectionMovementTypes[direction]; } -static u8 GetCollisionInDirection(struct ObjectEvent *objectEvent, u8 direction) +u8 GetCollisionInDirection(struct ObjectEvent *objectEvent, u8 direction) { s16 x; s16 y; @@ -4870,11 +4831,101 @@ static u8 GetCollisionInDirection(struct ObjectEvent *objectEvent, u8 direction) return GetCollisionAtCoords(objectEvent, x, y, direction); } +u8 GetSidewaysStairsCollision(struct ObjectEvent *objectEvent, u8 dir, u8 currentBehavior, u8 nextBehavior, u8 collision) +{ + if ((dir == DIR_SOUTH || dir == DIR_NORTH) && collision != COLLISION_NONE) + return collision; + + if (MetatileBehavior_IsSidewaysStairsLeftSide(nextBehavior)) + { + //moving ONTO left side stair + if (dir == DIR_WEST && currentBehavior != nextBehavior) + return collision; //moving onto top part of left-stair going left, so no diagonal + else + return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; // move diagonally + } + else if (MetatileBehavior_IsSidewaysStairsRightSide(nextBehavior)) + { + //moving ONTO right side stair + if (dir == DIR_EAST && currentBehavior != nextBehavior) + return collision; //moving onto top part of right-stair going right, so no diagonal + else + return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; + } + else if (MetatileBehavior_IsSidewaysStairsLeftSideAny(currentBehavior)) + { + //moving OFF of any left side stair + if (dir == DIR_WEST && nextBehavior != currentBehavior) + return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; //moving off of left stairs onto non-stair -> move diagonal + else + return collision; //moving off of left side stair to east -> move east + } + else if (MetatileBehavior_IsSidewaysStairsRightSideAny(currentBehavior)) + { + //moving OFF of any right side stair + if (dir == DIR_EAST && nextBehavior != currentBehavior) + return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; //moving off right stair onto non-stair -> move diagonal + else + return collision; + } + + return collision; +} + +static u8 GetVanillaCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction) +{ + if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y)) + return COLLISION_OUTSIDE_RANGE; + else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction)) + return COLLISION_IMPASSABLE; + else if (objectEvent->trackedByCamera && !CanCameraMoveInDirection(direction)) + return COLLISION_IMPASSABLE; + else if (IsZCoordMismatchAt(objectEvent->currentElevation, x, y)) + return COLLISION_ELEVATION_MISMATCH; + else if (DoesObjectCollideWithObjectAt(objectEvent, x, y)) + return COLLISION_OBJECT_EVENT; + + return COLLISION_NONE; +} + +static bool8 ObjectEventOnLeftSideStair(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction) +{ + switch (direction) + { + case DIR_EAST: + MoveCoords(DIR_NORTH, &x, &y); + return DoesObjectCollideWithObjectAt(objectEvent, x, y); + case DIR_WEST: + MoveCoords(DIR_SOUTH, &x, &y); + return DoesObjectCollideWithObjectAt(objectEvent, x, y); + default: + return FALSE; //north/south taken care of in GetVanillaCollision + } +} + +static bool8 ObjectEventOnRightSideStair(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction) +{ + switch (direction) + { + case DIR_EAST: + MoveCoords(DIR_SOUTH, &x, &y); + return DoesObjectCollideWithObjectAt(objectEvent, x, y); + case DIR_WEST: + MoveCoords(DIR_NORTH, &x, &y); + return DoesObjectCollideWithObjectAt(objectEvent, x, y); + default: + return FALSE; //north/south taken care of in GetVanillaCollision + } +} + u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) { u8 direction = dir; u8 currentBehavior = MapGridGetMetatileBehaviorAt(objectEvent->currentCoords.x, objectEvent->currentCoords.y); u8 nextBehavior = MapGridGetMetatileBehaviorAt(x, y); + u8 collision; + + objectEvent->directionOverwrite = DIR_NONE; //sideways stairs checks if (MetatileBehavior_IsSidewaysStairsLeftSideTop(nextBehavior) && dir == DIR_EAST) @@ -4895,17 +4946,26 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) && dir == DIR_NORTH && (MetatileBehavior_IsSidewaysStairsLeftSideBottom(nextBehavior) || MetatileBehavior_IsSidewaysStairsRightSideBottom(nextBehavior))) return COLLISION_IMPASSABLE; //trying to move north onto top stair tile at same level from non-stair -> no - if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y)) - return COLLISION_OUTSIDE_RANGE; - else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction)) - return COLLISION_IMPASSABLE; - else if (objectEvent->trackedByCamera && !CanCameraMoveInDirection(direction)) - return COLLISION_IMPASSABLE; - else if (IsZCoordMismatchAt(objectEvent->currentElevation, x, y)) - return COLLISION_ELEVATION_MISMATCH; - else if (DoesObjectCollideWithObjectAt(objectEvent, x, y)) - return COLLISION_OBJECT_EVENT; - return COLLISION_NONE; + // regular checks + collision = GetVanillaCollision(objectEvent, x, y, dir); + + //sideways stairs checks + collision = GetSidewaysStairsCollision(objectEvent, dir, currentBehavior, nextBehavior, collision); + switch (collision) + { + case COLLISION_SIDEWAYS_STAIRS_TO_LEFT: + if (ObjectEventOnLeftSideStair(objectEvent, x, y, dir)) + return COLLISION_OBJECT_EVENT; + objectEvent->directionOverwrite = GetLeftSideStairsDirection(dir); + return COLLISION_NONE; + case COLLISION_SIDEWAYS_STAIRS_TO_RIGHT: + if (ObjectEventOnRightSideStair(objectEvent, x, y, dir)) + return COLLISION_OBJECT_EVENT; + objectEvent->directionOverwrite = GetRightSideStairsDirection(dir); + return COLLISION_NONE; + } + + return collision; } u8 GetCollisionFlagsAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction) @@ -4969,8 +5029,9 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16 for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { curObject = &gObjectEvents[i]; - if (curObject->active && curObject != objectEvent) - { + if (curObject->active && curObject != objectEvent && !FollowMe_IsCollisionExempt(curObject, objectEvent)) + { + // check for collision if curObject is active, not the object in question, and not exempt from collisions if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y)) { if (AreZCoordsCompatible(objectEvent->currentElevation, curObject->currentElevation)) @@ -5124,6 +5185,9 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementAct objectEvent->heldMovementActive = TRUE; objectEvent->heldMovementFinished = FALSE; gSprites[objectEvent->spriteId].data[2] = 0; + + FollowMe(objectEvent, movementActionId, FALSE); + return FALSE; } @@ -5203,12 +5267,6 @@ u8 name(u32 idx)\ return animIds[direction];\ } -//sideways stairs -dirn_to_anim(GetDiagonalRightStairsMovement, gDiagonalStairRightSideMovementActions); -dirn_to_anim(GetDiagonalLeftStairsMovement, gDiagonalStairLeftSideMovementActions); -dirn_to_anim(GetDiagonalRightStairsRunningMovement, gDiagonalStairRightSideRunningMovementActions); -dirn_to_anim(GetDiagonalLeftStairsRunningMovement, gDiagonalStairLeftSideRunningMovementActions); - dirn_to_anim(GetFaceDirectionMovementAction, gFaceDirectionMovementActions); dirn_to_anim(GetWalkSlowMovementAction, gWalkSlowMovementActions); dirn_to_anim(GetPlayerRunSlowMovementAction, gRunSlowMovementActions); @@ -5514,7 +5572,10 @@ bool8 MovementAction_WalkSlowUp_Step1(struct ObjectEvent *objectEvent, struct Sp bool8 MovementAction_WalkSlowLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8093B60(objectEvent, sprite, DIR_WEST); + if (objectEvent->directionOverwrite) + sub_8093B60(objectEvent, sprite, objectEvent->directionOverwrite); + else + sub_8093B60(objectEvent, sprite, DIR_WEST); return MovementAction_WalkSlowLeft_Step1(objectEvent, sprite); } @@ -5530,7 +5591,10 @@ bool8 MovementAction_WalkSlowLeft_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkSlowRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8093B60(objectEvent, sprite, DIR_EAST); + if (objectEvent->directionOverwrite) + sub_8093B60(objectEvent, sprite, objectEvent->directionOverwrite); + else + sub_8093B60(objectEvent, sprite, DIR_EAST); return MovementAction_WalkSlowRight_Step1(objectEvent, sprite); } @@ -5642,7 +5706,10 @@ bool8 MovementAction_WalkNormalUp_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkNormalLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_WEST, 0); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 0); + else + do_go_anim(objectEvent, sprite, DIR_WEST, 0); return MovementAction_WalkNormalLeft_Step1(objectEvent, sprite); } @@ -5658,7 +5725,10 @@ bool8 MovementAction_WalkNormalLeft_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkNormalRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_EAST, 0); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 0); + else + do_go_anim(objectEvent, sprite, DIR_EAST, 0); return MovementAction_WalkNormalRight_Step1(objectEvent, sprite); } @@ -5917,7 +5987,10 @@ bool8 MovementAction_WalkFastUp_Step1(struct ObjectEvent *objectEvent, struct Sp bool8 MovementAction_WalkFastLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_WEST, 1); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 1); + else + do_go_anim(objectEvent, sprite, DIR_WEST, 1); return MovementAction_WalkFastLeft_Step1(objectEvent, sprite); } @@ -5933,7 +6006,10 @@ bool8 MovementAction_WalkFastLeft_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkFastRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_EAST, 1); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 1); + else + do_go_anim(objectEvent, sprite, DIR_EAST, 1); return MovementAction_WalkFastRight_Step1(objectEvent, sprite); } @@ -6063,13 +6139,19 @@ bool8 MovementAction_WalkInPlaceFastestUp_Step0(struct ObjectEvent *objectEvent, bool8 MovementAction_WalkInPlaceFastestLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, DIR_WEST, GetMoveDirectionFasterAnimNum(DIR_WEST), 4); + if (objectEvent->directionOverwrite) + sub_8094554(objectEvent, sprite, objectEvent->directionOverwrite, GetMoveDirectionFasterAnimNum(DIR_WEST), 4); + else + sub_8094554(objectEvent, sprite, DIR_WEST, GetMoveDirectionFasterAnimNum(DIR_WEST), 4); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } bool8 MovementAction_WalkInPlaceFastestRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, DIR_EAST, GetMoveDirectionFasterAnimNum(DIR_EAST), 4); + if (objectEvent->directionOverwrite) + sub_8094554(objectEvent, sprite, objectEvent->directionOverwrite, GetMoveDirectionFasterAnimNum(DIR_WEST), 4); + else + sub_8094554(objectEvent, sprite, DIR_EAST, GetMoveDirectionFasterAnimNum(DIR_EAST), 4); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } @@ -6107,7 +6189,10 @@ bool8 MovementAction_RideWaterCurrentUp_Step1(struct ObjectEvent *objectEvent, s bool8 MovementAction_RideWaterCurrentLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_WEST, 2); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 2); + else + do_go_anim(objectEvent, sprite, DIR_WEST, 2); return MovementAction_RideWaterCurrentLeft_Step1(objectEvent, sprite); } @@ -6123,7 +6208,10 @@ bool8 MovementAction_RideWaterCurrentLeft_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_RideWaterCurrentRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_EAST, 2); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 2); + else + do_go_anim(objectEvent, sprite, DIR_EAST, 2); return MovementAction_RideWaterCurrentRight_Step1(objectEvent, sprite); } @@ -6171,7 +6259,10 @@ bool8 MovementAction_WalkFastestUp_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkFastestLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_WEST, 3); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 3); + else + do_go_anim(objectEvent, sprite, DIR_WEST, 3); return MovementAction_WalkFastestLeft_Step1(objectEvent, sprite); } @@ -6187,7 +6278,10 @@ bool8 MovementAction_WalkFastestLeft_Step1(struct ObjectEvent *objectEvent, stru bool8 MovementAction_WalkFastestRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_EAST, 3); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 3); + else + do_go_anim(objectEvent, sprite, DIR_EAST, 3); return MovementAction_WalkFastestRight_Step1(objectEvent, sprite); } @@ -6235,7 +6329,10 @@ bool8 MovementAction_SlideUp_Step1(struct ObjectEvent *objectEvent, struct Sprit bool8 MovementAction_SlideLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_WEST, 4); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 4); + else + do_go_anim(objectEvent, sprite, DIR_WEST, 4); return MovementAction_SlideLeft_Step1(objectEvent, sprite); } @@ -6251,7 +6348,10 @@ bool8 MovementAction_SlideLeft_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_SlideRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_EAST, 4); + if (objectEvent->directionOverwrite) + do_go_anim(objectEvent, sprite, objectEvent->directionOverwrite, 4); + else + do_go_anim(objectEvent, sprite, DIR_EAST, 4); return MovementAction_SlideRight_Step1(objectEvent, sprite); } @@ -6299,7 +6399,10 @@ bool8 MovementAction_PlayerRunUp_Step1(struct ObjectEvent *objectEvent, struct S bool8 MovementAction_PlayerRunLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - StartRunningAnim(objectEvent, sprite, DIR_WEST); + if (objectEvent->directionOverwrite) + StartRunningAnim(objectEvent, sprite, objectEvent->directionOverwrite); + else + StartRunningAnim(objectEvent, sprite, DIR_WEST); return MovementAction_PlayerRunLeft_Step1(objectEvent, sprite); } @@ -6315,7 +6418,10 @@ bool8 MovementAction_PlayerRunLeft_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_PlayerRunRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - StartRunningAnim(objectEvent, sprite, DIR_EAST); + if (objectEvent->directionOverwrite) + StartRunningAnim(objectEvent, sprite, objectEvent->directionOverwrite); + else + StartRunningAnim(objectEvent, sprite, DIR_EAST); return MovementAction_PlayerRunRight_Step1(objectEvent, sprite); } @@ -7165,7 +7271,7 @@ bool8 MovementAction_AcroWheelieHopFaceRight_Step1(struct ObjectEvent *objectEve bool8 MovementAction_AcroWheelieHopDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 1, 1); + sub_8095B84(objectEvent, sprite, DIR_SOUTH, 1, 1); return MovementAction_AcroWheelieHopDown_Step1(objectEvent, sprite); } @@ -7182,7 +7288,7 @@ bool8 MovementAction_AcroWheelieHopDown_Step1(struct ObjectEvent *objectEvent, s bool8 MovementAction_AcroWheelieHopUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 1, 1); + sub_8095B84(objectEvent, sprite, DIR_NORTH, 1, 1); return MovementAction_AcroWheelieHopUp_Step1(objectEvent, sprite); } @@ -7199,7 +7305,10 @@ bool8 MovementAction_AcroWheelieHopUp_Step1(struct ObjectEvent *objectEvent, str bool8 MovementAction_AcroWheelieHopLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 1, 1); + if (objectEvent->directionOverwrite) + sub_8095B84(objectEvent, sprite, objectEvent->directionOverwrite, 1, 1); + else + sub_8095B84(objectEvent, sprite, DIR_WEST, 1, 1); return MovementAction_AcroWheelieHopLeft_Step1(objectEvent, sprite); } @@ -7216,7 +7325,10 @@ bool8 MovementAction_AcroWheelieHopLeft_Step1(struct ObjectEvent *objectEvent, s bool8 MovementAction_AcroWheelieHopRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 1, 1); + if (objectEvent->directionOverwrite) + sub_8095B84(objectEvent, sprite, objectEvent->directionOverwrite, 1, 1); + else + sub_8095B84(objectEvent, sprite, DIR_EAST, 1, 1); return MovementAction_AcroWheelieHopRight_Step1(objectEvent, sprite); } @@ -7233,7 +7345,7 @@ bool8 MovementAction_AcroWheelieHopRight_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 2, 0); + sub_8095B84(objectEvent, sprite, DIR_SOUTH, 2, 0); return MovementAction_AcroWheelieJumpDown_Step1(objectEvent, sprite); } @@ -7250,7 +7362,7 @@ bool8 MovementAction_AcroWheelieJumpDown_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 2, 0); + sub_8095B84(objectEvent, sprite, DIR_NORTH, 2, 0); return MovementAction_AcroWheelieJumpUp_Step1(objectEvent, sprite); } @@ -7267,7 +7379,10 @@ bool8 MovementAction_AcroWheelieJumpUp_Step1(struct ObjectEvent *objectEvent, st bool8 MovementAction_AcroWheelieJumpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 2, 0); + if (objectEvent->directionOverwrite) + sub_8095B84(objectEvent, sprite, objectEvent->directionOverwrite, 2, 0); + else + sub_8095B84(objectEvent, sprite, DIR_WEST, 2, 0); return MovementAction_AcroWheelieJumpLeft_Step1(objectEvent, sprite); } @@ -7284,7 +7399,10 @@ bool8 MovementAction_AcroWheelieJumpLeft_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieJumpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8095B84(objectEvent, sprite, gSidewaysStairsDirection, 2, 0); + if (objectEvent->directionOverwrite) + sub_8095B84(objectEvent, sprite, objectEvent->directionOverwrite, 2, 0); + else + sub_8095B84(objectEvent, sprite, DIR_EAST, 2, 0); return MovementAction_AcroWheelieJumpRight_Step1(objectEvent, sprite); } @@ -7301,25 +7419,31 @@ bool8 MovementAction_AcroWheelieJumpRight_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieInPlaceDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, gSidewaysStairsDirection, GetAcroWheeliePedalDirectionAnimNum(gSidewaysStairsDirection), 8); + sub_8094554(objectEvent, sprite, DIR_SOUTH, GetAcroWheeliePedalDirectionAnimNum(DIR_SOUTH), 8); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } bool8 MovementAction_AcroWheelieInPlaceUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, gSidewaysStairsDirection, GetAcroWheeliePedalDirectionAnimNum(gSidewaysStairsDirection), 8); + sub_8094554(objectEvent, sprite, DIR_NORTH, GetAcroWheeliePedalDirectionAnimNum(DIR_NORTH), 8); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } bool8 MovementAction_AcroWheelieInPlaceLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, gSidewaysStairsDirection, GetAcroWheeliePedalDirectionAnimNum(gSidewaysStairsDirection), 8); + if (objectEvent->directionOverwrite) + sub_8094554(objectEvent, sprite, objectEvent->directionOverwrite, GetAcroWheeliePedalDirectionAnimNum(objectEvent->directionOverwrite), 8); + else + sub_8094554(objectEvent, sprite, DIR_WEST, GetAcroWheeliePedalDirectionAnimNum(DIR_WEST), 8); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } bool8 MovementAction_AcroWheelieInPlaceRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8094554(objectEvent, sprite, gSidewaysStairsDirection, GetAcroWheeliePedalDirectionAnimNum(gSidewaysStairsDirection), 8); + if (objectEvent->directionOverwrite) + sub_8094554(objectEvent, sprite, objectEvent->directionOverwrite, GetAcroWheeliePedalDirectionAnimNum(objectEvent->directionOverwrite), 8); + else + sub_8094554(objectEvent, sprite, DIR_EAST, GetAcroWheeliePedalDirectionAnimNum(DIR_EAST), 8); return MovementAction_WalkInPlace_Step1(objectEvent, sprite); } @@ -7332,7 +7456,7 @@ void sub_80960C8(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 dire bool8 MovementAction_AcroPopWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_80960C8(objectEvent, sprite, gSidewaysStairsDirection, 1); + sub_80960C8(objectEvent, sprite, DIR_SOUTH, 1); return MovementAction_AcroPopWheelieMoveDown_Step1(objectEvent, sprite); } @@ -7348,7 +7472,7 @@ bool8 MovementAction_AcroPopWheelieMoveDown_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroPopWheelieMoveUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_80960C8(objectEvent, sprite, gSidewaysStairsDirection, 1); + sub_80960C8(objectEvent, sprite, DIR_NORTH, 1); return MovementAction_AcroPopWheelieMoveUp_Step1(objectEvent, sprite); } @@ -7364,7 +7488,10 @@ bool8 MovementAction_AcroPopWheelieMoveUp_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroPopWheelieMoveLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_80960C8(objectEvent, sprite, gSidewaysStairsDirection, 1); + if (objectEvent->directionOverwrite) + sub_80960C8(objectEvent, sprite, objectEvent->directionOverwrite, 1); + else + sub_80960C8(objectEvent, sprite, DIR_WEST, 1); return MovementAction_AcroPopWheelieMoveLeft_Step1(objectEvent, sprite); } @@ -7380,7 +7507,10 @@ bool8 MovementAction_AcroPopWheelieMoveLeft_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroPopWheelieMoveRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_80960C8(objectEvent, sprite, gSidewaysStairsDirection, 1); + if (objectEvent->directionOverwrite) + sub_80960C8(objectEvent, sprite, objectEvent->directionOverwrite, 1); + else + sub_80960C8(objectEvent, sprite, DIR_EAST, 1); return MovementAction_AcroPopWheelieMoveRight_Step1(objectEvent, sprite); } @@ -7402,7 +7532,7 @@ void sub_8096200(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 dire bool8 MovementAction_AcroWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096200(objectEvent, sprite, gSidewaysStairsDirection, 1); + sub_8096200(objectEvent, sprite, DIR_SOUTH, 1); return MovementAction_AcroWheelieMoveDown_Step1(objectEvent, sprite); } @@ -7418,7 +7548,7 @@ bool8 MovementAction_AcroWheelieMoveDown_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieMoveUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096200(objectEvent, sprite, gSidewaysStairsDirection, 1); + sub_8096200(objectEvent, sprite, DIR_NORTH, 1); return MovementAction_AcroWheelieMoveUp_Step1(objectEvent, sprite); } @@ -7434,7 +7564,10 @@ bool8 MovementAction_AcroWheelieMoveUp_Step1(struct ObjectEvent *objectEvent, st bool8 MovementAction_AcroWheelieMoveLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096200(objectEvent, sprite, gSidewaysStairsDirection, 1); + if (objectEvent->directionOverwrite) + sub_8096200(objectEvent, sprite, objectEvent->directionOverwrite, 1); + else + sub_8096200(objectEvent, sprite, DIR_WEST, 1); return MovementAction_AcroWheelieMoveLeft_Step1(objectEvent, sprite); } @@ -7450,7 +7583,10 @@ bool8 MovementAction_AcroWheelieMoveLeft_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroWheelieMoveRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096200(objectEvent, sprite, gSidewaysStairsDirection, 1); + if (objectEvent->directionOverwrite) + sub_8096200(objectEvent, sprite, objectEvent->directionOverwrite, 1); + else + sub_8096200(objectEvent, sprite, DIR_EAST, 1); return MovementAction_AcroWheelieMoveRight_Step1(objectEvent, sprite); } @@ -7473,7 +7609,7 @@ void sub_8096330(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 dire bool8 MovementAction_AcroEndWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096330(objectEvent, sprite, gSidewaysStairsDirection, 1); + sub_8096330(objectEvent, sprite, DIR_SOUTH, 1); return MovementAction_AcroEndWheelieMoveDown_Step1(objectEvent, sprite); } @@ -7489,7 +7625,7 @@ bool8 MovementAction_AcroEndWheelieMoveDown_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroEndWheelieMoveUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096330(objectEvent, sprite, gSidewaysStairsDirection, 1); + sub_8096330(objectEvent, sprite, DIR_NORTH, 1); return MovementAction_AcroEndWheelieMoveUp_Step1(objectEvent, sprite); } @@ -7505,7 +7641,10 @@ bool8 MovementAction_AcroEndWheelieMoveUp_Step1(struct ObjectEvent *objectEvent, bool8 MovementAction_AcroEndWheelieMoveLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096330(objectEvent, sprite, gSidewaysStairsDirection, 1); + if (objectEvent->directionOverwrite) + sub_8096330(objectEvent, sprite, objectEvent->directionOverwrite, 1); + else + sub_8096330(objectEvent, sprite, DIR_WEST, 1); return MovementAction_AcroEndWheelieMoveLeft_Step1(objectEvent, sprite); } @@ -7521,7 +7660,10 @@ bool8 MovementAction_AcroEndWheelieMoveLeft_Step1(struct ObjectEvent *objectEven bool8 MovementAction_AcroEndWheelieMoveRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - sub_8096330(objectEvent, sprite, gSidewaysStairsDirection, 1); + if (objectEvent->directionOverwrite) + sub_8096330(objectEvent, sprite, objectEvent->directionOverwrite, 1); + else + sub_8096330(objectEvent, sprite, DIR_EAST, 1); return MovementAction_AcroEndWheelieMoveRight_Step1(objectEvent, sprite); } @@ -9193,6 +9335,31 @@ u8 MovementAction_Fly_Finish(struct ObjectEvent *objectEvent, struct Sprite *spr return TRUE; } +// NEW +u16 GetMiniStepCount(u8 speed) +{ + return (u16)gUnknown_0850E768[speed]; +} + +void RunMiniStep(struct Sprite *sprite, u8 speed, u8 currentFrame) +{ + gUnknown_0850E754[speed][currentFrame](sprite, sprite->data[3]); +} + +bool8 PlayerIsUnderWaterfall(struct ObjectEvent *objectEvent) +{ + s16 x; + s16 y; + + x = objectEvent->currentCoords.x; + y = objectEvent->currentCoords.y; + MoveCoordsInDirection(DIR_NORTH, &x, &y, 0, 1); + if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y))) + return TRUE; + + return FALSE; +} + // running slow static void StartSlowRunningAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction) { @@ -9248,13 +9415,19 @@ bool8 MovementActionFunc_RunSlowUp_Step0(struct ObjectEvent *objectEvent, struct bool8 MovementActionFunc_RunSlowLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - StartSlowRunningAnim(objectEvent, sprite, DIR_WEST); + if (objectEvent->directionOverwrite) + StartSlowRunningAnim(objectEvent, sprite, objectEvent->directionOverwrite); + else + StartSlowRunningAnim(objectEvent, sprite, DIR_WEST); return MovementActionFunc_RunSlow_Step1(objectEvent, sprite); } bool8 MovementActionFunc_RunSlowRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - StartSlowRunningAnim(objectEvent, sprite, DIR_EAST); + if (objectEvent->directionOverwrite) + StartSlowRunningAnim(objectEvent, sprite, objectEvent->directionOverwrite); + else + StartSlowRunningAnim(objectEvent, sprite, DIR_EAST); return MovementActionFunc_RunSlow_Step1(objectEvent, sprite); } @@ -9267,163 +9440,3 @@ bool8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct S } return FALSE; } - -//sideways stairs -bool8 MovementAction_WalkStairDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_WEST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - sub_8093B60(objectEvent, sprite, DIR_NORTHWEST); - return MovementAction_WalkSlowDiagonalUpLeft_Step1(objectEvent, sprite); - #else - do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 0); - return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); - #endif -} - -bool8 MovementAction_WalkStairDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_EAST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - sub_8093B60(objectEvent, sprite, DIR_NORTHEAST); - return MovementAction_WalkSlowDiagonalUpRight_Step1(objectEvent, sprite); - #else - do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 0); - return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); - #endif -} - -bool8 MovementAction_WalkStairDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_WEST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - sub_8093B60(objectEvent, sprite, DIR_SOUTHWEST); - return MovementAction_WalkSlowDiagonalDownLeft_Step1(objectEvent, sprite); - #else - do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 0); - return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); - #endif -} - -bool8 MovementAction_WalkStairDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_EAST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - sub_8093B60(objectEvent, sprite, DIR_SOUTHEAST); - return MovementAction_WalkSlowDiagonalDownRight_Step1(objectEvent, sprite); - #else - do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 0); - return MovementAction_WalkNormalDiagonalUpLeft_Step1(objectEvent, sprite); - #endif -} - -bool8 MovementAction_RunStairDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_WEST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - StartSlowRunningAnim(objectEvent, sprite, DIR_NORTHWEST); - #else - StartRunningAnim(objectEvent, sprite, DIR_NORTHWEST); - #endif - return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); -} - -bool8 MovementAction_RunStairDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_EAST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - StartSlowRunningAnim(objectEvent, sprite, DIR_NORTHEAST); - #else - StartRunningAnim(objectEvent, sprite, DIR_NORTHEAST); - #endif - return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); -} - -bool8 MovementAction_RunStairDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_WEST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTHWEST); - #else - StartRunningAnim(objectEvent, sprite, DIR_SOUTHWEST); - #endif - return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); -} - -bool8 MovementAction_RunStairDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_EAST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTHEAST); - #else - StartRunningAnim(objectEvent, sprite, DIR_SOUTHEAST); - #endif - return MovementAction_RunStairDiagonal_Step1(objectEvent, sprite); -} - -bool8 MovementAction_RunStairDiagonal_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - if (npc_obj_ministep_stop_on_arrival(objectEvent, sprite)) - { - sprite->data[2] = 2; - return TRUE; - } - return FALSE; -} - -bool8 MovementAction_AcroBikeDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_WEST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 0); - #else - do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 2); - #endif - return MovementAction_RideWaterCurrentLeft_Step1(objectEvent, sprite); -} - -bool8 MovementAction_AcroBikeDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_WEST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 0); - #else - do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 2); - #endif - return MovementAction_RideWaterCurrentLeft_Step1(objectEvent, sprite); -} - -bool8 MovementAction_AcroBikeDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_EAST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 0); - #else - do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 2); - #endif - return MovementAction_RideWaterCurrentRight_Step1(objectEvent, sprite); -} - -bool8 MovementAction_AcroBikeDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - objectEvent->facingDirection = DIR_EAST; - objectEvent->facingDirectionLocked = TRUE; - #if SLOW_MOVEMENT_ON_STAIRS == TRUE - do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 0); - #else - do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 2); - #endif - return MovementAction_RideWaterCurrentRight_Step1(objectEvent, sprite); -} - diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 6ec280fd0d..f0a7f708f8 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -28,6 +28,7 @@ #include "trainer_see.h" #include "trainer_hill.h" #include "wild_encounter.h" +#include "follow_me.h" #include "constants/event_bg.h" #include "constants/event_objects.h" #include "constants/field_poison.h" @@ -288,8 +289,39 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 { u8 objectEventId; const u8 *script; - - objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height); + s16 currX = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x; + s16 currY = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y; + u8 currBehavior = MapGridGetMetatileBehaviorAt(currX, currY); + + switch (direction) + { + case DIR_EAST: + if (MetatileBehavior_IsSidewaysStairsLeftSideAny(metatileBehavior)) + // sideways stairs left-side to your right -> check northeast + objectEventId = GetObjectEventIdByXYZ(currX + 1, currY - 1, position->height); + else if (MetatileBehavior_IsSidewaysStairsRightSideAny(currBehavior)) + // on top of right-side stairs -> check southeast + objectEventId = GetObjectEventIdByXYZ(currX + 1, currY + 1, position->height); + else + // check in front of player + objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height); + break; + case DIR_WEST: + if (MetatileBehavior_IsSidewaysStairsRightSideAny(metatileBehavior)) + // facing sideways stairs right side -> check northwest + objectEventId = GetObjectEventIdByXYZ(currX - 1, currY - 1, position->height); + else if (MetatileBehavior_IsSidewaysStairsLeftSideAny(currBehavior)) + // on top of left-side stairs -> check southwest + objectEventId = GetObjectEventIdByXYZ(currX - 1, currY + 1, position->height); + else + // check in front of player + objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height); + break; + default: + objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height); + break; + } + if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER) { if (MetatileBehavior_IsCounter(metatileBehavior) != TRUE) @@ -448,10 +480,10 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me static const u8 *GetInteractedWaterScript(struct MapPosition *unused1, u8 metatileBehavior, u8 direction) { - if (FlagGet(FLAG_BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) + if (FlagGet(FLAG_BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE && CheckFollowerFlag(FOLLOWER_FLAG_CAN_SURF)) return EventScript_UseSurf; - if (MetatileBehavior_IsWaterfall(metatileBehavior) == TRUE) + if (MetatileBehavior_IsWaterfall(metatileBehavior) == TRUE && CheckFollowerFlag(FOLLOWER_FLAG_CAN_WATERFALL)) { if (FlagGet(FLAG_BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE) return EventScript_UseWaterfall; @@ -463,6 +495,9 @@ static const u8 *GetInteractedWaterScript(struct MapPosition *unused1, u8 metati static bool32 TrySetupDiveDownScript(void) { + if (!CheckFollowerFlag(FOLLOWER_FLAG_CAN_DIVE)) + return FALSE; + if (FlagGet(FLAG_BADGE07_GET) && TrySetDiveWarp() == 2) { ScriptContext1_SetupScript(EventScript_UseDive); @@ -473,6 +508,9 @@ static bool32 TrySetupDiveDownScript(void) static bool32 TrySetupDiveEmergeScript(void) { + if (!CheckFollowerFlag(FOLLOWER_FLAG_CAN_DIVE)) + return FALSE; + if (FlagGet(FLAG_BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && TrySetDiveWarp() == 1) { ScriptContext1_SetupScript(EventScript_UseDiveUnderwater); diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index dd52e3a612..f74b4f5a98 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -20,6 +20,7 @@ #include "strings.h" #include "task.h" #include "tv.h" +#include "follow_me.h" #include "wild_encounter.h" #include "constants/abilities.h" #include "constants/event_objects.h" @@ -624,22 +625,6 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) PlayerNotOnBikeCollideWithFarawayIslandMew(direction); return; } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_RIGHT) - { - if (heldKeys & B_BUTTON && FlagGet(FLAG_SYS_B_DASH)) - PlayerSidewaysStairsRightSideRunning(direction); - else - PlayerSidewaysStairsRightSide(direction); - return; - } - else if (collision == COLLISION_SIDEWAYS_STAIRS_TO_LEFT) - { - if (heldKeys & B_BUTTON && FlagGet(FLAG_SYS_B_DASH)) - return PlayerSidewaysStairsLeftSideRunning(direction); - else - return PlayerSidewaysStairsLeftSide(direction); - return; - } else { u8 adjustedCollision = collision - COLLISION_STOP_SURFING; @@ -659,45 +644,16 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_UNDERWATER) && (heldKeys & B_BUTTON) && FlagGet(FLAG_SYS_B_DASH) && IsRunningDisallowed(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) == 0) { - if (PlayerIsMovingOnRockStairs(direction)) - PlayerRunSlow(direction); - else - PlayerRun(direction); - + PlayerRun(direction); gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH; return; } else { - if (PlayerIsMovingOnRockStairs(direction)) - PlayerGoSlow(direction); - else - PlayerGoSpeed1(direction); + PlayerGoSpeed1(direction); } } -bool32 PlayerIsMovingOnRockStairs(u8 direction) -{ - #if SLOW_MOVEMENT_ON_STAIRS - struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - s16 x = objectEvent->currentCoords.x; - s16 y = objectEvent->currentCoords.y; - - switch (direction) - { - case DIR_NORTH: - return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - case DIR_SOUTH: - MoveCoords(DIR_SOUTH, &x, &y); - return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x, y)); - default: - return FALSE; - } - #else - return FALSE; - #endif -} - static u8 CheckForPlayerAvatarCollision(u8 direction) { s16 x, y; @@ -745,42 +701,20 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u } //sideways stairs logic - if (direction == DIR_WEST || direction == DIR_EAST) - { - if (MetatileBehavior_IsSidewaysStairsLeftSide(metatileBehavior)) - { - //moving ONTO left side stair - if (direction == DIR_WEST && currentBehavior != metatileBehavior) - return collision; //moving onto top part of left-stair going left, so no diagonal - else - return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; // move diagonally - } - else if (MetatileBehavior_IsSidewaysStairsRightSide(metatileBehavior)) - { - //moving ONTO right side stair - if (direction == DIR_EAST && currentBehavior != metatileBehavior) - return collision; //moving onto top part of right-stair going right, so no diagonal - else - return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; - } - else if (MetatileBehavior_IsSidewaysStairsLeftSideAny(currentBehavior)) - { - //moving OFF of any left side stair - if (direction == DIR_WEST && metatileBehavior != currentBehavior) - return COLLISION_SIDEWAYS_STAIRS_TO_LEFT; //moving off of left stairs onto non-stair -> move diagonal - else - return collision; //moving off of left side stair to east -> move east - } - else if (MetatileBehavior_IsSidewaysStairsRightSideAny(currentBehavior)) - { - //moving OFF of any right side stair - if (direction == DIR_EAST && metatileBehavior != currentBehavior) - return COLLISION_SIDEWAYS_STAIRS_TO_RIGHT; //moving off right stair onto non-stair -> move diagonal - else - return collision; - } - } - + /* + if (MetatileBehavior_IsSidewaysStairsLeftSideTop(metatileBehavior) && direction == DIR_EAST) + return COLLISION_IMPASSABLE; //moving onto left-side top edge east from ground -> cannot move + else if (MetatileBehavior_IsSidewaysStairsRightSideTop(metatileBehavior) && direction == DIR_WEST) + return COLLISION_IMPASSABLE; //moving onto left-side top edge east from ground -> cannot move + else if (MetatileBehavior_IsSidewaysStairsRightSideBottom(metatileBehavior) && (direction == DIR_EAST || direction == DIR_SOUTH)) + return COLLISION_IMPASSABLE; + else if (MetatileBehavior_IsSidewaysStairsLeftSideBottom(metatileBehavior) && (direction == DIR_WEST || direction == DIR_SOUTH)) + return COLLISION_IMPASSABLE; + else if ((MetatileBehavior_IsSidewaysStairsLeftSideTop(currentBehavior) || MetatileBehavior_IsSidewaysStairsRightSideTop(currentBehavior)) + && direction == DIR_NORTH && collision == COLLISION_NONE) + return COLLISION_IMPASSABLE; //trying to move north off of top-most tile onto same level doesn't work + */ + return collision; } @@ -961,7 +895,7 @@ static void PlayerAvatarTransition_Underwater(struct ObjectEvent *objEvent) ObjectEventSetGraphicsId(objEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_UNDERWATER)); ObjectEventTurn(objEvent, objEvent->movementDirection); SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_UNDERWATER); - objEvent->fieldEffectSpriteId = sub_8155800(objEvent->spriteId); + objEvent->fieldEffectSpriteId = DoBobbingFieldEffect(objEvent->spriteId); } static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *objEvent) @@ -1491,6 +1425,8 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) gPlayerAvatar.spriteId = objectEvent->spriteId; gPlayerAvatar.gender = gender; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_5 | PLAYER_AVATAR_FLAG_ON_FOOT); + + CreateFollowerAvatar(); } void SetPlayerInvisibility(bool8 invisible) @@ -1730,12 +1666,14 @@ static void CreateStopSurfingTask(u8 direction) ScriptContext2_Enable(); Overworld_ClearSavedMusic(); Overworld_ChangeMusicToDefault(); - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; + gPlayerAvatar.flags ^= PLAYER_AVATAR_FLAG_SURFING; gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; gPlayerAvatar.preventStep = TRUE; taskId = CreateTask(Task_StopSurfingInit, 0xFF); gTasks[taskId].data[0] = direction; Task_StopSurfingInit(taskId); + + PrepareFollowerDismountSurf(); } static void Task_StopSurfingInit(u8 taskId) @@ -2350,22 +2288,3 @@ u8 GetLeftSideStairsDirection(u8 direction) } } -void PlayerSidewaysStairsRightSide(u8 direction) -{ - PlayerSetAnimId(GetDiagonalRightStairsMovement(direction), 8); -} - -void PlayerSidewaysStairsLeftSide(u8 direction) -{ - PlayerSetAnimId(GetDiagonalLeftStairsMovement(direction), 8); -} - -void PlayerSidewaysStairsRightSideRunning(u8 direction) -{ - PlayerSetAnimId(GetDiagonalRightStairsRunningMovement(direction), 8); -} - -void PlayerSidewaysStairsLeftSideRunning(u8 direction) -{ - PlayerSetAnimId(GetDiagonalLeftStairsRunningMovement(direction), 8); -} diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 86e4ec98b3..ab5d6f288d 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1564,10 +1564,3 @@ bool8 MetatileBehavior_IsSidewaysStairsLeftSideAny(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsRockStairs(u8 metatileBehavior) -{ - if (metatileBehavior == MB_ROCK_STAIRS) - return TRUE; - else - return FALSE; -} From 598f5dd9140b90c5bd2d61941a2e24f2c6771646 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 28 Jun 2020 17:22:59 -0600 Subject: [PATCH 012/544] cherry pick 8960588d0b0b9e31c8971173396f6e631930229b --- data/layouts/PetalburgCity/map.bin | Bin 1800 -> 1800 bytes src/event_object_movement.c | 18 +++++------------- src/field_control_avatar.c | 11 ++--------- src/field_effect_helpers.c | 2 +- src/field_player_avatar.c | 5 ----- 5 files changed, 8 insertions(+), 28 deletions(-) diff --git a/data/layouts/PetalburgCity/map.bin b/data/layouts/PetalburgCity/map.bin index 35f0172ca20a07e800bc248b803e740364a24715..46c808e0556b1a035ea9cc16f5e47fc0a64f20f5 100644 GIT binary patch delta 229 zcmeC+>)_k)fQcuACDQ={vsfliU=f+bEG5WjFoUVk0Rks5F&ZdL)@Ih`V>Flv7oEs7 zIfYpdC^U;Hn!!h%wkB9_T_m^DN$3M>@ZCBSF^k~q(B zo&hW&!2;4=zyh=>p)g?r6Hsjki=Mz-qZv#)Bs^E$W{(k1D*<&N+_&ine4)v!+3G?M%Hjf05ujtS^xk5 delta 232 zcmeC+>)_k)fQeVq5CIh@Z)6gl#4IHkWE5Tc zp%4~5o@b`dO%+%aS%g`XSSBYhiA-L^BF6)^(+Fboscript; - else - return GetFollowerScriptPointer(); + return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->script; } const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId) @@ -5029,7 +5024,7 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16 for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { curObject = &gObjectEvents[i]; - if (curObject->active && curObject != objectEvent && !FollowMe_IsCollisionExempt(curObject, objectEvent)) + if (curObject->active && curObject != objectEvent) { // check for collision if curObject is active, not the object in question, and not exempt from collisions if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y)) @@ -5185,9 +5180,6 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementAct objectEvent->heldMovementActive = TRUE; objectEvent->heldMovementFinished = FALSE; gSprites[objectEvent->spriteId].data[2] = 0; - - FollowMe(objectEvent, movementActionId, FALSE); - return FALSE; } diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index f0a7f708f8..9c24ee77ea 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -28,7 +28,6 @@ #include "trainer_see.h" #include "trainer_hill.h" #include "wild_encounter.h" -#include "follow_me.h" #include "constants/event_bg.h" #include "constants/event_objects.h" #include "constants/field_poison.h" @@ -480,10 +479,10 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me static const u8 *GetInteractedWaterScript(struct MapPosition *unused1, u8 metatileBehavior, u8 direction) { - if (FlagGet(FLAG_BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE && CheckFollowerFlag(FOLLOWER_FLAG_CAN_SURF)) + if (FlagGet(FLAG_BADGE05_GET) == TRUE && PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) return EventScript_UseSurf; - if (MetatileBehavior_IsWaterfall(metatileBehavior) == TRUE && CheckFollowerFlag(FOLLOWER_FLAG_CAN_WATERFALL)) + if (MetatileBehavior_IsWaterfall(metatileBehavior) == TRUE) { if (FlagGet(FLAG_BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE) return EventScript_UseWaterfall; @@ -495,9 +494,6 @@ static const u8 *GetInteractedWaterScript(struct MapPosition *unused1, u8 metati static bool32 TrySetupDiveDownScript(void) { - if (!CheckFollowerFlag(FOLLOWER_FLAG_CAN_DIVE)) - return FALSE; - if (FlagGet(FLAG_BADGE07_GET) && TrySetDiveWarp() == 2) { ScriptContext1_SetupScript(EventScript_UseDive); @@ -508,9 +504,6 @@ static bool32 TrySetupDiveDownScript(void) static bool32 TrySetupDiveEmergeScript(void) { - if (!CheckFollowerFlag(FOLLOWER_FLAG_CAN_DIVE)) - return FALSE; - if (FlagGet(FLAG_BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && TrySetDiveWarp() == 1) { ScriptContext1_SetupScript(EventScript_UseDiveUnderwater); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 67102a83b2..e8e3dd6fe3 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1081,7 +1081,7 @@ static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite * } } -u8 sub_8155800(u8 oldSpriteId) +u8 DoBobbingFieldEffect(u8 oldSpriteId) { u8 spriteId; struct Sprite *sprite; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index f74b4f5a98..2d70fd2b10 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -20,7 +20,6 @@ #include "strings.h" #include "task.h" #include "tv.h" -#include "follow_me.h" #include "wild_encounter.h" #include "constants/abilities.h" #include "constants/event_objects.h" @@ -1425,8 +1424,6 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) gPlayerAvatar.spriteId = objectEvent->spriteId; gPlayerAvatar.gender = gender; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_5 | PLAYER_AVATAR_FLAG_ON_FOOT); - - CreateFollowerAvatar(); } void SetPlayerInvisibility(bool8 invisible) @@ -1672,8 +1669,6 @@ static void CreateStopSurfingTask(u8 direction) taskId = CreateTask(Task_StopSurfingInit, 0xFF); gTasks[taskId].data[0] = direction; Task_StopSurfingInit(taskId); - - PrepareFollowerDismountSurf(); } static void Task_StopSurfingInit(u8 taskId) From a23f716209b7e765030d2f58bb9adc72eeb4d522 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 14 Jul 2020 14:28:02 -0600 Subject: [PATCH 013/544] add slow stair movement back --- include/constants/global.h | 2 + include/field_player_avatar.h | 2 +- include/metatile_behavior.h | 1 + src/bike.c | 12 ++++-- src/event_object_movement.c | 73 +++++++++++++++++------------------ src/field_player_avatar.c | 41 +++++++++++++++++++- src/metatile_behavior.c | 9 +++++ 7 files changed, 95 insertions(+), 45 deletions(-) diff --git a/include/constants/global.h b/include/constants/global.h index 213ccca5b5..acc1f353d5 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -118,4 +118,6 @@ #define DIR_NORTHWEST 7 #define DIR_NORTHEAST 8 +#define SLOW_MOVEMENT_ON_STAIRS TRUE + #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 0f53e0b28d..658dc09d0a 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -64,7 +64,7 @@ bool32 IsPlayerSpinExitActive(void); void SetPlayerInvisibility(bool8 invisible); u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); void StartFishing(u8 rod); -bool32 PlayerIsMovingOnRockStairs(u8 direction); +bool8 ObjectMovingOnRockStairs(struct ObjectEvent *objectEvent, u8 direction); //sideways stairs u8 GetRightSideStairsDirection(u8 direction); u8 GetLeftSideStairsDirection(u8 direction); diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 128978cae6..58d6e82d76 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -145,6 +145,7 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); +bool8 MetatileBehavior_IsRockStairs(u8); //sideways stairs bool8 MetatileBehavior_IsSidewaysStairsRightSide(u8); bool8 MetatileBehavior_IsSidewaysStairsLeftSide(u8); diff --git a/src/bike.c b/src/bike.c index 1fe5b58b43..7c9eb0cf5c 100644 --- a/src/bike.c +++ b/src/bike.c @@ -246,6 +246,9 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) } else { + if (ObjectMovingOnRockStairs(playerObjEvent, direction) && gPlayerAvatar.bikeFrameCounter > 1) + gPlayerAvatar.bikeFrameCounter--; + sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array @@ -380,7 +383,6 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16 struct ObjectEvent *playerObjEvent; direction = GetPlayerMovementDirection(); - //gSidewaysStairsDirection = direction; playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; gPlayerAvatar.runningState = NOT_MOVING; @@ -577,7 +579,10 @@ static void AcroBikeTransition_Moving(u8 direction) } else { - PlayerRideWaterCurrent(direction); + if (ObjectMovingOnRockStairs(playerObjEvent, direction)) + PlayerGoSpeed2(direction); + else + PlayerRideWaterCurrent(direction); } } @@ -645,7 +650,7 @@ static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) } else { - derp: + derp: PlayerMovingHoppingWheelie(direction); } } @@ -1033,7 +1038,6 @@ void Bike_UpdateBikeCounterSpeed(u8 counter) static void Bike_SetBikeStill(void) { - //gSidewaysStairsDirection = gObjectEvents[gPlayerAvatar.objectEventId].facingDirection; gPlayerAvatar.bikeFrameCounter = 0; gPlayerAvatar.bikeSpeed = SPEED_STANDING; } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 1695388029..fc13c96643 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -135,7 +135,6 @@ static bool8 AnimateSpriteInFigure8(struct Sprite *sprite); static void UpdateObjectEventSprite(struct Sprite *); static void StartSlowRunningAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction); -static bool8 npc_obj_ministep_stop_on_arrival_slow(struct ObjectEvent *objectEvent, struct Sprite *sprite); const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; @@ -1142,6 +1141,10 @@ const u8 gRunSlowMovementActions[] = { [DIR_NORTH] = MOVEMENT_ACTION_RUN_UP_SLOW, [DIR_WEST] = MOVEMENT_ACTION_RUN_LEFT_SLOW, [DIR_EAST] = MOVEMENT_ACTION_RUN_RIGHT_SLOW, + [DIR_SOUTHWEST] = MOVEMENT_ACTION_RUN_LEFT_SLOW, + [DIR_SOUTHEAST] = MOVEMENT_ACTION_RUN_RIGHT_SLOW, + [DIR_NORTHWEST] = MOVEMENT_ACTION_RUN_LEFT_SLOW, + [DIR_NORTHEAST] = MOVEMENT_ACTION_RUN_RIGHT_SLOW, }; const u8 gOppositeDirections[] = { @@ -5170,10 +5173,35 @@ bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *objectEvent) return FALSE; } +static u8 TryUpdateMovementActionOnStairs(struct ObjectEvent *objectEvent, u8 movementActionId) +{ + if (objectEvent->isPlayer) + return movementActionId; //handled separately + + if (!ObjectMovingOnRockStairs(objectEvent, objectEvent->movementDirection)) + return movementActionId; + + switch (movementActionId) + { + case MOVEMENT_ACTION_WALK_NORMAL_DOWN: + return MOVEMENT_ACTION_WALK_SLOW_DOWN; + case MOVEMENT_ACTION_WALK_NORMAL_UP: + return MOVEMENT_ACTION_WALK_SLOW_UP; + case MOVEMENT_ACTION_WALK_NORMAL_LEFT: + return MOVEMENT_ACTION_WALK_SLOW_LEFT; + case MOVEMENT_ACTION_WALK_NORMAL_RIGHT: + return MOVEMENT_ACTION_WALK_SLOW_RIGHT; + default: + return movementActionId; + } +} + bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementActionId) { if (ObjectEventIsMovementOverridden(objectEvent)) return TRUE; + + movementActionId = TryUpdateMovementActionOnStairs(objectEvent, movementActionId); UnfreezeObjectEvent(objectEvent); objectEvent->movementActionId = movementActionId; @@ -5185,6 +5213,7 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementAct void ObjectEventForceSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementActionId) { + movementActionId = TryUpdateMovementActionOnStairs(objectEvent, movementActionId); ObjectEventClearHeldMovementIfActive(objectEvent); ObjectEventSetHeldMovement(objectEvent, movementActionId); } @@ -5224,7 +5253,7 @@ u8 ObjectEventClearHeldMovementIfFinished(struct ObjectEvent *objectEvent) u8 ObjectEventGetHeldMovementActionId(struct ObjectEvent *objectEvent) { if (objectEvent->heldMovementActive) - return objectEvent->movementActionId; + return TryUpdateMovementActionOnStairs(objectEvent, objectEvent->movementActionId); return 0xFF; } @@ -5329,6 +5358,7 @@ static u32 state_to_direction(u8 a0, u32 a1, u32 a2) static void ObjectEventExecHeldMovementAction(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + objectEvent->movementActionId = TryUpdateMovementActionOnStairs(objectEvent, objectEvent->movementActionId); if (gMovementActionFuncs[objectEvent->movementActionId][sprite->data[2]](objectEvent, sprite)) { objectEvent->heldMovementFinished = TRUE; @@ -5337,6 +5367,7 @@ static void ObjectEventExecHeldMovementAction(struct ObjectEvent *objectEvent, s static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + objectEvent->movementActionId = TryUpdateMovementActionOnStairs(objectEvent, objectEvent->movementActionId); if (gMovementActionFuncs[objectEvent->movementActionId][sprite->data[2]](objectEvent, sprite)) { objectEvent->movementActionId = 0xFF; @@ -5348,7 +5379,7 @@ static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *objectEvent static void ObjectEventSetSingleMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 animId) { - objectEvent->movementActionId = animId; + objectEvent->movementActionId = TryUpdateMovementActionOnStairs(objectEvent, animId); sprite->data[2] = 0; } @@ -9359,40 +9390,6 @@ static void StartSlowRunningAnim(struct ObjectEvent *objectEvent, struct Sprite npc_apply_anim_looping(objectEvent, sprite, GetRunningDirectionAnimNum(objectEvent->facingDirection)); } -#define tDirection data[3] -#define tDelay data[4] -#define tStepNo data[5] -static bool8 obj_npc_ministep_slow(struct Sprite *sprite) -{ - if ((++sprite->tDelay) & 1) - { - Step1(sprite, sprite->tDirection); - sprite->tStepNo++; - } - else - { - Step2(sprite, sprite->tDirection); - sprite->tStepNo += 2; - } - - if (sprite->tStepNo > 15) - return TRUE; - else - return FALSE; -} -static bool8 npc_obj_ministep_stop_on_arrival_slow(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - if (obj_npc_ministep_slow(sprite)) - { - ShiftStillObjectEventCoords(objectEvent); - objectEvent->triggerGroundEffectsOnStop = TRUE; - sprite->animPaused = TRUE; - return TRUE; - } - return FALSE; -} - - bool8 MovementActionFunc_RunSlowDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { StartSlowRunningAnim(objectEvent, sprite, DIR_SOUTH); @@ -9425,7 +9422,7 @@ bool8 MovementActionFunc_RunSlowRight_Step0(struct ObjectEvent *objectEvent, str bool8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - if (npc_obj_ministep_stop_on_arrival_slow(objectEvent, sprite)) + if (npc_obj_ministep_stop_on_arrival(objectEvent, sprite)) { sprite->data[2] = 2; return TRUE; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 2d70fd2b10..19e3fb4869 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -643,13 +643,20 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_UNDERWATER) && (heldKeys & B_BUTTON) && FlagGet(FLAG_SYS_B_DASH) && IsRunningDisallowed(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) == 0) { - PlayerRun(direction); + if (ObjectMovingOnRockStairs(&gObjectEvents[gPlayerAvatar.objectEventId], direction)) + PlayerRunSlow(direction); + else + PlayerRun(direction); + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH; return; } else { - PlayerGoSpeed1(direction); + if (ObjectMovingOnRockStairs(&gObjectEvents[gPlayerAvatar.objectEventId], direction)) + PlayerGoSlow(direction); + else + PlayerGoSpeed1(direction); } } @@ -2283,3 +2290,33 @@ u8 GetLeftSideStairsDirection(u8 direction) } } +bool8 ObjectMovingOnRockStairs(struct ObjectEvent *objectEvent, u8 direction) +{ + #if SLOW_MOVEMENT_ON_STAIRS + s16 x = objectEvent->currentCoords.x; + s16 y = objectEvent->currentCoords.y; + + switch (direction) + { + case DIR_NORTH: + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x,y)); + case DIR_SOUTH: + MoveCoords(DIR_SOUTH, &x, &y); + return MetatileBehavior_IsRockStairs(MapGridGetMetatileBehaviorAt(x,y)); + case DIR_WEST: + case DIR_EAST: + case DIR_NORTHEAST: + case DIR_NORTHWEST: + case DIR_SOUTHWEST: + case DIR_SOUTHEAST: + // directionOverwrite is only used for sideways stairs motion + if (objectEvent->directionOverwrite) + return TRUE; + default: + return FALSE; + } + #else + return FALSE; + #endif +} + diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index ab5d6f288d..ea397ab91d 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1564,3 +1564,12 @@ bool8 MetatileBehavior_IsSidewaysStairsLeftSideAny(u8 metatileBehavior) return FALSE; } +bool8 MetatileBehavior_IsRockStairs(u8 metatileBehavior) +{ + if (metatileBehavior == MB_ROCK_STAIRS) + return TRUE; + else + return FALSE; +} + + From 397da3736c400a72c64bb9d9b8f495523ad01299 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 17 Aug 2020 13:53:36 -0600 Subject: [PATCH 014/544] follower movement and slow stairs --- include/constants/global.h | 1 + src/event_object_movement.c | 9 +++++++-- src/field_player_avatar.c | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/constants/global.h b/include/constants/global.h index acc1f353d5..6434217095 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -119,5 +119,6 @@ #define DIR_NORTHEAST 8 #define SLOW_MOVEMENT_ON_STAIRS TRUE +#define FOLLOW_ME_IMPLEMENTED TRUE //for stairs movement. see ObjectMovingOnRockStairs in src/field_player_avatar.c #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/src/event_object_movement.c b/src/event_object_movement.c index fc13c96643..54252db1e7 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -5175,8 +5175,13 @@ bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *objectEvent) static u8 TryUpdateMovementActionOnStairs(struct ObjectEvent *objectEvent, u8 movementActionId) { - if (objectEvent->isPlayer) - return movementActionId; //handled separately + #if FOLLOW_ME_IMPLEMENTED + if (objectEvent->isPlayer || objectEvent->localId == GetFollowerLocalId()) + return movementActionId; //handled separately + #else + if (objectEvent->isPlayer) + return movementActionId; //handled separately + #endif if (!ObjectMovingOnRockStairs(objectEvent, objectEvent->movementDirection)) return movementActionId; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 19e3fb4869..5ef8a0ae2c 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -2296,6 +2296,11 @@ bool8 ObjectMovingOnRockStairs(struct ObjectEvent *objectEvent, u8 direction) s16 x = objectEvent->currentCoords.x; s16 y = objectEvent->currentCoords.y; + #if FOLLOW_ME_IMPLEMENTED + if (PlayerHasFollower() && (objectEvent->isPlayer || objectEvent->localId == GetFollowerLocalId())) + return FALSE; + #endif + switch (direction) { case DIR_NORTH: From 01d08d3ceeccec0a6d2f8fc848fa0655aec63f38 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 22 Aug 2020 15:25:41 -0600 Subject: [PATCH 015/544] fix sand onto sideways stairs bug --- include/constants/global.h | 2 +- src/event_object_movement.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/constants/global.h b/include/constants/global.h index 6434217095..d99ff1392b 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -119,6 +119,6 @@ #define DIR_NORTHEAST 8 #define SLOW_MOVEMENT_ON_STAIRS TRUE -#define FOLLOW_ME_IMPLEMENTED TRUE //for stairs movement. see ObjectMovingOnRockStairs in src/field_player_avatar.c +#define FOLLOW_ME_IMPLEMENTED FALSE //for stairs movement. see ObjectMovingOnRockStairs in src/field_player_avatar.c #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 54252db1e7..88b269da6e 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -7900,12 +7900,17 @@ static void GetGroundEffectFlags_LongGrassOnBeginStep(struct ObjectEvent *objEve static void GetGroundEffectFlags_Tracks(struct ObjectEvent *objEvent, u32 *flags) { - if (MetatileBehavior_IsDeepSand(objEvent->previousMetatileBehavior)) + u8 behavior = objEvent->previousMetatileBehavior; + + if (objEvent->directionOverwrite) + return; + + if (MetatileBehavior_IsDeepSand(behavior)) { *flags |= GROUND_EFFECT_FLAG_DEEP_SAND; } - else if (MetatileBehavior_IsSandOrDeepSand(objEvent->previousMetatileBehavior) - || MetatileBehavior_IsFootprints(objEvent->previousMetatileBehavior)) + else if (MetatileBehavior_IsSandOrDeepSand(behavior) + || MetatileBehavior_IsFootprints(behavior)) { *flags |= GROUND_EFFECT_FLAG_SAND; } From 7b9f308547d16ce850cdbc2d26e5bb2bc1035037 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Jan 2021 12:26:56 -0700 Subject: [PATCH 016/544] fix trigger tiles at end of sideways stairs (thx spherical ice for bug report) --- src/scrcmd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/scrcmd.c b/src/scrcmd.c index 7dc02b6a8f..b9c2d942a3 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -998,6 +998,7 @@ bool8 ScrCmd_applymovement(struct ScriptContext *ctx) u16 localId = VarGet(ScriptReadHalfword(ctx)); const void *movementScript = (const void *)ScriptReadWord(ctx); + gObjectEvents[GetObjectEventIdByLocalId(localId)].directionOverwrite = DIR_NONE ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript); sMovingNpcId = localId; return FALSE; @@ -1010,6 +1011,7 @@ bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx) u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); + gObjectEvents[GetObjectEventIdByLocalId(localId)].directionOverwrite = DIR_NONE ScriptMovement_StartObjectMovementScript(localId, mapNum, mapGroup, movementScript); sMovingNpcId = localId; return FALSE; From 13c5f15e56badc35c9272877c1d7706ef88a100c Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Jan 2021 12:29:08 -0700 Subject: [PATCH 017/544] cherry pick 53731a7fc7579e61d5ee7d32d0e06f1cbe5a085d --- include/event_object_movement.h | 11 ++++++----- src/event_object_movement.c | 3 +-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 61e7c5d6c2..e9b00d1214 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -427,11 +427,12 @@ u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *); -void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible); -bool32 IsObjectEventSpriteInvisible(u8 objectEventId); -void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId); -void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum); -bool32 IsObjectEventSpriteAnimating(u8 objectEventId); +void SetObjectEventSpriteInvisibility(u8 var, bool32 var2); +bool32 IsObjectEventSpriteInvisible(u8 var); +void SetObjectEventSpriteGraphics(u8 var1, u8 graphicsId); +void SetObjectEventSpriteAnim(u8 var1, u8 var2); +bool32 IsObjectEventSpriteAnimating(u8 var); +u8 GetObjectEventIdByLocalId(u8 localId); // NEW u16 GetMiniStepCount(u8 speed); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 88b269da6e..4cc404d354 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -103,7 +103,6 @@ static void ApplyLevitateMovement(u8); static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *); static bool8 MovementType_Buried_Callback(struct ObjectEvent *, struct Sprite *); static void CreateReflectionEffectSprites(void); -static u8 GetObjectEventIdByLocalId(u8); static u8 GetObjectEventIdByLocalIdAndMapInternal(u8, u8, u8); static bool8 GetAvailableObjectEventId(u16, u8, u8, u8 *); static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *); @@ -1270,7 +1269,7 @@ static u8 GetObjectEventIdByLocalIdAndMapInternal(u8 localId, u8 mapNum, u8 mapG return OBJECT_EVENTS_COUNT; } -static u8 GetObjectEventIdByLocalId(u8 localId) +u8 GetObjectEventIdByLocalId(u8 localId) { u8 i; for (i = 0; i < OBJECT_EVENTS_COUNT; i++) From 09c5e27a90d4bea780ffd799bd3ed55550f88493 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Jan 2021 12:30:02 -0700 Subject: [PATCH 018/544] syntax fix --- src/scrcmd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scrcmd.c b/src/scrcmd.c index b9c2d942a3..2acad7a795 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -998,7 +998,7 @@ bool8 ScrCmd_applymovement(struct ScriptContext *ctx) u16 localId = VarGet(ScriptReadHalfword(ctx)); const void *movementScript = (const void *)ScriptReadWord(ctx); - gObjectEvents[GetObjectEventIdByLocalId(localId)].directionOverwrite = DIR_NONE + gObjectEvents[GetObjectEventIdByLocalId(localId)].directionOverwrite = DIR_NONE; ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript); sMovingNpcId = localId; return FALSE; @@ -1011,7 +1011,7 @@ bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx) u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - gObjectEvents[GetObjectEventIdByLocalId(localId)].directionOverwrite = DIR_NONE + gObjectEvents[GetObjectEventIdByLocalId(localId)].directionOverwrite = DIR_NONE; ScriptMovement_StartObjectMovementScript(localId, mapNum, mapGroup, movementScript); sMovingNpcId = localId; return FALSE; From 42cc81a0b9b984143aa564b205b4b3ae58ed6753 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Thu, 1 Apr 2021 20:26:21 -0600 Subject: [PATCH 019/544] DoBobbingFieldEffect declaration --- include/field_effect_helpers.h | 2 +- src/field_effect_helpers.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 9b7b6ffd5c..6ed0df4c35 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -7,7 +7,7 @@ // Exported ROM declarations u8 CreateWarpArrowSprite(void); -u8 sub_8155800(u8 oldSpriteId); +u8 DoBobbingFieldEffect(u8 oldSpriteId); void SetSurfBobState(u8 spriteId, u8 value); void SetSurfBobWhileFlyingOutState(u8 spriteId, u8 value); void SetSurfBobWhileFishingState(u8 spriteId, u8 value, s16 data1); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index e8e3dd6fe3..d2cc1887a3 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -29,7 +29,7 @@ static void UpdateAshFieldEffect_Step2(struct Sprite *); static void SynchroniseSurfAnim(struct ObjectEvent *, struct Sprite *); static void sub_81556E8(struct ObjectEvent *, struct Sprite *); static void CreateBobbingEffect(struct ObjectEvent *, struct Sprite *, struct Sprite *); -static void sub_8155850(struct Sprite *); +static void BobbingEffectSpriteCallback(struct Sprite *); static u32 ShowDisguiseFieldEffect(u8, u8, u8); #define sReflectionObjEventId data[0] @@ -1088,14 +1088,14 @@ u8 DoBobbingFieldEffect(u8 oldSpriteId) spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1); sprite = &gSprites[spriteId]; - sprite->callback = sub_8155850; + sprite->callback = BobbingEffectSpriteCallback; sprite->invisible = TRUE; sprite->data[0] = oldSpriteId; sprite->data[1] = 1; return spriteId; } -static void sub_8155850(struct Sprite *sprite) +static void BobbingEffectSpriteCallback(struct Sprite *sprite) { struct Sprite *oldSprite; From e0ee7ce4844198218165afe3cd7102cfd3070f17 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Thu, 20 May 2021 15:45:13 -0600 Subject: [PATCH 020/544] fix bike tire tracks off sideways stairs --- src/event_object_movement.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index f976dfc68e..e2205c09f4 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -8313,12 +8313,13 @@ static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, st if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y) { + u8 movementDir = (objEvent->previousMovementDirection > DIR_EAST) ? (objEvent->previousMovementDirection - DIR_EAST) : objEvent->previousMovementDirection; gFieldEffectArguments[0] = objEvent->previousCoords.x; gFieldEffectArguments[1] = objEvent->previousCoords.y; gFieldEffectArguments[2] = 149; gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = - bikeTireTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; + bikeTireTracks_Transitions[movementDir][objEvent->facingDirection - 5]; FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); } } From 70026f2558cf7d463da8d6b8eb03590b6350e7d4 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Thu, 7 Apr 2022 12:24:07 -0400 Subject: [PATCH 021/544] fix tile attributes for sideways stairs behaviors --- src/metatile_behavior.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index ad674390c8..339c2ae468 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -66,13 +66,13 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [MB_SLIDE_NORTH] = TILE_FLAG_UNUSED, [MB_SLIDE_SOUTH] = TILE_FLAG_UNUSED, [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_FLAG_UNUSED, - [MB_SIDEWAYS_STAIRS_RIGHT_SIDE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SIDEWAYS_STAIRS_LEFT_SIDE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_ROCK_STAIRS] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_LEFT_SIDE] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM] = TILE_FLAG_UNUSED, + [MB_ROCK_STAIRS] = TILE_FLAG_UNUSED, [MB_EASTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, [MB_WESTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, [MB_NORTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, From bed5472014cdd7d746a9b4e9fffc952ee9978a8e Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 29 Jul 2022 11:18:03 -0400 Subject: [PATCH 022/544] fix pos2 to x2,y2 --- src/field_screen_effect.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 82aee41755..ee7887a1f3 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1308,15 +1308,15 @@ static bool8 WaitStairExitMovementFinished(s16 *a0, s16 *a1, s16 *a2, s16 *a3, s { *a2 += *a0; *a3 += *a1; - sprite->pos2.x = *a2 >> 5; - sprite->pos2.y = *a3 >> 5; + sprite->x2 = *a2 >> 5; + sprite->y2 = *a3 >> 5; (*a4)--; return TRUE; } else { - sprite->pos2.x = 0; - sprite->pos2.y = 0; + sprite->x2 = 0; + sprite->y2 = 0; return FALSE; } } @@ -1341,8 +1341,8 @@ static void ExitStairsMovement(s16 *a0, s16 *a1, s16 *a2, s16 *a3, s16 *a4) *a3 = *a1 * 16; *a4 = 16; sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->pos2.x = *a2 >> 5; - sprite->pos2.y = *a3 >> 5; + sprite->x2 = *a2 >> 5; + sprite->y2 = *a3 >> 5; *a0 *= -1; *a1 *= -1; } @@ -1410,8 +1410,8 @@ static void UpdateStairsMovement(s16 a0, s16 a1, s16 *a2, s16 *a3, s16 *a4) *a2 += a0; (*a4)++; - playerSpr->pos2.x = *a2 >> 5; - playerSpr->pos2.y = *a3 >> 5; + playerSpr->x2 = *a2 >> 5; + playerSpr->y2 = *a3 >> 5; if (playerObj->heldMovementFinished) ObjectEventForceSetHeldMovement(playerObj, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); } From 906622f04dc3a977f379196af295158c9d5324d2 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 29 Jul 2022 11:26:21 -0400 Subject: [PATCH 023/544] add gExitStairsMovementDisabled --- include/overworld.h | 1 + src/field_screen_effect.c | 4 +++- src/overworld.c | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/overworld.h b/include/overworld.h index adaa6aad04..e24b8e4d9c 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -51,6 +51,7 @@ extern void (*gFieldCallback)(void); extern bool8 (*gFieldCallback2)(void); extern u8 gLocalLinkPlayerId; extern u8 gFieldLinkPlayerCount; +extern bool8 gExitStairsMovementDisabled; extern const struct UCoords32 gDirectionToVectors[]; diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index ee7887a1f3..7f775aefdc 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -264,12 +264,14 @@ static void SetUpWarpExitTask(void) behavior = MapGridGetMetatileBehaviorAt(x, y); if (MetatileBehavior_IsDoor(behavior) == TRUE) func = Task_ExitDoor; - else if (MetatileBehavior_IsDirectionalStairWarp(behavior) == TRUE) + else if (MetatileBehavior_IsDirectionalStairWarp(behavior) == TRUE && !gExitStairsMovementDisabled) func = Task_ExitStairs; else if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE) func = Task_ExitNonAnimDoor; else func = Task_ExitNonDoor; + + gExitStairsMovementDisabled = FALSE; CreateTask(func, 10); } diff --git a/src/overworld.c b/src/overworld.c index 383f10ffe1..108a646cfb 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -202,6 +202,7 @@ EWRAM_DATA static struct InitialPlayerAvatarState sInitialPlayerAvatarState = {0 EWRAM_DATA static u16 sAmbientCrySpecies = 0; EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {0}; +EWRAM_DATA bool8 gExitStairsMovementDisabled = FALSE; static const struct WarpData sDummyWarpData = { @@ -1729,6 +1730,7 @@ void CB2_ContinueSavedGame(void) PlayTimeCounter_Start(); ScriptContext1_Init(); ScriptContext2_Disable(); + gExitStairsMovementDisabled = TRUE; InitMatchCallCounters(); if (UseContinueGameWarp() == TRUE) { @@ -1814,6 +1816,7 @@ static bool32 LoadMapInStepsLink(u8 *state) (*state)++; break; case 1: + gExitStairsMovementDisabled = FALSE; LoadMapFromWarp(TRUE); (*state)++; break; From 7bb81150999f6585e3e6eeb8c4bc22c42e27893f Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 3 Mar 2023 09:08:05 -0500 Subject: [PATCH 024/544] add start menu funcs, credit deokishisu --- data/event_scripts.s | 1 + data/specials.inc | 1 + src/field_control_avatar.c | 12 ++++++++++++ src/field_specials.c | 7 +++++++ 4 files changed, 21 insertions(+) diff --git a/data/event_scripts.s b/data/event_scripts.s index 886c55f71c..3d2a9b2a81 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -691,6 +691,7 @@ EventScript_BackupMrBrineyLocation:: @ 8271E95 .include "data/scripts/set_gym_trainers.inc" EventScript_CancelMessageBox:: + special DoPicboxCancel release end diff --git a/data/specials.inc b/data/specials.inc index 620fae369b..9c23506d20 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -535,3 +535,4 @@ gSpecials:: @ 81DBA64 def_special RemoveRecordsWindow def_special CloseDeptStoreElevatorWindow def_special TrySetBattleTowerLinkType + def_special DoPicboxCancel diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 16e334f429..6547855610 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1103,6 +1103,16 @@ static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition *position) return EventScript_TestSignpostMsg; } +static void Task_OpenStartMenu(u8 taskId) +{ + if (!ArePlayerFieldControlsLocked()) + { + PlaySE(SE_WIN_OPEN); + ShowStartMenu(); + DestroyTask(taskId); + } +} + void FieldInput_HandleCancelSignpost(struct FieldInput *input) { if (ScriptContext1_IsScriptSetUp() == TRUE) @@ -1123,6 +1133,8 @@ void FieldInput_HandleCancelSignpost(struct FieldInput *input) { ScriptContext1_SetupScript(EventScript_CancelMessageBox); ScriptContext2_Enable(); + if (!FuncIsActiveTask(Task_OpenStartMenu)) + CreateTask(Task_OpenStartMenu, 8); } } } diff --git a/src/field_specials.c b/src/field_specials.c index 86be21edac..93e5c0d1c1 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4376,3 +4376,10 @@ u8 Script_TryGainNewFanFromCounter(void) { return TryGainNewFanFromCounter(gSpecialVar_0x8004); } + +void DoPicboxCancel(void) +{ + u8 t = EOS; + AddTextPrinterParameterized(0, FONT_NORMAL, &t, 0, 1, 0, NULL); + ScriptMenu_HidePokemonPic(); +} From 9bf64085ba959c4c494eec9d8ae74d958f2781ed Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Sun, 21 May 2023 12:56:15 -0400 Subject: [PATCH 025/544] fix script context func names --- src/field_screen_effect.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index e006db412f..fd6ac119d5 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1356,14 +1356,14 @@ static void Task_ExitStairs(u8 taskId) if (WaitForWeatherFadeIn() == TRUE) { CameraObjectReset1(); - ScriptContext2_Disable(); + UnlockPlayerFieldControls(); DestroyTask(taskId); } break; case 0: Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - ScriptContext2_Enable(); + LockPlayerFieldControls(); ExitStairsMovement(&data[1], &data[2], &data[3], &data[4], &data[5]); data[0]++; break; @@ -1425,7 +1425,7 @@ static void Task_StairWarp(u8 taskId) switch (data[0]) { case 0: - ScriptContext2_Enable(); + LockPlayerFieldControls(); FreezeObjectEvents(); CameraObjectReset2(); data[0]++; From e52349b474a58928acba5145e8f596cc13bbc675 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 22 May 2023 12:28:32 -0400 Subject: [PATCH 026/544] fix missed conflict --- include/event_object_movement.h | 6 ------ src/event_object_movement.c | 5 +++-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index e636fd032d..dc3b4852ed 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -214,13 +214,7 @@ s16 GetFigure8YOffset(s16 idx); void CameraObjectReset2(void); u8 GetObjectEventBerryTreeId(u8 objectEventId); void SetBerryTreeJustPicked(u8 mapId, u8 mapNumber, u8 mapGroup); -<<<<<<< HEAD -bool8 IsBerryTreeSparkling(u8, u8, u8); -struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup); -u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY); -======= bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup); ->>>>>>> 73a6a583b3706979e1a15976e30270984f1f0c26 void MovementType_None(struct Sprite *); void MovementType_LookAround(struct Sprite *); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 084f8760cd..1bf74a7818 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -133,6 +133,7 @@ static u16 GetObjectEventFlagIdByObjectEventId(u8); static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *); static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetObjectEventMovingCameraOffset(s16 *, s16 *); +static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); static void LoadObjectEventPalette(u16); static void RemoveObjectEventIfOutsideView(struct ObjectEvent *); static void SpawnObjectEventOnReturnToField(u8, s16, s16); @@ -1535,7 +1536,7 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven return objectEventId; } -u8 TrySpawnObjectEventTemplate(const 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; @@ -2498,7 +2499,7 @@ u8 GetObjectEventBerryTreeId(u8 objectEventId) return gObjectEvents[objectEventId].trainerRange_berryTreeId; } -struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { const struct ObjectEventTemplate *templates; const struct MapHeader *mapHeader; From d80cf0a193711b8d8c902b50f9cd286f4acc7b8a Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Wed, 24 May 2023 20:48:11 -0400 Subject: [PATCH 027/544] fix exiting sideways stairs onto ice. thanks to Agustin --- src/field_player_avatar.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 44fe6e0c6e..db793d10c0 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -444,7 +444,22 @@ static bool8 ForcedMovement_None(void) static bool8 DoForcedMovement(u8 direction, void (*moveFunc)(u8)) { struct PlayerAvatar *playerAvatar = &gPlayerAvatar; - u8 collision = CheckForPlayerAvatarCollision(direction); + u8 collision; + + // Check for sideways stairs onto ice movement. + switch (direction) + { + case DIR_NORTHWEST: + case DIR_SOUTHWEST: + direction = DIR_WEST; + break; + case DIR_NORTHEAST: + case DIR_SOUTHEAST: + direction = DIR_EAST; + break; + } + + collision = CheckForPlayerAvatarCollision(direction); playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE; if (collision) From 7fa9819d9a91ea6641b966d13b5135d6a40074c9 Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Sat, 11 Nov 2023 22:51:04 +1300 Subject: [PATCH 028/544] Makefile uses make_tools, mapjson takes out dir. Removed generated files (layouts.h, map_groups.h) from git. --- Makefile | 55 ++- include/constants/.gitignore | 3 + include/constants/layouts.h | 450 ------------------------- include/constants/map_groups.h | 596 --------------------------------- make_tools.mk | 18 +- map_data_rules.mk | 30 +- tools/jsonproc/jsonproc.cpp | 2 + tools/mapjson/mapjson.cpp | 122 ++++--- 8 files changed, 131 insertions(+), 1145 deletions(-) create mode 100644 include/constants/.gitignore delete mode 100755 include/constants/layouts.h delete mode 100755 include/constants/map_groups.h diff --git a/Makefile b/Makefile index 5c073b36ca..7d92bad21c 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,9 @@ ifeq (compare,$(MAKECMDGOALS)) COMPARE := 1 endif +# Default make rule +all: rom + # don't use dkP's base_tools anymore # because the redefinition of $(CC) conflicts # with when we want to use $(CC) to preprocess files @@ -121,24 +124,21 @@ endif LDFLAGS = -Map ../../$(MAP) +AUTO_GEN_TARGETS := +include make_tools.mk SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c -GFX := tools/gbagfx/gbagfx$(EXE) -AIF := tools/aif2pcm/aif2pcm$(EXE) -MID := tools/mid2agb/mid2agb$(EXE) -SCANINC := tools/scaninc/scaninc$(EXE) -PREPROC := tools/preproc/preproc$(EXE) -RAMSCRGEN := tools/ramscrgen/ramscrgen$(EXE) -FIX := tools/gbafix/gbafix$(EXE) -MAPJSON := tools/mapjson/mapjson$(EXE) -JSONPROC := tools/jsonproc/jsonproc$(EXE) +GFX := $(TOOLS_DIR)/gbagfx/gbagfx$(EXE) +AIF := $(TOOLS_DIR)/aif2pcm/aif2pcm$(EXE) +MID := $(TOOLS_DIR)/mid2agb/mid2agb$(EXE) +SCANINC := $(TOOLS_DIR)/scaninc/scaninc$(EXE) +PREPROC := $(TOOLS_DIR)/preproc/preproc$(EXE) +RAMSCRGEN := $(TOOLS_DIR)/ramscrgen/ramscrgen$(EXE) +FIX := $(TOOLS_DIR)/gbafix/gbafix$(EXE) +MAPJSON := $(TOOLS_DIR)/mapjson/mapjson$(EXE) +JSONPROC := $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) PERL := perl -# Inclusive list. If you don't want a tool to be built, don't add it here. -TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc -TOOLBASE = $(TOOLDIRS:tools/%=%) -TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE)) - MAKEFLAGS += --no-print-directory # Clear the default suffixes @@ -151,7 +151,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) libagbsyscall modern tidymodern tidynonmodern +.PHONY: all rom clean compare tidy mostlyclean libagbsyscall modern tidymodern tidynonmodern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -161,6 +161,7 @@ infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst # Since we don't need to reload most of this makefile ifeq (,$(filter-out all rom compare modern libagbsyscall syms,$(MAKECMDGOALS))) $(call infoshell, $(MAKE) -f make_tools.mk) +$(call infoshell, $(MAKE) generated) else NODEP ?= 1 endif @@ -211,17 +212,8 @@ SUBDIRS := $(sort $(dir $(OBJS))) $(shell mkdir -p $(SUBDIRS)) endif -AUTO_GEN_TARGETS := - -all: rom - -tools: $(TOOLDIRS) - syms: $(SYM) -$(TOOLDIRS): - @$(MAKE) -C $@ - rom: $(ROM) ifeq ($(COMPARE),1) @$(SHA1) rom.sha1 @@ -232,9 +224,6 @@ compare: all clean: mostlyclean clean-tools -clean-tools: - @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) - mostlyclean: tidynonmodern tidymodern find sound -iname '*.bin' -exec rm {} + rm -f $(MID_SUBDIR)/*.s @@ -265,6 +254,8 @@ include spritesheet_rules.mk include json_data_rules.mk include songs.mk +generated: $(AUTO_GEN_TARGETS) + %.s: ; %.png: ; %.pal: ; @@ -282,7 +273,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/libc.o: CC1 := $(TOOLS_DIR)/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -291,10 +282,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/m4a.o: CC1 := $(TOOLS_DIR)/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) +$(C_BUILDDIR)/librfu_intr.o: CC1 := $(TOOLS_DIR)/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast @@ -322,7 +313,7 @@ else endif else define C_DEP -$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) +$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include -I gflib $2) ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - @@ -349,7 +340,7 @@ else endif else define GFLIB_DEP -$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) +$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include -I gflib $2) ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - diff --git a/include/constants/.gitignore b/include/constants/.gitignore new file mode 100644 index 0000000000..761af9db76 --- /dev/null +++ b/include/constants/.gitignore @@ -0,0 +1,3 @@ +# Will be moved to build/ eventually +map_groups.h +layouts.h \ No newline at end of file diff --git a/include/constants/layouts.h b/include/constants/layouts.h deleted file mode 100755 index db92c95942..0000000000 --- a/include/constants/layouts.h +++ /dev/null @@ -1,450 +0,0 @@ -#ifndef GUARD_CONSTANTS_LAYOUTS_H -#define GUARD_CONSTANTS_LAYOUTS_H - -// -// DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json -// - -#define LAYOUT_PETALBURG_CITY 1 -#define LAYOUT_SLATEPORT_CITY 2 -#define LAYOUT_MAUVILLE_CITY 3 -#define LAYOUT_RUSTBORO_CITY 4 -#define LAYOUT_FORTREE_CITY 5 -#define LAYOUT_LILYCOVE_CITY 6 -#define LAYOUT_MOSSDEEP_CITY 7 -#define LAYOUT_SOOTOPOLIS_CITY 8 -#define LAYOUT_EVER_GRANDE_CITY 9 -#define LAYOUT_LITTLEROOT_TOWN 10 -#define LAYOUT_OLDALE_TOWN 11 -#define LAYOUT_DEWFORD_TOWN 12 -#define LAYOUT_LAVARIDGE_TOWN 13 -#define LAYOUT_FALLARBOR_TOWN 14 -#define LAYOUT_VERDANTURF_TOWN 15 -#define LAYOUT_PACIFIDLOG_TOWN 16 -#define LAYOUT_ROUTE101 17 -#define LAYOUT_ROUTE102 18 -#define LAYOUT_ROUTE103 19 -#define LAYOUT_ROUTE104 20 -#define LAYOUT_ROUTE105 21 -#define LAYOUT_ROUTE106 22 -#define LAYOUT_ROUTE107 23 -#define LAYOUT_ROUTE108 24 -#define LAYOUT_ROUTE109 25 -#define LAYOUT_ROUTE110 26 -#define LAYOUT_ROUTE111 27 -#define LAYOUT_ROUTE112 28 -#define LAYOUT_ROUTE113 29 -#define LAYOUT_ROUTE114 30 -#define LAYOUT_ROUTE115 31 -#define LAYOUT_ROUTE116 32 -#define LAYOUT_ROUTE117 33 -#define LAYOUT_ROUTE118 34 -#define LAYOUT_ROUTE119 35 -#define LAYOUT_ROUTE120 36 -#define LAYOUT_ROUTE121 37 -#define LAYOUT_ROUTE122 38 -#define LAYOUT_ROUTE123 39 -#define LAYOUT_ROUTE124 40 -#define LAYOUT_ROUTE125 41 -#define LAYOUT_ROUTE126 42 -#define LAYOUT_ROUTE127 43 -#define LAYOUT_ROUTE128 44 -#define LAYOUT_ROUTE129 45 -#define LAYOUT_ROUTE130_MIRAGE_ISLAND 46 -#define LAYOUT_ROUTE131 47 -#define LAYOUT_ROUTE132 48 -#define LAYOUT_ROUTE133 49 -#define LAYOUT_ROUTE134 50 -#define LAYOUT_UNDERWATER_ROUTE126 51 -#define LAYOUT_UNDERWATER_ROUTE127 52 -#define LAYOUT_UNDERWATER_ROUTE128 53 -#define LAYOUT_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F 54 -#define LAYOUT_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F 55 -#define LAYOUT_LITTLEROOT_TOWN_MAYS_HOUSE_1F 56 -#define LAYOUT_LITTLEROOT_TOWN_MAYS_HOUSE_2F 57 -#define LAYOUT_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB 58 -#define LAYOUT_HOUSE1 59 -#define LAYOUT_HOUSE2 60 -#define LAYOUT_POKEMON_CENTER_1F 61 -#define LAYOUT_POKEMON_CENTER_2F 62 -#define LAYOUT_MART 63 -#define LAYOUT_HOUSE3 64 -#define LAYOUT_DEWFORD_TOWN_GYM 65 -#define LAYOUT_DEWFORD_TOWN_HALL 66 -#define LAYOUT_HOUSE4 67 -#define LAYOUT_LAVARIDGE_TOWN_HERB_SHOP 68 -#define LAYOUT_LAVARIDGE_TOWN_GYM_1F 69 -#define LAYOUT_LAVARIDGE_TOWN_GYM_B1F 70 -#define LAYOUT_LAVARIDGE_TOWN_POKEMON_CENTER_1F 71 -#define LAYOUT_FALLARBOR_TOWN_LEFTOVER_RSCONTEST_LOBBY 72 -#define LAYOUT_FALLARBOR_TOWN_LEFTOVER_RSCONTEST_HALL 73 -#define LAYOUT_LILYCOVE_CITY_HOUSE2 74 -#define LAYOUT_UNUSED_CONTEST_ROOM1 75 -#define LAYOUT_VERDANTURF_TOWN_WANDAS_HOUSE 76 -#define LAYOUT_PACIFIDLOG_TOWN_HOUSE1 77 -#define LAYOUT_PACIFIDLOG_TOWN_HOUSE2 78 -#define LAYOUT_PETALBURG_CITY_GYM 79 -#define LAYOUT_HOUSE_WITH_BED 80 -#define LAYOUT_SLATEPORT_CITY_STERNS_SHIPYARD_1F 81 -#define LAYOUT_SLATEPORT_CITY_STERNS_SHIPYARD_2F 82 -#define LAYOUT_UNUSED_CONTEST_ROOM2 83 -#define LAYOUT_UNUSED_CONTEST_ROOM3 84 -#define LAYOUT_SLATEPORT_CITY_POKEMON_FAN_CLUB 85 -#define LAYOUT_SLATEPORT_CITY_OCEANIC_MUSEUM_1F 86 -#define LAYOUT_SLATEPORT_CITY_OCEANIC_MUSEUM_2F 87 -#define LAYOUT_HARBOR 88 -#define LAYOUT_MAUVILLE_CITY_GYM 89 -#define LAYOUT_MAUVILLE_CITY_BIKE_SHOP 90 -#define LAYOUT_MAUVILLE_CITY_GAME_CORNER 91 -#define LAYOUT_RUSTBORO_CITY_DEVON_CORP_1F 92 -#define LAYOUT_RUSTBORO_CITY_DEVON_CORP_2F 93 -#define LAYOUT_RUSTBORO_CITY_GYM 94 -#define LAYOUT_RUSTBORO_CITY_POKEMON_SCHOOL 95 -#define LAYOUT_RUSTBORO_CITY_HOUSE 96 -#define LAYOUT_RUSTBORO_CITY_HOUSE1 97 -#define LAYOUT_RUSTBORO_CITY_CUTTERS_HOUSE 98 -#define LAYOUT_FORTREE_CITY_HOUSE1 99 -#define LAYOUT_FORTREE_CITY_GYM 100 -#define LAYOUT_FORTREE_CITY_HOUSE2 101 -#define LAYOUT_ROUTE104_MR_BRINEYS_HOUSE 102 -#define LAYOUT_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F 103 -#define LAYOUT_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F 104 -#define LAYOUT_LILYCOVE_CITY_CONTEST_LOBBY 105 -#define LAYOUT_LILYCOVE_CITY_CONTEST_HALL 106 -#define LAYOUT_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB 107 -#define LAYOUT_MOSSDEEP_CITY_GYM 108 -#define LAYOUT_SOOTOPOLIS_CITY_GYM_1F 109 -#define LAYOUT_SOOTOPOLIS_CITY_GYM_B1F 110 -#define LAYOUT_EVER_GRANDE_CITY_SIDNEYS_ROOM 111 -#define LAYOUT_EVER_GRANDE_CITY_PHOEBES_ROOM 112 -#define LAYOUT_EVER_GRANDE_CITY_GLACIAS_ROOM 113 -#define LAYOUT_EVER_GRANDE_CITY_DRAKES_ROOM 114 -#define LAYOUT_EVER_GRANDE_CITY_CHAMPIONS_ROOM 115 -#define LAYOUT_EVER_GRANDE_CITY_SHORT_HALL 116 -#define LAYOUT_ROUTE104_PRETTY_PETAL_FLOWER_SHOP 117 -#define LAYOUT_CABLE_CAR_STATION 118 -#define LAYOUT_ROUTE114_FOSSIL_MANIACS_HOUSE 119 -#define LAYOUT_ROUTE114_FOSSIL_MANIACS_TUNNEL 120 -#define LAYOUT_ROUTE114_LANETTES_HOUSE 121 -#define LAYOUT_ROUTE116_TUNNELERS_REST_HOUSE 122 -#define LAYOUT_ROUTE117_POKEMON_DAY_CARE 123 -#define LAYOUT_ROUTE121_SAFARI_ZONE_ENTRANCE 124 -#define LAYOUT_METEOR_FALLS_1F_1R 125 -#define LAYOUT_METEOR_FALLS_1F_2R 126 -#define LAYOUT_METEOR_FALLS_B1F_1R 127 -#define LAYOUT_METEOR_FALLS_B1F_2R 128 -#define LAYOUT_RUSTURF_TUNNEL 129 -#define LAYOUT_UNDERWATER_SOOTOPOLIS_CITY 130 -#define LAYOUT_DESERT_RUINS 131 -#define LAYOUT_GRANITE_CAVE_1F 132 -#define LAYOUT_GRANITE_CAVE_B1F 133 -#define LAYOUT_GRANITE_CAVE_B2F 134 -#define LAYOUT_PETALBURG_WOODS 135 -#define LAYOUT_MT_CHIMNEY 136 -#define LAYOUT_MT_PYRE_1F 137 -#define LAYOUT_MT_PYRE_2F 138 -#define LAYOUT_MT_PYRE_3F 139 -#define LAYOUT_MT_PYRE_4F 140 -#define LAYOUT_MT_PYRE_5F 141 -#define LAYOUT_MT_PYRE_6F 142 -#define LAYOUT_AQUA_HIDEOUT_1F 143 -#define LAYOUT_AQUA_HIDEOUT_B1F 144 -#define LAYOUT_AQUA_HIDEOUT_B2F 145 -#define LAYOUT_UNDERWATER_SEAFLOOR_CAVERN 146 -#define LAYOUT_SEAFLOOR_CAVERN_ENTRANCE 147 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM1 148 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM2 149 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM3 150 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM4 151 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM5 152 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM6 153 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM7 154 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM8 155 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM9 156 -#define LAYOUT_CAVE_OF_ORIGIN_ENTRANCE 157 -#define LAYOUT_CAVE_OF_ORIGIN_1F 158 -#define LAYOUT_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1 159 -#define LAYOUT_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2 160 -#define LAYOUT_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3 161 -#define LAYOUT_CAVE_OF_ORIGIN_B1F 162 -#define LAYOUT_VICTORY_ROAD_1F 163 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM 164 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_INNER_ROOM 165 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM 166 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM 167 -#define LAYOUT_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM 168 -#define LAYOUT_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM 169 -#define LAYOUT_UNUSED_CAVE1 170 -#define LAYOUT_UNUSED_CAVE2 171 -#define LAYOUT_UNUSED_CAVE3 172 -#define LAYOUT_UNUSED_CAVE4 173 -#define LAYOUT_UNUSED_CAVE5 174 -#define LAYOUT_UNUSED_CAVE6 175 -#define LAYOUT_UNUSED_CAVE7 176 -#define LAYOUT_UNUSED_CAVE8 177 -#define LAYOUT_UNUSED_CAVE9 178 -#define LAYOUT_UNUSED_CAVE10 179 -#define LAYOUT_UNUSED_CAVE11 180 -#define LAYOUT_UNUSED_CAVE12 181 -#define LAYOUT_UNUSED_CAVE13 182 -#define LAYOUT_UNUSED_CAVE14 183 -#define LAYOUT_NEW_MAUVILLE_ENTRANCE 184 -#define LAYOUT_NEW_MAUVILLE_INSIDE 185 -#define LAYOUT_ABANDONED_SHIP_DECK 186 -#define LAYOUT_ABANDONED_SHIP_CORRIDORS_1F 187 -#define LAYOUT_ABANDONED_SHIP_ROOMS_1F 188 -#define LAYOUT_ABANDONED_SHIP_CORRIDORS_B1F 189 -#define LAYOUT_ABANDONED_SHIP_ROOMS_B1F 190 -#define LAYOUT_ABANDONED_SHIP_ROOMS2_B1F 191 -#define LAYOUT_ABANDONED_SHIP_UNDERWATER1 192 -#define LAYOUT_ABANDONED_SHIP_ROOM_B1F 193 -#define LAYOUT_ABANDONED_SHIP_ROOMS2_1F 194 -#define LAYOUT_ABANDONED_SHIP_CAPTAINS_OFFICE 195 -#define LAYOUT_ABANDONED_SHIP_UNDERWATER2 196 -#define LAYOUT_SECRET_BASE_RED_CAVE1 197 -#define LAYOUT_SECRET_BASE_BROWN_CAVE1 198 -#define LAYOUT_SECRET_BASE_BLUE_CAVE1 199 -#define LAYOUT_SECRET_BASE_YELLOW_CAVE1 200 -#define LAYOUT_SECRET_BASE_TREE1 201 -#define LAYOUT_SECRET_BASE_SHRUB1 202 -#define LAYOUT_SECRET_BASE_RED_CAVE2 203 -#define LAYOUT_SECRET_BASE_BROWN_CAVE2 204 -#define LAYOUT_SECRET_BASE_BLUE_CAVE2 205 -#define LAYOUT_SECRET_BASE_YELLOW_CAVE2 206 -#define LAYOUT_SECRET_BASE_TREE2 207 -#define LAYOUT_SECRET_BASE_SHRUB2 208 -#define LAYOUT_SECRET_BASE_RED_CAVE3 209 -#define LAYOUT_SECRET_BASE_BROWN_CAVE3 210 -#define LAYOUT_SECRET_BASE_BLUE_CAVE3 211 -#define LAYOUT_SECRET_BASE_YELLOW_CAVE3 212 -#define LAYOUT_SECRET_BASE_TREE3 213 -#define LAYOUT_SECRET_BASE_SHRUB3 214 -#define LAYOUT_SECRET_BASE_RED_CAVE4 215 -#define LAYOUT_SECRET_BASE_BROWN_CAVE4 216 -#define LAYOUT_SECRET_BASE_BLUE_CAVE4 217 -#define LAYOUT_SECRET_BASE_YELLOW_CAVE4 218 -#define LAYOUT_SECRET_BASE_TREE4 219 -#define LAYOUT_SECRET_BASE_SHRUB4 220 -#define LAYOUT_BATTLE_COLOSSEUM_2P 221 -#define LAYOUT_TRADE_CENTER 222 -#define LAYOUT_RECORD_CORNER 223 -#define LAYOUT_BATTLE_COLOSSEUM_4P 224 -#define LAYOUT_CONTEST_HALL 225 -#define LAYOUT_UNUSED_CONTEST_HALL1 226 -#define LAYOUT_UNUSED_CONTEST_HALL2 227 -#define LAYOUT_UNUSED_CONTEST_HALL3 228 -#define LAYOUT_UNUSED_CONTEST_HALL4 229 -#define LAYOUT_UNUSED_CONTEST_HALL5 230 -#define LAYOUT_UNUSED_CONTEST_HALL6 231 -#define LAYOUT_CONTEST_HALL_BEAUTY 232 -#define LAYOUT_CONTEST_HALL_TOUGH 233 -#define LAYOUT_CONTEST_HALL_COOL 234 -#define LAYOUT_CONTEST_HALL_SMART 235 -#define LAYOUT_CONTEST_HALL_CUTE 236 -#define LAYOUT_INSIDE_OF_TRUCK 237 -#define LAYOUT_SAFARI_ZONE_NORTHWEST 238 -#define LAYOUT_SAFARI_ZONE_NORTH 239 -#define LAYOUT_SAFARI_ZONE_SOUTHWEST 240 -#define LAYOUT_SAFARI_ZONE_SOUTH 241 -#define LAYOUT_UNUSED_OUTDOOR_AREA 242 -#define LAYOUT_ROUTE109_SEASHORE_HOUSE 243 -#define LAYOUT_ROUTE110_TRICK_HOUSE_ENTRANCE 244 -#define LAYOUT_ROUTE110_TRICK_HOUSE_END 245 -#define LAYOUT_ROUTE110_TRICK_HOUSE_CORRIDOR 246 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE1 247 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE2 248 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE3 249 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE4 250 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE5 251 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE6 252 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE7 253 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE8 254 -#define LAYOUT_FORTREE_CITY_DECORATION_SHOP 255 -#define LAYOUT_ROUTE110_SEASIDE_CYCLING_ROAD_ENTRANCE 256 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_1F 257 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_2F 258 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_3F 259 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_4F 260 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_5F 261 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP 262 -#define LAYOUT_ROUTE130 263 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY 264 -#define LAYOUT_BATTLE_FRONTIER_OUTSIDE_WEST 265 -#define LAYOUT_BATTLE_ELEVATOR 266 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR 267 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM 268 -#define LAYOUT_RUSTBORO_CITY_DEVON_CORP_3F 269 -#define LAYOUT_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F 270 -#define LAYOUT_ROUTE119_WEATHER_INSTITUTE_1F 271 -#define LAYOUT_ROUTE119_WEATHER_INSTITUTE_2F 272 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR 273 -#define LAYOUT_UNDERWATER_ROUTE124 274 -#define LAYOUT_MOSSDEEP_CITY_SPACE_CENTER_1F 275 -#define LAYOUT_MOSSDEEP_CITY_SPACE_CENTER_2F 276 -#define LAYOUT_SS_TIDAL_CORRIDOR 277 -#define LAYOUT_SS_TIDAL_LOWER_DECK 278 -#define LAYOUT_SS_TIDAL_ROOMS 279 -#define LAYOUT_ISLAND_CAVE 280 -#define LAYOUT_ANCIENT_TOMB 281 -#define LAYOUT_UNDERWATER_ROUTE134 282 -#define LAYOUT_UNDERWATER_SEALED_CHAMBER 283 -#define LAYOUT_SEALED_CHAMBER_OUTER_ROOM 284 -#define LAYOUT_VICTORY_ROAD_B1F 285 -#define LAYOUT_VICTORY_ROAD_B2F 286 -#define LAYOUT_ROUTE104_PROTOTYPE 287 -#define LAYOUT_GRANITE_CAVE_STEVENS_ROOM 288 -#define LAYOUT_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS 289 -#define LAYOUT_SOUTHERN_ISLAND_EXTERIOR 290 -#define LAYOUT_SOUTHERN_ISLAND_INTERIOR 291 -#define LAYOUT_JAGGED_PASS 292 -#define LAYOUT_FIERY_PATH 293 -#define LAYOUT_RUSTBORO_CITY_FLAT2_1F 294 -#define LAYOUT_RUSTBORO_CITY_FLAT2_2F 295 -#define LAYOUT_RUSTBORO_CITY_FLAT2_3F 296 -#define LAYOUT_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE 297 -#define LAYOUT_EVER_GRANDE_CITY_HALL_OF_FAME 298 -#define LAYOUT_LILYCOVE_CITY_COVE_LILY_MOTEL_1F 299 -#define LAYOUT_LILYCOVE_CITY_COVE_LILY_MOTEL_2F 300 -#define LAYOUT_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE 301 -#define LAYOUT_MT_PYRE_EXTERIOR 302 -#define LAYOUT_MT_PYRE_SUMMIT 303 -#define LAYOUT_SEALED_CHAMBER_INNER_ROOM 304 -#define LAYOUT_MOSSDEEP_CITY_GAME_CORNER_1F 305 -#define LAYOUT_MOSSDEEP_CITY_GAME_CORNER_B1F 306 -#define LAYOUT_SOOTOPOLIS_CITY_HOUSE1 307 -#define LAYOUT_SOOTOPOLIS_CITY_HOUSE2 308 -#define LAYOUT_SOOTOPOLIS_CITY_HOUSE3 309 -#define LAYOUT_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS 310 -#define LAYOUT_SCORCHED_SLAB 311 -#define LAYOUT_CAVE_OF_ORIGIN_UNUSED_B4F_LAVA 312 -#define LAYOUT_RUSTBORO_CITY_FLAT1_1F 313 -#define LAYOUT_RUSTBORO_CITY_FLAT1_2F 314 -#define LAYOUT_EVER_GRANDE_CITY_HALL4 315 -#define LAYOUT_AQUA_HIDEOUT_UNUSED_RUBY_MAP1 316 -#define LAYOUT_AQUA_HIDEOUT_UNUSED_RUBY_MAP2 317 -#define LAYOUT_AQUA_HIDEOUT_UNUSED_RUBY_MAP3 318 -#define LAYOUT_ROUTE131_SKY_PILLAR 319 -#define LAYOUT_SKY_PILLAR_ENTRANCE 320 -#define LAYOUT_SKY_PILLAR_OUTSIDE 321 -#define LAYOUT_SKY_PILLAR_1F 322 -#define LAYOUT_SKY_PILLAR_2F 323 -#define LAYOUT_SKY_PILLAR_3F 324 -#define LAYOUT_SKY_PILLAR_4F 325 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM9_LAVA 326 -#define LAYOUT_MOSSDEEP_CITY_STEVENS_HOUSE 327 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_ICE_ROOM 328 -#define LAYOUT_SAFARI_ZONE_REST_HOUSE 329 -#define LAYOUT_SKY_PILLAR_5F 330 -#define LAYOUT_SKY_PILLAR_TOP 331 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_DOME_LOBBY 332 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR 333 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM 334 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM 335 -#define LAYOUT_MAGMA_HIDEOUT_1F 336 -#define LAYOUT_MAGMA_HIDEOUT_2F_1R 337 -#define LAYOUT_MAGMA_HIDEOUT_2F_2R 338 -#define LAYOUT_MAGMA_HIDEOUT_3F_1R 339 -#define LAYOUT_MAGMA_HIDEOUT_3F_2R 340 -#define LAYOUT_MAGMA_HIDEOUT_4F 341 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY 342 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR 343 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM 344 -#define LAYOUT_BATTLE_FRONTIER_OUTSIDE_EAST 345 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY 346 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM 347 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM 348 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY 349 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR 350 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM 351 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL 352 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL 353 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY 354 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR 355 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM 356 -#define LAYOUT_SOOTOPOLIS_CITY_LEGENDS_BATTLE 357 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS 358 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_UNUSED 359 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY 360 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR 361 -#define LAYOUT_BATTLE_PYRAMID_SQUARE01 362 -#define LAYOUT_BATTLE_PYRAMID_SQUARE02 363 -#define LAYOUT_BATTLE_PYRAMID_SQUARE03 364 -#define LAYOUT_BATTLE_PYRAMID_SQUARE04 365 -#define LAYOUT_BATTLE_PYRAMID_SQUARE05 366 -#define LAYOUT_BATTLE_PYRAMID_SQUARE06 367 -#define LAYOUT_BATTLE_PYRAMID_SQUARE07 368 -#define LAYOUT_BATTLE_PYRAMID_SQUARE08 369 -#define LAYOUT_BATTLE_PYRAMID_SQUARE09 370 -#define LAYOUT_BATTLE_PYRAMID_SQUARE10 371 -#define LAYOUT_BATTLE_PYRAMID_SQUARE11 372 -#define LAYOUT_BATTLE_PYRAMID_SQUARE12 373 -#define LAYOUT_BATTLE_PYRAMID_SQUARE13 374 -#define LAYOUT_BATTLE_PYRAMID_SQUARE14 375 -#define LAYOUT_BATTLE_PYRAMID_SQUARE15 376 -#define LAYOUT_BATTLE_PYRAMID_SQUARE16 377 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP 378 -#define LAYOUT_MAGMA_HIDEOUT_3F_3R 379 -#define LAYOUT_MAGMA_HIDEOUT_2F_3R 380 -#define LAYOUT_MIRAGE_TOWER_1F 381 -#define LAYOUT_MIRAGE_TOWER_2F 382 -#define LAYOUT_MIRAGE_TOWER_3F 383 -#define LAYOUT_BATTLE_TENT_LOBBY 384 -#define LAYOUT_BATTLE_TENT_CORRIDOR 385 -#define LAYOUT_BATTLE_TENT_BATTLE_ROOM 386 -#define LAYOUT_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM 387 -#define LAYOUT_MIRAGE_TOWER_4F 388 -#define LAYOUT_DESERT_UNDERPASS 389 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM 390 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR 391 -#define LAYOUT_ROUTE111_NO_MIRAGE_TOWER 392 -#define LAYOUT_UNION_ROOM 393 -#define LAYOUT_SAFARI_ZONE_NORTHEAST 394 -#define LAYOUT_SAFARI_ZONE_SOUTHEAST 395 -#define LAYOUT_BATTLE_FRONTIER_RANKING_HALL 396 -#define LAYOUT_BATTLE_FRONTIER_LOUNGE1 397 -#define LAYOUT_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER 398 -#define LAYOUT_BATTLE_FRONTIER_RECEPTION_GATE 399 -#define LAYOUT_ARTISAN_CAVE_B1F 400 -#define LAYOUT_ARTISAN_CAVE_1F 401 -#define LAYOUT_FARAWAY_ISLAND_ENTRANCE 402 -#define LAYOUT_FARAWAY_ISLAND_INTERIOR 403 -#define LAYOUT_BIRTH_ISLAND_EXTERIOR 404 -#define LAYOUT_ISLAND_HARBOR 405 -#define LAYOUT_UNDERWATER_MARINE_CAVE 406 -#define LAYOUT_MARINE_CAVE_ENTRANCE 407 -#define LAYOUT_TERRA_CAVE_ENTRANCE 408 -#define LAYOUT_TERRA_CAVE_END 409 -#define LAYOUT_UNDERWATER_ROUTE105 410 -#define LAYOUT_UNDERWATER_ROUTE125 411 -#define LAYOUT_UNDERWATER_ROUTE129 412 -#define LAYOUT_MARINE_CAVE_END 413 -#define LAYOUT_TRAINER_HILL_ENTRANCE 414 -#define LAYOUT_TRAINER_HILL_1F 415 -#define LAYOUT_TRAINER_HILL_2F 416 -#define LAYOUT_TRAINER_HILL_3F 417 -#define LAYOUT_TRAINER_HILL_4F 418 -#define LAYOUT_TRAINER_HILL_ROOF 419 -#define LAYOUT_ALTERING_CAVE 420 -#define LAYOUT_NAVEL_ROCK_EXTERIOR 421 -#define LAYOUT_NAVEL_ROCK_ENTRANCE 422 -#define LAYOUT_NAVEL_ROCK_TOP 423 -#define LAYOUT_NAVEL_ROCK_BOTTOM 424 -#define LAYOUT_NAVEL_ROCK_LADDER_ROOM1 425 -#define LAYOUT_NAVEL_ROCK_LADDER_ROOM2 426 -#define LAYOUT_NAVEL_ROCK_B1F 427 -#define LAYOUT_NAVEL_ROCK_FORK 428 -#define LAYOUT_BATTLE_FRONTIER_LOUNGE2 429 -#define LAYOUT_BATTLE_FRONTIER_SCOTTS_HOUSE 430 -#define LAYOUT_METEOR_FALLS_STEVENS_CAVE 431 -#define LAYOUT_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB_WITH_TABLE 432 -#define LAYOUT_SKY_PILLAR_1F_CLEAN 433 -#define LAYOUT_SKY_PILLAR_2F_CLEAN 434 -#define LAYOUT_SKY_PILLAR_3F_CLEAN 435 -#define LAYOUT_SKY_PILLAR_4F_CLEAN 436 -#define LAYOUT_SKY_PILLAR_5F_CLEAN 437 -#define LAYOUT_SKY_PILLAR_TOP_CLEAN 438 -#define LAYOUT_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F 439 -#define LAYOUT_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F 440 -#define LAYOUT_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F_STAIRS_UNBLOCKED 441 - -#endif // GUARD_CONSTANTS_LAYOUTS_H diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h deleted file mode 100755 index eaf40a525d..0000000000 --- a/include/constants/map_groups.h +++ /dev/null @@ -1,596 +0,0 @@ -#ifndef GUARD_CONSTANTS_MAP_GROUPS_H -#define GUARD_CONSTANTS_MAP_GROUPS_H - -// -// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json -// - -// gMapGroup_TownsAndRoutes -#define MAP_PETALBURG_CITY (0 | (0 << 8)) -#define MAP_SLATEPORT_CITY (1 | (0 << 8)) -#define MAP_MAUVILLE_CITY (2 | (0 << 8)) -#define MAP_RUSTBORO_CITY (3 | (0 << 8)) -#define MAP_FORTREE_CITY (4 | (0 << 8)) -#define MAP_LILYCOVE_CITY (5 | (0 << 8)) -#define MAP_MOSSDEEP_CITY (6 | (0 << 8)) -#define MAP_SOOTOPOLIS_CITY (7 | (0 << 8)) -#define MAP_EVER_GRANDE_CITY (8 | (0 << 8)) -#define MAP_LITTLEROOT_TOWN (9 | (0 << 8)) -#define MAP_OLDALE_TOWN (10 | (0 << 8)) -#define MAP_DEWFORD_TOWN (11 | (0 << 8)) -#define MAP_LAVARIDGE_TOWN (12 | (0 << 8)) -#define MAP_FALLARBOR_TOWN (13 | (0 << 8)) -#define MAP_VERDANTURF_TOWN (14 | (0 << 8)) -#define MAP_PACIFIDLOG_TOWN (15 | (0 << 8)) -#define MAP_ROUTE101 (16 | (0 << 8)) -#define MAP_ROUTE102 (17 | (0 << 8)) -#define MAP_ROUTE103 (18 | (0 << 8)) -#define MAP_ROUTE104 (19 | (0 << 8)) -#define MAP_ROUTE105 (20 | (0 << 8)) -#define MAP_ROUTE106 (21 | (0 << 8)) -#define MAP_ROUTE107 (22 | (0 << 8)) -#define MAP_ROUTE108 (23 | (0 << 8)) -#define MAP_ROUTE109 (24 | (0 << 8)) -#define MAP_ROUTE110 (25 | (0 << 8)) -#define MAP_ROUTE111 (26 | (0 << 8)) -#define MAP_ROUTE112 (27 | (0 << 8)) -#define MAP_ROUTE113 (28 | (0 << 8)) -#define MAP_ROUTE114 (29 | (0 << 8)) -#define MAP_ROUTE115 (30 | (0 << 8)) -#define MAP_ROUTE116 (31 | (0 << 8)) -#define MAP_ROUTE117 (32 | (0 << 8)) -#define MAP_ROUTE118 (33 | (0 << 8)) -#define MAP_ROUTE119 (34 | (0 << 8)) -#define MAP_ROUTE120 (35 | (0 << 8)) -#define MAP_ROUTE121 (36 | (0 << 8)) -#define MAP_ROUTE122 (37 | (0 << 8)) -#define MAP_ROUTE123 (38 | (0 << 8)) -#define MAP_ROUTE124 (39 | (0 << 8)) -#define MAP_ROUTE125 (40 | (0 << 8)) -#define MAP_ROUTE126 (41 | (0 << 8)) -#define MAP_ROUTE127 (42 | (0 << 8)) -#define MAP_ROUTE128 (43 | (0 << 8)) -#define MAP_ROUTE129 (44 | (0 << 8)) -#define MAP_ROUTE130 (45 | (0 << 8)) -#define MAP_ROUTE131 (46 | (0 << 8)) -#define MAP_ROUTE132 (47 | (0 << 8)) -#define MAP_ROUTE133 (48 | (0 << 8)) -#define MAP_ROUTE134 (49 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE124 (50 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE126 (51 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE127 (52 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE128 (53 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE129 (54 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE105 (55 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE125 (56 | (0 << 8)) - -// gMapGroup_IndoorLittleroot -#define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F (0 | (1 << 8)) -#define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F (1 | (1 << 8)) -#define MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F (2 | (1 << 8)) -#define MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F (3 | (1 << 8)) -#define MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB (4 | (1 << 8)) - -// gMapGroup_IndoorOldale -#define MAP_OLDALE_TOWN_HOUSE1 (0 | (2 << 8)) -#define MAP_OLDALE_TOWN_HOUSE2 (1 | (2 << 8)) -#define MAP_OLDALE_TOWN_POKEMON_CENTER_1F (2 | (2 << 8)) -#define MAP_OLDALE_TOWN_POKEMON_CENTER_2F (3 | (2 << 8)) -#define MAP_OLDALE_TOWN_MART (4 | (2 << 8)) - -// gMapGroup_IndoorDewford -#define MAP_DEWFORD_TOWN_HOUSE1 (0 | (3 << 8)) -#define MAP_DEWFORD_TOWN_POKEMON_CENTER_1F (1 | (3 << 8)) -#define MAP_DEWFORD_TOWN_POKEMON_CENTER_2F (2 | (3 << 8)) -#define MAP_DEWFORD_TOWN_GYM (3 | (3 << 8)) -#define MAP_DEWFORD_TOWN_HALL (4 | (3 << 8)) -#define MAP_DEWFORD_TOWN_HOUSE2 (5 | (3 << 8)) - -// gMapGroup_IndoorLavaridge -#define MAP_LAVARIDGE_TOWN_HERB_SHOP (0 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_GYM_1F (1 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_GYM_B1F (2 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_HOUSE (3 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_MART (4 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F (5 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F (6 | (4 << 8)) - -// gMapGroup_IndoorFallarbor -#define MAP_FALLARBOR_TOWN_MART (0 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY (1 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR (2 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_BATTLE_TENT_BATTLE_ROOM (3 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F (4 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F (5 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_COZMOS_HOUSE (6 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE (7 | (5 << 8)) - -// gMapGroup_IndoorVerdanturf -#define MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY (0 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR (1 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM (2 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_MART (3 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F (4 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F (5 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_WANDAS_HOUSE (6 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE (7 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_HOUSE (8 | (6 << 8)) - -// gMapGroup_IndoorPacifidlog -#define MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F (0 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F (1 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE1 (2 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE2 (3 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE3 (4 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE4 (5 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE5 (6 | (7 << 8)) - -// gMapGroup_IndoorPetalburg -#define MAP_PETALBURG_CITY_WALLYS_HOUSE (0 | (8 << 8)) -#define MAP_PETALBURG_CITY_GYM (1 | (8 << 8)) -#define MAP_PETALBURG_CITY_HOUSE1 (2 | (8 << 8)) -#define MAP_PETALBURG_CITY_HOUSE2 (3 | (8 << 8)) -#define MAP_PETALBURG_CITY_POKEMON_CENTER_1F (4 | (8 << 8)) -#define MAP_PETALBURG_CITY_POKEMON_CENTER_2F (5 | (8 << 8)) -#define MAP_PETALBURG_CITY_MART (6 | (8 << 8)) - -// gMapGroup_IndoorSlateport -#define MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F (0 | (9 << 8)) -#define MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F (1 | (9 << 8)) -#define MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY (2 | (9 << 8)) -#define MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR (3 | (9 << 8)) -#define MAP_SLATEPORT_CITY_BATTLE_TENT_BATTLE_ROOM (4 | (9 << 8)) -#define MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE (5 | (9 << 8)) -#define MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB (6 | (9 << 8)) -#define MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F (7 | (9 << 8)) -#define MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F (8 | (9 << 8)) -#define MAP_SLATEPORT_CITY_HARBOR (9 | (9 << 8)) -#define MAP_SLATEPORT_CITY_HOUSE (10 | (9 << 8)) -#define MAP_SLATEPORT_CITY_POKEMON_CENTER_1F (11 | (9 << 8)) -#define MAP_SLATEPORT_CITY_POKEMON_CENTER_2F (12 | (9 << 8)) -#define MAP_SLATEPORT_CITY_MART (13 | (9 << 8)) - -// gMapGroup_IndoorMauville -#define MAP_MAUVILLE_CITY_GYM (0 | (10 << 8)) -#define MAP_MAUVILLE_CITY_BIKE_SHOP (1 | (10 << 8)) -#define MAP_MAUVILLE_CITY_HOUSE1 (2 | (10 << 8)) -#define MAP_MAUVILLE_CITY_GAME_CORNER (3 | (10 << 8)) -#define MAP_MAUVILLE_CITY_HOUSE2 (4 | (10 << 8)) -#define MAP_MAUVILLE_CITY_POKEMON_CENTER_1F (5 | (10 << 8)) -#define MAP_MAUVILLE_CITY_POKEMON_CENTER_2F (6 | (10 << 8)) -#define MAP_MAUVILLE_CITY_MART (7 | (10 << 8)) - -// gMapGroup_IndoorRustboro -#define MAP_RUSTBORO_CITY_DEVON_CORP_1F (0 | (11 << 8)) -#define MAP_RUSTBORO_CITY_DEVON_CORP_2F (1 | (11 << 8)) -#define MAP_RUSTBORO_CITY_DEVON_CORP_3F (2 | (11 << 8)) -#define MAP_RUSTBORO_CITY_GYM (3 | (11 << 8)) -#define MAP_RUSTBORO_CITY_POKEMON_SCHOOL (4 | (11 << 8)) -#define MAP_RUSTBORO_CITY_POKEMON_CENTER_1F (5 | (11 << 8)) -#define MAP_RUSTBORO_CITY_POKEMON_CENTER_2F (6 | (11 << 8)) -#define MAP_RUSTBORO_CITY_MART (7 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT1_1F (8 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT1_2F (9 | (11 << 8)) -#define MAP_RUSTBORO_CITY_HOUSE1 (10 | (11 << 8)) -#define MAP_RUSTBORO_CITY_CUTTERS_HOUSE (11 | (11 << 8)) -#define MAP_RUSTBORO_CITY_HOUSE2 (12 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT2_1F (13 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT2_2F (14 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT2_3F (15 | (11 << 8)) -#define MAP_RUSTBORO_CITY_HOUSE3 (16 | (11 << 8)) - -// gMapGroup_IndoorFortree -#define MAP_FORTREE_CITY_HOUSE1 (0 | (12 << 8)) -#define MAP_FORTREE_CITY_GYM (1 | (12 << 8)) -#define MAP_FORTREE_CITY_POKEMON_CENTER_1F (2 | (12 << 8)) -#define MAP_FORTREE_CITY_POKEMON_CENTER_2F (3 | (12 << 8)) -#define MAP_FORTREE_CITY_MART (4 | (12 << 8)) -#define MAP_FORTREE_CITY_HOUSE2 (5 | (12 << 8)) -#define MAP_FORTREE_CITY_HOUSE3 (6 | (12 << 8)) -#define MAP_FORTREE_CITY_HOUSE4 (7 | (12 << 8)) -#define MAP_FORTREE_CITY_HOUSE5 (8 | (12 << 8)) -#define MAP_FORTREE_CITY_DECORATION_SHOP (9 | (12 << 8)) - -// gMapGroup_IndoorLilycove -#define MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F (0 | (13 << 8)) -#define MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F (1 | (13 << 8)) -#define MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F (2 | (13 << 8)) -#define MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F (3 | (13 << 8)) -#define MAP_LILYCOVE_CITY_CONTEST_LOBBY (4 | (13 << 8)) -#define MAP_LILYCOVE_CITY_CONTEST_HALL (5 | (13 << 8)) -#define MAP_LILYCOVE_CITY_POKEMON_CENTER_1F (6 | (13 << 8)) -#define MAP_LILYCOVE_CITY_POKEMON_CENTER_2F (7 | (13 << 8)) -#define MAP_LILYCOVE_CITY_UNUSED_MART (8 | (13 << 8)) -#define MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB (9 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HARBOR (10 | (13 << 8)) -#define MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE (11 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HOUSE1 (12 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HOUSE2 (13 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HOUSE3 (14 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HOUSE4 (15 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F (16 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F (17 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F (18 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F (19 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F (20 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP (21 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR (22 | (13 << 8)) - -// gMapGroup_IndoorMossdeep -#define MAP_MOSSDEEP_CITY_GYM (0 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_HOUSE1 (1 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_HOUSE2 (2 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F (3 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F (4 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_MART (5 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_HOUSE3 (6 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_STEVENS_HOUSE (7 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_HOUSE4 (8 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_SPACE_CENTER_1F (9 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_SPACE_CENTER_2F (10 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_GAME_CORNER_1F (11 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_GAME_CORNER_B1F (12 | (14 << 8)) - -// gMapGroup_IndoorSootopolis -#define MAP_SOOTOPOLIS_CITY_GYM_1F (0 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_GYM_B1F (1 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F (2 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F (3 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_MART (4 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE1 (5 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE2 (6 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE3 (7 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE4 (8 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE5 (9 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE6 (10 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE7 (11 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE (12 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F (13 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F (14 | (15 << 8)) - -// gMapGroup_IndoorEverGrande -#define MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM (0 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_PHOEBES_ROOM (1 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_GLACIAS_ROOM (2 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_DRAKES_ROOM (3 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM (4 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL1 (5 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL2 (6 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL3 (7 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL4 (8 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL5 (9 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F (10 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL_OF_FAME (11 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F (12 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F (13 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F (14 | (16 << 8)) - -// gMapGroup_IndoorRoute104 -#define MAP_ROUTE104_MR_BRINEYS_HOUSE (0 | (17 << 8)) -#define MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP (1 | (17 << 8)) - -// gMapGroup_IndoorRoute111 -#define MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE (0 | (18 << 8)) -#define MAP_ROUTE111_OLD_LADYS_REST_STOP (1 | (18 << 8)) - -// gMapGroup_IndoorRoute112 -#define MAP_ROUTE112_CABLE_CAR_STATION (0 | (19 << 8)) -#define MAP_MT_CHIMNEY_CABLE_CAR_STATION (1 | (19 << 8)) - -// gMapGroup_IndoorRoute114 -#define MAP_ROUTE114_FOSSIL_MANIACS_HOUSE (0 | (20 << 8)) -#define MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL (1 | (20 << 8)) -#define MAP_ROUTE114_LANETTES_HOUSE (2 | (20 << 8)) - -// gMapGroup_IndoorRoute116 -#define MAP_ROUTE116_TUNNELERS_REST_HOUSE (0 | (21 << 8)) - -// gMapGroup_IndoorRoute117 -#define MAP_ROUTE117_POKEMON_DAY_CARE (0 | (22 << 8)) - -// gMapGroup_IndoorRoute121 -#define MAP_ROUTE121_SAFARI_ZONE_ENTRANCE (0 | (23 << 8)) - -// gMapGroup_Dungeons -#define MAP_METEOR_FALLS_1F_1R (0 | (24 << 8)) -#define MAP_METEOR_FALLS_1F_2R (1 | (24 << 8)) -#define MAP_METEOR_FALLS_B1F_1R (2 | (24 << 8)) -#define MAP_METEOR_FALLS_B1F_2R (3 | (24 << 8)) -#define MAP_RUSTURF_TUNNEL (4 | (24 << 8)) -#define MAP_UNDERWATER_SOOTOPOLIS_CITY (5 | (24 << 8)) -#define MAP_DESERT_RUINS (6 | (24 << 8)) -#define MAP_GRANITE_CAVE_1F (7 | (24 << 8)) -#define MAP_GRANITE_CAVE_B1F (8 | (24 << 8)) -#define MAP_GRANITE_CAVE_B2F (9 | (24 << 8)) -#define MAP_GRANITE_CAVE_STEVENS_ROOM (10 | (24 << 8)) -#define MAP_PETALBURG_WOODS (11 | (24 << 8)) -#define MAP_MT_CHIMNEY (12 | (24 << 8)) -#define MAP_JAGGED_PASS (13 | (24 << 8)) -#define MAP_FIERY_PATH (14 | (24 << 8)) -#define MAP_MT_PYRE_1F (15 | (24 << 8)) -#define MAP_MT_PYRE_2F (16 | (24 << 8)) -#define MAP_MT_PYRE_3F (17 | (24 << 8)) -#define MAP_MT_PYRE_4F (18 | (24 << 8)) -#define MAP_MT_PYRE_5F (19 | (24 << 8)) -#define MAP_MT_PYRE_6F (20 | (24 << 8)) -#define MAP_MT_PYRE_EXTERIOR (21 | (24 << 8)) -#define MAP_MT_PYRE_SUMMIT (22 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_1F (23 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_B1F (24 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_B2F (25 | (24 << 8)) -#define MAP_UNDERWATER_SEAFLOOR_CAVERN (26 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ENTRANCE (27 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM1 (28 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM2 (29 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM3 (30 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM4 (31 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM5 (32 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM6 (33 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM7 (34 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM8 (35 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM9 (36 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_ENTRANCE (37 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_1F (38 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1 (39 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2 (40 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3 (41 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_B1F (42 | (24 << 8)) -#define MAP_VICTORY_ROAD_1F (43 | (24 << 8)) -#define MAP_VICTORY_ROAD_B1F (44 | (24 << 8)) -#define MAP_VICTORY_ROAD_B2F (45 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM (46 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM (47 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM (48 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM (49 | (24 << 8)) -#define MAP_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM (50 | (24 << 8)) -#define MAP_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM (51 | (24 << 8)) -#define MAP_NEW_MAUVILLE_ENTRANCE (52 | (24 << 8)) -#define MAP_NEW_MAUVILLE_INSIDE (53 | (24 << 8)) -#define MAP_ABANDONED_SHIP_DECK (54 | (24 << 8)) -#define MAP_ABANDONED_SHIP_CORRIDORS_1F (55 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOMS_1F (56 | (24 << 8)) -#define MAP_ABANDONED_SHIP_CORRIDORS_B1F (57 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOMS_B1F (58 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOMS2_B1F (59 | (24 << 8)) -#define MAP_ABANDONED_SHIP_UNDERWATER1 (60 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOM_B1F (61 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOMS2_1F (62 | (24 << 8)) -#define MAP_ABANDONED_SHIP_CAPTAINS_OFFICE (63 | (24 << 8)) -#define MAP_ABANDONED_SHIP_UNDERWATER2 (64 | (24 << 8)) -#define MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS (65 | (24 << 8)) -#define MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS (66 | (24 << 8)) -#define MAP_ISLAND_CAVE (67 | (24 << 8)) -#define MAP_ANCIENT_TOMB (68 | (24 << 8)) -#define MAP_UNDERWATER_ROUTE134 (69 | (24 << 8)) -#define MAP_UNDERWATER_SEALED_CHAMBER (70 | (24 << 8)) -#define MAP_SEALED_CHAMBER_OUTER_ROOM (71 | (24 << 8)) -#define MAP_SEALED_CHAMBER_INNER_ROOM (72 | (24 << 8)) -#define MAP_SCORCHED_SLAB (73 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP1 (74 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP2 (75 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP3 (76 | (24 << 8)) -#define MAP_SKY_PILLAR_ENTRANCE (77 | (24 << 8)) -#define MAP_SKY_PILLAR_OUTSIDE (78 | (24 << 8)) -#define MAP_SKY_PILLAR_1F (79 | (24 << 8)) -#define MAP_SKY_PILLAR_2F (80 | (24 << 8)) -#define MAP_SKY_PILLAR_3F (81 | (24 << 8)) -#define MAP_SKY_PILLAR_4F (82 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM (83 | (24 << 8)) -#define MAP_SKY_PILLAR_5F (84 | (24 << 8)) -#define MAP_SKY_PILLAR_TOP (85 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_1F (86 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_2F_1R (87 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_2F_2R (88 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_3F_1R (89 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_3F_2R (90 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_4F (91 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_3F_3R (92 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_2F_3R (93 | (24 << 8)) -#define MAP_MIRAGE_TOWER_1F (94 | (24 << 8)) -#define MAP_MIRAGE_TOWER_2F (95 | (24 << 8)) -#define MAP_MIRAGE_TOWER_3F (96 | (24 << 8)) -#define MAP_MIRAGE_TOWER_4F (97 | (24 << 8)) -#define MAP_DESERT_UNDERPASS (98 | (24 << 8)) -#define MAP_ARTISAN_CAVE_B1F (99 | (24 << 8)) -#define MAP_ARTISAN_CAVE_1F (100 | (24 << 8)) -#define MAP_UNDERWATER_MARINE_CAVE (101 | (24 << 8)) -#define MAP_MARINE_CAVE_ENTRANCE (102 | (24 << 8)) -#define MAP_MARINE_CAVE_END (103 | (24 << 8)) -#define MAP_TERRA_CAVE_ENTRANCE (104 | (24 << 8)) -#define MAP_TERRA_CAVE_END (105 | (24 << 8)) -#define MAP_ALTERING_CAVE (106 | (24 << 8)) -#define MAP_METEOR_FALLS_STEVENS_CAVE (107 | (24 << 8)) - -// gMapGroup_IndoorDynamic -#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8)) -#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8)) -#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8)) -#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8)) -#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8)) -#define MAP_BATTLE_COLOSSEUM_2P (24 | (25 << 8)) -#define MAP_TRADE_CENTER (25 | (25 << 8)) -#define MAP_RECORD_CORNER (26 | (25 << 8)) -#define MAP_BATTLE_COLOSSEUM_4P (27 | (25 << 8)) -#define MAP_CONTEST_HALL (28 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL1 (29 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL2 (30 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL3 (31 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL4 (32 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL5 (33 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL6 (34 | (25 << 8)) -#define MAP_CONTEST_HALL_BEAUTY (35 | (25 << 8)) -#define MAP_CONTEST_HALL_TOUGH (36 | (25 << 8)) -#define MAP_CONTEST_HALL_COOL (37 | (25 << 8)) -#define MAP_CONTEST_HALL_SMART (38 | (25 << 8)) -#define MAP_CONTEST_HALL_CUTE (39 | (25 << 8)) -#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8)) -#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8)) -#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8)) -#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8)) -#define MAP_UNION_ROOM (60 | (25 << 8)) - -// gMapGroup_SpecialArea -#define MAP_SAFARI_ZONE_NORTHWEST (0 | (26 << 8)) -#define MAP_SAFARI_ZONE_NORTH (1 | (26 << 8)) -#define MAP_SAFARI_ZONE_SOUTHWEST (2 | (26 << 8)) -#define MAP_SAFARI_ZONE_SOUTH (3 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_OUTSIDE_WEST (4 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY (5 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR (6 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR (7 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM (8 | (26 << 8)) -#define MAP_SOUTHERN_ISLAND_EXTERIOR (9 | (26 << 8)) -#define MAP_SOUTHERN_ISLAND_INTERIOR (10 | (26 << 8)) -#define MAP_SAFARI_ZONE_REST_HOUSE (11 | (26 << 8)) -#define MAP_SAFARI_ZONE_NORTHEAST (12 | (26 << 8)) -#define MAP_SAFARI_ZONE_SOUTHEAST (13 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_OUTSIDE_EAST (14 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM (15 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR (16 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM (17 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY (18 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR (19 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM (20 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM (21 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY (22 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR (23 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM (24 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY (25 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR (26 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP (27 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY (28 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR (29 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM (30 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY (31 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM (32 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM (33 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY (34 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR (35 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM (36 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL (37 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL (38 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS (39 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_RANKING_HALL (40 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE1 (41 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER (42 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE2 (43 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE3 (44 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE4 (45 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_SCOTTS_HOUSE (46 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE5 (47 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE6 (48 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE7 (49 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_RECEPTION_GATE (50 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE8 (51 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE9 (52 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F (53 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F (54 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_MART (55 | (26 << 8)) -#define MAP_FARAWAY_ISLAND_ENTRANCE (56 | (26 << 8)) -#define MAP_FARAWAY_ISLAND_INTERIOR (57 | (26 << 8)) -#define MAP_BIRTH_ISLAND_EXTERIOR (58 | (26 << 8)) -#define MAP_BIRTH_ISLAND_HARBOR (59 | (26 << 8)) -#define MAP_TRAINER_HILL_ENTRANCE (60 | (26 << 8)) -#define MAP_TRAINER_HILL_1F (61 | (26 << 8)) -#define MAP_TRAINER_HILL_2F (62 | (26 << 8)) -#define MAP_TRAINER_HILL_3F (63 | (26 << 8)) -#define MAP_TRAINER_HILL_4F (64 | (26 << 8)) -#define MAP_TRAINER_HILL_ROOF (65 | (26 << 8)) -#define MAP_NAVEL_ROCK_EXTERIOR (66 | (26 << 8)) -#define MAP_NAVEL_ROCK_HARBOR (67 | (26 << 8)) -#define MAP_NAVEL_ROCK_ENTRANCE (68 | (26 << 8)) -#define MAP_NAVEL_ROCK_B1F (69 | (26 << 8)) -#define MAP_NAVEL_ROCK_FORK (70 | (26 << 8)) -#define MAP_NAVEL_ROCK_UP1 (71 | (26 << 8)) -#define MAP_NAVEL_ROCK_UP2 (72 | (26 << 8)) -#define MAP_NAVEL_ROCK_UP3 (73 | (26 << 8)) -#define MAP_NAVEL_ROCK_UP4 (74 | (26 << 8)) -#define MAP_NAVEL_ROCK_TOP (75 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN01 (76 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN02 (77 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN03 (78 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN04 (79 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN05 (80 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN06 (81 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN07 (82 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN08 (83 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN09 (84 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN10 (85 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN11 (86 | (26 << 8)) -#define MAP_NAVEL_ROCK_BOTTOM (87 | (26 << 8)) -#define MAP_TRAINER_HILL_ELEVATOR (88 | (26 << 8)) - -// gMapGroup_IndoorRoute104Prototype -#define MAP_ROUTE104_PROTOTYPE (0 | (27 << 8)) -#define MAP_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP (1 | (27 << 8)) - -// gMapGroup_IndoorRoute109 -#define MAP_ROUTE109_SEASHORE_HOUSE (0 | (28 << 8)) - -// gMapGroup_IndoorRoute110 -#define MAP_ROUTE110_TRICK_HOUSE_ENTRANCE (0 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_END (1 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_CORRIDOR (2 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE1 (3 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE2 (4 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE3 (5 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE4 (6 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE5 (7 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE6 (8 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE7 (9 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE8 (10 | (29 << 8)) -#define MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE (11 | (29 << 8)) -#define MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE (12 | (29 << 8)) - -// gMapGroup_IndoorRoute113 -#define MAP_ROUTE113_GLASS_WORKSHOP (0 | (30 << 8)) - -// gMapGroup_IndoorRoute123 -#define MAP_ROUTE123_BERRY_MASTERS_HOUSE (0 | (31 << 8)) - -// gMapGroup_IndoorRoute119 -#define MAP_ROUTE119_WEATHER_INSTITUTE_1F (0 | (32 << 8)) -#define MAP_ROUTE119_WEATHER_INSTITUTE_2F (1 | (32 << 8)) -#define MAP_ROUTE119_HOUSE (2 | (32 << 8)) - -// gMapGroup_IndoorRoute124 -#define MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE (0 | (33 << 8)) - -#define MAP_GROUPS_COUNT 34 - -#endif // GUARD_CONSTANTS_MAP_GROUPS_H diff --git a/make_tools.mk b/make_tools.mk index 7e0baf8900..00824adda6 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -1,12 +1,24 @@ +# This controls building executables in the `tools` folder. +# Can be invoked through the `Makefile` or standalone. MAKEFLAGS += --no-print-directory # Inclusive list. If you don't want a tool to be built, don't add it here. -TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc +TOOLS_DIR := tools +TOOL_NAMES := aif2pcm bin2c gbafix gbagfx jsonproc mapjson mid2agb preproc ramscrgen rsfont scaninc -.PHONY: all $(TOOLDIRS) +TOOLDIRS := $(TOOL_NAMES:%=$(TOOLS_DIR)/%) -all: $(TOOLDIRS) +.PHONY: tools check-tools clean-tools $(TOOLDIRS) $(CHECKTOOLDIRS) + +tools: $(TOOLDIRS) +check-tools: $(CHECKTOOLDIRS) $(TOOLDIRS): @$(MAKE) -C $@ + +$(CHECKTOOLDIRS): + @$(MAKE) -C $@ + +clean-tools: + @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) diff --git a/map_data_rules.mk b/map_data_rules.mk index 626cd47240..974a82f14a 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -1,8 +1,17 @@ # Map JSON data +# Inputs MAPS_DIR = $(DATA_ASM_SUBDIR)/maps LAYOUTS_DIR = $(DATA_ASM_SUBDIR)/layouts +# Outputs +MAPS_OUTDIR := $(MAPS_DIR) +LAYOUTS_OUTDIR := $(LAYOUTS_DIR) +INCLUDECONSTS_OUTDIR := include/constants + +AUTO_GEN_TARGETS += $(INCLUDECONSTS_OUTDIR)/map_groups.h +AUTO_GEN_TARGETS += $(INCLUDECONSTS_OUTDIR)/layouts.h + MAP_DIRS := $(dir $(wildcard $(MAPS_DIR)/*/map.json)) MAP_CONNECTIONS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/connections.inc,$(MAP_DIRS)) MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) @@ -13,19 +22,12 @@ $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.in $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ -$(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json - $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json -$(MAPS_DIR)/%/events.inc: $(MAPS_DIR)/%/header.inc ; -$(MAPS_DIR)/%/connections.inc: $(MAPS_DIR)/%/events.inc ; -$(MAPS_DIR)/groups.inc: $(MAPS_DIR)/map_groups.json - $(MAPJSON) groups emerald $< -$(MAPS_DIR)/connections.inc: $(MAPS_DIR)/groups.inc ; -$(MAPS_DIR)/events.inc: $(MAPS_DIR)/connections.inc ; -$(MAPS_DIR)/headers.inc: $(MAPS_DIR)/events.inc ; -include/constants/map_groups.h: $(MAPS_DIR)/headers.inc ; +$(MAPS_OUTDIR)/%/header.inc $(MAPS_OUTDIR)/%/events.inc $(MAPS_OUTDIR)/%/connections.inc: $(MAPS_DIR)/%/map.json + $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json $(@D) -$(LAYOUTS_DIR)/layouts.inc: $(LAYOUTS_DIR)/layouts.json - $(MAPJSON) layouts emerald $< -$(LAYOUTS_DIR)/layouts_table.inc: $(LAYOUTS_DIR)/layouts.inc ; -include/constants/layouts.h: $(LAYOUTS_DIR)/layouts_table.inc ; +$(MAPS_OUTDIR)/connections.inc $(MAPS_OUTDIR)/groups.inc $(MAPS_OUTDIR)/events.inc $(MAPS_OUTDIR)/headers.inc $(INCLUDECONSTS_OUTDIR)/map_groups.h: $(MAPS_DIR)/map_groups.json + $(MAPJSON) groups emerald $< $(MAPS_OUTDIR) $(INCLUDECONSTS_OUTDIR) + +$(LAYOUTS_OUTDIR)/layouts.inc $(LAYOUTS_OUTDIR)/layouts_table.inc $(INCLUDECONSTS_OUTDIR)/layouts.h: $(LAYOUTS_DIR)/layouts.json + $(MAPJSON) layouts emerald $< $(LAYOUTS_OUTDIR) $(INCLUDECONSTS_OUTDIR) \ No newline at end of file diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp index 23056a5ff3..a43c5b7624 100755 --- a/tools/jsonproc/jsonproc.cpp +++ b/tools/jsonproc/jsonproc.cpp @@ -1,4 +1,6 @@ // jsonproc.cpp +// jsonproc converts JSON data to an output file based on an Inja template. +// https://github.com/pantor/inja #include "jsonproc.h" diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index e53ac7924d..1632b56be6 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -30,6 +30,8 @@ using json11::Json; #include "mapjson.h" string version; +// System directory separator +string sep; string read_text_file(string filepath) { ifstream in_file(filepath); @@ -330,13 +332,22 @@ string generate_map_events_text(Json map_data) { return text.str(); } -string get_directory_name(string filename) { - size_t dir_pos = filename.find_last_of("/\\"); +string strip_trailing_separator(string filename) { + if(filename.back() == '/' || filename.back() == '\\') + filename.pop_back(); + return filename; +} +void infer_separator(string filename) { + size_t dir_pos = filename.find_last_of("/\\"); + sep = filename[dir_pos]; +} +string file_parent(string filename){ + size_t dir_pos = filename.find_last_of("/\\"); return filename.substr(0, dir_pos + 1); } -void process_map(string map_filepath, string layouts_filepath) { +void process_map(string map_filepath, string layouts_filepath, string output_dir) { string mapdata_err, layouts_err; string mapdata_json_text = read_text_file(map_filepath); @@ -354,16 +365,16 @@ void process_map(string map_filepath, string layouts_filepath) { string events_text = generate_map_events_text(map_data); string connections_text = generate_map_connections_text(map_data); - string files_dir = get_directory_name(map_filepath); - write_text_file(files_dir + "header.inc", header_text); - write_text_file(files_dir + "events.inc", events_text); - write_text_file(files_dir + "connections.inc", connections_text); + string out_dir = strip_trailing_separator(output_dir).append(sep); + write_text_file(out_dir + "header.inc", header_text); + write_text_file(out_dir + "events.inc", events_text); + write_text_file(out_dir + "connections.inc", connections_text); } string generate_groups_text(Json groups_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from /map_groups.json\n@\n\n"; for (auto &key : groups_data["group_order"].array_items()) { string group = json_to_string(key); @@ -382,7 +393,7 @@ string generate_groups_text(Json groups_data) { return text.str(); } -string generate_connections_text(Json groups_data) { +string generate_connections_text(Json groups_data, string include_path) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) @@ -404,15 +415,15 @@ string generate_connections_text(Json groups_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from /map_groups.json\n@\n\n"; for (Json map_name : map_names) - text << "\t.include \"data/maps/" << json_to_string(map_name) << "/connections.inc\"\n"; + text << "\t.include \"" << include_path << "/" << json_to_string(map_name) << "/connections.inc\"\n"; return text.str(); } -string generate_headers_text(Json groups_data) { +string generate_headers_text(Json groups_data, string include_path) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) @@ -421,15 +432,15 @@ string generate_headers_text(Json groups_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from /map_groups.json\n@\n\n"; for (string map_name : map_names) - text << "\t.include \"data/maps/" << map_name << "/header.inc\"\n"; + text << "\t.include \"" << include_path << "/" << map_name << "/header.inc\"\n"; return text.str(); } -string generate_events_text(Json groups_data) { +string generate_events_text(Json groups_data, string include_path) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) @@ -438,24 +449,23 @@ string generate_events_text(Json groups_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from " << include_path << "/map_groups.json\n@\n\n"; for (string map_name : map_names) - text << "\t.include \"data/maps/" << map_name << "/events.inc\"\n"; + text << "\t.include \"" << include_path << "/" << map_name << "/events.inc\"\n"; return text.str(); } string generate_map_constants_text(string groups_filepath, Json groups_data) { - string file_dir = get_directory_name(groups_filepath); - char dir_separator = file_dir.back(); + string file_dir = file_parent(groups_filepath) + sep; ostringstream text; text << "#ifndef GUARD_CONSTANTS_MAP_GROUPS_H\n" << "#define GUARD_CONSTANTS_MAP_GROUPS_H\n\n"; - text << "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n//\n\n"; + text << "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from /map_groups.json\n//\n\n"; int group_num = 0; @@ -466,7 +476,7 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { size_t max_length = 0; for (auto &map_name : groups_data[groupName].array_items()) { - string map_filepath = file_dir + json_to_string(map_name) + dir_separator + "map.json"; + string map_filepath = file_dir + json_to_string(map_name) + sep + "map.json"; string err_str; Json map_data = Json::parse(read_text_file(map_filepath), err_str); if (map_data == Json()) @@ -493,7 +503,11 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { return text.str(); } -void process_groups(string groups_filepath) { +// Output paths are directories with trailing path separators +void process_groups(string groups_filepath, string output_asm, string output_c) { + output_asm = strip_trailing_separator(output_asm); // Remove separator if existing. + output_c = strip_trailing_separator(output_c); + string err; Json groups_data = Json::parse(read_text_file(groups_filepath), err); @@ -501,25 +515,22 @@ void process_groups(string groups_filepath) { FATAL_ERROR("%s\n", err.c_str()); string groups_text = generate_groups_text(groups_data); - string connections_text = generate_connections_text(groups_data); - string headers_text = generate_headers_text(groups_data); - string events_text = generate_events_text(groups_data); + string connections_text = generate_connections_text(groups_data, output_asm); + string headers_text = generate_headers_text(groups_data, output_asm); + string events_text = generate_events_text(groups_data, output_asm); string map_header_text = generate_map_constants_text(groups_filepath, groups_data); - string file_dir = get_directory_name(groups_filepath); - char s = file_dir.back(); - - write_text_file(file_dir + "groups.inc", groups_text); - write_text_file(file_dir + "connections.inc", connections_text); - write_text_file(file_dir + "headers.inc", headers_text); - write_text_file(file_dir + "events.inc", events_text); - write_text_file(file_dir + ".." + s + ".." + s + "include" + s + "constants" + s + "map_groups.h", map_header_text); + write_text_file(output_asm + sep + "groups.inc", groups_text); + write_text_file(output_asm + sep + "connections.inc", connections_text); + write_text_file(output_asm + sep + "headers.inc", headers_text); + write_text_file(output_asm + sep + "events.inc", events_text); + write_text_file(output_c + sep + "map_groups.h", map_header_text); } string generate_layout_headers_text(Json layouts_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from layouts.json\n@\n\n"; for (auto &layout : layouts_data["layouts"].array_items()) { if (layout == Json::object()) continue; @@ -586,7 +597,10 @@ string generate_layouts_constants_text(Json layouts_data) { return text.str(); } -void process_layouts(string layouts_filepath) { +void process_layouts(string layouts_filepath, string output_asm, string output_c) { + output_asm = strip_trailing_separator(output_asm).append(sep); + output_c = strip_trailing_separator(output_c).append(sep); + string err; Json layouts_data = Json::parse(read_text_file(layouts_filepath), err); @@ -597,12 +611,9 @@ void process_layouts(string layouts_filepath) { string layouts_table_text = generate_layouts_table_text(layouts_data); string layouts_constants_text = generate_layouts_constants_text(layouts_data); - string file_dir = get_directory_name(layouts_filepath); - char s = file_dir.back(); - - write_text_file(file_dir + "layouts.inc", layout_headers_text); - write_text_file(file_dir + "layouts_table.inc", layouts_table_text); - write_text_file(file_dir + ".." + s + ".." + s + "include" + s + "constants" + s + "layouts.h", layouts_constants_text); + write_text_file(output_asm + "layouts.inc", layout_headers_text); + write_text_file(output_asm + "layouts_table.inc", layouts_table_text); + write_text_file(output_c + "layouts.h", layouts_constants_text); } int main(int argc, char *argv[]) { @@ -620,29 +631,40 @@ int main(int argc, char *argv[]) { FATAL_ERROR("ERROR: must be 'layouts', 'map', or 'groups'.\n"); if (mode == "map") { - if (argc != 5) - FATAL_ERROR("USAGE: mapjson map \n"); + if (argc != 6) + FATAL_ERROR("USAGE: mapjson map \n"); + infer_separator(argv[3]); string filepath(argv[3]); string layouts_filepath(argv[4]); + string output_dir(argv[5]); - process_map(filepath, layouts_filepath); + process_map(filepath, layouts_filepath, output_dir); } else if (mode == "groups") { - if (argc != 4) - FATAL_ERROR("USAGE: mapjson groups \n"); + if (argc != 6) + FATAL_ERROR("USAGE: mapjson groups \n"); + infer_separator(argv[3]); string filepath(argv[3]); + string output_asm(argv[4]); + string output_c(argv[5]); - process_groups(filepath); + process_groups(filepath, output_asm, output_c); } else if (mode == "layouts") { - if (argc != 4) - FATAL_ERROR("USAGE: mapjson layouts \n"); + if (argc != 6) + FATAL_ERROR("USAGE: mapjson layouts \n"); + infer_separator(argv[3]); string filepath(argv[3]); + string output_asm(argv[4]); + string output_c(argv[5]); - process_layouts(filepath); + process_layouts(filepath, output_asm, output_c); + } + else { + FATAL_ERROR("ERROR: must be 'layouts', 'map', or 'groups'.\n"); } return 0; From 2198ca31c7a5239176b92bc577408bc1e7715cd4 Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Sun, 12 Nov 2023 13:20:09 +1300 Subject: [PATCH 029/544] Reordered makefile. Added some documentation and simplified dependency scanning. --- Makefile | 359 ++++++++++++++++++++++++-------------------------- make_tools.mk | 4 +- 2 files changed, 178 insertions(+), 185 deletions(-) diff --git a/Makefile b/Makefile index 7d92bad21c..1eb4b8b55a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,22 @@ -TOOLCHAIN := $(DEVKITARM) -COMPARE ?= 0 +# GBA rom header +TITLE := POKEMON EMER +GAME_CODE := BPEE +MAKER_CODE := 01 +REVISION := 0 +MODERN ?= 0 +# `File name`.gba ('_modern' will be appended to the modern builds) +FILE_NAME := pokeemerald +BUILD_DIR := build + +# Builds the ROM using a modern compiler +MODERN ?= 0 +# Compares the ROM to a checksum of the original - only makes sense using when non-modern +COMPARE ?= 0 + +ifeq (modern,$(MAKECMDGOALS)) + MODERN := 1 +endif ifeq (compare,$(MAKECMDGOALS)) COMPARE := 1 endif @@ -8,45 +24,29 @@ endif # Default make rule all: rom +# Toolchain selection +TOOLCHAIN := $(DEVKITARM) # don't use dkP's base_tools anymore # because the redefinition of $(CC) conflicts # with when we want to use $(CC) to preprocess files # thus, manually create the variables for the bin # files, or use arm-none-eabi binaries on the system # if dkP is not installed on this system - ifneq (,$(TOOLCHAIN)) -ifneq ($(wildcard $(TOOLCHAIN)/bin),) -export PATH := $(TOOLCHAIN)/bin:$(PATH) -endif + ifneq ($(wildcard $(TOOLCHAIN)/bin),) + export PATH := $(TOOLCHAIN)/bin:$(PATH) + endif endif PREFIX := arm-none-eabi- OBJCOPY := $(PREFIX)objcopy OBJDUMP := $(PREFIX)objdump AS := $(PREFIX)as - LD := $(PREFIX)ld -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc -PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) - -ifeq ($(OS),Windows_NT) -EXE := .exe -else EXE := -endif - -TITLE := POKEMON EMER -GAME_CODE := BPEE -MAKER_CODE := 01 -REVISION := 0 -MODERN ?= 0 - -ifeq (modern,$(MAKECMDGOALS)) - MODERN := 1 +ifeq ($(OS),Windows_NT) + EXE := .exe endif # use arm-none-eabi-cpp for macOS @@ -66,22 +66,29 @@ else CPP := $(PREFIX)cpp endif -ROM_NAME := pokeemerald.gba +ROM_NAME := $(FILE_NAME).gba +OBJ_DIR_NAME := $(BUILD_DIR)/emerald +MODERN_ROM_NAME := $(FILE_NAME)_modern.gba +MODERN_OBJ_DIR_NAME := $(BUILD_DIR)/modern + ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) -OBJ_DIR_NAME := build/emerald - -MODERN_ROM_NAME := pokeemerald_modern.gba MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) -MODERN_OBJ_DIR_NAME := build/modern -SHELL := /bin/bash -o pipefail - -ELF = $(ROM:.gba=.elf) -MAP = $(ROM:.gba=.map) -SYM = $(ROM:.gba=.sym) +# Pick our active variables +ifeq ($(MODERN),0) + ROM := $(ROM_NAME) + OBJ_DIR := $(OBJ_DIR_NAME) +else + ROM := $(MODERN_ROM_NAME) + OBJ_DIR := $(MODERN_OBJ_DIR_NAME) +endif +ELF := $(ROM:.gba=.elf) +MAP := $(ROM:.gba=.map) +SYM := $(ROM:.gba=.sym) +# Commonly used directories C_SUBDIR = src GFLIB_SUBDIR = gflib ASM_SUBDIR = asm @@ -99,34 +106,43 @@ DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) +SHELL := /bin/bash -o pipefail + +# Set flags for tools ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) -ifeq ($(MODERN),0) -CC1 := tools/agbcc/bin/agbcc$(EXE) -override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := $(ROM_NAME) -OBJ_DIR := $(OBJ_DIR_NAME) -LIBPATH := -L ../../tools/agbcc/lib -LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall -else -CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -ROM := $(MODERN_ROM_NAME) -OBJ_DIR := $(MODERN_OBJ_DIR_NAME) -LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" -LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall -endif +INCLUDE_DIRS := include +INCLUDE_CPP_ARGS := $(INCLUDE_DIRS:%=-iquote %) +INCLUDE_SCANINC_ARGS := $(INCLUDE_DIRS:%=-I %) -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -ifneq ($(MODERN),1) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef +O_LEVEL ?= 2 +CPPFLAGS := $(INCLUDE_CPP_ARGS) -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) +ifeq ($(MODERN),0) + CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef + CC1 := tools/agbcc/bin/agbcc$(EXE) + override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O$(O_LEVEL) -fhex-asm -g + LIBPATH := -L ../../tools/agbcc/lib + LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall +else + # Note: The makefile must be set up to not call these if modern == 0 + MODERNCC := $(PREFIX)gcc + PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) + CC1 := $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet + override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast + LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" + LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall +endif +# Enable debug info if set +ifeq ($(DINFO),1) + override CFLAGS += -g endif LDFLAGS = -Map ../../$(MAP) +# Variable filled out in other make files AUTO_GEN_TARGETS := include make_tools.mk -SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c +# Tool executables GFX := $(TOOLS_DIR)/gbagfx/gbagfx$(EXE) AIF := $(TOOLS_DIR)/aif2pcm/aif2pcm$(EXE) MID := $(TOOLS_DIR)/mid2agb/mid2agb$(EXE) @@ -138,6 +154,7 @@ MAPJSON := $(TOOLS_DIR)/mapjson/mapjson$(EXE) JSONPROC := $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) PERL := perl +SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c MAKEFLAGS += --no-print-directory @@ -147,39 +164,36 @@ MAKEFLAGS += --no-print-directory .SECONDARY: # Delete files that weren't built properly .DELETE_ON_ERROR: - # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy mostlyclean libagbsyscall modern tidymodern tidynonmodern +RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidynonmodern generated clean-generated +.PHONY: all rom modern compare +.PHONY: $(RULES_NO_SCAN) infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) -# Build tools when building the rom -# Disable dependency scanning for clean/tidy/tools -# Use a separate minimal makefile for speed -# Since we don't need to reload most of this makefile -ifeq (,$(filter-out all rom compare modern libagbsyscall syms,$(MAKECMDGOALS))) -$(call infoshell, $(MAKE) -f make_tools.mk) -$(call infoshell, $(MAKE) generated) -else -NODEP ?= 1 -endif - -# check if we need to scan dependencies based on the rule -ifeq (,$(MAKECMDGOALS)) - SCAN_DEPS ?= 1 -else - # clean, tidy, tools, mostlyclean, clean-tools, $(TOOLDIRS), tidymodern, tidynonmodern don't even build the ROM - # libagbsyscall does its own thing - ifeq (,$(filter-out clean tidy tools mostlyclean clean-tools $(TOOLDIRS) tidymodern tidynonmodern libagbsyscall,$(MAKECMDGOALS))) - SCAN_DEPS ?= 0 - else - SCAN_DEPS ?= 1 +# Check if we need to scan dependencies based on the chosen rule OR user preference +NODEP ?= 0 +# Check if we need to pre-build tools and generate assets based on the chosen rule. +SETUP_PREREQS ?= 1 +# Disable dependency scanning for rules that don't need it. +ifneq (,$(MAKECMDGOALS)) + ifeq (,$(filter-out $(RULES_NO_SCAN),$(MAKECMDGOALS))) + NODEP := 1 + SETUP_PREREQS := 0 endif endif -ifeq ($(SCAN_DEPS),1) +ifeq ($(SETUP_PREREQS),1) + # If set on: Default target or a rule requiring a scan + # Forcibly execute `make tools` since we need them for what we are doing. + $(call infoshell, $(MAKE) -f make_tools.mk) + # Oh and also generate mapjson sources before we use `SCANINC`. + $(call infoshell, $(MAKE) generated) +endif + +# Collect sources C_SRCS_IN := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) C_SRCS := $(foreach src,$(C_SRCS_IN),$(if $(findstring .inc.c,$(src)),,$(src))) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) @@ -187,7 +201,7 @@ C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) GFLIB_SRCS := $(wildcard $(GFLIB_SUBDIR)/*.c) GFLIB_OBJS := $(patsubst $(GFLIB_SUBDIR)/%.c,$(GFLIB_BUILDDIR)/%.o,$(GFLIB_SRCS)) -C_ASM_SRCS += $(wildcard $(C_SUBDIR)/*.s $(C_SUBDIR)/*/*.s $(C_SUBDIR)/*/*/*.s) +C_ASM_SRCS := $(wildcard $(C_SUBDIR)/*.s $(C_SUBDIR)/*/*.s $(C_SUBDIR)/*/*/*.s) C_ASM_OBJS := $(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o,$(C_ASM_SRCS)) ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) @@ -210,29 +224,29 @@ OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) SUBDIRS := $(sort $(dir $(OBJS))) $(shell mkdir -p $(SUBDIRS)) -endif -syms: $(SYM) +# Pretend rules that are actually flags defer to `make all` +modern: all +compare: all +# Other rules rom: $(ROM) ifeq ($(COMPARE),1) @$(SHA1) rom.sha1 endif -# For contributors to make sure a change didn't affect the contents of the ROM. -compare: all +syms: $(SYM) -clean: mostlyclean clean-tools +clean: tidy clean-tools clean-generated clean-assets + @$(MAKE) clean -C libagbsyscall -mostlyclean: tidynonmodern tidymodern - find sound -iname '*.bin' -exec rm {} + +clean-assets: rm -f $(MID_SUBDIR)/*.s - find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc + find sound -iname '*.bin' -exec rm {} + + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + - rm -f $(AUTO_GEN_TARGETS) - @$(MAKE) clean -C libagbsyscall tidy: tidynonmodern tidymodern @@ -244,18 +258,13 @@ tidymodern: rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) rm -rf $(MODERN_OBJ_DIR_NAME) -ifneq ($(MODERN),0) -$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member -endif - +# Other rules include graphics_file_rules.mk include map_data_rules.mk include spritesheet_rules.mk include json_data_rules.mk include songs.mk -generated: $(AUTO_GEN_TARGETS) - %.s: ; %.png: ; %.pal: ; @@ -271,119 +280,101 @@ generated: $(AUTO_GEN_TARGETS) $(CRY_SUBDIR)/%.bin: $(CRY_SUBDIR)/%.aif ; $(AIF) $< $@ --compress sound/%.bin: sound/%.aif ; $(AIF) $< $@ +# NOTE: Tools must have been built prior (FIXME) +generated: tools $(AUTO_GEN_TARGETS) +clean-generated: + -rm -f $(AUTO_GEN_TARGETS) ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := $(TOOLS_DIR)/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 - $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork - $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork - -$(C_BUILDDIR)/m4a.o: CC1 := $(TOOLS_DIR)/agbcc/bin/old_agbcc$(EXE) - +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := $(TOOLS_DIR)/agbcc/bin/agbcc_arm$(EXE) +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast +$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member endif -ifeq ($(DINFO),1) -override CFLAGS += -g -endif +# Dependency rules (for the *.c & *.s sources to .o files) +# Have to be explicit or else missing files won't be reported. -# The dep rules have to be explicit or else missing files won't be reported. # As a side effect, they're evaluated immediately instead of when the rule is invoked. -# It doesn't look like $(shell) can be deferred so there might not be a better way. +# It doesn't look like $(shell) can be deferred so there might not be a better way (Icedude_907: there is soon). -ifeq ($(SCAN_DEPS),1) -ifeq ($(NODEP),1) -$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c -ifeq (,$(KEEP_TEMPS)) - @echo "$(CC1) -o $@ $<" - @$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - -else - @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i - @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s - @echo -e ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s - $(AS) $(ASFLAGS) -o $@ $(C_BUILDDIR)/$*.s -endif -else +# For C dependencies. +# Args: $1 = Output file without extension (build/assets/src/data), $2 = Input file (src/data.c) define C_DEP -$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include -I gflib $2) -ifeq (,$$(KEEP_TEMPS)) - @echo "$$(CC1) -o $$@ $$<" - @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - -else - @$$(CPP) $$(CPPFLAGS) $$< -o $$(C_BUILDDIR)/$3.i - @$$(PREPROC) $$(C_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(C_BUILDDIR)/$3.s - @echo -e ".text\n\t.align\t2, 0\n" >> $$(C_BUILDDIR)/$3.s - $$(AS) $$(ASFLAGS) -o $$@ $$(C_BUILDDIR)/$3.s -endif +$(call C_DEP_IMPL,$1,$2,$1) endef -$(foreach src, $(C_SRCS), $(eval $(call C_DEP,$(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(C_SUBDIR)/%.c,%,$(src))))) -endif - -ifeq ($(NODEP),1) -$(GFLIB_BUILDDIR)/%.o: $(GFLIB_SUBDIR)/%.c $$(c_dep) +# Internal implementation details. +# $1: Output file without extension, $2 input file, $3 temp path (if keeping) +define C_DEP_IMPL +$1.o: $2 ifeq (,$(KEEP_TEMPS)) - @echo "$(CC1) -o $@ $<" - @$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - -else - @$(CPP) $(CPPFLAGS) $< -o $(GFLIB_BUILDDIR)/$*.i - @$(PREPROC) $(GFLIB_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(GFLIB_BUILDDIR)/$*.s - @echo -e ".text\n\t.align\t2, 0\n" >> $(GFLIB_BUILDDIR)/$*.s - $(AS) $(ASFLAGS) -o $@ $(GFLIB_BUILDDIR)/$*.s -endif -else -define GFLIB_DEP -$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include -I gflib $2) -ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - else - @$$(CPP) $$(CPPFLAGS) $$< -o $$(GFLIB_BUILDDIR)/$3.i - @$$(PREPROC) $$(GFLIB_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(GFLIB_BUILDDIR)/$3.s - @echo -e ".text\n\t.align\t2, 0\n" >> $$(GFLIB_BUILDDIR)/$3.s - $$(AS) $$(ASFLAGS) -o $$@ $$(GFLIB_BUILDDIR)/$3.s + @$$(CPP) $$(CPPFLAGS) $$< -o $3.i + @$$(PREPROC) $3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $3.s + @echo -e ".text\n\t.align\t2, 0\n" >> $3.s + $$(AS) $$(ASFLAGS) -o $$@ $3.s +endif +$(call C_SCANINC,$1,$2) +endef +# Calls SCANINC to find dependencies +define C_SCANINC +ifneq ($(NODEP),1) +$1.o: $2 $$(shell $(SCANINC) $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include -I gflib $2) endif endef -$(foreach src, $(GFLIB_SRCS), $(eval $(call GFLIB_DEP,$(patsubst $(GFLIB_SUBDIR)/%.c,$(GFLIB_BUILDDIR)/%.o, $(src)),$(src),$(patsubst $(GFLIB_SUBDIR)/%.c,%, $(src))))) + +# Create generic rules if no dependency scanning, else create the real rules +ifeq ($(NODEP),1) +$(eval $(call C_DEP,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.c)) +$(eval $(call C_DEP,$(GFLIB_BUILDDIR)/%,$(GFLIB_SUBDIR)/%.c)) +else +$(foreach src,$(C_SRCS),$(eval $(call C_DEP,$(OBJ_DIR)/$(basename $(src)),$(src)))) +$(foreach src,$(GFLIB_SRCS),$(eval $(call C_DEP,$(OBJ_DIR)/$(basename $(src)),$(src)))) endif -ifeq ($(NODEP),1) -$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ -else -define SRC_ASM_DATA_DEP -$1: $2 $$(shell $(SCANINC) -I include -I "" $2) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@ -endef -$(foreach src, $(C_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o, $(src)),$(src)))) -endif - -ifeq ($(NODEP),1) -$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s - $(AS) $(ASFLAGS) -o $@ $< -else +# Similar methodology for Assembly files +# $1: Output path without extension, $2: Input file (`*.s`) define ASM_DEP -$1: $2 $$(shell $(SCANINC) -I include -I "" $2) +$1.o: $2 $$(AS) $$(ASFLAGS) -o $$@ $$< +$(call ASM_SCANINC,$1,$2) +endef +# As above but first doing a preprocessor pass +define ASM_DEP_PREPROC +$1.o: $2 + $$(PREPROC) $$< charmap.txt | $$(CPP) $(INCLUDE_SCANINC_ARGS) - | $$(AS) $$(ASFLAGS) -o $$@ +$(call ASM_SCANINC,$1,$2) endef -$(foreach src, $(ASM_SRCS), $(eval $(call ASM_DEP,$(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o, $(src)),$(src)))) -endif +define ASM_SCANINC +ifneq ($(NODEP),1) +$1.o: $2 $$(shell $(SCANINC) $(INCLUDE_SCANINC_ARGS) -I "" $2) +endif +endef + +# Dummy rules or real rules ifeq ($(NODEP),1) -$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ +$(eval $(call ASM_DEP,$(ASM_BUILDDIR)/%,$(ASM_SUBDIR)/%.s)) +$(eval $(call ASM_DEP_PREPROC,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.s)) +$(eval $(call ASM_DEP_PREPROC,$(DATA_ASM_BUILDDIR)/%,$(DATA_ASM_SUBDIR)/%.s)) else -$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) -endif +$(foreach src, $(ASM_SRCS), $(eval $(call ASM_DEP,$(src:%.s=$(OBJ_DIR)/%),$(src)))) +$(foreach src, $(C_ASM_SRCS), $(eval $(call ASM_DEP_PREPROC,$(src:%.s=$(OBJ_DIR)/%),$(src)))) +$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call ASM_DEP_PREPROC,$(src:%.s=$(OBJ_DIR)/%),$(src)))) endif +# Additional rules $(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s $(AS) $(ASFLAGS) -I sound -o $@ $< @@ -396,6 +387,7 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(RAMSCRGEN) ewram_data $< ENGLISH > $@ +# Linker script ifeq ($(MODERN),0) LD_SCRIPT := ld_script.txt LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld @@ -405,25 +397,24 @@ LD_SCRIPT_DEPS := endif $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) - cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld + sed "s#tools/#tools/#g" $(LD_SCRIPT) > $(OBJ_DIR)/ld_script.ld +# Final rules + +libagbsyscall: + @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) + +# Elf from object files $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) libagbsyscall @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ $(OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent +# Builds the rom from the elf file $(ROM): $(ELF) $(OBJCOPY) -O binary $< $@ $(FIX) $@ -p --silent -modern: all - -libagbsyscall: - @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) - -################### -### Symbol file ### -################### - +# Symbol file (`make syms`) $(SYM): $(ELF) $(OBJDUMP) -t $< | sort -u | grep -E "^0[2389]" | $(PERL) -p -e 's/^(\w{8}) (\w).{6} \S+\t(\w{8}) (\S+)$$/\1 \2 \3 \4/g' > $@ diff --git a/make_tools.mk b/make_tools.mk index 00824adda6..78ff1beeb0 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -9,7 +9,9 @@ TOOL_NAMES := aif2pcm bin2c gbafix gbagfx jsonproc mapjson mid2agb preproc ramsc TOOLDIRS := $(TOOL_NAMES:%=$(TOOLS_DIR)/%) -.PHONY: tools check-tools clean-tools $(TOOLDIRS) $(CHECKTOOLDIRS) +# Tool making doesnt require a pokeemerald dependency scan. +RULES_NO_SCAN += tools check-tools clean-tools $(TOOLDIRS) $(CHECKTOOLDIRS) +.PHONY: $(RULES_NO_SCAN) tools: $(TOOLDIRS) check-tools: $(CHECKTOOLDIRS) From 4b2054c3ea1f0240ba6bed903f4e960da2d3716e Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Sun, 12 Nov 2023 16:38:32 +1300 Subject: [PATCH 030/544] Parallel SCANINC via `.d` generation. Secondary expansion is redundant. --- Makefile | 12 ++++++---- tools/scaninc/scaninc.cpp | 49 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 1eb4b8b55a..56d1e3812f 100644 --- a/Makefile +++ b/Makefile @@ -164,8 +164,6 @@ MAKEFLAGS += --no-print-directory .SECONDARY: # Delete files that weren't built properly .DELETE_ON_ERROR: -# Secondary expansion is required for dependency variables in object rules. -.SECONDEXPANSION: RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidynonmodern generated clean-generated .PHONY: all rom modern compare @@ -330,7 +328,10 @@ endef # Calls SCANINC to find dependencies define C_SCANINC ifneq ($(NODEP),1) -$1.o: $2 $$(shell $(SCANINC) $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include -I gflib $2) +$1.o: $1.d +$1.d: $2 + $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include -I gflib $2 +include $1.d endif endef @@ -359,7 +360,10 @@ endef define ASM_SCANINC ifneq ($(NODEP),1) -$1.o: $2 $$(shell $(SCANINC) $(INCLUDE_SCANINC_ARGS) -I "" $2) +$1.o: $1.d +$1.d: $2 + $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I "" $2 +include $1.d endif endef diff --git a/tools/scaninc/scaninc.cpp b/tools/scaninc/scaninc.cpp index dcb16c0e79..f5ee7ad6de 100644 --- a/tools/scaninc/scaninc.cpp +++ b/tools/scaninc/scaninc.cpp @@ -24,6 +24,9 @@ #include #include #include +#include +#include +#include #include "scaninc.h" #include "source_file.h" @@ -38,15 +41,19 @@ bool CanOpenFile(std::string path) return true; } -const char *const USAGE = "Usage: scaninc [-I INCLUDE_PATH] FILE_PATH\n"; +const char *const USAGE = "Usage: scaninc [-I INCLUDE_PATH] [-M DEPENDENCY_OUT_PATH] FILE_PATH\n"; int main(int argc, char **argv) { std::queue filesToProcess; std::set dependencies; + std::set dependencies_includes; std::vector includeDirs; + bool makeformat = false; + std::string make_outfile; + argc--; argv++; @@ -68,6 +75,13 @@ int main(int argc, char **argv) } includeDirs.push_back(includeDir); } + else if(arg.substr(0, 2) == "-M") + { + makeformat = true; + argc--; + argv++; + make_outfile = std::string(argv[0]); + } else { FATAL_ERROR(USAGE); @@ -112,6 +126,7 @@ int main(int argc, char **argv) { path = include; } + dependencies_includes.insert(path); bool inserted = dependencies.insert(path).second; if (inserted && exists) { @@ -121,8 +136,36 @@ int main(int argc, char **argv) includeDirs.pop_back(); } - for (const std::string &path : dependencies) + if(!makeformat) { - std::printf("%s\n", path.c_str()); + for (const std::string &path : dependencies) + { + std::printf("%s\n", path.c_str()); + } + std::cout << std::endl; + } + else + { + // Write out make rules to a file + std::ofstream output(make_outfile); + + // Print a make rule for the object file + size_t ext_pos = make_outfile.find_last_of("."); + auto object_file = make_outfile.substr(0, ext_pos + 1) + "o"; + output << object_file.c_str() << ": "; + for (const std::string &path : dependencies) + { + output << path << " "; + } + + // Dependency list rule. + // Although these rules are identical, they need to be separate, else make will trigger the rule again after the file is created for the first time. + output << "\n" << make_outfile.c_str() << ": "; + for (const std::string &path : dependencies_includes) + { + output << path << " "; + } + output.flush(); + output.close(); } } From 85f4ca69434a9bfe05fe8e0f3c16efe953eded2a Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Wed, 15 Nov 2023 13:26:49 +1300 Subject: [PATCH 031/544] All `mid2agb` songs are controlled by a `midi.cfg` file --- songs.mk | 1277 +------------------------------------ sound/songs/midi/midi.cfg | 420 ++++++++++++ 2 files changed, 438 insertions(+), 1259 deletions(-) create mode 100644 sound/songs/midi/midi.cfg diff --git a/songs.mk b/songs.mk index 698f983ceb..feef64cf5b 100644 --- a/songs.mk +++ b/songs.mk @@ -1,1264 +1,23 @@ -STD_REVERB = 50 +# This file contains rules for making assemblies for most music in the game. -$(MID_BUILDDIR)/%.o: $(MID_SUBDIR)/%.s - $(AS) $(ASFLAGS) -I sound -o $@ $< +MID_ASM_DIR = $(MID_SUBDIR) -$(MID_SUBDIR)/mus_aqua_magma_hideout.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G076 -V084 +# For each line in midi.cfg, we do some trickery to convert it into a make rule for the `.mid` file described on the line +# Data following the colon in said file corresponds to arguments passed into mid2agb +MID_CFG_PATH := $(MID_SUBDIR)/midi.cfg -$(MID_SUBDIR)/mus_encounter_aqua.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G065 -V086 +# $1: Source path no extension, $2 Options +define MID_RULE +$(MID_ASM_DIR)/$1.s: $(MID_SUBDIR)/$1.mid + $(MID) $$< $$@ $2 +endef +# source path, remaining text (options) +define MID_EXPANSION + $(eval $(call MID_RULE,$(basename $(patsubst %:,%,$(word 1,$1))),$(wordlist 2,999,$1))) +endef -$(MID_SUBDIR)/mus_route111.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G055 -V076 +$(foreach line,$(shell cat $(MID_CFG_PATH) | sed "s/ /__SPACE__/g"),$(call MID_EXPANSION,$(subst __SPACE__, ,$(line)))) -$(MID_SUBDIR)/mus_encounter_suspicious.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G069 -V078 - -$(MID_SUBDIR)/mus_b_arena.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G104 -V090 - -$(MID_SUBDIR)/mus_b_dome.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G111 -V090 - -$(MID_SUBDIR)/mus_b_dome_lobby.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G111 -V056 - -$(MID_SUBDIR)/mus_b_factory.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G113 -V100 - -$(MID_SUBDIR)/mus_b_frontier.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G103 -V094 - -$(MID_SUBDIR)/mus_b_palace.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G108 -V105 - -$(MID_SUBDIR)/mus_b_tower_rs.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G035 -V080 - -$(MID_SUBDIR)/mus_b_pike.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G112 -V092 - -$(MID_SUBDIR)/mus_vs_trainer.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G119 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_wild.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G117 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_aqua_magma_leader.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G126 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_aqua_magma.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G118 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_gym_leader.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G120 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_champion.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G121 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_kyogre_groudon.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G123 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_rival.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G124 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_regi.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G122 -V080 -P1 - -$(MID_SUBDIR)/mus_vs_elite_four.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G125 -V080 -P1 - -$(MID_SUBDIR)/mus_roulette.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G038 -V080 - -$(MID_SUBDIR)/mus_lilycove_museum.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G020 -V080 - -$(MID_SUBDIR)/mus_encounter_brendan.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G067 -V078 - -$(MID_SUBDIR)/mus_encounter_male.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G028 -V080 - -$(MID_SUBDIR)/mus_victory_road.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G075 -V076 - -$(MID_SUBDIR)/mus_game_corner.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G072 -V072 - -$(MID_SUBDIR)/mus_contest_winner.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G085 -V100 - -$(MID_SUBDIR)/mus_contest_results.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G092 -V080 - -$(MID_SUBDIR)/mus_contest_lobby.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G098 -V060 - -$(MID_SUBDIR)/mus_contest.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G086 -V088 - -$(MID_SUBDIR)/mus_cycling.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G049 -V083 - -$(MID_SUBDIR)/mus_encounter_champion.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G100 -V076 - -$(MID_SUBDIR)/mus_petalburg_woods.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G018 -V080 - -$(MID_SUBDIR)/mus_abandoned_ship.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G030 -V080 - -$(MID_SUBDIR)/mus_cave_of_origin.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G037 -V080 - -$(MID_SUBDIR)/mus_underwater.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G057 -V094 - -$(MID_SUBDIR)/mus_intro.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G060 -V090 - -$(MID_SUBDIR)/mus_hall_of_fame.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G082 -V078 - -$(MID_SUBDIR)/mus_route110.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G010 -V080 - -$(MID_SUBDIR)/mus_route120.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G014 -V080 - -$(MID_SUBDIR)/mus_route122.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G021 -V080 - -$(MID_SUBDIR)/mus_route101.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G011 -V080 - -$(MID_SUBDIR)/mus_dummy.s: %.s: %.mid - $(MID) $< $@ -E -R40 - -$(MID_SUBDIR)/mus_hall_of_fame_room.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G093 -V080 - -$(MID_SUBDIR)/mus_end.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G102 -V036 - -$(MID_SUBDIR)/mus_help.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G056 -V078 - -$(MID_SUBDIR)/mus_level_up.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_obtain_item.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_evolved.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_gsc_route38.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -V080 - -$(MID_SUBDIR)/mus_slateport.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G079 -V070 - -$(MID_SUBDIR)/mus_poke_mart.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G050 -V085 - -$(MID_SUBDIR)/mus_oceanic_museum.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G023 -V080 - -$(MID_SUBDIR)/mus_gym.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G013 -V080 - -$(MID_SUBDIR)/mus_encounter_may.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G061 -V078 - -$(MID_SUBDIR)/mus_encounter_female.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G053 -V072 - -$(MID_SUBDIR)/mus_verdanturf.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G044 -V090 - -$(MID_SUBDIR)/mus_rustboro.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G045 -V085 - -$(MID_SUBDIR)/mus_route119.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G048 -V096 - -$(MID_SUBDIR)/mus_encounter_intense.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G062 -V078 - -$(MID_SUBDIR)/mus_weather_groudon.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G090 -V050 - -$(MID_SUBDIR)/mus_dewford.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G073 -V078 - -$(MID_SUBDIR)/mus_encounter_twins.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G095 -V075 - -$(MID_SUBDIR)/mus_encounter_interviewer.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G099 -V062 - -$(MID_SUBDIR)/mus_victory_trainer.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G058 -V091 - -$(MID_SUBDIR)/mus_victory_wild.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G025 -V080 - -$(MID_SUBDIR)/mus_victory_gym_leader.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G024 -V080 - -$(MID_SUBDIR)/mus_victory_aqua_magma.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G070 -V088 - -$(MID_SUBDIR)/mus_victory_league.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G029 -V080 - -$(MID_SUBDIR)/mus_caught.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G025 -V080 - -$(MID_SUBDIR)/mus_encounter_cool.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G063 -V086 - -$(MID_SUBDIR)/mus_trick_house.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G094 -V070 - -$(MID_SUBDIR)/mus_route113.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G064 -V084 - -$(MID_SUBDIR)/mus_sailing.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G077 -V086 - -$(MID_SUBDIR)/mus_mt_pyre.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G078 -V088 - -$(MID_SUBDIR)/mus_sealed_chamber.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G084 -V100 - -$(MID_SUBDIR)/mus_petalburg.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G015 -V080 - -$(MID_SUBDIR)/mus_fortree.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G032 -V080 - -$(MID_SUBDIR)/mus_oldale.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G019 -V080 - -$(MID_SUBDIR)/mus_mt_pyre_exterior.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G080 -V080 - -$(MID_SUBDIR)/mus_heal.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_slots_jackpot.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_slots_win.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_obtain_badge.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_obtain_berry.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_obtain_b_points.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G103 -V090 -P5 - -$(MID_SUBDIR)/mus_rg_photo.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G180 -V100 -P5 - -$(MID_SUBDIR)/mus_evolution_intro.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G026 -V080 - -$(MID_SUBDIR)/mus_obtain_symbol.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G103 -V100 -P5 - -$(MID_SUBDIR)/mus_awaken_legend.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_register_match_call.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G105 -V090 -P5 - -$(MID_SUBDIR)/mus_move_deleted.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_obtain_tmhm.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_too_bad.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G012 -V090 -P5 - -$(MID_SUBDIR)/mus_encounter_magma.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G087 -V072 - -$(MID_SUBDIR)/mus_lilycove.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G054 -V085 - -$(MID_SUBDIR)/mus_littleroot.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G051 -V100 - -$(MID_SUBDIR)/mus_surf.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G017 -V080 - -$(MID_SUBDIR)/mus_route104.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G047 -V097 - -$(MID_SUBDIR)/mus_gsc_pewter.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -V080 - -$(MID_SUBDIR)/mus_birch_lab.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G033 -V080 - -$(MID_SUBDIR)/mus_abnormal_weather.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G089 -V080 - -$(MID_SUBDIR)/mus_school.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G081 -V100 - -$(MID_SUBDIR)/mus_c_comm_center.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -V080 - -$(MID_SUBDIR)/mus_poke_center.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G046 -V092 - -$(MID_SUBDIR)/mus_b_pyramid.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G106 -V079 - -$(MID_SUBDIR)/mus_b_pyramid_top.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G107 -V077 - -$(MID_SUBDIR)/mus_ever_grande.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G068 -V086 - -$(MID_SUBDIR)/mus_rayquaza_appears.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G109 -V090 - -$(MID_SUBDIR)/mus_rg_rocket_hideout.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G133 -V090 - -$(MID_SUBDIR)/mus_rg_follow_me.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G131 -V068 - -$(MID_SUBDIR)/mus_rg_victory_road.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G154 -V090 - -$(MID_SUBDIR)/mus_rg_cycling.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G141 -V090 - -$(MID_SUBDIR)/mus_rg_intro_fight.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G136 -V090 - -$(MID_SUBDIR)/mus_rg_hall_of_fame.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G145 -V079 - -$(MID_SUBDIR)/mus_rg_encounter_deoxys.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G184 -V079 - -$(MID_SUBDIR)/mus_rg_credits.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G149 -V090 - -$(MID_SUBDIR)/mus_rg_encounter_gym_leader.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G144 -V090 - -$(MID_SUBDIR)/mus_rg_dex_rating.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G175 -V070 -P5 - -$(MID_SUBDIR)/mus_rg_obtain_key_item.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G178 -V077 -P5 - -$(MID_SUBDIR)/mus_rg_caught_intro.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G179 -V094 -P5 - -$(MID_SUBDIR)/mus_rg_caught.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G170 -V100 - -$(MID_SUBDIR)/mus_rg_cinnabar.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G138 -V090 - -$(MID_SUBDIR)/mus_rg_gym.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G134 -V090 - -$(MID_SUBDIR)/mus_rg_fuchsia.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G167 -V090 - -$(MID_SUBDIR)/mus_rg_poke_jump.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G132 -V090 - -$(MID_SUBDIR)/mus_rg_heal.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G140 -V090 - -$(MID_SUBDIR)/mus_rg_oak_lab.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G160 -V075 - -$(MID_SUBDIR)/mus_rg_berry_pick.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G132 -V090 - -$(MID_SUBDIR)/mus_rg_vermillion.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G172 -V090 - -$(MID_SUBDIR)/mus_rg_route1.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G150 -V079 - -$(MID_SUBDIR)/mus_rg_route3.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G152 -V083 - -$(MID_SUBDIR)/mus_rg_route11.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G153 -V090 - -$(MID_SUBDIR)/mus_rg_pallet.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G159 -V100 - -$(MID_SUBDIR)/mus_rg_surf.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G164 -V071 - -$(MID_SUBDIR)/mus_rg_sevii_45.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G188 -V084 - -$(MID_SUBDIR)/mus_rg_sevii_67.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G189 -V084 - -$(MID_SUBDIR)/mus_rg_sevii_123.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G173 -V084 - -$(MID_SUBDIR)/mus_rg_sevii_cave.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G147 -V090 - -$(MID_SUBDIR)/mus_rg_sevii_dungeon.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G146 -V090 - -$(MID_SUBDIR)/mus_rg_sevii_route.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G187 -V080 - -$(MID_SUBDIR)/mus_rg_net_center.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G162 -V096 - -$(MID_SUBDIR)/mus_rg_pewter.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G173 -V084 - -$(MID_SUBDIR)/mus_rg_oak.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G161 -V086 - -$(MID_SUBDIR)/mus_rg_mystery_gift.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G183 -V100 - -$(MID_SUBDIR)/mus_rg_route24.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G151 -V086 - -$(MID_SUBDIR)/mus_rg_teachy_tv_show.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G131 -V068 - -$(MID_SUBDIR)/mus_rg_mt_moon.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G147 -V090 - -$(MID_SUBDIR)/mus_rg_poke_tower.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G165 -V090 - -$(MID_SUBDIR)/mus_rg_poke_center.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G162 -V096 - -$(MID_SUBDIR)/mus_rg_poke_flute.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G165 -V048 -P5 - -$(MID_SUBDIR)/mus_rg_poke_mansion.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G148 -V090 - -$(MID_SUBDIR)/mus_rg_jigglypuff.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G135 -V068 -P5 - -$(MID_SUBDIR)/mus_rg_encounter_rival.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G174 -V079 - -$(MID_SUBDIR)/mus_rg_rival_exit.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G174 -V079 - -$(MID_SUBDIR)/mus_rg_encounter_rocket.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G142 -V096 - -$(MID_SUBDIR)/mus_rg_ss_anne.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G163 -V090 - -$(MID_SUBDIR)/mus_rg_new_game_exit.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G182 -V088 - -$(MID_SUBDIR)/mus_rg_new_game_intro.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G182 -V088 - -$(MID_SUBDIR)/mus_rg_lavender.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G139 -V090 - -$(MID_SUBDIR)/mus_rg_silph.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G166 -V076 - -$(MID_SUBDIR)/mus_rg_encounter_girl.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G143 -V051 - -$(MID_SUBDIR)/mus_rg_encounter_boy.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G144 -V090 - -$(MID_SUBDIR)/mus_rg_game_corner.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G132 -V090 - -$(MID_SUBDIR)/mus_rg_slow_pallet.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G159 -V092 - -$(MID_SUBDIR)/mus_rg_new_game_instruct.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G182 -V085 - -$(MID_SUBDIR)/mus_rg_viridian_forest.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G146 -V090 - -$(MID_SUBDIR)/mus_rg_trainer_tower.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G134 -V090 - -$(MID_SUBDIR)/mus_rg_celadon.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G168 -V070 - -$(MID_SUBDIR)/mus_rg_title.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G137 -V090 - -$(MID_SUBDIR)/mus_rg_game_freak.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G181 -V075 - -$(MID_SUBDIR)/mus_rg_teachy_tv_menu.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G186 -V059 - -$(MID_SUBDIR)/mus_rg_union_room.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G132 -V090 - -$(MID_SUBDIR)/mus_rg_vs_legend.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G157 -V090 - -$(MID_SUBDIR)/mus_rg_vs_deoxys.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G185 -V080 - -$(MID_SUBDIR)/mus_rg_vs_gym_leader.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G155 -V090 - -$(MID_SUBDIR)/mus_rg_vs_champion.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G158 -V090 - -$(MID_SUBDIR)/mus_rg_vs_mewtwo.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G157 -V090 - -$(MID_SUBDIR)/mus_rg_vs_trainer.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G156 -V090 - -$(MID_SUBDIR)/mus_rg_vs_wild.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G157 -V090 - -$(MID_SUBDIR)/mus_rg_victory_gym_leader.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G171 -V090 - -$(MID_SUBDIR)/mus_rg_victory_trainer.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G169 -V089 - -$(MID_SUBDIR)/mus_rg_victory_wild.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G170 -V090 - -$(MID_SUBDIR)/mus_cable_car.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G071 -V078 - -$(MID_SUBDIR)/mus_sootopolis.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G091 -V062 - -$(MID_SUBDIR)/mus_safari_zone.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G074 -V082 - -$(MID_SUBDIR)/mus_b_tower.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G110 -V100 - -$(MID_SUBDIR)/mus_evolution.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G026 -V080 - -$(MID_SUBDIR)/mus_encounter_elite_four.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G096 -V078 - -$(MID_SUBDIR)/mus_c_vs_legend_beast.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -V080 - -$(MID_SUBDIR)/mus_encounter_swimmer.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G036 -V080 - -$(MID_SUBDIR)/mus_encounter_girl.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G027 -V080 - -$(MID_SUBDIR)/mus_intro_battle.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G088 -V088 - -$(MID_SUBDIR)/mus_encounter_rich.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G043 -V094 - -$(MID_SUBDIR)/mus_link_contest_p1.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G039 -V079 - -$(MID_SUBDIR)/mus_link_contest_p2.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G040 -V090 - -$(MID_SUBDIR)/mus_link_contest_p3.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G041 -V075 - -$(MID_SUBDIR)/mus_link_contest_p4.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G042 -V090 - -$(MID_SUBDIR)/mus_littleroot_test.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G034 -V099 - -$(MID_SUBDIR)/mus_credits.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G101 -V100 - -$(MID_SUBDIR)/mus_title.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G059 -V090 - -$(MID_SUBDIR)/mus_fallarbor.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G083 -V100 - -$(MID_SUBDIR)/mus_mt_chimney.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G052 -V078 - -$(MID_SUBDIR)/mus_follow_me.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G066 -V074 - -$(MID_SUBDIR)/mus_vs_frontier_brain.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G115 -V090 -P1 - -$(MID_SUBDIR)/mus_vs_mew.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G116 -V090 - -$(MID_SUBDIR)/mus_vs_rayquaza.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G114 -V080 -P1 - -$(MID_SUBDIR)/mus_encounter_hiker.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G097 -V076 - -$(MID_SUBDIR)/ph_choice_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_choice_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_choice_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_cloth_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_cloth_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_cloth_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_cure_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_cure_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_cure_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_dress_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_dress_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_dress_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_face_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_face_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_face_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_fleece_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_fleece_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_fleece_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_foot_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_foot_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_foot_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_goat_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_goat_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_goat_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_goose_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_goose_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_goose_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_kit_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_kit_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_kit_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_lot_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_lot_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_lot_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_mouth_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_mouth_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_mouth_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_nurse_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_nurse_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_nurse_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_price_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_price_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_price_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_strut_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_strut_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_strut_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_thought_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_thought_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_thought_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_trap_blend.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_trap_held.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/ph_trap_solo.s: %.s: %.mid - $(MID) $< $@ -E -G130 -P4 - -$(MID_SUBDIR)/se_a.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V095 -P4 - -$(MID_SUBDIR)/se_bang.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_taillow_wing_flap.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V105 -P5 - -$(MID_SUBDIR)/se_glass_flute.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V105 -P5 - -$(MID_SUBDIR)/se_boo.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P4 - -$(MID_SUBDIR)/se_ball.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V070 -P4 - -$(MID_SUBDIR)/se_ball_open.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_mugshot.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P5 - -$(MID_SUBDIR)/se_contest_heart.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P5 - -$(MID_SUBDIR)/se_contest_curtain_fall.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V070 -P5 - -$(MID_SUBDIR)/se_contest_curtain_rise.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V070 -P5 - -$(MID_SUBDIR)/se_contest_icon_change.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P5 - -$(MID_SUBDIR)/se_contest_mons_turn.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P5 - -$(MID_SUBDIR)/se_contest_icon_clear.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P5 - -$(MID_SUBDIR)/se_card.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P4 - -$(MID_SUBDIR)/se_pike_curtain_close.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5 - -$(MID_SUBDIR)/se_pike_curtain_open.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5 - -$(MID_SUBDIR)/se_ledge.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P4 - -$(MID_SUBDIR)/se_itemfinder.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P5 - -$(MID_SUBDIR)/se_applause.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P5 - -$(MID_SUBDIR)/se_field_poison.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P5 - -$(MID_SUBDIR)/se_door.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V080 -P5 - -$(MID_SUBDIR)/se_e.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P4 - -$(MID_SUBDIR)/se_elevator.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_escalator.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_exp.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V080 -P5 - -$(MID_SUBDIR)/se_exp_max.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V094 -P5 - -$(MID_SUBDIR)/se_fu_zaku.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V120 -P4 - -$(MID_SUBDIR)/se_contest_condition_lose.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P4 - -$(MID_SUBDIR)/se_lavaridge_fall_warp.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -P4 - -$(MID_SUBDIR)/se_balloon_red.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V105 -P4 - -$(MID_SUBDIR)/se_balloon_blue.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V105 -P4 - -$(MID_SUBDIR)/se_balloon_yellow.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V105 -P4 - -$(MID_SUBDIR)/se_arena_timeup1.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5 - -$(MID_SUBDIR)/se_arena_timeup2.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5 - -$(MID_SUBDIR)/se_bridge_walk.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V095 -P4 - -$(MID_SUBDIR)/se_failure.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V120 -P4 - -$(MID_SUBDIR)/se_rotating_gate.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P4 - -$(MID_SUBDIR)/se_low_health.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P3 - -$(MID_SUBDIR)/se_i.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P4 - -$(MID_SUBDIR)/se_sliding_door.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V095 -P4 - -$(MID_SUBDIR)/se_vend.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_bike_hop.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P4 - -$(MID_SUBDIR)/se_bike_bell.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P4 - -$(MID_SUBDIR)/se_contest_place.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P4 - -$(MID_SUBDIR)/se_exit.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V120 -P5 - -$(MID_SUBDIR)/se_use_item.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_unlock.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_ball_bounce_1.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_ball_bounce_2.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_ball_bounce_3.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_ball_bounce_4.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_super_effective.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P5 - -$(MID_SUBDIR)/se_not_effective.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P5 - -$(MID_SUBDIR)/se_effective.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P5 - -$(MID_SUBDIR)/se_puddle.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V020 -P4 - -$(MID_SUBDIR)/se_berry_blender.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P4 - -$(MID_SUBDIR)/se_switch.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P4 - -$(MID_SUBDIR)/se_n.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -P4 - -$(MID_SUBDIR)/se_ball_throw.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P5 - -$(MID_SUBDIR)/se_ship.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V075 -P4 - -$(MID_SUBDIR)/se_flee.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P5 - -$(MID_SUBDIR)/se_o.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P4 - -$(MID_SUBDIR)/se_intro_blast.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_pc_login.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_pc_off.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_pc_on.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_pin.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V060 -P4 - -$(MID_SUBDIR)/se_ding_dong.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P5 - -$(MID_SUBDIR)/se_pokenav_off.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_pokenav_on.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_faint.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P5 - -$(MID_SUBDIR)/se_shiny.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V095 -P5 - -$(MID_SUBDIR)/se_shop.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P5 - -$(MID_SUBDIR)/se_rg_bag_cursor.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5 - -$(MID_SUBDIR)/se_rg_bag_pocket.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5 - -$(MID_SUBDIR)/se_rg_card_flip.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5 - -$(MID_SUBDIR)/se_rg_card_flipping.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -P5 - -$(MID_SUBDIR)/se_rg_card_open.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V112 -P5 - -$(MID_SUBDIR)/se_rg_deoxys_move.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V080 -P5 - -$(MID_SUBDIR)/se_rg_poke_jump_success.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P5 - -$(MID_SUBDIR)/se_rg_ball_click.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V100 -P5 - -$(MID_SUBDIR)/se_rg_help_close.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V095 -P5 - -$(MID_SUBDIR)/se_rg_help_error.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V125 -P5 - -$(MID_SUBDIR)/se_rg_help_open.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V096 -P5 - -$(MID_SUBDIR)/se_rg_ss_anne_horn.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V096 -P5 - -$(MID_SUBDIR)/se_rg_poke_jump_failure.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -P5 - -$(MID_SUBDIR)/se_rg_shop.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V080 -P5 - -$(MID_SUBDIR)/se_rg_door.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V100 -P5 - -$(MID_SUBDIR)/se_ice_crack.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P4 - -$(MID_SUBDIR)/se_ice_stairs.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P4 - -$(MID_SUBDIR)/se_ice_break.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_fall.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_save.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P5 - -$(MID_SUBDIR)/se_success.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V080 -P4 - -$(MID_SUBDIR)/se_select.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V080 -P5 - -$(MID_SUBDIR)/se_ball_trade.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_thunderstorm.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P2 - -$(MID_SUBDIR)/se_thunderstorm_stop.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P2 - -$(MID_SUBDIR)/se_thunder.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P3 - -$(MID_SUBDIR)/se_thunder2.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P3 - -$(MID_SUBDIR)/se_rain.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P2 - -$(MID_SUBDIR)/se_rain_stop.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V080 -P2 - -$(MID_SUBDIR)/se_downpour.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P2 - -$(MID_SUBDIR)/se_downpour_stop.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P2 - -$(MID_SUBDIR)/se_orb.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P5 - -$(MID_SUBDIR)/se_egg_hatch.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P5 - -$(MID_SUBDIR)/se_roulette_ball.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P2 - -$(MID_SUBDIR)/se_roulette_ball2.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P2 - -$(MID_SUBDIR)/se_ball_tray_exit.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V100 -P5 - -$(MID_SUBDIR)/se_ball_tray_ball.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P5 - -$(MID_SUBDIR)/se_ball_tray_enter.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P5 - -$(MID_SUBDIR)/se_click.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V110 -P4 - -$(MID_SUBDIR)/se_warp_in.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P4 - -$(MID_SUBDIR)/se_warp_out.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P4 - -$(MID_SUBDIR)/se_pokenav_call.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V120 -P5 - -$(MID_SUBDIR)/se_pokenav_hang_up.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V110 -P5 - -$(MID_SUBDIR)/se_note_a.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_note_b.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_note_c.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_note_c_high.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_note_d.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_mud_ball.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_note_e.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_note_f.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_note_g.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_breakable_door.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_truck_door.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_truck_unload.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -P4 - -$(MID_SUBDIR)/se_truck_move.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -P4 - -$(MID_SUBDIR)/se_truck_stop.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -P4 - -$(MID_SUBDIR)/se_repel.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -V090 -P4 - -$(MID_SUBDIR)/se_u.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -P4 - -$(MID_SUBDIR)/se_sudowoodo_shake.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G129 -V077 -P5 - -$(MID_SUBDIR)/se_m_double_slap.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_comet_punch.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P4 - -$(MID_SUBDIR)/se_m_pay_day.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V095 -P4 - -$(MID_SUBDIR)/se_m_fire_punch.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_scratch.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_vicegrip.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_razor_wind.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_razor_wind2.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P4 - -$(MID_SUBDIR)/se_m_swords_dance.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_m_cut.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V120 -P4 - -$(MID_SUBDIR)/se_m_gust.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_gust2.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_wing_attack.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V105 -P4 - -$(MID_SUBDIR)/se_m_fly.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_bind.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V100 -P4 - -$(MID_SUBDIR)/se_m_mega_kick.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V090 -P4 - -$(MID_SUBDIR)/se_m_mega_kick2.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_jump_kick.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_sand_attack.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_headbutt.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_horn_attack.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_take_down.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V105 -P4 - -$(MID_SUBDIR)/se_m_tail_whip.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_m_leer.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G128 -V110 -P4 - -$(MID_SUBDIR)/se_dex_search.s: %.s: %.mid - $(MID) $< $@ -E -R$(STD_REVERB) -G127 -v100 -P5 +# Warn users building without a .cfg - build will fail at link time +$(MID_ASM_DIR)/%.s: $(MID_SUBDIR)/%.mid + $(warning $< does not have an associated entry in midi.cfg! It cannot be built) \ No newline at end of file diff --git a/sound/songs/midi/midi.cfg b/sound/songs/midi/midi.cfg new file mode 100644 index 0000000000..439778e9bd --- /dev/null +++ b/sound/songs/midi/midi.cfg @@ -0,0 +1,420 @@ +mus_abandoned_ship.mid: -E -R50 -G030 -V080 +mus_abnormal_weather.mid: -E -R50 -G089 -V080 +mus_aqua_magma_hideout.mid: -E -R50 -G076 -V084 +mus_awaken_legend.mid: -E -R50 -G012 -V090 -P5 +mus_b_arena.mid: -E -R50 -G104 -V090 +mus_b_dome_lobby.mid: -E -R50 -G111 -V056 +mus_b_dome.mid: -E -R50 -G111 -V090 +mus_b_factory.mid: -E -R50 -G113 -V100 +mus_b_frontier.mid: -E -R50 -G103 -V094 +mus_b_palace.mid: -E -R50 -G108 -V105 +mus_b_pike.mid: -E -R50 -G112 -V092 +mus_b_pyramid_top.mid: -E -R50 -G107 -V077 +mus_b_pyramid.mid: -E -R50 -G106 -V079 +mus_b_tower_rs.mid: -E -R50 -G035 -V080 +mus_b_tower.mid: -E -R50 -G110 -V100 +mus_birch_lab.mid: -E -R50 -G033 -V080 +mus_c_comm_center.mid: -E -R50 -V080 +mus_c_vs_legend_beast.mid: -E -R50 -V080 +mus_cable_car.mid: -E -R50 -G071 -V078 +mus_caught.mid: -E -R50 -G025 -V080 +mus_cave_of_origin.mid: -E -R50 -G037 -V080 +mus_contest_lobby.mid: -E -R50 -G098 -V060 +mus_contest_results.mid: -E -R50 -G092 -V080 +mus_contest_winner.mid: -E -R50 -G085 -V100 +mus_contest.mid: -E -R50 -G086 -V088 +mus_credits.mid: -E -R50 -G101 -V100 +mus_cycling.mid: -E -R50 -G049 -V083 +mus_dewford.mid: -E -R50 -G073 -V078 +mus_dummy.mid: -E -R40 +mus_encounter_aqua.mid: -E -R50 -G065 -V086 +mus_encounter_brendan.mid: -E -R50 -G067 -V078 +mus_encounter_champion.mid: -E -R50 -G100 -V076 +mus_encounter_cool.mid: -E -R50 -G063 -V086 +mus_encounter_elite_four.mid: -E -R50 -G096 -V078 +mus_encounter_female.mid: -E -R50 -G053 -V072 +mus_encounter_girl.mid: -E -R50 -G027 -V080 +mus_encounter_hiker.mid: -E -R50 -G097 -V076 +mus_encounter_intense.mid: -E -R50 -G062 -V078 +mus_encounter_interviewer.mid: -E -R50 -G099 -V062 +mus_encounter_magma.mid: -E -R50 -G087 -V072 +mus_encounter_male.mid: -E -R50 -G028 -V080 +mus_encounter_may.mid: -E -R50 -G061 -V078 +mus_encounter_rich.mid: -E -R50 -G043 -V094 +mus_encounter_suspicious.mid: -E -R50 -G069 -V078 +mus_encounter_swimmer.mid: -E -R50 -G036 -V080 +mus_encounter_twins.mid: -E -R50 -G095 -V075 +mus_end.mid: -E -R50 -G102 -V036 +mus_ever_grande.mid: -E -R50 -G068 -V086 +mus_evolution_intro.mid: -E -R50 -G026 -V080 +mus_evolution.mid: -E -R50 -G026 -V080 +mus_evolved.mid: -E -R50 -G012 -V090 -P5 +mus_fallarbor.mid: -E -R50 -G083 -V100 +mus_follow_me.mid: -E -R50 -G066 -V074 +mus_fortree.mid: -E -R50 -G032 -V080 +mus_game_corner.mid: -E -R50 -G072 -V072 +mus_gsc_pewter.mid: -E -R50 -V080 +mus_gsc_route38.mid: -E -R50 -V080 +mus_gym.mid: -E -R50 -G013 -V080 +mus_hall_of_fame_room.mid: -E -R50 -G093 -V080 +mus_hall_of_fame.mid: -E -R50 -G082 -V078 +mus_heal.mid: -E -R50 -G012 -V090 -P5 +mus_help.mid: -E -R50 -G056 -V078 +mus_intro_battle.mid: -E -R50 -G088 -V088 +mus_intro.mid: -E -R50 -G060 -V090 +mus_level_up.mid: -E -R50 -G012 -V090 -P5 +mus_lilycove_museum.mid: -E -R50 -G020 -V080 +mus_lilycove.mid: -E -R50 -G054 -V085 +mus_link_contest_p1.mid: -E -R50 -G039 -V079 +mus_link_contest_p2.mid: -E -R50 -G040 -V090 +mus_link_contest_p3.mid: -E -R50 -G041 -V075 +mus_link_contest_p4.mid: -E -R50 -G042 -V090 +mus_littleroot_test.mid: -E -R50 -G034 -V099 +mus_littleroot.mid: -E -R50 -G051 -V100 +mus_move_deleted.mid: -E -R50 -G012 -V090 -P5 +mus_mt_chimney.mid: -E -R50 -G052 -V078 +mus_mt_pyre_exterior.mid: -E -R50 -G080 -V080 +mus_mt_pyre.mid: -E -R50 -G078 -V088 +mus_obtain_b_points.mid: -E -R50 -G103 -V090 -P5 +mus_obtain_badge.mid: -E -R50 -G012 -V090 -P5 +mus_obtain_berry.mid: -E -R50 -G012 -V090 -P5 +mus_obtain_item.mid: -E -R50 -G012 -V090 -P5 +mus_obtain_symbol.mid: -E -R50 -G103 -V100 -P5 +mus_obtain_tmhm.mid: -E -R50 -G012 -V090 -P5 +mus_oceanic_museum.mid: -E -R50 -G023 -V080 +mus_oldale.mid: -E -R50 -G019 -V080 +mus_petalburg_woods.mid: -E -R50 -G018 -V080 +mus_petalburg.mid: -E -R50 -G015 -V080 +mus_poke_center.mid: -E -R50 -G046 -V092 +mus_poke_mart.mid: -E -R50 -G050 -V085 +mus_rayquaza_appears.mid: -E -R50 -G109 -V090 +mus_register_match_call.mid: -E -R50 -G105 -V090 -P5 +mus_rg_berry_pick.mid: -E -R50 -G132 -V090 +mus_rg_caught_intro.mid: -E -R50 -G179 -V094 -P5 +mus_rg_caught.mid: -E -R50 -G170 -V100 +mus_rg_celadon.mid: -E -R50 -G168 -V070 +mus_rg_cinnabar.mid: -E -R50 -G138 -V090 +mus_rg_credits.mid: -E -R50 -G149 -V090 +mus_rg_cycling.mid: -E -R50 -G141 -V090 +mus_rg_dex_rating.mid: -E -R50 -G175 -V070 -P5 +mus_rg_encounter_boy.mid: -E -R50 -G144 -V090 +mus_rg_encounter_deoxys.mid: -E -R50 -G184 -V079 +mus_rg_encounter_girl.mid: -E -R50 -G143 -V051 +mus_rg_encounter_gym_leader: -E -R50 -G144 -V090 +mus_rg_encounter_rival.mid: -E -R50 -G174 -V079 +mus_rg_encounter_rocket.mid: -E -R50 -G142 -V096 +mus_rg_follow_me.mid: -E -R50 -G131 -V068 +mus_rg_fuchsia.mid: -E -R50 -G167 -V090 +mus_rg_game_corner.mid: -E -R50 -G132 -V090 +mus_rg_game_freak.mid: -E -R50 -G181 -V075 +mus_rg_gym.mid: -E -R50 -G134 -V090 +mus_rg_hall_of_fame.mid: -E -R50 -G145 -V079 +mus_rg_heal.mid: -E -R50 -G140 -V090 +mus_rg_intro_fight.mid: -E -R50 -G136 -V090 +mus_rg_jigglypuff.mid: -E -R50 -G135 -V068 -P5 +mus_rg_lavender.mid: -E -R50 -G139 -V090 +mus_rg_mt_moon.mid: -E -R50 -G147 -V090 +mus_rg_mystery_gift.mid: -E -R50 -G183 -V100 +mus_rg_net_center.mid: -E -R50 -G162 -V096 +mus_rg_new_game_exit.mid: -E -R50 -G182 -V088 +mus_rg_new_game_instruct.mid: -E -R50 -G182 -V085 +mus_rg_new_game_intro.mid: -E -R50 -G182 -V088 +mus_rg_oak_lab.mid: -E -R50 -G160 -V075 +mus_rg_oak.mid: -E -R50 -G161 -V086 +mus_rg_obtain_key_item.mid: -E -R50 -G178 -V077 -P5 +mus_rg_pallet.mid: -E -R50 -G159 -V100 +mus_rg_pewter.mid: -E -R50 -G173 -V084 +mus_rg_photo.mid: -E -R50 -G180 -V100 -P5 +mus_rg_poke_center.mid: -E -R50 -G162 -V096 +mus_rg_poke_flute.mid: -E -R50 -G165 -V048 -P5 +mus_rg_poke_jump.mid: -E -R50 -G132 -V090 +mus_rg_poke_mansion.mid: -E -R50 -G148 -V090 +mus_rg_poke_tower.mid: -E -R50 -G165 -V090 +mus_rg_rival_exit.mid: -E -R50 -G174 -V079 +mus_rg_rocket_hideout.mid: -E -R50 -G133 -V090 +mus_rg_route1.mid: -E -R50 -G150 -V079 +mus_rg_route3.mid: -E -R50 -G152 -V083 +mus_rg_route11.mid: -E -R50 -G153 -V090 +mus_rg_route24.mid: -E -R50 -G151 -V086 +mus_rg_sevii_45.mid: -E -R50 -G188 -V084 +mus_rg_sevii_67.mid: -E -R50 -G189 -V084 +mus_rg_sevii_123.mid: -E -R50 -G173 -V084 +mus_rg_sevii_cave.mid: -E -R50 -G147 -V090 +mus_rg_sevii_dungeon.mid: -E -R50 -G146 -V090 +mus_rg_sevii_route.mid: -E -R50 -G187 -V080 +mus_rg_silph.mid: -E -R50 -G166 -V076 +mus_rg_slow_pallet.mid: -E -R50 -G159 -V092 +mus_rg_ss_anne.mid: -E -R50 -G163 -V090 +mus_rg_surf.mid: -E -R50 -G164 -V071 +mus_rg_teachy_tv_menu.mid: -E -R50 -G186 -V059 +mus_rg_teachy_tv_show.mid: -E -R50 -G131 -V068 +mus_rg_title.mid: -E -R50 -G137 -V090 +mus_rg_trainer_tower.mid: -E -R50 -G134 -V090 +mus_rg_union_room.mid: -E -R50 -G132 -V090 +mus_rg_vermillion.mid: -E -R50 -G172 -V090 +mus_rg_victory_gym_leader.mid: -E -R50 -G171 -V090 +mus_rg_victory_road.mid: -E -R50 -G154 -V090 +mus_rg_victory_trainer.mid: -E -R50 -G169 -V089 +mus_rg_victory_wild.mid: -E -R50 -G170 -V090 +mus_rg_viridian_forest.mid: -E -R50 -G146 -V090 +mus_rg_vs_champion.mid: -E -R50 -G158 -V090 +mus_rg_vs_deoxys.mid: -E -R50 -G185 -V080 +mus_rg_vs_gym_leader.mid: -E -R50 -G155 -V090 +mus_rg_vs_legend.mid: -E -R50 -G157 -V090 +mus_rg_vs_mewtwo.mid: -E -R50 -G157 -V090 +mus_rg_vs_trainer.mid: -E -R50 -G156 -V090 +mus_rg_vs_wild.mid: -E -R50 -G157 -V090 +mus_roulette.mid: -E -R50 -G038 -V080 +mus_route101.mid: -E -R50 -G011 -V080 +mus_route104.mid: -E -R50 -G047 -V097 +mus_route110.mid: -E -R50 -G010 -V080 +mus_route111.mid: -E -R50 -G055 -V076 +mus_route113.mid: -E -R50 -G064 -V084 +mus_route119.mid: -E -R50 -G048 -V096 +mus_route120.mid: -E -R50 -G014 -V080 +mus_route122.mid: -E -R50 -G021 -V080 +mus_rustboro.mid: -E -R50 -G045 -V085 +mus_safari_zone.mid: -E -R50 -G074 -V082 +mus_sailing.mid: -E -R50 -G077 -V086 +mus_school.mid: -E -R50 -G081 -V100 +mus_sealed_chamber.mid: -E -R50 -G084 -V100 +mus_slateport.mid: -E -R50 -G079 -V070 +mus_slots_jackpot.mid: -E -R50 -G012 -V090 -P5 +mus_slots_win.mid: -E -R50 -G012 -V090 -P5 +mus_sootopolis.mid: -E -R50 -G091 -V062 +mus_surf.mid: -E -R50 -G017 -V080 +mus_title.mid: -E -R50 -G059 -V090 +mus_too_bad.mid: -E -R50 -G012 -V090 -P5 +mus_trick_house.mid: -E -R50 -G094 -V070 +mus_underwater.mid: -E -R50 -G057 -V094 +mus_verdanturf.mid: -E -R50 -G044 -V090 +mus_victory_aqua_magma.mid: -E -R50 -G070 -V088 +mus_victory_gym_leader.mid: -E -R50 -G024 -V080 +mus_victory_league.mid: -E -R50 -G029 -V080 +mus_victory_road.mid: -E -R50 -G075 -V076 +mus_victory_trainer.mid: -E -R50 -G058 -V091 +mus_victory_wild.mid: -E -R50 -G025 -V080 +mus_vs_aqua_magma_leader.mid: -E -R50 -G126 -V080 -P1 +mus_vs_aqua_magma.mid: -E -R50 -G118 -V080 -P1 +mus_vs_champion.mid: -E -R50 -G121 -V080 -P1 +mus_vs_elite_four.mid: -E -R50 -G125 -V080 -P1 +mus_vs_frontier_brain.mid: -E -R50 -G115 -V090 -P1 +mus_vs_gym_leader.mid: -E -R50 -G120 -V080 -P1 +mus_vs_kyogre_groudon.mid: -E -R50 -G123 -V080 -P1 +mus_vs_mew.mid: -E -R50 -G116 -V090 +mus_vs_rayquaza.mid: -E -R50 -G114 -V080 -P1 +mus_vs_regi.mid: -E -R50 -G122 -V080 -P1 +mus_vs_rival.mid: -E -R50 -G124 -V080 -P1 +mus_vs_trainer.mid: -E -R50 -G119 -V080 -P1 +mus_vs_wild.mid: -E -R50 -G117 -V080 -P1 +mus_weather_groudon.mid: -E -R50 -G090 -V050 +ph_choice_blend.mid: -E -G130 -P4 +ph_choice_held.mid: -E -G130 -P4 +ph_choice_solo.mid: -E -G130 -P4 +ph_cloth_blend.mid: -E -G130 -P4 +ph_cloth_held.mid: -E -G130 -P4 +ph_cloth_solo.mid: -E -G130 -P4 +ph_cure_blend.mid: -E -G130 -P4 +ph_cure_held.mid: -E -G130 -P4 +ph_cure_solo.mid: -E -G130 -P4 +ph_dress_blend.mid: -E -G130 -P4 +ph_dress_held.mid: -E -G130 -P4 +ph_dress_solo.mid: -E -G130 -P4 +ph_face_blend.mid: -E -G130 -P4 +ph_face_held.mid: -E -G130 -P4 +ph_face_solo.mid: -E -G130 -P4 +ph_fleece_blend.mid: -E -G130 -P4 +ph_fleece_held.mid: -E -G130 -P4 +ph_fleece_solo.mid: -E -G130 -P4 +ph_foot_blend.mid: -E -G130 -P4 +ph_foot_held.mid: -E -G130 -P4 +ph_foot_solo.mid: -E -G130 -P4 +ph_goat_blend.mid: -E -G130 -P4 +ph_goat_held.mid: -E -G130 -P4 +ph_goat_solo.mid: -E -G130 -P4 +ph_goose_blend.mid: -E -G130 -P4 +ph_goose_held.mid: -E -G130 -P4 +ph_goose_solo.mid: -E -G130 -P4 +ph_kit_blend.mid: -E -G130 -P4 +ph_kit_held.mid: -E -G130 -P4 +ph_kit_solo.mid: -E -G130 -P4 +ph_lot_blend.mid: -E -G130 -P4 +ph_lot_held.mid: -E -G130 -P4 +ph_lot_solo.mid: -E -G130 -P4 +ph_mouth_blend.mid: -E -G130 -P4 +ph_mouth_held.mid: -E -G130 -P4 +ph_mouth_solo.mid: -E -G130 -P4 +ph_nurse_blend.mid: -E -G130 -P4 +ph_nurse_held.mid: -E -G130 -P4 +ph_nurse_solo.mid: -E -G130 -P4 +ph_price_blend.mid: -E -G130 -P4 +ph_price_held.mid: -E -G130 -P4 +ph_price_solo.mid: -E -G130 -P4 +ph_strut_blend.mid: -E -G130 -P4 +ph_strut_held.mid: -E -G130 -P4 +ph_strut_solo.mid: -E -G130 -P4 +ph_thought_blend.mid: -E -G130 -P4 +ph_thought_held.mid: -E -G130 -P4 +ph_thought_solo.mid: -E -G130 -P4 +ph_trap_blend.mid: -E -G130 -P4 +ph_trap_held.mid: -E -G130 -P4 +ph_trap_solo.mid: -E -G130 -P4 +se_a.mid: -E -R50 -G128 -V095 -P4 +se_applause.mid: -E -R50 -G128 -V100 -P5 +se_arena_timeup1.mid: -E -R50 -G129 -P5 +se_arena_timeup2.mid: -E -R50 -G129 -P5 +se_ball_bounce_1.mid: -E -R50 -G128 -V100 -P4 +se_ball_bounce_2.mid: -E -R50 -G128 -V100 -P4 +se_ball_bounce_3.mid: -E -R50 -G128 -V100 -P4 +se_ball_bounce_4.mid: -E -R50 -G128 -V100 -P4 +se_ball_open.mid: -E -R50 -G127 -V100 -P5 +se_ball_throw.mid: -E -R50 -G128 -V120 -P5 +se_ball_trade.mid: -E -R50 -G127 -V100 -P5 +se_ball_tray_ball.mid: -E -R50 -G128 -V110 -P5 +se_ball_tray_enter.mid: -E -R50 -G128 -V110 -P5 +se_ball_tray_exit.mid: -E -R50 -G127 -V100 -P5 +se_ball.mid: -E -R50 -G127 -V070 -P4 +se_balloon_blue.mid: -E -R50 -G128 -V105 -P4 +se_balloon_red.mid: -E -R50 -G128 -V105 -P4 +se_balloon_yellow.mid: -E -R50 -G128 -V105 -P4 +se_bang.mid: -E -R50 -G128 -V110 -P4 +se_berry_blender.mid: -E -R50 -G128 -V090 -P4 +se_bike_bell.mid: -E -R50 -G128 -V090 -P4 +se_bike_hop.mid: -E -R50 -G127 -V090 -P4 +se_boo.mid: -E -R50 -G127 -V110 -P4 +se_breakable_door.mid: -E -R50 -G128 -V110 -P4 +se_bridge_walk.mid: -E -R50 -G128 -V095 -P4 +se_card.mid: -E -R50 -G127 -V100 -P4 +se_click.mid: -E -R50 -G127 -V110 -P4 +se_contest_condition_lose.mid: -E -R50 -G127 -V110 -P4 +se_contest_curtain_fall.mid: -E -R50 -G128 -V070 -P5 +se_contest_curtain_rise.mid: -E -R50 -G128 -V070 -P5 +se_contest_heart.mid: -E -R50 -G128 -V090 -P5 +se_contest_icon_change.mid: -E -R50 -G128 -V110 -P5 +se_contest_icon_clear.mid: -E -R50 -G128 -V090 -P5 +se_contest_mons_turn.mid: -E -R50 -G128 -V090 -P5 +se_contest_place.mid: -E -R50 -G127 -V110 -P4 +se_dex_search.mid: -E -R50 -G127 -v100 -P5 +se_ding_dong.mid: -E -R50 -G127 -V090 -P5 +se_door.mid: -E -R50 -G127 -V080 -P5 +se_downpour_stop.mid: -E -R50 -G128 -V100 -P2 +se_downpour.mid: -E -R50 -G128 -V100 -P2 +se_e.mid: -E -R50 -G128 -V120 -P4 +se_effective.mid: -E -R50 -G127 -V110 -P5 +se_egg_hatch.mid: -E -R50 -G128 -V120 -P5 +se_elevator.mid: -E -R50 -G128 -V100 -P4 +se_escalator.mid: -E -R50 -G128 -V100 -P4 +se_exit.mid: -E -R50 -G127 -V120 -P5 +se_exp_max.mid: -E -R50 -G128 -V094 -P5 +se_exp.mid: -E -R50 -G127 -V080 -P5 +se_failure.mid: -E -R50 -G127 -V120 -P4 +se_faint.mid: -E -R50 -G127 -V110 -P5 +se_fall.mid: -E -R50 -G128 -V110 -P4 +se_field_poison.mid: -E -R50 -G127 -V110 -P5 +se_flee.mid: -E -R50 -G127 -V090 -P5 +se_fu_zaku.mid: -E -R50 -G127 -V120 -P4 +se_glass_flute.mid: -E -R50 -G128 -V105 -P5 +se_i.mid: -E -R50 -G128 -V120 -P4 +se_ice_break.mid: -E -R50 -G128 -V100 -P4 +se_ice_crack.mid: -E -R50 -G127 -V100 -P4 +se_ice_stairs.mid: -E -R50 -G128 -V090 -P4 +se_intro_blast.mid: -E -R50 -G127 -V100 -P5 +se_itemfinder.mid: -E -R50 -G127 -V090 -P5 +se_lavaridge_fall_warp.mid: -E -R50 -G127 -P4 +se_ledge.mid: -E -R50 -G127 -V100 -P4 +se_low_health.mid: -E -R50 -G127 -V100 -P3 +se_m_bind.mid: -E -R50 -G128 -V100 -P4 +se_m_comet_punch.mid: -E -R50 -G128 -V120 -P4 +se_m_cut.mid: -E -R50 -G128 -V120 -P4 +se_m_double_slap.mid: -E -R50 -G128 -V110 -P4 +se_m_fire_punch.mid: -E -R50 -G128 -V110 -P4 +se_m_fly.mid: -E -R50 -G128 -V110 -P4 +se_m_gust.mid: -E -R50 -G128 -V110 -P4 +se_m_gust2.mid: -E -R50 -G128 -V110 -P4 +se_m_headbutt.mid: -E -R50 -G128 -V110 -P4 +se_m_horn_attack.mid: -E -R50 -G128 -V110 -P4 +se_m_jump_kick.mid: -E -R50 -G128 -V110 -P4 +se_m_leer.mid: -E -R50 -G128 -V110 -P4 +se_m_mega_kick.mid: -E -R50 -G128 -V090 -P4 +se_m_mega_kick2.mid: -E -R50 -G128 -V110 -P4 +se_m_pay_day.mid: -E -R50 -G128 -V095 -P4 +se_m_razor_wind.mid: -E -R50 -G128 -V110 -P4 +se_m_razor_wind2.mid: -E -R50 -G128 -V090 -P4 +se_m_sand_attack.mid: -E -R50 -G128 -V110 -P4 +se_m_scratch.mid: -E -R50 -G128 -V110 -P4 +se_m_swords_dance.mid: -E -R50 -G128 -V100 -P4 +se_m_tail_whip.mid: -E -R50 -G128 -V110 -P4 +se_m_take_down.mid: -E -R50 -G128 -V105 -P4 +se_m_vicegrip.mid: -E -R50 -G128 -V110 -P4 +se_m_wing_attack.mid: -E -R50 -G128 -V105 -P4 +se_mud_ball.mid: -E -R50 -G128 -V110 -P4 +se_mugshot.mid: -E -R50 -G128 -V090 -P5 +se_n.mid: -E -R50 -G128 -P4 +se_not_effective.mid: -E -R50 -G127 -V110 -P5 +se_note_a.mid: -E -R50 -G128 -V110 -P4 +se_note_b.mid: -E -R50 -G128 -V110 -P4 +se_note_c_high.mid: -E -R50 -G128 -V110 -P4 +se_note_c.mid: -E -R50 -G128 -V110 -P4 +se_note_d.mid: -E -R50 -G128 -V110 -P4 +se_note_e.mid: -E -R50 -G128 -V110 -P4 +se_note_f.mid: -E -R50 -G128 -V110 -P4 +se_note_g.mid: -E -R50 -G128 -V110 -P4 +se_o.mid: -E -R50 -G128 -V120 -P4 +se_orb.mid: -E -R50 -G128 -V100 -P5 +se_pc_login.mid: -E -R50 -G127 -V100 -P5 +se_pc_off.mid: -E -R50 -G127 -V100 -P5 +se_pc_on.mid: -E -R50 -G127 -V100 -P5 +se_pike_curtain_close.mid: -E -R50 -G129 -P5 +se_pike_curtain_open.mid: -E -R50 -G129 -P5 +se_pin.mid: -E -R50 -G127 -V060 -P4 +se_pokenav_call.mid: -E -R50 -G129 -V120 -P5 +se_pokenav_hang_up.mid: -E -R50 -G129 -V110 -P5 +se_pokenav_off.mid: -E -R50 -G127 -V100 -P5 +se_pokenav_on.mid: -E -R50 -G127 -V100 -P5 +se_puddle.mid: -E -R50 -G128 -V020 -P4 +se_rain_stop.mid: -E -R50 -G128 -V080 -P2 +se_rain.mid: -E -R50 -G128 -V080 -P2 +se_repel.mid: -E -R50 -G127 -V090 -P4 +se_rg_bag_cursor.mid: -E -R50 -G129 -P5 +se_rg_bag_pocket.mid: -E -R50 -G129 -P5 +se_rg_ball_click.mid: -E -R50 -G129 -V100 -P5 +se_rg_card_flip.mid: -E -R50 -G129 -P5 +se_rg_card_flipping.mid: -E -R50 -G129 -P5 +se_rg_card_open.mid: -E -R50 -G129 -V112 -P5 +se_rg_deoxys_move.mid: -E -R50 -G129 -V080 -P5 +se_rg_door.mid: -E -R50 -G129 -V100 -P5 +se_rg_help_close.mid: -E -R50 -G129 -V095 -P5 +se_rg_help_error.mid: -E -R50 -G129 -V125 -P5 +se_rg_help_open.mid: -E -R50 -G129 -V096 -P5 +se_rg_poke_jump_failure.mid: -E -R50 -G127 -P5 +se_rg_poke_jump_success.mid: -E -R50 -G128 -V110 -P5 +se_rg_shop.mid: -E -R50 -G129 -V080 -P5 +se_rg_ss_anne_horn.mid: -E -R50 -G129 -V096 -P5 +se_rotating_gate.mid: -E -R50 -G128 -V090 -P4 +se_roulette_ball.mid: -E -R50 -G128 -V110 -P2 +se_roulette_ball2.mid: -E -R50 -G128 -V110 -P2 +se_save.mid: -E -R50 -G128 -V080 -P5 +se_select.mid: -E -R50 -G127 -V080 -P5 +se_shiny.mid: -E -R50 -G128 -V095 -P5 +se_ship.mid: -E -R50 -G127 -V075 -P4 +se_shop.mid: -E -R50 -G127 -V090 -P5 +se_sliding_door.mid: -E -R50 -G128 -V095 -P4 +se_success.mid: -E -R50 -G127 -V080 -P4 +se_sudowoodo_shake.mid: -E -R50 -G129 -V077 -P5 +se_super_effective.mid: -E -R50 -G127 -V110 -P5 +se_switch.mid: -E -R50 -G127 -V100 -P4 +se_taillow_wing_flap.mid: -E -R50 -G128 -V105 -P5 +se_thunder.mid: -E -R50 -G128 -V110 -P3 +se_thunder2.mid: -E -R50 -G128 -V110 -P3 +se_thunderstorm_stop.mid: -E -R50 -G128 -V080 -P2 +se_thunderstorm.mid: -E -R50 -G128 -V080 -P2 +se_truck_door.mid: -E -R50 -G128 -V110 -P4 +se_truck_move.mid: -E -R50 -G128 -P4 +se_truck_stop.mid: -E -R50 -G128 -P4 +se_truck_unload.mid: -E -R50 -G127 -P4 +se_u.mid: -E -R50 -G128 -P4 +se_unlock.mid: -E -R50 -G128 -V100 -P4 +se_use_item.mid: -E -R50 -G127 -V100 -P5 +se_vend.mid: -E -R50 -G128 -V110 -P4 +se_warp_in.mid: -E -R50 -G127 -V090 -P4 +se_warp_out.mid: -E -R50 -G127 -V090 -P4 \ No newline at end of file From cf1eaea7f7dbe438ab28a7949e94e9b0c453be74 Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Wed, 15 Nov 2023 13:36:35 +1300 Subject: [PATCH 032/544] Coalesced audio rules into `audio.mk` --- Makefile | 9 +-------- songs.mk => audio_rules.mk | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 9 deletions(-) rename songs.mk => audio_rules.mk (58%) diff --git a/Makefile b/Makefile index 5c073b36ca..df574e4545 100644 --- a/Makefile +++ b/Makefile @@ -86,8 +86,6 @@ DATA_SRC_SUBDIR = src/data DATA_ASM_SUBDIR = data SONG_SUBDIR = sound/songs MID_SUBDIR = sound/songs/midi -SAMPLE_SUBDIR = sound/direct_sound_samples -CRY_SUBDIR = sound/direct_sound_samples/cries C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) GFLIB_BUILDDIR = $(OBJ_DIR)/$(GFLIB_SUBDIR) @@ -263,7 +261,7 @@ include graphics_file_rules.mk include map_data_rules.mk include spritesheet_rules.mk include json_data_rules.mk -include songs.mk +include audio_rules.mk %.s: ; %.png: ; @@ -277,8 +275,6 @@ include songs.mk %.gbapal: %.png ; $(GFX) $< $@ %.lz: % ; $(GFX) $< $@ %.rl: % ; $(GFX) $< $@ -$(CRY_SUBDIR)/%.bin: $(CRY_SUBDIR)/%.aif ; $(AIF) $< $@ --compress -sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) @@ -393,9 +389,6 @@ $(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsub endif endif -$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s - $(AS) $(ASFLAGS) -I sound -o $@ $< - $(OBJ_DIR)/sym_bss.ld: sym_bss.txt $(RAMSCRGEN) .bss $< ENGLISH > $@ diff --git a/songs.mk b/audio_rules.mk similarity index 58% rename from songs.mk rename to audio_rules.mk index feef64cf5b..69d482fdfa 100644 --- a/songs.mk +++ b/audio_rules.mk @@ -1,6 +1,28 @@ # This file contains rules for making assemblies for most music in the game. -MID_ASM_DIR = $(MID_SUBDIR) +CRY_SUBDIR := sound/direct_sound_samples/cries + +MID_ASM_DIR := $(MID_SUBDIR) +CRY_BIN_DIR := $(CRY_SUBDIR) +SOUND_BIN_DIR := sound + +SPECIAL_OUTDIRS := $(MID_ASM_DIR) $(CRY_BIN_DIR) +SPECIAL_OUTDIRS += $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/direct_sound_samples/phonemes $(SOUND_BIN_DIR)/direct_sound_samples/cries +$(shell mkdir -p $(SPECIAL_OUTDIRS) ) + +# Assembly song compilation +$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s + $(AS) $(ASFLAGS) -I sound -o $@ $< +$(MID_BUILDDIR)/%.o: $(MID_ASM_DIR)/%.s + $(AS) $(ASFLAGS) -I sound -o $@ $< + +# Compressed cries +$(CRY_BIN_DIR)/%.bin: $(CRY_SUBDIR)/%.aif + $(AIF) $< $@ --compress + +# Uncompressed sounds +$(SOUND_BIN_DIR)/%.bin: sound/%.aif + $(AIF) $< $@ # For each line in midi.cfg, we do some trickery to convert it into a make rule for the `.mid` file described on the line # Data following the colon in said file corresponds to arguments passed into mid2agb From 5e4e522d9264cd6c6c139293887acda3cf5e0909 Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Wed, 15 Nov 2023 17:33:25 +1300 Subject: [PATCH 033/544] `.cfg` edits now rebuild `.mid` --- audio_rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audio_rules.mk b/audio_rules.mk index 69d482fdfa..fccb9fc548 100644 --- a/audio_rules.mk +++ b/audio_rules.mk @@ -30,7 +30,7 @@ MID_CFG_PATH := $(MID_SUBDIR)/midi.cfg # $1: Source path no extension, $2 Options define MID_RULE -$(MID_ASM_DIR)/$1.s: $(MID_SUBDIR)/$1.mid +$(MID_ASM_DIR)/$1.s: $(MID_SUBDIR)/$1.mid $(MID_CFG_PATH) $(MID) $$< $$@ $2 endef # source path, remaining text (options) From b3f9c8bf7c51f28275e62da7ed413c3354ca9fb8 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Wed, 19 Jun 2024 10:25:44 -0400 Subject: [PATCH 034/544] GetSidewaysStairsCollision cant descend stairs into water --- src/event_object_movement.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 1bf74a7818..a9147902c9 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4732,6 +4732,10 @@ u8 GetSidewaysStairsCollision(struct ObjectEvent *objectEvent, u8 dir, u8 curren if ((dir == DIR_SOUTH || dir == DIR_NORTH) && collision != COLLISION_NONE) return collision; + // cant descend stairs into water + if (MetatileBehavior_IsSurfableFishableWater(nextBehavior)) + return collision; + if (MetatileBehavior_IsSidewaysStairsLeftSide(nextBehavior)) { //moving ONTO left side stair From 8a6407b6bc9301b1d0e2c5fd0b0631ffd65e8ba7 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Wed, 19 Jun 2024 12:30:09 -0400 Subject: [PATCH 035/544] fix warning --- src/event_object_movement.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index df5c4fd14b..212280d7b8 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -6069,7 +6069,6 @@ static bool8 ObjectEventOnRightSideStair(struct ObjectEvent *objectEvent, s16 x, u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) { - u8 direction = dir; u8 currentBehavior = MapGridGetMetatileBehaviorAt(objectEvent->currentCoords.x, objectEvent->currentCoords.y); u8 nextBehavior = MapGridGetMetatileBehaviorAt(x, y); u8 collision; From e864b686c7d3119bf2fcdf81227ee81bb38a92bc Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Wed, 19 Jun 2024 12:45:36 -0400 Subject: [PATCH 036/544] fix another warning --- src/field_player_avatar.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 42000c5673..2819e27846 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -713,7 +713,6 @@ static u8 CheckForPlayerAvatarStaticCollision(u8 direction) u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) { u8 collision = GetCollisionAtCoords(objectEvent, x, y, direction); - u8 currentBehavior = MapGridGetMetatileBehaviorAt(objectEvent->currentCoords.x, objectEvent->currentCoords.y); if (collision == COLLISION_ELEVATION_MISMATCH && CanStopSurfing(x, y, direction)) return COLLISION_STOP_SURFING; @@ -733,21 +732,6 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u CheckAcroBikeCollision(x, y, metatileBehavior, &collision); } - //sideways stairs logic - /* - if (MetatileBehavior_IsSidewaysStairsLeftSideTop(metatileBehavior) && direction == DIR_EAST) - return COLLISION_IMPASSABLE; //moving onto left-side top edge east from ground -> cannot move - else if (MetatileBehavior_IsSidewaysStairsRightSideTop(metatileBehavior) && direction == DIR_WEST) - return COLLISION_IMPASSABLE; //moving onto left-side top edge east from ground -> cannot move - else if (MetatileBehavior_IsSidewaysStairsRightSideBottom(metatileBehavior) && (direction == DIR_EAST || direction == DIR_SOUTH)) - return COLLISION_IMPASSABLE; - else if (MetatileBehavior_IsSidewaysStairsLeftSideBottom(metatileBehavior) && (direction == DIR_WEST || direction == DIR_SOUTH)) - return COLLISION_IMPASSABLE; - else if ((MetatileBehavior_IsSidewaysStairsLeftSideTop(currentBehavior) || MetatileBehavior_IsSidewaysStairsRightSideTop(currentBehavior)) - && direction == DIR_NORTH && collision == COLLISION_NONE) - return COLLISION_IMPASSABLE; //trying to move north off of top-most tile onto same level doesn't work - */ - return collision; } From 5eea3d39cd50955e62904d146f67f65dc001b735 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Tue, 25 Jun 2024 21:53:05 +0200 Subject: [PATCH 037/544] UB fix ClockwiseWipe_TopRight --- src/battle_transition.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/battle_transition.c b/src/battle_transition.c index 11f9cddf4b..c23578e608 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1907,7 +1907,11 @@ static bool8 ClockwiseWipe_TopRight(struct Task *task) { sTransitionData->VBlank_DMA = FALSE; +#ifdef UBFIX + InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sTransitionData->tWipeEndX, 0, 1, 1); +#else InitBlackWipe(sTransitionData->data, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sTransitionData->tWipeEndX, -1, 1, 1); +#endif do { gScanlineEffectRegBuffers[0][sTransitionData->tWipeCurrY] = (sTransitionData->tWipeCurrX + 1) | ((DISPLAY_WIDTH / 2) << 8); From 0cffe4a96aa34e7c3a28a10e2b51c692a7b85e87 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 8 Jul 2024 14:08:15 -0400 Subject: [PATCH 038/544] syntax fixes, turn slow movement on rock stairs default off, remove petalburg layout change --- data/layouts/PetalburgCity/map.bin | Bin 1800 -> 1800 bytes include/config/overworld.h | 2 +- src/bike.c | 3 +- .../movement_action_func_tables.h | 4 - src/field_player_avatar.c | 6 +- src/metatile_behavior.c | 232 +++++++++--------- 6 files changed, 120 insertions(+), 127 deletions(-) diff --git a/data/layouts/PetalburgCity/map.bin b/data/layouts/PetalburgCity/map.bin index 46c808e0556b1a035ea9cc16f5e47fc0a64f20f5..35f0172ca20a07e800bc248b803e740364a24715 100644 GIT binary patch delta 232 zcmeC+>)_k)fQeVq5CIh@Z)6gl#4IHkWE5Tc zp%4~5o@b`dO%+%aS%g`XSSBYhiA-L^BF6)^(+Fbo)_k)fQcuACDQ={vsfliU=f+bEG5WjFoUVk0Rks5F&ZdL)@Ih`V>Flv7oEs7 zIfYpdC^U;Hn!!h%wkB9_T_m^DN$3M>@ZCBSF^k~q(B zo&hW&!2;4=zyh=>p)g?r6Hsjki=Mz-qZv#)Bs^E$W{(k1D*<&N+_&ine4)v!+3G?M%Hjf05ujtS^xk5 diff --git a/include/config/overworld.h b/include/config/overworld.h index fc6865f53f..6fa0ec9c98 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -3,7 +3,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. -#define SLOW_MOVEMENT_ON_STAIRS TRUE // If enabled, the player will move slower up/down stairs like in FR +#define SLOW_MOVEMENT_ON_STAIRS FALSE // If enabled, the player will move slower up/down stairs like in FR // 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. diff --git a/src/bike.c b/src/bike.c index 1cfecfe152..427dfdfcf2 100644 --- a/src/bike.c +++ b/src/bike.c @@ -206,7 +206,7 @@ static void MachBikeTransition_TurnDirection(u8 direction) Bike_SetBikeStill(); } else - { + { MachBikeTransition_FaceDirection(playerObjEvent->facingDirection); } } @@ -246,6 +246,7 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) } else { + // we did not hit anything that can slow us down, so perform the advancement callback depending on the bikeFrameCounter and try to increase the mach bike's speed. if (ObjectMovingOnRockStairs(playerObjEvent, direction) && gPlayerAvatar.bikeFrameCounter > 1) gPlayerAvatar.bikeFrameCounter--; diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index 0ee3e78afc..dda5ff3991 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -266,7 +266,6 @@ u8 MovementAction_FlyUp_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_Fly_Finish(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyDown_Step1(struct ObjectEvent *, struct Sprite *); -//slow running u8 MovementActionFunc_RunSlowDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementActionFunc_RunSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementActionFunc_RunSlowLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); @@ -435,7 +434,6 @@ u8 (*const gMovementActionFuncs_FlyUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_EmoteX[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_EmoteDoubleExclMark[])(struct ObjectEvent *, struct Sprite *); -//run slow u8 (*const gMovementActionFuncs_RunDownSlow[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RunUpSlow[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RunLeftSlow[])(struct ObjectEvent *, struct Sprite *); @@ -604,7 +602,6 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) [MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK] = gMovementActionFuncs_EmoteDoubleExclMark, [MOVEMENT_ACTION_EXIT_POKEBALL] = gMovementActionFuncs_ExitPokeball, [MOVEMENT_ACTION_ENTER_POKEBALL] = gMovementActionFuncs_EnterPokeball, - //run slow [MOVEMENT_ACTION_RUN_DOWN_SLOW] = gMovementActionFuncs_RunDownSlow, [MOVEMENT_ACTION_RUN_UP_SLOW] = gMovementActionFuncs_RunUpSlow, [MOVEMENT_ACTION_RUN_LEFT_SLOW] = gMovementActionFuncs_RunLeftSlow, @@ -1571,7 +1568,6 @@ u8 (*const gMovementActionFuncs_EmoteDoubleExclMark[])(struct ObjectEvent *, str MovementAction_Finish, }; -//slow running u8 (*const gMovementActionFuncs_RunDownSlow[])(struct ObjectEvent *, struct Sprite *) = { MovementActionFunc_RunSlowDown_Step0, MovementActionFunc_RunSlow_Step1, diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 2819e27846..8e7c47b89e 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -638,7 +638,7 @@ static void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys) static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) { u8 collision = CheckForPlayerAvatarCollision(direction); - + if (collision) { if (collision == COLLISION_LEDGE_JUMP) @@ -659,7 +659,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) return; } } - + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) { // same speed as running @@ -2473,7 +2473,6 @@ u8 GetRightSideStairsDirection(u8 direction) default: if (direction > DIR_EAST) direction -= DIR_EAST; - return direction; } } @@ -2489,7 +2488,6 @@ u8 GetLeftSideStairsDirection(u8 direction) default: if (direction > DIR_EAST) direction -= DIR_EAST; - return direction; } } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 6de81c0f05..7063afcf59 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -8,64 +8,64 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = { - [MB_NORMAL] = TILE_FLAG_UNUSED, - [MB_TALL_GRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, - [MB_LONG_GRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, - [MB_UNUSED_05] = TILE_FLAG_HAS_ENCOUNTERS, - [MB_DEEP_SAND] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, - [MB_SHORT_GRASS] = TILE_FLAG_UNUSED, - [MB_CAVE] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, - [MB_LONG_GRASS_SOUTH_EDGE] = TILE_FLAG_UNUSED, - [MB_NO_RUNNING] = TILE_FLAG_UNUSED, - [MB_INDOOR_ENCOUNTER] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, - [MB_MOUNTAIN_TOP] = TILE_FLAG_UNUSED, - [MB_BATTLE_PYRAMID_WARP] = TILE_FLAG_UNUSED, - [MB_MOSSDEEP_GYM_WARP] = TILE_FLAG_UNUSED, - [MB_MT_PYRE_HOLE] = TILE_FLAG_UNUSED, - [MB_POND_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, - [MB_INTERIOR_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, - [MB_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, - [MB_WATERFALL] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_SOOTOPOLIS_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_OCEAN_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, - [MB_PUDDLE] = TILE_FLAG_UNUSED, - [MB_SHALLOW_WATER] = TILE_FLAG_UNUSED, - [MB_NO_SURFACING] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_STAIRS_OUTSIDE_ABANDONED_SHIP] = TILE_FLAG_UNUSED, - [MB_SHOAL_CAVE_ENTRANCE] = TILE_FLAG_UNUSED, - [MB_ICE] = TILE_FLAG_UNUSED, - [MB_SAND] = TILE_FLAG_UNUSED, - [MB_SEAWEED] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, - [MB_UNUSED_23] = TILE_FLAG_UNUSED, - [MB_ASHGRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, - [MB_FOOTPRINTS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, - [MB_THIN_ICE] = TILE_FLAG_UNUSED, - [MB_CRACKED_ICE] = TILE_FLAG_UNUSED, - [MB_HOT_SPRINGS] = TILE_FLAG_UNUSED, - [MB_LAVARIDGE_GYM_B1F_WARP] = TILE_FLAG_UNUSED, - [MB_SEAWEED_NO_SURFACING] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, - [MB_REFLECTION_UNDER_BRIDGE] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_EAST] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_WEST] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_NORTH] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_SOUTH] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_NORTHEAST] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_NORTHWEST] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_SOUTHEAST] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_SOUTHWEST] = TILE_FLAG_UNUSED, - [MB_JUMP_NORTHEAST] = TILE_FLAG_UNUSED, - [MB_JUMP_NORTHWEST] = TILE_FLAG_UNUSED, - [MB_JUMP_SOUTHEAST] = TILE_FLAG_UNUSED, - [MB_JUMP_SOUTHWEST] = TILE_FLAG_UNUSED, - [MB_WALK_EAST] = TILE_FLAG_UNUSED, - [MB_WALK_WEST] = TILE_FLAG_UNUSED, - [MB_WALK_NORTH] = TILE_FLAG_UNUSED, - [MB_WALK_SOUTH] = TILE_FLAG_UNUSED, - [MB_SLIDE_EAST] = TILE_FLAG_UNUSED, - [MB_SLIDE_WEST] = TILE_FLAG_UNUSED, - [MB_SLIDE_NORTH] = TILE_FLAG_UNUSED, - [MB_SLIDE_SOUTH] = TILE_FLAG_UNUSED, - [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_FLAG_UNUSED, + [MB_NORMAL] = TILE_FLAG_UNUSED, + [MB_TALL_GRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_LONG_GRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_UNUSED_05] = TILE_FLAG_HAS_ENCOUNTERS, + [MB_DEEP_SAND] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_SHORT_GRASS] = TILE_FLAG_UNUSED, + [MB_CAVE] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_LONG_GRASS_SOUTH_EDGE] = TILE_FLAG_UNUSED, + [MB_NO_RUNNING] = TILE_FLAG_UNUSED, + [MB_INDOOR_ENCOUNTER] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_MOUNTAIN_TOP] = TILE_FLAG_UNUSED, + [MB_BATTLE_PYRAMID_WARP] = TILE_FLAG_UNUSED, + [MB_MOSSDEEP_GYM_WARP] = TILE_FLAG_UNUSED, + [MB_MT_PYRE_HOLE] = TILE_FLAG_UNUSED, + [MB_POND_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_INTERIOR_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_WATERFALL] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_SOOTOPOLIS_DEEP_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_OCEAN_WATER] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_PUDDLE] = TILE_FLAG_UNUSED, + [MB_SHALLOW_WATER] = TILE_FLAG_UNUSED, + [MB_NO_SURFACING] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_STAIRS_OUTSIDE_ABANDONED_SHIP] = TILE_FLAG_UNUSED, + [MB_SHOAL_CAVE_ENTRANCE] = TILE_FLAG_UNUSED, + [MB_ICE] = TILE_FLAG_UNUSED, + [MB_SAND] = TILE_FLAG_UNUSED, + [MB_SEAWEED] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_UNUSED_23] = TILE_FLAG_UNUSED, + [MB_ASHGRASS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_FOOTPRINTS] = TILE_FLAG_UNUSED | TILE_FLAG_HAS_ENCOUNTERS, + [MB_THIN_ICE] = TILE_FLAG_UNUSED, + [MB_CRACKED_ICE] = TILE_FLAG_UNUSED, + [MB_HOT_SPRINGS] = TILE_FLAG_UNUSED, + [MB_LAVARIDGE_GYM_B1F_WARP] = TILE_FLAG_UNUSED, + [MB_SEAWEED_NO_SURFACING] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE | TILE_FLAG_HAS_ENCOUNTERS, + [MB_REFLECTION_UNDER_BRIDGE] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_EAST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_WEST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_NORTH] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_SOUTH] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_NORTHEAST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_NORTHWEST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_SOUTHEAST] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_SOUTHWEST] = TILE_FLAG_UNUSED, + [MB_JUMP_NORTHEAST] = TILE_FLAG_UNUSED, + [MB_JUMP_NORTHWEST] = TILE_FLAG_UNUSED, + [MB_JUMP_SOUTHEAST] = TILE_FLAG_UNUSED, + [MB_JUMP_SOUTHWEST] = TILE_FLAG_UNUSED, + [MB_WALK_EAST] = TILE_FLAG_UNUSED, + [MB_WALK_WEST] = TILE_FLAG_UNUSED, + [MB_WALK_NORTH] = TILE_FLAG_UNUSED, + [MB_WALK_SOUTH] = TILE_FLAG_UNUSED, + [MB_SLIDE_EAST] = TILE_FLAG_UNUSED, + [MB_SLIDE_WEST] = TILE_FLAG_UNUSED, + [MB_SLIDE_NORTH] = TILE_FLAG_UNUSED, + [MB_SLIDE_SOUTH] = TILE_FLAG_UNUSED, + [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_FLAG_UNUSED, [MB_SIDEWAYS_STAIRS_RIGHT_SIDE] = TILE_FLAG_UNUSED, [MB_SIDEWAYS_STAIRS_LEFT_SIDE] = TILE_FLAG_UNUSED, [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP] = TILE_FLAG_UNUSED, @@ -73,63 +73,63 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM] = TILE_FLAG_UNUSED, [MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM] = TILE_FLAG_UNUSED, [MB_ROCK_STAIRS] = TILE_FLAG_UNUSED, - [MB_EASTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_WESTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_NORTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_SOUTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_NON_ANIMATED_DOOR] = TILE_FLAG_UNUSED, - [MB_LADDER] = TILE_FLAG_UNUSED, - [MB_EAST_ARROW_WARP] = TILE_FLAG_UNUSED, - [MB_WEST_ARROW_WARP] = TILE_FLAG_UNUSED, - [MB_NORTH_ARROW_WARP] = TILE_FLAG_UNUSED, - [MB_SOUTH_ARROW_WARP] = TILE_FLAG_UNUSED, - [MB_CRACKED_FLOOR_HOLE] = TILE_FLAG_UNUSED, - [MB_AQUA_HIDEOUT_WARP] = TILE_FLAG_UNUSED, - [MB_LAVARIDGE_GYM_1F_WARP] = TILE_FLAG_UNUSED, - [MB_ANIMATED_DOOR] = TILE_FLAG_UNUSED, - [MB_UP_ESCALATOR] = TILE_FLAG_UNUSED, - [MB_DOWN_ESCALATOR] = TILE_FLAG_UNUSED, - [MB_WATER_DOOR] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_WATER_SOUTH_ARROW_WARP] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_DEEP_SOUTH_WARP] = TILE_FLAG_UNUSED, - [MB_UNUSED_6F] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, - [MB_BRIDGE_OVER_POND_LOW] = TILE_FLAG_UNUSED, - [MB_BRIDGE_OVER_POND_MED] = TILE_FLAG_UNUSED, - [MB_BRIDGE_OVER_POND_HIGH] = TILE_FLAG_UNUSED, - [MB_PACIFIDLOG_VERTICAL_LOG_TOP] = TILE_FLAG_UNUSED, - [MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM] = TILE_FLAG_UNUSED, - [MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT] = TILE_FLAG_UNUSED, - [MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT] = TILE_FLAG_UNUSED, - [MB_FORTREE_BRIDGE] = TILE_FLAG_UNUSED, - [MB_BRIDGE_OVER_POND_MED_EDGE_1] = TILE_FLAG_UNUSED, - [MB_BRIDGE_OVER_POND_MED_EDGE_2] = TILE_FLAG_UNUSED, - [MB_BRIDGE_OVER_POND_HIGH_EDGE_1] = TILE_FLAG_UNUSED, - [MB_BRIDGE_OVER_POND_HIGH_EDGE_2] = TILE_FLAG_UNUSED, - [MB_UNUSED_BRIDGE] = TILE_FLAG_UNUSED, - [MB_BIKE_BRIDGE_OVER_BARRIER] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_SCENERY] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_TRAINER_SPOT] = TILE_FLAG_UNUSED, - [MB_HOLDS_SMALL_DECORATION] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_BALLOON] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_IMPASSABLE] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_GLITTER_MAT] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_JUMP_MAT] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_SPIN_MAT] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_SOUND_MAT] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_BREAKABLE_DOOR] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_SOUTH_AND_NORTH] = TILE_FLAG_UNUSED, - [MB_IMPASSABLE_WEST_AND_EAST] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_HOLE] = TILE_FLAG_UNUSED, - [MB_HOLDS_LARGE_DECORATION] = TILE_FLAG_UNUSED, - [MB_SECRET_BASE_TV_SHIELD] = TILE_FLAG_UNUSED, - [MB_PLAYER_ROOM_PC_ON] = TILE_FLAG_UNUSED, - [MB_MUDDY_SLOPE] = TILE_FLAG_UNUSED, - [MB_BUMPY_SLOPE] = TILE_FLAG_UNUSED, - [MB_CRACKED_FLOOR] = TILE_FLAG_UNUSED, - [MB_ISOLATED_VERTICAL_RAIL] = TILE_FLAG_UNUSED, - [MB_ISOLATED_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, - [MB_VERTICAL_RAIL] = TILE_FLAG_UNUSED, - [MB_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, + [MB_EASTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_WESTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_NORTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_SOUTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_NON_ANIMATED_DOOR] = TILE_FLAG_UNUSED, + [MB_LADDER] = TILE_FLAG_UNUSED, + [MB_EAST_ARROW_WARP] = TILE_FLAG_UNUSED, + [MB_WEST_ARROW_WARP] = TILE_FLAG_UNUSED, + [MB_NORTH_ARROW_WARP] = TILE_FLAG_UNUSED, + [MB_SOUTH_ARROW_WARP] = TILE_FLAG_UNUSED, + [MB_CRACKED_FLOOR_HOLE] = TILE_FLAG_UNUSED, + [MB_AQUA_HIDEOUT_WARP] = TILE_FLAG_UNUSED, + [MB_LAVARIDGE_GYM_1F_WARP] = TILE_FLAG_UNUSED, + [MB_ANIMATED_DOOR] = TILE_FLAG_UNUSED, + [MB_UP_ESCALATOR] = TILE_FLAG_UNUSED, + [MB_DOWN_ESCALATOR] = TILE_FLAG_UNUSED, + [MB_WATER_DOOR] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_WATER_SOUTH_ARROW_WARP] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_DEEP_SOUTH_WARP] = TILE_FLAG_UNUSED, + [MB_UNUSED_6F] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, + [MB_BRIDGE_OVER_POND_LOW] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_MED] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_HIGH] = TILE_FLAG_UNUSED, + [MB_PACIFIDLOG_VERTICAL_LOG_TOP] = TILE_FLAG_UNUSED, + [MB_PACIFIDLOG_VERTICAL_LOG_BOTTOM] = TILE_FLAG_UNUSED, + [MB_PACIFIDLOG_HORIZONTAL_LOG_LEFT] = TILE_FLAG_UNUSED, + [MB_PACIFIDLOG_HORIZONTAL_LOG_RIGHT] = TILE_FLAG_UNUSED, + [MB_FORTREE_BRIDGE] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_MED_EDGE_1] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_MED_EDGE_2] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_HIGH_EDGE_1] = TILE_FLAG_UNUSED, + [MB_BRIDGE_OVER_POND_HIGH_EDGE_2] = TILE_FLAG_UNUSED, + [MB_UNUSED_BRIDGE] = TILE_FLAG_UNUSED, + [MB_BIKE_BRIDGE_OVER_BARRIER] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_SCENERY] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_TRAINER_SPOT] = TILE_FLAG_UNUSED, + [MB_HOLDS_SMALL_DECORATION] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_BALLOON] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_IMPASSABLE] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_GLITTER_MAT] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_JUMP_MAT] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_SPIN_MAT] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_SOUND_MAT] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_BREAKABLE_DOOR] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_SOUTH_AND_NORTH] = TILE_FLAG_UNUSED, + [MB_IMPASSABLE_WEST_AND_EAST] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_HOLE] = TILE_FLAG_UNUSED, + [MB_HOLDS_LARGE_DECORATION] = TILE_FLAG_UNUSED, + [MB_SECRET_BASE_TV_SHIELD] = TILE_FLAG_UNUSED, + [MB_PLAYER_ROOM_PC_ON] = TILE_FLAG_UNUSED, + [MB_MUDDY_SLOPE] = TILE_FLAG_UNUSED, + [MB_BUMPY_SLOPE] = TILE_FLAG_UNUSED, + [MB_CRACKED_FLOOR] = TILE_FLAG_UNUSED, + [MB_ISOLATED_VERTICAL_RAIL] = TILE_FLAG_UNUSED, + [MB_ISOLATED_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, + [MB_VERTICAL_RAIL] = TILE_FLAG_UNUSED, + [MB_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, }; bool8 MetatileBehavior_IsATile(u8 metatileBehavior) @@ -1481,5 +1481,3 @@ bool8 MetatileBehavior_IsRockStairs(u8 metatileBehavior) else return FALSE; } - - From b43e0e07f73f57c143e0935d0d06f1b469383307 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 15 Jul 2024 21:45:34 -0700 Subject: [PATCH 039/544] Add config to disable OW_AUTO_SIGNPOST --- include/config/overworld.h | 1 + include/constants/metatile_behaviors.h | 4 ++++ src/metatile_behavior.c | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/include/config/overworld.h b/include/config/overworld.h index b666426996..8d9a46e0b8 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -3,6 +3,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. +#define OW_AUTO_SIGNPOST FALSE // When the tile that the player is facing has MB_SIGNPOST, the player will automatically read the signpoost. // 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. diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 05ee34110d..56df442bb8 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -30,7 +30,11 @@ #define MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2 0x1A #define MB_STAIRS_OUTSIDE_ABANDONED_SHIP 0x1B #define MB_SHOAL_CAVE_ENTRANCE 0x1C +#if OW_AUTO_SIGNPOST == TRUE #define MB_SIGNPOST 0x1D +#else +#define MB_UNUSED_1D 0x1D +#endif #define MB_UNUSED_1E 0x1E #define MB_UNUSED_1F 0x1F #define MB_ICE 0x20 diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index e8abdf5fd8..e5c72b127c 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -125,7 +125,9 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [MB_ISOLATED_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, [MB_VERTICAL_RAIL] = TILE_FLAG_UNUSED, [MB_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, +#if OW_AUTO_SIGNPOST == TRUE [MB_SIGNPOST] = TILE_FLAG_UNUSED, +#endif }; bool8 MetatileBehavior_IsATile(u8 metatileBehavior) @@ -1404,6 +1406,10 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) bool8 MetatileBehavior_IsSignpost(u8 mb) { +#if OW_AUTO_SIGNPOST == TRUE return (mb == MB_SIGNPOST); +#else + return FALSE; +#endif } From 8445d44fb6b628d0fb1c812e0250eeac6a87005a Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 15 Jul 2024 21:48:24 -0700 Subject: [PATCH 040/544] Renamed DoPicboxCancel to UseBlankMessageToCancelPokemonPic --- data/event_scripts.s | 2 +- data/specials.inc | 2 +- include/config/overworld.h | 2 +- src/field_specials.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/event_scripts.s b/data/event_scripts.s index 1778472823..2d1b0d1bea 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -694,7 +694,7 @@ EventScript_BackupMrBrineyLocation:: .include "data/scripts/set_gym_trainers.inc" EventScript_CancelMessageBox:: - special DoPicboxCancel + special UseBlankMessageToCancelPokemonPic release end diff --git a/data/specials.inc b/data/specials.inc index 2779b1fe0c..044d794bc8 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -554,4 +554,4 @@ gSpecials:: def_special Script_GetChosenMonDefensiveEVs def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs - def_special DoPicboxCancel + def_special UseBlankMessageToCancelPokemonPic diff --git a/include/config/overworld.h b/include/config/overworld.h index 8d9a46e0b8..412ced44e6 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -3,7 +3,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. -#define OW_AUTO_SIGNPOST FALSE // When the tile that the player is facing has MB_SIGNPOST, the player will automatically read the signpoost. +#define OW_AUTO_SIGNPOST FALSE // When enabled, if the tile that the player is facing has MB_SIGNPOST, the player will automatically read the signpost. // 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. diff --git a/src/field_specials.c b/src/field_specials.c index d247a4da80..e37a61f4df 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4267,7 +4267,7 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } -void DoPicboxCancel(void) +void UseBlankMessageToCancelPokemonPic(void) { u8 t = EOS; AddTextPrinterParameterized(0, FONT_NORMAL, &t, 0, 1, 0, NULL); From b54cf221d8098cc0a1d53ec5adb867db7d324cd3 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 15 Jul 2024 22:13:33 -0700 Subject: [PATCH 041/544] Renamed and refactored FieldInput_HandleCancelSignpost into CancelSignPostMessageBox --- include/config/overworld.h | 2 +- include/event_scripts.h | 7 ++-- include/field_control_avatar.h | 2 +- src/field_control_avatar.c | 59 ++++++++++++++++++++-------------- src/overworld.c | 2 +- 5 files changed, 41 insertions(+), 31 deletions(-) diff --git a/include/config/overworld.h b/include/config/overworld.h index 412ced44e6..aeaf88be58 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -3,7 +3,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. -#define OW_AUTO_SIGNPOST FALSE // When enabled, if the tile that the player is facing has MB_SIGNPOST, the player will automatically read the signpost. +#define OW_AUTO_SIGNPOST TRUE // When enabled, if the tile that the player is facing has MB_SIGNPOST, the player will automatically read the signpost. // 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. diff --git a/include/event_scripts.h b/include/event_scripts.h index 7b7ce54e67..f66e52866d 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -28,6 +28,9 @@ extern const u8 EventScript_FollowerFaceUp[]; extern const u8 EventScript_FollowerFaceResult[]; extern const u8 EnterPokeballMovement[]; +extern const u8 Common_Movement_FollowerSafeStart[]; +extern const u8 Common_Movement_FollowerSafeEnd[]; + extern const u8 EventScript_TestSignpostMsg[]; extern const u8 EventScript_TryGetTrainerScript[]; extern const u8 EventScript_StartTrainerApproach[]; @@ -643,10 +646,6 @@ extern const u8 VSSeeker_Text_BatteryNotChargedNeedXSteps[]; extern const u8 VSSeeker_Text_NoTrainersWithinRange[]; extern const u8 VSSeeker_Text_TrainersNotReady[]; extern const u8 EventScript_VsSeekerChargingDone[]; - -extern const u8 Common_Movement_FollowerSafeStart[]; -extern const u8 Common_Movement_FollowerSafeEnd[]; - extern const u8 EventScript_CancelMessageBox[]; #endif // GUARD_EVENT_SCRIPTS_H diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 994b4b6712..cbee293a31 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -34,6 +34,6 @@ u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); void ClearPoisonStepCounter(void); -void FieldInput_HandleCancelSignpost(struct FieldInput *input); +void CancelSignPostMessageBox(struct FieldInput *input); #endif // GUARD_FIELDCONTROLAVATAR_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 044c1c1779..85bbb4cf2b 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1167,29 +1167,40 @@ static void Task_OpenStartMenu(u8 taskId) } } -void FieldInput_HandleCancelSignpost(struct FieldInput *input) +bool32 IsDpadPushedToTurnOrMovePlayer(struct FieldInput *input) { - if (ScriptContext_IsEnabled() == TRUE) - { - if (gWalkAwayFromSignInhibitTimer != 0) - { - gWalkAwayFromSignInhibitTimer--; - } - else if (CanWalkAwayToCancelMsgBox() == TRUE) - { - //ClearMsgBoxCancelableState(); - if (input->dpadDirection != 0 && GetPlayerFacingDirection() != input->dpadDirection) - { - ScriptContext_SetupScript(EventScript_CancelMessageBox); - LockPlayerFieldControls(); - } - else if (input->pressedStartButton) - { - ScriptContext_SetupScript(EventScript_CancelMessageBox); - LockPlayerFieldControls(); - if (!FuncIsActiveTask(Task_OpenStartMenu)) - CreateTask(Task_OpenStartMenu, 8); - } - } - } + return (input->dpadDirection != 0 && GetPlayerFacingDirection() != input->dpadDirection); +} + +void CancelSignPostMessageBox(struct FieldInput *input) +{ + if (!ScriptContext_IsEnabled()) + return; + + if (gWalkAwayFromSignInhibitTimer) + { + gWalkAwayFromSignInhibitTimer--; + return; + } + + if (!CanWalkAwayToCancelMsgBox()) + return; + + if (IsDpadPushedToTurnOrMovePlayer(input)) + { + ScriptContext_SetupScript(EventScript_CancelMessageBox); + LockPlayerFieldControls(); + return; + } + + if (!input->pressedStartButton) + return; + + ScriptContext_SetupScript(EventScript_CancelMessageBox); + LockPlayerFieldControls(); + + if (FuncIsActiveTask(Task_OpenStartMenu)) + return; + + CreateTask(Task_OpenStartMenu, 8); } diff --git a/src/overworld.c b/src/overworld.c index 2d787b3cea..866ba27e8e 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1489,7 +1489,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) UpdatePlayerAvatarTransitionState(); FieldClearPlayerInput(&inputStruct); FieldGetPlayerInput(&inputStruct, newKeys, heldKeys); - FieldInput_HandleCancelSignpost(&inputStruct); + CancelSignPostMessageBox(&inputStruct); if (!ArePlayerFieldControlsLocked()) { if (ProcessPlayerFieldInput(&inputStruct) == 1) From 1ae615651d38513ea90953a6cad857f7bb898cdc Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 15 Jul 2024 22:33:31 -0700 Subject: [PATCH 042/544] Renamed gWalkAwayFromSignInhibitTimer to gWalkAwayFromSignpostTimer --- include/field_message_box.h | 2 +- src/field_control_avatar.c | 4 ++-- src/field_message_box.c | 2 +- src/script.c | 5 +++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/field_message_box.h b/include/field_message_box.h index eed6c7a9c0..810ac0fc20 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -19,6 +19,6 @@ u8 GetFieldMessageBoxMode(void); void StopFieldMessage(void); void InitFieldMessageBox(void); -extern u8 gWalkAwayFromSignInhibitTimer; +extern u8 gWalkAwayFromSignpostTimer; #endif // GUARD_FIELD_MESSAGE_BOX_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 85bbb4cf2b..3c8e7a206e 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1177,9 +1177,9 @@ void CancelSignPostMessageBox(struct FieldInput *input) if (!ScriptContext_IsEnabled()) return; - if (gWalkAwayFromSignInhibitTimer) + if (gWalkAwayFromSignpostTimer) { - gWalkAwayFromSignInhibitTimer--; + gWalkAwayFromSignpostTimer--; return; } diff --git a/src/field_message_box.c b/src/field_message_box.c index 730c569416..9d07ce24dc 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -9,7 +9,7 @@ #include "script.h" static EWRAM_DATA u8 sFieldMessageBoxMode = 0; -EWRAM_DATA u8 gWalkAwayFromSignInhibitTimer = 0; +EWRAM_DATA u8 gWalkAwayFromSignpostTimer = 0; static void ExpandStringAndStartDrawFieldMessage(const u8 *, bool32); static void StartDrawFieldMessage(void); diff --git a/src/script.c b/src/script.c index 03ce886364..6188b5070c 100644 --- a/src/script.c +++ b/src/script.c @@ -505,10 +505,11 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize) #endif //FREE_MYSTERY_EVENT_BUFFERS } -// auto read signposts +#define WALK_AWAY_SIGNPOST_FRAMES 6 + void SetWalkingIntoSignVars(void) { - gWalkAwayFromSignInhibitTimer = 6; + gWalkAwayFromSignpostTimer = 6; sMsgBoxIsCancelable = TRUE; } From 61eff23d8965d228ebf62e36b9b100e151900812 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 15 Jul 2024 22:57:29 -0700 Subject: [PATCH 043/544] Moved menu defines to header file Added FRLG signpost border Started working on LoadSignPostWindowFrameGfx --- graphics/text_window/signpost.png | Bin 0 -> 219 bytes include/menu.h | 7 +++++++ src/menu.c | 6 ------ src/script.c | 2 +- src/text_window.c | 8 ++++---- 5 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 graphics/text_window/signpost.png diff --git a/graphics/text_window/signpost.png b/graphics/text_window/signpost.png new file mode 100644 index 0000000000000000000000000000000000000000..a37c7d17c4a73d12d8b5394dea0950293ea801fd GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^8bGYT!VDxQHLDu~DT4r?5ZB_fOaA}=pOlnz_3GJY z9321m7Awr*nDT9kVbIwnN5283&YryoM9;o~7+J;DcCYzn0QIJMx;TbtOiWHtVEpjk zol*Wk)BlSMAs={z8aV$sirMfB+kDUa{w~yEL-qIF<{SsF?=Ej-34edj+=Nw->Hq%# zwIA~%9P4tLBIdHNM9A=o9O>a=W7C<~ru9Q!twU9D0cV}UjAIuV7%py!nV|a3jvZ(t NgQu&X%Q~loCIEb?Sgim6 literal 0 HcmV?d00001 diff --git a/include/menu.h b/include/menu.h index fac4ef1b65..42bd69d45c 100644 --- a/include/menu.h +++ b/include/menu.h @@ -5,6 +5,13 @@ #include "text.h" #include "window.h" +#define DLG_WINDOW_PALETTE_NUM 15 +#define DLG_WINDOW_BASE_TILE_NUM 0x200 +#define STD_WINDOW_PALETTE_NUM 14 +#define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10) +#define STD_WINDOW_BASE_TILE_NUM 0x214 + + #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 diff --git a/src/menu.c b/src/menu.c index ff1970c3f1..1012a6b290 100644 --- a/src/menu.c +++ b/src/menu.c @@ -23,12 +23,6 @@ #include "config/overworld.h" #include "constants/songs.h" -#define DLG_WINDOW_PALETTE_NUM 15 -#define DLG_WINDOW_BASE_TILE_NUM 0x200 -#define STD_WINDOW_PALETTE_NUM 14 -#define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10) -#define STD_WINDOW_BASE_TILE_NUM 0x214 - struct MenuInfoIcon { u8 width; diff --git a/src/script.c b/src/script.c index 6188b5070c..98d679cd9f 100644 --- a/src/script.c +++ b/src/script.c @@ -509,7 +509,7 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize) void SetWalkingIntoSignVars(void) { - gWalkAwayFromSignpostTimer = 6; + gWalkAwayFromSignpostTimer = WALK_AWAY_SIGNPOST_FRAMES; sMsgBoxIsCancelable = TRUE; } diff --git a/src/text_window.c b/src/text_window.c index d1e604d343..3cc3f7d47b 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -82,6 +82,8 @@ static const struct TilesPal sWindowFrames[WINDOW_FRAMES_COUNT] = {sTextWindowFrame20_Gfx, sTextWindowFrame20_Pal} }; +const u16 gSignpostWindow_Gfx[] = INCBIN_U16("graphics/text_window/signpost.4bpp"); + // code const struct TilesPal *GetWindowFrameTilesPal(u8 id) { @@ -199,8 +201,6 @@ void LoadUserWindowBorderGfxOnBg(u8 bg, u16 destOffset, u8 palOffset) void LoadSignPostWindowFrameGfx(void) { - // TODO signpost msgbox frames - //LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gUnknown_8470B0C, 0x260, destOffset); - //LoadPalette(GetWindowFrameTilesPal(1), palIdx, 32); - LoadMessageBoxAndBorderGfx(); + LoadBgTiles(GetWindowAttribute(0, WINDOW_BG), gSignpostWindow_Gfx, 0x260, DLG_WINDOW_BASE_TILE_NUM); + LoadPalette(GetTextWindowPalette(1), BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM), PLTT_SIZE_4BPP); } From a0c5e5511c0aae9a5a8374c98c6fbf5b4d65d99f Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 24 Jul 2024 19:41:36 -0700 Subject: [PATCH 044/544] Added gSignPostWindow_Gfx Added LoadSignBoxGfx Add LoadSignPostWindowFrameGfx --- graphics/text_window/signpost.bin | Bin 0 -> 1200 bytes graphics/text_window/signpost.png | Bin 219 -> 164 bytes include/graphics.h | 3 ++- include/text_window.h | 1 + src/field_message_box.c | 2 +- src/graphics.c | 1 + src/menu.c | 6 ++++++ src/text_window.c | 13 ++++++------- 8 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 graphics/text_window/signpost.bin diff --git a/graphics/text_window/signpost.bin b/graphics/text_window/signpost.bin new file mode 100644 index 0000000000000000000000000000000000000000..6358e199db9cfc27b69dbb01b2c4b385350aee9b GIT binary patch literal 1200 zcmeH@u?+wq48xK%pbq{2Ubvx5NVR7#28KB>2VM^lLNt_VV_`R3zI@m+mC;beI-pJj AfdBvi literal 0 HcmV?d00001 diff --git a/graphics/text_window/signpost.png b/graphics/text_window/signpost.png index a37c7d17c4a73d12d8b5394dea0950293ea801fd..89e667df9265b6bd81c68962a043a68db42b2997 100644 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^7C_9w!VDziE-5wuDT4r?5ZC_<|AFA#xqI2g)j%#)z4*}Q$iB}UTi1x literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^8bGYT!VDxQHLDu~DT4r?5ZB_fOaA}=pOlnz_3GJY z9321m7Awr*nDT9kVbIwnN5283&YryoM9;o~7+J;DcCYzn0QIJMx;TbtOiWHtVEpjk zol*Wk)BlSMAs={z8aV$sirMfB+kDUa{w~yEL-qIF<{SsF?=Ej-34edj+=Nw->Hq%# zwIA~%9P4tLBIdHNM9A=o9O>a=W7C<~ru9Q!twU9D0cV}UjAIuV7%py!nV|a3jvZ(t NgQu&X%Q~loCIEb?Sgim6 diff --git a/include/graphics.h b/include/graphics.h index fc60c29ebf..2da00d9804 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2,8 +2,9 @@ #define GUARD_GRAPHICS_H // overworld -extern const u32 gMessageBox_Gfx[]; extern const u16 gMessageBox_Pal[]; +extern const u32 gMessageBox_Gfx[]; +extern const u32 gSignpostWindow_Gfx[]; // pokeballs extern const u32 gBallGfx_Poke[]; diff --git a/include/text_window.h b/include/text_window.h index 4e26c70a90..a292d1309e 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -14,6 +14,7 @@ extern const u16 gTextWindowFrame1_Pal[]; const struct TilesPal *GetWindowFrameTilesPal(u8 id); void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset); +void LoadSignBoxGfx(u8 windowId, u16 destOffset, u8 palOffset); void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset); void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset); void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset); diff --git a/src/field_message_box.c b/src/field_message_box.c index 9d07ce24dc..4f50699a6a 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -41,7 +41,7 @@ static void Task_DrawFieldMessage(u8 taskId) task->tState++; break; case 1: - DrawDialogueFrame(0, TRUE); + DrawDialogueFrame(0, TRUE); task->tState++; break; case 2: diff --git a/src/graphics.c b/src/graphics.c index 58c629fbc9..4efd17db09 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1984,6 +1984,7 @@ const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.b const u16 gMessageBox_Pal[] = INCBIN_U16("graphics/text_window/message_box.gbapal"); const u8 gMessageBox_Gfx[] = INCBIN_U8("graphics/text_window/message_box.4bpp"); +const u8 gSignpostWindow_Gfx[] = INCBIN_U8("graphics/text_window/signpost.4bpp"); const u32 gWallpaperIcon_Cross[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/cross.4bpp.lz"); const u32 gWallpaperIcon_Bolt[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/bolt.4bpp.lz"); diff --git a/src/menu.c b/src/menu.c index 1012a6b290..ecb8dd20d6 100644 --- a/src/menu.c +++ b/src/menu.c @@ -214,6 +214,12 @@ void LoadMessageBoxAndBorderGfx(void) LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM)); } +void LoadSignPostWindowFrameGfx(void) +{ + LoadSignBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM)); + //LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM)); +} + void DrawDialogueFrame(u8 windowId, bool8 copyToVram) { CallWindowFunction(windowId, WindowFunc_DrawDialogueFrame); diff --git a/src/text_window.c b/src/text_window.c index 3cc3f7d47b..6423867205 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -82,8 +82,6 @@ static const struct TilesPal sWindowFrames[WINDOW_FRAMES_COUNT] = {sTextWindowFrame20_Gfx, sTextWindowFrame20_Pal} }; -const u16 gSignpostWindow_Gfx[] = INCBIN_U16("graphics/text_window/signpost.4bpp"); - // code const struct TilesPal *GetWindowFrameTilesPal(u8 id) { @@ -99,6 +97,12 @@ void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset) LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, PLTT_SIZE_4BPP); } +void LoadSignBoxGfx(u8 windowId, u16 destOffset, u8 palOffset) +{ + LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gSignpostWindow_Gfx, 0x1C0, destOffset); + LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, PLTT_SIZE_4BPP); +} + void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset) { LoadUserWindowBorderGfx(windowId, destOffset, palOffset); @@ -199,8 +203,3 @@ void LoadUserWindowBorderGfxOnBg(u8 bg, u16 destOffset, u8 palOffset) LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, PLTT_SIZE_4BPP); } -void LoadSignPostWindowFrameGfx(void) -{ - LoadBgTiles(GetWindowAttribute(0, WINDOW_BG), gSignpostWindow_Gfx, 0x260, DLG_WINDOW_BASE_TILE_NUM); - LoadPalette(GetTextWindowPalette(1), BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM), PLTT_SIZE_4BPP); -} From 389f4e4180a1960c19cca9679a48bf34b42e3942 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 24 Jul 2024 20:58:18 -0700 Subject: [PATCH 045/544] Worked with ShinyDragonHunter to get signpost working --- graphics/text_window/signpost.png | Bin 164 -> 193 bytes src/menu.c | 126 +++++++++++++++++++++++++++++- src/text_window.c | 2 +- 3 files changed, 125 insertions(+), 3 deletions(-) diff --git a/graphics/text_window/signpost.png b/graphics/text_window/signpost.png index 89e667df9265b6bd81c68962a043a68db42b2997..45ab7c6764b4561cf091f05101e60c4c242c35db 100644 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^8bHj!!VDxUYZhbxDT4r?5ZB_fOaA}=pOlnz_3GJY z9321m7Awr*nDT9kVbIwnN5283&YryoM9;o~7+J;DcCYzn0QGVfctjR6Fz_7#VaBQ2 ze9}Ncb59q?5RRG22@OpD{_ig5W@2PEauEH)&uHK%AiaWV^@I0!6&QqBHXck%6urao iU* literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^7C_9w!VDziE-5wuDT4r?5ZC_<|AFA#xqI2g)j%#)z4*}Q$iB}UTi1x diff --git a/src/menu.c b/src/menu.c index ecb8dd20d6..6cb9c05492 100644 --- a/src/menu.c +++ b/src/menu.c @@ -17,6 +17,7 @@ #include "sound.h" #include "string_util.h" #include "strings.h" +#include "script.h" #include "task.h" #include "text_window.h" #include "window.h" @@ -48,6 +49,7 @@ struct Menu static u16 AddWindowParameterized(u8, u8, u8, u8, u8, u8, u16); static void WindowFunc_DrawStandardFrame(u8, u8, u8, u8, u8, u8); +static void WindowFunc_DrawSignFrame(u8, u8, u8, u8, u8, u8); static void WindowFunc_DrawDialogueFrame(u8, u8, u8, u8, u8, u8); static void WindowFunc_ClearStdWindowAndFrame(u8, u8, u8, u8, u8, u8); static void WindowFunc_ClearDialogWindowAndFrame(u8, u8, u8, u8, u8, u8); @@ -216,13 +218,133 @@ void LoadMessageBoxAndBorderGfx(void) void LoadSignPostWindowFrameGfx(void) { + Menu_LoadStdPal(); LoadSignBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM)); - //LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM)); + LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM)); +} + +static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +{ + // Top left + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 0, + tilemapLeft - 2, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 1, + tilemapLeft - 1, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 2, + tilemapLeft - 2, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 3, + tilemapLeft - 1, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + + // Bottom left + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), + tilemapLeft - 2, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1), + tilemapLeft - 1, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + + // Top + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 4, + tilemapLeft, + tilemapTop - 1, + 26, + 1, + DLG_WINDOW_PALETTE_NUM); + + // Top right + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), + tilemapLeft + 27, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1), + tilemapLeft + 26, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 2), + tilemapLeft + 27, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 3), + tilemapLeft + 26, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + + // Bottom right + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0)), + tilemapLeft + 27, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1)), + tilemapLeft + 26, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + + // Bottom + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 4), + tilemapLeft, + tilemapTop + 4, + 26, + 1, + DLG_WINDOW_PALETTE_NUM); +} + +static inline void *GetWindowFunc_DialogueFrame(void) +{ + return (IsMsgSignPost() ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); + } void DrawDialogueFrame(u8 windowId, bool8 copyToVram) { - CallWindowFunction(windowId, WindowFunc_DrawDialogueFrame); + CallWindowFunction(windowId, GetWindowFunc_DialogueFrame()); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) diff --git a/src/text_window.c b/src/text_window.c index 6423867205..6c02797fe3 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -100,7 +100,7 @@ void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset) void LoadSignBoxGfx(u8 windowId, u16 destOffset, u8 palOffset) { LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gSignpostWindow_Gfx, 0x1C0, destOffset); - LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, PLTT_SIZE_4BPP); + LoadPalette(GetTextWindowPalette(1), palOffset, PLTT_SIZE_4BPP); } void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset) From 614b7f862e1a9b4fd7bef09c9ecc412e2438265d Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 24 Jul 2024 22:21:00 -0700 Subject: [PATCH 046/544] Working version of interactable signpost msgbox --- src/field_control_avatar.c | 16 ++++++++++++++-- src/menu.c | 12 +----------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 3c8e7a206e..df77f798ce 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -82,6 +82,7 @@ static void UpdateLetsGoEvolutionTracker(void); static bool8 UpdatePoisonStepCounter(void); #endif // OW_POISON_DAMAGE static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +static void SetMsgSignPostAndVarFacing(u32 playerDirection); static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection); static u8 GetFacingSignpostType(u16 metatileBehvaior, u8 direction); static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition * position); @@ -379,6 +380,9 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position if (bgEvent->bgUnion.script == NULL) return EventScript_TestSignpostMsg; + if (GetFacingSignpostType(metatileBehavior, direction) != SIGNPOST_NA) + SetMsgSignPostAndVarFacing(direction); + switch (bgEvent->kind) { case BG_EVENT_PLAYER_FACING_ANY: @@ -1133,18 +1137,26 @@ static u8 GetFacingSignpostType(u16 metatileBehavior, u8 playerDirection) if (MetatileBehavior_IsPlayerFacingPokeMartSign(metatileBehavior, playerDirection) == TRUE) return SIGNPOST_POKEMART;*/ + DebugPrintf("behavior is %d",metatileBehavior); + if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE) return SIGNPOST_SCRIPTED; return SIGNPOST_NA; } +static void SetMsgSignPostAndVarFacing(u32 playerDirection) +{ + DebugPrintf("test"); + MsgSetSignPost(); + gSpecialVar_Facing = playerDirection; +} + static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection) { - gSpecialVar_Facing = playerDirection; ScriptContext_SetupScript(script); SetWalkingIntoSignVars(); - MsgSetSignPost(); + SetMsgSignPostAndVarFacing(playerDirection); } static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition *position) diff --git a/src/menu.c b/src/menu.c index 6cb9c05492..620c4d13e1 100644 --- a/src/menu.c +++ b/src/menu.c @@ -225,7 +225,6 @@ void LoadSignPostWindowFrameGfx(void) static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { - // Top left FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 0, tilemapLeft - 2, @@ -254,8 +253,6 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi 1, 4, DLG_WINDOW_PALETTE_NUM); - - // Bottom left FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), tilemapLeft - 2, @@ -270,8 +267,6 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi 1, 1, DLG_WINDOW_PALETTE_NUM); - - // Top FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 4, tilemapLeft, @@ -279,8 +274,6 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi 26, 1, DLG_WINDOW_PALETTE_NUM); - - // Top right FillBgTilemapBufferRect(bg, BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), tilemapLeft + 27, @@ -309,8 +302,6 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi 1, 4, DLG_WINDOW_PALETTE_NUM); - - // Bottom right FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0)), tilemapLeft + 27, @@ -325,8 +316,6 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi 1, 1, DLG_WINDOW_PALETTE_NUM); - - // Bottom FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 4), tilemapLeft, @@ -338,6 +327,7 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi static inline void *GetWindowFunc_DialogueFrame(void) { + DebugPrintf("test %d",IsMsgSignPost()); return (IsMsgSignPost() ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); } From fd69ef339c5ea1578e52f22cc51ff338cb77abb1 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 25 Jul 2024 19:33:07 -0700 Subject: [PATCH 047/544] Got pokemart and pokecenter changes working --- include/constants/metatile_behaviors.h | 4 +++- include/event_scripts.h | 3 +++ include/metatile_behavior.h | 2 ++ src/field_control_avatar.c | 18 +++++++----------- src/menu.c | 1 - src/metatile_behavior.c | 18 ++++++++++++++++++ 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 56df442bb8..808fa49df7 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -32,11 +32,13 @@ #define MB_SHOAL_CAVE_ENTRANCE 0x1C #if OW_AUTO_SIGNPOST == TRUE #define MB_SIGNPOST 0x1D +#define MB_SIGNPOST_POKECENTER 0x1E +#define MB_SIGNPOST_POKEMART 0x1F #else #define MB_UNUSED_1D 0x1D -#endif #define MB_UNUSED_1E 0x1E #define MB_UNUSED_1F 0x1F +#endif #define MB_ICE 0x20 #define MB_SAND 0x21 #define MB_SEAWEED 0x22 diff --git a/include/event_scripts.h b/include/event_scripts.h index f66e52866d..f23f52cb12 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -648,4 +648,7 @@ extern const u8 VSSeeker_Text_TrainersNotReady[]; extern const u8 EventScript_VsSeekerChargingDone[]; extern const u8 EventScript_CancelMessageBox[]; +extern const u8 Common_EventScript_ShowPokemonCenterSign[]; +extern const u8 Common_EventScript_ShowPokemartSign[]; + #endif // GUARD_EVENT_SCRIPTS_H diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 74f0beca74..0c4622adaf 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -149,5 +149,7 @@ bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); bool8 MetatileBehavior_IsSignpost(u8 mb); +bool8 MetatileBehavior_IsPokemonCenterSign(u8 mb); +bool8 MetatileBehavior_IsPokeMartSign(u8 mb); #endif // GUARD_METATILE_BEHAVIOR_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index df77f798ce..880eb8d59e 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1112,13 +1112,12 @@ static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u16 me switch (GetFacingSignpostType(metatileBehavior, playerDirection)) { - /* leaving this commented out for examples of custom signpost types case SIGNPOST_POKECENTER: - SetUpWalkIntoSignScript(EventScript_PokecenterSign, playerDirection); + SetUpWalkIntoSignScript(Common_EventScript_ShowPokemonCenterSign, playerDirection); return TRUE; case SIGNPOST_POKEMART: - SetUpWalkIntoSignScript(EventScript_PokemartSign, playerDirection); - return TRUE;*/ + SetUpWalkIntoSignScript(Common_EventScript_ShowPokemartSign, playerDirection); + return TRUE; case SIGNPOST_SCRIPTED: script = GetSignpostScriptAtMapPosition(position); if (script == NULL) @@ -1132,12 +1131,10 @@ static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u16 me static u8 GetFacingSignpostType(u16 metatileBehavior, u8 playerDirection) { - /*if (MetatileBehavior_IsPlayerFacingPokemonCenterSign(metatileBehavior, playerDirection) == TRUE) + if (MetatileBehavior_IsPokemonCenterSign(metatileBehavior) == TRUE) return SIGNPOST_POKECENTER; - if (MetatileBehavior_IsPlayerFacingPokeMartSign(metatileBehavior, playerDirection) == TRUE) - return SIGNPOST_POKEMART;*/ - - DebugPrintf("behavior is %d",metatileBehavior); + if (MetatileBehavior_IsPokeMartSign(metatileBehavior) == TRUE) + return SIGNPOST_POKEMART; if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE) return SIGNPOST_SCRIPTED; @@ -1147,7 +1144,7 @@ static u8 GetFacingSignpostType(u16 metatileBehavior, u8 playerDirection) static void SetMsgSignPostAndVarFacing(u32 playerDirection) { - DebugPrintf("test"); + SetWalkingIntoSignVars(); MsgSetSignPost(); gSpecialVar_Facing = playerDirection; } @@ -1155,7 +1152,6 @@ static void SetMsgSignPostAndVarFacing(u32 playerDirection) static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection) { ScriptContext_SetupScript(script); - SetWalkingIntoSignVars(); SetMsgSignPostAndVarFacing(playerDirection); } diff --git a/src/menu.c b/src/menu.c index 620c4d13e1..2679e0a336 100644 --- a/src/menu.c +++ b/src/menu.c @@ -327,7 +327,6 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi static inline void *GetWindowFunc_DialogueFrame(void) { - DebugPrintf("test %d",IsMsgSignPost()); return (IsMsgSignPost() ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index e5c72b127c..601e2660af 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1413,3 +1413,21 @@ bool8 MetatileBehavior_IsSignpost(u8 mb) #endif } +bool8 MetatileBehavior_IsPokemonCenterSign(u8 mb) +{ +#if OW_AUTO_SIGNPOST == TRUE + return (mb == MB_SIGNPOST_POKECENTER); +#else + return FALSE; +#endif +} + +bool8 MetatileBehavior_IsPokeMartSign(u8 mb) +{ +#if OW_AUTO_SIGNPOST == TRUE + return (mb == MB_SIGNPOST_POKEMART); +#else + return FALSE; +#endif +} + From b5c58e53de13ccf5d1142638f0320d9bec88153a Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 25 Jul 2024 19:35:28 -0700 Subject: [PATCH 048/544] Removed all comments --- include/script.h | 1 - src/field_control_avatar.c | 2 -- 2 files changed, 3 deletions(-) diff --git a/include/script.h b/include/script.h index eba18ec35f..48d1f6c0ec 100644 --- a/include/script.h +++ b/include/script.h @@ -63,7 +63,6 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize); // srccmd.h void SetMovingNpcId(u16 npcId); -// auto read signs void SetWalkingIntoSignVars(void); void MsgSetSignPost(void); void ResetFacingNpcOrSignPostVars(void); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 880eb8d59e..049305db86 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1099,8 +1099,6 @@ int SetCableClubWarp(void) return 0; } -// auto read signposts -// signposts static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u16 metatileBehavior, u8 playerDirection) { const u8 *script; From c6f89d199667cf9cf1ac877964fa81395ac5649b Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 25 Jul 2024 19:36:33 -0700 Subject: [PATCH 049/544] Removed swap file --- .swp | Bin 4096 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .swp diff --git a/.swp b/.swp deleted file mode 100644 index 5e1b894bdd178ae6540706061764e60b34548a85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmYc?2=nw+u+%eP00IFJ0Rc=L3=9RuX)rEc+Ql{4JH$Ug*U};^%+=Hkui8<`(GVC7 zfq@DE&QN0`LvU7CR#H?D7786Ghm6`g8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFaRL{ E06$R)(EtDd From 2a5f384e6688acaac4ea3d0db464eface40f86da Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 25 Jul 2024 19:44:26 -0700 Subject: [PATCH 050/544] Added metatile behaviors to mart and center signs --- .../primary/general/metatile_attributes.bin | Bin 1024 -> 1024 bytes include/constants/metatile_behaviors.h | 4 ++-- src/metatile_behavior.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/tilesets/primary/general/metatile_attributes.bin b/data/tilesets/primary/general/metatile_attributes.bin index af9326451d561c4103afe500c5ae8c7656092fc6..95b03cbdffe43d189b8b49eadb9fb2e9b8c1db62 100644 GIT binary patch delta 21 ccmZqRXyBO8!YnT!Ke64GSx!K1<8e!706 Date: Thu, 25 Jul 2024 20:23:04 -0700 Subject: [PATCH 051/544] Revert metatile behavior --- .../primary/general/metatile_attributes.bin | Bin 1024 -> 1024 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/tilesets/primary/general/metatile_attributes.bin b/data/tilesets/primary/general/metatile_attributes.bin index 95b03cbdffe43d189b8b49eadb9fb2e9b8c1db62..d9cd29016d792fb568494dbf2f820100081a14f8 100644 GIT binary patch delta 35 jcmZqRXy9OHfPjhY`iu+{&3%~}1Q;f^+k&W#$1RxwUG4@X delta 35 ncmZqRXy9OH00Y^H?D~wd6U}{@ Date: Thu, 25 Jul 2024 20:34:14 -0700 Subject: [PATCH 052/544] Clean up files --- include/config/overworld.h | 2 +- include/event_scripts.h | 1 - include/graphics.h | 4 ++-- include/menu.h | 1 - include/metatile_behavior.h | 6 +++--- src/field_control_avatar.c | 20 ++++++++------------ src/metatile_behavior.c | 6 +++--- 7 files changed, 17 insertions(+), 23 deletions(-) diff --git a/include/config/overworld.h b/include/config/overworld.h index aeaf88be58..292743a211 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -3,7 +3,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. -#define OW_AUTO_SIGNPOST TRUE // When enabled, if the tile that the player is facing has MB_SIGNPOST, the player will automatically read the signpost. +#define OW_AUTO_SIGNPOST TRUE // When enabled, if the tile that the player is facing has MB_SIGNPOST, MB_POKEMART_SIGN, or MB_POKEMON_CENTER_SIGN, the player will automatically read the signpost. // 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. diff --git a/include/event_scripts.h b/include/event_scripts.h index f23f52cb12..7ec15d4548 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -647,7 +647,6 @@ extern const u8 VSSeeker_Text_NoTrainersWithinRange[]; extern const u8 VSSeeker_Text_TrainersNotReady[]; extern const u8 EventScript_VsSeekerChargingDone[]; extern const u8 EventScript_CancelMessageBox[]; - extern const u8 Common_EventScript_ShowPokemonCenterSign[]; extern const u8 Common_EventScript_ShowPokemartSign[]; diff --git a/include/graphics.h b/include/graphics.h index 2da00d9804..e58ee7bf50 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2,9 +2,9 @@ #define GUARD_GRAPHICS_H // overworld -extern const u16 gMessageBox_Pal[]; -extern const u32 gMessageBox_Gfx[]; extern const u32 gSignpostWindow_Gfx[]; +extern const u32 gMessageBox_Gfx[]; +extern const u16 gMessageBox_Pal[]; // pokeballs extern const u32 gBallGfx_Poke[]; diff --git a/include/menu.h b/include/menu.h index 42bd69d45c..d2190fb854 100644 --- a/include/menu.h +++ b/include/menu.h @@ -11,7 +11,6 @@ #define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10) #define STD_WINDOW_BASE_TILE_NUM 0x214 - #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 0c4622adaf..d49dc2459a 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -148,8 +148,8 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); -bool8 MetatileBehavior_IsSignpost(u8 mb); -bool8 MetatileBehavior_IsPokemonCenterSign(u8 mb); -bool8 MetatileBehavior_IsPokeMartSign(u8 mb); +bool32 MetatileBehavior_IsSignpost(u32 mb); +bool32 MetatileBehavior_IsPokemonCenterSign(u32 mb); +bool32 MetatileBehavior_IsPokeMartSign(u32 mb); #endif // GUARD_METATILE_BEHAVIOR_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 049305db86..7972be7a11 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -35,6 +35,7 @@ #include "constants/event_objects.h" #include "constants/field_poison.h" #include "constants/map_types.h" +#include "constants/metatile_behaviors.h" #include "constants/songs.h" #include "constants/trainer_hill.h" @@ -43,12 +44,7 @@ static EWRAM_DATA u16 sPrevMetatileBehavior = 0; u8 gSelectedObjectEvent; -#define SIGNPOST_POKECENTER 0 -#define SIGNPOST_POKEMART 1 -#define SIGNPOST_INDIGO_1 2 -#define SIGNPOST_INDIGO_2 3 -#define SIGNPOST_SCRIPTED 240 -#define SIGNPOST_NA 255 +#define SIGNPOST_NA 0 static void GetPlayerPosition(struct MapPosition *); static void GetInFrontOfPlayerPosition(struct MapPosition *); @@ -1110,13 +1106,13 @@ static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u16 me switch (GetFacingSignpostType(metatileBehavior, playerDirection)) { - case SIGNPOST_POKECENTER: + case MB_POKEMON_CENTER_SIGN: SetUpWalkIntoSignScript(Common_EventScript_ShowPokemonCenterSign, playerDirection); return TRUE; - case SIGNPOST_POKEMART: + case MB_POKEMART_SIGN: SetUpWalkIntoSignScript(Common_EventScript_ShowPokemartSign, playerDirection); return TRUE; - case SIGNPOST_SCRIPTED: + case MB_SIGNPOST: script = GetSignpostScriptAtMapPosition(position); if (script == NULL) return FALSE; @@ -1130,12 +1126,12 @@ static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u16 me static u8 GetFacingSignpostType(u16 metatileBehavior, u8 playerDirection) { if (MetatileBehavior_IsPokemonCenterSign(metatileBehavior) == TRUE) - return SIGNPOST_POKECENTER; + return MB_POKEMON_CENTER_SIGN; if (MetatileBehavior_IsPokeMartSign(metatileBehavior) == TRUE) - return SIGNPOST_POKEMART; + return MB_POKEMART_SIGN; if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE) - return SIGNPOST_SCRIPTED; + return MB_SIGNPOST; return SIGNPOST_NA; } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 88bca9f0de..fcf8b64fd1 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1404,7 +1404,7 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsSignpost(u8 mb) +bool32 MetatileBehavior_IsSignpost(u32 mb) { #if OW_AUTO_SIGNPOST == TRUE return (mb == MB_SIGNPOST); @@ -1413,7 +1413,7 @@ bool8 MetatileBehavior_IsSignpost(u8 mb) #endif } -bool8 MetatileBehavior_IsPokemonCenterSign(u8 mb) +bool32 MetatileBehavior_IsPokemonCenterSign(u32 mb) { #if OW_AUTO_SIGNPOST == TRUE return (mb == MB_POKEMON_CENTER_SIGN); @@ -1422,7 +1422,7 @@ bool8 MetatileBehavior_IsPokemonCenterSign(u8 mb) #endif } -bool8 MetatileBehavior_IsPokeMartSign(u8 mb) +bool32 MetatileBehavior_IsPokeMartSign(u32 mb) { #if OW_AUTO_SIGNPOST == TRUE return (mb == MB_POKEMART_SIGN); From 02cdbb3c7daeee4e1843adf2b39abf790a97e9ab Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 25 Jul 2024 21:07:11 -0700 Subject: [PATCH 053/544] Cleaned up field_control_avatar --- log2.txt | 0 src/field_control_avatar.c | 54 +++++++++++++++++++------------------- 2 files changed, 27 insertions(+), 27 deletions(-) delete mode 100644 log2.txt diff --git a/log2.txt b/log2.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 7972be7a11..85e9f2cfb4 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -44,7 +44,7 @@ static EWRAM_DATA u16 sPrevMetatileBehavior = 0; u8 gSelectedObjectEvent; -#define SIGNPOST_NA 0 +#define NOT_SIGNPOST 0 static void GetPlayerPosition(struct MapPosition *); static void GetInFrontOfPlayerPosition(struct MapPosition *); @@ -77,10 +77,10 @@ static void UpdateLetsGoEvolutionTracker(void); #if OW_POISON_DAMAGE < GEN_5 static bool8 UpdatePoisonStepCounter(void); #endif // OW_POISON_DAMAGE -static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +static bool32 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u32 metatileBehavior, u32 playerDirection); static void SetMsgSignPostAndVarFacing(u32 playerDirection); -static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection); -static u8 GetFacingSignpostType(u16 metatileBehvaior, u8 direction); +static void SetUpWalkIntoSignScript(const u8 *script, u32 playerDirection); +static u32 GetFacingSignpostType(u16 metatileBehvaior, u32 direction); static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition * position); void FieldClearPlayerInput(struct FieldInput *input) @@ -183,18 +183,18 @@ int ProcessPlayerFieldInput(struct FieldInput *input) return TRUE; } - if (input->checkStandardWildEncounter) - { - if (input->dpadDirection == 0 || input->dpadDirection == playerDirection) - { - GetInFrontOfPlayerPosition(&position); - metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) - return TRUE; - GetPlayerPosition(&position); - metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - } - } + if (input->checkStandardWildEncounter) + { + if (input->dpadDirection == 0 || input->dpadDirection == playerDirection) + { + GetInFrontOfPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) + return TRUE; + GetPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + } + } if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE) return TRUE; @@ -376,7 +376,7 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position if (bgEvent->bgUnion.script == NULL) return EventScript_TestSignpostMsg; - if (GetFacingSignpostType(metatileBehavior, direction) != SIGNPOST_NA) + if (GetFacingSignpostType(metatileBehavior, direction) != NOT_SIGNPOST) SetMsgSignPostAndVarFacing(direction); switch (bgEvent->kind) @@ -1095,7 +1095,7 @@ int SetCableClubWarp(void) return 0; } -static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u16 metatileBehavior, u8 playerDirection) +static bool32 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u32 metatileBehavior, u32 playerDirection) { const u8 *script; @@ -1123,7 +1123,7 @@ static bool8 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u16 me } } -static u8 GetFacingSignpostType(u16 metatileBehavior, u8 playerDirection) +static u32 GetFacingSignpostType(u16 metatileBehavior, u32 playerDirection) { if (MetatileBehavior_IsPokemonCenterSign(metatileBehavior) == TRUE) return MB_POKEMON_CENTER_SIGN; @@ -1133,7 +1133,7 @@ static u8 GetFacingSignpostType(u16 metatileBehavior, u8 playerDirection) if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE) return MB_SIGNPOST; - return SIGNPOST_NA; + return NOT_SIGNPOST; } static void SetMsgSignPostAndVarFacing(u32 playerDirection) @@ -1143,7 +1143,7 @@ static void SetMsgSignPostAndVarFacing(u32 playerDirection) gSpecialVar_Facing = playerDirection; } -static void SetUpWalkIntoSignScript(const u8 *script, u8 playerDirection) +static void SetUpWalkIntoSignScript(const u8 *script, u32 playerDirection) { ScriptContext_SetupScript(script); SetMsgSignPostAndVarFacing(playerDirection); @@ -1161,12 +1161,12 @@ static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition *position) static void Task_OpenStartMenu(u8 taskId) { - if (!ArePlayerFieldControlsLocked()) - { - PlaySE(SE_WIN_OPEN); - ShowStartMenu(); - DestroyTask(taskId); - } + if (ArePlayerFieldControlsLocked()) + return; + + PlaySE(SE_WIN_OPEN); + ShowStartMenu(); + DestroyTask(taskId); } bool32 IsDpadPushedToTurnOrMovePlayer(struct FieldInput *input) From f362f6e754c52ebd6e9c8f6e15ae376f3bd9884a Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 25 Jul 2024 21:22:08 -0700 Subject: [PATCH 054/544] Cleaned up metatile behavior --- src/menu.c | 2 +- src/metatile_behavior.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/menu.c b/src/menu.c index 2679e0a336..c58f72f3e5 100644 --- a/src/menu.c +++ b/src/menu.c @@ -50,6 +50,7 @@ struct Menu static u16 AddWindowParameterized(u8, u8, u8, u8, u8, u8, u16); static void WindowFunc_DrawStandardFrame(u8, u8, u8, u8, u8, u8); static void WindowFunc_DrawSignFrame(u8, u8, u8, u8, u8, u8); +static inline void *GetWindowFunc_DialogueFrame(void); static void WindowFunc_DrawDialogueFrame(u8, u8, u8, u8, u8, u8); static void WindowFunc_ClearStdWindowAndFrame(u8, u8, u8, u8, u8, u8); static void WindowFunc_ClearDialogWindowAndFrame(u8, u8, u8, u8, u8, u8); @@ -328,7 +329,6 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi static inline void *GetWindowFunc_DialogueFrame(void) { return (IsMsgSignPost() ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); - } void DrawDialogueFrame(u8 windowId, bool8 copyToVram) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index fcf8b64fd1..1212457d24 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -127,6 +127,8 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [MB_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, #if OW_AUTO_SIGNPOST == TRUE [MB_SIGNPOST] = TILE_FLAG_UNUSED, + [MB_POKEMON_CENTER_SIGN] = TILE_FLAG_UNUSED, + [MB_POKEMART_SIGN] = TILE_FLAG_UNUSED, #endif }; From 59c2eeac215a8748933815d2248c064428def099 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Fri, 26 Jul 2024 21:22:29 -0700 Subject: [PATCH 055/544] Default signpost config is off --- include/config/overworld.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/overworld.h b/include/config/overworld.h index 292743a211..c740bf4853 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -3,7 +3,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. -#define OW_AUTO_SIGNPOST TRUE // When enabled, if the tile that the player is facing has MB_SIGNPOST, MB_POKEMART_SIGN, or MB_POKEMON_CENTER_SIGN, the player will automatically read the signpost. +#define OW_AUTO_SIGNPOST FALSE // When enabled, if the tile that the player is facing has MB_SIGNPOST, MB_POKEMART_SIGN, or MB_POKEMON_CENTER_SIGN, the player will automatically read the signpost. // 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. From 587ffeeb97a53b8ae1123d46690e45af503c37b9 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Fri, 26 Jul 2024 21:31:04 -0700 Subject: [PATCH 056/544] Fixed tabs --- src/field_control_avatar.c | 86 ++++++++-------- src/field_message_box.c | 2 +- src/menu.c | 200 ++++++++++++++++++------------------- src/metatile_behavior.c | 6 +- 4 files changed, 147 insertions(+), 147 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 85e9f2cfb4..92e9df1c54 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -183,18 +183,18 @@ int ProcessPlayerFieldInput(struct FieldInput *input) return TRUE; } - if (input->checkStandardWildEncounter) - { - if (input->dpadDirection == 0 || input->dpadDirection == playerDirection) - { - GetInFrontOfPlayerPosition(&position); - metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) - return TRUE; - GetPlayerPosition(&position); - metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - } - } + if (input->checkStandardWildEncounter) + { + if (input->dpadDirection == 0 || input->dpadDirection == playerDirection) + { + GetInFrontOfPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) + return TRUE; + GetPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + } + } if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE) return TRUE; @@ -376,8 +376,8 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position if (bgEvent->bgUnion.script == NULL) return EventScript_TestSignpostMsg; - if (GetFacingSignpostType(metatileBehavior, direction) != NOT_SIGNPOST) - SetMsgSignPostAndVarFacing(direction); + if (GetFacingSignpostType(metatileBehavior, direction) != NOT_SIGNPOST) + SetMsgSignPostAndVarFacing(direction); switch (bgEvent->kind) { @@ -1146,7 +1146,7 @@ static void SetMsgSignPostAndVarFacing(u32 playerDirection) static void SetUpWalkIntoSignScript(const u8 *script, u32 playerDirection) { ScriptContext_SetupScript(script); - SetMsgSignPostAndVarFacing(playerDirection); + SetMsgSignPostAndVarFacing(playerDirection); } static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition *position) @@ -1161,48 +1161,48 @@ static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition *position) static void Task_OpenStartMenu(u8 taskId) { - if (ArePlayerFieldControlsLocked()) - return; + if (ArePlayerFieldControlsLocked()) + return; - PlaySE(SE_WIN_OPEN); - ShowStartMenu(); - DestroyTask(taskId); + PlaySE(SE_WIN_OPEN); + ShowStartMenu(); + DestroyTask(taskId); } bool32 IsDpadPushedToTurnOrMovePlayer(struct FieldInput *input) { - return (input->dpadDirection != 0 && GetPlayerFacingDirection() != input->dpadDirection); + return (input->dpadDirection != 0 && GetPlayerFacingDirection() != input->dpadDirection); } void CancelSignPostMessageBox(struct FieldInput *input) { - if (!ScriptContext_IsEnabled()) - return; + if (!ScriptContext_IsEnabled()) + return; - if (gWalkAwayFromSignpostTimer) - { - gWalkAwayFromSignpostTimer--; - return; - } + if (gWalkAwayFromSignpostTimer) + { + gWalkAwayFromSignpostTimer--; + return; + } - if (!CanWalkAwayToCancelMsgBox()) - return; + if (!CanWalkAwayToCancelMsgBox()) + return; - if (IsDpadPushedToTurnOrMovePlayer(input)) - { - ScriptContext_SetupScript(EventScript_CancelMessageBox); - LockPlayerFieldControls(); - return; - } + if (IsDpadPushedToTurnOrMovePlayer(input)) + { + ScriptContext_SetupScript(EventScript_CancelMessageBox); + LockPlayerFieldControls(); + return; + } - if (!input->pressedStartButton) - return; + if (!input->pressedStartButton) + return; - ScriptContext_SetupScript(EventScript_CancelMessageBox); - LockPlayerFieldControls(); + ScriptContext_SetupScript(EventScript_CancelMessageBox); + LockPlayerFieldControls(); - if (FuncIsActiveTask(Task_OpenStartMenu)) - return; + if (FuncIsActiveTask(Task_OpenStartMenu)) + return; - CreateTask(Task_OpenStartMenu, 8); + CreateTask(Task_OpenStartMenu, 8); } diff --git a/src/field_message_box.c b/src/field_message_box.c index 4f50699a6a..9d07ce24dc 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -41,7 +41,7 @@ static void Task_DrawFieldMessage(u8 taskId) task->tState++; break; case 1: - DrawDialogueFrame(0, TRUE); + DrawDialogueFrame(0, TRUE); task->tState++; break; case 2: diff --git a/src/menu.c b/src/menu.c index c58f72f3e5..441c80250e 100644 --- a/src/menu.c +++ b/src/menu.c @@ -219,116 +219,116 @@ void LoadMessageBoxAndBorderGfx(void) void LoadSignPostWindowFrameGfx(void) { - Menu_LoadStdPal(); + Menu_LoadStdPal(); LoadSignBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM)); LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM)); } static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { - FillBgTilemapBufferRect(bg, - DLG_WINDOW_BASE_TILE_NUM + 0, - tilemapLeft - 2, - tilemapTop - 1, - 1, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - DLG_WINDOW_BASE_TILE_NUM + 1, - tilemapLeft - 1, - tilemapTop - 1, - 1, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - DLG_WINDOW_BASE_TILE_NUM + 2, - tilemapLeft - 2, - tilemapTop, - 1, - 4, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - DLG_WINDOW_BASE_TILE_NUM + 3, - tilemapLeft - 1, - tilemapTop, - 1, - 4, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), - tilemapLeft - 2, - tilemapTop + 4, - 1, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1), - tilemapLeft - 1, - tilemapTop + 4, - 1, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - DLG_WINDOW_BASE_TILE_NUM + 4, - tilemapLeft, - tilemapTop - 1, - 26, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), - tilemapLeft + 27, - tilemapTop - 1, - 1, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1), - tilemapLeft + 26, - tilemapTop - 1, - 1, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 2), - tilemapLeft + 27, - tilemapTop, - 1, - 4, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 3), - tilemapLeft + 26, - tilemapTop, - 1, - 4, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0)), - tilemapLeft + 27, - tilemapTop + 4, - 1, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1)), - tilemapLeft + 26, - tilemapTop + 4, - 1, - 1, - DLG_WINDOW_PALETTE_NUM); - FillBgTilemapBufferRect(bg, - BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 4), - tilemapLeft, - tilemapTop + 4, - 26, - 1, - DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 0, + tilemapLeft - 2, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 1, + tilemapLeft - 1, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 2, + tilemapLeft - 2, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 3, + tilemapLeft - 1, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), + tilemapLeft - 2, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1), + tilemapLeft - 1, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 4, + tilemapLeft, + tilemapTop - 1, + 26, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), + tilemapLeft + 27, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1), + tilemapLeft + 26, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 2), + tilemapLeft + 27, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 3), + tilemapLeft + 26, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0)), + tilemapLeft + 27, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1)), + tilemapLeft + 26, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 4), + tilemapLeft, + tilemapTop + 4, + 26, + 1, + DLG_WINDOW_PALETTE_NUM); } static inline void *GetWindowFunc_DialogueFrame(void) { - return (IsMsgSignPost() ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); + return (IsMsgSignPost() ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); } void DrawDialogueFrame(u8 windowId, bool8 copyToVram) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 1212457d24..fc7e3a9326 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1411,7 +1411,7 @@ bool32 MetatileBehavior_IsSignpost(u32 mb) #if OW_AUTO_SIGNPOST == TRUE return (mb == MB_SIGNPOST); #else - return FALSE; + return FALSE; #endif } @@ -1420,7 +1420,7 @@ bool32 MetatileBehavior_IsPokemonCenterSign(u32 mb) #if OW_AUTO_SIGNPOST == TRUE return (mb == MB_POKEMON_CENTER_SIGN); #else - return FALSE; + return FALSE; #endif } @@ -1429,7 +1429,7 @@ bool32 MetatileBehavior_IsPokeMartSign(u32 mb) #if OW_AUTO_SIGNPOST == TRUE return (mb == MB_POKEMART_SIGN); #else - return FALSE; + return FALSE; #endif } From 31fc49734a1770d4c27f10efebb58069a15fb23b Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 07:34:33 -0700 Subject: [PATCH 057/544] Removed preproc from src/metatile_behavior.c per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#discussion_r1693914236 --- src/metatile_behavior.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index fc7e3a9326..d16194ec2b 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1408,28 +1408,17 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) bool32 MetatileBehavior_IsSignpost(u32 mb) { -#if OW_AUTO_SIGNPOST == TRUE return (mb == MB_SIGNPOST); -#else - return FALSE; -#endif } bool32 MetatileBehavior_IsPokemonCenterSign(u32 mb) { -#if OW_AUTO_SIGNPOST == TRUE return (mb == MB_POKEMON_CENTER_SIGN); -#else - return FALSE; -#endif } bool32 MetatileBehavior_IsPokeMartSign(u32 mb) { -#if OW_AUTO_SIGNPOST == TRUE return (mb == MB_POKEMART_SIGN); -#else - return FALSE; #endif } From 1ad3ba1f329604bf575f3c99f13ccfca812c62d3 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 10:58:51 -0700 Subject: [PATCH 058/544] Fixed compilations errors with abgcc --- include/constants/metatile_behaviors.h | 6 ------ src/metatile_behavior.c | 1 - 2 files changed, 7 deletions(-) diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 7f2bb9df78..780e452531 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -30,15 +30,9 @@ #define MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2 0x1A #define MB_STAIRS_OUTSIDE_ABANDONED_SHIP 0x1B #define MB_SHOAL_CAVE_ENTRANCE 0x1C -#if OW_AUTO_SIGNPOST == TRUE #define MB_SIGNPOST 0x1D #define MB_POKEMON_CENTER_SIGN 0x1E #define MB_POKEMART_SIGN 0x1F -#else -#define MB_UNUSED_1D 0x1D -#define MB_UNUSED_1E 0x1E -#define MB_UNUSED_1F 0x1F -#endif #define MB_ICE 0x20 #define MB_SAND 0x21 #define MB_SEAWEED 0x22 diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index d16194ec2b..eb602b9d22 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1419,6 +1419,5 @@ bool32 MetatileBehavior_IsPokemonCenterSign(u32 mb) bool32 MetatileBehavior_IsPokeMartSign(u32 mb) { return (mb == MB_POKEMART_SIGN); -#endif } From 0a997fa6ca84dbb2c810eb5bcc08f3adcdeb9259 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 14:57:53 -0700 Subject: [PATCH 059/544] Moved follower scripts back to original position https://github.com/rh-hideout/pokeemerald-expansion/pull/5044/files\#r1694003538 --- include/event_scripts.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/event_scripts.h b/include/event_scripts.h index 7ec15d4548..2923ae9331 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -28,9 +28,6 @@ extern const u8 EventScript_FollowerFaceUp[]; extern const u8 EventScript_FollowerFaceResult[]; extern const u8 EnterPokeballMovement[]; -extern const u8 Common_Movement_FollowerSafeStart[]; -extern const u8 Common_Movement_FollowerSafeEnd[]; - extern const u8 EventScript_TestSignpostMsg[]; extern const u8 EventScript_TryGetTrainerScript[]; extern const u8 EventScript_StartTrainerApproach[]; @@ -646,6 +643,10 @@ extern const u8 VSSeeker_Text_BatteryNotChargedNeedXSteps[]; extern const u8 VSSeeker_Text_NoTrainersWithinRange[]; extern const u8 VSSeeker_Text_TrainersNotReady[]; extern const u8 EventScript_VsSeekerChargingDone[]; + +extern const u8 Common_Movement_FollowerSafeStart[]; +extern const u8 Common_Movement_FollowerSafeEnd[]; + extern const u8 EventScript_CancelMessageBox[]; extern const u8 Common_EventScript_ShowPokemonCenterSign[]; extern const u8 Common_EventScript_ShowPokemartSign[]; From d21d23b52ccd50f1961ebe0ac3c5299692da69cb Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 14:59:36 -0700 Subject: [PATCH 060/544] Removed extra spaces per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044/files\#r1694003572 --- src/field_control_avatar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 92e9df1c54..aaeb2a6b14 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -44,7 +44,7 @@ static EWRAM_DATA u16 sPrevMetatileBehavior = 0; u8 gSelectedObjectEvent; -#define NOT_SIGNPOST 0 +#define NOT_SIGNPOST 0 static void GetPlayerPosition(struct MapPosition *); static void GetInFrontOfPlayerPosition(struct MapPosition *); From b66678248364f134e32f07b7608d816c57f0e4cb Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:01:33 -0700 Subject: [PATCH 061/544] Nested conditions per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044/files\#r1694003628 --- src/field_control_avatar.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index aaeb2a6b14..244b3d2de8 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -207,9 +207,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) GetInFrontOfPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (input->heldDirection && input->dpadDirection == playerDirection) - { - if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) + if (input->heldDirection && (input->dpadDirection == playerDirection) && if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)) return TRUE; } From e360d3bd73184725c66c674648a3734ed2a4f1cf Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:02:15 -0700 Subject: [PATCH 062/544] Removed extra newline per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044/files\#r1694003683 --- src/field_control_avatar.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 244b3d2de8..b6d9298c47 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1127,7 +1127,6 @@ static u32 GetFacingSignpostType(u16 metatileBehavior, u32 playerDirection) return MB_POKEMON_CENTER_SIGN; if (MetatileBehavior_IsPokeMartSign(metatileBehavior) == TRUE) return MB_POKEMART_SIGN; - if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE) return MB_SIGNPOST; From 3c4aaf53f8442adc7aa4240abd6f213d12026f0e Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:03:03 -0700 Subject: [PATCH 063/544] Removed unneeded preproc per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044/files\#r1694003941 --- src/metatile_behavior.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index eb602b9d22..8b8c4898f5 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -125,11 +125,9 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [MB_ISOLATED_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, [MB_VERTICAL_RAIL] = TILE_FLAG_UNUSED, [MB_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, -#if OW_AUTO_SIGNPOST == TRUE [MB_SIGNPOST] = TILE_FLAG_UNUSED, [MB_POKEMON_CENTER_SIGN] = TILE_FLAG_UNUSED, [MB_POKEMART_SIGN] = TILE_FLAG_UNUSED, -#endif }; bool8 MetatileBehavior_IsATile(u8 metatileBehavior) From fccecf038f697f80efb74040e22b8afd5c350410 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:03:45 -0700 Subject: [PATCH 064/544] Removed extra newline per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044/files\#r1694003876 --- src/metatile_behavior.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 8b8c4898f5..903b0a64eb 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1418,4 +1418,3 @@ bool32 MetatileBehavior_IsPokeMartSign(u32 mb) { return (mb == MB_POKEMART_SIGN); } - From 4f03ba98bebf4b04908927e82dc0dcc84e5f133d Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:05:49 -0700 Subject: [PATCH 065/544] Removed extra newline per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044/files\#r1694004015 --- src/text_window.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/text_window.c b/src/text_window.c index 6c02797fe3..efd087977e 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -202,4 +202,3 @@ void LoadUserWindowBorderGfxOnBg(u8 bg, u16 destOffset, u8 palOffset) LoadBgTiles(bg, sWindowFrames[gSaveBlock2Ptr->optionsWindowFrameType].tiles, 0x120, destOffset); LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, PLTT_SIZE_4BPP); } - From 5bb1730394b81b6e63faa7ad3f6015fd9535080d Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:07:50 -0700 Subject: [PATCH 066/544] Fixed if statement compilation --- src/field_control_avatar.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index b6d9298c47..1699a6daa2 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -207,9 +207,8 @@ int ProcessPlayerFieldInput(struct FieldInput *input) GetInFrontOfPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (input->heldDirection && (input->dpadDirection == playerDirection) && if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)) + if (input->heldDirection && (input->dpadDirection == playerDirection) && (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)) return TRUE; - } if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE) return TRUE; From 1ac4d195c22070f5026e72727788dac4e18cb53e Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:17:32 -0700 Subject: [PATCH 067/544] Changed mb to MetatileBehavior per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#discussion_r1694003941 --- src/metatile_behavior.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 903b0a64eb..8923e633da 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1404,17 +1404,17 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) return FALSE; } -bool32 MetatileBehavior_IsSignpost(u32 mb) +bool32 MetatileBehavior_IsSignpost(u32 metatileBehavior) { - return (mb == MB_SIGNPOST); + return (metatileBehavior == MB_SIGNPOST); } -bool32 MetatileBehavior_IsPokemonCenterSign(u32 mb) +bool32 MetatileBehavior_IsPokemonCenterSign(u32 metatileBehavior) { - return (mb == MB_POKEMON_CENTER_SIGN); + return (metatileBehavior == MB_POKEMON_CENTER_SIGN); } -bool32 MetatileBehavior_IsPokeMartSign(u32 mb) +bool32 MetatileBehavior_IsPokeMartSign(u32 metatileBehavior) { - return (mb == MB_POKEMART_SIGN); + return (metatileBehavior == MB_POKEMART_SIGN); } From fb53297e644a069065b433d343724df4553a3d9d Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:45:48 -0700 Subject: [PATCH 068/544] Added documentation around OW_AUTO_SIGNPOST --- include/config/overworld.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/config/overworld.h b/include/config/overworld.h index c740bf4853..0dd9afda76 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -3,7 +3,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. -#define OW_AUTO_SIGNPOST FALSE // When enabled, if the tile that the player is facing has MB_SIGNPOST, MB_POKEMART_SIGN, or MB_POKEMON_CENTER_SIGN, the player will automatically read the signpost. +#define OW_AUTO_SIGNPOST FALSE // When enabled, if the tile that the player is facing has MB_SIGNPOST, MB_POKEMART_SIGN, or MB_POKEMON_CENTER_SIGN, the player will automatically read the signpost, as seen in FRLG. // 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. From 91255a6054cd3b1127e17b5f2f1e03dcab366b43 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 27 Jul 2024 15:49:22 -0700 Subject: [PATCH 069/544] Removed mb labels --- include/metatile_behavior.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index d49dc2459a..5bb95bc18e 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -148,8 +148,8 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); -bool32 MetatileBehavior_IsSignpost(u32 mb); -bool32 MetatileBehavior_IsPokemonCenterSign(u32 mb); -bool32 MetatileBehavior_IsPokeMartSign(u32 mb); +bool32 MetatileBehavior_IsSignpost(u32); +bool32 MetatileBehavior_IsPokemonCenterSign(u32); +bool32 MetatileBehavior_IsPokeMartSign(u32); #endif // GUARD_METATILE_BEHAVIOR_H From 4082adf5b1e7bcc99848f1249a2899092cebb40e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 1 Aug 2024 17:07:50 -0400 Subject: [PATCH 070/544] Start 1.10.0 cycle --- include/constants/expansion.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/constants/expansion.h b/include/constants/expansion.h index ad79d584cb..72a4865242 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,10 +1,10 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// 1.9.0 +// 1.10.0 #define EXPANSION_VERSION_MAJOR 1 -#define EXPANSION_VERSION_MINOR 9 -#define EXPANSION_VERSION_PATCH 1 +#define EXPANSION_VERSION_MINOR 10 +#define EXPANSION_VERSION_PATCH 0 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. From 3af93bdfeefcf50eb4b86a8f7646235a8d4a1032 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Fri, 2 Aug 2024 17:28:05 +0200 Subject: [PATCH 071/544] FRLG+ whiteout message (#4967) * FRLG whiteout message + post whiteout event --- data/event_scripts.s | 73 +++++++++++ include/config/overworld.h | 1 + include/constants/heal_locations.h | 1 + include/event_scripts.h | 2 + include/field_screen_effect.h | 1 + include/heal_location.h | 4 + include/strings.h | 4 + src/data/heal_locations_pkm_center.h | 175 +++++++++++++++++++++++++++ src/field_screen_effect.c | 114 +++++++++++++++++ src/heal_location.c | 69 +++++++++++ src/overworld.c | 17 ++- src/strings.c | 2 + 12 files changed, 461 insertions(+), 2 deletions(-) create mode 100644 src/data/heal_locations_pkm_center.h diff --git a/data/event_scripts.s b/data/event_scripts.s index 07eafe1c35..d4393ac9d4 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -587,6 +587,37 @@ EventScript_WhiteOut:: goto EventScript_ResetMrBriney end +EventScript_AfterWhiteOutHeal:: + lockall + msgbox gText_FirstShouldRestoreMonsHealth + call EventScript_PkmnCenterNurse_TakeAndHealPkmn + call_if_unset FLAG_DEFEATED_RUSTBORO_GYM, EventScript_AfterWhiteOutHealMsgPreRoxanne + call_if_set FLAG_DEFEATED_RUSTBORO_GYM, EventScript_AfterWhiteOutHealMsg + applymovement VAR_LAST_TALKED, Movement_PkmnCenterNurse_Bow + waitmovement 0 + fadedefaultbgm + releaseall + end + +EventScript_AfterWhiteOutHealMsgPreRoxanne:: + msgbox gText_MonsHealedShouldBuyPotions + return + +EventScript_AfterWhiteOutHealMsg:: + msgbox gText_MonsHealed + return + +EventScript_AfterWhiteOutMomHeal:: + lockall + applymovement LOCALID_MOM, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + msgbox gText_HadQuiteAnExperienceTakeRest + call Common_EventScript_OutOfCenterPartyHeal + msgbox gText_MomExplainHPGetPotions + fadedefaultbgm + releaseall + end + EventScript_ResetMrBriney:: goto_if_eq VAR_BRINEY_LOCATION, 1, EventScript_MoveMrBrineyToHouse goto_if_eq VAR_BRINEY_LOCATION, 2, EventScript_MoveMrBrineyToDewford @@ -887,6 +918,48 @@ gText_PlayerWhitedOut:: .string "{PLAYER} is out of usable\n" .string "POKéMON!\p{PLAYER} whited out!$" +gText_FirstShouldRestoreMonsHealth:: + .string "First, you should restore your\n" + .string "POKéMON to full health.$" + +gText_MonsHealedShouldBuyPotions:: + .string "Your POKéMON have been healed\n" + .string "to perfect health.\p" + .string "If your POKéMON's energy, HP,\n" + .string "is down, please come see us.\p" + .string "If you're planning to go far in the\n" + .string "field, you should buy some POTIONS\l" + .string "at the POKéMON MART.\p" + .string "We hope you excel!$" + +gText_MonsHealed:: + .string "Your POKéMON have been healed\n" + .string "to perfect health.\p" + .string "We hope you excel!$" + +gText_HadQuiteAnExperienceTakeRest:: + .string "MOM: {PLAYER}!\n" + .string "Welcome home.\p" + .string "It sounds like you had quite\n" + .string "an experience.\p" + .string "Maybe you should take a quick\n" + .string "rest.$" + +gText_MomExplainHPGetPotions:: + .string "MOM: Oh, good! You and your\n" + .string "POKéMON are looking great.\p" + .string "I just heard from PROF. BIRCH.\p" + .string "He said that POKéMON's energy is\n" + .string "measured in HP.\p" + .string "If your POKéMON lose their HP,\n" + .string "you can restore them at any\l" + .string "POKéMON CENTER.\p" + .string "If you're going to travel far away,\n" + .string "the smart TRAINER stocks up on\l" + .string "POTIONS at the POKéMON MART.\p" + .string "Make me proud, honey!\p" + .string "Take care!$" + gText_RegisteredTrainerinPokeNav:: .string "Registered {STR_VAR_1} {STR_VAR_2}\n" .string "in the POKéNAV.$" diff --git a/include/config/overworld.h b/include/config/overworld.h index b666426996..b47cef5c50 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -8,6 +8,7 @@ #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. #define OW_DOUBLE_APPROACH_WITH_ONE_MON FALSE // If enabled, you can be spotted by two trainers at the same time even if you only have one eligible Pokémon in your party. #define OW_HIDE_REPEAT_MAP_POPUP FALSE // If enabled, map popups will not appear if entering a map with the same Map Section Id as the last. +#define OW_FRLG_WHITEOUT FALSE // If enabled, shows an additional whiteout message and post whiteout event script with healing NPC. // These generational defines only make a distinction for Berries and the OW_PC_MOVE_ORDER #define GEN_6_XY GEN_6 diff --git a/include/constants/heal_locations.h b/include/constants/heal_locations.h index d3dd8f1f17..217594d0b7 100644 --- a/include/constants/heal_locations.h +++ b/include/constants/heal_locations.h @@ -24,5 +24,6 @@ #define HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE 20 #define HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR 21 #define HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST 22 +#define HEAL_LOCATION_COUNT 23 #endif // GUARD_CONSTANTS_HEAL_LOCATIONS_H diff --git a/include/event_scripts.h b/include/event_scripts.h index fa0bfe5c6e..7c35e991c2 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -620,6 +620,8 @@ extern const u8 EventScript_SelectWithoutRegisteredItem[]; // overworld extern const u8 EventScript_WhiteOut[]; +extern const u8 EventScript_AfterWhiteOutMomHeal[]; +extern const u8 EventScript_AfterWhiteOutHeal[]; extern const u8 EventScript_ResetMrBriney[]; extern const u8 EventScript_DoLinkRoomExit[]; extern const u8 CableClub_EventScript_TooBusyToNotice[]; diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 6dc9b077d2..9b3aa6229e 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -16,6 +16,7 @@ void FieldCB_ReturnToFieldWirelessLink(void); void FieldCB_DefaultWarpExit(void); void FieldCB_WarpExitFadeFromBlack(void); void FieldCB_WarpExitFadeFromWhite(void); +void FieldCB_RushInjuredPokemonToCenter(void); bool8 FieldCB_ReturnToFieldOpenStartMenu(void); void ReturnToFieldOpenStartMenu(void); void FieldCB_ReturnToFieldNoScript(void); diff --git a/include/heal_location.h b/include/heal_location.h index 46f0d785ab..8c4ebae965 100644 --- a/include/heal_location.h +++ b/include/heal_location.h @@ -10,7 +10,11 @@ struct HealLocation }; u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum); +u32 GetHealLocationIndexByWarpData(struct WarpData *warp); const struct HealLocation *GetHealLocationByMap(u16 mapGroup, u16 mapNum); const struct HealLocation *GetHealLocation(u32 index); +bool32 IsLastHealLocationPlayerHouse(); +void SetWhiteoutRespawnWarpAndHealerNPC(struct WarpData * warp); +u32 GetHealNpcLocalId(u32 healLocationId); #endif // GUARD_HEAL_LOCATION_H diff --git a/include/strings.h b/include/strings.h index 2963eb96d1..ec175ab251 100644 --- a/include/strings.h +++ b/include/strings.h @@ -3046,4 +3046,8 @@ extern const u8 gText_PlantBerry[]; extern const u8 gText_AM[]; extern const u8 gText_PM[]; +// FRLG whiteout +extern const u8 gText_PlayerScurriedToCenter[]; +extern const u8 gText_PlayerScurriedBackHome[]; + #endif // GUARD_STRINGS_H diff --git a/src/data/heal_locations_pkm_center.h b/src/data/heal_locations_pkm_center.h new file mode 100644 index 0000000000..58be0be05e --- /dev/null +++ b/src/data/heal_locations_pkm_center.h @@ -0,0 +1,175 @@ +#define DEFAULT_POKEMON_CENTER_COORDS .x = 7, .y = 4 + +static const struct HealLocation sHealLocationsPokemonCenter[HEAL_LOCATION_COUNT - 1] = +{ + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F - 1] = + { + .group = MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), + .map = MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), + .x = 2, + .y = 7, + }, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F - 1] = + { + .group = MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_1F), + .map = MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F), + .x = 8, + .y = 7, + }, + [HEAL_LOCATION_PETALBURG_CITY - 1] = + { + .group = MAP_GROUP(PETALBURG_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(PETALBURG_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_SLATEPORT_CITY - 1] = + { + .group = MAP_GROUP(SLATEPORT_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(SLATEPORT_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_MAUVILLE_CITY - 1] = + { + .group = MAP_GROUP(MAUVILLE_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(MAUVILLE_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_RUSTBORO_CITY - 1] = + { + .group = MAP_GROUP(RUSTBORO_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(RUSTBORO_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_FORTREE_CITY - 1] = + { + .group = MAP_GROUP(FORTREE_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(FORTREE_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_LILYCOVE_CITY - 1] = + { + .group = MAP_GROUP(LILYCOVE_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(LILYCOVE_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_MOSSDEEP_CITY - 1] = + { + .group = MAP_GROUP(MOSSDEEP_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(MOSSDEEP_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_SOOTOPOLIS_CITY - 1] = + { + .group = MAP_GROUP(SOOTOPOLIS_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(SOOTOPOLIS_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_EVER_GRANDE_CITY - 1] = + { + .group = MAP_GROUP(EVER_GRANDE_CITY_POKEMON_CENTER_1F), + .map = MAP_NUM(EVER_GRANDE_CITY_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE - 1] = + { + .group = MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), + .map = MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F), + .x = 2, + .y = 7, + }, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE - 1] = + { + .group = MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_1F), + .map = MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_1F), + .x = 8, + .y = 7, + }, + [HEAL_LOCATION_OLDALE_TOWN - 1] = + { + .group = MAP_GROUP(OLDALE_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(OLDALE_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_DEWFORD_TOWN - 1] = + { + .group = MAP_GROUP(DEWFORD_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(DEWFORD_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_LAVARIDGE_TOWN - 1] = + { + .group = MAP_GROUP(LAVARIDGE_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(LAVARIDGE_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_FALLARBOR_TOWN - 1] = + { + .group = MAP_GROUP(FALLARBOR_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(FALLARBOR_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_VERDANTURF_TOWN - 1] = + { + .group = MAP_GROUP(VERDANTURF_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(VERDANTURF_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_PACIFIDLOG_TOWN - 1] = + { + .group = MAP_GROUP(PACIFIDLOG_TOWN_POKEMON_CENTER_1F), + .map = MAP_NUM(PACIFIDLOG_TOWN_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, + [HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE - 1] = + { + .group = MAP_GROUP(EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), + .map = MAP_NUM(EVER_GRANDE_CITY_POKEMON_LEAGUE_1F), + .x = 3, + .y = 4, + }, + [HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR - 1] = + { + .group = MAP_GROUP(SOUTHERN_ISLAND_EXTERIOR), + .map = MAP_NUM(SOUTHERN_ISLAND_EXTERIOR), + .x = 15, + .y = 20, + }, + [HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST - 1] = + { + .group = MAP_GROUP(BATTLE_FRONTIER_POKEMON_CENTER_1F), + .map = MAP_NUM(BATTLE_FRONTIER_POKEMON_CENTER_1F), + DEFAULT_POKEMON_CENTER_COORDS, + }, +}; + +#undef DEFAULT_POKEMON_CENTER_COORDS + +// localIds can be found in the generated events.inc file for the specific heal location map +// e.g. for OldaleTown_PokemonCenter1F/events.inc the following entry gets generated: +// object_event 1, OBJ_EVENT_GFX_NURSE, 7, 2, 3, MOVEMENT_TYPE_FACE_DOWN, 0, 0, TRAINER_TYPE_NONE, 0, OldaleTown_PokemonCenter_1F_EventScript_Nurse, 0 +// In this case the localId is 1. +static const u8 sHealNpcLocalId[HEAL_LOCATION_COUNT - 1] = +{ + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F - 1] = 1, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F - 1] = 1, + [HEAL_LOCATION_PETALBURG_CITY - 1] = 1, + [HEAL_LOCATION_SLATEPORT_CITY - 1] = 1, + [HEAL_LOCATION_MAUVILLE_CITY - 1] = 1, + [HEAL_LOCATION_RUSTBORO_CITY - 1] = 1, + [HEAL_LOCATION_FORTREE_CITY - 1] = 1, + [HEAL_LOCATION_LILYCOVE_CITY - 1] = 1, + [HEAL_LOCATION_MOSSDEEP_CITY - 1] = 1, + [HEAL_LOCATION_SOOTOPOLIS_CITY - 1] = 1, + [HEAL_LOCATION_EVER_GRANDE_CITY - 1] = 1, + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE - 1] = 1, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE - 1] = 1, + [HEAL_LOCATION_OLDALE_TOWN - 1] = 1, + [HEAL_LOCATION_DEWFORD_TOWN - 1] = 1, + [HEAL_LOCATION_LAVARIDGE_TOWN - 1] = 1, + [HEAL_LOCATION_FALLARBOR_TOWN - 1] = 1, + [HEAL_LOCATION_VERDANTURF_TOWN - 1] = 1, + [HEAL_LOCATION_PACIFIDLOG_TOWN - 1] = 1, + [HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE - 1] = 1, + [HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR - 1] = 0, // no heal npc + [HEAL_LOCATION_BATTLE_FRONTIER_OUTSIDE_EAST - 1] = 1, +}; diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 9338fe183d..e39a0c6c1f 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -7,11 +7,13 @@ #include "field_effect.h" #include "event_object_lock.h" #include "event_object_movement.h" +#include "event_scripts.h" #include "field_player_avatar.h" #include "field_screen_effect.h" #include "field_special_scene.h" #include "field_weather.h" #include "gpu_regs.h" +#include "heal_location.h" #include "io_reg.h" #include "link.h" #include "link_rfu.h" @@ -26,10 +28,13 @@ #include "script.h" #include "sound.h" #include "start_menu.h" +#include "strings.h" +#include "string_util.h" #include "task.h" #include "text.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" +#include "constants/heal_locations.h" #include "constants/songs.h" #include "constants/rgb.h" #include "trainer_hill.h" @@ -1274,3 +1279,112 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId) ScriptContext_Enable(); } } + +static const struct WindowTemplate sWindowTemplate_WhiteoutText = +{ + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 30, + .height = 11, + .paletteNum = 15, + .baseBlock = 1, +}; + +static const u8 sWhiteoutTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; + +#define tState data[0] +#define tWindowId data[1] +#define tPrintState data[2] +#define tIsPlayerHouse data[3] + +static bool32 PrintWhiteOutRecoveryMessage(u8 taskId, const u8 *text, u32 x, u32 y) +{ + u32 windowId = gTasks[taskId].tWindowId; + + switch (gTasks[taskId].tPrintState) + { + case 0: + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + StringExpandPlaceholders(gStringVar4, text); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 1, 0, sWhiteoutTextColors, 1, gStringVar4); + gTextFlags.canABSpeedUpPrint = FALSE; + gTasks[taskId].tPrintState = 1; + break; + case 1: + RunTextPrinters(); + if (!IsTextPrinterActive(windowId)) + { + gTasks[taskId].tPrintState = 0; + return TRUE; + } + break; + } + return FALSE; +} + +enum { + FRLG_WHITEOUT_ENTER_MSG_SCREEN, + FRLG_WHITEOUT_PRINT_MSG, + FRLG_WHITEOUT_LEAVE_MSG_SCREEN, + FRLG_WHITEOUT_HEAL_SCRIPT, +}; + +static void Task_RushInjuredPokemonToCenter(u8 taskId) +{ + u32 windowId; + + switch (gTasks[taskId].tState) + { + case FRLG_WHITEOUT_ENTER_MSG_SCREEN: + windowId = AddWindow(&sWindowTemplate_WhiteoutText); + gTasks[taskId].tWindowId = windowId; + Menu_LoadStdPalAt(BG_PLTT_ID(15)); + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, COPYWIN_FULL); + + gTasks[taskId].tIsPlayerHouse = IsLastHealLocationPlayerHouse(); + gTasks[taskId].tState = FRLG_WHITEOUT_PRINT_MSG; + break; + case FRLG_WHITEOUT_PRINT_MSG: + { + const u8 *recoveryMessage = gTasks[taskId].tIsPlayerHouse == TRUE ? gText_PlayerScurriedBackHome : gText_PlayerScurriedToCenter; + if (PrintWhiteOutRecoveryMessage(taskId, recoveryMessage, 2, 8)) + { + ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], DIR_NORTH); + gTasks[taskId].tState = FRLG_WHITEOUT_LEAVE_MSG_SCREEN; + } + break; + } + case FRLG_WHITEOUT_LEAVE_MSG_SCREEN: + windowId = gTasks[taskId].tWindowId; + ClearWindowTilemap(windowId); + CopyWindowToVram(windowId, COPYWIN_MAP); + RemoveWindow(windowId); + FillPalBufferBlack(); + FadeInFromBlack(); + gTasks[taskId].tState = FRLG_WHITEOUT_HEAL_SCRIPT; + break; + case FRLG_WHITEOUT_HEAL_SCRIPT: + if (WaitForWeatherFadeIn() == TRUE) + { + DestroyTask(taskId); + if (gTasks[taskId].tIsPlayerHouse) + ScriptContext_SetupScript(EventScript_AfterWhiteOutMomHeal); + else + ScriptContext_SetupScript(EventScript_AfterWhiteOutHeal); + } + break; + } +} + +void FieldCB_RushInjuredPokemonToCenter(void) +{ + u8 taskId; + + LockPlayerFieldControls(); + FillPalBufferBlack(); + taskId = CreateTask(Task_RushInjuredPokemonToCenter, 10); + gTasks[taskId].tState = FRLG_WHITEOUT_ENTER_MSG_SCREEN; +} diff --git a/src/heal_location.c b/src/heal_location.c index 0ab5540346..7193ea338e 100644 --- a/src/heal_location.c +++ b/src/heal_location.c @@ -1,8 +1,11 @@ #include "global.h" +#include "event_data.h" #include "heal_location.h" #include "constants/heal_locations.h" +#include "constants/maps.h" #include "data/heal_locations.h" +#include "data/heal_locations_pkm_center.h" u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum) { @@ -26,6 +29,20 @@ const struct HealLocation *GetHealLocationByMap(u16 mapGroup, u16 mapNum) return &sHealLocations[index - 1]; } +u32 GetHealLocationIndexByWarpData(struct WarpData *warp) +{ + u32 i; + for (i = 0; i < ARRAY_COUNT(sHealLocations); i++) + { + if (sHealLocations[i].group == warp->mapGroup + && sHealLocations[i].map == warp->mapNum + && sHealLocations[i].x == warp->x + && sHealLocations[i].y == warp->y) + return i + 1; + } + return HEAL_LOCATION_NONE; +} + const struct HealLocation *GetHealLocation(u32 index) { if (index == HEAL_LOCATION_NONE) @@ -35,3 +52,55 @@ const struct HealLocation *GetHealLocation(u32 index) else return &sHealLocations[index - 1]; } + +static bool32 IsLastHealLocation(u32 healLocation) +{ + const struct HealLocation *loc = GetHealLocation(healLocation); + const struct WarpData *warpData = &gSaveBlock1Ptr->lastHealLocation; + + return warpData->mapGroup == loc->group + && warpData->mapNum == loc->map + && warpData->warpId == WARP_ID_NONE + && warpData->x == loc->x + && warpData->y == loc->y; +} + +bool32 IsLastHealLocationPlayerHouse() +{ + if (IsLastHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE) + || IsLastHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F) + || IsLastHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE) + || IsLastHealLocation(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F)) + return TRUE; + + return FALSE; +} + +u32 GetHealNpcLocalId(u32 healLocationId) +{ + if (healLocationId == HEAL_LOCATION_NONE || healLocationId >= HEAL_LOCATION_COUNT) + return 0; + + return sHealNpcLocalId[healLocationId - 1]; +} + +void SetWhiteoutRespawnWarpAndHealerNPC(struct WarpData *warp) +{ + u32 healLocationId = GetHealLocationIndexByWarpData(&gSaveBlock1Ptr->lastHealLocation); + u32 healNpcLocalId = GetHealNpcLocalId(healLocationId); + struct HealLocation pkmCenterHealLocation; + + if (!healNpcLocalId) + { + *(warp) = gSaveBlock1Ptr->lastHealLocation; + return; + } + + pkmCenterHealLocation = sHealLocationsPokemonCenter[healLocationId - 1]; + warp->mapGroup = pkmCenterHealLocation.group; + warp->mapNum = pkmCenterHealLocation.map; + warp->warpId = WARP_ID_NONE; + warp->x = pkmCenterHealLocation.x; + warp->y = pkmCenterHealLocation.y; + gSpecialVar_LastTalked = healNpcLocalId; +} diff --git a/src/overworld.c b/src/overworld.c index a9606578dc..babdfad7b6 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -689,9 +689,19 @@ void SetWarpDestinationToHealLocation(u8 healLocationId) SetWarpDestination(healLocation->group, healLocation->map, WARP_ID_NONE, healLocation->x, healLocation->y); } +static bool32 IsFRLGWhiteout(void) +{ + if (!OW_FRLG_WHITEOUT) + return FALSE; + return GetHealNpcLocalId(GetHealLocationIndexByWarpData(&gSaveBlock1Ptr->lastHealLocation)) > 0; +} + void SetWarpDestinationToLastHealLocation(void) { - sWarpDestination = gSaveBlock1Ptr->lastHealLocation; + if (IsFRLGWhiteout()) + SetWhiteoutRespawnWarpAndHealerNPC(&sWarpDestination); + else + sWarpDestination = gSaveBlock1Ptr->lastHealLocation; } void SetLastHealLocationWarp(u8 healLocationId) @@ -1611,7 +1621,10 @@ void CB2_WhiteOut(void) ResetInitialPlayerAvatarState(); ScriptContext_Init(); UnlockPlayerFieldControls(); - gFieldCallback = FieldCB_WarpExitFadeFromBlack; + if (IsFRLGWhiteout()) + gFieldCallback = FieldCB_RushInjuredPokemonToCenter; + else + gFieldCallback = FieldCB_WarpExitFadeFromBlack; state = 0; DoMapLoadLoop(&state); SetFieldVBlankCallback(); diff --git a/src/strings.c b/src/strings.c index 254378d379..28ed992d43 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1295,6 +1295,8 @@ const u8 gText_Sorry[] = _("SORRY"); const u8 gText_YaySmileEmoji[] = _("YAY{EMOJI_BIGSMILE}"); const u8 gText_ThankYou[] = _("THANK YOU"); const u8 gText_ByeBye[] = _("BYE-BYE!"); +const u8 gText_PlayerScurriedToCenter[] = _("{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm…\p"); +const u8 gText_PlayerScurriedBackHome[] = _("{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm…\p"); const u8 gText_MatchCallSteven_Strategy[] = _("Attack the weak points!"); const u8 gText_MatchCallSteven_Pokemon[] = _("Ultimate STEEL POKéMON."); const u8 gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle[] = _("I'd climb even waterfalls"); From 346b29ff678159a27366454a28f6cb3c4daf3e22 Mon Sep 17 00:00:00 2001 From: SombrAbsol Date: Fri, 2 Aug 2024 18:01:30 +0200 Subject: [PATCH 072/544] Remove metadata in AIF files (#4958) * Remove unnecessary metadata from .aif files to reduce audio footprint in the repo --- .../direct_sound_samples/cries/abomasnow.aif | Bin 20770 -> 20718 bytes .../cries/abomasnow_mega.aif | Bin 27482 -> 27482 bytes sound/direct_sound_samples/cries/abra.aif | Bin 11686 -> 11634 bytes sound/direct_sound_samples/cries/absol.aif | Bin 5282 -> 5230 bytes sound/direct_sound_samples/cries/accelgor.aif | Bin 14142 -> 14116 bytes .../direct_sound_samples/cries/aegislash.aif | Bin 14370 -> 14288 bytes .../direct_sound_samples/cries/aerodactyl.aif | Bin 12166 -> 12114 bytes .../cries/aerodactyl_mega.aif | Bin 26234 -> 26234 bytes sound/direct_sound_samples/cries/aggron.aif | Bin 12802 -> 12750 bytes .../cries/aggron_mega.aif | Bin 27612 -> 27612 bytes sound/direct_sound_samples/cries/aipom.aif | Bin 7082 -> 7030 bytes sound/direct_sound_samples/cries/alakazam.aif | Bin 15766 -> 15714 bytes .../direct_sound_samples/cries/alomomola.aif | Bin 19510 -> 19484 bytes sound/direct_sound_samples/cries/altaria.aif | Bin 5590 -> 5538 bytes sound/direct_sound_samples/cries/amaura.aif | Bin 21478 -> 21404 bytes sound/direct_sound_samples/cries/ambipom.aif | Bin 10670 -> 10618 bytes .../direct_sound_samples/cries/amoonguss.aif | Bin 11604 -> 11578 bytes sound/direct_sound_samples/cries/ampharos.aif | Bin 8266 -> 8214 bytes sound/direct_sound_samples/cries/anorith.aif | Bin 5886 -> 5834 bytes sound/direct_sound_samples/cries/applin.aif | Bin 19682 -> 19682 bytes .../direct_sound_samples/cries/araquanid.aif | Bin 14718 -> 14718 bytes sound/direct_sound_samples/cries/arbok.aif | Bin 9674 -> 9622 bytes sound/direct_sound_samples/cries/arboliva.aif | Bin 28026 -> 28026 bytes sound/direct_sound_samples/cries/arcanine.aif | Bin 8626 -> 8574 bytes sound/direct_sound_samples/cries/arceus.aif | Bin 21442 -> 21390 bytes .../direct_sound_samples/cries/archaludon.aif | Bin 30158 -> 30158 bytes sound/direct_sound_samples/cries/archen.aif | Bin 9512 -> 9486 bytes sound/direct_sound_samples/cries/archeops.aif | Bin 15948 -> 15922 bytes sound/direct_sound_samples/cries/arctibax.aif | Bin 18866 -> 18866 bytes .../direct_sound_samples/cries/arctovish.aif | Bin 20318 -> 20318 bytes sound/direct_sound_samples/cries/ariados.aif | Bin 6194 -> 6142 bytes sound/direct_sound_samples/cries/armaldo.aif | Bin 11406 -> 11354 bytes .../direct_sound_samples/cries/aromatisse.aif | Bin 22742 -> 22660 bytes sound/direct_sound_samples/cries/aron.aif | Bin 4626 -> 4574 bytes sound/direct_sound_samples/cries/articuno.aif | Bin 11818 -> 11766 bytes sound/direct_sound_samples/cries/audino.aif | Bin 9420 -> 9394 bytes sound/direct_sound_samples/cries/aurorus.aif | Bin 27760 -> 27682 bytes sound/direct_sound_samples/cries/avalugg.aif | Bin 22318 -> 22240 bytes sound/direct_sound_samples/cries/axew.aif | Bin 12058 -> 12032 bytes sound/direct_sound_samples/cries/azelf.aif | Bin 13998 -> 13946 bytes .../direct_sound_samples/cries/azumarill.aif | Bin 8478 -> 8426 bytes sound/direct_sound_samples/cries/azurill.aif | Bin 5238 -> 5186 bytes sound/direct_sound_samples/cries/bagon.aif | Bin 3958 -> 3906 bytes sound/direct_sound_samples/cries/baltoy.aif | Bin 6290 -> 6238 bytes sound/direct_sound_samples/cries/banette.aif | Bin 6358 -> 6306 bytes .../direct_sound_samples/cries/barbaracle.aif | Bin 19392 -> 19310 bytes sound/direct_sound_samples/cries/barboach.aif | Bin 4658 -> 4606 bytes .../cries/basculegion.aif | Bin 18584 -> 18584 bytes sound/direct_sound_samples/cries/basculin.aif | Bin 6098 -> 6072 bytes .../direct_sound_samples/cries/bastiodon.aif | Bin 17530 -> 17478 bytes sound/direct_sound_samples/cries/bayleef.aif | Bin 4438 -> 4386 bytes sound/direct_sound_samples/cries/beartic.aif | Bin 14194 -> 14168 bytes .../direct_sound_samples/cries/beautifly.aif | Bin 4154 -> 4102 bytes sound/direct_sound_samples/cries/beedrill.aif | Bin 9682 -> 9630 bytes .../cries/beedrill_mega.aif | Bin 23342 -> 23342 bytes sound/direct_sound_samples/cries/beheeyem.aif | Bin 18850 -> 18824 bytes sound/direct_sound_samples/cries/beldum.aif | Bin 4854 -> 4802 bytes .../direct_sound_samples/cries/bellossom.aif | Bin 7066 -> 7014 bytes .../direct_sound_samples/cries/bellsprout.aif | Bin 3818 -> 3766 bytes sound/direct_sound_samples/cries/bergmite.aif | Bin 14366 -> 14288 bytes sound/direct_sound_samples/cries/bewear.aif | Bin 15198 -> 15124 bytes sound/direct_sound_samples/cries/bibarel.aif | Bin 14394 -> 14342 bytes sound/direct_sound_samples/cries/bidoof.aif | Bin 10606 -> 10554 bytes sound/direct_sound_samples/cries/binacle.aif | Bin 14784 -> 14706 bytes sound/direct_sound_samples/cries/bisharp.aif | Bin 10764 -> 10738 bytes .../cries/blacephalon.aif | Bin 26408 -> 26322 bytes .../direct_sound_samples/cries/blastoise.aif | Bin 9646 -> 9594 bytes sound/direct_sound_samples/cries/blaziken.aif | Bin 15714 -> 15662 bytes sound/direct_sound_samples/cries/blissey.aif | Bin 8302 -> 8250 bytes sound/direct_sound_samples/cries/blitzle.aif | Bin 8734 -> 8708 bytes sound/direct_sound_samples/cries/boldore.aif | Bin 17968 -> 17942 bytes sound/direct_sound_samples/cries/bonsly.aif | Bin 7194 -> 7142 bytes .../direct_sound_samples/cries/bouffalant.aif | Bin 19664 -> 19638 bytes .../direct_sound_samples/cries/bounsweet.aif | Bin 11438 -> 11356 bytes sound/direct_sound_samples/cries/braixen.aif | Bin 13526 -> 13450 bytes sound/direct_sound_samples/cries/bramblin.aif | Bin 31652 -> 31652 bytes sound/direct_sound_samples/cries/braviary.aif | Bin 13048 -> 13022 bytes sound/direct_sound_samples/cries/breloom.aif | Bin 6402 -> 6350 bytes sound/direct_sound_samples/cries/brionne.aif | Bin 17294 -> 17218 bytes sound/direct_sound_samples/cries/bronzong.aif | Bin 23062 -> 23010 bytes sound/direct_sound_samples/cries/bronzor.aif | Bin 10334 -> 10282 bytes sound/direct_sound_samples/cries/bruxish.aif | Bin 14784 -> 14706 bytes sound/direct_sound_samples/cries/budew.aif | Bin 12506 -> 12454 bytes sound/direct_sound_samples/cries/buizel.aif | Bin 10066 -> 10014 bytes .../direct_sound_samples/cries/bulbasaur.aif | Bin 8290 -> 8238 bytes sound/direct_sound_samples/cries/buneary.aif | Bin 13110 -> 13058 bytes sound/direct_sound_samples/cries/bunnelby.aif | Bin 7248 -> 7170 bytes sound/direct_sound_samples/cries/burmy.aif | Bin 6906 -> 6854 bytes .../direct_sound_samples/cries/butterfree.aif | Bin 5050 -> 4998 bytes sound/direct_sound_samples/cries/buzzwole.aif | Bin 26504 -> 26426 bytes sound/direct_sound_samples/cries/cacnea.aif | Bin 4514 -> 4462 bytes sound/direct_sound_samples/cries/cacturne.aif | Bin 11334 -> 11282 bytes sound/direct_sound_samples/cries/calyrex.aif | Bin 28386 -> 28198 bytes .../cries/calyrex_ice_rider.aif | Bin 29682 -> 29682 bytes .../cries/calyrex_shadow_rider.aif | Bin 30652 -> 30652 bytes sound/direct_sound_samples/cries/camerupt.aif | Bin 11550 -> 11498 bytes sound/direct_sound_samples/cries/capsakid.aif | Bin 11342 -> 11342 bytes sound/direct_sound_samples/cries/carbink.aif | Bin 21482 -> 21404 bytes .../direct_sound_samples/cries/carnivine.aif | Bin 15206 -> 15154 bytes .../direct_sound_samples/cries/carracosta.aif | Bin 16230 -> 16204 bytes sound/direct_sound_samples/cries/carvanha.aif | Bin 5074 -> 5022 bytes sound/direct_sound_samples/cries/cascoon.aif | Bin 8150 -> 8098 bytes sound/direct_sound_samples/cries/castform.aif | Bin 6326 -> 6274 bytes sound/direct_sound_samples/cries/caterpie.aif | Bin 4218 -> 4166 bytes sound/direct_sound_samples/cries/celebi.aif | Bin 7254 -> 7202 bytes .../direct_sound_samples/cries/celesteela.aif | Bin 29004 -> 28922 bytes .../direct_sound_samples/cries/ceruledge.aif | Bin 22792 -> 22792 bytes .../direct_sound_samples/cries/chandelure.aif | Bin 23032 -> 22978 bytes sound/direct_sound_samples/cries/chansey.aif | Bin 7414 -> 7362 bytes .../direct_sound_samples/cries/charizard.aif | Bin 9646 -> 9594 bytes .../cries/charizard_mega_x.aif | Bin 20798 -> 20798 bytes .../cries/charizard_mega_y.aif | Bin 21718 -> 21718 bytes .../direct_sound_samples/cries/charjabug.aif | Bin 15206 -> 15124 bytes .../direct_sound_samples/cries/charmander.aif | Bin 7242 -> 7190 bytes .../direct_sound_samples/cries/charmeleon.aif | Bin 7274 -> 7222 bytes sound/direct_sound_samples/cries/chatot.aif | Bin 10762 -> 10710 bytes sound/direct_sound_samples/cries/cherrim.aif | Bin 10634 -> 10582 bytes sound/direct_sound_samples/cries/cherubi.aif | Bin 6358 -> 6306 bytes .../direct_sound_samples/cries/chesnaught.aif | Bin 20648 -> 20566 bytes sound/direct_sound_samples/cries/chespin.aif | Bin 7666 -> 7590 bytes sound/direct_sound_samples/cries/chi_yu.aif | Bin 28878 -> 28878 bytes .../direct_sound_samples/cries/chien_pao.aif | Bin 28814 -> 28814 bytes .../direct_sound_samples/cries/chikorita.aif | Bin 2678 -> 2626 bytes sound/direct_sound_samples/cries/chimchar.aif | Bin 14862 -> 14810 bytes sound/direct_sound_samples/cries/chimecho.aif | Bin 5066 -> 5014 bytes sound/direct_sound_samples/cries/chinchou.aif | Bin 6370 -> 6318 bytes .../direct_sound_samples/cries/chingling.aif | Bin 17870 -> 17818 bytes sound/direct_sound_samples/cries/cinccino.aif | Bin 18390 -> 18364 bytes sound/direct_sound_samples/cries/clamperl.aif | Bin 9166 -> 9114 bytes .../direct_sound_samples/cries/clauncher.aif | Bin 5996 -> 5914 bytes .../direct_sound_samples/cries/clawitzer.aif | Bin 16880 -> 16798 bytes sound/direct_sound_samples/cries/claydol.aif | Bin 9694 -> 9642 bytes sound/direct_sound_samples/cries/clefable.aif | Bin 5318 -> 5266 bytes sound/direct_sound_samples/cries/clefairy.aif | Bin 4258 -> 4206 bytes sound/direct_sound_samples/cries/cleffa.aif | Bin 3018 -> 2966 bytes .../direct_sound_samples/cries/clobbopus.aif | Bin 15134 -> 15134 bytes sound/direct_sound_samples/cries/clodsire.aif | Bin 17336 -> 17336 bytes sound/direct_sound_samples/cries/cloyster.aif | Bin 10378 -> 10326 bytes sound/direct_sound_samples/cries/cobalion.aif | Bin 17656 -> 17602 bytes .../direct_sound_samples/cries/cofagrigus.aif | Bin 18886 -> 18860 bytes sound/direct_sound_samples/cries/combee.aif | Bin 18306 -> 18254 bytes .../direct_sound_samples/cries/combusken.aif | Bin 14386 -> 14334 bytes sound/direct_sound_samples/cries/comfey.aif | Bin 21896 -> 21822 bytes .../direct_sound_samples/cries/conkeldurr.aif | Bin 18794 -> 18768 bytes sound/direct_sound_samples/cries/corphish.aif | Bin 6034 -> 5982 bytes sound/direct_sound_samples/cries/corsola.aif | Bin 6466 -> 6414 bytes .../cries/corvisquire.aif | Bin 19468 -> 19468 bytes sound/direct_sound_samples/cries/cosmoem.aif | Bin 24412 -> 24334 bytes sound/direct_sound_samples/cries/cosmog.aif | Bin 16872 -> 16798 bytes sound/direct_sound_samples/cries/cottonee.aif | Bin 9330 -> 9272 bytes .../cries/crabominable.aif | Bin 19396 -> 19310 bytes .../direct_sound_samples/cries/crabrawler.aif | Bin 5160 -> 5078 bytes sound/direct_sound_samples/cries/cradily.aif | Bin 14566 -> 14514 bytes sound/direct_sound_samples/cries/cranidos.aif | Bin 9730 -> 9678 bytes .../direct_sound_samples/cries/crawdaunt.aif | Bin 12342 -> 12290 bytes .../direct_sound_samples/cries/cresselia.aif | Bin 22730 -> 22678 bytes sound/direct_sound_samples/cries/croagunk.aif | Bin 15758 -> 15706 bytes sound/direct_sound_samples/cries/crobat.aif | Bin 11586 -> 11534 bytes sound/direct_sound_samples/cries/crocalor.aif | Bin 14244 -> 14244 bytes sound/direct_sound_samples/cries/croconaw.aif | Bin 10122 -> 10070 bytes sound/direct_sound_samples/cries/crustle.aif | Bin 16916 -> 16890 bytes .../direct_sound_samples/cries/cryogonal.aif | Bin 19354 -> 19328 bytes sound/direct_sound_samples/cries/cubchoo.aif | Bin 7918 -> 7892 bytes sound/direct_sound_samples/cries/cubone.aif | Bin 7582 -> 7530 bytes sound/direct_sound_samples/cries/cutiefly.aif | Bin 12690 -> 12612 bytes sound/direct_sound_samples/cries/cyclizar.aif | Bin 28750 -> 28750 bytes .../direct_sound_samples/cries/cyndaquil.aif | Bin 3554 -> 3502 bytes sound/direct_sound_samples/cries/dachsbun.aif | Bin 14612 -> 14612 bytes sound/direct_sound_samples/cries/darkrai.aif | Bin 17454 -> 17402 bytes .../direct_sound_samples/cries/darmanitan.aif | Bin 17862 -> 17836 bytes sound/direct_sound_samples/cries/dartrix.aif | Bin 18968 -> 18892 bytes sound/direct_sound_samples/cries/darumaka.aif | Bin 18460 -> 18434 bytes .../direct_sound_samples/cries/decidueye.aif | Bin 26506 -> 26426 bytes sound/direct_sound_samples/cries/dedenne.aif | Bin 8924 -> 8846 bytes sound/direct_sound_samples/cries/deerling.aif | Bin 9774 -> 9748 bytes sound/direct_sound_samples/cries/deino.aif | Bin 19200 -> 19174 bytes sound/direct_sound_samples/cries/delcatty.aif | Bin 10542 -> 10490 bytes sound/direct_sound_samples/cries/delibird.aif | Bin 8118 -> 8066 bytes sound/direct_sound_samples/cries/delphox.aif | Bin 23154 -> 23078 bytes sound/direct_sound_samples/cries/deoxys.aif | Bin 10414 -> 10362 bytes sound/direct_sound_samples/cries/dewgong.aif | Bin 10570 -> 10518 bytes sound/direct_sound_samples/cries/dewott.aif | Bin 7742 -> 7716 bytes sound/direct_sound_samples/cries/dewpider.aif | Bin 6412 -> 6334 bytes sound/direct_sound_samples/cries/dhelmise.aif | Bin 23992 -> 23914 bytes sound/direct_sound_samples/cries/dialga.aif | Bin 21690 -> 21638 bytes sound/direct_sound_samples/cries/diancie.aif | Bin 25668 -> 25590 bytes .../direct_sound_samples/cries/diggersby.aif | Bin 19810 -> 19728 bytes sound/direct_sound_samples/cries/diglett.aif | Bin 9722 -> 9670 bytes sound/direct_sound_samples/cries/dipplin.aif | Bin 15450 -> 15450 bytes sound/direct_sound_samples/cries/ditto.aif | Bin 5590 -> 5538 bytes sound/direct_sound_samples/cries/dodrio.aif | Bin 9738 -> 9686 bytes sound/direct_sound_samples/cries/doduo.aif | Bin 9642 -> 9590 bytes sound/direct_sound_samples/cries/donphan.aif | Bin 8578 -> 8526 bytes sound/direct_sound_samples/cries/doublade.aif | Bin 12690 -> 12612 bytes sound/direct_sound_samples/cries/dragalge.aif | Bin 26504 -> 26426 bytes .../direct_sound_samples/cries/dragonair.aif | Bin 8342 -> 8290 bytes .../direct_sound_samples/cries/dragonite.aif | Bin 9526 -> 9474 bytes sound/direct_sound_samples/cries/drakloak.aif | Bin 20164 -> 20164 bytes sound/direct_sound_samples/cries/drampa.aif | Bin 22734 -> 22660 bytes sound/direct_sound_samples/cries/drapion.aif | Bin 11610 -> 11558 bytes sound/direct_sound_samples/cries/dratini.aif | Bin 5838 -> 5786 bytes sound/direct_sound_samples/cries/dreepy.aif | Bin 19522 -> 19522 bytes sound/direct_sound_samples/cries/drifblim.aif | Bin 19214 -> 19162 bytes sound/direct_sound_samples/cries/drifloon.aif | Bin 12978 -> 12926 bytes sound/direct_sound_samples/cries/drilbur.aif | Bin 14062 -> 14036 bytes sound/direct_sound_samples/cries/drowzee.aif | Bin 14518 -> 14466 bytes .../direct_sound_samples/cries/druddigon.aif | Bin 19220 -> 19194 bytes sound/direct_sound_samples/cries/ducklett.aif | Bin 3832 -> 3806 bytes .../cries/dudunsparce.aif | Bin 25562 -> 25562 bytes sound/direct_sound_samples/cries/dugtrio.aif | Bin 9710 -> 9658 bytes .../direct_sound_samples/cries/dunsparce.aif | Bin 7950 -> 7898 bytes sound/direct_sound_samples/cries/duosion.aif | Bin 10804 -> 10778 bytes sound/direct_sound_samples/cries/durant.aif | Bin 12682 -> 12656 bytes sound/direct_sound_samples/cries/dusclops.aif | Bin 6882 -> 6830 bytes sound/direct_sound_samples/cries/dusknoir.aif | Bin 22822 -> 22770 bytes sound/direct_sound_samples/cries/duskull.aif | Bin 5334 -> 5282 bytes sound/direct_sound_samples/cries/dustox.aif | Bin 6362 -> 6310 bytes sound/direct_sound_samples/cries/dwebble.aif | Bin 24024 -> 23990 bytes .../direct_sound_samples/cries/eelektrik.aif | Bin 13366 -> 13340 bytes .../direct_sound_samples/cries/eelektross.aif | Bin 18394 -> 18368 bytes sound/direct_sound_samples/cries/eevee.aif | Bin 7130 -> 7078 bytes sound/direct_sound_samples/cries/ekans.aif | Bin 9650 -> 9598 bytes sound/direct_sound_samples/cries/eldegoss.aif | Bin 24860 -> 24860 bytes .../direct_sound_samples/cries/electabuzz.aif | Bin 15406 -> 15354 bytes .../direct_sound_samples/cries/electivire.aif | Bin 23298 -> 23246 bytes .../direct_sound_samples/cries/electrike.aif | Bin 6210 -> 6158 bytes .../direct_sound_samples/cries/electrode.aif | Bin 12590 -> 12538 bytes sound/direct_sound_samples/cries/elekid.aif | Bin 5310 -> 5258 bytes sound/direct_sound_samples/cries/elgyem.aif | Bin 10922 -> 10864 bytes sound/direct_sound_samples/cries/emboar.aif | Bin 14456 -> 14430 bytes sound/direct_sound_samples/cries/emolga.aif | Bin 5052 -> 5026 bytes sound/direct_sound_samples/cries/empoleon.aif | Bin 23106 -> 23054 bytes sound/direct_sound_samples/cries/entei.aif | Bin 10222 -> 10170 bytes .../direct_sound_samples/cries/escavalier.aif | Bin 14192 -> 14166 bytes sound/direct_sound_samples/cries/espeon.aif | Bin 9854 -> 9802 bytes sound/direct_sound_samples/cries/espurr.aif | Bin 4734 -> 4660 bytes .../direct_sound_samples/cries/eternatus.aif | Bin 35430 -> 35430 bytes .../direct_sound_samples/cries/excadrill.aif | Bin 19510 -> 19484 bytes .../direct_sound_samples/cries/exeggcute.aif | Bin 9442 -> 9390 bytes .../direct_sound_samples/cries/exeggutor.aif | Bin 15906 -> 15854 bytes sound/direct_sound_samples/cries/exploud.aif | Bin 14110 -> 14058 bytes .../direct_sound_samples/cries/farfetchd.aif | Bin 3790 -> 3738 bytes .../direct_sound_samples/cries/farigiraf.aif | Bin 18612 -> 18612 bytes sound/direct_sound_samples/cries/fearow.aif | Bin 8626 -> 8574 bytes sound/direct_sound_samples/cries/feebas.aif | Bin 3958 -> 3906 bytes sound/direct_sound_samples/cries/fennekin.aif | Bin 11434 -> 11356 bytes .../direct_sound_samples/cries/feraligatr.aif | Bin 12738 -> 12686 bytes .../direct_sound_samples/cries/ferroseed.aif | Bin 8942 -> 8916 bytes .../direct_sound_samples/cries/ferrothorn.aif | Bin 11694 -> 11668 bytes sound/direct_sound_samples/cries/fidough.aif | Bin 11472 -> 11472 bytes sound/direct_sound_samples/cries/finneon.aif | Bin 17946 -> 17894 bytes sound/direct_sound_samples/cries/flaaffy.aif | Bin 6878 -> 6826 bytes sound/direct_sound_samples/cries/flabebe.aif | Bin 13960 -> 13868 bytes sound/direct_sound_samples/cries/flamigo.aif | Bin 15168 -> 15168 bytes sound/direct_sound_samples/cries/flareon.aif | Bin 7774 -> 7722 bytes .../cries/fletchinder.aif | Bin 11442 -> 11356 bytes .../direct_sound_samples/cries/fletchling.aif | Bin 10184 -> 10102 bytes sound/direct_sound_samples/cries/floatzel.aif | Bin 16966 -> 16914 bytes sound/direct_sound_samples/cries/floette.aif | Bin 19388 -> 19310 bytes .../cries/floette_eternal_flower.aif | Bin 18990 -> 18892 bytes sound/direct_sound_samples/cries/florges.aif | Bin 22318 -> 22240 bytes sound/direct_sound_samples/cries/flygon.aif | Bin 12998 -> 12946 bytes sound/direct_sound_samples/cries/fomantis.aif | Bin 10180 -> 10102 bytes sound/direct_sound_samples/cries/foongus.aif | Bin 7608 -> 7550 bytes .../direct_sound_samples/cries/forretress.aif | Bin 10014 -> 9962 bytes sound/direct_sound_samples/cries/fraxure.aif | Bin 19364 -> 19338 bytes sound/direct_sound_samples/cries/frigibax.aif | Bin 8332 -> 8332 bytes sound/direct_sound_samples/cries/frillish.aif | Bin 15272 -> 15246 bytes sound/direct_sound_samples/cries/froakie.aif | Bin 9758 -> 9682 bytes .../direct_sound_samples/cries/frogadier.aif | Bin 12692 -> 12612 bytes sound/direct_sound_samples/cries/froslass.aif | Bin 23486 -> 23434 bytes sound/direct_sound_samples/cries/fuecoco.aif | Bin 7480 -> 7480 bytes sound/direct_sound_samples/cries/furfrou.aif | Bin 7668 -> 7590 bytes sound/direct_sound_samples/cries/furret.aif | Bin 3194 -> 3142 bytes sound/direct_sound_samples/cries/gabite.aif | Bin 7186 -> 7134 bytes sound/direct_sound_samples/cries/gallade.aif | Bin 19774 -> 19722 bytes .../cries/gallade_mega.aif | Bin 27612 -> 27612 bytes .../direct_sound_samples/cries/galvantula.aif | Bin 13312 -> 13286 bytes sound/direct_sound_samples/cries/garbodor.aif | Bin 19224 -> 19198 bytes sound/direct_sound_samples/cries/garchomp.aif | Bin 12578 -> 12526 bytes .../direct_sound_samples/cries/gardevoir.aif | Bin 12178 -> 12126 bytes sound/direct_sound_samples/cries/gastly.aif | Bin 11646 -> 11594 bytes .../direct_sound_samples/cries/gastrodon.aif | Bin 18450 -> 18398 bytes sound/direct_sound_samples/cries/genesect.aif | Bin 13888 -> 13862 bytes sound/direct_sound_samples/cries/gengar.aif | Bin 7398 -> 7346 bytes sound/direct_sound_samples/cries/geodude.aif | Bin 11842 -> 11790 bytes sound/direct_sound_samples/cries/gible.aif | Bin 5082 -> 5030 bytes sound/direct_sound_samples/cries/gigalith.aif | Bin 19316 -> 19290 bytes .../direct_sound_samples/cries/gimmighoul.aif | Bin 26028 -> 26028 bytes .../direct_sound_samples/cries/girafarig.aif | Bin 7370 -> 7318 bytes sound/direct_sound_samples/cries/giratina.aif | Bin 21086 -> 21034 bytes sound/direct_sound_samples/cries/glaceon.aif | Bin 22782 -> 22730 bytes sound/direct_sound_samples/cries/glalie.aif | Bin 10446 -> 10394 bytes .../cries/glalie_mega.aif | Bin 24248 -> 24248 bytes sound/direct_sound_samples/cries/glameow.aif | Bin 6626 -> 6574 bytes .../direct_sound_samples/cries/glastrier.aif | Bin 30264 -> 30264 bytes sound/direct_sound_samples/cries/gligar.aif | Bin 6094 -> 6042 bytes sound/direct_sound_samples/cries/glimmet.aif | Bin 23012 -> 23012 bytes sound/direct_sound_samples/cries/gliscor.aif | Bin 15122 -> 15070 bytes sound/direct_sound_samples/cries/gloom.aif | Bin 6270 -> 6218 bytes sound/direct_sound_samples/cries/gogoat.aif | Bin 18966 -> 18892 bytes sound/direct_sound_samples/cries/golbat.aif | Bin 9698 -> 9646 bytes sound/direct_sound_samples/cries/goldeen.aif | Bin 4962 -> 4910 bytes sound/direct_sound_samples/cries/golduck.aif | Bin 5670 -> 5618 bytes sound/direct_sound_samples/cries/golem.aif | Bin 7106 -> 7054 bytes sound/direct_sound_samples/cries/golett.aif | Bin 10846 -> 10820 bytes .../direct_sound_samples/cries/golisopod.aif | Bin 20648 -> 20566 bytes sound/direct_sound_samples/cries/golurk.aif | Bin 18540 -> 18514 bytes sound/direct_sound_samples/cries/goodra.aif | Bin 16036 -> 15962 bytes sound/direct_sound_samples/cries/goomy.aif | Bin 13524 -> 13450 bytes sound/direct_sound_samples/cries/gorebyss.aif | Bin 11202 -> 11150 bytes sound/direct_sound_samples/cries/gothita.aif | Bin 5974 -> 5948 bytes .../direct_sound_samples/cries/gothitelle.aif | Bin 23332 -> 23278 bytes .../direct_sound_samples/cries/gothorita.aif | Bin 13612 -> 13586 bytes .../direct_sound_samples/cries/gourgeist.aif | Bin 26508 -> 26426 bytes .../cries/gourgeist_super.aif | Bin 26524 -> 26426 bytes sound/direct_sound_samples/cries/granbull.aif | Bin 11806 -> 11754 bytes sound/direct_sound_samples/cries/graveler.aif | Bin 13926 -> 13874 bytes sound/direct_sound_samples/cries/greninja.aif | Bin 16040 -> 15962 bytes sound/direct_sound_samples/cries/grimer.aif | Bin 5298 -> 5246 bytes sound/direct_sound_samples/cries/grotle.aif | Bin 9442 -> 9390 bytes sound/direct_sound_samples/cries/groudon.aif | Bin 18462 -> 18410 bytes .../cries/groudon_primal.aif | Bin 33164 -> 33164 bytes sound/direct_sound_samples/cries/grovyle.aif | Bin 10222 -> 10170 bytes .../direct_sound_samples/cries/growlithe.aif | Bin 6722 -> 6670 bytes sound/direct_sound_samples/cries/grubbin.aif | Bin 10598 -> 10520 bytes sound/direct_sound_samples/cries/grumpig.aif | Bin 6342 -> 6290 bytes sound/direct_sound_samples/cries/gulpin.aif | Bin 4054 -> 4002 bytes sound/direct_sound_samples/cries/gumshoos.aif | Bin 24830 -> 24752 bytes sound/direct_sound_samples/cries/gurdurr.aif | Bin 18888 -> 18862 bytes sound/direct_sound_samples/cries/guzzlord.aif | Bin 30468 -> 30390 bytes sound/direct_sound_samples/cries/gyarados.aif | Bin 10102 -> 10050 bytes .../cries/gyarados_mega.aif | Bin 22972 -> 22972 bytes sound/direct_sound_samples/cries/hakamo_o.aif | Bin 19806 -> 19728 bytes sound/direct_sound_samples/cries/happiny.aif | Bin 6942 -> 6890 bytes sound/direct_sound_samples/cries/hariyama.aif | Bin 8374 -> 8322 bytes sound/direct_sound_samples/cries/hattrem.aif | Bin 20004 -> 20004 bytes sound/direct_sound_samples/cries/haunter.aif | Bin 11738 -> 11686 bytes sound/direct_sound_samples/cries/hawlucha.aif | Bin 13946 -> 13868 bytes sound/direct_sound_samples/cries/haxorus.aif | Bin 19508 -> 19482 bytes sound/direct_sound_samples/cries/heatmor.aif | Bin 19320 -> 19294 bytes sound/direct_sound_samples/cries/heatran.aif | Bin 23410 -> 23358 bytes .../direct_sound_samples/cries/heliolisk.aif | Bin 19392 -> 19310 bytes .../direct_sound_samples/cries/helioptile.aif | Bin 14370 -> 14288 bytes .../direct_sound_samples/cries/heracross.aif | Bin 9170 -> 9118 bytes .../cries/heracross_mega.aif | Bin 23472 -> 23472 bytes sound/direct_sound_samples/cries/herdier.aif | Bin 9844 -> 9818 bytes .../direct_sound_samples/cries/hippopotas.aif | Bin 17742 -> 17690 bytes .../direct_sound_samples/cries/hippowdon.aif | Bin 23110 -> 23058 bytes .../direct_sound_samples/cries/hitmonchan.aif | Bin 8930 -> 8878 bytes .../direct_sound_samples/cries/hitmonlee.aif | Bin 9342 -> 9290 bytes .../direct_sound_samples/cries/hitmontop.aif | Bin 6962 -> 6910 bytes sound/direct_sound_samples/cries/ho_oh.aif | Bin 11286 -> 11234 bytes .../direct_sound_samples/cries/honchkrow.aif | Bin 17278 -> 17226 bytes sound/direct_sound_samples/cries/honedge.aif | Bin 12690 -> 12612 bytes .../cries/hoopa_confined.aif | Bin 16872 -> 16798 bytes .../cries/hoopa_unbound.aif | Bin 18158 -> 18158 bytes sound/direct_sound_samples/cries/hoothoot.aif | Bin 5482 -> 5430 bytes sound/direct_sound_samples/cries/hoppip.aif | Bin 4250 -> 4198 bytes sound/direct_sound_samples/cries/horsea.aif | Bin 4778 -> 4726 bytes sound/direct_sound_samples/cries/houndoom.aif | Bin 9846 -> 9794 bytes .../cries/houndoom_mega.aif | Bin 24636 -> 24636 bytes sound/direct_sound_samples/cries/houndour.aif | Bin 6358 -> 6306 bytes .../direct_sound_samples/cries/houndstone.aif | Bin 24988 -> 24988 bytes sound/direct_sound_samples/cries/huntail.aif | Bin 7970 -> 7918 bytes .../direct_sound_samples/cries/hydrapple.aif | Bin 25476 -> 25476 bytes .../direct_sound_samples/cries/hydreigon.aif | Bin 23140 -> 23086 bytes sound/direct_sound_samples/cries/hypno.aif | Bin 14474 -> 14422 bytes .../direct_sound_samples/cries/igglybuff.aif | Bin 3542 -> 3490 bytes sound/direct_sound_samples/cries/illumise.aif | Bin 8562 -> 8510 bytes .../direct_sound_samples/cries/incineroar.aif | Bin 23996 -> 23914 bytes .../cries/indeedee_female.aif | Bin 14170 -> 14170 bytes .../direct_sound_samples/cries/infernape.aif | Bin 22106 -> 22054 bytes sound/direct_sound_samples/cries/inkay.aif | Bin 4314 -> 4240 bytes sound/direct_sound_samples/cries/inteleon.aif | Bin 11642 -> 11642 bytes .../cries/iron_boulder.aif | Bin 25938 -> 25938 bytes .../cries/iron_bundle.aif | Bin 29508 -> 29508 bytes .../direct_sound_samples/cries/iron_crown.aif | Bin 25938 -> 25938 bytes .../direct_sound_samples/cries/iron_hands.aif | Bin 28958 -> 28958 bytes .../cries/iron_thorns.aif | Bin 28942 -> 28942 bytes sound/direct_sound_samples/cries/ivysaur.aif | Bin 8294 -> 8242 bytes sound/direct_sound_samples/cries/jangmo_o.aif | Bin 4318 -> 4240 bytes .../direct_sound_samples/cries/jellicent.aif | Bin 13402 -> 13376 bytes .../direct_sound_samples/cries/jigglypuff.aif | Bin 2746 -> 2694 bytes sound/direct_sound_samples/cries/jirachi.aif | Bin 6782 -> 6730 bytes sound/direct_sound_samples/cries/jolteon.aif | Bin 7930 -> 7878 bytes sound/direct_sound_samples/cries/joltik.aif | Bin 7104 -> 7078 bytes sound/direct_sound_samples/cries/jumpluff.aif | Bin 8130 -> 8078 bytes sound/direct_sound_samples/cries/jynx.aif | Bin 23630 -> 23578 bytes sound/direct_sound_samples/cries/kabuto.aif | Bin 6194 -> 6142 bytes sound/direct_sound_samples/cries/kabutops.aif | Bin 6890 -> 6838 bytes sound/direct_sound_samples/cries/kadabra.aif | Bin 13434 -> 13382 bytes sound/direct_sound_samples/cries/kakuna.aif | Bin 9130 -> 9078 bytes .../direct_sound_samples/cries/kangaskhan.aif | Bin 9358 -> 9306 bytes .../cries/kangaskhan_mega.aif | Bin 22136 -> 22136 bytes .../direct_sound_samples/cries/karrablast.aif | Bin 11058 -> 11032 bytes sound/direct_sound_samples/cries/kartana.aif | Bin 26504 -> 26426 bytes sound/direct_sound_samples/cries/kecleon.aif | Bin 4226 -> 4174 bytes sound/direct_sound_samples/cries/keldeo.aif | Bin 13144 -> 13086 bytes sound/direct_sound_samples/cries/kingdra.aif | Bin 6946 -> 6894 bytes sound/direct_sound_samples/cries/kingler.aif | Bin 12158 -> 12106 bytes sound/direct_sound_samples/cries/kirlia.aif | Bin 6126 -> 6074 bytes sound/direct_sound_samples/cries/klang.aif | Bin 10914 -> 10888 bytes sound/direct_sound_samples/cries/kleavor.aif | Bin 10444 -> 10444 bytes sound/direct_sound_samples/cries/klink.aif | Bin 10444 -> 10418 bytes .../direct_sound_samples/cries/klinklang.aif | Bin 21736 -> 21682 bytes sound/direct_sound_samples/cries/koffing.aif | Bin 10178 -> 10126 bytes sound/direct_sound_samples/cries/komala.aif | Bin 14362 -> 14288 bytes sound/direct_sound_samples/cries/kommo_o.aif | Bin 26504 -> 26426 bytes sound/direct_sound_samples/cries/krabby.aif | Bin 12138 -> 12086 bytes .../direct_sound_samples/cries/kricketot.aif | Bin 13778 -> 13726 bytes .../direct_sound_samples/cries/kricketune.aif | Bin 22186 -> 22134 bytes sound/direct_sound_samples/cries/krokorok.aif | Bin 15384 -> 15358 bytes .../direct_sound_samples/cries/krookodile.aif | Bin 18702 -> 18676 bytes sound/direct_sound_samples/cries/kyogre.aif | Bin 17806 -> 17754 bytes .../cries/kyogre_primal.aif | Bin 33164 -> 33164 bytes sound/direct_sound_samples/cries/kyurem.aif | Bin 18324 -> 18298 bytes .../cries/kyurem_black.aif | Bin 21688 -> 21630 bytes .../cries/kyurem_white.aif | Bin 21028 -> 20970 bytes sound/direct_sound_samples/cries/lairon.aif | Bin 10418 -> 10366 bytes sound/direct_sound_samples/cries/lampent.aif | Bin 19430 -> 19404 bytes .../cries/landorus_incarnate.aif | Bin 19410 -> 19384 bytes .../cries/landorus_therian.aif | Bin 13208 -> 13180 bytes sound/direct_sound_samples/cries/lanturn.aif | Bin 5306 -> 5254 bytes sound/direct_sound_samples/cries/lapras.aif | Bin 7434 -> 7382 bytes sound/direct_sound_samples/cries/larvesta.aif | Bin 12704 -> 12678 bytes sound/direct_sound_samples/cries/larvitar.aif | Bin 6374 -> 6322 bytes sound/direct_sound_samples/cries/latias.aif | Bin 6122 -> 6070 bytes sound/direct_sound_samples/cries/latios.aif | Bin 10982 -> 10930 bytes sound/direct_sound_samples/cries/leafeon.aif | Bin 13410 -> 13358 bytes sound/direct_sound_samples/cries/leavanny.aif | Bin 13750 -> 13724 bytes sound/direct_sound_samples/cries/ledian.aif | Bin 4238 -> 4186 bytes sound/direct_sound_samples/cries/ledyba.aif | Bin 3530 -> 3478 bytes .../direct_sound_samples/cries/lickilicky.aif | Bin 18434 -> 18382 bytes .../direct_sound_samples/cries/lickitung.aif | Bin 7594 -> 7542 bytes sound/direct_sound_samples/cries/liepard.aif | Bin 9328 -> 9302 bytes sound/direct_sound_samples/cries/lileep.aif | Bin 4862 -> 4810 bytes .../direct_sound_samples/cries/lilligant.aif | Bin 13516 -> 13490 bytes sound/direct_sound_samples/cries/lillipup.aif | Bin 11676 -> 11650 bytes sound/direct_sound_samples/cries/linoone.aif | Bin 15274 -> 15222 bytes sound/direct_sound_samples/cries/litleo.aif | Bin 17292 -> 17218 bytes sound/direct_sound_samples/cries/litten.aif | Bin 13524 -> 13450 bytes sound/direct_sound_samples/cries/litwick.aif | Bin 11148 -> 11122 bytes sound/direct_sound_samples/cries/lokix.aif | Bin 13050 -> 13050 bytes sound/direct_sound_samples/cries/lombre.aif | Bin 7306 -> 7254 bytes sound/direct_sound_samples/cries/lopunny.aif | Bin 21994 -> 21942 bytes .../cries/lopunny_mega.aif | Bin 30458 -> 30458 bytes sound/direct_sound_samples/cries/lotad.aif | Bin 2258 -> 2206 bytes sound/direct_sound_samples/cries/loudred.aif | Bin 6606 -> 6554 bytes sound/direct_sound_samples/cries/lucario.aif | Bin 8534 -> 8482 bytes sound/direct_sound_samples/cries/ludicolo.aif | Bin 8422 -> 8370 bytes sound/direct_sound_samples/cries/lugia.aif | Bin 18926 -> 18874 bytes sound/direct_sound_samples/cries/lumineon.aif | Bin 23098 -> 23046 bytes sound/direct_sound_samples/cries/lunala.aif | Bin 23990 -> 23916 bytes sound/direct_sound_samples/cries/lunatone.aif | Bin 11982 -> 11930 bytes sound/direct_sound_samples/cries/lurantis.aif | Bin 14366 -> 14288 bytes sound/direct_sound_samples/cries/luvdisc.aif | Bin 2482 -> 2430 bytes sound/direct_sound_samples/cries/luxio.aif | Bin 22870 -> 22818 bytes sound/direct_sound_samples/cries/luxray.aif | Bin 20826 -> 20774 bytes .../cries/lycanroc_midday.aif | Bin 13966 -> 13868 bytes .../cries/lycanroc_midnight.aif | Bin 21966 -> 21966 bytes .../direct_sound_samples/cries/mabosstiff.aif | Bin 28910 -> 28910 bytes sound/direct_sound_samples/cries/machamp.aif | Bin 8282 -> 8230 bytes sound/direct_sound_samples/cries/machoke.aif | Bin 6806 -> 6754 bytes sound/direct_sound_samples/cries/machop.aif | Bin 6722 -> 6670 bytes sound/direct_sound_samples/cries/magby.aif | Bin 7242 -> 7190 bytes sound/direct_sound_samples/cries/magcargo.aif | Bin 10510 -> 10458 bytes sound/direct_sound_samples/cries/magearna.aif | Bin 18970 -> 18892 bytes sound/direct_sound_samples/cries/magikarp.aif | Bin 9518 -> 9466 bytes sound/direct_sound_samples/cries/magmar.aif | Bin 7762 -> 7710 bytes .../direct_sound_samples/cries/magmortar.aif | Bin 17322 -> 17270 bytes .../direct_sound_samples/cries/magnemite.aif | Bin 9634 -> 9582 bytes sound/direct_sound_samples/cries/magneton.aif | Bin 11938 -> 11886 bytes .../direct_sound_samples/cries/magnezone.aif | Bin 22478 -> 22426 bytes sound/direct_sound_samples/cries/makuhita.aif | Bin 3730 -> 3678 bytes sound/direct_sound_samples/cries/malamar.aif | Bin 20226 -> 20148 bytes .../direct_sound_samples/cries/mamoswine.aif | Bin 22118 -> 22066 bytes sound/direct_sound_samples/cries/manaphy.aif | Bin 19066 -> 19014 bytes .../direct_sound_samples/cries/mandibuzz.aif | Bin 19490 -> 19464 bytes .../direct_sound_samples/cries/manectric.aif | Bin 10518 -> 10466 bytes .../cries/manectric_mega.aif | Bin 25930 -> 25930 bytes sound/direct_sound_samples/cries/mankey.aif | Bin 8202 -> 8150 bytes sound/direct_sound_samples/cries/mantine.aif | Bin 7910 -> 7858 bytes sound/direct_sound_samples/cries/mantyke.aif | Bin 6414 -> 6362 bytes sound/direct_sound_samples/cries/maractus.aif | Bin 12760 -> 12734 bytes sound/direct_sound_samples/cries/mareanie.aif | Bin 15620 -> 15542 bytes sound/direct_sound_samples/cries/mareep.aif | Bin 3718 -> 3666 bytes sound/direct_sound_samples/cries/marill.aif | Bin 6562 -> 6510 bytes sound/direct_sound_samples/cries/marowak.aif | Bin 7242 -> 7190 bytes .../direct_sound_samples/cries/marshadow.aif | Bin 22742 -> 22660 bytes .../direct_sound_samples/cries/marshtomp.aif | Bin 8522 -> 8470 bytes .../direct_sound_samples/cries/masquerain.aif | Bin 9854 -> 9802 bytes .../cries/maushold_family_of_three.aif | Bin 18322 -> 18322 bytes sound/direct_sound_samples/cries/mawile.aif | Bin 5782 -> 5730 bytes sound/direct_sound_samples/cries/medicham.aif | Bin 8270 -> 8218 bytes .../cries/medicham_mega.aif | Bin 21402 -> 21402 bytes sound/direct_sound_samples/cries/meditite.aif | Bin 4102 -> 4050 bytes sound/direct_sound_samples/cries/meganium.aif | Bin 8126 -> 8074 bytes sound/direct_sound_samples/cries/melmetal.aif | Bin 18686 -> 18686 bytes sound/direct_sound_samples/cries/meloetta.aif | Bin 19126 -> 19100 bytes sound/direct_sound_samples/cries/meltan.aif | Bin 11720 -> 11720 bytes sound/direct_sound_samples/cries/meowstic.aif | Bin 6412 -> 6334 bytes sound/direct_sound_samples/cries/meowth.aif | Bin 4822 -> 4770 bytes sound/direct_sound_samples/cries/mesprit.aif | Bin 18570 -> 18518 bytes .../direct_sound_samples/cries/metagross.aif | Bin 19670 -> 19618 bytes .../cries/metagross_mega.aif | Bin 33174 -> 33174 bytes sound/direct_sound_samples/cries/metang.aif | Bin 9422 -> 9370 bytes sound/direct_sound_samples/cries/metapod.aif | Bin 11646 -> 11594 bytes sound/direct_sound_samples/cries/mew.aif | Bin 15170 -> 15118 bytes sound/direct_sound_samples/cries/mewtwo.aif | Bin 15170 -> 15118 bytes sound/direct_sound_samples/cries/mienfoo.aif | Bin 19414 -> 19388 bytes sound/direct_sound_samples/cries/mienshao.aif | Bin 13452 -> 13426 bytes .../direct_sound_samples/cries/mightyena.aif | Bin 9774 -> 9722 bytes sound/direct_sound_samples/cries/milotic.aif | Bin 19566 -> 19514 bytes sound/direct_sound_samples/cries/miltank.aif | Bin 7450 -> 7398 bytes sound/direct_sound_samples/cries/mime_jr.aif | Bin 9062 -> 9010 bytes sound/direct_sound_samples/cries/mimikyu.aif | Bin 15202 -> 15124 bytes sound/direct_sound_samples/cries/minccino.aif | Bin 11730 -> 11704 bytes sound/direct_sound_samples/cries/minior.aif | Bin 18548 -> 18474 bytes sound/direct_sound_samples/cries/minun.aif | Bin 8030 -> 7978 bytes .../direct_sound_samples/cries/misdreavus.aif | Bin 5842 -> 5790 bytes .../direct_sound_samples/cries/mismagius.aif | Bin 18138 -> 18086 bytes sound/direct_sound_samples/cries/moltres.aif | Bin 11822 -> 11770 bytes sound/direct_sound_samples/cries/monferno.aif | Bin 19062 -> 19010 bytes sound/direct_sound_samples/cries/morelull.aif | Bin 17714 -> 17636 bytes sound/direct_sound_samples/cries/mothim.aif | Bin 9938 -> 9886 bytes sound/direct_sound_samples/cries/mr_mime.aif | Bin 9470 -> 9418 bytes sound/direct_sound_samples/cries/mudbray.aif | Bin 13946 -> 13868 bytes sound/direct_sound_samples/cries/mudkip.aif | Bin 3802 -> 3750 bytes sound/direct_sound_samples/cries/mudsdale.aif | Bin 17714 -> 17636 bytes sound/direct_sound_samples/cries/muk.aif | Bin 7398 -> 7346 bytes sound/direct_sound_samples/cries/munchlax.aif | Bin 5786 -> 5734 bytes sound/direct_sound_samples/cries/munna.aif | Bin 14240 -> 14214 bytes sound/direct_sound_samples/cries/murkrow.aif | Bin 8394 -> 8342 bytes sound/direct_sound_samples/cries/musharna.aif | Bin 23176 -> 23122 bytes .../direct_sound_samples/cries/naclstack.aif | Bin 31046 -> 31046 bytes .../direct_sound_samples/cries/naganadel.aif | Bin 27762 -> 27680 bytes sound/direct_sound_samples/cries/natu.aif | Bin 5318 -> 5266 bytes sound/direct_sound_samples/cries/necrozma.aif | Bin 26504 -> 26426 bytes .../cries/necrozma_dawn_wings.aif | Bin 26392 -> 26298 bytes .../cries/necrozma_dusk_mane.aif | Bin 27232 -> 27138 bytes .../cries/necrozma_ultra.aif | Bin 26572 -> 26478 bytes sound/direct_sound_samples/cries/nidoking.aif | Bin 12202 -> 12150 bytes .../direct_sound_samples/cries/nidoqueen.aif | Bin 8450 -> 8398 bytes .../direct_sound_samples/cries/nidoran_f.aif | Bin 4882 -> 4830 bytes .../direct_sound_samples/cries/nidoran_m.aif | Bin 5242 -> 5190 bytes sound/direct_sound_samples/cries/nidorina.aif | Bin 6418 -> 6366 bytes sound/direct_sound_samples/cries/nidorino.aif | Bin 6066 -> 6014 bytes sound/direct_sound_samples/cries/nihilego.aif | Bin 29490 -> 29412 bytes sound/direct_sound_samples/cries/nincada.aif | Bin 3270 -> 3218 bytes .../direct_sound_samples/cries/ninetales.aif | Bin 12198 -> 12146 bytes sound/direct_sound_samples/cries/ninjask.aif | Bin 6110 -> 6058 bytes sound/direct_sound_samples/cries/noctowl.aif | Bin 10590 -> 10538 bytes sound/direct_sound_samples/cries/noibat.aif | Bin 14480 -> 14466 bytes sound/direct_sound_samples/cries/noivern.aif | Bin 19388 -> 19310 bytes sound/direct_sound_samples/cries/nosepass.aif | Bin 6722 -> 6670 bytes sound/direct_sound_samples/cries/numel.aif | Bin 4690 -> 4638 bytes sound/direct_sound_samples/cries/nuzleaf.aif | Bin 5738 -> 5686 bytes sound/direct_sound_samples/cries/nymble.aif | Bin 7940 -> 7940 bytes .../direct_sound_samples/cries/octillery.aif | Bin 13110 -> 13058 bytes sound/direct_sound_samples/cries/oddish.aif | Bin 7322 -> 7270 bytes sound/direct_sound_samples/cries/ogerpon.aif | Bin 18804 -> 18804 bytes sound/direct_sound_samples/cries/okidogi.aif | Bin 29328 -> 29328 bytes sound/direct_sound_samples/cries/omanyte.aif | Bin 6698 -> 6646 bytes sound/direct_sound_samples/cries/omastar.aif | Bin 6690 -> 6638 bytes sound/direct_sound_samples/cries/onix.aif | Bin 12366 -> 12314 bytes sound/direct_sound_samples/cries/oranguru.aif | Bin 21900 -> 21822 bytes sound/direct_sound_samples/cries/orbeetle.aif | Bin 23562 -> 23562 bytes .../cries/oricorio_baile.aif | Bin 18152 -> 18054 bytes .../cries/oricorio_pau.aif | Bin 26520 -> 26426 bytes .../cries/oricorio_sensu.aif | Bin 15222 -> 15124 bytes sound/direct_sound_samples/cries/orthworm.aif | Bin 39144 -> 39144 bytes sound/direct_sound_samples/cries/oshawott.aif | Bin 4496 -> 4470 bytes sound/direct_sound_samples/cries/overqwil.aif | Bin 7750 -> 7750 bytes .../direct_sound_samples/cries/pachirisu.aif | Bin 6350 -> 6298 bytes .../cries/palafin_hero.aif | Bin 12614 -> 12614 bytes .../cries/palafin_zero.aif | Bin 25498 -> 25498 bytes sound/direct_sound_samples/cries/palkia.aif | Bin 22542 -> 22490 bytes .../direct_sound_samples/cries/palossand.aif | Bin 26508 -> 26426 bytes .../direct_sound_samples/cries/palpitoad.aif | Bin 13476 -> 13450 bytes sound/direct_sound_samples/cries/pancham.aif | Bin 10180 -> 10102 bytes sound/direct_sound_samples/cries/pangoro.aif | Bin 13528 -> 13450 bytes sound/direct_sound_samples/cries/panpour.aif | Bin 3986 -> 3960 bytes sound/direct_sound_samples/cries/pansage.aif | Bin 3840 -> 3814 bytes sound/direct_sound_samples/cries/pansear.aif | Bin 3892 -> 3866 bytes sound/direct_sound_samples/cries/paras.aif | Bin 13950 -> 13898 bytes sound/direct_sound_samples/cries/parasect.aif | Bin 15166 -> 15114 bytes .../direct_sound_samples/cries/passimian.aif | Bin 16880 -> 16798 bytes sound/direct_sound_samples/cries/patrat.aif | Bin 7042 -> 7016 bytes sound/direct_sound_samples/cries/pawmot.aif | Bin 28240 -> 28240 bytes sound/direct_sound_samples/cries/pawniard.aif | Bin 5646 -> 5620 bytes sound/direct_sound_samples/cries/pelipper.aif | Bin 5918 -> 5866 bytes sound/direct_sound_samples/cries/persian.aif | Bin 9438 -> 9386 bytes sound/direct_sound_samples/cries/petilil.aif | Bin 4746 -> 4720 bytes sound/direct_sound_samples/cries/phanpy.aif | Bin 5690 -> 5638 bytes sound/direct_sound_samples/cries/phantump.aif | Bin 19806 -> 19728 bytes .../direct_sound_samples/cries/pheromosa.aif | Bin 26508 -> 26426 bytes sound/direct_sound_samples/cries/phione.aif | Bin 14246 -> 14194 bytes sound/direct_sound_samples/cries/pichu.aif | Bin 3710 -> 3658 bytes sound/direct_sound_samples/cries/pidgeot.aif | Bin 8614 -> 8562 bytes .../cries/pidgeot_mega.aif | Bin 22048 -> 22048 bytes .../direct_sound_samples/cries/pidgeotto.aif | Bin 7538 -> 7486 bytes sound/direct_sound_samples/cries/pidgey.aif | Bin 2010 -> 1958 bytes sound/direct_sound_samples/cries/pidove.aif | Bin 6914 -> 6888 bytes sound/direct_sound_samples/cries/pignite.aif | Bin 17480 -> 17454 bytes sound/direct_sound_samples/cries/pikachu.aif | Bin 8342 -> 8290 bytes sound/direct_sound_samples/cries/pikipek.aif | Bin 11854 -> 11776 bytes .../direct_sound_samples/cries/piloswine.aif | Bin 6506 -> 6454 bytes sound/direct_sound_samples/cries/pineco.aif | Bin 6714 -> 6662 bytes sound/direct_sound_samples/cries/pinsir.aif | Bin 6210 -> 6158 bytes .../cries/pinsir_mega.aif | Bin 17202 -> 17202 bytes sound/direct_sound_samples/cries/piplup.aif | Bin 8218 -> 8166 bytes sound/direct_sound_samples/cries/plusle.aif | Bin 4530 -> 4478 bytes sound/direct_sound_samples/cries/poipole.aif | Bin 18468 -> 18390 bytes sound/direct_sound_samples/cries/politoed.aif | Bin 9138 -> 9086 bytes sound/direct_sound_samples/cries/poliwag.aif | Bin 5586 -> 5534 bytes .../direct_sound_samples/cries/poliwhirl.aif | Bin 3378 -> 3326 bytes .../direct_sound_samples/cries/poliwrath.aif | Bin 5606 -> 5554 bytes .../cries/poltchageist.aif | Bin 20962 -> 20962 bytes sound/direct_sound_samples/cries/ponyta.aif | Bin 7550 -> 7498 bytes .../direct_sound_samples/cries/poochyena.aif | Bin 4682 -> 4630 bytes sound/direct_sound_samples/cries/popplio.aif | Bin 9758 -> 9682 bytes sound/direct_sound_samples/cries/porygon.aif | Bin 10026 -> 9974 bytes sound/direct_sound_samples/cries/porygon2.aif | Bin 7878 -> 7826 bytes .../direct_sound_samples/cries/porygon_z.aif | Bin 19254 -> 19202 bytes .../direct_sound_samples/cries/primarina.aif | Bin 20648 -> 20566 bytes sound/direct_sound_samples/cries/primeape.aif | Bin 8110 -> 8058 bytes sound/direct_sound_samples/cries/prinplup.aif | Bin 12282 -> 12230 bytes .../direct_sound_samples/cries/probopass.aif | Bin 22894 -> 22842 bytes sound/direct_sound_samples/cries/psyduck.aif | Bin 6602 -> 6550 bytes .../direct_sound_samples/cries/pumpkaboo.aif | Bin 10602 -> 10520 bytes .../cries/pumpkaboo_super.aif | Bin 11874 -> 11776 bytes sound/direct_sound_samples/cries/pupitar.aif | Bin 4258 -> 4206 bytes sound/direct_sound_samples/cries/purrloin.aif | Bin 7410 -> 7384 bytes sound/direct_sound_samples/cries/purugly.aif | Bin 11882 -> 11830 bytes sound/direct_sound_samples/cries/pyroar.aif | Bin 21896 -> 21822 bytes .../direct_sound_samples/cries/pyukumuku.aif | Bin 10184 -> 10102 bytes sound/direct_sound_samples/cries/quagsire.aif | Bin 6710 -> 6658 bytes sound/direct_sound_samples/cries/quilava.aif | Bin 5986 -> 5934 bytes .../direct_sound_samples/cries/quilladin.aif | Bin 16042 -> 15962 bytes sound/direct_sound_samples/cries/qwilfish.aif | Bin 5834 -> 5782 bytes sound/direct_sound_samples/cries/rabsca.aif | Bin 24064 -> 24064 bytes sound/direct_sound_samples/cries/raichu.aif | Bin 11866 -> 11814 bytes sound/direct_sound_samples/cries/raikou.aif | Bin 8730 -> 8678 bytes sound/direct_sound_samples/cries/ralts.aif | Bin 5090 -> 5038 bytes .../direct_sound_samples/cries/rampardos.aif | Bin 20070 -> 20018 bytes sound/direct_sound_samples/cries/rapidash.aif | Bin 9318 -> 9266 bytes sound/direct_sound_samples/cries/raticate.aif | Bin 4794 -> 4742 bytes sound/direct_sound_samples/cries/rattata.aif | Bin 3982 -> 3930 bytes sound/direct_sound_samples/cries/rayquaza.aif | Bin 14558 -> 14506 bytes sound/direct_sound_samples/cries/regice.aif | Bin 15962 -> 15910 bytes .../direct_sound_samples/cries/regidrago.aif | Bin 21528 -> 21340 bytes .../direct_sound_samples/cries/regigigas.aif | Bin 23378 -> 23326 bytes sound/direct_sound_samples/cries/regirock.aif | Bin 15886 -> 15834 bytes .../direct_sound_samples/cries/registeel.aif | Bin 11502 -> 11450 bytes .../direct_sound_samples/cries/relicanth.aif | Bin 10098 -> 10046 bytes sound/direct_sound_samples/cries/remoraid.aif | Bin 5314 -> 5262 bytes sound/direct_sound_samples/cries/reshiram.aif | Bin 23584 -> 23530 bytes .../direct_sound_samples/cries/reuniclus.aif | Bin 12740 -> 12714 bytes .../direct_sound_samples/cries/revavroom.aif | Bin 31556 -> 31556 bytes sound/direct_sound_samples/cries/rhydon.aif | Bin 10210 -> 10158 bytes sound/direct_sound_samples/cries/rhyhorn.aif | Bin 9710 -> 9658 bytes .../direct_sound_samples/cries/rhyperior.aif | Bin 14614 -> 14562 bytes sound/direct_sound_samples/cries/ribombee.aif | Bin 19806 -> 19728 bytes .../direct_sound_samples/cries/rillaboom.aif | Bin 18452 -> 18452 bytes sound/direct_sound_samples/cries/riolu.aif | Bin 5278 -> 5226 bytes sound/direct_sound_samples/cries/rockruff.aif | Bin 6830 -> 6752 bytes .../direct_sound_samples/cries/roggenrola.aif | Bin 11386 -> 11360 bytes sound/direct_sound_samples/cries/rookidee.aif | Bin 25180 -> 25180 bytes sound/direct_sound_samples/cries/roselia.aif | Bin 5406 -> 5354 bytes sound/direct_sound_samples/cries/roserade.aif | Bin 10718 -> 10666 bytes sound/direct_sound_samples/cries/rotom.aif | Bin 14394 -> 14342 bytes sound/direct_sound_samples/cries/rowlet.aif | Bin 10176 -> 10102 bytes sound/direct_sound_samples/cries/rufflet.aif | Bin 7854 -> 7828 bytes sound/direct_sound_samples/cries/sableye.aif | Bin 5850 -> 5798 bytes .../cries/sableye_mega.aif | Bin 17262 -> 17262 bytes .../direct_sound_samples/cries/salamence.aif | Bin 12538 -> 12486 bytes sound/direct_sound_samples/cries/salandit.aif | Bin 17714 -> 17636 bytes sound/direct_sound_samples/cries/salazzle.aif | Bin 24412 -> 24334 bytes sound/direct_sound_samples/cries/samurott.aif | Bin 22168 -> 22114 bytes .../direct_sound_samples/cries/sandaconda.aif | Bin 19014 -> 19014 bytes sound/direct_sound_samples/cries/sandile.aif | Bin 6614 -> 6588 bytes .../direct_sound_samples/cries/sandshrew.aif | Bin 4702 -> 4650 bytes .../direct_sound_samples/cries/sandslash.aif | Bin 6810 -> 6758 bytes .../direct_sound_samples/cries/sandygast.aif | Bin 21486 -> 21404 bytes sound/direct_sound_samples/cries/sawk.aif | Bin 12398 -> 12372 bytes sound/direct_sound_samples/cries/sawsbuck.aif | Bin 16910 -> 16884 bytes .../direct_sound_samples/cries/scatterbug.aif | Bin 6416 -> 6334 bytes sound/direct_sound_samples/cries/sceptile.aif | Bin 13038 -> 12986 bytes sound/direct_sound_samples/cries/scizor.aif | Bin 11486 -> 11434 bytes .../direct_sound_samples/cries/scolipede.aif | Bin 23196 -> 23142 bytes .../direct_sound_samples/cries/scorbunny.aif | Bin 14318 -> 14318 bytes sound/direct_sound_samples/cries/scrafty.aif | Bin 13330 -> 13304 bytes sound/direct_sound_samples/cries/scraggy.aif | Bin 13704 -> 13678 bytes sound/direct_sound_samples/cries/scyther.aif | Bin 6702 -> 6650 bytes sound/direct_sound_samples/cries/seadra.aif | Bin 4254 -> 4202 bytes sound/direct_sound_samples/cries/seaking.aif | Bin 9678 -> 9626 bytes sound/direct_sound_samples/cries/sealeo.aif | Bin 5954 -> 5902 bytes sound/direct_sound_samples/cries/seedot.aif | Bin 4130 -> 4078 bytes sound/direct_sound_samples/cries/seel.aif | Bin 8978 -> 8926 bytes .../direct_sound_samples/cries/seismitoad.aif | Bin 13460 -> 13434 bytes sound/direct_sound_samples/cries/sentret.aif | Bin 2134 -> 2082 bytes .../direct_sound_samples/cries/serperior.aif | Bin 16072 -> 16046 bytes sound/direct_sound_samples/cries/servine.aif | Bin 14028 -> 14002 bytes sound/direct_sound_samples/cries/seviper.aif | Bin 5846 -> 5794 bytes sound/direct_sound_samples/cries/sewaddle.aif | Bin 7722 -> 7696 bytes sound/direct_sound_samples/cries/sharpedo.aif | Bin 11514 -> 11462 bytes .../cries/sharpedo_mega.aif | Bin 24506 -> 24506 bytes .../cries/shaymin_land.aif | Bin 23226 -> 23174 bytes .../cries/shaymin_sky.aif | Bin 14082 -> 14056 bytes sound/direct_sound_samples/cries/shedinja.aif | Bin 3902 -> 3850 bytes sound/direct_sound_samples/cries/shelgon.aif | Bin 10018 -> 9966 bytes sound/direct_sound_samples/cries/shellder.aif | Bin 7742 -> 7690 bytes sound/direct_sound_samples/cries/shellos.aif | Bin 6534 -> 6482 bytes sound/direct_sound_samples/cries/shelmet.aif | Bin 13888 -> 13830 bytes sound/direct_sound_samples/cries/shieldon.aif | Bin 11222 -> 11170 bytes sound/direct_sound_samples/cries/shiftry.aif | Bin 9886 -> 9834 bytes .../direct_sound_samples/cries/shiinotic.aif | Bin 22322 -> 22240 bytes sound/direct_sound_samples/cries/shinx.aif | Bin 9638 -> 9586 bytes .../direct_sound_samples/cries/shroomish.aif | Bin 4462 -> 4410 bytes sound/direct_sound_samples/cries/shuckle.aif | Bin 5134 -> 5082 bytes sound/direct_sound_samples/cries/shuppet.aif | Bin 4170 -> 4118 bytes sound/direct_sound_samples/cries/sigilyph.aif | Bin 19326 -> 19300 bytes sound/direct_sound_samples/cries/silcoon.aif | Bin 8098 -> 8046 bytes sound/direct_sound_samples/cries/silvally.aif | Bin 23992 -> 23914 bytes sound/direct_sound_samples/cries/simipour.aif | Bin 8002 -> 7976 bytes sound/direct_sound_samples/cries/simisage.aif | Bin 8136 -> 8110 bytes sound/direct_sound_samples/cries/simisear.aif | Bin 7942 -> 7916 bytes sound/direct_sound_samples/cries/skarmory.aif | Bin 12006 -> 11954 bytes sound/direct_sound_samples/cries/skiddo.aif | Bin 9338 -> 9264 bytes sound/direct_sound_samples/cries/skiploom.aif | Bin 6542 -> 6490 bytes sound/direct_sound_samples/cries/skitty.aif | Bin 3586 -> 3534 bytes sound/direct_sound_samples/cries/skorupi.aif | Bin 14534 -> 14482 bytes sound/direct_sound_samples/cries/skrelp.aif | Bin 11430 -> 11356 bytes sound/direct_sound_samples/cries/skuntank.aif | Bin 21830 -> 21778 bytes sound/direct_sound_samples/cries/slaking.aif | Bin 4994 -> 4942 bytes sound/direct_sound_samples/cries/slakoth.aif | Bin 4298 -> 4246 bytes sound/direct_sound_samples/cries/sliggoo.aif | Bin 21482 -> 21404 bytes .../cries/slither_wing.aif | Bin 26638 -> 26638 bytes sound/direct_sound_samples/cries/slowbro.aif | Bin 6746 -> 6694 bytes sound/direct_sound_samples/cries/slowking.aif | Bin 11934 -> 11882 bytes sound/direct_sound_samples/cries/slowpoke.aif | Bin 3750 -> 3698 bytes .../cries/slowpoke_galarian.aif | Bin 10210 -> 10210 bytes sound/direct_sound_samples/cries/slugma.aif | Bin 8562 -> 8510 bytes sound/direct_sound_samples/cries/slurpuff.aif | Bin 17296 -> 17218 bytes sound/direct_sound_samples/cries/smeargle.aif | Bin 5138 -> 5086 bytes sound/direct_sound_samples/cries/smoliv.aif | Bin 11916 -> 11916 bytes sound/direct_sound_samples/cries/smoochum.aif | Bin 5886 -> 5834 bytes sound/direct_sound_samples/cries/sneasel.aif | Bin 4610 -> 4558 bytes sound/direct_sound_samples/cries/sneasler.aif | Bin 7934 -> 7934 bytes sound/direct_sound_samples/cries/snivy.aif | Bin 9724 -> 9698 bytes sound/direct_sound_samples/cries/snom.aif | Bin 13996 -> 13996 bytes sound/direct_sound_samples/cries/snorlax.aif | Bin 2674 -> 2622 bytes sound/direct_sound_samples/cries/snorunt.aif | Bin 8526 -> 8474 bytes sound/direct_sound_samples/cries/snover.aif | Bin 7154 -> 7102 bytes sound/direct_sound_samples/cries/snubbull.aif | Bin 7246 -> 7194 bytes sound/direct_sound_samples/cries/solgaleo.aif | Bin 26504 -> 26426 bytes sound/direct_sound_samples/cries/solosis.aif | Bin 9420 -> 9394 bytes sound/direct_sound_samples/cries/solrock.aif | Bin 8106 -> 8054 bytes sound/direct_sound_samples/cries/spearow.aif | Bin 8830 -> 8778 bytes .../direct_sound_samples/cries/spectrier.aif | Bin 24972 -> 24972 bytes sound/direct_sound_samples/cries/spewpa.aif | Bin 11850 -> 11776 bytes sound/direct_sound_samples/cries/spheal.aif | Bin 2906 -> 2854 bytes sound/direct_sound_samples/cries/spidops.aif | Bin 24988 -> 24988 bytes sound/direct_sound_samples/cries/spinarak.aif | Bin 6722 -> 6670 bytes sound/direct_sound_samples/cries/spinda.aif | Bin 6242 -> 6190 bytes .../direct_sound_samples/cries/spiritomb.aif | Bin 23202 -> 23150 bytes sound/direct_sound_samples/cries/spoink.aif | Bin 3674 -> 3622 bytes .../direct_sound_samples/cries/sprigatito.aif | Bin 5922 -> 5922 bytes sound/direct_sound_samples/cries/spritzee.aif | Bin 11854 -> 11776 bytes .../cries/squawkabilly.aif | Bin 16762 -> 16762 bytes sound/direct_sound_samples/cries/squirtle.aif | Bin 7246 -> 7194 bytes .../direct_sound_samples/cries/stakataka.aif | Bin 27138 -> 27056 bytes sound/direct_sound_samples/cries/stantler.aif | Bin 11234 -> 11182 bytes .../direct_sound_samples/cries/staraptor.aif | Bin 16954 -> 16902 bytes sound/direct_sound_samples/cries/staravia.aif | Bin 15590 -> 15538 bytes sound/direct_sound_samples/cries/starly.aif | Bin 14254 -> 14202 bytes sound/direct_sound_samples/cries/starmie.aif | Bin 10426 -> 10374 bytes sound/direct_sound_samples/cries/staryu.aif | Bin 9958 -> 9906 bytes sound/direct_sound_samples/cries/steelix.aif | Bin 19014 -> 18962 bytes sound/direct_sound_samples/cries/steenee.aif | Bin 16040 -> 15962 bytes .../direct_sound_samples/cries/stoutland.aif | Bin 14228 -> 14202 bytes sound/direct_sound_samples/cries/stufful.aif | Bin 8504 -> 8426 bytes sound/direct_sound_samples/cries/stunfisk.aif | Bin 17978 -> 17952 bytes sound/direct_sound_samples/cries/stunky.aif | Bin 6222 -> 6170 bytes .../direct_sound_samples/cries/sudowoodo.aif | Bin 8110 -> 8058 bytes sound/direct_sound_samples/cries/suicune.aif | Bin 9150 -> 9098 bytes sound/direct_sound_samples/cries/sunflora.aif | Bin 7954 -> 7902 bytes sound/direct_sound_samples/cries/sunkern.aif | Bin 4082 -> 4030 bytes sound/direct_sound_samples/cries/surskit.aif | Bin 5282 -> 5230 bytes sound/direct_sound_samples/cries/swablu.aif | Bin 2850 -> 2798 bytes sound/direct_sound_samples/cries/swadloon.aif | Bin 9968 -> 9942 bytes sound/direct_sound_samples/cries/swalot.aif | Bin 8702 -> 8650 bytes sound/direct_sound_samples/cries/swampert.aif | Bin 11246 -> 11194 bytes sound/direct_sound_samples/cries/swanna.aif | Bin 14194 -> 14168 bytes sound/direct_sound_samples/cries/swellow.aif | Bin 4550 -> 4498 bytes sound/direct_sound_samples/cries/swinub.aif | Bin 6354 -> 6302 bytes sound/direct_sound_samples/cries/swirlix.aif | Bin 14784 -> 14706 bytes sound/direct_sound_samples/cries/swoobat.aif | Bin 18108 -> 18050 bytes sound/direct_sound_samples/cries/sylveon.aif | Bin 21482 -> 21404 bytes sound/direct_sound_samples/cries/tadbulb.aif | Bin 12458 -> 12458 bytes sound/direct_sound_samples/cries/taillow.aif | Bin 3050 -> 2998 bytes .../direct_sound_samples/cries/talonflame.aif | Bin 18974 -> 18892 bytes sound/direct_sound_samples/cries/tangela.aif | Bin 7574 -> 7522 bytes .../direct_sound_samples/cries/tangrowth.aif | Bin 16970 -> 16918 bytes .../direct_sound_samples/cries/tapu_bulu.aif | Bin 25672 -> 25590 bytes .../direct_sound_samples/cries/tapu_fini.aif | Bin 26928 -> 26846 bytes .../direct_sound_samples/cries/tapu_koko.aif | Bin 24416 -> 24334 bytes .../direct_sound_samples/cries/tapu_lele.aif | Bin 25672 -> 25590 bytes .../direct_sound_samples/cries/tarountula.aif | Bin 6464 -> 6464 bytes .../cries/tatsugiri_curly.aif | Bin 8332 -> 8332 bytes .../cries/tatsugiri_droopy.aif | Bin 8332 -> 8332 bytes .../cries/tatsugiri_stretchy.aif | Bin 6620 -> 6620 bytes sound/direct_sound_samples/cries/tauros.aif | Bin 9174 -> 9122 bytes .../direct_sound_samples/cries/teddiursa.aif | Bin 8290 -> 8238 bytes .../direct_sound_samples/cries/tentacool.aif | Bin 7986 -> 7934 bytes .../direct_sound_samples/cries/tentacruel.aif | Bin 11482 -> 11430 bytes sound/direct_sound_samples/cries/tepig.aif | Bin 5688 -> 5662 bytes .../direct_sound_samples/cries/terrakion.aif | Bin 16510 -> 16484 bytes sound/direct_sound_samples/cries/throh.aif | Bin 11936 -> 11910 bytes .../cries/thundurus_incarnate.aif | Bin 23140 -> 23086 bytes .../cries/thundurus_therian.aif | Bin 22932 -> 22874 bytes sound/direct_sound_samples/cries/thwackey.aif | Bin 17154 -> 17154 bytes sound/direct_sound_samples/cries/timburr.aif | Bin 9806 -> 9780 bytes sound/direct_sound_samples/cries/ting_lu.aif | Bin 29388 -> 29388 bytes .../direct_sound_samples/cries/tinkatink.aif | Bin 19090 -> 19090 bytes sound/direct_sound_samples/cries/tinkaton.aif | Bin 22916 -> 22916 bytes sound/direct_sound_samples/cries/tirtouga.aif | Bin 5758 -> 5732 bytes .../direct_sound_samples/cries/toedscruel.aif | Bin 17846 -> 17846 bytes .../direct_sound_samples/cries/togedemaru.aif | Bin 9346 -> 9264 bytes sound/direct_sound_samples/cries/togekiss.aif | Bin 22758 -> 22706 bytes sound/direct_sound_samples/cries/togepi.aif | Bin 5486 -> 5434 bytes sound/direct_sound_samples/cries/togetic.aif | Bin 3550 -> 3498 bytes sound/direct_sound_samples/cries/torchic.aif | Bin 4866 -> 4814 bytes sound/direct_sound_samples/cries/torkoal.aif | Bin 4686 -> 4634 bytes .../cries/tornadus_incarnate.aif | Bin 19494 -> 19468 bytes .../cries/tornadus_therian.aif | Bin 21572 -> 21514 bytes sound/direct_sound_samples/cries/torracat.aif | Bin 21482 -> 21404 bytes sound/direct_sound_samples/cries/torterra.aif | Bin 23394 -> 23342 bytes sound/direct_sound_samples/cries/totodile.aif | Bin 9178 -> 9126 bytes .../direct_sound_samples/cries/toucannon.aif | Bin 23996 -> 23914 bytes sound/direct_sound_samples/cries/toxapex.aif | Bin 21482 -> 21404 bytes sound/direct_sound_samples/cries/toxel.aif | Bin 14318 -> 14318 bytes .../direct_sound_samples/cries/toxicroak.aif | Bin 19342 -> 19290 bytes .../direct_sound_samples/cries/tranquill.aif | Bin 7032 -> 7006 bytes sound/direct_sound_samples/cries/trapinch.aif | Bin 5106 -> 5054 bytes sound/direct_sound_samples/cries/treecko.aif | Bin 5862 -> 5810 bytes .../direct_sound_samples/cries/trevenant.aif | Bin 23996 -> 23914 bytes sound/direct_sound_samples/cries/tropius.aif | Bin 16342 -> 16290 bytes sound/direct_sound_samples/cries/trubbish.aif | Bin 14092 -> 14066 bytes sound/direct_sound_samples/cries/trumbeak.aif | Bin 17714 -> 17636 bytes sound/direct_sound_samples/cries/tsareena.aif | Bin 20644 -> 20566 bytes .../direct_sound_samples/cries/turtonator.aif | Bin 26508 -> 26426 bytes sound/direct_sound_samples/cries/turtwig.aif | Bin 7158 -> 7106 bytes sound/direct_sound_samples/cries/tympole.aif | Bin 10750 -> 10724 bytes sound/direct_sound_samples/cries/tynamo.aif | Bin 13866 -> 13840 bytes .../direct_sound_samples/cries/type_null.aif | Bin 18974 -> 18892 bytes .../direct_sound_samples/cries/typhlosion.aif | Bin 18970 -> 18918 bytes .../direct_sound_samples/cries/tyranitar.aif | Bin 11682 -> 11630 bytes .../direct_sound_samples/cries/tyrantrum.aif | Bin 19810 -> 19728 bytes sound/direct_sound_samples/cries/tyrogue.aif | Bin 8098 -> 8046 bytes sound/direct_sound_samples/cries/tyrunt.aif | Bin 8500 -> 8426 bytes sound/direct_sound_samples/cries/umbreon.aif | Bin 7770 -> 7718 bytes .../cries/uncomp_klefki.aif | Bin 15712 -> 15698 bytes .../cries/uncomp_oricorio_pom_pom.aif | Bin 22806 -> 22782 bytes sound/direct_sound_samples/cries/unfezant.aif | Bin 10490 -> 10464 bytes sound/direct_sound_samples/cries/unown.aif | Bin 6602 -> 6550 bytes sound/direct_sound_samples/cries/ursaluna.aif | Bin 9224 -> 9224 bytes sound/direct_sound_samples/cries/ursaring.aif | Bin 14886 -> 14834 bytes sound/direct_sound_samples/cries/uxie.aif | Bin 22410 -> 22358 bytes .../direct_sound_samples/cries/vanillish.aif | Bin 12690 -> 12664 bytes .../direct_sound_samples/cries/vanillite.aif | Bin 9366 -> 9340 bytes .../direct_sound_samples/cries/vanilluxe.aif | Bin 12642 -> 12616 bytes sound/direct_sound_samples/cries/vaporeon.aif | Bin 11042 -> 10990 bytes sound/direct_sound_samples/cries/veluza.aif | Bin 17974 -> 17974 bytes sound/direct_sound_samples/cries/venipede.aif | Bin 7414 -> 7388 bytes sound/direct_sound_samples/cries/venomoth.aif | Bin 8026 -> 7974 bytes sound/direct_sound_samples/cries/venonat.aif | Bin 7770 -> 7718 bytes sound/direct_sound_samples/cries/venusaur.aif | Bin 9674 -> 9622 bytes .../direct_sound_samples/cries/vespiquen.aif | Bin 17410 -> 17358 bytes sound/direct_sound_samples/cries/vibrava.aif | Bin 7026 -> 6974 bytes sound/direct_sound_samples/cries/victini.aif | Bin 14192 -> 14166 bytes .../direct_sound_samples/cries/victreebel.aif | Bin 9654 -> 9602 bytes sound/direct_sound_samples/cries/vigoroth.aif | Bin 7194 -> 7142 bytes sound/direct_sound_samples/cries/vikavolt.aif | Bin 23574 -> 23496 bytes .../direct_sound_samples/cries/vileplume.aif | Bin 12786 -> 12734 bytes sound/direct_sound_samples/cries/virizion.aif | Bin 13738 -> 13712 bytes sound/direct_sound_samples/cries/vivillon.aif | Bin 22318 -> 22240 bytes sound/direct_sound_samples/cries/volbeat.aif | Bin 5798 -> 5746 bytes .../direct_sound_samples/cries/volcanion.aif | Bin 22322 -> 22240 bytes .../direct_sound_samples/cries/volcarona.aif | Bin 23032 -> 22978 bytes sound/direct_sound_samples/cries/voltorb.aif | Bin 12370 -> 12318 bytes sound/direct_sound_samples/cries/vullaby.aif | Bin 18748 -> 18722 bytes sound/direct_sound_samples/cries/vulpix.aif | Bin 11894 -> 11842 bytes sound/direct_sound_samples/cries/wailmer.aif | Bin 14158 -> 14106 bytes sound/direct_sound_samples/cries/wailord.aif | Bin 20954 -> 20902 bytes sound/direct_sound_samples/cries/walrein.aif | Bin 18090 -> 18038 bytes .../direct_sound_samples/cries/wartortle.aif | Bin 8638 -> 8586 bytes sound/direct_sound_samples/cries/watchog.aif | Bin 5670 -> 5644 bytes sound/direct_sound_samples/cries/wattrel.aif | Bin 9588 -> 9588 bytes sound/direct_sound_samples/cries/weavile.aif | Bin 8458 -> 8406 bytes sound/direct_sound_samples/cries/weedle.aif | Bin 8150 -> 8098 bytes .../direct_sound_samples/cries/weepinbell.aif | Bin 7334 -> 7282 bytes sound/direct_sound_samples/cries/weezing.aif | Bin 10830 -> 10778 bytes .../direct_sound_samples/cries/whimsicott.aif | Bin 22688 -> 22634 bytes .../direct_sound_samples/cries/whirlipede.aif | Bin 15680 -> 15654 bytes sound/direct_sound_samples/cries/whiscash.aif | Bin 8502 -> 8450 bytes sound/direct_sound_samples/cries/whismur.aif | Bin 4118 -> 4066 bytes .../direct_sound_samples/cries/wigglytuff.aif | Bin 3438 -> 3386 bytes sound/direct_sound_samples/cries/wimpod.aif | Bin 7244 -> 7170 bytes sound/direct_sound_samples/cries/wingull.aif | Bin 6158 -> 6106 bytes .../cries/wishiwashi_school.aif | Bin 18244 -> 18244 bytes .../cries/wishiwashi_solo.aif | Bin 11858 -> 11776 bytes sound/direct_sound_samples/cries/wo_chien.aif | Bin 28176 -> 28176 bytes .../direct_sound_samples/cries/wobbuffet.aif | Bin 10302 -> 10250 bytes sound/direct_sound_samples/cries/woobat.aif | Bin 11262 -> 11236 bytes sound/direct_sound_samples/cries/wooper.aif | Bin 3734 -> 3682 bytes sound/direct_sound_samples/cries/wormadam.aif | Bin 19290 -> 19238 bytes sound/direct_sound_samples/cries/wurmple.aif | Bin 4438 -> 4386 bytes sound/direct_sound_samples/cries/wynaut.aif | Bin 6958 -> 6906 bytes sound/direct_sound_samples/cries/wyrdeer.aif | Bin 13556 -> 13556 bytes sound/direct_sound_samples/cries/xatu.aif | Bin 7418 -> 7366 bytes sound/direct_sound_samples/cries/xerneas.aif | Bin 21482 -> 21404 bytes .../direct_sound_samples/cries/xurkitree.aif | Bin 26508 -> 26426 bytes sound/direct_sound_samples/cries/yamask.aif | Bin 13782 -> 13724 bytes sound/direct_sound_samples/cries/yanma.aif | Bin 8530 -> 8478 bytes sound/direct_sound_samples/cries/yanmega.aif | Bin 22834 -> 22782 bytes sound/direct_sound_samples/cries/yungoos.aif | Bin 15620 -> 15542 bytes sound/direct_sound_samples/cries/yveltal.aif | Bin 26504 -> 26426 bytes .../cries/zacian_crowned_sword.aif | Bin 31336 -> 31336 bytes .../cries/zamazenta_crowned_shield.aif | Bin 29456 -> 29456 bytes sound/direct_sound_samples/cries/zangoose.aif | Bin 4802 -> 4750 bytes sound/direct_sound_samples/cries/zapdos.aif | Bin 7750 -> 7698 bytes .../direct_sound_samples/cries/zebstrika.aif | Bin 18972 -> 18946 bytes sound/direct_sound_samples/cries/zekrom.aif | Bin 23592 -> 23538 bytes sound/direct_sound_samples/cries/zeraora.aif | Bin 20798 -> 20720 bytes .../direct_sound_samples/cries/zigzagoon.aif | Bin 5810 -> 5758 bytes sound/direct_sound_samples/cries/zoroark.aif | Bin 18482 -> 18456 bytes sound/direct_sound_samples/cries/zorua.aif | Bin 8644 -> 8618 bytes sound/direct_sound_samples/cries/zubat.aif | Bin 9714 -> 9662 bytes sound/direct_sound_samples/cries/zweilous.aif | Bin 13746 -> 13720 bytes .../direct_sound_samples/cries/zygarde_10.aif | Bin 16470 -> 16380 bytes .../direct_sound_samples/cries/zygarde_50.aif | Bin 24412 -> 24334 bytes .../cries/zygarde_complete.aif | Bin 30410 -> 30308 bytes 944 files changed, 0 insertions(+), 0 deletions(-) diff --git a/sound/direct_sound_samples/cries/abomasnow.aif b/sound/direct_sound_samples/cries/abomasnow.aif index dce794161735821c355898fcd4922750a501f6d0..83ef6b33aca9f7166ead6e82db99f416bd2de750 100644 GIT binary patch delta 22 ecmZ3qi1FP*Mh-XsAYTTCfM*jqMh-XsAYTTCK&gowa$=r-!66I`3?eoR4D~<=1sfI41xWZg`nm%70^yEf RuJMjR&hY_ZCT0c$y1;YRU delta 14 Vcmcb0jq%ns#tFKN+8gzBvH>$t1;PLT diff --git a/sound/direct_sound_samples/cries/abra.aif b/sound/direct_sound_samples/cries/abra.aif index 153f4982e51950e7a718dc70f2c0d2c19790c184..5c96619143a02eca10758b220420810deb54fee0 100644 GIT binary patch delta 20 bcmZ1${V9sW%|FPOfk8KGB8S{YCm&q^Np1#2 delta 68 zcmewqwJe&$%|FPOfkAiPL=HJIPru+01_lNZ8wQ4YAcTUA3PHLOevZDbK)yh@W0-5a PV~}%vK$wAx2%|FPOfx$v*B8QxWpQEoU0|SGAnT4T(u7YD~dS-D>VsVDTMzvMuR-P`# l3P4FCAk7S<85q<{A!evZDbK)yh@W0-5a PV~}%vK$x+C8G{J`Dpd~) diff --git a/sound/direct_sound_samples/cries/aggron_mega.aif b/sound/direct_sound_samples/cries/aggron_mega.aif index 0e1778509fa1ca196d70efad23ab87ae8ce70c25..6772bdd5ee80d2dc77d5f9d65e55ef5e76386084 100644 GIT binary patch delta 14 Wcmca}o$=0f#tFKN>o)4G%LV{9EC$U0 delta 14 Wcmca}o$=0f#tFKNYd7kx%LV{9CkD&_ diff --git a/sound/direct_sound_samples/cries/aipom.aif b/sound/direct_sound_samples/cries/aipom.aif index c1e643890b27f44ad3cea2a1f893cf687a11fcd1..e40107f78709f25b3ec5007c5278b29287b9a2c1 100644 GIT binary patch delta 20 bcmZ2w{>_ZT%|FPOfk8TNB8S{YrvPaHL}~@- delta 68 zcmexnw#uBt%|FPOfkArFL=HJIPru+01_lNZ8wQ4YAcTUA3SrU`evZDbK)yh@W0-5a PV~}%vK$xMW0fQj`1Z)l? diff --git a/sound/direct_sound_samples/cries/alakazam.aif b/sound/direct_sound_samples/cries/alakazam.aif index 4ecfcf5fc78e96fa828c631ce43766c4a6dd94ea..d6b0126112a5b4a43af5c461d1539142408b405f 100644 GIT binary patch delta 20 bcmbPM{iuq=%|FPOfx$LvB8S{YCmUM;OO6I) delta 68 zcmaD-_Mh-XsAYTTC;3*S1_} iCG>zaGmvIrPzmu2F#^)OK#Z(9B*@ttCUi_evZDbK)yh@W0-5a PV~}%vK$xM0A%igh^=b}5 diff --git a/sound/direct_sound_samples/cries/anorith.aif b/sound/direct_sound_samples/cries/anorith.aif index cb0d37b581e058a7ac7a60a1d99379e9c54e83b1..ac6c774e5da618529ca0bc605c1dfece5922cd86 100644 GIT binary patch delta 20 bcmeyTdrFtX%|FPOfkEuhL=L%)PD{i9NudUt delta 68 zcmX@5`%jm{%|FPOfkEusL=HJIPru+01_lNZ8wQ4YAcTUA3ai8<{2YBXrh@c{rbHU>!m diff --git a/sound/direct_sound_samples/cries/araquanid.aif b/sound/direct_sound_samples/cries/araquanid.aif index 0efccf6a4e8d6f371d513dc532dc6ec447653023..86aac62b80023d8e96e75f9640f086ddc16fb958 100644 GIT binary patch delta 12 TcmexY^si`wE@Qw(y#Px9DnJES delta 12 TcmexY^si`wE~EcOy#Px9Dmw*M diff --git a/sound/direct_sound_samples/cries/arbok.aif b/sound/direct_sound_samples/cries/arbok.aif index 0e7b0b964402d041126bc0b79f9454cd8a40335d..0be4b7e6246463e96f558f07b231ad3f0959931d 100644 GIT binary patch delta 20 bcmX@*J^(Vhi;F_Ee!Ll)%KNkR{{|gcT delta 26 icmex$i}BYj#tFKN-jfT%^(Vhi;F_Ee!Ll)%KNkR{?h6qB diff --git a/sound/direct_sound_samples/cries/arcanine.aif b/sound/direct_sound_samples/cries/arcanine.aif index 17a7b3c6bbdf8b4b8f4ac67ccbc2a3f4ab243d74..cdc942c49ab2c36b8c05dcf8eddc70277c28e4e2 100644 GIT binary patch delta 20 bcmdnw{LhKQ%|FPOfkClsB8S{YrwBy=N7e=` delta 68 zcmez8w8@#n%|FPOfkAQAL=HJIPru+01_lNZ8wQ4YAcTUA3UP`OevZDbK)yh@W0-5a PV~}%vK$wB4C4(6N6JZW; diff --git a/sound/direct_sound_samples/cries/arceus.aif b/sound/direct_sound_samples/cries/arceus.aif index 5db8a3c27a9dd4d2834f9d0d07627d026e2631af..8496de2a173bf683fd319029d9a8e9b853bdde02 100644 GIT binary patch delta 22 dcmX@KoUv~?BZr%RkS_y6aN9%=jiLoz`!6B?il78?-=A9AK)AA6mMo^!myEtNfiJh CCJT=M diff --git a/sound/direct_sound_samples/cries/archeops.aif b/sound/direct_sound_samples/cries/archeops.aif index 7b65583da9b3ef6642a316f148c45946d747258d..6555f0ce3a39e66b674898b4e268c8973f932061 100644 GIT binary patch delta 21 ccmX?8v#Ey1%|FPOfx%A8(bLUsqner>08vl|Z~y=R delta 47 zcmdl~bEZbk%|FPOfx*tj(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P;lwl)}njHX1 Cfef|) diff --git a/sound/direct_sound_samples/cries/arctibax.aif b/sound/direct_sound_samples/cries/arctibax.aif index e0b31b19aba6fa44bb7560eb5986ea46022b9ec0..a18bc78081043175a2c4697a090e6a91730f053b 100644 GIT binary patch delta 18 acmdlqnQ_x(#tFKNEt3~|T-^A7vj+f7eh9|^ delta 18 acmdlqnQ_x(#tFKN&65{;T-^A7vj+f7bqK}) diff --git a/sound/direct_sound_samples/cries/arctovish.aif b/sound/direct_sound_samples/cries/arctovish.aif index 02d83dbb553e31769c87bf9b980d0bfcf657662d..281c88f8d3227a3cb28f8ddd74ab1fad8ce8cc83 100644 GIT binary patch delta 14 VcmcaNkMZ6-#tFKN1{?JZ`~fbp1xEk? delta 14 VcmcaNkMZ6-#tFKN`Wy8O`~fbk1x5e> diff --git a/sound/direct_sound_samples/cries/ariados.aif b/sound/direct_sound_samples/cries/ariados.aif index de9057b45be98492ed6a0109e1de7738545229ef..343879d70a285bbd4a50c2ecfcaecbbc5e503a52 100644 GIT binary patch delta 20 bcmdmF@K2w^%|FPOfkFJ+L=L%)PB+8>NyY~9 delta 68 zcmeyTzsZ2Z%|FPOfk8rRB8Qxqr(bXg0|SGI4Ff|x5JJI5g?r)>evZDbK)yh@W0-5a PV~}%vK$xMK1%n9y_yrC& diff --git a/sound/direct_sound_samples/cries/armaldo.aif b/sound/direct_sound_samples/cries/armaldo.aif index 574a3d7539aa0308b9e7f4bb3301aea2f032b6c8..23add2fec8dd084a1ceea49db317a433607582d0 100644 GIT binary patch delta 20 bcmeB+ycNOW<{#wCz@QT}kwb2ylZg%hM4ScQ delta 68 zcmcZ=(HF_#<{#wCz@XDMkwZ?*(=RxLfq_B9hJm3T2%%u3f|ZVhpQEoUkS`GK80H%9 P7~~uu5N2#*!C(jg1IZ2^ diff --git a/sound/direct_sound_samples/cries/aromatisse.aif b/sound/direct_sound_samples/cries/aromatisse.aif index 3e8da86c5bef5f743da5cb9891c3009fe1da6b75..4880d14946b0d7be46bd8d1f0d8520c864fa5519 100644 GIT binary patch delta 22 dcmcb%k+EeXBZr%RkS_y6M9oAFxs7&l5dc_Q2P*&o delta 106 zcmZqK$arldBZr%RkS_y6#JPzaauR-yzOD=m3<72r#tOO$jz#&oi6xoE#i<+B;v%d( mU5pigl14z98AvlQXoPr%7y)TPAV${_66EX+6b30YHUR*SxEKQf diff --git a/sound/direct_sound_samples/cries/aron.aif b/sound/direct_sound_samples/cries/aron.aif index da82823e24a2dec16f3612329c6cd3f85ca2c9fa..d246b4c22b04c2fc962508bb037e80124dc81d64 100644 GIT binary patch delta 20 bcmbQFa!;AV%|FPOfkE)vL=L%)PCEnvLD~jR delta 68 zcmcboJV}Ma%|FPOfkB9CB8Qxqr(bXg0|SGI4Ff|x5JJI5g?)k&evZDbK)yh@W0-5a PV~}%vK$x+C34;*;)Ta%I diff --git a/sound/direct_sound_samples/cries/articuno.aif b/sound/direct_sound_samples/cries/articuno.aif index e3975a17caf6f3f64855900476bdcce67e0c3ca0..212114537f434cfcbb7fbbe13bce696bfb46ba94 100644 GIT binary patch delta 20 bcmZ1#^DUag%|FPOfkF4(L=L%)P8W0mPf`a~ delta 68 zcmewsy()&o%|FPOfk97cB8Qxqr(bXg0|SGI4Ff|x5JJI5g=@MJevZDbK)yh@W0-5a PV~}%vK$xM434<{J4+##F diff --git a/sound/direct_sound_samples/cries/audino.aif b/sound/direct_sound_samples/cries/audino.aif index 7430d0b6801b66edbb9896076f16fd0a541eab3c..873d4c947b91da23728565c40010a76ce1be6ed2 100644 GIT binary patch delta 30 mcmX@(xyh5q%|FPOfk9=JqoMaJgI M2bC2!`X{RZ0LZ@(00000 diff --git a/sound/direct_sound_samples/cries/aurorus.aif b/sound/direct_sound_samples/cries/aurorus.aif index f396174ad29bf99a63798a1ad86cca7822af5fb8..9483e1b6371bb58400f1d3ce76e09dfa45e978fe 100644 GIT binary patch delta 22 ecmexxgK^OfMh-XsAYTTC9I1&MavN>_WCH+UuLu$V delta 102 zcmZ2#tOO$j%A5CrRnJk8`XA&S$Mh_ lD*&YofHX6ZW?)ba@eDBn(tJRSqCO=jiLoz`!6B?il78?-=A9AK)AA6mM!`$gq*;iyik_f3w&%|FPOfq_47B8Qxqr(bXg0|SGI4Ff|x5JJI51toq7KSy6zAYUNdG0ZjI PF~~VSAk5g@kiilF=+O<6 diff --git a/sound/direct_sound_samples/cries/baltoy.aif b/sound/direct_sound_samples/cries/baltoy.aif index 9c9771924d278704434b328dfca2343141401046..7900eb1d64c235380086e6f0f3be690c5f16e5c9 100644 GIT binary patch delta 20 bcmbPac+Y^t%|FPOfk7f{B8S{YCkqJxKJ*24 delta 68 zcmca-Fv*a^%|FPOfkC2cB8Qxqr(bXg0|SGI4Ff|x5JJI51v?1|KSy6zAYUNdG0ZjI PF~~VSAk5grn86SL>+=n< diff --git a/sound/direct_sound_samples/cries/banette.aif b/sound/direct_sound_samples/cries/banette.aif index e00d6a0ac6a2f4b98015537bc9546142670f982f..587b307e27eca94fa092577f19c0562885f230c4 100644 GIT binary patch delta 20 bcmca+xX6&h%|FPOfk9%{L=L%)PBjt$Ld6CL delta 68 zcmZ2vc+HT*%|FPOfkEQjL=HJIPru+01_lNZ8wQ4YAcTUA3QZCcevZDbK)yh@W0-5a PV~}%vK$x+q34<{J1M&_= diff --git a/sound/direct_sound_samples/cries/barbaracle.aif b/sound/direct_sound_samples/cries/barbaracle.aif index 9effada123443527cf4af596749f85c6d8250bbd..3f724127bddc889d75311737f9dc916d9dda306b 100644 GIT binary patch delta 22 dcmX>wo$=i?Mh-XsAYTRs@3e^=avSYDya8D62Lu2B delta 106 zcmaDijq$*AMh-XsAYTRs?;R64_}C5?bIGmvIr&%|FPOfkFI~qo!Fa5Lk;BbD$d`e^#cm>p+(st_7XViB2A==` delta 70 zcmX@s!T76#k;BbD$d`e^rD!6DoS3Iya0mkfgNO|SLp=~e!A1o&7YRQ{UsoVsAlxy` RHQq7EIX)oF#L$qz1OPaw4%q+z diff --git a/sound/direct_sound_samples/cries/bayleef.aif b/sound/direct_sound_samples/cries/bayleef.aif index b1ff0088de09e0fb2ba13eea8fca7ed75786d3bf..1b38f322a9455c002631d9cd7f838605b8194197 100644 GIT binary patch delta 20 bcmcbnv`C4=%|FPOfk9AeB8S{Yr#}J!Jz@pg delta 68 zcmZ3abWMrF%|FPOfkDu3B8Qxqr(bXg0|SGI4Ff|x5JJI51tviWKSy6zAYUNdG0ZjI PF~~VSAk5Izn86YN&|3{1 diff --git a/sound/direct_sound_samples/cries/beartic.aif b/sound/direct_sound_samples/cries/beartic.aif index 45d1e8bc5ee30acd10be7f12149939d316599785..1c7635357ab4f8aa82d8070dd4bfb65da5fddba5 100644 GIT binary patch delta 32 ocmeyAcO#F-%|FPOfx$e$(bLUsqM9P3*2F;di3yw=D}I>)0JFCW;{X5v delta 55 zcmcbS_bE@!%|FPOfx$e>(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;oBh+!g+BBSO+ KL*0$hf6V~L}so7+aU8czUL0|yQO delta 49 zcmeB}%(!SWqnew4kS_y+=PXB0H#a{=UsnbO2BC1rFxPm;Am{i1-*BgRGb00rjXX7; E08}mwPXGV_ diff --git a/sound/direct_sound_samples/cries/beldum.aif b/sound/direct_sound_samples/cries/beldum.aif index 7b7b10c2e06eb9c1494137f7f4081387fa418b21..626f94fc1c5ce4df8b2afce6a4b6629bb8d903e4 100644 GIT binary patch delta 20 bcmeySdPtSS%|FPOfk9~3L=L%)PIH6+M%e~q delta 68 zcmX@4`c0L?%|FPOfkEiqL=HJIPru+01_lNZ8wQ4YAcTUA3X6m!{2YB+TS%|FPOfk8TMB8S{YCkJT&L23o4 delta 68 zcmaE6Hp`sD%|FPOfkArGL=HJIPru+01_lNZ8wQ4YAcTUA3U1O8evZDbK)yh@W0-5a PV~}%vK$xM05rYW;_R%|FPOfr0PQL=HJIPru+01_lNZ8wQ4YAcTUA3e)%`{2YBN$N(mRpu6+F2)K# iDFYzQ45S$t)IvN%jDR#h5TmLO33B!Z3WAiG83O>4=@k0_ diff --git a/sound/direct_sound_samples/cries/bewear.aif b/sound/direct_sound_samples/cries/bewear.aif index baada6e00de06dd3f13a9ae756863eec114a4afb..00979e4542a714e93e7d5f8b33eb2f6c75c5585b 100644 GIT binary patch delta 20 bcmcatHl>Wi%|FPOfx((*B8S{Yt9MoaN!A9e delta 96 zcmbPIcCU=X%|FPOfx$X#B8QxapQEoU0|Nt(xtW22u7Xo)d1_+OMzwcVW}Ys_3P1@x gAk7S<85mSTJVT6tG%pY%s}2cr_67=p6qy(R07eKC*#H0l diff --git a/sound/direct_sound_samples/cries/bibarel.aif b/sound/direct_sound_samples/cries/bibarel.aif index 2c7ea81bbb352ea82397087f67ec359093454455..64b3f5e0ec94c8c1bd6d17e455e7aaf32f9d39d1 100644 GIT binary patch delta 20 bcmdm0&{n|V<{#wCz+nDwB8S{Yrw8T$OqT~! delta 68 zcmZoG*j2#c<{#wCz+hoCkwZ?*(=RxLfq_B9hJm3T2%%u3!ZULTKSy6zAYUNdG0ZjI PF~~VSAk4(TfWa652we_~ diff --git a/sound/direct_sound_samples/cries/bidoof.aif b/sound/direct_sound_samples/cries/bidoof.aif index d61765511f93dd0fa478da3d917c0b63eec0cb8f..4da8f32adedeb592a2e415f2dcc3382e9d12f23e 100644 GIT binary patch delta 20 bcmaDCv@3|i%|FPOfkD$~B8S{YClO5mN0SB1 delta 68 zcmdlL^e%|Q%|FPOfk88EB8Qxqr(bXg0|SGI4Ff|x5JJI51u0DlKSy6zAYUNdG0ZjI PF~~VSAk5g(lEDxF1#S)z diff --git a/sound/direct_sound_samples/cries/binacle.aif b/sound/direct_sound_samples/cries/binacle.aif index 3694f34dde1727b4f823ad7083c4f3502762e31b..168952c84bdb62efb447573ba57b1b15ab764a6c 100644 GIT binary patch delta 20 bcmX?5{Hch;%|FPOfx$9sB8S{Y8y`ymPdo;o delta 100 zcmexVbfB2S%|FPOfx&XeL=HJIKSy6z1_lN`GYbm^T?MDiyu{?3RE3RdK9&}qF2)K# jDFYzQ45S$tR6{&NjDR#B5TmFM33B!Zih)!aTQUFuxlt6u diff --git a/sound/direct_sound_samples/cries/bisharp.aif b/sound/direct_sound_samples/cries/bisharp.aif index edbcc7b296e727ba16a6a4ee881bba3552992027..dd1d4c4229da98289ba922e4e2a81a241990fbc8 100644 GIT binary patch delta 21 ccmeAP`4r6K<{#wCz@Yic(bLUsquMh~08%FhbpQYW delta 47 zcmewq+!Lba<{#wCz@WwA=;`L>=jiLoz`!6B?il78?-=A9AK)AA6mMp1%CM2=nI-@+ Cr3}3Q diff --git a/sound/direct_sound_samples/cries/blacephalon.aif b/sound/direct_sound_samples/cries/blacephalon.aif index 9cacb4f71ea8a5af4b9530b4d74d6e8d3152b930..f1308e13449c73bd1611494a05a64cdf97976d40 100644 GIT binary patch delta 22 ecmZ2+j`7l2Mh-XsAYTTCv{Mr~7Mh-XsAYTTCbcKl=a#DVdzOD=m3_=zLW(v9rPC1FmsRbE{Ir(`C8`ajN p*?77bD*&ZUfHX6ZW?;|^@eDBn(n3Itp(iBB*&8ShQfXnv008tD7{&kq diff --git a/sound/direct_sound_samples/cries/blastoise.aif b/sound/direct_sound_samples/cries/blastoise.aif index ed03bd447c2758cc2f4639726f30c5995bc510bb..c3ae9294f243ce2f2d1a4a7222e37109ea7ff0f6 100644 GIT binary patch delta 20 bcmZ4I{mYBP%|FPOfkCxsB8S{Yrw~;DNL~gs delta 68 zcmez6wa%Nv%|FPOfkAcIL=HJIPru+01_lNZ8wQ4YAcTUA3Q?*OevZDbK)yh@W0-5a PV~}%vK$wAnC4(^l6;cjx diff --git a/sound/direct_sound_samples/cries/blaziken.aif b/sound/direct_sound_samples/cries/blaziken.aif index b316a85658b628979290b2720ade5024cdf4da8d..fa8a46ba9c244f221af880a5707a1f1667ee9c21 100644 GIT binary patch delta 20 bcmaDj diff --git a/sound/direct_sound_samples/cries/blitzle.aif b/sound/direct_sound_samples/cries/blitzle.aif index 40e4672af7cc3a1c4a6f02bdacdc3ba717f69a07..d730da670f2c681fbb11c873a76a7f278978d134 100644 GIT binary patch delta 26 hcmbQ|(&ED7<{#wCz@YfY(bLUsqM9P(wT&Lv6aj9t2)zIR delta 52 zcmZp1ndhSB<{#wCz@Q}N=;`L>=jiLoz`!6B?il78?-=A9AK)AA6mM#7z%Y?Vk@4zA Hy=#g9Te=PC diff --git a/sound/direct_sound_samples/cries/boldore.aif b/sound/direct_sound_samples/cries/boldore.aif index 436cb1219f693055191b766edec17399146d55c5..9dbee00115040f3f42d770c8ae28a1081fe97b91 100644 GIT binary patch delta 23 ecmdnc!#J&nk;lzH$d`e^jnC23&26I^mm2_5HwH2Q delta 49 zcmbQ%!?>Y`QO(Ui$d`e^O~cXC&CSoz*Oh^RK`7iY%r)LI$T>d1H{2=S%)pRgBM+Aw E07c{sasU7T diff --git a/sound/direct_sound_samples/cries/bonsly.aif b/sound/direct_sound_samples/cries/bonsly.aif index 251865909cc89898ce0eb6faa89d1c1dd37e9d5d..15bd56f2327060ceabfba52a016e6ace0a23b758 100644 GIT binary patch delta 20 bcmbPb@ywjV%|FPOfkFD-L=L%)P6wm`Mvexm delta 68 zcmaE6KFfl`%|FPOfk8%SB8Qxqr(bXg0|SGI4Ff|x5JJI5g=5kZevZDbK)yh@W0-5a PV~}%vK$wZK1%nX)=^72} diff --git a/sound/direct_sound_samples/cries/bouffalant.aif b/sound/direct_sound_samples/cries/bouffalant.aif index fbca85e639f46fe73b61cc28c0f4aaef8178004b..e9502a94b655775904018d3f897af774211555de 100644 GIT binary patch delta 23 fcmcaGlX2TjMjki+AYTRspLLF&Zf+aZR`~z`V9p2F delta 49 zcmdlslkvh#Mm0D8AYTRspA(LrZf<^#zOD=m3_{_KVXpCxLC*03zTr;srWQsF8+lgw F003^W4j=#k diff --git a/sound/direct_sound_samples/cries/bounsweet.aif b/sound/direct_sound_samples/cries/bounsweet.aif index 3054997d7ff51e282c1f77b60832adf40c461522..b1d21fb39072f49f6fb44f836f74f8b0f0b0079a 100644 GIT binary patch delta 20 bcmZ1%c_)Iy%|FPOfk7u^B8S{YJ2M>sM@R+$ delta 104 zcmcZ;u`ZIs%|FPOfk9{4L=HI#KSy6z1_lNJb2CE)T?ME7(!ApG)YKA%jcR5(R-P`# l3P4FCAk7S<85q<3_u7XohVrE5Zp29}86caN~7h?sW hlpc^~2GR@+Dj}XBMnIYmh*8vs1UY*H#h8HD6aaU(6m0+i diff --git a/sound/direct_sound_samples/cries/bramblin.aif b/sound/direct_sound_samples/cries/bramblin.aif index 0c8a4a5dab9251ef4a3fd441c4e9de0acdcd8e5e..b55e43fe77ad4c54a7016cfdd2cd39bcad847a44 100644 GIT binary patch delta 14 VcmZ4TopH%`#tFKNWgGR%ssS?`20Z`( delta 14 VcmZ4TopH%`#tFKNr5p9issS?>20Q=& diff --git a/sound/direct_sound_samples/cries/braviary.aif b/sound/direct_sound_samples/cries/braviary.aif index 8c20dd2b73e6e134641bfb82799d16e2d2d309b7..0cf3fc403ef3bf14db64cb0b5637bc62df3bd266 100644 GIT binary patch delta 21 ccmey7dM}m7%|FPOfx+mSqou09&R9+5i9m delta 47 zcmcbY`Xg1%%|FPOfx+m5qo@1VevZDbK)yh@W0-5a PV~}%vK$ww*8G{J`2#pSW diff --git a/sound/direct_sound_samples/cries/brionne.aif b/sound/direct_sound_samples/cries/brionne.aif index 76e37dddfcbedd5d4ce88dc062e58ffdda61bbf8..ac026ada88245f4f49cd0e061f1000603693e5b8 100644 GIT binary patch delta 22 dcmeBcXFSx#$l>N6N6O+E@y@6s(Kx_#BZ)p@d diff --git a/sound/direct_sound_samples/cries/bronzong.aif b/sound/direct_sound_samples/cries/bronzong.aif index 16e171e4f8f22071593e51b523f77a1dc8260f74..628ec30895c38a07cbd079d5ab2da59d00c2c3ae 100644 GIT binary patch delta 22 ecmbQXh4Im5Mh-XsAYTTC$XgRR*3~MAZhb delta 100 zcmZp&xM0EI<{#wCz#!u>kwZ?*&(YVFfq{X~%+yjrSHYMnIY$h*8yt1UY*H1wqOT4FGb@6vzMo diff --git a/sound/direct_sound_samples/cries/burmy.aif b/sound/direct_sound_samples/cries/burmy.aif index ea15d0c71a32b4fce1b8a27de5aa5e0acfe5797c..80478166f5e3f3e23073b95574f75dbff2a8a3bf 100644 GIT binary patch delta 20 bcmexmdd!r=%|FPOfkA5DL=L%)P79;}N+|}T delta 68 zcmX?R`pcBV%|FPOfkEoiL=HJIPru+01_lNZ8wQ4YAcTUA3d^J<{2YBVkwb2yQ-Ux6JL?5` delta 68 zcmZou-=)ss<{#wCz#zP7B8Qxqr(bXg0|SGI4Ff|x5JJI5g*0IaKSy6zAYUNdG0ZjI PF~~VSAk4tfh`|T|S*N2G#%o delta 102 zcmdmWjWF)4z>%|FPOfkB6BB8S{Yr#IRFLkI>u delta 68 zcmbOfaV&zv%|FPOfkDS^B8Qxqr(bXg0|SGI4Ff|x5JJI5g-_ZNevZDbK)yh@W0-5a PV~}%vK$x+y5rZKB0#FWh diff --git a/sound/direct_sound_samples/cries/calyrex.aif b/sound/direct_sound_samples/cries/calyrex.aif index 895f37d41e16225f171aa6a3dd7f762a18d7399a..59c41a4fdb76fa24040b2cf6d20cbcba9c91a701 100644 GIT binary patch delta 21 ccmaEKmvPx0Mh-XsAYTTCJh_P+atlN909geGCIA2c delta 212 zcmZ2>hw;%}Mh-XsAYTTCyjv4FWbq)0l^o&e27pmped%74a0ClthX=WhJz)&3$5fK5T#eq0DKdq!Zu_%=R z#Vn`-L7;-%#H{?H_@tu5ycC9%#NrI7lmJL7GY=?LmReMtnV-jC0F{vj$|UFK79^Hr YCgr5YC-H-{7BgfP=bPmgm>4nu0GTm43jhEB diff --git a/sound/direct_sound_samples/cries/calyrex_ice_rider.aif b/sound/direct_sound_samples/cries/calyrex_ice_rider.aif index 2a278279084b231e9a00d683dc0442b5ed4a776f..a6be291e1dc0e7d4386d60adc99ddf67cddf6345 100644 GIT binary patch delta 14 WcmezLobl6h#tFKNM>gsmDFy&LWCu+E delta 14 WcmezLobl6h#tFKNhd1gSDFy&LUk6M8 diff --git a/sound/direct_sound_samples/cries/calyrex_shadow_rider.aif b/sound/direct_sound_samples/cries/calyrex_shadow_rider.aif index 07cc384332f99ebbd7619ee20070c38d37b547e9..2d3c43d978bb2e2ad5a06e1310d349abc8d3faf2 100644 GIT binary patch delta 14 Vcmdnq delta 68 zcmaDAIWLOC%|FPOfk9VnB8Qxqr(bXg0|SGI4Ff|x5JJI5g;P2bevZDbK)yh@W0-5a PV~}%vK$x+SF@q5R1Aq=& diff --git a/sound/direct_sound_samples/cries/capsakid.aif b/sound/direct_sound_samples/cries/capsakid.aif index 7a906ead56f92d24e9629121aa26e60ac45de21b..a93a531cdb0cf6a92b843466ba30e2904b8938dc 100644 GIT binary patch delta 16 XcmX>XaV}zlE~CO^Lv^Q(1^2W8Im-ru delta 16 XcmX>XaV}zlE~ETpLv^Q(1^2W8Il=~k diff --git a/sound/direct_sound_samples/cries/carbink.aif b/sound/direct_sound_samples/cries/carbink.aif index 79a934fcdc7e0947129b26fe0392fff789efec2e..dfdc907bd7b07d23ce9e1bfeb26776da70b8832a 100644 GIT binary patch delta 22 ecmaF0oN>-_Mh-XsAYTTC;3*S1v6^8%- diff --git a/sound/direct_sound_samples/cries/carnivine.aif b/sound/direct_sound_samples/cries/carnivine.aif index edc8bb049ffb0c3a081e6225b995be3de7aad12d..491e846a1a445df60684655cb8a2a2db1c48bac8 100644 GIT binary patch delta 20 bcmaD>wyBK6%|FPOfx%j9B8S{YCmw46OVcczZV%|FPOfx+Iz(bLUsqM9P3++;(0;f>MU_5hqh2 delta 68 zcmZ2vam|9m%|FPOfkDP^B8Qxqr(bXg0|SGI4Ff|x5JJI51tu8@KSy6zAYUNdG0ZjI PF~~VSAk4_rkih}~-$D&t diff --git a/sound/direct_sound_samples/cries/celesteela.aif b/sound/direct_sound_samples/cries/celesteela.aif index f09fe03c30246046bc4e86283bd7c446ab1732fa..acab333235dfb38c9d2d968a33127512e810d9bc 100644 GIT binary patch delta 22 ecmX@}i1F7$Mh-XsAYTTCf=?4U_}C5?bIGmvIr&7({Fs80vu#3N|V%ij?wm^mPUDg~A=f TT;m;soZ|z0!=2(y%}f~ppmw_2mt^xGX_Ec delta 14 Wcmcb%lJVL~#tFKN%Qxz+2mt^xE(SpW diff --git a/sound/direct_sound_samples/cries/charjabug.aif b/sound/direct_sound_samples/cries/charjabug.aif index 6bf60778c4b83bf513322ca2f246d0b92d372e6c..ed5bd7d88be89ec26ac008449ae26b62155a103c 100644 GIT binary patch delta 20 bcmaD>Hl>Wi%|FPOfx((*B8S{YyLVOqN`eNs delta 104 zcmbPI_NTXlevZDbK)yh@W0-5a PV~}%vK$wAn34;Xy@8=FE diff --git a/sound/direct_sound_samples/cries/charmeleon.aif b/sound/direct_sound_samples/cries/charmeleon.aif index 0cf2f47a1baf61d8cf8bb5849356f08ca2c4bc8a..9a9a14e3bb81f2f0a24d469d86e0a3eb9767c587 100644 GIT binary patch delta 20 bcmaE5vCV?R%|FPOfk8%ZB8S{YCjl7%La7C9 delta 68 zcmdmH@yde3%|FPOfk7r|B8Qxqr(bXg0|SGI4Ff|x5JJI51u+>3KSy6zAYUNdG0ZjI PF~~VSAk4tPl)(r9@E#4M diff --git a/sound/direct_sound_samples/cries/chatot.aif b/sound/direct_sound_samples/cries/chatot.aif index 6dc58e519cfb320957f52480bba23f5c390961c8..62a961a82f4e4ff8fe4eee523385a2a7199237fb 100644 GIT binary patch delta 20 bcmeAQxfaaf<{#wCz@T|+!ey%<{#wCz@Wu6kwZ?*(=RxLfq_B9hJm3T2%%u3!Zu9_KSy6zAYUNdG0ZjI PF~~VSAk4(XkiiT9?spCT diff --git a/sound/direct_sound_samples/cries/cherrim.aif b/sound/direct_sound_samples/cries/cherrim.aif index fee1212784aac4ddba181fc5a0c2c3918f1ecb2d..d70cf77b022878fd75e0e5ae6316da72d1cfabbd 100644 GIT binary patch delta 20 bcmeAQz81vc<{#wCz@X_jkwb2ylYu4xLgod$ delta 68 zcmcZ>)D_I(<{#wCz@XVQkwZ?*(=RxLfq_B9hJm3T2%%u3f|;g-pQEoUkS`GK80H%9 P7~~uu5N2Xz$Y2Zr{4Wjm diff --git a/sound/direct_sound_samples/cries/cherubi.aif b/sound/direct_sound_samples/cries/cherubi.aif index 02fd6d6dd0892161ed9cd0f89b443b33958c3687..703c1d5f8b81694553920cb3cf6a941c59889d16 100644 GIT binary patch delta 20 bcmca+xX6&h%|FPOfk9%{L=L%)PBjt$Ld6CL delta 68 zcmZ2vc+HT*%|FPOfkEQjL=HJIPru+01_lNZ8wQ4YAcTUA3QZCcevZDbK)yh@W0-5a PV~}%vK$wY<0fPYm1KbWh diff --git a/sound/direct_sound_samples/cries/chesnaught.aif b/sound/direct_sound_samples/cries/chesnaught.aif index aea55fe6927b8da23c2c788df9dd9986d8a820ce..80cff836982e0c20f85145ca63f9b72332354c82 100644 GIT binary patch delta 22 dcmZ3nkn!3AMh-XsAYTTC0KbVGavSXo0svLt2EqUU delta 106 zcmcb%fN{k_Mh-XsAYTTCfCUpd_}C5?bIGmvIrP!I78F#^(pK#Z;M(qYi delta 98 zcmZ2x{mGic%|FPOfkF1wL=HJIKSy6z1_lN`GgAWvT?OZi)Z&87JcW&F4YFpQF2)K# hDLo*~45S$tR6;yMjDR#B5TmFM33B!ZiZKDPApmRi6iEO8 diff --git a/sound/direct_sound_samples/cries/chi_yu.aif b/sound/direct_sound_samples/cries/chi_yu.aif index 55ca0598b7125327c31ce81be51a0558db6edcd5..60131a9e4637450b95d5ab4645ed499d2d4fc49b 100644 GIT binary patch delta 22 ecmX^2kn!9@#tFKN3nm+;r%e8kCbn^fS^)riObR>z delta 22 ecmX^2kn!9@#tFKN^Cugor%e8kCbn^fS^)riKMFel diff --git a/sound/direct_sound_samples/cries/chien_pao.aif b/sound/direct_sound_samples/cries/chien_pao.aif index 1e3d573881871e2ec90a9dc756186ad7eb653593..c598dac8d23d6deb34ff282bb1e8a96eb2cc1174 100644 GIT binary patch delta 22 ecmeBs$k_Lgae^*m!eqzXy_4%QxHo>Akq-cHT?#J% delta 22 ecmeBs$k_Lgae^*m{A9=6y_4%QxHo>Akq-cHPzo*p diff --git a/sound/direct_sound_samples/cries/chikorita.aif b/sound/direct_sound_samples/cries/chikorita.aif index b5ccaf7cbfa954c35104586e6184f2769a6a7c89..63d5c950337302be0611c567b711abe39cab7444 100644 GIT binary patch delta 20 bcmew+a!7>3%|FPOfq~0vB8S{YCmAjPKP3e* delta 68 zcmX>k@=b)p%|FPOfq^S;B8Qxqr(bXg0|SGI4Ff|x5JJI51tl&CKSy6zAYUNdG0ZjI PF~~VSAk5Izh`|g1;rI=2 diff --git a/sound/direct_sound_samples/cries/chimchar.aif b/sound/direct_sound_samples/cries/chimchar.aif index 95c90b6331a7550232f17646a15b23732c3e2713..06514a4d9040a73a53831c494115d58d1010d3c0 100644 GIT binary patch delta 20 bcmeAxxmC>J<{#wCz+ic4B8S{Yr!AHMP3i|O delta 68 zcmcar+*iWk<{#wCz+lBTkwZ?*(=RxLfq_B9hJm3T2%%u3!Y)e*KSy6zAYUNdG0ZjI PF~~VSAk5g(fWZs^2c`~j diff --git a/sound/direct_sound_samples/cries/chimecho.aif b/sound/direct_sound_samples/cries/chimecho.aif index b7aacc8bf3c3cff61eed8f9cb67f465b86d1e19d..7b2b45fac2029b530e8d0c4ba8cfd649f6f8f9a7 100644 GIT binary patch delta 20 bcmX@5K24p&%|FPOfkC)$B8S{YrvhOBKI;X! delta 68 zcmbQHeoCFg%|FPOfkF7tL=HJIPru+01_lNZ8wQ4YAcTUA3T46)evZDbK)yh@W0-5a PV~}%vK$x+q1%nv?^8XG0 diff --git a/sound/direct_sound_samples/cries/chinchou.aif b/sound/direct_sound_samples/cries/chinchou.aif index 889cea6c2294dc5d8bd470ef16e5313acbd0b467..846df5079cdea97c20670a314b422361a75c7319 100644 GIT binary patch delta 20 bcmaE4xXzHn%|FPOfk9%~L=L%)P8|{eMFj>o delta 68 zcmZ2y_{fmM%|FPOfkEQdL=HJIPru+01_lNZ8wQ4YAcTUA3Vjk1evZDbK)yh@W0-5a PV~}%vK$xMq0fPYm4h;@( diff --git a/sound/direct_sound_samples/cries/chingling.aif b/sound/direct_sound_samples/cries/chingling.aif index 8154abc5caeba36c97eff629bf1eef86a9d29ae5..dd3b00915b2b52fec1d32b29877b8699ceab565e 100644 GIT binary patch delta 22 dcmX@t%{Z%@k;BbD$d`e^b<#u*xs6UGt^iZ52KN8} delta 70 zcmbQ$&3LYxk;BbD$d`e^_1HuXIWbSa;1C7|1`!(uhI$}`f{hAQt`dHZzOF#NK)7R= RYrJESb9_LUiLo(*0RTQq4>14$ diff --git a/sound/direct_sound_samples/cries/cinccino.aif b/sound/direct_sound_samples/cries/cinccino.aif index b4df2ea076730d00ef2c2631cfbee4de2e1111a8..6205aaf2b07b13020eb467fe7b6bd22126faa692 100644 GIT binary patch delta 23 ecmccC&$y?bk;lzH$d`e^eT$=~o7+aU4ekJ7K?l+R delta 49 zcmdnf&v>n$QO(Ui$d`e^{hXtxo134buPXxsgHX6*m}|UakaK*1Z@5#usj&&eMxG7s E0Bu(e7XSbN diff --git a/sound/direct_sound_samples/cries/clamperl.aif b/sound/direct_sound_samples/cries/clamperl.aif index 9046fa0c2ced0a189072dad547b1d142fff8a559..186a1f9b408d17d2ca3ab098f862fecd4cb1b26e 100644 GIT binary patch delta 20 bcmX@-KFgiM%|FPOfkAoFL=L%)P9@3!M9T&# delta 68 zcmbQ`e$Ji4%|FPOfkFA$L=HJIPru+01_lNZ8wQ4YAcTUA3RTJyevZDbK)yh@W0-5a PV~}%vK$x+a8G{7?3?dG2 diff --git a/sound/direct_sound_samples/cries/clauncher.aif b/sound/direct_sound_samples/cries/clauncher.aif index b05ec5db787a0b07f512675f23cf5b5736e59a8c..ab9cbf9ce1bb3fe04a86c0b761090e3f1b17ccab 100644 GIT binary patch delta 20 bcmaE(H%pJh%|FPOfk9koB8S{YyDwq@KpF-3 delta 104 zcmbQG_ePJy%|FPOfk8ZFB8QxWpQEoU0|SGAnWd3}u7Yz;VrgD-Mrx75Mzt?uR-P`# l3P4FCAk7S<85q<S( nF2)K#Nh2W545S$t)I&T&jDWNN5Toe`33B!Zih|Ucm@ohUZ59_i diff --git a/sound/direct_sound_samples/cries/claydol.aif b/sound/direct_sound_samples/cries/claydol.aif index 07cac57a76781b2b9e4619f26d143be38ac90029..9da5f5bbb76b3fc4882ca3748dea886b17d79055 100644 GIT binary patch delta 20 bcmccTy~>-z%|FPOfkAcAL=L%)PA#ecNN)yp delta 68 zcmZ4Geb1Z2%|FPOfkE}!L=HJIPru+01_lNZ8wQ4YAcTUA3SFuaevZDbK)yh@W0-5a PV~}%vK$x+K34<8`99Ryv diff --git a/sound/direct_sound_samples/cries/clefable.aif b/sound/direct_sound_samples/cries/clefable.aif index 8ebb7f340028994abed7714a085abe667e3eebea..e04bf536ad3b0b7f735d7a93277e6bd5d3f1e8f3 100644 GIT binary patch delta 20 bcmX@6IZ2bl%|FPOfkC8eB8S{YryLOgK79qR delta 68 zcmbQFc}$bT%|FPOfk9;7L=HJIPru+01|Y|VfuSAlK24m%%|FPOfq}bkB8S{Yrvh#OJX-~c delta 68 zcmbOxeoCCf%|FPOfr0zbL=HJIPru+01_lNZ8wQ4YAcTUA3T509evZDbK)yh@W0-5a PV~}%vK$xMqF@rGx=o1ac diff --git a/sound/direct_sound_samples/cries/clobbopus.aif b/sound/direct_sound_samples/cries/clobbopus.aif index 886a5208be83cce0dab20c7af48289190bac7b15..ebce642966d2d750ed90f560c117d5898d509362 100644 GIT binary patch delta 12 TcmbPNHm_`gF5`!ddLOI+Cb0$J delta 12 TcmbPNHm_`gF5~-+dLOI+CaeYD diff --git a/sound/direct_sound_samples/cries/clodsire.aif b/sound/direct_sound_samples/cries/clodsire.aif index bdbadd64fbaaf72c23b35bd2e7386f75150567fb..17aea97e46d974e9ef91887c37bcd489777485b3 100644 GIT binary patch delta 27 jcmdnd&bXtUae^*m*G9u=#>oNp0+Zt$I5sb26n6puizNvl delta 27 jcmdnd&bXtUae^*m=SIV5#>oNp0+Zt$I5sb26n6puixUYS diff --git a/sound/direct_sound_samples/cries/cloyster.aif b/sound/direct_sound_samples/cries/cloyster.aif index d93f93d8be44dc58c62fdaad4eea496b40b3a679..b69d0478bf518ca6804b7f09330628a8195af473 100644 GIT binary patch delta 20 bcmeAQycWRW<{#wCz@Xtbkwb2ylYs^RLX-uz delta 68 zcmcZ>&=ttx<{#wCz@X7IkwZ?*(=RxLfq_B9hJm3T2%%u3f|-VdpQEoUkS`GK80H%9 P7~~uu5N2R$$Y2Zr`rHlk diff --git a/sound/direct_sound_samples/cries/cobalion.aif b/sound/direct_sound_samples/cries/cobalion.aif index e53ea9b030a75b3ed4153701b6f896ba93659ca9..4a21505b5b50e4bcb4b90147cfa7f81bf4939e91 100644 GIT binary patch delta 22 dcmey-$#|%fk;BbD$d`e^W!FRwxs6V9TmV~n2a^B* delta 72 zcmX@q$@rs_k;BbD$d`e^<-W4A T*LcSu=lB5MaHn`P6H^8NgK7|$ diff --git a/sound/direct_sound_samples/cries/cofagrigus.aif b/sound/direct_sound_samples/cries/cofagrigus.aif index 5c5c426e37136d3a358113f33918734167cab499..6fbf1c16f87bedd484373109887c74449eddb51d 100644 GIT binary patch delta 28 kcmX>$nQ_fzMjki+AYTRs&n1qYZf+CR6dCI_denIW0EE8?^#A|> delta 54 zcmZ28neo_UMm0D8AYTRs&wY-bZf<^#zOD=m3_{_KVXpCxLC*03zTr;sriKO#6L}OF KYd7lEc>(~eyAK%v diff --git a/sound/direct_sound_samples/cries/combee.aif b/sound/direct_sound_samples/cries/combee.aif index d07abbb15cb1e891cc634caeac1afca80ddf1a41..6aaedb642d1202e8a74db82c57c28937a45be2b7 100644 GIT binary patch delta 22 dcmZqbXFS)($l>N6N60sta;4v+u< diff --git a/sound/direct_sound_samples/cries/combusken.aif b/sound/direct_sound_samples/cries/combusken.aif index 2f53b8f838f5d664e56a8aa3f85607ffaafb53aa..58707c30b8bbc6bc67bcd12d5dbcf646152fc7e6 100644 GIT binary patch delta 20 bcmdl~@Gqak%|FPOfx-OSL=L%)PB+W}R0apK delta 68 zcmeyDzo~%3%|FPOfx$v+B8Qxqr(bXg0|SGI4Ff|x5JJI5g?r`_evZDbK)yh@W0-5a PV~}%vK$wxK8G{J`BX17$ diff --git a/sound/direct_sound_samples/cries/comfey.aif b/sound/direct_sound_samples/cries/comfey.aif index 8b07ec9891051d28e285ca8814e17c0264520209..cb91d0cbd72d88b993efb5a7bf74430a8264e655 100644 GIT binary patch delta 22 dcmeBJ&A4wBBZr%RkS_y6sM$mgxs6s5p#V}726O-b delta 98 zcmdnDim_ugBZr%RkS_y6Xv0JfIT1fcUsnbO1|D-W69rub=ltBX)XI%&5}{_EF2)K# i2|Xaq45S$tR6;yMjDR#R5F@J&33B!Z3V{@vm;eA%j}ylL diff --git a/sound/direct_sound_samples/cries/conkeldurr.aif b/sound/direct_sound_samples/cries/conkeldurr.aif index 96e991d493937dcecff47c3683fdae1312343959..09885ab2ef05b98fdab8e2e6e53997215fc2fed3 100644 GIT binary patch delta 23 ecmaDgiSfcDMjki+AYTRsPY*{=H@A&yE}j5iiU%wJ delta 49 zcmcaGiSgAWMm0D8AYTRs&m>1rH#a{=UsnbO2BC1rFxPm;Am{i1-*BgRGb0OzjXW-% E0A`^LbpQYW diff --git a/sound/direct_sound_samples/cries/corphish.aif b/sound/direct_sound_samples/cries/corphish.aif index 2605e1fd260f4cb849ecbac556f93b3fca4623b9..9bc708e2fb4194aa6907c31403658a0b237ddffc 100644 GIT binary patch delta 20 bcmbQFe@~CY%|FPOfk8ZMB8S{YCkt@^KB5J1 delta 68 zcmcboH%Xtv%|FPOfkC`$B8Qxqr(bXg0|SGI4Ff|x5JJI51v_yGKSy6zAYUNdG0ZjI PF~~VSAk5grkii51>Xi+w diff --git a/sound/direct_sound_samples/cries/corsola.aif b/sound/direct_sound_samples/cries/corsola.aif index 6eae55ea726e92ee035f2a184f8f7b528c0f8025..087308d8fd9ca4f5849300692d4407102df36d77 100644 GIT binary patch delta 20 bcmX?P)Mv!u<{#wCz#z#skwb2y(+ddzJTe8k delta 68 zcmeA(I%LG*<{#wCz#wTgkwZ?*(=RxLfq_B9hJm3T2%%u3!aE5GKSy6zAYUNdG0ZjI PF~~VSAk4_fh`|H^_x diff --git a/sound/direct_sound_samples/cries/cosmog.aif b/sound/direct_sound_samples/cries/cosmog.aif index 729d5e790ac144799968af9faeb7314504b2bb12..deeb60b94d7c95ae685de9eab0c3186f7d291bf6 100644 GIT binary patch delta 22 dcmaFS%s8)^k;BbD$d`e^aoR)?}F2)K# i2|Xaq45S$tR6;yMjDR#R5F@J&33B!Z3V{@vSpoois}yel diff --git a/sound/direct_sound_samples/cries/cottonee.aif b/sound/direct_sound_samples/cries/cottonee.aif index a459a62f726aacc83689b3ccc89e70a1fd2d8175..207ac9d12df9dd791e98b6e048fa0749a37b3e7f 100644 GIT binary patch delta 20 bcmez5vBQJI%|FPOfkDM!B8S{YBOw(4Md1aT delta 80 zcmdnt@yUb3%|FPOfk7o}B8ME0pQEoU0|Nt#sfn4wMl~T7Jx>>71)zW$kY)zb3=GmC Yo*_m+ngxh~szQRCy@4!{oT)Jb0F#joFaQ7m diff --git a/sound/direct_sound_samples/cries/crabominable.aif b/sound/direct_sound_samples/cries/crabominable.aif index e83c4e1d5f0658c27526496e7b7c4565724cbb34..1d6b3d4caf24a470b89ba39cae1ae20f705ac76c 100644 GIT binary patch delta 22 dcmX>yo$=i?Mh-XsAYTRs@3e^=avL2yya8EF2MPcH delta 110 zcmaDijq%8IMh-XsAYTRs?>!Sa0(~oQo2Z@^dru5|eULH>!Df o+jzPdD*&ZUfHX6ZW?;|?@eDBn(!xNDsV5}J*&8SUQfg!X00ci7EdT%j diff --git a/sound/direct_sound_samples/cries/crabrawler.aif b/sound/direct_sound_samples/cries/crabrawler.aif index c5014e239d7afc3328ba82d841c20130f32e2d4f..8c42fb18e57aceb8d1263c7a274dc9a392a94cc5 100644 GIT binary patch delta 20 bcmZ3XaZR1W%|FPOfkF7(L=L%)b{m8NLrMlz delta 104 zcmcbnzCwe;%|FPOfk8xJB8QxWpQEoU0|SGAxv`~!u7Yz>Vp36Jc}{B4MzsyXR-P`# k3P4FCAk7S<85lG|JVT6tv>*_p>j(*Q_67=r6dGCr0MdUJ4gdfE diff --git a/sound/direct_sound_samples/cries/cradily.aif b/sound/direct_sound_samples/cries/cradily.aif index 695f4c36fe84b45f04ff5f17f692f62d71f92495..3fa5e006f99de456b99d19278ecc5522c94b2f5f 100644 GIT binary patch delta 20 bcmaD>xT%oC%|FPOfx%+cL=L%)PCXU?Pz47E delta 68 zcmdl~_^gn_%|FPOfx+V5L=HJIPru+01_lNZ8wQ4YAcTUA3X?1({2YBgJ<{#wCz@YkTB8Qxqr(bXg0|SGI4Ff|x5JJI5g>|YDevZDbK)yh@W0-5a PV~}%vK$wYv1%nX)8X6A7 diff --git a/sound/direct_sound_samples/cries/crawdaunt.aif b/sound/direct_sound_samples/cries/crawdaunt.aif index 091e34fbd5f97a80d2c03d037392d08222e5079d..7f8ee48bebf61202088ae8463c4633248651731a 100644 GIT binary patch delta 20 bcmdm%(3HU8<{#wCz@YzYB8S{Yr#t!pNk<10 delta 68 zcmZol*p|TI<{#wCz+j*^kwZ?*(=RxLfq_B9hJm3T2%%u3!XteNKSy6zAYUNdG0ZjI PF~~VSAk5grh`|T|`XUZb diff --git a/sound/direct_sound_samples/cries/cresselia.aif b/sound/direct_sound_samples/cries/cresselia.aif index e7f25b717dd81e98af692f3b37e4a4f8db322eec..5edd1b01948a906af539bf72aaea478aaa5ba3db 100644 GIT binary patch delta 22 dcmX@Lk#X8aMh-XsAYTTCh`xy&avPlrA^=%w2U!3B delta 70 zcmbQXk@3_7({Fs80vu#3N|W~MM(HL`nm%70^yEf RuJMjR&hY_ZCKeV9CID4551{}6 diff --git a/sound/direct_sound_samples/cries/croagunk.aif b/sound/direct_sound_samples/cries/croagunk.aif index 6ebc6cc8b179e76297a675bafc689851ee79507b..c5d42a42bf25cf5f5be117c08b6434da8d820781 100644 GIT binary patch delta 20 bcmeCHzE#EH<{#wCz+f9Rkwb2ylZh<=N)84@ delta 68 zcmcar)mP2o<{#wCz+l@pkwZ?*(=RxLfq_B9hJm3T2%%u3f|ad=pQEoUkS`GK80H%9 P7~~uu5N2X(%wPln8qW@b diff --git a/sound/direct_sound_samples/cries/crobat.aif b/sound/direct_sound_samples/cries/crobat.aif index f3f458171c8a544b4ff31dcba3180091fa60a2f8..956be378c7e096f66a654ca816c385d22ff48d42 100644 GIT binary patch delta 20 bcmX>U)fdI#<{#wCz@W=Ekwb2y(+eE{LYf9L delta 68 zcmeB+Iuym><{#wCz@Te2kwZ?*(=RxLfq_B9hJm3T2%%u3!aE%aKSy6zAYUNdG0ZjI PF~~VSAk5IrlEDA~09_7p diff --git a/sound/direct_sound_samples/cries/crocalor.aif b/sound/direct_sound_samples/cries/crocalor.aif index 897aaa860d83a1cb5ce6a81951af0a94fab2b930..9a622026df37c4489b32888ee3bb309ae49b052f 100644 GIT binary patch delta 16 XcmZ3Iza)QxE@Ro`3x<*#-DAxGJirE& delta 16 XcmZ3Iza)QxE@SEB3x<*#-DAxGJhuju diff --git a/sound/direct_sound_samples/cries/croconaw.aif b/sound/direct_sound_samples/cries/croconaw.aif index 791eb366dee863277383af332947258f21799984..b72db75f3ffd0bfd96beb89dc98065a085b7306d 100644 GIT binary patch delta 20 bcmeD3zvjo`<{#wCz@Y9okwb2ylYu$_LP7%s8cmQO(Ui$d`e^iO12?&CSoz*Oh^RK`7iY%r)LI$T>d1H{2=S)Xb7$B99{D J>5Y14908KW4*viE diff --git a/sound/direct_sound_samples/cries/cryogonal.aif b/sound/direct_sound_samples/cries/cryogonal.aif index 1f8255f7a0df135f424d9f4f9de02d730820ca25..b2f551274ea8b5b2f938667bbe3da9b04351af67 100644 GIT binary patch delta 34 qcmbO=ov~p$BafSZkS_y+cZH*;o7+S+MaH0sf!Y%jI5*bFc>@5jzzQq? delta 61 zcmZpe&Nyp2qnew4kS_y+_asM8H#a{=UsnbO2BC1rFxPm;Am{i1-*BgRGb2NWi9Cvo RffEf4Cv$r9Zp;z!1_1w65HkP( diff --git a/sound/direct_sound_samples/cries/cubchoo.aif b/sound/direct_sound_samples/cries/cubchoo.aif index a4c7f2cf8ed7981a656061307b368214b689329b..e10ca5a0ccf6dcaa8ed57896206fcd238c18a1da 100644 GIT binary patch delta 30 mcmaE7d&QQ=%|FPOfkEz!qoqoMnIY$h*8yt1UY*H1wqP;i~x(z6wv?x diff --git a/sound/direct_sound_samples/cries/cyclizar.aif b/sound/direct_sound_samples/cries/cyclizar.aif index 1d145154ec4d048960bf5026a8bea8f89902d883..eb32c91d5994c1182c3b3e1b7575e022cc8ff2da 100644 GIT binary patch delta 34 pcmX^2fbrY|#tFKN3KK7OOg@mtKe-@Xbh1G1MIf7X^9IIwc>oqv4}Aat delta 34 pcmX^2fbrY|#tFKN@)Iw1Og@mtKe-@Xbh1G1MIf7X^9IIwc>oqW4}1Us diff --git a/sound/direct_sound_samples/cries/cyndaquil.aif b/sound/direct_sound_samples/cries/cyndaquil.aif index 4f0b5481f1b1d0fd3ab8be066213b3a544a269a7..287c6496add7716940c0dc56bdb9659ad8638216 100644 GIT binary patch delta 20 bcmaDPy-u3L%|FPOfq{3~L=L%)P93}eL4O7H delta 68 zcmZ1{{YaX_%|FPOfr0ndL=HJIPru+01_lNZ8wQ4YAcTUA3Vpm1evZDbK)yh@W0-5a PV~}%vK$xMaDT5IJ{~iu9 diff --git a/sound/direct_sound_samples/cries/dachsbun.aif b/sound/direct_sound_samples/cries/dachsbun.aif index 492020a716beb5bde99e87276b6b1c7bd6710643..8e3ddbd781f6c0a7ba9376ce4cd6c88ee04b455e 100644 GIT binary patch delta 22 ecmbPIG^J>QF5|P!3wfm(C+o{`Yz|~RYz_cs!w3}s delta 22 ecmbPIG^J>QF5}b93wfm(C+o{`Yz|~RYz_csv-h2kZa< delta 70 zcmey>&bY3Fk;BbD$d`e^MQtL7oS3Iya0mkfgNO|SLp=~e!A6B!&Juo(zOF#NK)7R= RYrJESb9_LUiKQWfF#t6f4=w-z diff --git a/sound/direct_sound_samples/cries/darmanitan.aif b/sound/direct_sound_samples/cries/darmanitan.aif index 9ea80bd5df3a274e6e50c1075f813496ce16b791..902fdb69b4eb8fad74c301a8998812767b3d1df5 100644 GIT binary patch delta 28 jcmX@s&A6tUk;lzH$d`e^b%~>=o7+S+MaH^~9(Aq&g69a` delta 54 zcmZ3}&3LSvQO(Ui$d`e^b)TcBo134buPXxsgHX6*m}|UakaK*1Z@5#usev)WL>@)P J+Kqa3t^la;4+8)I diff --git a/sound/direct_sound_samples/cries/dartrix.aif b/sound/direct_sound_samples/cries/dartrix.aif index 2a8e24d87811abb32a1d8381591ed3b418dc13df..894fefb3311c0c5037d02b1ef05beb104c83fbe0 100644 GIT binary patch delta 22 ecmbO+h4IW}Mh-XsAYTRs&m$8#znQ_JxMh-XsAYTRsFM)|1a$S*<2HF4s delta 104 zcmdmWjISD^UUsnbO1_5&;69rubm(=9Ul+x77RE3RdBIy>M lF2)K#Ndq9w45S$t)IvN%jDWNN5Toe`33B!ZiZTJQ2>>b)7JmQ$ diff --git a/sound/direct_sound_samples/cries/dedenne.aif b/sound/direct_sound_samples/cries/dedenne.aif index 8e5ec29bec801b5fe2fafa09e679e0031b01cf01..843f5cf38fe997fa5521a42b86e73a6865c897ed 100644 GIT binary patch delta 20 bcmccP+ULsQ<{#wCz@XGNkwb2yO@_u7XQyN@`wSs=`LK3?&Os7h?sW ilmU=t2GR@+sv({sMnIYmh*8vs1UY*H#Xzb|jTr!WWfT?w diff --git a/sound/direct_sound_samples/cries/deerling.aif b/sound/direct_sound_samples/cries/deerling.aif index 50cf0bfc502cbe626b127084427c6ff0c1696aaa..9a4e8809b9e76ef7a138d61a5afbac293bd95f41 100644 GIT binary patch delta 21 ccmZ4IGsTC;%|FPOfkBPO(bLUsqZ)@A07EVXXaE2J delta 47 zcmbQ@v(87&%|FPOfk92p(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o3kYOVahZ+DS C<{#wCz#v~Wkwb2yQ;a+SKLZ7^ delta 68 zcmZp&-)7I@<{#wCz#zYFB8Qxqr(bXg0|SGI4Ff|x5JJI5g(P_iKSy6zAYUNdG0ZjI PF~~VSAk4_fl)(T1@-GeQ diff --git a/sound/direct_sound_samples/cries/delphox.aif b/sound/direct_sound_samples/cries/delphox.aif index 95fcf181109ec852391a9aef1c5445145a9ec984..857af9f0ad207ace5e039355444e62a4d438bd19 100644 GIT binary patch delta 21 ccmeygg>l&yMh-XsAYTTCD7lFoatm#u08^C)r2qf` delta 99 zcmZ3sh4IrCMh-XsAYTTCsH}+`a$9unm24HRPni30$etQ5)s diff --git a/sound/direct_sound_samples/cries/deoxys.aif b/sound/direct_sound_samples/cries/deoxys.aif index d39b565a0ec3d5cf2a8be2bc373864a6530ee016..d9e3976e3c7903c316a3de498a6fab9adcb33015 100644 GIT binary patch delta 20 bcmZ1%_$z?J%|FPOfkC5aB8S{Yrw|PQNmK?# delta 68 zcmewrur83p%|FPOfk9*0L=HJIPru+01_lNZ8wQ4YAcTUA3Q-yoevZDbK)yh@W0-5a PV~}%vK$x+G8G|tZ8Ho;x diff --git a/sound/direct_sound_samples/cries/dewgong.aif b/sound/direct_sound_samples/cries/dewgong.aif index 52c8b6f9b35ce6fde0eb775547c63f184c74efe8..daa3e5fd5ce7fd198f89a300236ade8797ba5e2f 100644 GIT binary patch delta 20 bcmX>VG%bk3%|FPOfkBgRB8S{YrwM=XevZDbK)yh@W0-5a PV~}%vK$wArIfEGh0lW@> diff --git a/sound/direct_sound_samples/cries/dewott.aif b/sound/direct_sound_samples/cries/dewott.aif index 3f7724df600fa424146ee87cffda81221d027a98..e654be2372c5fa56a68878b7a946f379dd3fc6ea 100644 GIT binary patch delta 21 ccmdmIv&4qS%|FPOfk95j(bLUsqnd;q07Iq)cmMzZ delta 47 zcmZ2tv(HA&%|FPOfkDp9(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o7f?*?%gd6}T Catp%% diff --git a/sound/direct_sound_samples/cries/dewpider.aif b/sound/direct_sound_samples/cries/dewpider.aif index ec3266ceba698170d7f79c4fa1ca71a6330dc469..0d8ade106b894e425915f63c1bed116e8503f3d5 100644 GIT binary patch delta 20 bcmeA%+Goh&<{#wCz#y@0B8S{Yn;8-SKn?~B delta 100 zcmdmI*ki=u<{#wCz#z#okwZ?*&(YVFfq{X~+|*D(SHUHT-3<(QQ7h?sW hlmU=t2GR@+Y9XE>MnIY$h*8yt1UY*H1wqP;4FNn*6a)YO diff --git a/sound/direct_sound_samples/cries/dhelmise.aif b/sound/direct_sound_samples/cries/dhelmise.aif index 09e0b93a66802a4fbf4e0f487ecdd1cca7c07e3a..892faf19094dbf2537c446aaafa704787d10b5e9 100644 GIT binary patch delta 22 dcmdn7oAK2yMh-XsAYTTC*rbUZavN=2VgX(C2U-9C delta 102 zcmaF0i*d(pMh-XsAYTTC*bNgo9=0TryH~ax;rlH>$bBT6nq` kD*&YofHX6ZW?)bY@eDBn()>V-sy-yh*&8SbQf6id02%cbNB{r; diff --git a/sound/direct_sound_samples/cries/dialga.aif b/sound/direct_sound_samples/cries/dialga.aif index 3bc128ec2dd4378f83b828be3e4c205433755e17..ead8acb9a1bf225171bd02a9cec5c85e80aa7d98 100644 GIT binary patch delta 22 dcmdnBlCfmI}HGE}4mW$(gAN8`Ul(TX?z{ lD*&YofHX6ZW?)ba@eDBn(tJRSqCO8WkauR-yzOD=m3<73m1`4_gE}7}+sYS&}l?ofxUinyg nx)>_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%XvhEnS$-D{ diff --git a/sound/direct_sound_samples/cries/diglett.aif b/sound/direct_sound_samples/cries/diglett.aif index dac924fb810c9385de7c11605e9e2b1a90fe9da3..cd212878fd77485cdb166e5b190e6f2bbd2bee21 100644 GIT binary patch delta 20 bcmez6eaxG~%|FPOfkAcOL=L%)P7724O|J&! delta 68 zcmX@+{mYxf%|FPOfkE}tL=HJIPru+01_lNZ8wQ4YAcTUA3d>X_{2YBY<{#wCz@X?hkwb2ylZGMyKGp?n delta 68 zcmX@-)a1WK}b diff --git a/sound/direct_sound_samples/cries/doublade.aif b/sound/direct_sound_samples/cries/doublade.aif index 70a0499e53666b3a42ccf2615d5fcc1392b4f33b..d931b3de0ad52525adccf2f00bb00cfdb9a79a13 100644 GIT binary patch delta 20 bcmbP~d?bm(%|FPOfx*ybB8S{Y8#zM&L<|ME delta 100 zcmX?-G%16IYSFi7h?sW hlmU=t2GR@+Y9XE>MnIY$h*8yt1UY*H1wqP;4FQ1I6o~); diff --git a/sound/direct_sound_samples/cries/dragalge.aif b/sound/direct_sound_samples/cries/dragalge.aif index be411ddb8e1d48785f6992826892631330e516f7..a9d11e9b65d269b9f8302d2f442d834af52b88cb 100644 GIT binary patch delta 22 dcmeA;&$#OxBZr%RkS_y6y3s@qxs5g==>S*N2G#%o delta 102 zcmdmWjqQO| diff --git a/sound/direct_sound_samples/cries/drakloak.aif b/sound/direct_sound_samples/cries/drakloak.aif index 3b19d47687358708ccbf1ee4186324216a3d0874..7b9beaad8978d2cbe7d68d661a23cbc9d22e6271 100644 GIT binary patch delta 14 WcmX>ym+{D4#tFKN(>Cf&^8)}b*#+DH delta 14 WcmX>ym+{D4#tFKNQ#a~O^8)}b)CJoB diff --git a/sound/direct_sound_samples/cries/drampa.aif b/sound/direct_sound_samples/cries/drampa.aif index e8c6dfbdda78e7f2f36a10dd0d53ccf85a91939c..81e185711e18041023add0751b7900f9edea64c4 100644 GIT binary patch delta 22 dcmX@Nk+EeXBZr%RkS_y6M9oAFxs6tF5dc@82Oj_c delta 98 zcmZqK$aroeBZr%RkS_y6#IcDSaw2|?zOD=m3_Ru*1`4_gE=7sC1&JHg;v&pEU5pig i5_&+I8AvlQsDyZi7y)TsAVyXl66EX+6apzSGXMa8u@q1M diff --git a/sound/direct_sound_samples/cries/drapion.aif b/sound/direct_sound_samples/cries/drapion.aif index a5418de2bdd50d210306d3827402b5fa79e35f0c..4ce0382fdc4662af2de29f1dddbc7f85735f24cd 100644 GIT binary patch delta 19 acmcZ=wJeIm%|FPOfk9VpB8S{UCtUzPg$08E delta 68 zcmZ1$bt{U)%|FPOfk8KDB8Qxqr(bXg0|SGI4Ff|x5JJI51vXs?KSy6zAYUNdG0ZjI PF~~VSAk4(nh`|5=`L+$t diff --git a/sound/direct_sound_samples/cries/dratini.aif b/sound/direct_sound_samples/cries/dratini.aif index 8de5583f0e69262a7b971adfd50f868bf62a323c..d79420d9c60a51d879423d97e4bd84462d1db3f5 100644 GIT binary patch delta 20 bcmX@7J4=_t%|FPOfkAB2L=L%)P9!gYnP|#tFKNA{+HYd;lt>1jqmY delta 14 VcmX>!gYnP|#tFKN!W;EOd;lt+1jhgX diff --git a/sound/direct_sound_samples/cries/drifblim.aif b/sound/direct_sound_samples/cries/drifblim.aif index a1afbdc71bf5f824bded017d6703036fd08009ff..891c49f2053d56415199aa0ef40bcb569ce7b9e7 100644 GIT binary patch delta 22 ecmeC1#&~NgBZr%RkS_y+*QJRZavPntcmV)cItP{j delta 70 zcmcaLm9cLcBZr%RkS_y+H`_!GIWbSa;1C7|1`!(uhI$}`f{hBhyd?Y_eO-ZkfpEt# R*LcSu=lFmy6C*PQ0{|m04$}Yt diff --git a/sound/direct_sound_samples/cries/drifloon.aif b/sound/direct_sound_samples/cries/drifloon.aif index bf5b8b20efda057147a54dfddcd065dc42177f75..ba4c94e979ad8416c3d740619b20f155bb7f336e 100644 GIT binary patch delta 20 bcmdm#`Y(mU%|FPOfx)P3B8S{YrwAheO-Kfk delta 68 zcmeyDvMH6r%|FPOfx&3iL=HJIPru+01_lNZ8wQ4YAcTUA3UNjfevZDbK)yh@W0-5a PV~}%vK$wY@~ diff --git a/sound/direct_sound_samples/cries/dugtrio.aif b/sound/direct_sound_samples/cries/dugtrio.aif index 875e4638e2996c0aeb5def638cf44d326dd0890f..1a0a05ecd01eb1429f6b1f67c084795336967041 100644 GIT binary patch delta 20 bcmaFoy~~@!%|FPOfkAcCL=L%)PE%9?OK%3X delta 68 zcmdnx{mz@i%|FPOfkE}zL=HJIPru+01_lNZ8wQ4YAcTUA3bRxt{2YB#rtJx< delta 55 zcmey6)RnB}<{#wCz+l+q=;`L>=jiLoz`!6B?il78?-=A9AK)AA6mMp1$uN;ekcAUXUhmq delta 57 zcmdnCoAJhOMm;zGAYTTC*b9!HZf?&0z99?@3{nh?4;?muSONh>`N^rp#i=O@NtFu0 L`4Jm=R>cAU0%Q@; diff --git a/sound/direct_sound_samples/cries/eelektrik.aif b/sound/direct_sound_samples/cries/eelektrik.aif index 4739bd80dbe6a6a938864d43b91d97577940b467..d39453bc0d83194050e62b4238895948f655b9e4 100644 GIT binary patch delta 21 ccmdm%F(-q^%|FPOfx$$?(bLUsqndyT07-}i+yDRo delta 47 zcmbP}u`NT*%|FPOfx$%2(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P`lwl)}fC&IK C>I@+O diff --git a/sound/direct_sound_samples/cries/eelektross.aif b/sound/direct_sound_samples/cries/eelektross.aif index b8e362b7547116f0fe4e7ed1a611fc04eca2125b..b618fa5e9775611fc4720d5483606ad9f092f528 100644 GIT binary patch delta 28 kcmccB&v>Apk;lzH$d`e^eTSo`o7+S+MaD@RJtnyW0EwFkO#lD@ delta 54 zcmX@m&v>h!QO(Ui$d`e^{gR`no134buPXxsgHX6*m}|UakaK*1Z@5#unV}iOL>@)P Ki5vAMxdQ;U`VV*j diff --git a/sound/direct_sound_samples/cries/eevee.aif b/sound/direct_sound_samples/cries/eevee.aif index ce8bf61af7a9ef40dcae7218102e54308e41a19f..0706209843d80109ad8949bda4cc2a7e591d0061 100644 GIT binary patch delta 20 bcmca*zRaA%%|FPOfkArSL=L%)P7TrkM0*A) delta 68 zcmZ2xe#@N0%|FPOfkFDxL=HJIPru+01_lNZ8wQ4YAcTUA3T@I7evZDbK)yh@W0-5a PV~}%vK$xMiF@qrh3s4SW diff --git a/sound/direct_sound_samples/cries/ekans.aif b/sound/direct_sound_samples/cries/ekans.aif index 6d933819d84caab905d5a81788ad225c7ce17a75..80bc2fdfec2a617bd407493e53059efb16ba1147 100644 GIT binary patch delta 20 bcmdnw{m+ZT%|FPOfkCxwB8S{YrwCO5Ngf77 delta 68 zcmez8waJ^q%|FPOfkAcEL=HJIPru+01_lNZ8wQ4YAcTUA3UR6uevZDbK)yh@W0-5a PV~}%vK$wA%F@qrh7^)6> diff --git a/sound/direct_sound_samples/cries/eldegoss.aif b/sound/direct_sound_samples/cries/eldegoss.aif index 6c7bbe5129d739f90d186c5d070ecacc1b9e7341..56f9419b369ff5e804335164fb97faed235211f5 100644 GIT binary patch delta 14 WcmbPph;hy##tFKN?>6eaO8@{cz6O{8 delta 14 WcmbPph;hy##tFKNZ#U|_O8@{cxdxX2 diff --git a/sound/direct_sound_samples/cries/electabuzz.aif b/sound/direct_sound_samples/cries/electabuzz.aif index a57bdf37eb00c9acc7052e0f3b2f31cbfa9d4dd8..6071f1d4a9207d4fc600b1b8ba8620c36be5f80b 100644 GIT binary patch delta 20 bcmZ2i@vEG}%|FPOfx-IIL=L%)PFJh}RE`I_ delta 68 zcmexWzOI79%|FPOfx$*?B8Qxqr(bXg0|SGI4Ff|x5JJI5g+h<{#wCz#!5zkwb2yQ;G-xJpBca delta 68 zcmeCu+^5Om<{#wCz#y`1B8Qxqr(bXg1CV3Gz)%l_P_R)UOGLuY(bpBo7YKI@bB%Wl Oa*huOGcvYhFaiMTAPvs| diff --git a/sound/direct_sound_samples/cries/elgyem.aif b/sound/direct_sound_samples/cries/elgyem.aif index f1e94c13649415c320d0c42d6afe4436054fc142..04e9ec7ab66cdf5687a911371a072279d55347fb 100644 GIT binary patch delta 20 bcmZ1#`XPkF%|FPOfk7){B8S{YBQGrgNMHsa delta 80 zcmewmvMQ9r%|FPOfkA80L=HI~KSy6z1_lNeGXqnFjcQ(6dY&%E3P1rhAk7S<85m?j WJVT6tGz$;|RfPmOdqa7KhDHFgMh)8l diff --git a/sound/direct_sound_samples/cries/emboar.aif b/sound/direct_sound_samples/cries/emboar.aif index 4cdd5e0afc56ebd1197f5643a3a1a897ea7d0ffd..7bf61d285eb4c0d3c10d75af4efbbce6181a0b47 100644 GIT binary patch delta 26 hcmexSaIb*J%|FPOfx#lo(bLUsqM9P3!A1`Q3jlms2n7HD delta 52 zcmcat@S{M@%|FPOfx)7{(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o7jA0^=BBTCB HJp&5>o)Zo; diff --git a/sound/direct_sound_samples/cries/emolga.aif b/sound/direct_sound_samples/cries/emolga.aif index c32a7274513ad3d21fe5bd0b88bf71e918f86f07..20172f144692f4275cdaf38ee5dfe0d91b64c5bb 100644 GIT binary patch delta 26 hcmdm^zDS+N%|FPOfkAkdqo{%|FPOfx+C*(bLUsqM9P3#zqefa{zg<2iE`q delta 52 zcmcbX_aRTs%|FPOfx$e((bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;oFh+!g+BBT07 HJq>dJm}L$F diff --git a/sound/direct_sound_samples/cries/espeon.aif b/sound/direct_sound_samples/cries/espeon.aif index 51f96c911bfa6672282427cd8a5f4ea1bd4cee1b..bf1f52c94dd25158a947aafabb3911018adf9b3e 100644 GIT binary patch delta 20 bcmez8bIOOq%|FPOfkDk_B8S{YClxgSNu34x delta 68 zcmX@*^UsIF%|FPOfkCZoB8Qxqr(bXg0|SGI4Ff|x5JJI51uZoRKSy6zAYUNdG0ZjI PF~~VSAk5IxjKLfL4&V+z diff --git a/sound/direct_sound_samples/cries/espurr.aif b/sound/direct_sound_samples/cries/espurr.aif index d395bea397e229191d96c52820acc77cfa4b805d..6d82769b36afa991fa8455b254fd334929be8625 100644 GIT binary patch delta 20 bcmeyTvPFf%%|FPOfk8-TB8S{YD?T9rK(z%o delta 96 zcmdm@@=t}s%|FPOfkCKjB8QxapQEoU0|Nt(nYp=wu7YcEL1|IZMm0VmGfx*|1)zi; fkY)zb3=AqEo*_m+niq(XRfhyQdjo|)ii|7(^L`S} diff --git a/sound/direct_sound_samples/cries/eternatus.aif b/sound/direct_sound_samples/cries/eternatus.aif index 1dede8fdc4a87377f7f12ee6b5decd0f9d3b2c64..235bba61f9b1d9e9167b2b56c935ca40173a4715 100644 GIT binary patch delta 14 VcmaDhh3VN8rU|-?78~^}x&SX51&{y$ delta 14 VcmaDhh3VN8rU|-?<{R}ax&SX01&;s# diff --git a/sound/direct_sound_samples/cries/excadrill.aif b/sound/direct_sound_samples/cries/excadrill.aif index 8b2ef0869e8e612cc22d9f1692d1f007b2f261b3..cd372dffdb389186b299395b0634a0d627c73765 100644 GIT binary patch delta 23 ecmdlsgK^FbMjki+AYTRs9}!1SH@A&y0zLp$sRnKU delta 49 zcmbO;gK^soMm0D8AYTRsA3aA;H#a{=UsnbO2BC1rFxPm;Am{i1-*BgRQxju`jXVNA E08Um6vj6}9 diff --git a/sound/direct_sound_samples/cries/exeggcute.aif b/sound/direct_sound_samples/cries/exeggcute.aif index 384b9990940c4a45d0bf93139a16f0fffd4565cf..bd634c757040f614154cdd575142a05ad547ae4f 100644 GIT binary patch delta 20 bcmaFlxz3Zr%|FPOfk9>2L=L%)P8})$NZkg1 delta 68 zcmZ4I`N)&Q%|FPOfkEZgL=HJIPru+01_lNZ8wQ4YAcTUA3VkXPevZDbK)yh@W0-5a PV~}%vK$xL{5rZKB9y|`S diff --git a/sound/direct_sound_samples/cries/exeggutor.aif b/sound/direct_sound_samples/cries/exeggutor.aif index 15ddbbdfaa9aeaa9ff5a661b10bda5046385d831..094b27bc6f30f2519c0c652303eb267c62e7b1cd 100644 GIT binary patch delta 20 bcmZ2f^RAl1%|FPOfx-6KL=L%)PA6;uQt}6u delta 68 zcmaD?y{Lx6%|FPOfx%8{B8Qxqr(bXg0|SGI4Ff|x5JJI5g>$wNevZDbK)yh@W0-5a PV~}%vK$xL{F@qrh9o!Dg diff --git a/sound/direct_sound_samples/cries/exploud.aif b/sound/direct_sound_samples/cries/exploud.aif index 7b97db232dce3f102ed3bbb638240fa304bc9cca..98dafb1ee19ed1f3591fd031a1e8d85d97d57f36 100644 GIT binary patch delta 20 bcmbQ2_bQje%|FPOfx+z2L=L%)PDjiDPxJ>| delta 68 zcmaErJ1>vJ%|FPOfx%pCB8Qxqr(bXg0|SGI4Ff|x5JJI5g;Qn{evZDbK)yh@W0-5a PV~}%vK$wxGDT4_B5iJg( diff --git a/sound/direct_sound_samples/cries/farfetchd.aif b/sound/direct_sound_samples/cries/farfetchd.aif index d3838c6762d7f213d2444cdf22d6ca70690345ef..5a710ed7de15ba9bf78c6d0d394e3977ab6bd913 100644 GIT binary patch delta 20 bcmX>nJ4=?s%|FPOfq`$*L=L%)P9=N*J`n}0 delta 68 zcmbOwdrp?a%|FPOfr0PXL=HJIPru+01_lNZ8wQ4YAcTUA3RQd(evZDbK)yh@W0-5a PV~}%vK$wArF@qrh?}ZKL diff --git a/sound/direct_sound_samples/cries/farigiraf.aif b/sound/direct_sound_samples/cries/farigiraf.aif index 573520315de0aa7b1cb29c8be8318acd0db48328..d862b0d30e2fbe61922738c76fe88a1308670ef4 100644 GIT binary patch delta 18 acmdlok#WmJ#tFKNZIdTDW^SA=>j3~qjt5Kt delta 18 acmdlok#WmJ#tFKNt&=A@W^SA=>j3~qg$GLj diff --git a/sound/direct_sound_samples/cries/fearow.aif b/sound/direct_sound_samples/cries/fearow.aif index f111ca15a697c9e5f509520846929d1509b4f4c3..792269848223057ed6fc983612452e25d424df8b 100644 GIT binary patch delta 20 bcmdnw{LhKQ%|FPOfkClsB8S{YrwBy=N7e=` delta 68 zcmez8w8@#n%|FPOfkAQAL=HJIPru+01_lNZ8wQ4YAcTUA3UP`OevZDbK)yh@W0-5a PV~}%vK$wA%5rY{36F?4T diff --git a/sound/direct_sound_samples/cries/feebas.aif b/sound/direct_sound_samples/cries/feebas.aif index 7cc5452a4e33eace9065c6f00d3fecb733c2fd87..fc6e757134e6fbbcba98f679dc39e88e2da96968 100644 GIT binary patch delta 20 bcmew+cSw%I%|FPOfq~y@B8S{YCmDVKK)(e~ delta 68 zcmX>k_f3w&%|FPOfq_47B8Qxqr(bXg0|SGI4Ff|x5JJI51toq7KSy6zAYUNdG0ZjI PF~~VSAk5grlED-J=-CaF diff --git a/sound/direct_sound_samples/cries/fennekin.aif b/sound/direct_sound_samples/cries/fennekin.aif index a559267a27d32e90f78588bbb63d78970faa36d4..3feb83cdf8df403c7ad5f88f932bb9a584deaa3a 100644 GIT binary patch delta 20 bcmZ1#c_)Iy%|FPOfk7u^B8S{Y8#5gMM)C#v delta 100 zcmcZ;u_}_o%|FPOfk9`{L=HJIKSy6z1_lN`GgD&)T?Mz)yu8%x%)E_iW;zz0F2)K# iDFYzQ45S$tR6{&NjDR#h5TmLO33B!Z3Nit)2?GF{H59b~ diff --git a/sound/direct_sound_samples/cries/feraligatr.aif b/sound/direct_sound_samples/cries/feraligatr.aif index 070e204c3513309b064243d4891dd5699155f8b6..c71d66722bf04e34dba0b7e1f952d767a15d16c4 100644 GIT binary patch delta 20 bcmX?<+?UMZ<{#wCz+l)mkwb2yQ-&b`M+XK? delta 68 zcmeB6K9tPi<{#wCz+kv*B8Qxqr(bXg0|SGI4Ff|x5JJI5g*-zEKSy6zAYUNdG0ZjI PF~~VSAk5IrfWZ&|6wMBW diff --git a/sound/direct_sound_samples/cries/ferroseed.aif b/sound/direct_sound_samples/cries/ferroseed.aif index 24856cdd24eff09b1d33a09507e9ad7673dba6ee..1acd8342d0c35a51035f8c200f2bff96fea0fc2e 100644 GIT binary patch delta 21 ccmaFodc~E;%|FPOfkEkvqoIm1St6G{M8 C#toSO diff --git a/sound/direct_sound_samples/cries/ferrothorn.aif b/sound/direct_sound_samples/cries/ferrothorn.aif index 5e2d7a25794ab58f8e7098d751947c36bd68b10d..7e7f1ad3ad7be04c0e663118db4eddf4ce209828 100644 GIT binary patch delta 32 ncmZ1%JtdmQ%|FPOfkC&&(bLUsqM9OO+QdNdi3uDV)7^CeqZSFp delta 55 zcmbOdy)IhK%|FPOfkAhfqo1;a!hMaI;L KhO!&IJ#_)A=MLWh diff --git a/sound/direct_sound_samples/cries/fidough.aif b/sound/direct_sound_samples/cries/fidough.aif index 44609a2dd7a6fe880c959ec76e13f648204d212e..f2063bc79b4a34392b30b232ae1331191f7069fe 100644 GIT binary patch delta 22 ecmcZ*c_DIwF5{xj54m45PL`A8*euVqQ40Wb7zn)p delta 22 ecmcZ*c_DIwF5|+@54m45PL`A8*euVqQ40Wb2?)FZ diff --git a/sound/direct_sound_samples/cries/finneon.aif b/sound/direct_sound_samples/cries/finneon.aif index d6eb52466d1e954483252208fbdcb2ded4397d62..c2fe2f38bac7a0a5a837d6c5d37f00dd4f3bf184 100644 GIT binary patch delta 22 dcmbQ$!}zS5k;BbD$d`e^_1;7dxs6T-Tme_+2dDr5 delta 70 zcmaFX%{Z%vk;BbD$d`e^O=u#AoS3Iya0mkfgNO|SLp=~e!A6B+t`dHZzOF#NK)7R= RYrJESb9_LUiK!WbApj<)4(R{@ diff --git a/sound/direct_sound_samples/cries/flaaffy.aif b/sound/direct_sound_samples/cries/flaaffy.aif index a9f809d533cd86a67368162531250c61defe2ae0..068e82e76c054a52657be1e5a7784206ace20251 100644 GIT binary patch delta 20 bcmca-y2_Np%|FPOfkA4~L=L%)PAyUZMCk@I delta 68 zcmZ2wde4-@%|FPOfkEopL=HJIPru+01_lNZ8wQ4YAcTUA3SCkXevZDbK)yh@W0-5a PV~}%vK$xM00fQj`4P*{& diff --git a/sound/direct_sound_samples/cries/flabebe.aif b/sound/direct_sound_samples/cries/flabebe.aif index e309ae8c6274e58b351c516780f4cad9ba45ff50..a6dbe0321c6f9d9f7afd592b22a42d8c4a976da3 100644 GIT binary patch delta 20 bcmeCkU6aG%<{#wCz+k2_kwb2y4VxJNLOunA delta 114 zcmZ3J(~-;J<{#wCz+l!ekwZ?*&(YVFfq{X~%*;|jSHUeOF)1}ERbitVo0*%Zi?ISw z$__{~18D{ZlMv4kBOooyz`*$bpBaN0gC&CkgDw!eG2}2LG9)p)1mln(XK$b~kR~Go E0HMMb&j0`b diff --git a/sound/direct_sound_samples/cries/flamigo.aif b/sound/direct_sound_samples/cries/flamigo.aif index bed56a7f3131de1429d45c2e28ecb8f17189a5b7..2b022da5b07fd14e9ebed97e3acc7160bac74396 100644 GIT binary patch delta 20 ccmX?5cA#v6E~C&y!&j5@EZ8>7F)CRB09ug;RsaA1 delta 20 ccmX?5cA#v6E~DT?!&j5@EZ8>7F)CRB09u3xRR910 diff --git a/sound/direct_sound_samples/cries/flareon.aif b/sound/direct_sound_samples/cries/flareon.aif index d8e70213df9ff4317de51edaebea6815f6cbcc77..b8d33df49e57bfaa79a9800eba01c716620057e3 100644 GIT binary patch delta 20 bcmca-v&x3U%|FPOfk94bB8S{YCl)yXK@9~- delta 68 zcmZ2wbI*pu%|FPOfk7^8B8Qxqr(bXg0|SGI4Ff|x5JJI51ui)WKSy6zAYUNdG0ZjI PF~~VSAk5I%jKL59=(`Ps diff --git a/sound/direct_sound_samples/cries/fletchinder.aif b/sound/direct_sound_samples/cries/fletchinder.aif index 40623fbf323d8bf332f6725729b9dc1cb23d59db..2267e3fdfcc12ec4d0fc03cd8ff6ee40dfa6c49a 100644 GIT binary patch delta 20 bcmdlKc_)Iy%|FPOfk7u^B8S{Y2QwW2N1g@- delta 108 zcmcZ;u_=*_p>j(*Q_67=r6dD=<05$3s<^TWy diff --git a/sound/direct_sound_samples/cries/floatzel.aif b/sound/direct_sound_samples/cries/floatzel.aif index 60424b3679c8e92e38ebf21d5db26c9f40401466..36f34f5e903844bdb4dacd2b43c345fd574bfcf7 100644 GIT binary patch delta 22 dcmX@s!Z@jgk;BbD$d`e^iEAQ<+(xH2jsQ*N2EqUU delta 70 zcmbQ#!g#EOk;BbD$d`e^$!;QtoS3Iya0mkfgNO|SLp=~e!A6BojuL*3zOF#NK)7R= RYrJESb9_LUiJ>KfDF7rj4+Q`K diff --git a/sound/direct_sound_samples/cries/floette.aif b/sound/direct_sound_samples/cries/floette.aif index c55d10fb754244801012cc2105806def88135443..4244ce8eda6fb147396842fd4fcae5338e675f24 100644 GIT binary patch delta 22 dcmdlpo$=i?Mh-XsAYTRs@3e^=avNG diff --git a/sound/direct_sound_samples/cries/floette_eternal_flower.aif b/sound/direct_sound_samples/cries/floette_eternal_flower.aif index d6b9452b45307d9ab1039a8efec1d89c5f381df8..386815f08208324c87f16362dcf63b13f41c8b95 100644 GIT binary patch delta 22 ecmZ2Ch4IW}Mh-XsAYTRs&m$8#znQ`3|Mh-XsAYTRsFSUsrateNqzOD=m3=(GM2CfRa3T`?1sU;<;3L35@sYQ8- uIhq^QmU%jPx)>_}6sUZL_4IByp diff --git a/sound/direct_sound_samples/cries/florges.aif b/sound/direct_sound_samples/cries/florges.aif index 36b504932f6e781499d29148dd6b318fdf39285d..e652e68fa931545fe325315407490063da8e03ec 100644 GIT binary patch delta 22 ecmZ3tj`6`-Mh-XsAYTTCup1LO8ZsE8`XA&S$Mh_ lD*&YofHX6ZW?)ba@eDBn(tJRSqCOL6Iw_UI%|FPOfx)P2B8S{YryL^yNErrW delta 68 zcmbP~dMuU0%|FPOfx&3sL=HJIPru+01_lNZ8wQ4YAcTUA3PnZ|evZDbK)yh@W0-5a PV~}%vK$x+y0fQj`8Hx^? diff --git a/sound/direct_sound_samples/cries/fomantis.aif b/sound/direct_sound_samples/cries/fomantis.aif index 9690a53ee1360673bd0f08d375a82fc1c0a63ef9..a82e4d45249bf0e3b23b20e099cd84cff5ac9a4a 100644 GIT binary patch delta 20 bcmX@&|ILrX%|FPOfk8cQB8S{Yn*enHN;n2Y delta 100 zcmez7cf_B=%|FPOfkA!GL=HJIKSy6z1_lN`b5mmlT?M!N+{C<+%;Jq|0qPc>F2)K# iDFYzQ45S$t)IvN%jDR#h5TmLO33B!Z3WAgw8v_8jfE8N+ diff --git a/sound/direct_sound_samples/cries/foongus.aif b/sound/direct_sound_samples/cries/foongus.aif index dbd6f9c5cd7965630582620eebf54f230a5dca24..ca83e1b475f78405113281122ab146fbfe71e41e 100644 GIT binary patch delta 20 bcmdmC{m+WS%|FPOfkC!xB8S{YqX=05M%D%j delta 80 zcmexowZodj%|FPOfkAe|L=HI~KSy6z1_lNeQ%eJdjcO6HdY&%E3P1rhAk7S<85pEP YJVT6tGz$;|RfPmOdjnY@IZJZ}0IV+!r2qf` diff --git a/sound/direct_sound_samples/cries/forretress.aif b/sound/direct_sound_samples/cries/forretress.aif index 4fae6d0378c49399f9f5df50c7e1e8ce7f0133f9..9b8af8baa4b93a70fd7019884c1b7bac8e2b8c12 100644 GIT binary patch delta 20 bcmbQ|_sW;U%|FPOfkExjL=L%)PDj)LO4J7Y delta 68 zcmaFmJI{~9%|FPOfk9ntB8Qxqr(bXg0|SGI4Ff|x5JJI5g;Q!0evZDbK)yh@W0-5a PV~}%vK$ww%DT5&Z`$rBn diff --git a/sound/direct_sound_samples/cries/fraxure.aif b/sound/direct_sound_samples/cries/fraxure.aif index 25464a1ff70a83c26fb5e8eab8dd857e59e79e04..4586702b00f42a9ab49fdc6b91e77a316fdeda0e 100644 GIT binary patch delta 28 jcmZ27ov~{=BafSZkS_y+cax*1o7+S+MaGzo9x>hkd)Ek8 delta 54 zcmeC0&bVYcqnew4kS_y+_Z&x0H#a{=UsnbO2BC1rFxPm;Am{i1-*BgRQxhYGi9Cvo J(Hr$*yaAfE4uAjv diff --git a/sound/direct_sound_samples/cries/frigibax.aif b/sound/direct_sound_samples/cries/frigibax.aif index 10c5b819aaf0e295136c542d983dfa44c475a3d6..e8318a0cf1234e073b88baf70d5c82134800f55e 100644 GIT binary patch delta 20 ccmeBi>~Wl+%NRF#BmcC?{L<_jPal*A08d^AzyJUM delta 20 ccmeBi>~Wl+%NRR(BmcC?{L<_jPal*A08dc|zW@LL diff --git a/sound/direct_sound_samples/cries/frillish.aif b/sound/direct_sound_samples/cries/frillish.aif index c59a0a542fe94e0b8bb96fddadabbc7b2b9f95ea..71511b8bcf9ee29d3064163f14abb70d4196e2b0 100644 GIT binary patch delta 21 ccmZ2c-dE1!<{#wCz+m0x=;`LRQLV`u08YgQ&;S4c delta 47 zcmeAxUs0~+<{#wCz+k<=(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o3m|-JNlQjTG Ckqr_6 diff --git a/sound/direct_sound_samples/cries/froakie.aif b/sound/direct_sound_samples/cries/froakie.aif index 240992ff354e251a7a161f515cbe20cfa6499d36..d6955de8bc9f89b0e4ed1fd43bd56321dd2bc4f6 100644 GIT binary patch delta 20 bcmbQ|bIF^-%|FPOfkE}uL=L%)HfvM?N6-eS delta 98 zcmccQJqAu7X=peqwfJs=`LKHL7NwF2)K# hDLo*~45S$tR6;yMjDR#B5TmFM33B!ZiZKDPIRG&R6RQ9K diff --git a/sound/direct_sound_samples/cries/frogadier.aif b/sound/direct_sound_samples/cries/frogadier.aif index fa0c54c3f350d741b3f17df5c3fe4eddfa3426a5..918abc5d845ac108543a5612b93435527db77a16 100644 GIT binary patch delta 20 bcmbP|d?bm(%|FPOfx*ybB8S{YJ2^uDL^=h$ delta 102 zcmX?-G$onC%|FPOfx)n6B8QxWpQEoU0|SGAnW?#gu7X=petKd`W@?ebMm0G@3r`ng j1)!t>kY)zb3=C=^o*_m+S^$XAbc6&sdjmz8fY<^6!UPp_ diff --git a/sound/direct_sound_samples/cries/froslass.aif b/sound/direct_sound_samples/cries/froslass.aif index 2c6a0be001934e517fe3537b8a8d3d4ad4bbf7d6..75febf4311c9281aa22978bae3e57fd6e1e5cee9 100644 GIT binary patch delta 22 dcmdnDov~{>BZr%RkS_y6bkjr*xs6UK(EwNt2Ri@& delta 70 zcmeC$&bV(oBZr%RkS_y6^tOo{a$=r-!66I`3?eoR4D~<=1sfHzq9yzseO-ZkfpEt# R*LcSu=lFmy6LSj&697*G4}t&y diff --git a/sound/direct_sound_samples/cries/fuecoco.aif b/sound/direct_sound_samples/cries/fuecoco.aif index 4c0d7eb07a5f5f496cbbaabe613092f64af13541..ee40234e0b1f3587647dd229008dfc32cd663e06 100644 GIT binary patch delta 15 XcmdmCwZm$HE+f}O!`zLt=gI&8FNX!; delta 15 XcmdmCwZm$HE+gke!`zLt=gI&8FMkE# diff --git a/sound/direct_sound_samples/cries/furfrou.aif b/sound/direct_sound_samples/cries/furfrou.aif index bbddc63c06c2980986130d8757b4b0d10f7bf396..d989bde3d3943055b2dfe853785c4e2db71b8fd1 100644 GIT binary patch delta 20 bcmexjz08`!%|FPOfkAfOL=L%)HVv`>M->K1 delta 100 zcmZ2x{l%KY%|FPOfkF1oL=HJIKSy6z1_lN`GjlTqT?Mz&qO_v?QiY9b4YC%VF2)K# jDFYzQ45S$tR6{&NjDR#B5TmFM33B!Zih)!anKJ+Yq{kH5 diff --git a/sound/direct_sound_samples/cries/furret.aif b/sound/direct_sound_samples/cries/furret.aif index 6ce107b10f3e00521dd7f91e5dcaf7fb3470df6c..cdf9447d734eaabf1e6cc91c089afebd5630a2a6 100644 GIT binary patch delta 20 bcmew*aZG~4%|FPOfq}m@k@fk%|FPOfq|!JB8Qxqr(bXg0|SGI4Ff|x5JJI51vMTCKSy6zAYUNdG0ZjI PF~~VSAk5Irh`|s5=n)Nv diff --git a/sound/direct_sound_samples/cries/gabite.aif b/sound/direct_sound_samples/cries/gabite.aif index 17226eb283068b070d47a2b0408176c0dccd3781..5ca21cec7ae9dad999093b599d937638deffc2d0 100644 GIT binary patch delta 20 bcmbPaanGE?%|FPOfkFD(L=L%)PCKLlMGgjv delta 68 zcmca-KFNZ^%|FPOfkB3AB8Qxqr(bXg0|SGI4Ff|x5JJI5g?-WzevZDbK)yh@W0-5a PV~}%vK$wY%34o)4G%LV{9EC$U0 delta 14 Wcmca}o$=0f#tFKNYd7kx%LV{9CkD&_ diff --git a/sound/direct_sound_samples/cries/galvantula.aif b/sound/direct_sound_samples/cries/galvantula.aif index d6823775657a67661bb41d0a2ff6abe67e881e18..8d890a2463655ed516d43594c922d635c1f22166 100644 GIT binary patch delta 26 hcmZq3c$UuN<{#wCz+imO(bLUsqM9P(j*T8Wi~)Ko2@(JR delta 52 zcmaEs-jJc@<{#wCz+n8t(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;oFf?*<$BIEXr HdOM5(okR~r diff --git a/sound/direct_sound_samples/cries/garbodor.aif b/sound/direct_sound_samples/cries/garbodor.aif index ed906101f30f5ae4d963211a5dd2650679d7bd71..09cad5cd7f9a4fb941815766b23005d23a7c3a03 100644 GIT binary patch delta 28 kcmbO+jq%@9Mjki+AYTRsuWyc?Zf+CR6d5mU^tj*!0FML;761SM delta 54 zcmex2m2t*2Mm0D8AYTRsZvjV7H#a{=UsnbO2BC1rFxPm;Am{i1-*BgRQ*#rBi9Cvo K=QrwI@B#pxvJXW7 diff --git a/sound/direct_sound_samples/cries/garchomp.aif b/sound/direct_sound_samples/cries/garchomp.aif index a5165a73381b3d4bb25c390c4408b58a4bd287c4..f96c62f93bdfd4356fe710db2cd620629717c119 100644 GIT binary patch delta 20 bcmZ3K^e&OZ%|FPOfx+O}L=L%)PA3ciPRIvH delta 68 zcmaEtxG0Ik%|FPOfx%E}B8Qxqr(bXg0|SGI4Ff|x5JJI5g>wcHevZDbK)yh@W0-5a PV~}%vK$wY%DT5&Z3}Oz4 diff --git a/sound/direct_sound_samples/cries/gardevoir.aif b/sound/direct_sound_samples/cries/gardevoir.aif index f7cd7d523993327028d3d1de7fd6d148dd58c857..9285affb9d3b80675a4faade81a520ec3459b639 100644 GIT binary patch delta 20 bcmbOfe=m;1%|FPOfk8iPB8S{YCkuT5Mp6a< delta 68 zcmcZ?Hz}UO%|FPOfkD4(B8Qxqr(bXg0|SGI4Ff|x5JJI51v`BSKSy6zAYUNdG0ZjI PF~~VSAk4_Zh`|s53pWlu diff --git a/sound/direct_sound_samples/cries/gastly.aif b/sound/direct_sound_samples/cries/gastly.aif index 8dd90bff4d75852f5a64d60d8b938449069e3bf0..5174cabffd5a9b0ccad21d0afe1d179cf37843a0 100644 GIT binary patch delta 20 bcmewtbt;O(%|FPOfkD@4B8S{YCly@)OWOt` delta 68 zcmX>V^)HIU%|FPOfkC%yB8Qxqr(bXg0|SGI4Ff|x5JJI51ub0(KSy6zAYUNdG0ZjI PF~~VSAk4thh`|H^7)cId diff --git a/sound/direct_sound_samples/cries/gastrodon.aif b/sound/direct_sound_samples/cries/gastrodon.aif index 7c33ebd99ba31fd1e4109cf308d54b8fab882512..d564820e832bc795ea6b16a8d1a8c5c9c8df6e80 100644 GIT binary patch delta 22 ecmbOloU(-*_x<{#wCz@W!Akwb2y(+gbyLhJ@O delta 68 zcmeB+ITXX;<{#wCz@TR}kwZ?*(=RxLfq_B9hJm3T2%%u3!aH3FKSy6zAYUNdG0ZjI PF~~VSAk4trguw&=0jv&p diff --git a/sound/direct_sound_samples/cries/gible.aif b/sound/direct_sound_samples/cries/gible.aif index 47b8635e969192845587a9c1752e9e54d32c0e92..f3d4b4882f643db8618c9dac276fa3e724eaa957 100644 GIT binary patch delta 20 bcmcbmzD%9N%|FPOfkAlQL=L%)P7T5ULF)zi delta 68 zcmZ3ceoLLh%|FPOfkF7vL=HJIPru+01_lNZ8wQ4YAcTUA3T?s?evZDbK)yh@W0-5a PV~}%vK$wY%F@qrh0E-Sa diff --git a/sound/direct_sound_samples/cries/gigalith.aif b/sound/direct_sound_samples/cries/gigalith.aif index e5c2f6419eb77f04e8f79e0dfdbfa7a575dbf610..00ad607cc67728daa4cb7c722c765476e055a5d7 100644 GIT binary patch delta 23 ecmew|jq%nrMjki+AYTRs?;uA{H@A&ye%=6LUu diff --git a/sound/direct_sound_samples/cries/giratina.aif b/sound/direct_sound_samples/cries/giratina.aif index 105a24de0f9f680f0e4b5e936e16a1159d4f4f00..319e2c132324bc43eb0bd44bab9d7e2560618c84 100644 GIT binary patch delta 22 dcmcb&gmKjpMh-XsAYTTCAf<^MavPmkf&f-727>?q delta 70 zcmZ3rgz?@IMh-XsAYTTCps7({Fs80vu#3N|XNijeSg^mPUD1;QP} RT;m;soZ|z+Ow0`#3;}`25M}@X diff --git a/sound/direct_sound_samples/cries/glalie.aif b/sound/direct_sound_samples/cries/glalie.aif index 233515b6aa438cb69ce7988853a7e2617f17513a..38291bef49af3f14c1cb760d4f1195344bfa47e8 100644 GIT binary patch delta 20 bcmX>XI4h9D%|FPOfk9)^L=L%)P9+)uMr8&^ delta 68 zcmbOgcrK8`%|FPOfkETgL=HJIPru+01_lNZ8wQ4YAcTUA3RM~sevZDbK)yh@W0-5a PV~}%vK$x+a5ra7Z65I}n diff --git a/sound/direct_sound_samples/cries/glalie_mega.aif b/sound/direct_sound_samples/cries/glalie_mega.aif index 44261f52713e4115cb52827cb9c901e27ec53437..cae5ba57f107b356eae5f9a4719709e2d1716373 100644 GIT binary patch delta 14 Vcmdn7mvP5l#tFKNT^sef;s7v71^fU2 delta 14 Vcmdn7mvP5l#tFKNog4MK;s7v21^WO1 diff --git a/sound/direct_sound_samples/cries/glameow.aif b/sound/direct_sound_samples/cries/glameow.aif index ad1d87353c2c1b565f9cc09423bf85f273abb714..a2d7ab1fa3ccb2c8977a7b457156530650dd29ba 100644 GIT binary patch delta 20 bcmaE4yv~@z%|FPOfkATFL=L%)P92f}MOOwr delta 68 zcmZ2y{K%NY%|FPOfkE=tL=HJIPru+01_lNZ8wQ4YAcTUA3Vo6ievZDbK)yh@W0-5a PV~}%vK$wZKA%h_R4{Hu~ diff --git a/sound/direct_sound_samples/cries/glastrier.aif b/sound/direct_sound_samples/cries/glastrier.aif index 6109f1ca0b601e5da3aa95e240eb33c981d7258f..80c44e0b764ae009caddeac46447ede7c63390f7 100644 GIT binary patch delta 14 Vcmdn-hH=Lm#tFKNTpRVc$^bDM1#$oY delta 14 Vcmdn-hH=Lm#tFKNoE!DH$^bDH1#tiX diff --git a/sound/direct_sound_samples/cries/gligar.aif b/sound/direct_sound_samples/cries/gligar.aif index 4908fb6b0996d4f1493dcb217845cfd756731eab..e2103c2ff846f293dcef5321f94b70779c357d77 100644 GIT binary patch delta 20 bcmX@7KTDs(%|FPOfkAxIL=L%)P9@?1K=TFR delta 68 zcmbQGe@>sn%|FPOfkFJ(L=HJIPru+01_lNZ8wQ4YAcTUA3RU6~evZDbK)yh@W0-5a PV~}%vK$ww%IfE$x`?3xn diff --git a/sound/direct_sound_samples/cries/glimmet.aif b/sound/direct_sound_samples/cries/glimmet.aif index 38fc118b26ab119fd20d167eac8c331af55214d4..e89ac2ea59cdf5ee3ddd029a468487ed06b583a1 100644 GIT binary patch delta 21 dcmaE|neoYH#tFKN+a?-rntUOMbK}e35dd=I3d8^a delta 21 dcmaE|neoYH#tFKNTPGTBntUOMbK}e35dd=63c~;Z diff --git a/sound/direct_sound_samples/cries/gliscor.aif b/sound/direct_sound_samples/cries/gliscor.aif index ccd116c29198dd0b57141c3cb2157d5fc22c0f47..1df92dc9a932e9b52d173e05b3c82b19008bb930 100644 GIT binary patch delta 20 bcmbPKcCVDf%|FPOfx+t9L=L%)PCKjsPW%T% delta 68 zcmcatI;o7q%|FPOfx((h4IW}Mh-XsAYTRs&m$8#znQ___Mh-XsAYTRsFTRN!aw2|?zOD=m3_ND$#tOO$?)mBYi6tA=mU)_ax)>_} iCG>zaGmvIrPzmu2F#^)OK#Z(9B*@ttC{`M&bsx delta 68 zcmeyQy-bJ0%|FPOfk8}eB8Qxqr(bXg0|SGI4Ff|x5JJI5g-fCmevZDbK)yh@W0-5a PV~}%vK$wB4DT6rx>l6+6 diff --git a/sound/direct_sound_samples/cries/golem.aif b/sound/direct_sound_samples/cries/golem.aif index 06451cdf1bf70732d3284bbafa8c240221ec085c..95fbef9c47c62b7fddaba3f7c53f7cb16a8d8f97 100644 GIT binary patch delta 20 bcmX?P-e=C?<{#wCz#!c=kwb2yQ-(AEKl=sA delta 68 zcmeA(KV;6~<{#wCz#zSAB8Qxqr(bXg0|SGI4Ff|x5JJI5g*<5qKSy6zAYUNdG0ZjI PF~~VSAk4trjKKf^_WTY8 diff --git a/sound/direct_sound_samples/cries/golett.aif b/sound/direct_sound_samples/cries/golett.aif index f0f31bda7e33a5529ff398bc295ec1d924c8eac8..58c6f09cd8e8583a4c66aad82e5160f837aee8d8 100644 GIT binary patch delta 21 ccmcZ?awLSu%|FPOfkDg0(bLUsqnd>l08SbPKmY&$ delta 47 zcmX>SaxX;9%|FPOfk7+G(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P$gkd9(g%$uo CiwuJR diff --git a/sound/direct_sound_samples/cries/golisopod.aif b/sound/direct_sound_samples/cries/golisopod.aif index 7b3f85220d043f1838b4bb275af15c20d151f5ae..429f445ede688ff1b7497584537341715cc75724 100644 GIT binary patch delta 22 dcmZ3nkn!3AMh-XsAYTTC0KbVGavSXo0svLt2EqUU delta 106 zcmcb%fN{k_Mh-XsAYTTCfCUpd_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%V!;3aT|^f3 diff --git a/sound/direct_sound_samples/cries/golurk.aif b/sound/direct_sound_samples/cries/golurk.aif index 1795ca8f4a0941d89f8eae360f957edfa645ec97..abc95bd80802d59e1be8e023c1f682f8afafc26d 100644 GIT binary patch delta 23 ecmaDef$`D=Mjki+AYTRs4=+bgH@A&yZXN(%nFlTa delta 49 zcmcaKf$_}*Mm0D8AYTRsj}%8wH#a{=UsnbO2BC1rFxPm;Am{i1-*BgRGXqnGjXZ81 E0A{KUasU7T diff --git a/sound/direct_sound_samples/cries/goodra.aif b/sound/direct_sound_samples/cries/goodra.aif index 0ec7cb4da90e1a35a608b215e7429b57138df2fe..b2f407cc94d1d3357bdf2ef3a7df236158a3e3c3 100644 GIT binary patch delta 20 bcmZ2dd#i@S%|FPOfx#|lB8S{YD-$~aOaKO0 delta 96 zcmcarv!s^8%|FPOfx&LhL=HI-KSy6z1_lNma|1I4T?P02{FI`^jcO)#W}Ys_3P1@x gAk7S<85mSTJVT6tG%pY%s}2cr_67=p6q%X>06|w1nE(I) diff --git a/sound/direct_sound_samples/cries/goomy.aif b/sound/direct_sound_samples/cries/goomy.aif index a35a42f53fed662154bbcfa0537e781e5875b894..bd2524ebe1e942e8cc5e088e929906a641daebd3 100644 GIT binary patch delta 20 bcmcbT*_FxR<{#wCz+loekwb2yRf-7!NZkfq delta 96 zcmeCmypqY`<{#wCz+iG_B8QxapQEoU0|Nt(xq*p-u7Z1her~10Mzs_ZGfx*|1)zi; gkY)zb3=GO4o*_m+ng@uHREGpPdjmy4YD`TT04#wM6aWAK diff --git a/sound/direct_sound_samples/cries/gorebyss.aif b/sound/direct_sound_samples/cries/gorebyss.aif index 48277537ac9009a10a654eac55b127228cfd3ceb..a93b1aa6fc89cade945518ec04b175c11a354233 100644 GIT binary patch delta 20 bcmX>U-WSf{<{#wCz@XhWkwb2yQ-(GGMH>bw delta 68 zcmeARKNQa4<{#wCz@WWrB8Qxqr(bXg0|SGI4Ff|x5JJI5g*t%|FPOfkE8Q(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P$jA0{>fj9sy CbPMwU diff --git a/sound/direct_sound_samples/cries/gothitelle.aif b/sound/direct_sound_samples/cries/gothitelle.aif index f7f12020708e8a0ab44fe460e3d888a7a783f45d..d8f334784ad45c73f3fb941484c41fd6f4cb9841 100644 GIT binary patch delta 22 ecmZ3ojq%-9Mh-XsAYTTCsAm&7S+W2HXGu delta 106 zcmdmWj` delta 122 zcmdmWj&aU;Mh-XsAYTTC^eGcL_}6sWAYER~+2{ diff --git a/sound/direct_sound_samples/cries/granbull.aif b/sound/direct_sound_samples/cries/granbull.aif index 6c4563fb38954683d46bbd89b30c704206cc307a..87ed96a84273b20978744025626b93108031c211 100644 GIT binary patch delta 20 bcmbOi^D3Id%|FPOfkF4tL=L%)PDgYBO%ewt delta 68 zcmaDAJuimC%|FPOfk97fB8Qxqr(bXg0|SGI4Ff|x5JJI5g;Tl`evZDbK)yh@W0-5a PV~}%vK$wxC0fPwu1j`Oy diff --git a/sound/direct_sound_samples/cries/graveler.aif b/sound/direct_sound_samples/cries/graveler.aif index 84828f10f8f6f610c633d592569b1153529dbe48..fbf463c4fd2e3d99b9f9f4323b6b6c126ac70dfa 100644 GIT binary patch delta 20 bcmaEsvnhwe%|FPOfx%2`B8S{YCmu5ZN<9Vn delta 68 zcmdm#^DKwM%|FPOfx#?pB8Qxqr(bXg0|SGI4Ff|x5JJI51tBvDKSy6zAYUNdG0ZjI PF~~VSAk4trl))ST5GW2j diff --git a/sound/direct_sound_samples/cries/greninja.aif b/sound/direct_sound_samples/cries/greninja.aif index 3050e4c5d9d4e9394a57342109370b6236445828..988d66b062825b70d16d95c51040de235d17da18 100644 GIT binary patch delta 20 bcmZ2cd#i@S%|FPOfx#|lB8S{Y8xuPKOjZV7 delta 100 zcmcarv!a&6%|FPOfx&LUL=HJIKSy6z1_lN`GgAu%T?O}|)V$2Rti+9KCUzE{F2)K# iDFYzQ45S$tR6{&NjDR#h5TmLO33B!Z3Nit)B?ADz(-kNH diff --git a/sound/direct_sound_samples/cries/grimer.aif b/sound/direct_sound_samples/cries/grimer.aif index 160cfe766ce910f3817bb6a17e9d56ee8cb3bd30..050fb9620c355129da4c1af6ba353acaa93a765d 100644 GIT binary patch delta 20 bcmdm_`A>tx%|FPOfkC8fB8S{Yrw9=ML#zef delta 68 zcmeyTu}PD|%|FPOfk9-|L=HJIPru+01|Y|VfuSAM$_^s{ diff --git a/sound/direct_sound_samples/cries/grotle.aif b/sound/direct_sound_samples/cries/grotle.aif index 71a2d7d1a8ce4d8306a3c166ced85ffabc38c5ea..2b08bca67e7a57c847f3a3b2543598dcf7ac151d 100644 GIT binary patch delta 20 bcmaFlxz3Zr%|FPOfk9>2L=L%)P8})$NZkg1 delta 68 zcmZ4I`N)&Q%|FPOfkEZgL=HJIPru+01_lNZ8wQ4YAcTUA3VkXPevZDbK)yh@W0-5a PV~}%vK$x+G1%m+q9(NAH diff --git a/sound/direct_sound_samples/cries/groudon.aif b/sound/direct_sound_samples/cries/groudon.aif index f8056c54b347dc3031c5cec1555d2dda899b52ba..9fe253745ae27e7b4c68dc17a75cf0e541170196 100644 GIT binary patch delta 22 ecmbO?f$>#8BZr%RkS_y+`=f~*avPnFxB~!LVh6+k delta 70 zcmaFW&p2-aBZr%RkS_y+huB08IWbSa;1C7|1`!(uhI$}`f{hBN+$H=ReO-ZkfpEt# R*LcSu=lFmyV+&&jGXN~y4+#JO diff --git a/sound/direct_sound_samples/cries/groudon_primal.aif b/sound/direct_sound_samples/cries/groudon_primal.aif index c88326947000a4b65b5a7e9e7c7346da437cf0c4..a93d06a3fe93e6772299d148cc25ae39cbc9c592 100644 GIT binary patch delta 14 VcmeBaX6k8XnxM-Vw^1*y5dbC21pNR2 delta 14 VcmeBaX6k8XnxM-VyHPK$5dbB|1pEL1 diff --git a/sound/direct_sound_samples/cries/grovyle.aif b/sound/direct_sound_samples/cries/grovyle.aif index 7015e6430974169e01cd8d60c362fa18fe74c7ea..c21c58ad090663f967761cee68a20c0773ea661d 100644 GIT binary patch delta 20 bcmaFozssM)%|FPOfkA!KL=L%)PE*tYOcMsd delta 68 zcmdnx|IVMo%|FPOfkFM*L=HJIPru+01_lNZ8wQ4YAcTUA3bWKD{2YB(_pfd~Zv delta 102 zcmdmRkn!I^Mh-XsAYTTCgl`i$!0dSa`Y^ kD*&YofHX6ZW?)bY@eDBn()>V-sy-yh*&8SbQf6oh09q>-L;wH) diff --git a/sound/direct_sound_samples/cries/gurdurr.aif b/sound/direct_sound_samples/cries/gurdurr.aif index 8cb56e5a702b4fde596f3a0e937c72133bd1cce1..055d366a91b23220e86111bc95f604eabdb8e8fa 100644 GIT binary patch delta 23 fcmX>xnQ`4@Mjki+AYTRs&t;CDZf+aZ7I^{yUIz!J delta 49 zcmZ2CneoJAMm0D8AYTRs&jXI0Zf<^#zOD=m3_{_KVXpCxLC*03zTr;sW=7@=8+jIa F0sv?54ekH{ diff --git a/sound/direct_sound_samples/cries/guzzlord.aif b/sound/direct_sound_samples/cries/guzzlord.aif index ed99b290182da480403df128cfa779a7e52800f8..958e0b7ed367297827261974026c22e50f02af18 100644 GIT binary patch delta 22 ecmZp9$GGh+BZr%RkS_y6*}91wavNBZr%RkS_y6*`J9Va$V-sy-yh*&8SbQf6)m0BB``sa$V-sy-yh*&8SbQf6ih0M`^1hyVZp diff --git a/sound/direct_sound_samples/cries/happiny.aif b/sound/direct_sound_samples/cries/happiny.aif index 90d8ccb015bd3653d1f8248d911d3c96aa16202e..bee72680ac18191cf83418203c9ccaa3e22a4413 100644 GIT binary patch delta 20 bcmbPd_R5sQ%|FPOfkEogL=L%)PDi8wM*Ie} delta 68 zcmaE5I?s&5%|FPOfk9eqB8Qxqr(bXg0|SGI4Ff|x5JJI5g;P=zevZDbK)yh@W0-5a PV~}%vK$wY%0fPYm>kSR< diff --git a/sound/direct_sound_samples/cries/hariyama.aif b/sound/direct_sound_samples/cries/hariyama.aif index 3455304fb1bd4e3136e5f37bb472e6799aa57b50..0a61e0d8ae75e7c6bd93c9ffb8538c6ba3066f28 100644 GIT binary patch delta 20 bcmdny*yPCJ<{#wCz@Shykwb2yQ;Y%tKUD>{ delta 68 zcmZp2+~&yP<{#wCz@V^hB8Qxqr(bXg0|SGI4Ff|x5JJI5g(L+DKSy6zAYUNdG0ZjI PF~~VSAk4_poWT?T^RW&7 diff --git a/sound/direct_sound_samples/cries/hattrem.aif b/sound/direct_sound_samples/cries/hattrem.aif index 57f46a4979208e685c25e9332f0ad842579cdebf..444c77028352241fc7a7e0da4411b03c44ccf076 100644 GIT binary patch delta 14 WcmZ27hjGaq#tFKN-!|%f^92AdK?Yd> delta 14 WcmZ27hjGaq#tFKNUpMM~^92AdJO)?* diff --git a/sound/direct_sound_samples/cries/haunter.aif b/sound/direct_sound_samples/cries/haunter.aif index 83dd20697fc019aaa63f5fd02aa87d176cc0e129..c9192cf9bcd18a975c71102c3802a235f8c9792e 100644 GIT binary patch delta 20 bcmcZ=y)2r;%|FPOfkAiPL=L%)P7S&MN_HZu!P7h?sW hlmU=t2GR@+Y9XE>MnIY$h*8yt1UY*H1wqP8jR2i#6xRR% diff --git a/sound/direct_sound_samples/cries/haxorus.aif b/sound/direct_sound_samples/cries/haxorus.aif index 7fc4043d360309039d330879cd2100820115c476..8414951d49fea307e35ab6e7ffeb7a9d4c27569f 100644 GIT binary patch delta 28 kcmdlogK^djMjki+AYTRsA0bCiH@Asuii~eIdc5%l0DUgT diff --git a/sound/direct_sound_samples/cries/heatmor.aif b/sound/direct_sound_samples/cries/heatmor.aif index a73dd97e4a015679d0105d3fe6252c0dc7defc7a..2a254ef0d96e3b12ca7ab31aa107324aa933f436 100644 GIT binary patch delta 23 ecmew{jq%wo$=i?Mh-XsAYTRs@3e^=avSYDya8D62Lu2B delta 106 zcmaDijq$*AMh-XsAYTRs?;R64_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%V#WXfZ#5Si diff --git a/sound/direct_sound_samples/cries/helioptile.aif b/sound/direct_sound_samples/cries/helioptile.aif index cb935b70ae8014bec9a178a417e27558b8d932c1..aa1a9fb3a60d77585e75ea1fe50738ce12a8cc78 100644 GIT binary patch delta 20 bcmZ2fa3P<=%|FPOfx-O5L=L%)cB{+*O|l0R delta 104 zcmcbRzo>x2%|FPOfx$v*B8QxWpQEoU0|SGAnWc$>u7XEuPG){VNoG#!MzvMuR-P`# k3P4FCAk7S<85lG|JVT6tv>*_p>j(*Q_67=r6q=X<036^J;Q#;t diff --git a/sound/direct_sound_samples/cries/heracross.aif b/sound/direct_sound_samples/cries/heracross.aif index e5347faf2413c80c87a9ad901a896d4f5a972569..1fe12ed524988b9dbc14e9c3f85af974dbeeeaf5 100644 GIT binary patch delta 20 bcmccQKF^)Q%|FPOfkAoNL=L%)P8G@kMT-VG delta 68 zcmbQ|e#xD~%|FPOfkFAyL=HJIPru+01_lNZ8wQ4YAcTUA3U$g7evZDbK)yh@W0-5a PV~}%vK$wxC34=KR4`vQ` diff --git a/sound/direct_sound_samples/cries/heracross_mega.aif b/sound/direct_sound_samples/cries/heracross_mega.aif index 67faa6f196d2caabf7ba872827c108b029111005..e1993473c20a609bea3836151296cd862fa8d0a9 100644 GIT binary patch delta 14 Vcmdn6opHl<#tFKNO&j%^q5&?v1` delta 70 zcmbQ$#dxlZk;BbD$d`e^)omh&oS3Iya0mkfgNO|SLp=~e!A6B&E)sr@zOF#NK)7R= RYrJESb9_LUiHRkH0RS&Q4>bS) diff --git a/sound/direct_sound_samples/cries/hippowdon.aif b/sound/direct_sound_samples/cries/hippowdon.aif index 42f2860c81a2c531998f175ca2332e1be5bea0b9..94649f3f250326eea6d3896978888e4cce4e5642 100644 GIT binary patch delta 22 ecmX@Mg>ljrMh-XsAYTTCD6WYdavPoAL;?U-B?nRf delta 70 zcmbQVh4I)HMh-XsAYTTCD7%Rqa$=r-!66I`3?eoR4D~<=1sfGUMN0TN`nm%70^yEf RuJMjR&hY_ZCZ+}qCICf2503x< diff --git a/sound/direct_sound_samples/cries/hitmonchan.aif b/sound/direct_sound_samples/cries/hitmonchan.aif index a0b974db92e7a12019cb779f994e3ac392a659b8..279370fc9c1241a56085b099a4743c19484d67d1 100644 GIT binary patch delta 20 bcmaFly3Uou%|FPOfkA26L=L%)P8~`BNI3>` delta 68 zcmZ4I`pA{T%|FPOfkElkL=HJIPru+01_lNZ8wQ4YAcTUA3VlivevZDbK)yh@W0-5a PV~}%vK$xL{IfDTJ81b2B`o5 delta 70 zcmX@r#`v#|k;BbD$d`e^xojeboS3Iya0mkfgNO|SLp=~e!A1owX9+(?UsoVsAlxy` RHQq7EIX)oF#Mpqr6aYHC4&?v< diff --git a/sound/direct_sound_samples/cries/honedge.aif b/sound/direct_sound_samples/cries/honedge.aif index 75e95b0738d7ff7915a5d04cb8f8bd0704bfc645..e1204fddfecbd5dfcd74f2e13f25aeec8f840ee0 100644 GIT binary patch delta 20 bcmbP~d?bm(%|FPOfx*ybB8S{Y8#zM&L<|ME delta 100 zcmX?-G%1?}F2)K# j2|Xaq45S$tltVm2jDR!`5F@D$33B!Zih$IZ8!`X@UUCzL diff --git a/sound/direct_sound_samples/cries/hoopa_unbound.aif b/sound/direct_sound_samples/cries/hoopa_unbound.aif index 8867fe42a3d4a80908960ffeb4fc740b48826b51..2b4d84015b03971ec0b208f52cb3820a94bb90cf 100644 GIT binary patch delta 14 VcmaFY%lNLBae^-6fsJ|x+yFA623!CD delta 14 VcmaFY%lNLBae^-6{*8JE+yFA123r6C diff --git a/sound/direct_sound_samples/cries/hoothoot.aif b/sound/direct_sound_samples/cries/hoothoot.aif index 46dcbdddfdb07f2ce929866ccaa3afbbc6030bd4..52bccc8e9103de7e82f213c4b713399c39c6dde9 100644 GIT binary patch delta 20 bcmaE*wM~n|%|FPOfk9MnB8S{YCjn6aKx+j< delta 68 zcmdm{^-7Dw%|FPOfk8BBB8Qxqr(bXg0|SGI4Ff|x5JJI51u;&&u delta 68 zcmaE+FiVlc%|FPOfk9x>L=HJIPru+01_lNZ8wQ4YAcTUA3T^@tevZDbK)yh@W0-5a PV~}%vK$xM0IfDTJ=kyJx diff --git a/sound/direct_sound_samples/cries/horsea.aif b/sound/direct_sound_samples/cries/horsea.aif index 7382a8a69fcd4abc3243198d8aaf33f3ff1fe0c3..12801a2076ed13dca0ffb855d4b34645189d2663 100644 GIT binary patch delta 20 bcmZ3b`b~wy%|FPOfk7y5B8S{YrvM=UL5Kyi delta 68 zcmeySvPzZ1%|FPOfk9}|L=HJIPru+01_lNZ8wQ4YAcTUA3SmMLevZDbK)yh@W0-5a PV~}%vK$xMS8G``;_!|xC diff --git a/sound/direct_sound_samples/cries/houndoom.aif b/sound/direct_sound_samples/cries/houndoom.aif index a9c4d2d122c092e87f5a4cee885f7297e6b6cb4b..09c6e4957f48acd617f63e4acf4bd8f74c11e123 100644 GIT binary patch delta 20 bcmez7bI6Co%|FPOfkDk`B8S{YCmA&WNF4>) delta 68 zcmX@)^Ua6D%|FPOfk7>AB8Qxqr(bXg0|SGI4Ff|x5JJI51tm2JKSy6zAYUNdG0ZjI PF~~VSAk4_flEDA~2m=ll diff --git a/sound/direct_sound_samples/cries/houndoom_mega.aif b/sound/direct_sound_samples/cries/houndoom_mega.aif index 7bf51ba800f476518adb884c90907927ec0aef9e..102f822cc69f6966d535eeff78d4740057936f7d 100644 GIT binary patch delta 14 VcmdmUfN{?O#tFKNd>i%n5&$ib1rz`P delta 14 VcmdmUfN{?O#tFKNyc_lS5&$iW1rq=O diff --git a/sound/direct_sound_samples/cries/houndour.aif b/sound/direct_sound_samples/cries/houndour.aif index b366e0d068969525f564df791cce15ffe0be2a5a..352d8fd897c6129ca3c2cb89b877f925bef85ea4 100644 GIT binary patch delta 20 bcmca+xX6&h%|FPOfk9%{L=L%)PBjt$Ld6CL delta 68 zcmZ2vc+HT*%|FPOfkEQjL=HJIPru+01_lNZ8wQ4YAcTUA3QZCcevZDbK)yh@W0-5a PV~}%vK$ww{1%m+q1L_V# diff --git a/sound/direct_sound_samples/cries/houndstone.aif b/sound/direct_sound_samples/cries/houndstone.aif index 145cc7968284b17c68ef09c53061ce4fd59e47f2..99e699b7bab670b2255a37fda13da04b03a9c448 100644 GIT binary patch delta 44 wcmbPpm~qZw#tFKNd6ONzv?ot+WtrF@I62;1Wpcb1FN7;Jd4fCV#(nn^0Csy39RL6T delta 44 wcmbPpm~qZw#tFKNxsx5ev?ot+WtrF@I62;1Wpcb1FN7;Jd4fCV#(nn^0Crdr8~^|S diff --git a/sound/direct_sound_samples/cries/huntail.aif b/sound/direct_sound_samples/cries/huntail.aif index 2b930a3eb0d50eb721a843d2a2b43a8b64b09f58..b520d2b7a8c3da31ac2f00a6c79c547ade6e7c4e 100644 GIT binary patch delta 20 bcmZ2v_s*8X%|FPOfkE!sL=L%)PAB95NdyMm delta 68 zcmaE7yU32i%|FPOfk9qsB8Qxqr(bXg0|SGI4Ff|x5JJI5g>!NeevZDbK)yh@W0-5a PV~}%vK$x+aIfDTJ^YsoL diff --git a/sound/direct_sound_samples/cries/hydrapple.aif b/sound/direct_sound_samples/cries/hydrapple.aif index a9d306e93ca2be20298a3349f76ab38ae5e6b4f5..45f5fd9ca019bc79c4db4f4f62cbd5ddb45979e5 100644 GIT binary patch delta 14 VcmZoU&e(FCae^*m*hamuWB@9(1w{Y= delta 14 VcmZoU&e(FCae^*m=tjM;WB@9!1w;S< diff --git a/sound/direct_sound_samples/cries/hydreigon.aif b/sound/direct_sound_samples/cries/hydreigon.aif index 66342c066dd8c811b8700cf32a3ea2fb2062d956..8227c6d21f6346eb25e0b45ba4376be5dafd38b9 100644 GIT binary patch delta 22 dcmaE|g>l^$Mh-XsAYTTCD7A?kavPmEq5xUu2E_mX delta 72 zcmZ3th4IN2Mh-XsAYTTCsF;Zya$=r-!66I`3?eoR4D~<=1sfIkqNMyBeO-Zkp>W4A T*LcSu=lB5MaHn`P6C(xyWakgY diff --git a/sound/direct_sound_samples/cries/hypno.aif b/sound/direct_sound_samples/cries/hypno.aif index 8569a4f98153d6a3b81137f7187f153607452829..7c4bde193683bb72e4a6ed1e58865781e98e62dc 100644 GIT binary patch delta 20 bcmeAwyjH;B<{#wCz+mAwkwb2ylYs>QN3;eO delta 68 zcmcas&{fFc<{#wCz+lldkwZ?*(=RxLfq_B9hJm3T2%%u3f|-ScpQEoUkS`GK80H%9 P7~~uu5N2R$&R_xn5Uvhd diff --git a/sound/direct_sound_samples/cries/igglybuff.aif b/sound/direct_sound_samples/cries/igglybuff.aif index 3a8d6e81ef776df88cd1851e0e537207f7628bfa..0f2db1e52c6c4f80f3f7d879e72b1e58a753c468 100644 GIT binary patch delta 20 bcmca6y-1qF%|FPOfq{3{L=L%)PBpv$KR*S< delta 68 zcmZ1^eNCFf%|FPOfr0njL=HJIPru+01_lNZ8wQ4YAcTUA3QfEcevZDbK)yh@W0-5a PV~}%vK$xMq34;Lu^z{w_ diff --git a/sound/direct_sound_samples/cries/illumise.aif b/sound/direct_sound_samples/cries/illumise.aif index 350288991d93b5540a94e333f75b38d96977b849..26807295bd8aa153cac4e90b2a609e54bbb69862 100644 GIT binary patch delta 20 bcmez5w9kpd%|FPOfkDx1B8S{YCkaIWMZ*QF delta 68 zcmdnz^vQ|C%|FPOfk82AB8Qxqr(bXg0|SGI4Ff|x5JJI51vy0tKSy6zAYUNdG0ZjI PF~~VSAk5g%guws+{ksk0 diff --git a/sound/direct_sound_samples/cries/incineroar.aif b/sound/direct_sound_samples/cries/incineroar.aif index 6689c101738a269914333843f48db9c0610f14c7..b7f3e2201efb212577f1f573d21f9a82b461fb62 100644 GIT binary patch delta 22 dcmdn9oAK2yMh-XsAYTTC*rbUZavSYjVgX)L2VejI delta 106 zcmaF0i*e6xMh-XsAYTTC*ew$|^HPiQ6N@&gxx`v| mx)>_}C5?bIGmvIrP!I78F#^(pK#Z;%Mh-XsAYTTCFu92watocp08m{9djJ3c delta 70 zcmZ3shVj-KMh-XsAYTTCu%L+?a$=r-!66I`3?eoR4D~<=1sfIE!X*40eO-ZkfpEt# R*LcSu=lFmyV@o3ja{x9Q4$uGq diff --git a/sound/direct_sound_samples/cries/inkay.aif b/sound/direct_sound_samples/cries/inkay.aif index a28ee83866c6f5ff513deb245a63f37dfaede4aa..04753026e065782af008b136f6c37ddd12664757 100644 GIT binary patch delta 20 bcmcbmI6;xa%|FPOfkB{SB8S{Yt1JNkK6M41 delta 96 zcmbQBcuSGP%|FPOfkEKXL=HI-KSy6z1_lNmGYc~XT?Nm)?8HiijcQo}W}Ys_3P1@x hAk7S<85op9JVT6tG!GCXsSXKp_6CZ8)EJvH008PV5=a05 diff --git a/sound/direct_sound_samples/cries/inteleon.aif b/sound/direct_sound_samples/cries/inteleon.aif index d5c6d367f78951784b61fa29a086a1ad8126154e..8153b02889b4884d0fb5c0eb040e5d189d0a48fa 100644 GIT binary patch delta 12 Tcmewr^($(EE~C#zJs({FC*TDO delta 12 Tcmewr^($(EE~EEGJs({FC)))I diff --git a/sound/direct_sound_samples/cries/iron_boulder.aif b/sound/direct_sound_samples/cries/iron_boulder.aif index 15c1b632b533d13e60c5e3413cc6ccbfbfc02b77..0ffdefdffb35549e19efe0c66b95eccb5e20c983 100644 GIT binary patch delta 14 Vcmca~it*AZ#tFKNDjW4wQUNhL1%&_r delta 14 Vcmca~it*AZ#tFKN${Y1mQUNhG1%v?F$w1Y delta 22 ecmeBs#Mt+Uae^-6{mFs3DU%!0I5*BNE&u>?BnjpK diff --git a/sound/direct_sound_samples/cries/ivysaur.aif b/sound/direct_sound_samples/cries/ivysaur.aif index 3d998bf671b7e7b350f85121380330d0edb51604..40ee462805e95ddf8ff33b624c2a449ddd0b09fe 100644 GIT binary patch delta 20 bcmaFnu*reL%|FPOfk8oQB8S{YCmsa=Loo$) delta 68 zcmdnw@XUe3%|FPOfk7c|B8Qxqr(bXg0|SGI4Ff|x5JJI51tA3qKSy6zAYUNdG0ZjI PF~~VSAk4tPh`|5=@*54O diff --git a/sound/direct_sound_samples/cries/jangmo_o.aif b/sound/direct_sound_samples/cries/jangmo_o.aif index 083522cf8573c5b59a4c56955f8df2d83cc4fa91..29f8f86b51ce59beb273a55b07779db342673ff1 100644 GIT binary patch delta 20 bcmcboI6;xa%|FPOfkB{SB8S{Yn=AnUKFbB8 delta 100 zcmbQBcu$eT%|FPOfkEKfL=HJIKSy6z1_lN`a|i3tEm C8Vs`l diff --git a/sound/direct_sound_samples/cries/jigglypuff.aif b/sound/direct_sound_samples/cries/jigglypuff.aif index d42f2dbdb40c0a58491bb23bde676e592c50d177..09249f6dd65d957e8d31db0a159674e6c332eee0 100644 GIT binary patch delta 20 bcmdlb+9t~3<{#wCz`#{Ekwb2yQvw$NISBB8Qxqr(bXg0|SGI4Ff|x5JJI5g)}Y+KSy6zAYUNdG0ZjI PF~~VSAk4tnlEDN3*(MEx diff --git a/sound/direct_sound_samples/cries/jirachi.aif b/sound/direct_sound_samples/cries/jirachi.aif index 40f3a76c1cf52d7168871f80a8a9e9efadc8dfd0..0da759794c886b23fc93d4405ac9d915d1dd2017 100644 GIT binary patch delta 20 bcmexoa>|6m%|FPOfkDb?B8S{YClx6GMa2cN delta 68 zcmX?Q^3R0B%|FPOfkCQlB8Qxqr(bXg0|SGI4Ff|x5JJI51uZEFKSy6zAYUNdG0ZjI PF~~VSAk5gpl)(T1{)r9o diff --git a/sound/direct_sound_samples/cries/jolteon.aif b/sound/direct_sound_samples/cries/jolteon.aif index be9c81d62ec517d65b570e4ec3c599364040bfea..acd96714aeb210208d7446dc5f8901b8cda73618 100644 GIT binary patch delta 20 bcmexmd(4)@%|FPOfkAHHL=L%)P7CA!OK}Ff delta 68 zcmX?R`^%QY%|FPOfkE!mL=HJIPru+01_lNZ8wQ4YAcTUA3d`gq{2YB(AavPn#L<0a=Z3lh; delta 70 zcmbQWgYn!BMh-XsAYTTC7`KTWa$=r-!66I`3?eoR4D~<=1sfH9MN9ZO`nm%70^yEf RuJMjR&hY_ZhDIg~1^`ab548XQ diff --git a/sound/direct_sound_samples/cries/kabuto.aif b/sound/direct_sound_samples/cries/kabuto.aif index aad4f3266cee08dcbc3aafe6031e6f3ed0bde37a..2ed73716cbf536cef57dd4e8c640dead21c17716 100644 GIT binary patch delta 20 bcmdmF@K2w^%|FPOfkFJ+L=L%)PB+8>NyY~9 delta 68 zcmeyTzsZ2Z%|FPOfk8rRB8Qxqr(bXg0|SGI4Ff|x5JJI5g?r)>evZDbK)yh@W0-5a PV~}%vK$xM40fPwu_vH>O diff --git a/sound/direct_sound_samples/cries/kabutops.aif b/sound/direct_sound_samples/cries/kabutops.aif index 015bacaca99a3bfbe2f14cbc49032c0d0340ef60..79a4b304a8213a5bed7223f36a81a1b429930670 100644 GIT binary patch delta 20 bcmaE5y3Lfs%|FPOfkA5BL=L%)P7|a6M=1tl delta 68 zcmdmH`pT5U%|FPOfkEogL=HJIPru+01_lNZ8wQ4YAcTUA3e%({{2YB@hgMF%|FPOfx)C`B8Qxqr(bXg0|SGI4Ff|x5JJI51vL{1KSy6zAYUNdG0ZjI PF~~VSAk4tbguxsD9$yZA diff --git a/sound/direct_sound_samples/cries/kakuna.aif b/sound/direct_sound_samples/cries/kakuna.aif index 088b51965c5e5d976111790906cc743420651cae..8331b0b0e58031c1163085f2ee63916134d7a156 100644 GIT binary patch delta 20 bcmZ4G{>_cU%|FPOfk8QMB8S{YrvPODM*0RA delta 68 zcmez7w#uEu%|FPOfkAoEL=HJIPru+01_lNZ8wQ4YAcTUA3Sr6;evZDbK)yh@W0-5a PV~}%vK$wA{34;Lu4=N5# diff --git a/sound/direct_sound_samples/cries/kangaskhan.aif b/sound/direct_sound_samples/cries/kangaskhan.aif index 1e57639531d2089d12ea779ba7cb2b31286cbee5..26a8ac43a40433dcd5c9483facbf12ef8e98f045 100644 GIT binary patch delta 20 bcmeD4yyd~+<{#wCz@QQ|kwb2ylZgrdLJS42 delta 68 zcmccR(dWtG<{#wCz@XALkwZ?*(=RxLfq_B9hJm3T2%%u3f|ZJdpQEoUkS`GK80H%9 P7~~uu5N2p-%3uxv_{k0I diff --git a/sound/direct_sound_samples/cries/kangaskhan_mega.aif b/sound/direct_sound_samples/cries/kangaskhan_mega.aif index cd95a87d39940c71f89f6e52a816396a0855ef90..417cb04f49e5f392bc521e2c2d91f678afad34ee 100644 GIT binary patch delta 14 VcmeydhVjQ5#tFKNUK{ni!T>Wm1=0Wj delta 14 VcmeydhVjQ5#tFKNo*VVN!T>Wh1S*N2G#%o delta 102 zcmdmWjjcOw47M?D~ l3P33XAk7S<85mSUJVT6tG#?P7s1FHp_6CZ9RGC{a007%}6(|4z diff --git a/sound/direct_sound_samples/cries/kecleon.aif b/sound/direct_sound_samples/cries/kecleon.aif index b6dd7e91f37cf1f37e2106a9c57cb0de9665fd99..51dae293504406ddfafe73d97bf51dc7986fb7de 100644 GIT binary patch delta 20 bcmZotJg30n<{#wCz#!l@kwb2ylZF5QIb;O} delta 68 zcmX@7(4@%W<{#wCz#vdHkwZ?*(=RxLfq_B9hJm3T2%%u3f}VhcpQEoUkS`GK80H%9 P7~~uu5N2#@#9#mb(~Av2 diff --git a/sound/direct_sound_samples/cries/keldeo.aif b/sound/direct_sound_samples/cries/keldeo.aif index 4f73fc22da4ad6cfa83907f06449dec3e294a7d6..6f23ad088557e291d8d181da3ab13b85e05febfc 100644 GIT binary patch delta 20 bcmcbSHZP6C%|FPOfx%d8B8S{YqaQ{9N6rR} delta 80 zcmbQ2b|a0$%|FPOfx$RnB8ME0pQEoU0|Nt#nTff=MztSCdY&%E3P1rhAk7S<85m?j WJVT6tGz$;|RfPmOdqa7KrX~Qwat>Jl diff --git a/sound/direct_sound_samples/cries/kingdra.aif b/sound/direct_sound_samples/cries/kingdra.aif index 2d68f6a6f1a8ad2f8a422f4b90ffa8ac0f97ebe3..a9cc1d9fe48901cc162e034d8e2a3e94dc38812f 100644 GIT binary patch delta 20 bcmZ2v_Rf^U%|FPOfkEooL=L%)PA8-QN4y5a delta 68 zcmaE7y2y;f%|FPOfk9eoB8Qxqr(bXg0|SGI4Ff|x5JJI5g>zC8evZDbK)yh@W0-5a PV~}%vK$wxS0fQv~?raVN diff --git a/sound/direct_sound_samples/cries/kingler.aif b/sound/direct_sound_samples/cries/kingler.aif index 752b660659abbe9363159fbe115193590427674a..b8368297313b7cdf3a801794baf4c09428cb5887 100644 GIT binary patch delta 20 bcmewtcPfs<%|FPOfkEGCB8S{YCl!4FOn(M1 delta 68 zcmX>V_b-ma%|FPOfkD4)B8Qxqr(bXg0|SGI4Ff|x5JJI51ucCEKSy6zAYUNdG0ZjI PF~~VSAk4thlEDN38x#(8 diff --git a/sound/direct_sound_samples/cries/kirlia.aif b/sound/direct_sound_samples/cries/kirlia.aif index 0ef92302038393154a22419e0f2001f719fcf54e..0beaebf16f38c595a5e8a037cf93458e799d6c41 100644 GIT binary patch delta 20 bcmaE-ze}IP%|FPOfkAxJL=L%)PE*7IM)L+? delta 68 zcmdm`|4yI7%|FPOfkFJ)L=HJIPru+01_lNZ8wQ4YAcTUA3bVu|{2YBTcqVXyF5|q7dh;{@C2<8j delta 12 TcmX>TcqVXyF5}#ddh;{@C2R#d diff --git a/sound/direct_sound_samples/cries/klink.aif b/sound/direct_sound_samples/cries/klink.aif index 21076028de58e3ad6b9735d45b8edc75a149b59e..0bd6b65f74611bef667cbff7978d665424e82517 100644 GIT binary patch delta 26 hcmX>TxG9jw%|FPOfk9)Hqo`Q8USga80t$p^Cl delta 72 zcmdnAlJUh#Mh-XsAYTTCkOvbv7({Fs80vu#3N|WC3X$@2^mPUDg~A=f TT;m;soZ|z0!=2(y%`F)Kj0X_C diff --git a/sound/direct_sound_samples/cries/koffing.aif b/sound/direct_sound_samples/cries/koffing.aif index 6def9ad0c1576658944b121a71b82c170d3d9110..50d5bc978bb520c4ffe4d8d6f94f1fddcd088c97 100644 GIT binary patch delta 20 bcmX@)-{;Ta<{#wCz@XkXkwb2yQ-(SKL(>Kk delta 68 zcmeD4KjhEh<{#wCz@WZsB8Qxqr(bXg0|SGI4Ff|x5JJI5g*S*N2G#%o delta 102 zcmdmWj=s diff --git a/sound/direct_sound_samples/cries/kricketune.aif b/sound/direct_sound_samples/cries/kricketune.aif index a11390f3f7625cd5d1f43df4588628d371813e93..b3ebcbf8ae2594be7e3a6d8435f7cc370823f1e4 100644 GIT binary patch delta 22 dcmZ3rmhsyfMh-XsAYTTCu)K*JavPlj!T?*x2TT9} delta 70 zcmeyihH=$eMh-XsAYTTCutgI&7({Fs80vu#3N|W)g-Q51`nm%70^yEf RuJMjR&hY_ZCI&_frT|%d4~GB% diff --git a/sound/direct_sound_samples/cries/krokorok.aif b/sound/direct_sound_samples/cries/krokorok.aif index 2cf4ceff1fb1ff28b6f8ee8d68d1df9ff96d6214..39765627ece172e7d1e54b4b8fbb145265c66a08 100644 GIT binary patch delta 26 icmbPH@vof6%|FPOfx-Hlqo@)P KqZ{>(c>n;Fln(*` diff --git a/sound/direct_sound_samples/cries/kyogre.aif b/sound/direct_sound_samples/cries/kyogre.aif index 57790d75faf482c51e131e5b3a1a854a41fbe26b..c20d2cf3240eb870d7db5cf388e7b9c935e362ec 100644 GIT binary patch delta 22 dcmeC{X1vwK$l>N6N6$2g^*QO(Ui$d`e^y~okh&CSoz*Oh^RK`7iY%r)LI$T>d1H{2=S%+#1+B99`Y J_eMP*cL1nF4w?V} diff --git a/sound/direct_sound_samples/cries/kyurem_black.aif b/sound/direct_sound_samples/cries/kyurem_black.aif index f5bd0cb4e7e07acf9bccf5bb22f18bbb527ead30..9b5320bd63f21ecc0d067d44dfb41555d726dae6 100644 GIT binary patch delta 22 dcmdn7lJVaPMh-XsAYTTCkg|y!avPl@LI7Pe2W9{O delta 76 zcmeyjf^o-6Mh-XsAYTTCkPQ<#7({Fs80vu#3N|Xlg~<6i`nm%7V&RTq XuJMjR&hY_ZW~RpRPCky#-V6)?$Vd@F diff --git a/sound/direct_sound_samples/cries/kyurem_white.aif b/sound/direct_sound_samples/cries/kyurem_white.aif index a9d7a5e58df43a6f1984924041b2ba404e90a889..1e6f0283ec74892b91679d46f3d899077deeddc8 100644 GIT binary patch delta 22 ecmZ3ogz?p4Mh-XsAYTTCz(*4~zo$=XpMm0D8AYTRs?|Y7(Zf<^#zOD=m3_{_KVXpCxLC*03zTr;sre-D#8+i_R F0|0p_4srkh diff --git a/sound/direct_sound_samples/cries/landorus_incarnate.aif b/sound/direct_sound_samples/cries/landorus_incarnate.aif index 189c77666870f49a980bfd12e58f7d83abf2c15e..03111963d7e21c9ba5e940c62739b2823352735a 100644 GIT binary patch delta 23 fcmcaKopHx>Mjki+AYTRs?+uQgZf+aZ)_4N|VBH7W delta 49 zcmdlno$=CiMm0D8AYTRs?^BMRZf<^#zOD=m3_{_KVXpCxLC*03zTr;sW~N3A8+q1v F0|0K#4j=#k diff --git a/sound/direct_sound_samples/cries/landorus_therian.aif b/sound/direct_sound_samples/cries/landorus_therian.aif index edd6fa349b2356901aded5f8d2326dceb59f8726..6a641cf6f4ba8d7b3b943346850814ff2ffc889e 100644 GIT binary patch delta 26 hcmbP{{wIyc%|FPOfx)=M(bLUsqJ|=)-$pM#V*qvD2m}BC delta 54 zcmey9HX~ib%|FPOfx&o!qo@&( J-;H{H#sIWK4=a(bpBo7YKI@bB%Wl Oa*huOGc-43Fa-eSvJJfe diff --git a/sound/direct_sound_samples/cries/lapras.aif b/sound/direct_sound_samples/cries/lapras.aif index 0725bcecb6870a9a26aab9e3f3969f4c3cc53cb1..9bc9023730e103eda56999667f157a23a19f8287 100644 GIT binary patch delta 20 bcmeCOx@O7Y<{#wCz#wyOB8S{YrwuXyL*NE* delta 68 zcmca+*=5Dy<{#wCz#z*skwZ?*(=RxLfq_B9hJm3T2%%u3!ZsNRKSy6zAYUNdG0ZjI PF~~VSAk5I%kii@P+{O*9 diff --git a/sound/direct_sound_samples/cries/larvesta.aif b/sound/direct_sound_samples/cries/larvesta.aif index 4f3e484c8e1e50708fa11a5db0eec68480789d32..a025df32bf53c05543900adc5ca480fba972bf4b 100644 GIT binary patch delta 26 hcmZ3G+?LGa<{#wCz+hPC=;`J*QB9FCVxvcdApmQU2c-Z2 delta 52 zcmZomUXZNj<{#wCz+gDT(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P)m|-H1B4hYQ Hy$C}9d;ty6 diff --git a/sound/direct_sound_samples/cries/larvitar.aif b/sound/direct_sound_samples/cries/larvitar.aif index 45ad2c0488049e94533ed62fac01099aef463b5d..fd91d5bc7d28ad0d2a25695a7c97396dfd7abeea 100644 GIT binary patch delta 20 bcmaE6xXF;i%|FPOfk9%`L=L%)PCXI;Ma2e3 delta 68 zcmdmF_{@;Q%|FPOfkEQlL=HJIPru+01_lNZ8wQ4YAcTUA3X>!x{2YBy%|FPOfkA84L=L%)PCZ%xONj=v delta 68 zcmdlK`Ye>g%|FPOfkEruL=HJIPru+01_lNZ8wQ4YAcTUA3X`-X{2YBlJx!X!%|FPOfq}PgB8S{YrvhF8JpToi delta 68 zcmbOxeM*|c%|FPOfr0nXL=HJIPru+01_lNZ8wQ4YAcTUA3T3dXz* diff --git a/sound/direct_sound_samples/cries/lickilicky.aif b/sound/direct_sound_samples/cries/lickilicky.aif index 61b2c0f382962bd3732720541744607fcf2089c7..542bbcaf8b3ce514d51473c53d20a987c1da433e 100644 GIT binary patch delta 22 dcmZpgz<92ok;BbD$d`e^{n$hfxs6UM+yPV02UGw6 delta 70 zcmX@t&)779k;BbD$d`e^{ntbeIWbSa;1C7|1`!(uhI$}`f{hC6+$H=ReO-ZkfpEt# R*LcSu=lFmy6EkB50{~2l50L-> diff --git a/sound/direct_sound_samples/cries/lickitung.aif b/sound/direct_sound_samples/cries/lickitung.aif index 0f4e697e5b7e3b15d5cb7394c73ad578e33aecc7..c21d1b03654842c265817cd3237946f8fc824e70 100644 GIT binary patch delta 20 bcmZ2w{mqKQ%|FPOfk8HJB8S{YrvO<1MGgh@ delta 68 zcmexnwaS{q%|FPOfkAfBL=HJIPru+01_lNZ8wQ4YAcTUA3SqJmevZDbK)yh@W0-5a PV~}%vK$xL{1%n9y2N@1A diff --git a/sound/direct_sound_samples/cries/liepard.aif b/sound/direct_sound_samples/cries/liepard.aif index 7432857bc14d0d00e794be8eb3b34df1b1179f9e..eec210c0e7c4cf86270a7a7e5b56b0c18ca61305 100644 GIT binary patch delta 26 hcmez1am|Cr%|FPOfkDO3(bLUsqM9P3#zqef6##Kz2W0>N delta 52 zcmccS@xepQ%|FPOfk7q1(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;n?oM9r5BBT07 HJq;BAhJp=~ diff --git a/sound/direct_sound_samples/cries/lileep.aif b/sound/direct_sound_samples/cries/lileep.aif index a178e72bf54b821cec59bba6e0226244f7f3c38e..e1b750ba94804010f67264d103ba094252ee50ec 100644 GIT binary patch delta 20 bcmeyTdPp| diff --git a/sound/direct_sound_samples/cries/lilligant.aif b/sound/direct_sound_samples/cries/lilligant.aif index 311c5affa81c2e025950d8be4360fd5c97f7d5e4..e00b1aafc417ae2f73b1270a0266a44b151d8705 100644 GIT binary patch delta 21 ccmX?;xha#!%|FPOfx%>zqoJ5GX diff --git a/sound/direct_sound_samples/cries/lillipup.aif b/sound/direct_sound_samples/cries/lillipup.aif index 9a77e2596dedb79aa585f895fe821683ef0cfd09..825f5054cf8c9ba5902323b3e9b94b480ddfff32 100644 GIT binary patch delta 21 ccmbOe-4xB^<{#wCz@S^@=;`LRQLRiD07st&OaK4? delta 47 zcmZpQo)fL+<{#wCz@R(D(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o5fMFv~nJxe| C%?y(O diff --git a/sound/direct_sound_samples/cries/linoone.aif b/sound/direct_sound_samples/cries/linoone.aif index 326eca324cc553b2bd72d7e615af5d9d7df55600..1db1958d4cc465af4ce5e4b95594b5b8364162db 100644 GIT binary patch delta 20 bcmZ2g{;iC|%|FPOfx$X&B8S{YrvPgJPO1i| delta 68 zcmexXwyK=N%|FPOfx&vwL=HJIPru+01_lNZ8wQ4YAcTUA3Srg~evZDbK)yh@W0-5a PV~}%vK$wx434N6N6=jiLoz`!6B?il78?-=A9AK)AA6mM!~%rKEhkYEL$ diff --git a/sound/direct_sound_samples/cries/lopunny.aif b/sound/direct_sound_samples/cries/lopunny.aif index 1db6d7641c884a1a9510613d219b2f075674eec3..f7937907850014b570b5706c30b437a2d892fd1e 100644 GIT binary patch delta 22 ecmaF0nsM7|Mh-XsAYTTC&~+0z7({Fs80vu#3N|WC3zhJ5^mPUD1;QP} RT;m;soZ|z+OpGiTOaN?o5D5SP diff --git a/sound/direct_sound_samples/cries/lopunny_mega.aif b/sound/direct_sound_samples/cries/lopunny_mega.aif index 1331ca106b9dbc0507e79a9416e95796d3e4bb70..212df776de8a74f9eacd6a9f6c0da96d72916fd6 100644 GIT binary patch delta 14 WcmezMmhsnH#tFKNXEy4cDFXmJ@dtbW delta 14 WcmezMmhsnH#tFKNr#I@IDFXmJ><4=Q diff --git a/sound/direct_sound_samples/cries/lotad.aif b/sound/direct_sound_samples/cries/lotad.aif index a8071ef96f94ac59c2b3cf1deb86dff4b82e405f..290ec548596ba804aa4ccbc86e30fee3446674a2 100644 GIT binary patch delta 20 bcmca4I8Ttn%|FPOfq`S%L=L%)P8A#gJmm$K delta 68 zcmbOycuA1M%|FPOfq~=HL=HJIPru+01_lNZ8wQ4YAcTUA3UwS3evZDbK)yh@W0-5a PV~}%vK$wxa0fRXJ>dFn* diff --git a/sound/direct_sound_samples/cries/loudred.aif b/sound/direct_sound_samples/cries/loudred.aif index 2ac4687cf0ae14661295716d72ef2b350287b735..d9c7465573f95c23826a59ba5e4a65df1e139010 100644 GIT binary patch delta 20 bcmX?SJj56L6-&X delta 68 zcmbPbe9oA|%|FPOfkE=vL=HJIPru+01_lNZ8wQ4YAcTUA3RRL4evZDbK)yh@W0-5a PV~}%vK$wxG34;Lu{(cTD diff --git a/sound/direct_sound_samples/cries/lucario.aif b/sound/direct_sound_samples/cries/lucario.aif index fece3842190606d659ff5c0230cf34be83fa02cb..80064d64fba47258408a84b1bd353233b00e0109 100644 GIT binary patch delta 20 bcmccSw8)9W%|FPOfk9DfB8S{Yr#}h+LV^Z5 delta 68 zcmZ4Fbj^vw%|FPOfkDx4B8Qxqr(bXg0|SGI4Ff|x5JJI51tvuaKSy6zAYUNdG0ZjI PF~~VSAk4(Xg24m;<{%A! diff --git a/sound/direct_sound_samples/cries/ludicolo.aif b/sound/direct_sound_samples/cries/ludicolo.aif index a4e773e9012b7e33124e48d52d3cae1ed4aff47b..690cf75fe486bdc4ecf1f36c1a2cb4a91f57cf0e 100644 GIT binary patch delta 20 bcmaFnxXF>j%|FPOfk9!_L=L%)PCW_$NL2=R delta 68 zcmdnw_{@>R%|FPOfkENkL=HJIPru+01_lNZ8wQ4YAcTUA3X>Eh{2YB7({Fs80vu#3N|Xt@|5s%^mPUD1;QP} RT;m;soZ|z+j7%&U%m80t57Ynv diff --git a/sound/direct_sound_samples/cries/lumineon.aif b/sound/direct_sound_samples/cries/lumineon.aif index a6a2cca2c2b83b9b24c16b0815d6eb225b217f84..0577fb55753938c7c06237b2940da7345c4724cf 100644 GIT binary patch delta 22 ecmdnBg|Tf5BZr%RkS_y6EIWbSa;1C7|1`!(uhI$}`f{hB#A|?DBeO-ZkfpEt# R*LcSu=lFmy6H{{rGXOgX4`=`Y diff --git a/sound/direct_sound_samples/cries/lunala.aif b/sound/direct_sound_samples/cries/lunala.aif index 5786ac42c0a53ad4d355217a7c685b5f3f4098f6..d95185de7997f41abc79d0e77b55e23f9b7931d3 100644 GIT binary patch delta 22 dcmdnCoAJ#qMh-XsAYTTC*p!JJavQDOVgX(K2V4LE delta 98 zcmaE}i*eg-Mh-XsAYTTC*mV;*_} iCG>zaGmvIrPzmu2F#^)OK#Z(9B*@ttCXJ1dsM%|FPOfkAK5L=L%)P9=H(NKpoB delta 68 zcmbOgdoGs4%|FPOfkE%sL=HJIPru+01_lNZ8wQ4YAcTUA3RQX%evZDbK)yh@W0-5a PV~}%vK$x+yIfDTJ8u|{X diff --git a/sound/direct_sound_samples/cries/lurantis.aif b/sound/direct_sound_samples/cries/lurantis.aif index f6a8019b68151c6f7e5551bdeeb27dd12bfbb95d..36ab7d71e2263849e3813332ca42fe7813e1ef21 100644 GIT binary patch delta 20 bcmbPNa3P<=%|FPOfx-O5L=L%)Hml45OMh-XsAYTTCK)Hz=atoaT0ZzUKT>t<8 delta 70 zcmZ3si1F4UMh-XsAYTTCz@Uj7a$=r-!66I`3?eoR4D~<=1sfIE0ww$$eO-ZkfpEt# R*LcSu=lFmy69ZEQ0{|}>4yFJA diff --git a/sound/direct_sound_samples/cries/lycanroc_midday.aif b/sound/direct_sound_samples/cries/lycanroc_midday.aif index 0f117bc947a6c58836e06b4c39d656bb0dba4315..380d192c2216185237bc976706271b5c6e2230a2 100644 GIT binary patch delta 20 bcmeCnU6aG%<{#wCz+k2_kwb2y8=DybLevG6 delta 120 zcmZ3J)0fNP<{#wCz+l!kkwZ?w&(YVFfq_B7+{DyHL07@2GC47?C_h<2!#6V}C9zU- sqZ*r;lc$TZ0#K0^kY)zb3=9S#o*_m+S`vtH=?n>S_6ACWG#Hrz0M>IG0ssI2 diff --git a/sound/direct_sound_samples/cries/lycanroc_midnight.aif b/sound/direct_sound_samples/cries/lycanroc_midnight.aif index f470d006b5d8d3d46d02504de856fdf4b27a6f2d..e81dac8c3e4c2bd07bd531210730263e2b4e05ca 100644 GIT binary patch delta 14 WcmX@Nn(^Ff#tFKN3pVO42n7H!Vg@Gw delta 14 WcmX@Nn(^Ff#tFKN^Ec`(2n7H!T?Qrq diff --git a/sound/direct_sound_samples/cries/mabosstiff.aif b/sound/direct_sound_samples/cries/mabosstiff.aif index ccf661e6cabc34a2c07deeddb0a740d26011a1c8..b66bbf731f81be7c1903e3c91ce69cdded6a265b 100644 GIT binary patch delta 18 acmaF&kn!C^#tFKN2PRL63%|FPOfkCQoB8Qxqr(bXg0|SGI4Ff|x5JJI51t%#9KSy6zAYUNdG0ZjI PF~~VSAk4tboWT?T@)ix$ diff --git a/sound/direct_sound_samples/cries/machop.aif b/sound/direct_sound_samples/cries/machop.aif index 28e749a3a7dc5c052afd1a63116c7bd56e4ec887..c878dfe99f010cd8955590029738304fd0666037 100644 GIT binary patch delta 20 bcmX?P(r3cq<{#wCz#zpokwb2y(+f!eJcI?n delta 68 zcmeA(Ib_1&<{#wCz#wHckwZ?*(=RxLfq_B9hJm3T2%%u3!aGR`KSy6zAYUNdG0ZjI PF~~VSAk4tbjKKf^=6?TXlevZDbK)yh@W0-5a PV~}%vK$ww<0fPYm@9hpE diff --git a/sound/direct_sound_samples/cries/magcargo.aif b/sound/direct_sound_samples/cries/magcargo.aif index 10c2a34515f92f8194cf0aaae4cc810e338abdf9..f1127dabc4a25a7abadf89f385f344119be2a2e8 100644 GIT binary patch delta 20 bcmeARx)sRb<{#wCz@TwyB8S{Yr!5))NO%Uw delta 68 zcmcZ=*cZg%<{#wCz@W)CkwZ?*(=RxLfq_B9hJm3T2%%u3!Y&O7KSy6zAYUNdG0ZjI PF~~VSAk4_nlEDA~@O%yh diff --git a/sound/direct_sound_samples/cries/magearna.aif b/sound/direct_sound_samples/cries/magearna.aif index f07533638af4df83514bda2effb914e3fcaf7b86..2e01fe5aa356c89ee8f93ad14c1679d5c6590d3f 100644 GIT binary patch delta 22 ecmbO=h4IW}Mh-XsAYTRs&m$8#znQ_(>Mh-XsAYTRsFQJJXa$V-sy-yh*&8SbQf6TY0I}E=F#rGn diff --git a/sound/direct_sound_samples/cries/magikarp.aif b/sound/direct_sound_samples/cries/magikarp.aif index f5f9ce213c831db0c00805a4a1cc10f4d3a02fa5..71bdbf39397373e33dea850c4a1ec96b247ed913 100644 GIT binary patch delta 20 bcmZ4I^~;mP%|FPOfkEZdL=L%)PFGX_O)v*A delta 68 zcmez6xz3Bj%|FPOfk9PmB8Qxqr(bXg0|SGI4Ff|x5JJI5g7({Fs80vu#3N|WKg-iH3`nm%70^yEf RuJMjR&hY_ZCT2zq1^`zj51#-4 diff --git a/sound/direct_sound_samples/cries/makuhita.aif b/sound/direct_sound_samples/cries/makuhita.aif index 8445adf5df70a51dd65b2ca3e0b3b80547f2cbcb..2dffab4bcc1737376f133d79b83e8534697185db 100644 GIT binary patch delta 20 bcmbOvdryYL%|FPOfq^e>`~Xuj2Pyyn delta 102 zcmdlom$7LcBZr%RkS_y+->-=ra$$h4I%EMh-XsAYTRsucC<@a$=r-!66I`3?eoR4D~<=1sfIAyd?Y_eO-ZkfpEt# R*LcSu=lFmy6H5aI697RA4+H=J diff --git a/sound/direct_sound_samples/cries/mandibuzz.aif b/sound/direct_sound_samples/cries/mandibuzz.aif index 3f12088d0a5218dd996284b8aba81d80cf5f25dc..1a3a3afec3b6a589b81492a638eb2b8fecfe99f6 100644 GIT binary patch delta 23 ecmZ29gRx@Q~&?~ delta 47 zcmdm&d?Q)S%|FPOfx+;CqoF~dflO@;th CP7Rj; diff --git a/sound/direct_sound_samples/cries/mareanie.aif b/sound/direct_sound_samples/cries/mareanie.aif index de6c86b213794bdc5270a7bd595881b5c360ea92..75a73d5edb282163ccd83804fd0ba93daf64dbd2 100644 GIT binary patch delta 20 bcmZpv+E&To<{#wCz+kg(B8S{Yn+Y}mN)`sh delta 100 zcmdm1*;2*f<{#wCz+m%dB8QxqpQEoU0|Nt}xrw=gu7Yo3QEFmdX6i<@2{smTXlevZDbK)yh@W0-5a PV~}%vK$xL{DT5IJ@97RC diff --git a/sound/direct_sound_samples/cries/marshadow.aif b/sound/direct_sound_samples/cries/marshadow.aif index a763d4abb8f9ae7dd332eb6b7bc85b6b7275628a..3092b639f24ea278849977d7a18496147820f04c 100644 GIT binary patch delta 22 dcmcb%k+EeXBZr%RkS_y6M9oAFxs7&l5dc_Q2P*&o delta 106 zcmZqK$arldBZr%RkS_y6#JPzaauR-yzOD=m3<4GgMhdzLzKKP}8Hp+R66EX+6a}fXFk%1zb3GR_ diff --git a/sound/direct_sound_samples/cries/marshtomp.aif b/sound/direct_sound_samples/cries/marshtomp.aif index 11ea04d0cd67e692b85f2d671ea150a5ab10d71a..79728eb0876e1a0cff956038b087142f974ffea1 100644 GIT binary patch delta 20 bcmX@*G|h>_%|FPOfkBaPB8S{YrwMQHevZDbK)yh@W0-5a PV~}%vK$wxKC4)Ht_Sz0n diff --git a/sound/direct_sound_samples/cries/masquerain.aif b/sound/direct_sound_samples/cries/masquerain.aif index 34f079f152b1e5088cc079901a6b39b9e259e432..e3ef3b9d81d62c123ae94d3e64316123bd947ef7 100644 GIT binary patch delta 20 bcmez8bIOOq%|FPOfkDk_B8S{YClxgSNu34x delta 68 zcmX@*^UsIF%|FPOfkCZoB8Qxqr(bXg0|SGI4Ff|x5JJI51uZoRKSy6zAYUNdG0ZjI PF~~VSAk4_Zguws+4%7}e diff --git a/sound/direct_sound_samples/cries/maushold_family_of_three.aif b/sound/direct_sound_samples/cries/maushold_family_of_three.aif index 7412a1af6a87dc1a83a5e85d32e9d3bc8aab2c9f..0e771535ea3eda310ca2c65947d7570895d1aa2d 100644 GIT binary patch delta 23 fcmbQ#&p4@{ae^*m%H)Ggk0(25vTPP*taSqbXn_bU delta 23 fcmbQ#&p4@{ae^*m^5la|k0(25vTPP*taSqbXmbcF diff --git a/sound/direct_sound_samples/cries/mawile.aif b/sound/direct_sound_samples/cries/mawile.aif index e14dd5a4e463a6a7fb7e93108c3bccc0e575beb0..8374bf4797fd6650de80ae9e6c48a4657e06ec6f 100644 GIT binary patch delta 20 bcmbQH`$&hw%|FPOfk7;4B8S{YCmS&UKM)0a delta 68 zcmaE)GfkJn%|FPOfkCWqB8Qxqr(bXg0|SGI4Ff|x5JJI51t&2HKSy6zAYUNdG0ZjI PF~~VSAk5gnn86GH?3N9- diff --git a/sound/direct_sound_samples/cries/medicham.aif b/sound/direct_sound_samples/cries/medicham.aif index d081dc9002f30965afe7063db02ad908eac71073..02818ba0dd2d18a3ea456404a0b58189af77943e 100644 GIT binary patch delta 20 bcmX@-Fw23%%|FPOfk8oNB8S{Yr!VpVK(GcB delta 68 zcmbQ`aL$3l%|FPOfkDA-B8Qxqr(bXg0|SGI4Ff|x5JJI5gReIj~-F5|3?db4x^CCUXw delta 12 TcmX>ReIj~-F5}FNdb4x^CB+3q diff --git a/sound/direct_sound_samples/cries/meowstic.aif b/sound/direct_sound_samples/cries/meowstic.aif index 0d356edeb180ae1370fa324c7949d15c29f3693f..a8536832b263267a862c6739cea4c31de50c34d8 100644 GIT binary patch delta 20 bcmeA%+Goh&<{#wCz#y@0B8S{Yn;8-SKn?~B delta 100 zcmdmI*ki=u<{#wCz#z#okwZ?*&(YVFfq{X~%-ljjSHU+mzr464GkK%h3<(QQ7h?sW hlmU=t2GR@+Y9XE>MnIY$h*8yt1UY*H1wqP;ECEL(6iEO8 diff --git a/sound/direct_sound_samples/cries/meowth.aif b/sound/direct_sound_samples/cries/meowth.aif index 9ba028cfb73413a625106d720634d41f69d2412b..d919e99e63d91c47ce9b5d38c760ebeb1395ed05 100644 GIT binary patch delta 20 bcmcbnx=5A7%|FPOfk9~2L=L%)PBlURK-mT3 delta 68 zcmZ3adQFwX%|FPOfkEipL=HJIPru+01_lNZ8wQ4YAcTUA3Qa;1evZDbK)yh@W0-5a PV~}%vK$wB45rZ)R`>YNf diff --git a/sound/direct_sound_samples/cries/mesprit.aif b/sound/direct_sound_samples/cries/mesprit.aif index 4996d3f4b713fb76f7c95710f1eafd73f1c7e065..0c76a7f0f47e237890d73b2bf81a7137a112bca2 100644 GIT binary patch delta 22 dcmeC0$arl6BZr%RkS_y+hu=gFxs6T+9sp3626zAf delta 70 zcmcaMfw5~MBZr%RkS_y+N7F delta 70 zcmZ29lkwV2Mh-XsAYTRspK}vA7({Fs80vu#3N|V<`AGOV`nm%70^yEf RuJMjR&hY_Z#^z=W<^WFY4~PH& diff --git a/sound/direct_sound_samples/cries/metagross_mega.aif b/sound/direct_sound_samples/cries/metagross_mega.aif index 3f9ca589cf8b9d81ad50e77429661a3d116ae7d8..e1125b659f5077922315827e2c26afaf323cf89c 100644 GIT binary patch delta 14 VcmbQ%%rvc;X@V|e#zwu2MgS)Z1tkCg delta 14 VcmbQ%%rvc;X@V|e`bNEsMgS)U1tb6f diff --git a/sound/direct_sound_samples/cries/metang.aif b/sound/direct_sound_samples/cries/metang.aif index df249ec540efe3e527da4a78c38a1ba15bedd5da..225cdfbfe1eae8c36084b5b8293542a13af3db25 100644 GIT binary patch delta 20 bcmX@-Im?s7%|FPOfk9=`L=L%)P9-V;MI8n& delta 68 zcmbQ`dCrr=%|FPOfkEZiL=HJIPru+01_lNZ8wQ4YAcTUA3RNl+evZDbK)yh@W0-5a PV~}%vK$x+)DT5gR4SWuC diff --git a/sound/direct_sound_samples/cries/metapod.aif b/sound/direct_sound_samples/cries/metapod.aif index de04d69de6a74277c65f0cd268f994a55d6720c2..e875755db0a61ac4c6220ce51332aa5e07cd7761 100644 GIT binary patch delta 20 bcmewtbt;O(%|FPOfkD@4B8S{YCly@)OWOt` delta 68 zcmX>V^)HIU%|FPOfkC%yB8Qxqr(bXg0|SGI4Ff|x5JJI51ub0(KSy6zAYUNdG0ZjI PF~~VSAk4tfkiiT97$^=~ diff --git a/sound/direct_sound_samples/cries/mew.aif b/sound/direct_sound_samples/cries/mew.aif index 166a0a8e95a603c91f298721986138fe0f766f6a..f0649ee6f847c838c69b8f047fe2a1ee60d1768c 100644 GIT binary patch delta 20 bcmX?9)>p>i<{#wCz+lZbkwb2y(+evAM-~Q# delta 68 zcmeAxJ5p>i<{#wCz+lZbkwb2y(+evAM-~Q# delta 68 zcmeAxJ5Jv669AO22<{#wCz+lqi=;`L>=jiLoz`!6B?il78?-=A9AK)AA6mMp1$S{#dkRb)% diff --git a/sound/direct_sound_samples/cries/mime_jr.aif b/sound/direct_sound_samples/cries/mime_jr.aif index 1b12debbc33a5a25cd43e54acbc9238427a6f450..604c678fae99e6f2038f606c2509e0b41857d257 100644 GIT binary patch delta 20 bcmaFnw#kjd%|FPOfk9boB8S{YCmv-0L?;D@ delta 68 zcmdnw_RNjL%|FPOfk8QLB8Qxqr(bXg0|SGI4Ff|x5JJI51tDb#KSy6zAYUNdG0ZjI PF~~VSAk4(rlEDZ7_G1mn diff --git a/sound/direct_sound_samples/cries/mimikyu.aif b/sound/direct_sound_samples/cries/mimikyu.aif index b86eaedaa56b138331682e8efc0c2c9958e6b569..15f3720dc75b61364839fae178378442cdc86dc1 100644 GIT binary patch delta 20 bcmaDWi%|FPOfx((*B8S{Yn|D?KN-PGl delta 100 zcmbPI_Na`*%|FPOfx$XzB8QxqpQEoU0|Nt}xw(acu7Yo7Zf166slrCJcUBgjF2)K# jDFYzQ45S$tR6{&NjDR#B5TmFM33B!Zih)#_S}*_ryX+N2 diff --git a/sound/direct_sound_samples/cries/minccino.aif b/sound/direct_sound_samples/cries/minccino.aif index c10f3f7c9f2ee46c9945def695ca58e6ee33cc7c..d49eb07414ad7e800ccce323ef34b3c18311ad95 100644 GIT binary patch delta 26 hcmcZI)5p diff --git a/sound/direct_sound_samples/cries/misdreavus.aif b/sound/direct_sound_samples/cries/misdreavus.aif index a501b547b6edb95e5d40e2f5f108d2fef984c129..774a832ea114d832accb4f7a72d2641671f3128b 100644 GIT binary patch delta 20 bcmcblJ5QIx%|FPOfkABAL=L%)P8DJRL16{! delta 68 zcmbQIdr6nW%|FPOfkEulL=HJIPru+01_lNZ8wQ4YAcTUA3Uy)2D1PF delta 70 zcmX>!h4I@IMh-XsAYTRsue^yIa$=r-!66I`3?eoR4D~<=1sfHVyd?Y_eO-ZkfpEt# R*LcSu=lFmyV@pE@V*ovv4)Xv2 diff --git a/sound/direct_sound_samples/cries/morelull.aif b/sound/direct_sound_samples/cries/morelull.aif index 78ee2ffc63ad462211dd3482ba4849c45edb28a4..0b38baf6a4960fefffc9e66976453691579aa433 100644 GIT binary patch delta 22 dcmdng#rUL?k;BbD$d`e^<<3M7xs5jaTmV^82d)4B delta 102 zcmaFT$+)SDk;BbD$d`e^Rcj)LoS2`ZuPXxs1E0C6se-P8Z+=l~PH9fgMzwt|7M?D~ k3P33XAk7S<85q<;JVT6tG(Qldst*Zr_67=qlo^`>0NR5U;s5{u diff --git a/sound/direct_sound_samples/cries/mothim.aif b/sound/direct_sound_samples/cries/mothim.aif index 82a42bce34715d2b97374abe3eaaf22a5d8a3709..d2a2c7b8c30ad26de4f546d99e72ed238d0370fb 100644 GIT binary patch delta 20 bcmccQJI|NH%|FPOfkAEBL=L%)P8DhZMu7%P delta 68 zcmbQ|d&!r>%|FPOfkExmL=HJIPru+01_lNZ8wQ4YAcTUA3Uz7{evZDbK)yh@W0-5a PV~}%vK$wZ434;Lu6M7DW diff --git a/sound/direct_sound_samples/cries/mr_mime.aif b/sound/direct_sound_samples/cries/mr_mime.aif index ca89f4bc2ed399f414cddbf2154d5abbd8f97661..991eeb9d1cdcd460c74df7f92fce43f33102237e 100644 GIT binary patch delta 20 bcmez8dCHT+%|FPOfkEZaL=L%)PD@k(P8|mC delta 68 zcmX@*`OlNX%|FPOfkEZlL=HJIPru+01_lNZ8wQ4YAcTUA3aeBk{2YBWi`rNTxvHZu!P7h?sW ilmU=t2GR@+sv({sMnIYmh*8vs1UY*H#XzczEExch>J(o9 diff --git a/sound/direct_sound_samples/cries/mudkip.aif b/sound/direct_sound_samples/cries/mudkip.aif index adbdda2906dfab7ed04877316806c8d17db13255..0162f94001dd6036910ea078777bae1417579da6 100644 GIT binary patch delta 20 bcmca5yG)kD%|FPOfq`${L=L%)P7QnjKv4zT delta 68 zcmZ1`drOwX%|FPOfr0PRL=HJIPru+01_lNZ8wQ4YAcTUA3T=E6evZDbK)yh@W0-5a PV~}%vK$wxK1%nv?`NIw% diff --git a/sound/direct_sound_samples/cries/mudsdale.aif b/sound/direct_sound_samples/cries/mudsdale.aif index 564019f27eeab38b3d8323a0bae8ade904a01ba3..2776ec02dadb68eeba2dcfa193f1d1ec7947d269 100644 GIT binary patch delta 22 dcmdng#rUL?k;BbD$d`e^<<3M7xs5jaTmV^82d)4B delta 102 zcmaFT$+)SDk;BbD$d`e^Rcj)LoS2`ZuPXxs1E0C6fr74rZ)r+#N@7mxMzwt|7M?D~ k3P33XAk7S<85q<;JVT6tG(Qldst*Zr_67=qlo=ZU0MDcqnE(I) diff --git a/sound/direct_sound_samples/cries/muk.aif b/sound/direct_sound_samples/cries/muk.aif index 557bb84ec7a4eec1cce3b8be3b1507e01a633a95..2abfd59591b229a6d103701eba900e238a006aa9 100644 GIT binary patch delta 20 bcmaE6xyh2l%|FPOfk9@~L=L%)PCYUJM-2vF delta 68 zcmdmF`OK2T%|FPOfkEcpL=HJIPru+01_lNZ8wQ4YAcTUA3X^0c{2YBE(%|FPOfkENWL=HJIPru+01_lNZ8wQ4YAcTUA3S|lsevZDbK)yh@W0-5a PV~}%vK$xMW1%n9y1hEcH diff --git a/sound/direct_sound_samples/cries/musharna.aif b/sound/direct_sound_samples/cries/musharna.aif index 406f56576fd1d71e826cde5b6fa178e25eec282f..69dd2800cf3693aefdb460062d1763127cccee1a 100644 GIT binary patch delta 22 dcmeC!%6MrDBZr%RkS_y6l-EQKxs6UbQ2 diff --git a/sound/direct_sound_samples/cries/naganadel.aif b/sound/direct_sound_samples/cries/naganadel.aif index b8c34ce627c46e6917df7487f6c52c4d560a11b2..4cd829612baf1dff95a066a6786feee44bcb9e54 100644 GIT binary patch delta 22 ecmex#gK@zPMh-XsAYTTC9Eph>avSY_Wdi_Vrw9-L delta 106 zcmZ2*gYnZ1Mh-XsAYTTCoUDl)auR-yzOD=m3<4GgCJMR=eu?Rcd5I~hISL!qeq~#E nx)>_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%VZs0asO}fX diff --git a/sound/direct_sound_samples/cries/natu.aif b/sound/direct_sound_samples/cries/natu.aif index a492cc5d3950e02400c4972beeb5c07eebf77d1d..76094398889233b89dd389139eeb60fab2c393d2 100644 GIT binary patch delta 20 bcmX@6IZ2bl%|FPOfkC8eB8S{YryLOgK79qR delta 68 zcmbQFc}$bT%|FPOfk9;7L=HJIPru+01|Y|VfuSAS*N2G#%o delta 102 zcmdmWj0|2tu8bAO5 diff --git a/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif b/sound/direct_sound_samples/cries/necrozma_dusk_mane.aif index 3a31dc8e59a5422641992a74d07045c55c3fc330..fce3fb2f61df005481b0e5ebe2f27377f71b2bbc 100644 GIT binary patch delta 22 ecmaEGg|X=hBZr%RkS_y6=C6qyavNRlWC8$W4hWq9 delta 118 zcmZp=!ua3{BZr%RkS_y6R>VXOIXOQ^UsnbO1~Cf*0|i|LztrTS{HokU1r3+d;%rTY tjcRu?9Xwr(6@W@CfHX6ZW?;|_@eDBn(qcf2RbNPuvo}x0(~{8E#P@~d(a6*NL~N{SLS sH>!E0J9xSnD*%;P0BL3*&A^}+;u&HDq{V?4yS|VhXK$b+NV%CA06AV8^8f$< diff --git a/sound/direct_sound_samples/cries/nidoking.aif b/sound/direct_sound_samples/cries/nidoking.aif index 43fadf98977d4ce625f0d66e9cf98c621516b26e..5a645ca83a4f9203785cc07dcc1dc412e98e7ee4 100644 GIT binary patch delta 20 bcmZ1#|1FNg%|FPOfk8iSB8S{YrvQBbO40^k delta 68 zcmewsw?!NevZDbK)yh@W0-5a PV~}%vK$wBCA%iIZ6FCl{ diff --git a/sound/direct_sound_samples/cries/nidoran_f.aif b/sound/direct_sound_samples/cries/nidoran_f.aif index a8ecf4b4a00d7b02dbdb7cbc023e4da7d768cd41..cf0213394974a5b6d4276537a01b67580662d912 100644 GIT binary patch delta 20 bcmbQFc2AYV%|FPOfkEinL=L%)PCJAELM#SU delta 68 zcmcboI!TSg%|FPOfkBvSB8Qxqr(bXg0|SGI4Ff|x5JJI5g?&O2evZDbK)yh@W0-5a PV~}%vK$wA%C4&(F)(Q=h diff --git a/sound/direct_sound_samples/cries/nidoran_m.aif b/sound/direct_sound_samples/cries/nidoran_m.aif index bb2de057e4c01b71b1fe6ce077d4fc7b9f259b54..2e691595bf7306e7d1a076d55cd65ed4d9e5b78d 100644 GIT binary patch delta 20 bcmeyRaZH25%|FPOfkDJ>B8S{YCj}7zLm35q delta 68 zcmX@6@k@il%|FPOfkC8bB8Qxqr(bXg1CV3Gz)%l_P_R)!O+>=a(bpBo7YKI@bB%Wl Oa*huOGcYz{FaiMb*$uP+ diff --git a/sound/direct_sound_samples/cries/nidorina.aif b/sound/direct_sound_samples/cries/nidorina.aif index ce56909917cbec3dc02be42ccf07df4c56edcddd..3f73fd947f5c9d036cc2c9207ef765cc941f5c05 100644 GIT binary patch delta 20 bcmbPabkC5(%|FPOfkEQhL=L%)PCFz3L>LBm delta 68 zcmca-ILU~^%|FPOfkBdMB8Qxqr(bXg0|SGI4Ff|x5JJI5g?$ndevZDbK)yh@W0-5a PV~}%vK$wBC0fP|$-W3h5 diff --git a/sound/direct_sound_samples/cries/nidorino.aif b/sound/direct_sound_samples/cries/nidorino.aif index dcc1629e4bdfd9e7f0d668d76cea836a647fcec9..75e48cc7213606861b64e0ff22eaba4c5f93b6c6 100644 GIT binary patch delta 20 bcmdm_|4)y@%|FPOfkC`%B8S{YrwDNXM4|=o delta 68 zcmeyTw@IJF%|FPOfkAxLL=HJIPru+01_lNZ8wQ4YAcTUA3UT5RevZDbK)yh@W0-5a PV~}%vK$wBCF@q5R1+@++ diff --git a/sound/direct_sound_samples/cries/nihilego.aif b/sound/direct_sound_samples/cries/nihilego.aif index 1e428ec28a7dec288925dd9b67d0abe541babbca..17c56e8cbf46e2f391139907e3853acb7d2ffb6b 100644 GIT binary patch delta 22 ecmdn=jPc1+Mh-XsAYTTCqB|2gV-sy-yh*&8SbQf6)p05k3u!TmIZ2Yk%|FPOfq|!MB8S{YryL#tJM9I3 delta 68 zcmbOvc}$YS%|FPOfq`e=L=HJIPru+01_lNZ8wQ4YAcTUA3Pn5;evZDbK)yh@W0-5a PV~}%vK$wxG0fP|$<_!(J diff --git a/sound/direct_sound_samples/cries/ninetales.aif b/sound/direct_sound_samples/cries/ninetales.aif index aa31af7a8c0ea2c13f8720cdce737d2a773eec5e..51a260f9e92af803b3f53159f8935851212b4405 100644 GIT binary patch delta 20 bcmZ1$|0#~c%|FPOfk8iOB8S{YCm($PN)iT8 delta 68 zcmewqw=AB+%|FPOfkA)XL=HJIPru+01_lNZ8wQ4YAcTUA3PJi3evZDbK)yh@W0-5a PV~}%vK$wBC1%nX)93T#j diff --git a/sound/direct_sound_samples/cries/ninjask.aif b/sound/direct_sound_samples/cries/ninjask.aif index f5b32b13ed2abb07febc1b8fa712ccf8267cd6b8..06693156a76d5fe747518fcca1d9c0c9e6cb4f9a 100644 GIT binary patch delta 20 bcmcboze=CO%|FPOfkAxHL=L%)PA%d9L-Ph9 delta 68 zcmZ3be@~yo%|FPOfkFJ*L=HJIPru+01_lNZ8wQ4YAcTUA3SHt7evZDbK)yh@W0-5a PV~}%vK$wxGA%hVB31ALi diff --git a/sound/direct_sound_samples/cries/noctowl.aif b/sound/direct_sound_samples/cries/noctowl.aif index 9cb1b31653aebe44facfe5a865999ee327dab6ee..2a96488f28f4f2f53f3bc935cc62967328178318 100644 GIT binary patch delta 20 bcmcZ?v?_?h%|FPOfk9JgB8S{YCl*ZrM3V)J delta 68 zcmZ1#bT5d*%|FPOfk88DB8Qxqr(bXg0|SGI4Ff|x5JJI51ujhqKSy6zAYUNdG0ZjI PF~~VSAk5Irguw^^_p1%a diff --git a/sound/direct_sound_samples/cries/noibat.aif b/sound/direct_sound_samples/cries/noibat.aif index a00200aab0604c5eb080cef694fe5031bfe3b9fc..6f3c18f40dc030c2a94097d8c24465de062a493a 100644 GIT binary patch delta 26 hcmbPG*i^{l<{#wCz+h43=;`J*QA&|9WTQ=p1psTw2bTZ< delta 40 vcmZoFoKPs`<{#wCz+lng=;`L>=jiLoz`($km!FxGSTd1Ekui9qUWf$%>@^EI diff --git a/sound/direct_sound_samples/cries/noivern.aif b/sound/direct_sound_samples/cries/noivern.aif index aaf03806d72ff0edaf7353fbfb48d5fa542a2629..5806e69713611d725c1cd286bd4b4308bb3963af 100644 GIT binary patch delta 22 dcmdlpo$=i?Mh-XsAYTRs@3e^=avN~q3Ootg>nEc=>_8e delta 15 WcmZp%Yq6W4%XoF7q3Ootg>nEc;RWIV diff --git a/sound/direct_sound_samples/cries/octillery.aif b/sound/direct_sound_samples/cries/octillery.aif index f52b7978e598e58cc87d0fe5eddac1078bdd03b8..196400455137582232fce349ddeb5b185c90350f 100644 GIT binary patch delta 20 bcmdm%)|AHK<{#wCz+m)iB8S{Yr#nUfN<9Z9 delta 68 zcmZol+m^=R<{#wCz+kL5kwZ?*(=RxLfq_B9hJm3T2%%u3!XqOIKSy6zAYUNdG0ZjI PF~~VSAk4_fguw^^{wxk) diff --git a/sound/direct_sound_samples/cries/oddish.aif b/sound/direct_sound_samples/cries/oddish.aif index 2c9902bb20e09ecd01131e97fc1f055fd00360b3..4f30f7ddb452ad75214dfd4697bc8def971c273f 100644 GIT binary patch delta 20 bcmbPb`OJdD%|FPOfk7s2B8S{YCkGh-LA(X7 delta 68 zcmaE6G0T#}%|FPOfk9@{L=HJIPru+01_lNZ8wQ4YAcTUA3T`qIevZDbK)yh@W0-5a PV~}%vK$wAvF@pgB_!kZ3 diff --git a/sound/direct_sound_samples/cries/ogerpon.aif b/sound/direct_sound_samples/cries/ogerpon.aif index e5cb2f7badeea1df98c3efdc6f65ef3212de6ce8..17b9d94d62fd81073029170a0bd4044026c3eb27 100644 GIT binary patch delta 14 Vcmew|iSf%M#tFKNZX5O7JOMCQ1%Utn delta 14 Vcmew|iSf%M#tFKNt{e5-JOMCL1%Lnm diff --git a/sound/direct_sound_samples/cries/okidogi.aif b/sound/direct_sound_samples/cries/okidogi.aif index afa9cfbddd8855f677d4f53c57cedfe5e8ca1d9e..f22f3ba3358b2da3119fd09787a27f73fc80ff74 100644 GIT binary patch delta 18 YcmbR6lyL$O=`towF3b?y=;BiZ07=XTLI3~& delta 18 YcmbR6lyL$O=`toxF3b?y=;BiZ07=6KK>z>% diff --git a/sound/direct_sound_samples/cries/omanyte.aif b/sound/direct_sound_samples/cries/omanyte.aif index 7ee0a8e3fe2f3d9677139191af1dca0aa8419859..eeedac34db7ef26ed1f3355aac25a1d418460f71 100644 GIT binary patch delta 20 bcmZ2w^39mT%|FPOfkE=!L=L%)P8TErNa_aO delta 68 zcmexnyvl^b%|FPOfk8@XB8Qxqr(bXg0|SGI4Ff|x5JJI5g=>-$evZDbK)yh@W0-5a PV~}%vK$xMi1%n9y^XCp9 diff --git a/sound/direct_sound_samples/cries/omastar.aif b/sound/direct_sound_samples/cries/omastar.aif index 4c110a3fad240ccb493d2ae0442ed17bbaac93dc..9d4f738efd1aa416873a0df16779e1b72bdadf9c 100644 GIT binary patch delta 20 bcmZ2v^3IsU%|FPOfkE=wL=L%)PA4P*M`{MX delta 68 zcmaE7yvT&Z%|FPOfk8@YB8Qxqr(bXg0|SGI4Ff|x5JJI5g>#Y;evZDbK)yh@W0-5a PV~}%vK$xMiC4(^l?I8{S diff --git a/sound/direct_sound_samples/cries/onix.aif b/sound/direct_sound_samples/cries/onix.aif index 2f7c050e8301d4f8b4763f633556e68ce0ce944c..6203ce56896974948abc79abecfbe0136b6fe762 100644 GIT binary patch delta 20 bcmX??Fe`z>%|FPOfx$p%B8S{Yr!V>dMbHLx delta 68 zcmbQ0a4vzv%|FPOfx*CSB8Qxqr(bXg0|SGI4Ff|x5JJI5gN6N6p`(JXf`3tFa(+=}zJi8RVrEXN vrou+G1UDy77h?sWA}b)x45S$t^g}#DjDWNR5aZAp66EX+lm)3bGGqV%I`JEM diff --git a/sound/direct_sound_samples/cries/oricorio_pau.aif b/sound/direct_sound_samples/cries/oricorio_pau.aif index 69933407e0fe03582e3b5628674d5532d603af93..4faa6cc083c8761a96b69643465aaf6a02e5fa0d 100644 GIT binary patch delta 22 dcmbPno^jVXMh-XsAYTTCbfbwJavNPl(g9gb2JQd= delta 118 zcmdmWj&a6$Mh-XsAYTTC^a&F=!!GJ9xSnD*%;P0BL3*&A^}+;u&HDq{V?4yS|VhXK$b+NV%yc0Kl9YO8@`> diff --git a/sound/direct_sound_samples/cries/oricorio_sensu.aif b/sound/direct_sound_samples/cries/oricorio_sensu.aif index f9208250b4d3df971a15b4643110ea40436b9999..bdc25a774970a8fde90a86cc9e8e09b88508491f 100644 GIT binary patch delta 20 bcmexXHl>Wi%|FPOfx((*B8S{Yw|7bS!CtE~CUoLwm-_^Yr*P*D#*a2LN0|2jBnz delta 21 dcmX?>bS!CtE~EHHLwm-_^Yr*P*D#*a2LN0)2j2hy diff --git a/sound/direct_sound_samples/cries/palafin_zero.aif b/sound/direct_sound_samples/cries/palafin_zero.aif index 3ee6bdb32195d0b13d13b2afdfe9bc5463e5a8ae..16051848beb8a45e9cc8ea9fc4bb980db25329ef 100644 GIT binary patch delta 18 acmbProN?B1#tFKNIg>vot=M?&ND=^0nh7cZ delta 18 acmbProN?B1#tFKN*^@set=M?&ND=^0kqIdP diff --git a/sound/direct_sound_samples/cries/palkia.aif b/sound/direct_sound_samples/cries/palkia.aif index e755ceace0b862c3cbfe541f23f9aa75c568e3a2..dee52b9a596602792aea291df0a6dfb861907b01 100644 GIT binary patch delta 22 ecmeC%z<6stBZr%RkS_y6_@#*)avPntgaZIuvIpb< delta 70 zcmcb$p0RHOBZr%RkS_y61lvRoIWbSa;1C7|1`!(uhI$}`f{hBh!X^A1eO-ZkfpEt# R*LcSu=lFmy6AKfDAOJN`4@Uq1 diff --git a/sound/direct_sound_samples/cries/palossand.aif b/sound/direct_sound_samples/cries/palossand.aif index 028df4fad71f341a014556f1cffda181e8b71222..a4a1da4feeecff5075139a6df97ff4f09f757143 100644 GIT binary patch delta 22 dcmeA<&$#OxBZr%RkS_y6y3s@qxs7%r=>S+W2HXGu delta 106 zcmdmWjJvC69ADS2{Zrz delta 55 zcmeCmT#~8g<{#wCz+f`R(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;n=oM9r5B4hMK KL%EGUb|wI<^$y(t diff --git a/sound/direct_sound_samples/cries/pancham.aif b/sound/direct_sound_samples/cries/pancham.aif index 581e0a34005bda95951b7560070b290c2307250c..5a986eddf4713ff84ee229025c881ed78afcc6cc 100644 GIT binary patch delta 20 bcmX@&|ILrX%|FPOfk8cQB8S{Yn*enHN;n2Y delta 100 zcmez7cf_B=%|FPOfkA!GL=HJIKSy6z1_lN`GjkIKU4?+eyyT3;T!oEl0qPc>F2)K# jDFYzQ45S$tR6{&NjDR#B5TmFM33B!Zih)!anKA$Xnno0C diff --git a/sound/direct_sound_samples/cries/pangoro.aif b/sound/direct_sound_samples/cries/pangoro.aif index cdbb8d21118085ace8b3b485989483e0ad2d4fd2..47f7bcf2d055ffd8d290f4a2bef128f2ef774217 100644 GIT binary patch delta 20 bcmcbS*_FxR<{#wCz+loekwb2yO^OKsNizmx delta 100 zcmeCmyphS_<{#wCz+iG=B8QxqpQEoU0|Nt}nYpQgu0lX!UV45}zQRVe6cYX#g<{#wCz+lZZkwb2y(-SKIMpg!P delta 68 zcmeAw+gHZn<{#wCz+i1QkwZ?*(=RxLfq_B9hJm3T2%%u3!YeBYKSy6zAYUNdG0ZjI PF~~VSAk4tToWTSD59AKD diff --git a/sound/direct_sound_samples/cries/passimian.aif b/sound/direct_sound_samples/cries/passimian.aif index 0aab355729be6a562081f1c3d36d1ee94395f3ca..ac824012e5f617dd660012268d303b14f49046b3 100644 GIT binary patch delta 22 dcmey+%s8)^k;BbD$d`e^aoR)S( nF2)K#Nh2W545S$t)I&T&jDWNN5Toe`33B!Zih|Ucm@xnVXz&*x diff --git a/sound/direct_sound_samples/cries/patrat.aif b/sound/direct_sound_samples/cries/patrat.aif index 1bfddd3f9f44865a6b89ac420f05f163eb82ea29..f1e17939ab1096782851587e720947165cf7146d 100644 GIT binary patch delta 26 hcmZoNe__Vs<{#wCz#yIA=;`J*QB9H2YNLmhGyr9Y2MPcH delta 52 zcmaE1)?}{c<{#wCz#v`a=;`L>=jiLoz`!6B?il78?-=A9AK)AA6mM#5&M=Wjk=jiLoz`!6B?il78?-=A9AK)AA6mMp1!Z49Xk@4t8 Hy%|FPOfkEZkL=HJIPru+01_lNZ8wQ4YAcTUA3SBA^evZDbK)yh@W0-5a PV~}%vK$wB4F@rGx8te|L diff --git a/sound/direct_sound_samples/cries/petilil.aif b/sound/direct_sound_samples/cries/petilil.aif index ce243e499ef289ff0b4941555dfc5dc9850aa3ca..6252c76247048e011519ac5ab848ff69b025ff34 100644 GIT binary patch delta 21 ccmeBD{h-3*<{#wCz#x?2=;`LRQ7uIX07Oa!;Q#;t delta 47 zcmeyM(xs~A<{#wCz#!D*=;`L>=jiLo0OW)_hPlQ&206zE_=Y>hn;M!kY~)E10st)> B3?~2p diff --git a/sound/direct_sound_samples/cries/phanpy.aif b/sound/direct_sound_samples/cries/phanpy.aif index 6f95e2907861b45bb7db8cb05896df2396e757f4..0c541c3bf155b34c0054e9b449c3f930aa982d02 100644 GIT binary patch delta 20 bcmdm`)274W<{#wCz##f>B8S{Yrw5_{L9+&j delta 68 zcmZqE*`>qb<{#wCz#wKckwZ?*(=RxLfq_B9hJm3T2%%u3!ZT3`KSy6zAYUNdG0ZjI PF~~VSAk4_vkiilF+CvS; diff --git a/sound/direct_sound_samples/cries/phantump.aif b/sound/direct_sound_samples/cries/phantump.aif index 14951a8acfac34f988d43eb87b10f479a5b68192..1afccc074c5328463d7c48d27db8c96c2100d7cf 100644 GIT binary patch delta 22 ecmcaNi*dp%Mh-XsAYTRsUyg|!avN=4`2YY@aR(3p delta 102 zcmbO*i}BtpMh-XsAYTRs->``sa$V-sy-yh*&8SbQf6ui0Q2k?M*si- diff --git a/sound/direct_sound_samples/cries/pheromosa.aif b/sound/direct_sound_samples/cries/pheromosa.aif index b4093eb594bb84f8155daf5c26ed0fdae035fac8..bcf57050d3e6fd44afa083920c549ef4503d0f3f 100644 GIT binary patch delta 22 dcmeA<&$#OxBZr%RkS_y6y3s@qxs7%r=>S+W2HXGu delta 106 zcmdmWjl^G}Au%|FPOfq}1VB8Qxqr(bXg0|SGI4Ff|x5JJI51uZ@aKSy6zAYUNdG0ZjI PF~~VSAk5I*h`|^D?lBFf diff --git a/sound/direct_sound_samples/cries/pidgeot.aif b/sound/direct_sound_samples/cries/pidgeot.aif index 2e29607ad0dd92a3cf5d5c837296e53de8f7409e..67f49406a94ab86af1a0d719c5e7baf307a8d5dd 100644 GIT binary patch delta 20 bcmZ4H{K<*K%|FPOfk82AB8S{YCm%%sMV1Bp delta 68 zcmez5w9J{q%|FPOfkAQJL=HJIPru+01_lNZ8wQ4YAcTUA3PFkzevZDbK)yh@W0-5a PV~}%vK$wA{1w#-32|f;2 diff --git a/sound/direct_sound_samples/cries/pidgeot_mega.aif b/sound/direct_sound_samples/cries/pidgeot_mega.aif index 89b846a1cc3bcc8a7e8d63a565bb769733596e2a..a1639ba4e9137b72cdfd84a0f1707f7122d225a7 100644 GIT binary patch delta 14 WcmZ3mhH=3f#tFKNpEl}!3IzZ!IRKSy6zAYUNdG0ZjI PF~~VSAk4tfoWT+R_)-nj diff --git a/sound/direct_sound_samples/cries/pidgey.aif b/sound/direct_sound_samples/cries/pidgey.aif index 14d8284b976fbfadbc4466118762d96b87a0386c..3b4b6ece2757bdb418317c45fcf2c66b311e881b 100644 GIT binary patch delta 20 bcmcb`zl@*5%|FPOfq{MAL=L%)P7Uk;J`)A8 delta 68 zcmZ3+e~X{P%|FPOfr0(fL=HJIPru+01_lNZ8wQ4YAcTUA3T^BXevZDbK)yh@W0-5a PV~}%vK$wA{8AA{N@Inp> diff --git a/sound/direct_sound_samples/cries/pidove.aif b/sound/direct_sound_samples/cries/pidove.aif index faec9a046c22ef5c5baa9913b93330af897c0419..b2bd5590bc8d1f176e2e2f8d658628b5898eca2c 100644 GIT binary patch delta 30 mcmZoNdtu7s<{#wCz##R&(bLUsqM9P(uE`f!l{aQjmjVEl>k1M8 delta 56 zcmaE1+GM8Y<{#wCz##R@(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o3gkd6&BIC}< M8(Eb%22Pg(0K}sZ8UO$Q diff --git a/sound/direct_sound_samples/cries/pignite.aif b/sound/direct_sound_samples/cries/pignite.aif index 3cb8d0a850efeec524b53765ce32c9e3962f11ac..8e1f78ae2f3eac485ddd79ee61d614fbc1ba3746 100644 GIT binary patch delta 23 ecmX@n!MLu2k;lzH$d`e^Ma|LE&26Kak_!Md1H{2=S)YOz=Bae~` E08qIM&Hw-a diff --git a/sound/direct_sound_samples/cries/pikachu.aif b/sound/direct_sound_samples/cries/pikachu.aif index 30c770165947fdcff99ed4626bd35f7a4cabe440..4a7b270245621e54fb87a992dcd97806652e084d 100644 GIT binary patch delta 20 bcmbQ{_{f37%|FPOfk7c^B8S{YCmRI-LPQ0& delta 68 zcmaFlFwK#}%|FPOfkB~fB8Qxqr(bXg0|SGI4Ff|x5JJI51t$dwKSy6zAYUNdG0ZjI PF~~VSAk4tXl)(@H`W_AL diff --git a/sound/direct_sound_samples/cries/pikipek.aif b/sound/direct_sound_samples/cries/pikipek.aif index ee55aca4cefd4dbb97bc9ed2548dab369cee1bd3..04efe56a4cb7ebcec309700f19e1786c8e7d8959 100644 GIT binary patch delta 20 bcmX>X(-6bq<{#wCz@YnMB8S{Yn_Id7N;wA; delta 100 zcmZpOITyp><{#wCz@X=X@? diff --git a/sound/direct_sound_samples/cries/pineco.aif b/sound/direct_sound_samples/cries/pineco.aif index 6f02c13690d9162b127c7cacec97c6cb2fe0c06b..acb6de8a0c67485724ec0feeb262185618d30a7f 100644 GIT binary patch delta 20 bcmdmG(q_Wp<{#wCz##c=B8S{Yrw5V%Li+}v delta 68 zcmZoO*=54v<{#wCz#wHbkwZ?*(=RxLfq_B9hJm3T2%%u3!ZS$;KSy6zAYUNdG0ZjI PF~~VSAk4_XguxI1-=q!K diff --git a/sound/direct_sound_samples/cries/pinsir.aif b/sound/direct_sound_samples/cries/pinsir.aif index 995999b6849a8e9b84944fb84fed777a3a1f6993..bfbb268d68ce57fddcce929d4c31bedd625396ea 100644 GIT binary patch delta 20 bcmX?P&}YEm<{#wCz#zdkkwb2y(+hC`JKzPh delta 68 zcmeA(IAp-#<{#wCz#w5YkwZ?*(=RxLfq_B9hJm3T2%%u3!aH#ZKSy6zAYUNdG0ZjI PF~~VSAk5InoWTSDL=L%)P6y-xN7e?y delta 68 zcmaE6Kg)r`%|FPOfk8oNB8Qxqr(bXg0|SGI4Ff|x5JJI5g=6v(evZDbK)yh@W0-5a PV~}%vK$x+mF@q@p?u`xy diff --git a/sound/direct_sound_samples/cries/plusle.aif b/sound/direct_sound_samples/cries/plusle.aif index 2c023697f64dcf2f838d75dca781a641c992fc9c..e584201a8f3884b844e38d0fee28f7ad030dbc2c 100644 GIT binary patch delta 20 bcmdm_{7;F)%|FPOfkCirB8S{YrwBm+Lbe6W delta 68 zcmeyTv`Lx6%|FPOfkAN9L=HJIPru+01_lNZ8wQ4YAcTUA3UPuGevZDbK)yh@W0-5a PV~}%vK$x+iA%h_R{e%tz diff --git a/sound/direct_sound_samples/cries/poipole.aif b/sound/direct_sound_samples/cries/poipole.aif index b9f9fce1d0654b336b4ac9becc430b9095911684..c2a141ac85ef73c37926b72552dc8a08863963a2 100644 GIT binary patch delta 22 ecmZ27f$>^DBZr%RkS_y+`?-l6avNfc(sY{G3#UjcOa*Ej(R} l6@XF(K$;myGcc%zc!n4OX+9uEQ6CcI>HAr diff --git a/sound/direct_sound_samples/cries/poliwrath.aif b/sound/direct_sound_samples/cries/poliwrath.aif index ba1aac528d66ae23a2c9280ec0202b432fa365ad..bb9d78f3c39fa088e0cc5930be3ce84a76e0b859 100644 GIT binary patch delta 20 bcmaE+y-AzH%|FPOfkAZDL=L%)PCcRkM9&5_ delta 68 zcmdm_{Y;y~%|FPOfkE`%L=HJIPru+01_lNZ8wQ4YAcTUA3X?=7{2YBXrh2?PK$AqHXq diff --git a/sound/direct_sound_samples/cries/ponyta.aif b/sound/direct_sound_samples/cries/ponyta.aif index 121dbb39487d8d2aaf55cc29d4324d4eccde2de4..ec66a33faf46d97e55e84b5d1a16a7b577ad325e 100644 GIT binary patch delta 20 bcmexob;^pv%|FPOfkD=3B8S{YCly%$M!N;W delta 68 zcmX?Q_0NjK%|FPOfkC!xB8Qxqr(bXg0|SGI4Ff|x5JJI51ua<#KSy6zAYUNdG0ZjI PF~~VSAk4troWT?T0-+8D diff --git a/sound/direct_sound_samples/cries/poochyena.aif b/sound/direct_sound_samples/cries/poochyena.aif index d7bad7c909cc6fe10f31d413d7cbf04e8007a854..bfa6a00ae20afc43b97c7c50771ef764ebae62cb 100644 GIT binary patch delta 20 bcmX@5GEIfU%|FPOfkB9GB8S{Yrw@VvJ9GuG delta 68 zcmbQHa!Q56%|FPOfkDV=B8Qxqr(bXg0|SGI4Ff|x5JJI5g>QlqevZDbK)yh@W0-5a PV~}%vK$wx4A%h_R;%g1+ diff --git a/sound/direct_sound_samples/cries/popplio.aif b/sound/direct_sound_samples/cries/popplio.aif index 4b5571a17cba6537ae2f6b6ce7d587689aad1d6d..cbb3a0ff30e021da30eeb030b14a2134b268dc1b 100644 GIT binary patch delta 20 bcmbQ|bIF^-%|FPOfkE}uL=L%)HfvM?N6-eS delta 98 zcmccQJ_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%XutpfRKFIw diff --git a/sound/direct_sound_samples/cries/primeape.aif b/sound/direct_sound_samples/cries/primeape.aif index ef53c214617129205c716c49dce8394a3a9540c7..35898bf2e64ed374100b464c586280a32f3aebfb 100644 GIT binary patch delta 20 bcmZ2y|I3cU%|FPOfkD1#B8S{Yrx1AnMsfxa delta 68 zcmexmx6Yo!%|FPOfkA%RL=HJIPru+01_lNZ8wQ4YAcTUA3Q_VBevZDbK)yh@W0-5a PV~}%vK$wB4IfEep4LlA_ diff --git a/sound/direct_sound_samples/cries/prinplup.aif b/sound/direct_sound_samples/cries/prinplup.aif index 2550fd01c691b5aa212ee350202b140455fe0d86..62311c1cbf2c29e72863f850b087cf48122c4786 100644 GIT binary patch delta 20 bcmewre=MHE%|FPOfkA)YL=L%)P7Cw_P~!(7 delta 68 zcmX>W|0|xu%|FPOfkFS%L=HJIPru+01_lNZ8wQ4YAcTUA3d{5*{2YBkv%|FPOfkEb#qo0+z^ ilr#d;%s?8bC&V+v2uKS6F`AB$AZKr&C`g^DAp-z8dKSw7 diff --git a/sound/direct_sound_samples/cries/quagsire.aif b/sound/direct_sound_samples/cries/quagsire.aif index 84330f4de54cc9f26811e82c0aa304696768748c..7373b6bb0c9c1a7317e8794bfb5458d2b429a7ee 100644 GIT binary patch delta 20 bcmdmH(qzKn<{#wCz##c+B8S{Yr#q4WLOTYJ delta 68 zcmZoN*=EAw<{#wCz#yeJkwZ?*(=RxLfq_B9hJm3T2%%u3!XrruKSy6zAYUNdG0ZjI PF~~VSAk5IxlpzQJ+=C7A diff --git a/sound/direct_sound_samples/cries/quilava.aif b/sound/direct_sound_samples/cries/quilava.aif index 7b3e35ffb584a943f9c1efb0aa0846d6cc1a329b..40d3db5594d44a7c2ac7b8f6f3169793f3d2f52d 100644 GIT binary patch delta 20 bcmaE)w@#14%|FPOfk9ktB8S{YCk}A{KaT}3 delta 68 zcmZ3d_ehV!%|FPOfk8ZKB8Qxqr(bXg0|SGI4Ff|x5JJI51wL^JKSy6zAYUNdG0ZjI PF~~VSAk5IzjKKr|;;jvD diff --git a/sound/direct_sound_samples/cries/quilladin.aif b/sound/direct_sound_samples/cries/quilladin.aif index 9a4ca6e1f723da2557db680cfaa5739a819427a1..9b6dfabdc60340c789f3dabb770514b8ada93929 100644 GIT binary patch delta 20 bcmZ2gd#i@S%|FPOfx#|lB8S{YI}Ir55 delta 22 ecmZqJ!`QHgae^-6#mNUFEhpzi@oX&ajRgQ}-3es? diff --git a/sound/direct_sound_samples/cries/raichu.aif b/sound/direct_sound_samples/cries/raichu.aif index b8ed0d4b3776eb3126f0e042e9a176204b86eaff..001dcba627085ea0e003f890007ccf2a72367c7f 100644 GIT binary patch delta 19 acmcZ=vn+Z delta 68 zcmZ3d{z#p}%|FPOfkF7zL=HJIPru+01_lNZ8wQ4YAcTUA3Vp&7evZDbK)yh@W0-5a PV~}%vK$ww*0fR9B2T~4J diff --git a/sound/direct_sound_samples/cries/rampardos.aif b/sound/direct_sound_samples/cries/rampardos.aif index 7134c57dd63ad8abd86bd3497cf49d273f6949fb..edec1aac4f345a5a72b31a095585a96ca6282cca 100644 GIT binary patch delta 22 dcmaDhhjG&!Mh-XsAYTRsKdp%zavPm^`~X&F28#dy delta 70 zcmdlqhw<4QMh-XsAYTRszqpAUa$=r-!66I`3?eoR4D~<=1sfHF{3QGweO-ZkfpEt# R*LcSu=lFmy69Y>ILjW~X4#@xj diff --git a/sound/direct_sound_samples/cries/rapidash.aif b/sound/direct_sound_samples/cries/rapidash.aif index 2dd536735b6f4dc69e6dbafcc1b571a4019834cd..c070475d183d1baf1d0db57e13a3a89d986bef2f 100644 GIT binary patch delta 20 bcmaFnvB`tO%|FPOfk8!UB8S{YCmt05M0o{` delta 68 zcmdnw@yvt6%|FPOfk7p1B8Qxqr(bXg0|SGI4Ff|x5JJI51tAp)KSy6zAYUNdG0ZjI PF~~VSAk4trg24~~_qGkq diff --git a/sound/direct_sound_samples/cries/raticate.aif b/sound/direct_sound_samples/cries/raticate.aif index f7d60550261bfd127259ed52aa7c391a15e36826..fd726b655f33415cd5b86f2e275ae9cf619a2971 100644 GIT binary patch delta 20 bcmdm`+NR3k<{#wCz#vpNkwb2yQ-TlxJDCM@ delta 68 zcmZou-KEOm<{#wCz#z0~B8Qxqr(bXg0|SGI4Ff|x5JJI5g)|`vKSy6zAYUNdG0ZjI PF~~VSAk4tXfWZ&|4`pxWof47dZuQ2h6aWT3K}_? zNyT|7X_+~xx`uiNdPXLi8`aE$>pfkJ6@XgWfHX6ZW?-leiHL{*(&9iIoS#-wo>-L1 zfMOU_fgn&pZemt`QG8NSVqOYEN@8&aR7wCOm6->WDoZUY&dkqaFo4QP17(u)a|;qn YGLv#rS7-a$=r-!66I`3?eoR4D~<=1sfGkMN9cP`nm%7Lg9{K TuJMjR&hY`h;ZE^prUncEYt0Zp diff --git a/sound/direct_sound_samples/cries/reuniclus.aif b/sound/direct_sound_samples/cries/reuniclus.aif index 75d92858c498fbce030db3c0910c939a63089e78..ab22f0f97e5f9cc67a9d50e7e7a0ae97cd9be632 100644 GIT binary patch delta 21 ccmX?-yegT;%|FPOfx&Q*qo1ONa4 delta 47 zcmZ3Ld?Z=T%|FPOfx&Q(qoQ@ Ca1BoY diff --git a/sound/direct_sound_samples/cries/revavroom.aif b/sound/direct_sound_samples/cries/revavroom.aif index 731e2496c7c042a91224fdca244ebe334b28be9d..e52bf1c6fe7b09570dc1724eaac3eac16bcd2348 100644 GIT binary patch delta 20 ccmX@|jq%7g#tFKNVw)Q)j2Jg3Fg~dS0AWA~n*aa+ delta 20 ccmX@|jq%7g#tFKNqMI8lj2Jg3Fg~dS0AV!PZ$SC delta 68 zcmaD``sa$V-sy-yh*&8SbQf6cf0Owj2>;M1& diff --git a/sound/direct_sound_samples/cries/rillaboom.aif b/sound/direct_sound_samples/cries/rillaboom.aif index c6a8b8932d76688d315ce6d7ad48130aacbbcaa0..f7e4624e88077bc531edad8af3ee48f80abc4c6a 100644 GIT binary patch delta 14 WcmbO-fpN+N#tFKN&o=5ka|Zw`Ck6We delta 14 WcmbO-fpN+N#tFKNPdDm4a|Zw`A_e*Y diff --git a/sound/direct_sound_samples/cries/riolu.aif b/sound/direct_sound_samples/cries/riolu.aif index c8fcaf0345dae3a81ea16debab00c526ee5bdb6b..cd25b09faf4f012380a187253983f126f61ec17c 100644 GIT binary patch delta 20 bcmbQI`AUPs%|FPOfk7l`B8S{YCl?U_KkNmL delta 68 zcmaE*F;A1j%|FPOfk9;2L=HJIPru+01|Y|VfuSAlhk^nL81)cx^ delta 14 Vcmca}gz?T1#tFKNx*PTMk^nL31)Tr@ diff --git a/sound/direct_sound_samples/cries/roselia.aif b/sound/direct_sound_samples/cries/roselia.aif index 146771f8ce5f8189a9295e87b361599ad4bd5368..c6c53f3c1f8dd16f5d2d84bc022c448c79341165 100644 GIT binary patch delta 20 bcmbQI^-7b&%|FPOfkEWaL=L%)PDexlMGyv% delta 68 zcmaE*IZunj%|FPOfk9MkB8Qxqr(bXg0|SGI4Ff|x5JJI5g;OFDevZDbK)yh@W0-5a PV~}%vK$x+iDT6Tp;_MC0 diff --git a/sound/direct_sound_samples/cries/roserade.aif b/sound/direct_sound_samples/cries/roserade.aif index 00a9430f2d5bc7985b982923050772cc1c6b8bb0..7c9de96a0e1c4825938975587152df738b8fc985 100644 GIT binary patch delta 20 bcmcZ?yegQ(%|FPOfkAW8L=L%)PA!@MNw)@# delta 68 zcmZ1#d@q>8%|FPOfkE@yL=HJIPru+01_lNZ8wQ4YAcTUA3SF8KevZDbK)yh@W0-5a PV~}%vK$wYvIfF3(A-@jG diff --git a/sound/direct_sound_samples/cries/rotom.aif b/sound/direct_sound_samples/cries/rotom.aif index 41468228d1cb974cdea7e5ac9a7f02c1142d031f..81080115c2ee036e5bc584d68a2d7437b99025f2 100644 GIT binary patch delta 20 bcmdm0&{n|V<{#wCz+nDwB8S{Yrw8T$OqT~! delta 68 zcmZoG*j2#c<{#wCz+hoCkwZ?*(=RxLfq_B9hJm3T2%%u3!ZULTKSy6zAYUNdG0ZjI PF~~VSAk4(vlED}N2$T++ diff --git a/sound/direct_sound_samples/cries/rowlet.aif b/sound/direct_sound_samples/cries/rowlet.aif index e14b229c210b84bb455e8cca3f82c5154e6a5594..c201336015f3ae7032ff80ec645964b54c0b8231 100644 GIT binary patch delta 20 bcmX@$|ILrX%|FPOfk8cQB8S{Ys{nNXN#X`R delta 96 zcmez7cfg;+%|FPOfkA!8L=HI-KSy6z1_lNmb0Z@KU4@|h@|@I?jcNhvW}Ys_3P1@x gAk7S<85op9JVT6tG%pY%s}2cr_67_$!ga%|FPOfx+O@L=HJIPru+01_lNZ8wQ4YAcTUA3d;;6{2YB7({Fs80vu#3N|V@g-Q82`nm%7Lg9{K TuJMjR&hY`h;ZE_Urj`r$h4I)F#tFKN5*zg-yZ|c31kL~e delta 14 VcmX>$h4I)F#tFKN;v4lOyZ|b}1kC^d diff --git a/sound/direct_sound_samples/cries/sandile.aif b/sound/direct_sound_samples/cries/sandile.aif index 9e52575b7cd02e60dd4b5b6412d9e7d93e80081e..316b66aec954fb3f6581dd1965e6ffc4cf911795 100644 GIT binary patch delta 30 mcmca+yvLZw%|FPOfkASMqo-_Mh-XsAYTTC;3*S1_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%V#xpik;WIF diff --git a/sound/direct_sound_samples/cries/sawk.aif b/sound/direct_sound_samples/cries/sawk.aif index ebfe11e4a8256a3753ef7b4a344fea97bf651c40..c040994edcdeb4c446ed4724dc1f0ccd0be26c4d 100644 GIT binary patch delta 26 hcmaEta3z7q%|FPOfx*DX(bLUsqM9P3+C~pG0|0gt2crN0 delta 52 zcmcbT@Ge2k%|FPOfx#fn(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;oFlwl%|BBSa? HJv9RWkiHGl diff --git a/sound/direct_sound_samples/cries/sawsbuck.aif b/sound/direct_sound_samples/cries/sawsbuck.aif index 745d3761d31f5097d98b3801a17995acff527344..9dcc4f927c8f5f902fb3c1bae225208b4a2235b5 100644 GIT binary patch delta 23 ecmeBcVf@m}$m8Z8&n2uAQbKx<{Ix9`aY E083d7R{#J2 diff --git a/sound/direct_sound_samples/cries/scatterbug.aif b/sound/direct_sound_samples/cries/scatterbug.aif index 9fba052198bb941e97aef56be5173a4007d02582..c553fb4771ab8e75dc9e67885e014cf51b7ae888 100644 GIT binary patch delta 20 bcmbPWw9k;k%|FPOfk9&1L=L%)b~7XZKx76I delta 104 zcmdmIIKha+%|FPOfkBdEB8QxWpQEoU0|SGAnVE@#u0n8fVo6DAQBrC8Mzt9dR-P`# k3P4FCAk7S<85lG|JVT6tv>*_p>j(*Q_67=r6dIZW0KhsG-~a#s diff --git a/sound/direct_sound_samples/cries/sceptile.aif b/sound/direct_sound_samples/cries/sceptile.aif index 6c8820d17ee091941680a57c5fb465256a93a09f..c460e445d5135d444fba8cd972d0f541a99e4bc1 100644 GIT binary patch delta 20 bcmaEtx+|5#%|FPOfx&3gL=L%)PE(8kPnib; delta 68 zcmdm$`Yx5j%|FPOfx+n6L=HJIPru+01_lNZ8wQ4YAcTUA3bTwP{2YBlYSMh-XsAYTTCs3{XU7({Fs80vu#3N|XZMM?QN`nm%7Lg9{K TuJMjR&hY`h;ZE_UrUncEbcPTm diff --git a/sound/direct_sound_samples/cries/scorbunny.aif b/sound/direct_sound_samples/cries/scorbunny.aif index 120dd0f88898969f1b17f094c226f712cf0e6671..c0963bbc1ccadd9d76de97c8d46f09c5a4d55641 100644 GIT binary patch delta 12 TcmaEt|1N)mF5`iXdI!t_E3yU; delta 12 TcmaEt|1N)mF5~`=jiLoz`!6B?il78?-=A9AK)AA6mMp1&M=Wjk(#KBNV9 delta 68 zcmaE*Fi(-g%|FPOfk9x}L=HJIPru+01_lNZ8wQ4YAcTUA3SI&devZDbK)yh@W0-5a PV~}%vK$xMSIfDrR>p%^& diff --git a/sound/direct_sound_samples/cries/seaking.aif b/sound/direct_sound_samples/cries/seaking.aif index e4d56b9b0695c9be1533e5e3e9fb2b31122a0fee..f572ce5dd421559405092149957401a73e28c30a 100644 GIT binary patch delta 20 bcmX@-J@UMQ;W* delta 68 zcmbQ`ea@T1%|FPOfkE}yL=HJIPru+01_lNZ8wQ4YAcTUA3RS8SevZDbK)yh@W0-5a PV~}%vK$xMSC4(^l4!#a^ diff --git a/sound/direct_sound_samples/cries/sealeo.aif b/sound/direct_sound_samples/cries/sealeo.aif index 9cb4058c8bbfd55584ac27d05548031972643ea5..9a0aedda624efbec32e9ae4e1cd7f331c460af43 100644 GIT binary patch delta 20 bcmX@4*Qdwf<{#wCz#z^xkwb2y(+e>GJB|ge delta 68 zcmeCvJEX_q<{#wCz#wilkwZ?*(=RxLfq_B9hJm3T2%%u3!aFeuKSy6zAYUNdG0ZjI PF~~VSAk5gzguxg9;(874 diff --git a/sound/direct_sound_samples/cries/seedot.aif b/sound/direct_sound_samples/cries/seedot.aif index 410e983280367b7d0f20db2fc70f1e62c0f7391b..eac082184f333e7698a23d6d712d4485b0dd5075 100644 GIT binary patch delta 20 bcmZ3a@J^n?%|FPOfr0(E8evZDbK)yh@W0-5a PV~}%vK$wxaF@q%l-<%D| diff --git a/sound/direct_sound_samples/cries/seel.aif b/sound/direct_sound_samples/cries/seel.aif index 927a8fd6c9b2b1498173d564dca8dbbda8f4fc4d..1cc31998f2df54fa8b9dec3739a27ca06ab64451 100644 GIT binary patch delta 20 bcmbQ_cF&c=%|FPOfkEloL=L%)PCJwUM@$B^ delta 68 zcmccTI?0X0%|FPOfkByTB8Qxqr(bXg0|SGI4Ff|x5JJI5g?&mAevZDbK)yh@W0-5a PV~}%vK$wAr8G|VR>&y-K diff --git a/sound/direct_sound_samples/cries/seismitoad.aif b/sound/direct_sound_samples/cries/seismitoad.aif index 267979cc0bbb1332de5a8b67224eef573bbf4836..521f9b741b9b9b240a7fc2ee6828207a095af1ff 100644 GIT binary patch delta 21 ccmbP|`749R%|FPOfx)E6(bLUsqgtK`08!Qk)c^nh delta 47 zcmeyBF(p&Y%|FPOfx)E5(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;n=f?*?1o(TX? CFAXCA diff --git a/sound/direct_sound_samples/cries/sentret.aif b/sound/direct_sound_samples/cries/sentret.aif index 91b5fc4561c8da9ce632448d77af5eb422d238f7..ffbce9c7c57de697723fb9ca568ec9c3acccdfd4 100644 GIT binary patch delta 20 bcmca6ut2%|FPOfq}zsB8Qxqr(bXg0|SGI4Ff|x5JJI51tty&KSy6zAYUNdG0ZjI PF~~VSAk5Irkii%L#2^gd diff --git a/sound/direct_sound_samples/cries/serperior.aif b/sound/direct_sound_samples/cries/serperior.aif index 73ea832cd49f65f0f59add93ac6aa2504901f90b..9a2eb0baadca04aa0161b44857172c07cfd4e083 100644 GIT binary patch delta 21 ccmX?6yRMeU%|FPOfx&K>qoW`74sc%|FPOfkEffL=HJIPru+01_lNZ8wQ4YAcTUA3d?jP{2YBk(bLUsquL!a092F*n*aa+ delta 47 zcmaEn+mxr~<{#wCz+m>v(bLV%&(YVFfq_9N+%e2G-Z98IJ|N7*(kMRIJ8~n>9Wwx1 C;SNdw diff --git a/sound/direct_sound_samples/cries/shedinja.aif b/sound/direct_sound_samples/cries/shedinja.aif index ad19071a65275ad24aeb9b5e7d6c8e6ce03710ee..d891bd382c39e671b37782017ca6cfbbe71226bc 100644 GIT binary patch delta 20 bcmdld*Cof{<{#wCz`)Nmkwb2y(-S@bI6eh# delta 68 zcmeB@+b752<{#wCz`$=dkwZ?*(=RxLfq_B9hJm3T2%%u3!Ye)rKSy6zAYUNdG0ZjI PF~~VSAk4_ph`|&9)Iklf diff --git a/sound/direct_sound_samples/cries/shelgon.aif b/sound/direct_sound_samples/cries/shelgon.aif index 8df317b3a6501e48e0968ce2972de5179e1a2c97..b202dc037625e2e72f1c6c8f0382fb2e7e86009b 100644 GIT binary patch delta 20 bcmZ4F_s*BY%|FPOfkExrL=L%)PAAj=OOyu; delta 68 zcmaFoyU35j%|FPOfk9nrB8Qxqr(bXg0|SGI4Ff|x5JJI5g>z~WevZDbK)yh@W0-5a PV~}%vK$x+)5rZ)R{>2VV diff --git a/sound/direct_sound_samples/cries/shellder.aif b/sound/direct_sound_samples/cries/shellder.aif index 51513ae6a369bae152134a1787971c2cb7bfc351..3f2df4a82ca55910f1ce23a697d5550b7e740545 100644 GIT binary patch delta 20 bcmdmI(`Ccq<{#wCz#zvokwb2y(-T<$Jq!iN delta 68 zcmeCO*=NJy<{#wCz#wNfkwZ?*(=RxLfq_B9hJm3T2%%u3!Yf$`KSy6zAYUNdG0ZjI PF~~VSAk4thfWa65=!6ag diff --git a/sound/direct_sound_samples/cries/shellos.aif b/sound/direct_sound_samples/cries/shellos.aif index 2f6f095d05daa7ed4c49cf05a7e9738486c95f71..f59073120229b43b19d6c334dccb9accdb2b94ce 100644 GIT binary patch delta 20 bcmZoOzGTGV<{#wCz#!>0kwb2yla3?+Jq86# delta 68 zcmca))Mm`#<{#wCz#v&SkwZ?*(=RxLfq_B9hJm3T2%%u3f{~quK*gJx>>71)zW$kY)zb3=A?M Wo*_m+ngxh~szQRCy`elqBVz!plnws? diff --git a/sound/direct_sound_samples/cries/shieldon.aif b/sound/direct_sound_samples/cries/shieldon.aif index 44b564ccf0b172f339fd6e9787786cc0df0df07e..5ea98bf1748a4a99881751532c84d6172dfa6309 100644 GIT binary patch delta 20 bcmcZ>z9^i-%|FPOfkAuLL=L%)PBq#9NZST^ delta 68 zcmZ1!el48C%|FPOfkFG+L=HJIPru+01_lNZ8wQ4YAcTUA3QgJ)evZDbK)yh@W0-5a PV~}%vK$wZ40fQ+39i9%e diff --git a/sound/direct_sound_samples/cries/shiftry.aif b/sound/direct_sound_samples/cries/shiftry.aif index 970d5ef116548768dedeb9ef3d254e7f45e21491..dbc65b749ed543af092f6db28042ae792cb01c7a 100644 GIT binary patch delta 20 bcmbQ|`^tyI%|FPOfk7>4B8S{YCl@sUMX&|> delta 68 zcmaFmGtZa9%|FPOfkAEBL=HJIPru+01_lNZ8wQ4YAcTUA3SMdwevZDbK)yh@W0-5a PV~}%vK$wxaDMK&-30DqV diff --git a/sound/direct_sound_samples/cries/shiinotic.aif b/sound/direct_sound_samples/cries/shiinotic.aif index 6d275d9376c779e06d9d9bb849024c1383c5ec58..972aef0769fe4a9239e2d127402c62343f691e9d 100644 GIT binary patch delta 22 ecmdnAj`6`-Mh-XsAYTTCup1LO_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%Y{mcpXHyq1 diff --git a/sound/direct_sound_samples/cries/shinx.aif b/sound/direct_sound_samples/cries/shinx.aif index fcdae1cb70b33071b428060edb2b4a082c6c6e0e..08f7ad8a4cafd23ba21332dfaad64e8d68df57b1 100644 GIT binary patch delta 20 bcmZ4H{mF~N%|FPOfk8EEB8S{YCm&S+M&1S# delta 68 zcmez5walBt%|FPOfkAcNL=HJIPru+01_lNZ8wQ4YAcTUA3PGw8evZDbK)yh@W0-5a PV~}%vK$wYvF+(r_4y+Dt diff --git a/sound/direct_sound_samples/cries/shroomish.aif b/sound/direct_sound_samples/cries/shroomish.aif index 587cf6188270b06322e30e27b14e6335172f13dd..9c092ae0723168bb732218ac3f045d1353c9df75 100644 GIT binary patch delta 20 bcmaE-v`dM@%|FPOfkDt{B8S{YClNsaKjQ^E delta 68 zcmdm`^iGMx%|FPOfk7~BB8Qxqr(bXg0|SGI4Ff|x5JJI51t~!ZKSy6zAYUNdG0ZjI PF~~VSAk4_Zlpz=ZU>4evZDbK)yh@W0-5a PV~}%vK$x+qF@q%l-^2~* diff --git a/sound/direct_sound_samples/cries/sigilyph.aif b/sound/direct_sound_samples/cries/sigilyph.aif index cce44936cf02cfb4d03fa04fec0763337e0e000c..cf84e7dcf9ebcd83c850a95bb8a942239f4be17c 100644 GIT binary patch delta 23 ecmex2jq%AeMjki+AYTRs?-)l$bBT6nq` kD*&YofHX6ZW?)bY@eDBn()>V-sy-yh*&8SbQf6ul0494Dl>h($ diff --git a/sound/direct_sound_samples/cries/simipour.aif b/sound/direct_sound_samples/cries/simipour.aif index 47ac114690cc18f12e1994666f2fdba810462ae8..91e891b63fbf40899078f33b8d1e67e3706295bf 100644 GIT binary patch delta 21 ccmX?Px5AFc%|FPOfk9ru(bLUsqneC707S_JjsO4v delta 47 zcmZ2scgRl7%|FPOfkEEN(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o5f?*?%j647; CYYW`~ diff --git a/sound/direct_sound_samples/cries/simisage.aif b/sound/direct_sound_samples/cries/simisage.aif index 0117cf73fc34efffd09769397b559d23a221c99b..944f5ff831012fcbdbd930dc5d5fb6d1bb53273e 100644 GIT binary patch delta 30 mcmX?Mzs{b=%|FPOfkA$mqozH|?C diff --git a/sound/direct_sound_samples/cries/simisear.aif b/sound/direct_sound_samples/cries/simisear.aif index c6f9ec22972aa8312a158cf430a78ef592c65a1b..e3e8eb860aa838b86e026cc111ed67b793ae5351 100644 GIT binary patch delta 26 hcmZp(dt=Mv<{#wCz##X;(bLUsqM9P(zKtIHAx1!&7l@HnhXgr$1BF0}jEn&WjuO=X diff --git a/sound/direct_sound_samples/cries/skiploom.aif b/sound/direct_sound_samples/cries/skiploom.aif index 04c3a438e9424a5c539278d2b45cedb6a2b47f2a..4517e39c7a7017c6cc2c30adbd0c9743393eb1ce 100644 GIT binary patch delta 20 bcmeA(zGcMW<{#wCz#thkkwb2ylZhk%K86Ks delta 68 zcmca*)Mw1$<{#wCz#!Q+kwZ?*(=RxLfq_B9hJm3T2%%u3f|aC%pQEoUkS`GK80H%9 P7~~uu5N2p$!C(Ra>H-b1 diff --git a/sound/direct_sound_samples/cries/skitty.aif b/sound/direct_sound_samples/cries/skitty.aif index f200d7fae48a6b801edca18a8a166e656b2828ff..0f903b53779ed5d9c61e79c5925432e6c1e6af69 100644 GIT binary patch delta 20 bcmZpYIVa8G<{#wCz`%QKB8S{Yrxm;aJ(30X delta 68 zcmX>n-6X@|<{#wCz`*-!B8Qxqr(bXg0|SGI4Ff|x5JJI5g>}3VevZDbK)yh@W0-5a PV~}%vK$x+C0YfkV`G*cn diff --git a/sound/direct_sound_samples/cries/skorupi.aif b/sound/direct_sound_samples/cries/skorupi.aif index 22e22b6d42eacb0a3499c40075fb61fc8d9ec595..a638cb464532afb8a3c9cea582ac49f2e2bf90e9 100644 GIT binary patch delta 20 bcmX?BIH{1s%|FPOfx)6{B8S{YryL6aN(Bao delta 68 zcmbPKc&w1a%|FPOfx%+mL=HJIPru+01_lNZ8wQ4YAcTUA3PlzYevZDbK)yh@W0-5a PV~}%vK$wZCA%iIZA;1pC diff --git a/sound/direct_sound_samples/cries/skrelp.aif b/sound/direct_sound_samples/cries/skrelp.aif index 4fd1178d9ab08b37ee614e1862c3dd82fdac66c7..12bb27c043b2c512ababcd97dcfb3e4483d8e3ff 100644 GIT binary patch delta 20 bcmZ1$c_)Iy%|FPOfk7u^B8S{YD>EGcMw|uo delta 96 zcmcZ;u`H6q%|FPOfk9{9L=HI-KSy6z1_lNmGfM*nU4`K6qSTy%jcR5(W}Ys_3P1@x gAk7S<85mSTJVT6tG%pY%s}2cr_67=p6qy(T04Bu~TmS$7 diff --git a/sound/direct_sound_samples/cries/skuntank.aif b/sound/direct_sound_samples/cries/skuntank.aif index 90a00511e2ed398d315f9d295b479f07c545536e..354f2af92ca092e4d90685ab11ca58d6826c23e2 100644 GIT binary patch delta 22 ecmX@MigD5^Mh-XsAYTTCP_Bs_avPoAga80kZ3i>} delta 70 zcmbQVit*SgMh-XsAYTTCP`im7a$=r-!66I`3?eoR4D~<=1sfGUg-G~0`nm%70^yEf RuJMjR&hY_ZCdQ@=#sEHI4|4zj diff --git a/sound/direct_sound_samples/cries/slaking.aif b/sound/direct_sound_samples/cries/slaking.aif index 287b5a3b6b8f04d5e41415799e24e783d3b574fc..d023af76817e91d6a79ab291cd9dac204c2e72ce 100644 GIT binary patch delta 20 bcmZotKc~jw<{#wCz#!~4kwb2ylZG$=I$8x7 delta 68 zcmX@7)}+qi<{#wCz#v>TkwZ?*(=RxLfq_B9hJm3T2%%u3f}XI1pQEoUkS`GK80H%9 P7~~uu5N2dy$zTZp*TD^B diff --git a/sound/direct_sound_samples/cries/slakoth.aif b/sound/direct_sound_samples/cries/slakoth.aif index 67bc284596413cf0118fa7a808425e6daad67e02..54248b2d85450601e551691dca00449c20d99604 100644 GIT binary patch delta 20 bcmX@5I8Bkm%|FPOfkB{eB8S{Yrvd>0J@o~r delta 68 zcmbQHcuJAO%|FPOfkEKVL=HJIPru+01_lNZ8wQ4YAcTUA3S|NkevZDbK)yh@W0-5a PV~}%vK$ww*IfE$x?(q%n diff --git a/sound/direct_sound_samples/cries/sliggoo.aif b/sound/direct_sound_samples/cries/sliggoo.aif index f4351dd999727b8fa28e7435369b472de96dc549..ed141e69c576662900eaaed146faae3d27e549f5 100644 GIT binary patch delta 22 ecmaF0oN>-_Mh-XsAYTTC;3*S127>?q delta 14 VcmeCXz}Rkw%|FPOfq^e;B8S{YCm%ilKY#^_ delta 68 zcmew)vrLx5%|FPOfq`${L=HJIPru+01_lNZ8wQ4YAcTUA3PF4levZDbK)yh@W0-5a PV~}%vK$wBKC4(sd?`#dv diff --git a/sound/direct_sound_samples/cries/slowpoke_galarian.aif b/sound/direct_sound_samples/cries/slowpoke_galarian.aif index 2cb7b8a5f383b53a103cbec6338a79bb21303086..30251a2e8c7b61da7c64fcbd446ce50cd64026f0 100644 GIT binary patch delta 12 TcmaFl|HyxWF5{MsdRx>1C&mSj delta 12 TcmaFl|HyxWF5~8ndRx>1C&2}d diff --git a/sound/direct_sound_samples/cries/slugma.aif b/sound/direct_sound_samples/cries/slugma.aif index d89032e4dc62c4cb1f2d83149575dc79c78b16f8..3526b7f6e7bd74d98c0af074e92d52c6d4ea3682 100644 GIT binary patch delta 20 bcmez5w9kpd%|FPOfkDx1B8S{YCkaIWMZ*QF delta 68 zcmdnz^vQ|C%|FPOfk82AB8Qxqr(bXg0|SGI4Ff|x5JJI51vy0tKSy6zAYUNdG0ZjI PF~~VSAk4_ng25O7{lyLG diff --git a/sound/direct_sound_samples/cries/slurpuff.aif b/sound/direct_sound_samples/cries/slurpuff.aif index c741a553de3793e52cb26658d00117a0605fe22b..93b59e8e352724c3e34ec58a4e2b6310de7ed29c 100644 GIT binary patch delta 22 dcmbQx&UmPek;BbD$d`e^*=iz(+(sK2X8=tN1|9$a delta 102 zcmX@q#yFv!k;BbD$d`e^xnm-SoS2`ZuPXxs1D~0Nse-OTa87AaL1|jrMl~5{3r`ng j1)!7xkY)zb3=C=^o*_m+njeT!)rSN*djkbQ%8bnbyjK-$ diff --git a/sound/direct_sound_samples/cries/smeargle.aif b/sound/direct_sound_samples/cries/smeargle.aif index f59d7bb8a277c7c8859edea1941704ff0f579c09..76cc479ccccb95719bec802c4bacf6d36af5e6c7 100644 GIT binary patch delta 20 bcmbQFaZjDY%|FPOfkF7%L=L%)PCJAFLVgBX delta 68 zcmcboK1qYa%|FPOfkA|8B8Qxqr(bXg1CV3Gz)%l_P_R*9pRk0VqpvHFFA(k+<{Ix9 ORB8S{Yrxk(#KH3Hj delta 68 zcmX@7+@!+c<{#wCz##Z*B8Qxqr(bXg0|SGI4Ff|x5JJI5g>`}wevZDbK)yh@W0-5a PV~}%vK$wxCDT5^d{^t%) diff --git a/sound/direct_sound_samples/cries/sneasler.aif b/sound/direct_sound_samples/cries/sneasler.aif index 77b4f99a213fec8a82881c4c005a5f23c68c0017..b8537fef07cf9d28e420662ec264f140b8f51bc4 100644 GIT binary patch delta 12 Tcmexo`_FcQF5`ubdKcsXDS-vj delta 12 Tcmexo`_FcQF5~%)dKcsXDSQRd diff --git a/sound/direct_sound_samples/cries/snivy.aif b/sound/direct_sound_samples/cries/snivy.aif index f7f9790a168dedacc98207afee37afbf60f26264..cd0335decbd2ce0fb8642592094fbde7d9975138 100644 GIT binary patch delta 26 icmez4{m7fg%|FPOfkE|_qo`LE delta 68 zcmbQ`bk2#x%|FPOfkDx2B8Qxqr(bXg0|SGI4Ff|x5JJI5ghxf%|FPOfkFD!L=HJIPru+01_lNZ8wQ4YAcTUA3iG5T{2YBS*N2G#%o delta 102 zcmdmWj0P=`QDgbg72r~cx delta 52 zcmdnwdB#)C%|FPOfkEYnqo|9n%|FPOfkDY>B8S{YClw_CNL2;l delta 68 zcmX@*^3R3C%|FPOfkCNkB8Qxqr(bXg0|SGI4Ff|x5JJI51uZ2BKSy6zAYUNdG0ZjI PF~~VSAk4tXkiilF2}TYb diff --git a/sound/direct_sound_samples/cries/spectrier.aif b/sound/direct_sound_samples/cries/spectrier.aif index 058cc9f8c5c467e79e435049764403f1304d424b..a43dc77a6cde8961a734f95a83cdbb6a8a875ced 100644 GIT binary patch delta 14 VcmeA<%-D07ae^*m+(x~)L;x#R1zP|B delta 14 VcmeA<%-D07ae^*m>_)w~L;x#M1zG?A diff --git a/sound/direct_sound_samples/cries/spewpa.aif b/sound/direct_sound_samples/cries/spewpa.aif index 1a9fce278118a50959a01f17612a8d1c0a1cf5f7..34cd82b98983f40aa40add39ea6b749623cdf85b 100644 GIT binary patch delta 20 bcmX>V(-6bq<{#wCz@YnMB8S{Yt6RDNN#h3% delta 96 zcmZpOITgd<<{#wCz@X delta 70 zcmaF2g>lhVMh-XsAYTTCs96&^7({Fs80vu#3N|YEMM?NM`nm%70^yEf RuJMjR&hY_ZCMHG<764c?4~75$ diff --git a/sound/direct_sound_samples/cries/spoink.aif b/sound/direct_sound_samples/cries/spoink.aif index af9e1a1ebc9e139e59b6cb6f55f5155547b2ab94..102f53d8f1ffe81a91d411206f5927e86241e435 100644 GIT binary patch delta 19 acmca5vrLA=%|FPOfq_qMB8S{UCq4i+G6cy0 delta 68 zcmZ1`b4!N9%|FPOfq^e*B8Qxqr(bXg0|SGI4Ff|x5JJI51vWkjKSy6zAYUNdG0ZjI PF~~VSAk5gvl)(f5&#es? diff --git a/sound/direct_sound_samples/cries/sprigatito.aif b/sound/direct_sound_samples/cries/sprigatito.aif index 5d6b5c966d7d3e43f6ad733d88d0b900745e831d..13616f9686e6160a414e65adb41be5026cce4941 100644 GIT binary patch delta 17 ZcmZ3aw@7b-F5{PthU$!)LmAJC0suS_21oz^ delta 17 ZcmZ3aw@7b-F5~BohU$!)LmAJC0suS*21ft@ diff --git a/sound/direct_sound_samples/cries/spritzee.aif b/sound/direct_sound_samples/cries/spritzee.aif index 9c451c63ff899b0dce8c98f8dcbf8cb0741b8b54..3bf2499d72e1da9ab610107ef7eb3b25a2b7590a 100644 GIT binary patch delta 20 bcmX>X(-6bq<{#wCz@YnMB8S{Yn_Id7N;wA; delta 100 zcmZpOITyp><{#wCz@XMnIY$h*8yt1UY*H1wqP;jRBmb6;}WN diff --git a/sound/direct_sound_samples/cries/squawkabilly.aif b/sound/direct_sound_samples/cries/squawkabilly.aif index 140243d8026d6f2fcbca4181feee0ab497783597..0c88f36f7414c6edd2f20d6b9311770c4b979012 100644 GIT binary patch delta 28 kcmey>#Q3X;ae^+R&*nzke~gn8Y`G^l*z#?5Wiqt~0IL-Wd;kCd delta 28 kcmey>#Q3X;ae^+R_vS|1e~gn8Y`G^l*z#?5Wiqt~0ILEDdjJ3c diff --git a/sound/direct_sound_samples/cries/squirtle.aif b/sound/direct_sound_samples/cries/squirtle.aif index e570bc18342a25193c22594b9d42b113f2a1297f..8e6cf8644d18596d4b0cc1533ca5b28a7d9222d9 100644 GIT binary patch delta 20 bcmX?SG0TF(%|FPOfk8%SB8S{Yr!Ud~KWGK~ delta 68 zcmbPban6Fn%|FPOfkDP?B8Qxqr(bXg0|SGI4Ff|x5JJI5gN6N6xv7%F%|FPOfx%|gL=L%)PCYgNQB4OQ delta 68 zcmdl~`K*$|%|FPOfx+h9L=HJIPru+01_lNZ8wQ4YAcTUA3X^Ok{2YBN$g>ljpMh-XsAYTRsFRqCkavPoAcme=Wr3Uf< delta 70 zcmbO`nm%70^yEf RuJMjR&hY_ZMg|rPmH;m>4>bS) diff --git a/sound/direct_sound_samples/cries/steenee.aif b/sound/direct_sound_samples/cries/steenee.aif index 27233d2c26d64cb71e5195ca0ac9585dca07c455..54b9df83b76dfd0cb31450a0280f27f0d9533818 100644 GIT binary patch delta 20 bcmZ2cd#i@S%|FPOfx#|lB8S{Y8xuPKOjZV7 delta 100 zcmcarv!a&6%|FPOfx&LUL=HJIKSy6z1_lN`b2B3aU4`J1)YQDxRE3RdCUzE{F2)K# jDFYzQ45S$tR6{&NjDR#B5TmFM33B!Zih)#_7%>01N@BMKItF2)K# jDFYzQ45S$tR6{&NjDR#B5TmFM33B!Zih)!aTQUFuf5#Mr diff --git a/sound/direct_sound_samples/cries/stunfisk.aif b/sound/direct_sound_samples/cries/stunfisk.aif index 5dbdb6dc9cf8c797fcc07bd31d1ffc410ac6063a..3d7f116cfd3374dc688ed45ab625edd67203866b 100644 GIT binary patch delta 32 ocmdnh!?>V_k;lzH$d`e^O~TRB&26HZBIBpYfv!dys}8sV0HK-+e*gdg delta 58 zcmZ3`!?>%5QO(Ui$d`e^&B)Qy&CSoz*Oh^RK`7iY%r)LI$T>d1H{2=S)WVWsB99{D O$H|VaMjI0jxB>vsvk;>I diff --git a/sound/direct_sound_samples/cries/stunky.aif b/sound/direct_sound_samples/cries/stunky.aif index 41923bd96e840260abc6b9ffe73b94ba408d6105..bb9a34bc6254e25f45da894900a57d6386c4f19a 100644 GIT binary patch delta 20 bcmX?SFw20$%|FPOfk8rOB8S{Yr!V3FJ|G3; delta 68 zcmbPbaL$0k%|FPOfkDD;B8Qxqr(bXg0|SGI4Ff|x5JJI5gYB8Qxqr(bXg0|SGI4Ff|x5JJI5g?(}oevZDbK)yh@W0-5a PV~}%vK$xMW5rYK)=3ous diff --git a/sound/direct_sound_samples/cries/sunkern.aif b/sound/direct_sound_samples/cries/sunkern.aif index 54ab4fba5d43b0c7ed0a5ede73f8e13a1bf3d8f7..ecead99e99193958533b0e4cb221a22465639881 100644 GIT binary patch delta 20 bcmew)zfYdS%|FPOfq{S9L=L%)PBZucMI#15 delta 68 zcmdld|4E+1%|FPOfr0K diff --git a/sound/direct_sound_samples/cries/swablu.aif b/sound/direct_sound_samples/cries/swablu.aif index 75e1555b743208543dcd6e29cfded2d196cf703e..0940910ce3bd2abfe22c801844fe6cd5128462eb 100644 GIT binary patch delta 20 bcmZ1^_D+<;%|FPOfr0DUL=L%)PA9kkLYxL< delta 68 zcmaDSx=4(}%|FPOfq`3UB8Qxqr(bXg0|SGI4Ff|x5JJI5g>zgIevZDbK)yh@W0-5a PV~}%vK$x+yF@p&J*u@Q^ diff --git a/sound/direct_sound_samples/cries/swadloon.aif b/sound/direct_sound_samples/cries/swadloon.aif index 5de03159209ac0c59a3c7002308a19f73c2a5607..d2606953b2cbfa4f0ffff6a930fc1aa3d2c2a7e9 100644 GIT binary patch delta 21 ccmez1d(D@}%|FPOfkEw@qo3ByL7Q)&QO C84b1o diff --git a/sound/direct_sound_samples/cries/swalot.aif b/sound/direct_sound_samples/cries/swalot.aif index 45c0b0b85dc0faa94bdf61688e6e7ca106c8ceb1..87e57c9b70efe6f14d07aaf5cfda71168ec09f82 100644 GIT binary patch delta 20 bcmez8e9D=_%|FPOfkE-mL=L%)PD>O4O(zE3 delta 68 zcmX@*{Lh)g%|FPOfkE-xL=HJIPru+01_lNZ8wQ4YAcTUA3ab<){2YB(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P`fMFt!BBSPH LMsv-L;f&@0(=`tI diff --git a/sound/direct_sound_samples/cries/swellow.aif b/sound/direct_sound_samples/cries/swellow.aif index 9ddeec7057c1399449b751393cf6c6da0c38c4f5..a5bf66627d1ebd4e5b43227a897ccf0362d2e80f 100644 GIT binary patch delta 20 bcmX@6JV}|u%|FPOfkCiqB8S{YryM~5J%N6N6-_Mh-XsAYTTC;3*S10(~f-7^%QuFf^Hma2cTX?z{ lD*&YofHX6ZW?)ba@eDBn(tJRSqCOkg4mxZbOUw)aP$mZB delta 20 bcmZ3LxGHgiE@Sm%Mm>kg4mxZbOUw)aP#Ff| diff --git a/sound/direct_sound_samples/cries/taillow.aif b/sound/direct_sound_samples/cries/taillow.aif index 9cbf5bcd6a4b07f17ad97472f4d65b1f50eab54c..c30cdb275bc49c100c78b846f235688796112612 100644 GIT binary patch delta 20 bcmaDQzD=CN%|FPOfq{G7L=L%)P7}BRLR$t2 delta 68 zcmdlc{z{y~%|FPOfr0zcL=HJIPru+01_lNZ8wQ4YAcTUA3e&hH{2YBznQ`6}Mh-XsAYTRsFR_UnauR-yzOD=m3<73m#tOO$A&EKpd1*O`xv3k~mU&uv mx)>_}C5?bIGmvIr&L%|FPOfk8HEB8S{YCmUG+K~4pv delta 68 zcmaE4HO-pC%|FPOfkC!!B8Qxqr(bXg0|SGI4Ff|x5JJI51t(bvKSy6zAYUNdG0ZjI PF~~VSAk5Ivguwy;_7V-^ diff --git a/sound/direct_sound_samples/cries/tangrowth.aif b/sound/direct_sound_samples/cries/tangrowth.aif index 0f3ca54902ef788840ab0ab0fa04429db2cfb024..23e3d995b798410f2072b824deb3af8478344162 100644 GIT binary patch delta 22 dcmX@r!Z@vkk;BbD$d`e^iEko@+(xGljsQ-v2GRfk delta 70 zcmbQ%!g#8Mk;BbD$d`e^$!Q{ooS3Iya0mkfgNO|SLp=~e!A6B|juL*3zOF#NK)7R= RYrJESb9_LUiJ2*bF#sp44-^0Z diff --git a/sound/direct_sound_samples/cries/tapu_bulu.aif b/sound/direct_sound_samples/cries/tapu_bulu.aif index 36d31a68d7a01acf832c54a617e72d9581b34e85..ab84791fa7b1a2dd6395e8613bf4adbb0185d151 100644 GIT binary patch delta 22 ecmX?cg7MpNMh-XsAYTTCE+kud nx)>_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%X3hWrhH)1$ diff --git a/sound/direct_sound_samples/cries/tapu_fini.aif b/sound/direct_sound_samples/cries/tapu_fini.aif index 203ca8d9c8d986e06220edc73404b512328e62b2..301b0a70b8a5ef4337201dbb9652b8631b9f83c7 100644 GIT binary patch delta 22 ecmdmRiSgb=Mh-XsAYTTCjB67)gauR-yzOD=m3_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%X2AdeYDyN) diff --git a/sound/direct_sound_samples/cries/tapu_koko.aif b/sound/direct_sound_samples/cries/tapu_koko.aif index b8b71fcf096fe85054c898f44c02a084ab34cbb5..2fae1a3b0b75c6d0bf2f5d359994605fa8077065 100644 GIT binary patch delta 22 dcmaE`kFjqbBZr%RkS_y6JljMLxs7%&;s9Bh2YLVi delta 106 zcmeC%$M|3$BZr%RkS_y6e8fZ!ISD^UUsnbO1_5&mQw3dxki>#g1@HXqe1(l_FXF5` nU5pigl14z98AvlQsE2rl7y)SkAV$*>66EX+6a}d>Gi3k(X1^BZ diff --git a/sound/direct_sound_samples/cries/tapu_lele.aif b/sound/direct_sound_samples/cries/tapu_lele.aif index 8b13f0ddf01445b3dbb9db926b947bac2b35e7fa..c15bb3186275d7589f1d87ba7e8c3450fc46b9f9 100644 GIT binary patch delta 22 ecmX?cg7MpNMh-XsAYTTC_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%X2t*je~Wl+%NVygkS&UFat|-}=E;md~Wl+%NV;kkS&UFat|-}=E;md~Wl+%NRHLAZyiR1xcQbTW-h$08bkSz5oCK delta 20 ccmeBi>~Wl+%NRTPAZyiR1xcQbTW-h$08b7Fy#N3J diff --git a/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif b/sound/direct_sound_samples/cries/tatsugiri_stretchy.aif index ad1fbe930b10193228da6aa35d54d94dc6bd0b79..08e5680433540b88908b6ab21e17ae7ff02a8d58 100644 GIT binary patch delta 18 acmca(e8+f#F5|k*ifk2(o0l<~NdN#xoCbyf delta 18 acmca(e8+f#F5}wGifk2(o0l<~NdN#xkp_hT diff --git a/sound/direct_sound_samples/cries/tauros.aif b/sound/direct_sound_samples/cries/tauros.aif index fb79a648aee9f7191a3f34199465e5cc5dd8df5c..1b4bdfa5c438da3b9f3d767e7d4775365373b8ca 100644 GIT binary patch delta 20 bcmccSzQ~=!%|FPOfkAoJL=L%)PBqE^MoR`s delta 68 zcmZ4Fe$Ac3%|FPOfkFA)L=HJIPru+01_lNZ8wQ4YAcTUA3QfuqevZDbK)yh@W0-5a PV~}%vK$xMC1%nX)63`BY diff --git a/sound/direct_sound_samples/cries/teddiursa.aif b/sound/direct_sound_samples/cries/teddiursa.aif index dc99db734b5854573ca2bd0dcf3ad0fcfe37d72a..19ba558c3b940dc00e8fb22d531fc992a2b257e5 100644 GIT binary patch delta 20 bcmaFlu+D+Q%|FPOfk8oSB8S{YCk_PwLU9FU delta 68 zcmZ4I@W_F~%|FPOfk7c^B8Qxqr(bXg0|SGI4Ff|x5JJI51wI7{KSy6zAYUNdG0ZjI PF~~VSAk4_njKKl`?%55d diff --git a/sound/direct_sound_samples/cries/tentacool.aif b/sound/direct_sound_samples/cries/tentacool.aif index f3b32c741e903b22842be92a0cc7ef10f8d8287b..8918f25627f7646f7bc97c05deef04806297311e 100644 GIT binary patch delta 20 bcmdmF_s^EY%|FPOfkE!uL=L%)PB-KLOauoU delta 68 zcmexoyUC8j%|FPOfk9qtB8Qxqr(bXg0|SGI4Ff|x5JJI5g?n-mevZDbK)yh@W0-5a PV~}%vK$wBK5rYW;0e%iz diff --git a/sound/direct_sound_samples/cries/tentacruel.aif b/sound/direct_sound_samples/cries/tentacruel.aif index 13b91bbd3e6eb27c7e593a74ac140e76b045cf03..2497d178df3c30142be60e899c1574d7024fb6de 100644 GIT binary patch delta 20 bcmcZ=xh#^y%|FPOfk9{9L=L%)P7OK$N$m!Y delta 68 zcmZ1$c`K5`%|FPOfkEfeL=HJIPru+01_lNZ8wQ4YAcTUA3T-+PevZDbK)yh@W0-5a PV~}%vK$wBKF@psFB5e-Q diff --git a/sound/direct_sound_samples/cries/tepig.aif b/sound/direct_sound_samples/cries/tepig.aif index fa226ef1f174d7c6db67d8228c51e685dd400f75..45b7b4ecdaf4579167f3d0e846c622f70093c22f 100644 GIT binary patch delta 21 ccmdm?Gf#)d%|FPOfk8~n(bLUsqneNy06)A1FaQ7m delta 47 zcmbQIvqMMC%|FPOfkDi`(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o7gkd9(kQe|R Cj0<-F diff --git a/sound/direct_sound_samples/cries/terrakion.aif b/sound/direct_sound_samples/cries/terrakion.aif index 77e5c71ca280a421da9768cd00155c77326b8d04..e567be0f1eed2501d8f127b49b0b905c5c7efb3e 100644 GIT binary patch delta 23 ecmey@!1$zrk;lzH$d`e^A;!_u&26JvgaZIzeFsJW delta 49 zcmaFT!1%9$QO(Ui$d`e^q0G_K&CSoz*Oh^RK`7iY%r)LI$T>d1H{2=S%*2dgBTs|_ E0BIZzj{pDw diff --git a/sound/direct_sound_samples/cries/throh.aif b/sound/direct_sound_samples/cries/throh.aif index 176d1065d6c120748d4fdf4649e39f90cd249a1c..eeeba64e4b299941f68337a3db90bcd416806609 100644 GIT binary patch delta 21 ccmZ1w+ZM~?<{#wCz@S&>=;`LRQLRc307$|HVgLXD delta 47 zcmZpRT@b70<{#wCz@Rt7(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;oFjA0{Bl^y^% CzznSb diff --git a/sound/direct_sound_samples/cries/thundurus_incarnate.aif b/sound/direct_sound_samples/cries/thundurus_incarnate.aif index 75a1af958a47104cc436250c60aa672e249d612f..8b1c81b9f94aa1a2528f3622878bb8b71d00455b 100644 GIT binary patch delta 22 dcmaE|g>l^$Mh-XsAYTTCD7A?kavPmEq5xUu2E_mX delta 72 zcmZ3th4IN2Mh-XsAYTTCsF;Zya$=r-!66I`3?eoR4D~<=1sfIkqNMyBeO-Zkp>W4A T*LcSu=lB5MaHn`P6H5jFWc3ft diff --git a/sound/direct_sound_samples/cries/thundurus_therian.aif b/sound/direct_sound_samples/cries/thundurus_therian.aif index 318201f1b8961e50d0fc237dba3adcf145f79679..f5ac69f177253bf50ede748c7d1042780a74e76c 100644 GIT binary patch delta 22 dcmbQTneo;pMh-XsAYTTC$e@WFavPmYA^}&w2J`>` delta 76 zcmcb$iE+wiMh-XsAYTTC$exKDa$=r-!66I`3?eoR4D~<=1sfHtBIW!XeO-Zkv2e#Q X*LcSu=lFmyGZV}BAXiVXPzDA7u4NGS diff --git a/sound/direct_sound_samples/cries/thwackey.aif b/sound/direct_sound_samples/cries/thwackey.aif index dff37f5c806a1a644fbb403b5884e3767adfc7a3..579df5c965b01e498932fda557c3197f042dcb61 100644 GIT binary patch delta 14 VcmZo_V{B?;oS@5iWux8|Cjck>1)2Z= delta 14 VcmZo_V{B?;oS@5id86JHCjck+1(^T< diff --git a/sound/direct_sound_samples/cries/timburr.aif b/sound/direct_sound_samples/cries/timburr.aif index 839bfb59b734b2f39ca0ba5092ade22350c8dff2..49edb74efb85c4d58ae0f1a7424a7c433208c074 100644 GIT binary patch delta 26 hcmX@-v&DzU%|FPOfk92j(bLUsqM9Nj+eQyIH2`SS2FCyZ delta 52 zcmdnubIwQ2%|FPOfkDm9(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P;jA0^=A|vZY HJvKD}bcPJ` diff --git a/sound/direct_sound_samples/cries/ting_lu.aif b/sound/direct_sound_samples/cries/ting_lu.aif index 82cbff16f33eaf9221b1535125442a3aedfb6bfb..a4a5ed211847c2fe3cfffed89d544a170638b404 100644 GIT binary patch delta 19 bcmX@}l<~|{#tFKN^EMh*F>YSLs8R?3TQ&#} delta 19 bcmX@}l<~|{#tFKNb2l1RF>YSLs8R?3TPz3; diff --git a/sound/direct_sound_samples/cries/tinkatink.aif b/sound/direct_sound_samples/cries/tinkatink.aif index 24b50dbbf04174035b0a43fe7ab1a53d85cfece7..a6229c133856f7c38937354713c660bb7c48eecf 100644 GIT binary patch delta 17 ZcmbO@eW=9 diff --git a/sound/direct_sound_samples/cries/toedscruel.aif b/sound/direct_sound_samples/cries/toedscruel.aif index 87fc37decde4cde2d0b1b174995740b525d76c8e..1f2fade60c6fdbfd2023a40fa9eeffb91e55947c 100644 GIT binary patch delta 22 dcmdni&A6?bae^*m$7Dul@yQA)Eh2VwvK delta 22 dcmdni&A6?bae^*m`(#FE@yQA)EU2VnpJ diff --git a/sound/direct_sound_samples/cries/togedemaru.aif b/sound/direct_sound_samples/cries/togedemaru.aif index 1ac46d6f97a97f747c7145813ed2d764c0bfd9a0..366ce2be960c04b65dd35d9ddcdce8cbcfd37be4 100644 GIT binary patch delta 20 bcmZqj+~C3C<{#wCz@VZrkwb2y9hV9KJa`2l delta 104 zcmdns(d5bD<{#wCz@Sn!kwZ?x&(YVFfq_B5+}vD2S0N-nJvAjYH?gR6qZ*frm8Xlb j0#MQjNHYUz1_q4~&k!RZEeOQuIzob+y@A3Yg{I~J)Y}#B diff --git a/sound/direct_sound_samples/cries/togekiss.aif b/sound/direct_sound_samples/cries/togekiss.aif index a365ddd94dd5cafe2db6b043453a96896258b815..c66baeaf552f6f4c1cf0a9efc86de706b7947736 100644 GIT binary patch delta 22 ecmaF1k#W;TMh-XsAYTTCh*c9gL;wI@{Rhba delta 70 zcmdnAk@49^Mh-XsAYTTCh7({Fs80vu#3N|WCijeSg^mPUD1;QP} RT;m;soZ|z+Ow248i~(&s5DowU diff --git a/sound/direct_sound_samples/cries/togepi.aif b/sound/direct_sound_samples/cries/togepi.aif index 351fea00fc50c3226d928efa6cc5927a527144d5..0785a662ab911b8b2ceb6d422f4340b6382113f4 100644 GIT binary patch delta 20 bcmaE-wM&b`%|FPOfkD)0B8S{YClOHqK`RAQ delta 68 zcmdm`^-hb!%|FPOfk8BFB8Qxqr(bXg0|SGI4Ff|x5JJI51u0PpKSy6zAYUNdG0ZjI PF~~VSAk5I*l)(f5>L?AA diff --git a/sound/direct_sound_samples/cries/togetic.aif b/sound/direct_sound_samples/cries/togetic.aif index 6fd29b73d5bc1317e8c5e3f50ae6fcd89ea9d5c7..f577120c6d3971a9162b47a693d4522c406c6a90 100644 GIT binary patch delta 20 bcmca7y-J$H%|FPOfq{3?L=L%)PA$9uK)(g$ delta 68 zcmZ1_eNURh%|FPOfr0nhL=HJIPru+01_lNZ8wQ4YAcTUA3SGPsevZDbK)yh@W0-5a PV~}%vK$xMq8G{7?`^ye1 diff --git a/sound/direct_sound_samples/cries/torchic.aif b/sound/direct_sound_samples/cries/torchic.aif index 0f39232bff968c1da3d93a97774743410447b372..3accc1b3c880a760a1f821f59faa7771c2952d69 100644 GIT binary patch delta 20 bcmZotJEzLw<{#wCz#w#NB8S{Yrxii~KP(0m delta 68 zcmX@7+N8$e<{#wCz##N%B8Qxqr(bXg0|SGI4Ff|x5JJI5g>^y_evZDbK)yh@W0-5a PV~}%vK$wxKDT6Tp09y`I diff --git a/sound/direct_sound_samples/cries/torkoal.aif b/sound/direct_sound_samples/cries/torkoal.aif index cfdcd3971e7e84cdace89e2c871e853aeeeebdcc..b73d06ef5e44d0979a6992a2533b5ba6e9e6e890 100644 GIT binary patch delta 20 bcmX@7GE0TS%|FPOfk8-UB8S{Yr!Rs4JTwKs delta 68 zcmbQGa!!TA%|FPOfkDV^B8Qxqr(bXg0|SGI4Ff|x5JJI5g@)P KyBqcHc>@59L=O}I diff --git a/sound/direct_sound_samples/cries/tornadus_therian.aif b/sound/direct_sound_samples/cries/tornadus_therian.aif index ff5993e9622fde9b7b585ac01914e684fc3b6e39..a1d98062b68802050443e5f7a05fe86ca6594644 100644 GIT binary patch delta 22 dcmX@Ig0X7_BZr%RkS_y62-8Fkxs6Uwf&o(j2NVDR delta 76 zcmeBL!FXf^BZr%RkS_y6h|NR}IWbSa;1C7|1`!(uhI$}`f{hBVg5~@ieO-Zkv2e#Q X*LcSu=lFmyGZTyWAXiVXPzDA7pPLaD diff --git a/sound/direct_sound_samples/cries/torracat.aif b/sound/direct_sound_samples/cries/torracat.aif index 7b9d9bd5741b3467313d0f11210196a2e96de52e..44bb00137593f417f0c6c347febf973c3a666626 100644 GIT binary patch delta 22 ecmaF0oN>-_Mh-XsAYTTC;3*S15|a~4Hma2cTX?z{ kD*&YofHX6ZW?)ba@eDBn()>V-sy-yh*&8Ux1jJ?x036yDN&o-= diff --git a/sound/direct_sound_samples/cries/torterra.aif b/sound/direct_sound_samples/cries/torterra.aif index 3f0960d9a219d5d4c21dbf21fb2940c329ac63c1..e659181e2383b7bd840a858e12a9bc0b8f562678 100644 GIT binary patch delta 22 dcmaE~jd9&JMh-XsAYTTCXtjwPavPmEq5)bG2FU;b delta 70 zcmZ3tjq%YoMh-XsAYTTC=%|Sta$=r-!66I`3?eoR4D~<=1sfIkq9yzseO-ZkfpEt# R*LcSu=lFmyV+%`$AOJ)R4=(@! diff --git a/sound/direct_sound_samples/cries/totodile.aif b/sound/direct_sound_samples/cries/totodile.aif index d87de7d52269f53e370131e55081233b13afd9ea..98fbb528beada2881df84344e24e8b5dc3b79069 100644 GIT binary patch delta 20 bcmccRzRaD&%|FPOfkAoRL=L%)P7TTcM+*j7 delta 68 zcmZ4He#@Q1%|FPOfkFAwL=HJIPru+01_lNZ8wQ4YAcTUA3T?^~evZDbK)yh@W0-5a PV~}%vK$xMa1w#-37GMs! diff --git a/sound/direct_sound_samples/cries/toucannon.aif b/sound/direct_sound_samples/cries/toucannon.aif index e83fe24fe8f64599a1789b9eab1d25e21ceda3de..83a90bab9cdbfa8039a585462e42edfad85876d6 100644 GIT binary patch delta 22 dcmdn9oAK2yMh-XsAYTTC*rbUZavSYjVgX)L2VejI delta 106 zcmaF0i*e6xMh-XsAYTTC*ew$|_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%Xv_crl<*gY diff --git a/sound/direct_sound_samples/cries/toxapex.aif b/sound/direct_sound_samples/cries/toxapex.aif index 226a666b71a232428afd32af15b9c6912394ceb6..3369da2f70f7fece5e351508ccb9f5b60f9eecd3 100644 GIT binary patch delta 22 ecmaF0oN>-_Mh-XsAYTTC;3*S1sT3sNf-Hma2cTX?z{ lD*&YofHX6ZW?)ba@eDBn(tJRSqCO delta 70 zcmcaLjj?Y!BZr%RkS_y+ciTh`IWbSa;1C7|1`!(uhI$}`f{hAR-V%O}zOF#NK)7R= RYrJESb9_LUiKz)g5CAfG4*388 diff --git a/sound/direct_sound_samples/cries/tranquill.aif b/sound/direct_sound_samples/cries/tranquill.aif index e11795686b7d49d52bbc5c920de8a9d2695b2e22..6a4e8a7661cad861656f4e7ebeb84a2d877804b8 100644 GIT binary patch delta 26 hcmexicF&B*%|FPOfk8UV(bLUsqM9P3!A1`QX#j7j2Uh?9 delta 52 zcmca-_QOog%|FPOfkC>!(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;o3f?*<$BBTCB HJp*X~f{zV@ diff --git a/sound/direct_sound_samples/cries/trapinch.aif b/sound/direct_sound_samples/cries/trapinch.aif index 03e1b1a946218e486fb06ae977128d0b2be1eea3..cc27653fd44d28ea75595244c7f160b07ecd353c 100644 GIT binary patch delta 20 bcmeyQzE7RQ%|FPOfkAlNL=L%)PBVl7Mr#IH delta 68 zcmdm|{z;v~%|FPOfkF7yL=HJIPru+01_lNZ8wQ4YAcTUA3iE^|{2YBEERMWLW)w$Qu7k?N)$G#xx`v| nx)>_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%X21XdmfaVT diff --git a/sound/direct_sound_samples/cries/tropius.aif b/sound/direct_sound_samples/cries/tropius.aif index 17359795eaa457469b12a634b04a9d37fe3ade28..81046fe1cfdbf868049e3dfe0ac0a57238ddf050 100644 GIT binary patch delta 20 bcmcaszo?$W%|FPOfx&*(L=L%)PBr!bPeTUr delta 68 zcmZ2ff32Rw%|FPOfx-UVL=HJIPru+01_lNZ8wQ4YAcTUA3QhJBevZDbK)yh@W0-5a PV~}%vK$x+qIfEepIMxp_ diff --git a/sound/direct_sound_samples/cries/trubbish.aif b/sound/direct_sound_samples/cries/trubbish.aif index 7bde68d8ca7490d83df9194dc02bf683bc2af829..09c1aac572b83ecf145e28a144b6abb3c50b9e4b 100644 GIT binary patch delta 26 hcmeCl`;^P$<{#wCz+m>u(bLUsqM9P(k&PZl%m9AQ319#K delta 52 zcmeyA+mol}<{#wCz+lee=;`L>=jiLoz`!6B?il78?-=A9AK)AA6mM#7%rKEhk@4_G Hy(4A-e+Uka diff --git a/sound/direct_sound_samples/cries/trumbeak.aif b/sound/direct_sound_samples/cries/trumbeak.aif index 73fdb3f838ed03863cf790e279686a9197e42218..c6e477c4017a84b45c6659a3f3926483e2736a74 100644 GIT binary patch delta 22 dcmdng#rUL?k;BbD$d`e^<<3M7xs5jaTmV^82d)4B delta 102 zcmaFT$+)SDk;BbD$d`e^Rcj)LoS2`ZuPXxs1E0CEk%F#5NKt8SQfgxMMzwt|7M?D~ k3P33XAk7S<85q<;JVT6tG(Qldst*Zr_67=qlo=WU0MpbJu>b%7 diff --git a/sound/direct_sound_samples/cries/tsareena.aif b/sound/direct_sound_samples/cries/tsareena.aif index 92d7ad1b93e034dba06b1f6ff5e7912c964029bd..bff64b0f3f7bdb941d7dc9c36ea6ac8514097c6a 100644 GIT binary patch delta 22 dcmZ3okn!3AMh-XsAYTTC0KbVGavN<70svKk2D|_O delta 102 zcmcb%fN{w}Mh-XsAYTTCfH@O6w!~Sa`Y^ kD*&YofHX6ZW?)bY@eDBn()>V-sy-yh*&8SbQf6Wd0Oo}ix&QzG diff --git a/sound/direct_sound_samples/cries/turtonator.aif b/sound/direct_sound_samples/cries/turtonator.aif index a15a2bb130478d089f7d3d8f338274e9389af663..b5d27b630f43bbf86512e9422f076826072dc3f9 100644 GIT binary patch delta 22 dcmeA<&$#OxBZr%RkS_y6y3s@qxs7%r=>S+W2HXGu delta 106 zcmdmWjjDWNt5Tok|33B!Z3WF4yngIZf92gP+ diff --git a/sound/direct_sound_samples/cries/turtwig.aif b/sound/direct_sound_samples/cries/turtwig.aif index 3de56621bb09b9a450bc0d344ed35202588b2451..a2e4ad60b378d47ee628428ba838d8ad214984fb 100644 GIT binary patch delta 20 bcmexne#o4|%|FPOfkArLL=L%)PIIIINxKG_ delta 68 zcmX?P{>_}j%|FPOfkFD+L=HJIPru+01_lNZ8wQ4YAcTUA3X7yA{2YBcd;kCd diff --git a/sound/direct_sound_samples/cries/tynamo.aif b/sound/direct_sound_samples/cries/tynamo.aif index 647040c17aca4324a35a4fd7ad47a3018ff608b7..ca9e2962fcb86d42c7d268a158458ff7e2319182 100644 GIT binary patch delta 21 ccmZ3LGa-k^%|FPOfx(Q!(bLUsqZ*4D07udVxBvhE delta 47 zcmbP`vnof;%|FPOfx%44(bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P`gkd8Oix~hh CiVOSz diff --git a/sound/direct_sound_samples/cries/type_null.aif b/sound/direct_sound_samples/cries/type_null.aif index e1d46c83e44cbf5b1d1921764d2079fe6b21d2d1..6b6be2dcfb15e38a11f7b4c2b7bd0ae6bb2a70da 100644 GIT binary patch delta 22 ecmbO?h4IW}Mh-XsAYTRs&m$8#znQ`6}Mh-XsAYTRsFR_UnauR-yzOD=m3_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%YQz8l6JQnb diff --git a/sound/direct_sound_samples/cries/typhlosion.aif b/sound/direct_sound_samples/cries/typhlosion.aif index c0f4f7de3c75a3edcade0ca20d174e6d6cc8eaa4..cc993c8052231c46c27ec97dd41b950fad2df1a4 100644 GIT binary patch delta 22 ecmbO=h4I;BMh-XsAYTRs&wCR&Mh-XsAYTRsFQJJXa$=r-!66I`3?eoR4D~<=1sfHPc}n;>`nm%70^yEf RuJMjR&hY_ZhNk8W762?J4+a1L diff --git a/sound/direct_sound_samples/cries/tyranitar.aif b/sound/direct_sound_samples/cries/tyranitar.aif index 54fcd8796390dd7e379babcf0f350f44ebfddc06..3572da76678cac6b929532cba7c95b88ed878280 100644 GIT binary patch delta 20 bcmZ1!{Vs~b%|FPOfk8KIB8S{YCl6f!NUjDn delta 68 zcmaDCwJ4gy%|FPOfkAiHL=HJIPru+01_lNZ8wQ4YAcTUA3Vym0evZDbK)yh@W0-5a PV~}%vK$ww<1%m|u78(wE diff --git a/sound/direct_sound_samples/cries/tyrantrum.aif b/sound/direct_sound_samples/cries/tyrantrum.aif index 7bb4825a0f8ed39215af034f6104afc5ba277217..88e9506129d04bf15e01253d0fefcf2758b8d197 100644 GIT binary patch delta 22 ecmaDfi*dp%Mh-XsAYTRsUyg|!avSYl`2YY@&j%I& delta 106 zcmbO*i}BGcMh-XsAYTRs->8WkauR-yzOD=m3<74B<_fwBA(cgmc_l@qxe6QAUinyg nx)>_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%V!;3aaVZy< diff --git a/sound/direct_sound_samples/cries/tyrogue.aif b/sound/direct_sound_samples/cries/tyrogue.aif index 5cbb4792f0c0533c9d589a5c309f71cadc16f6da..7caea851b3f9c98ec0a700d575e3f27df043d881 100644 GIT binary patch delta 20 bcmZ2v|IUuX%|FPOfk8fPB8S{YCl7f5L^1{7 delta 68 zcmaE7x5%Eu%|FPOfkA%OL=HJIPru+01_lNZ8wQ4YAcTUA3V!kuevZDbK)yh@W0-5a PV~}%vK$wxS8G{J`0}>7& diff --git a/sound/direct_sound_samples/cries/tyrunt.aif b/sound/direct_sound_samples/cries/tyrunt.aif index 5f8599dbfbfc86ec9d609af5bdbe57c9dd153b4b..e69373600537d7863528e64f8c6ceaa59c2d2594 100644 GIT binary patch delta 20 bcmdnu^vaRL%|FPOfkENXL=L%)R!0;7N{9yL delta 96 zcmaFmxW$RX%|FPOfk9DcB8QxapQEoU0|Nt(nWdS6u0lvzAYTTCNIpkTH#bK=KYs=W27!R0{N&W);?xv{q)LV0{D_G>ij3zc L8aiyun-Bp2*GLh6 diff --git a/sound/direct_sound_samples/cries/unfezant.aif b/sound/direct_sound_samples/cries/unfezant.aif index 4a3a8a9b0714bcd07f80c78151bf9b9ab85af7ad..1fde88bf0eeba5c782d715ea0fdfa7e7d96b72a1 100644 GIT binary patch delta 26 icmewr_#lwS%|FPOfkESjqou7R{#J2 diff --git a/sound/direct_sound_samples/cries/unown.aif b/sound/direct_sound_samples/cries/unown.aif index 86a836135d469c892675730b9c2f4eb3209a1ea5..0b3edf577fb294cfab76c33820d997f2892e2c3c 100644 GIT binary patch delta 20 bcmX?QJk6NH%|FPOfkCowB8S{Yrvga;K-UG` delta 68 zcmbPce9D-^%|FPOfkE=nL=HJIPru+01_lNZ8wQ4YAcTUA3T2WKevZDbK)yh@W0-5a PV~}%vK$ww%A%h73`tc4F diff --git a/sound/direct_sound_samples/cries/ursaluna.aif b/sound/direct_sound_samples/cries/ursaluna.aif index f2e96997f135fa273679c399387f950c012f898a..7ce14c630e5bc3bc401b9b2fe8a589396f7002cd 100644 GIT binary patch delta 12 TcmeD1=9uQfdc| delta 68 zcmexVysU)7%|FPOfx${{B8Qxqr(bXg0|SGI4Ff|x5JJI5g-ezaevZDbK)yh@W0-5a PV~}%vK$wxCIfEep8|e

?2GRfk delta 70 zcmcb%j?HK4-x0Q diff --git a/sound/direct_sound_samples/cries/vanillite.aif b/sound/direct_sound_samples/cries/vanillite.aif index e982d31bee80c5e9e4c369acb9de5a55952999ce..03d25f96154e66941e1b53ba3dea418ef1caf3c7 100644 GIT binary patch delta 21 ccmbQ{`NxCD%|FPOfkCCj(bLUsqgsIq08GpVeEzaGevZDbK)yh@W0-5a PV~}%vK$xMi34-7ae^)*$3(+BlNUI%ZsuoHcLe}oya$y4 delta 22 ecmdni!?>-7ae^)*`$WS#lNUI%ZsuoHcLe}ouLqO> diff --git a/sound/direct_sound_samples/cries/venipede.aif b/sound/direct_sound_samples/cries/venipede.aif index 4ccde9b7687456b7f58cb93efae3995453f99d15..d1c1e04e7badb40803fe704945dfb90a3c34f8c1 100644 GIT binary patch delta 21 ccmexndB>8+%|FPOfkEbqqoXP5=M^ delta 47 zcmca(`OQ+z%|FPOfkEb-qoi%|FPOfk9qwB8S{UCwTxnPX#Xk delta 68 zcmZ2xcgv2$%|FPOfk8fKB8Qxqr(bXg0|SGI4Ff|x5JJI51vYsJKSy6zAYUNdG0ZjI PF~~VSAk4tTlEDxF=DH1i diff --git a/sound/direct_sound_samples/cries/venonat.aif b/sound/direct_sound_samples/cries/venonat.aif index f490a4445b81c1bb0ebd3a8cc57a087799ce8c55..5bf36808c41794516c9e166972b90e61182cc6f6 100644 GIT binary patch delta 19 acmca*v&@FW%|FPOfk94gB8S{UCpiE+0tG1m delta 68 zcmZ2xbIXRq%|FPOfk7^4B8Qxqr(bXg0|SGI4Ff|x5JJI51vWVeKSy6zAYUNdG0ZjI PF~~VSAk4tTg24~~N6N6{%|FPOfx+C*(bLUsqM9P3#zqefa{zg<2iE`q delta 52 zcmcbX_aRTs%|FPOfx$e((bLV%&(YVFfq_9N+%e2G-Z98IKEOBJDc;P~oM9r5BBT07 HJq>dJn2`<# diff --git a/sound/direct_sound_samples/cries/victreebel.aif b/sound/direct_sound_samples/cries/victreebel.aif index d16996bb8681fb74a823a60976bb5404a61ca90c..62bb048d4c70e0539b53de7d998b7ef1762ccd60 100644 GIT binary patch delta 20 bcmdny-Q>;T<{#wCz@S<+kwb2yQ;aGAK<@?B delta 68 zcmZqj-sa8W<{#wCz@WNrB8Qxqr(bXg0|SGI4Ff|x5JJI5g(Ou8KSy6zAYUNdG0ZjI PF~~VSAk4trkii51`cn=O diff --git a/sound/direct_sound_samples/cries/vigoroth.aif b/sound/direct_sound_samples/cries/vigoroth.aif index 4f6e00a1372a7d3313b00a3115df4f234be868cb..8e3560ab1dfc290dd9ba6a501326bb87669b96d7 100644 GIT binary patch delta 20 bcmbPb@ywjV%|FPOfkFD-L=L%)P6wm`Mvexm delta 68 zcmaE6KFfl`%|FPOfk8%SB8Qxqr(bXg0|SGI4Ff|x5JJI5g=5kZevZDbK)yh@W0-5a PV~}%vK$ww*1%ojF=_L*D diff --git a/sound/direct_sound_samples/cries/vikavolt.aif b/sound/direct_sound_samples/cries/vikavolt.aif index e92d6fdd41a30ff02503ef7b27c0aca6369c9565..badd95c3c51a5849bce471d27443f1d57893c986 100644 GIT binary patch delta 22 ecmbQXgYm?6Mh-XsAYTTC=mQfuV-sy-yh*&8SbQf6oY0Oso!2LJ#7 diff --git a/sound/direct_sound_samples/cries/vileplume.aif b/sound/direct_sound_samples/cries/vileplume.aif index f182cf99da42a984acc9d8f48af740fc2478f5c9..e190e21511721e1b1bd541cac99b7f639561e475 100644 GIT binary patch delta 20 bcmeyAyf2x<%|FPOfx&RwL=L%)PBRPvPzMJM delta 68 zcmdm&{3)5k%|FPOfx+ diff --git a/sound/direct_sound_samples/cries/vivillon.aif b/sound/direct_sound_samples/cries/vivillon.aif index 303834d8a1c41c9b4969c8712ffe0891ff5bdd99..bf7474dd9544004d51018a089403634a37e5dce0 100644 GIT binary patch delta 22 ecmZ3tj`6`-Mh-XsAYTTCup1LOV-sy-yh*&8SbQf6ol0RA@?P5=M^ diff --git a/sound/direct_sound_samples/cries/volbeat.aif b/sound/direct_sound_samples/cries/volbeat.aif index 90e5e66ca04d391c8229e65bf8058c6e05a9fced..8d73e2c21db46f68b00fd43842fdbae3a12fb0ce 100644 GIT binary patch delta 20 bcmZ3c`$>nx%|FPOfk7;5B8S{YCm%5YLJ$SI delta 68 zcmeyQvrL!6%|FPOfkABEL=HJIPru+01_lNZ8wQ4YAcTUA3PEBLevZDbK)yh@W0-5a PV~}%vK$x+iF@qrh`XvqW diff --git a/sound/direct_sound_samples/cries/volcanion.aif b/sound/direct_sound_samples/cries/volcanion.aif index 3d4ecd09a8ad9f54f37c71ee8388d4239b808315..72c78807a6ee646819adc9203d0ea32afc821059 100644 GIT binary patch delta 22 ecmdnAj`6`-Mh-XsAYTTCup1LO_}C5?bIGmvIrP!I78F#^&8K#Zm%B*@ttC<;<%Zo~ipW33k* diff --git a/sound/direct_sound_samples/cries/volcarona.aif b/sound/direct_sound_samples/cries/volcarona.aif index 8d34404dc02bebb88a3f155f8162d2ce5bea791b..f62e6e9e38a10ef9efc1302b75dd1fd1b2b9b86c 100644 GIT binary patch delta 22 ecmeydneotOMh-XsAYTTC$XydT7({Fs80vu#3N|V%ij?wm^mPUDg~A=f TT;m;soZ|z0!=2*IOiUO6p;-|W diff --git a/sound/direct_sound_samples/cries/voltorb.aif b/sound/direct_sound_samples/cries/voltorb.aif index 54a3597708d0bc2841de5ea4bf9f5a4a6b1f7a2d..832429cbf2cbe5f889f8fbfb500a45b0a5c91099 100644 GIT binary patch delta 20 bcmcbVFfW0_%|FPOfx$p*B8S{Yryu$NMvw-C delta 68 zcmbQ2a4CVq%|FPOfx*CQB8Qxqr(bXg0|SGI4Ff|x5JJI5g@5`IevZDbK)yh@W0-5a PV~}%vK$xL{0fPwu5zh{} diff --git a/sound/direct_sound_samples/cries/vullaby.aif b/sound/direct_sound_samples/cries/vullaby.aif index 97df0d14f9e60632e7fe27c7a42c896f0dbe3c36..49d0648e9ff8bd5bc7e2eeb3365e57b4e91b2abd 100644 GIT binary patch delta 23 ecmdlpiE+^+Mjki+AYTRsPbo)FH@A&yVx9n1)&_I{ delta 49 zcmZ29iE+;)Mm0D8AYTRsPZLK^H#a{=UsnbO2BC1rFxPm;Am{i1-*BgRGh-u$jXYwW E08Y#dxBvhE diff --git a/sound/direct_sound_samples/cries/vulpix.aif b/sound/direct_sound_samples/cries/vulpix.aif index 04a60e27ea1da1625e92e1feecdfaf84d00ae31d..32b149999e29c0fa45acd2dda81777f152f24553 100644 GIT binary patch delta 20 bcmewsb0~(x%|FPOfkDq|B8S{YCmB5eO05P7 delta 68 zcmX>U^DTzM%|FPOfk7{CB8Qxqr(bXg0|SGI4Ff|x5JJI51tmQRKSy6zAYUNdG0ZjI PF~~VSAk4tnoWU3X64DMv diff --git a/sound/direct_sound_samples/cries/wailmer.aif b/sound/direct_sound_samples/cries/wailmer.aif index e21c05c4b29972f6fc9f7795e12ee5bcfcd0cb21..8bada495e4c4d9672fa29261e7ed16bf634e357b 100644 GIT binary patch delta 20 bcmX??H!F|B%|FPOfx%p8B8S{Yr!QszNDc;` delta 68 zcmbQ0cP@{^%|FPOfx+BuB8Qxqr(bXg0|SGI4Ff|x5JJI5g diff --git a/sound/direct_sound_samples/cries/wailord.aif b/sound/direct_sound_samples/cries/wailord.aif index 40c331d40d8b379f018e380f8a09c5d3185add4c..ea0f553cf8433404861fef4717c82525257d5a23 100644 GIT binary patch delta 22 ecmcb$m~q)+Mh-XsAYTTCz7({Fs80vu#3N|XV1xoli`nm%70^yEf RuJMjR&hY_Z#zuw=CIDF*52*kE diff --git a/sound/direct_sound_samples/cries/walrein.aif b/sound/direct_sound_samples/cries/walrein.aif index 475a874ef93adcfdc69a110d37aeb9a570fc85eb..2843617fbfe035b8521587c19cd5d19db730000b 100644 GIT binary patch delta 22 dcmZ40%lNH_k;BbD$d`e^EpH-++(xGWHvm>g2J8R; delta 70 zcmey?!?>!Kk;BbD$d`e^ZP7#yIWbSa;1C7|1`!(uhI$}`f{hAcZW4ZuzOF#NK)7R= RYrJESb9_LUv6(4@2>?Tf4=w-z diff --git a/sound/direct_sound_samples/cries/wartortle.aif b/sound/direct_sound_samples/cries/wartortle.aif index aa664369d70e952b226d48fc1289aa6cd7443b0d..de2aa254805bee9028ece7591c3a28edcb6c4f26 100644 GIT binary patch delta 20 bcmdnz+~v&S<{#wCz@XSPkwb2yQ;H%0K_>;> delta 68 zcmeBj-sjBW<{#wCz@WHoB8Qxqr(bXg0|SGI4Ff|x5JJI5g)Bu0KSy6zAYUNdG0ZjI PF~~VSAk4tPg24m;`=|~X diff --git a/sound/direct_sound_samples/cries/watchog.aif b/sound/direct_sound_samples/cries/watchog.aif index a3bd8a0f7ed0051d108c229c7a3677cd72f75c6d..df08e7a2964928ebf676550574e80971445aa834 100644 GIT binary patch delta 26 hcmZ3c)1$-V<{#wCz#zur=;`J*QB9HY-bRmmq5xgG2c7@` delta 52 zcmeCtS*D}r<{#wCz#t~)=;`L>=jiLoz`!6B?il78?-=A9AK)AA6mM#5!7!0Wk@4#fZU6uP diff --git a/sound/direct_sound_samples/cries/weavile.aif b/sound/direct_sound_samples/cries/weavile.aif index 2a1ff90b56c7b1380e18baaaa65e55c03ae3517f..5bfb5019dfd7caf7355e90fc46ce9138501c0012 100644 GIT binary patch delta 20 bcmeBjy5`8?<{#wCz@Tt$B8S{Yrws}KMJNV{ delta 68 zcmccS*yY6G<{#wCz@W%9kwZ?*(=RxLfq_B9hJm3T2%%u3!Zrm7KSy6zAYUNdG0ZjI PF~~VSAk4(fkii51;z|w3 diff --git a/sound/direct_sound_samples/cries/weedle.aif b/sound/direct_sound_samples/cries/weedle.aif index 06a26f3d7676c84adf3a6f1e1e238bf4a32b4cb4..ac5b0eb76524c5cdf05b8037bb3fad919fad525f 100644 GIT binary patch delta 20 bcmca+zsR1$%|FPOfkA%OL=L%)PBroXMFR#g delta 68 zcmZ2vf6bo5%|FPOfkFPXGAo3`%|FPOfk8`XB8S{Yr!SfSL*xcf delta 68 zcmbOgaxR3!%|FPOfkDe{B8Qxqr(bXg0|SGI4Ff|x5JJI5g7({Fs80vu#3N|WuMM(KM`nm%7Lg9{K TuJMjR&hY`h;ZE_UMn(((bvF4 Cx(tN? diff --git a/sound/direct_sound_samples/cries/whiscash.aif b/sound/direct_sound_samples/cries/whiscash.aif index 9d3a28786f461686eef7798502a74e4a93ac2a17..71cd9fd00a8b3decdf23c30b469babf90e116fc1 100644 GIT binary patch delta 20 bcmdny)a1nB<{#wCz@YGJB8S{Yr#lJ&M0p0e delta 68 zcmZp2+UCUJ<{#wCz@Vr%kwZ?*(=RxLfq_B9hJm3T2%%u3!XpIlS0OyJI3u$>5lC!QyQOR8>0+z^ ilr#d;%s`rfK_kR7#0W?W0x`OdkRWGopfE_Gkr@CSP!|IL diff --git a/sound/direct_sound_samples/cries/wo_chien.aif b/sound/direct_sound_samples/cries/wo_chien.aif index fa201694ebe55d169550629f205dfb4805eec3a6..f50bd73e8d42d7e4b38c10d0aa4d0cf607bc0a3e 100644 GIT binary patch delta 14 UcmbPmhj9WB=`udrsP`xr05PEksQ>@~ delta 14 UcmbPmhj9WB=`udtsP`xr05O~fr~m)} diff --git a/sound/direct_sound_samples/cries/wobbuffet.aif b/sound/direct_sound_samples/cries/wobbuffet.aif index 2c8193908aa61edb7e572a5434e36230982c86fe..8e50da47bbf58a9a7ace9e5d80d527f0895159e0 100644 GIT binary patch delta 20 bcmdlN&=tVp<{#wCz@Wi2kwb2y(-U<7KtKir delta 68 zcmeAQ*cZUz<{#wCz@T9^kwZ?*(=RxLfq_B9hJm3T2%%u3!Yg$NKSy6zAYUNdG0ZjI PF~~VSAk4_Xh`|H^_5Th$ diff --git a/sound/direct_sound_samples/cries/woobat.aif b/sound/direct_sound_samples/cries/woobat.aif index d66f5bd157197269deec946ecb6e14f7fc11b55f..db8ae140e219ca80d1cc5fc1e29abe938ea9bf41 100644 GIT binary patch delta 21 ccmewt{v@2o%|FPOfkFF@qo0mDX~8`=P6 COb!SD diff --git a/sound/direct_sound_samples/cries/wooper.aif b/sound/direct_sound_samples/cries/wooper.aif index c2d80b32c466282feb1a9f050c62ee7ca71dabb9..d4b9ea1b4a25c58cf829b902592471925fb1a7e6 100644 GIT binary patch delta 20 bcmbOx`$&ev%|FPOfq^e-B8S{YCmTKhJb(pC delta 68 zcmaDPGfkGm%|FPOfq}1YB8Qxqr(bXg0|SGI4Ff|x5JJI51t&fUKSy6zAYUNdG0ZjI PF~~VSAk5IxguxI1;nod_ diff --git a/sound/direct_sound_samples/cries/wormadam.aif b/sound/direct_sound_samples/cries/wormadam.aif index 633aeeafc311b06de647828df6854a64c869c07a..3645108206872751c5acc774d0ceec5a61717470 100644 GIT binary patch delta 21 ccmcaLjd9sDMh-XsAYTRsZ@Gyaatocj0ZhyWIRF3v delta 70 zcmZ2Bjq%nrMh-XsAYTRs@1Thsa$=r-!66I`3?eoR4D~<=1sfIEye0e`eO-ZkfpEt# R*LcSu=lFmy6GLML696XF4ut>! diff --git a/sound/direct_sound_samples/cries/wurmple.aif b/sound/direct_sound_samples/cries/wurmple.aif index e75a6e237fb32aa20b93f82d9ed4c05ef0fd6b1a..1754d7e2b7e27cd61c64f761ddd6cebc67d001d5 100644 GIT binary patch delta 20 bcmcbnv`C4=%|FPOfk9AeB8S{Yr#}J!Jz@pg delta 68 zcmZ3abWMrF%|FPOfkDu3B8Qxqr(bXg0|SGI4Ff|x5JJI51tviWKSy6zAYUNdG0ZjI PF~~VSAk4_jl)(f5&}9uA diff --git a/sound/direct_sound_samples/cries/wynaut.aif b/sound/direct_sound_samples/cries/wynaut.aif index f7563a8ebb0ef105870c22745523642b19e0d6e1..ddd289f9a48558b9e6a736ba9570f76f77eccc34 100644 GIT binary patch delta 20 bcmZ2y_REyR%|FPOfkEoiL=L%)PFJJ=N&E)% delta 68 zcmexmy3UNl%|FPOfk9erB8Qxqr(bXg0|SGI4Ff|x5JJI5g|9{2YB-_Mh-XsAYTTC;3*S1S+W2HXGu delta 106 zcmdmWj& diff --git a/sound/direct_sound_samples/cries/yamask.aif b/sound/direct_sound_samples/cries/yamask.aif index 8d44817f7b1a7bd3fd8338a544562c82ced47d85..51f07034b86052c25e6c5c5571c5bc91fbc33a80 100644 GIT binary patch delta 20 bcmcbXJtv#P%|FPOfx&djL=L%)MrEb|OE(6S delta 80 zcmbP}eJz{A%|FPOfx-0LL=HI~KSy6z1_lNeQ!^uljcR44dY&%E3P1rhAk7S<85pEP YJVT6tGz$;|RfPmOdjnY@IWtQJ0L-BdD*ylh diff --git a/sound/direct_sound_samples/cries/yanma.aif b/sound/direct_sound_samples/cries/yanma.aif index 5f373734a47cbc67f8dd7a2f2a27a88cc3dde8c6..3d8354bb59211769519b79a0a3d490abdf27e874 100644 GIT binary patch delta 20 bcmccQG|!2{%|FPOfk9DhB8S{YrymLcLBa+q delta 68 zcmbQ|bjgXs%|FPOfkDx0B8Qxqr(bXg0|SGI4Ff|x5JJI5g?|bXevZDbK)yh@W0-5a PV~}%vK$xMWF@p&J{g@7G diff --git a/sound/direct_sound_samples/cries/yanmega.aif b/sound/direct_sound_samples/cries/yanmega.aif index daf0c0d9f0edc458506417536b1e1b39f2b1c0db..6f3a3eb2dd9381483e1d542fdc4cc360ac3d536a 100644 GIT binary patch delta 22 ecmdnAiSge?Mh-XsAYTTCh;I`)S*N2G#%o delta 102 zcmdmWjY008266;l8J diff --git a/sound/direct_sound_samples/cries/zacian_crowned_sword.aif b/sound/direct_sound_samples/cries/zacian_crowned_sword.aif index 5e47f9275b543f95dc9643f6d0d369cad841315f..597c5ddd2661b00bfcf8d7a7c648548a3edae32e 100644 GIT binary patch delta 14 VcmaFyh4IA~#tFKNRvY!KssK0E21Wn? delta 14 VcmaFyh4IA~#tFKNmK*h~ssK0921Nh> diff --git a/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif b/sound/direct_sound_samples/cries/zamazenta_crowned_shield.aif index 1e7eae771ba5c13988f21ba8d34ba919dc1c5b12..05d170baba4af8493eb10d5b8d0ed3466972af3a 100644 GIT binary patch delta 14 UcmbR6jBx@G=`udrsQ0J{05XgQ!TcFNqnew4kS_y+mx!aMo134buPXxsgHX6*m}|UakaK*1Z@5#usi7&uMxJk; E06``VJpcdz diff --git a/sound/direct_sound_samples/cries/zekrom.aif b/sound/direct_sound_samples/cries/zekrom.aif index e3fc0cc74b2ef7b68b7f822d4b1834da734b2c86..dd74f80911099d40f582ca6de722c624e8f0e21e 100644 GIT binary patch delta 22 ecmZ3ngYnaLMh-XsAYTTC=vNat diff --git a/sound/direct_sound_samples/cries/zigzagoon.aif b/sound/direct_sound_samples/cries/zigzagoon.aif index c477208d13ff310dcdf4f6df107af4dd26755f5e..8f7b32f8189a9854f3f4bea380cc383d6cd73a0a 100644 GIT binary patch delta 20 bcmdm_`%j0%%|FPOfkCWnB8S{YrwB0sL{J6l delta 68 zcmeyTvq_i3%|FPOfkAB5L=HJIPru+01_lNZ8wQ4YAcTUA3UOi*evZDbK)yh@W0-5a PV~}%vK$wx4F@rGx1aS^1 diff --git a/sound/direct_sound_samples/cries/zoroark.aif b/sound/direct_sound_samples/cries/zoroark.aif index 7cd45de062c1a6d78269ed1244cf3d1730d64a27..91e7ab0ce97feb3fdd1827e38144f78a92ca7827 100644 GIT binary patch delta 23 ecmdlqfpNwJMjki+AYTRs4*^F{H@A&yJRSg3T?R$~ delta 49 zcmbO+fpOCWMm0D8AYTRs4=qPeH#a{=UsnbO2BC1rFxPm;Am{i1-*BgRQ)2^$jXXRa E07$V6hX4Qo diff --git a/sound/direct_sound_samples/cries/zorua.aif b/sound/direct_sound_samples/cries/zorua.aif index 039955ac19d867f5ca83ab5da421c762ef87c615..674681f5bc46114d457b51d81ffba085154e5df3 100644 GIT binary patch delta 32 ocmX@&yvmu!%|FPOfkAPRqoCBsA>MaJrh LhUpupiYfvCuX+zq diff --git a/sound/direct_sound_samples/cries/zubat.aif b/sound/direct_sound_samples/cries/zubat.aif index 4b2d1a1cc95d56eebafd227aaca15508a6b4845e..9ba4d364891c4313cbc2541862815d350a83b3cc 100644 GIT binary patch delta 20 bcmez5z0aG&%|FPOfkAcKL=L%)PBT;iOfLq- delta 68 zcmdnz{mGld%|FPOfkE}vL=HJIPru+01_lNZ8wQ4YAcTUA3iDJY{2YB0a};{0RR91 delta 113 zcmexUf31O$!_7a)mw~~-Zz6}BjGv>gD+2?Ah`FJKqk^tNRAqW%QA($^ p_I92w#tJ|MW Date: Sun, 4 Aug 2024 12:27:41 -0400 Subject: [PATCH 073/544] fix ObjectMovingOnRockStairs with follower with merrps system --- src/field_player_avatar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 0b9ec8aa24..3c2b65a3b2 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -2499,7 +2499,7 @@ bool8 ObjectMovingOnRockStairs(struct ObjectEvent *objectEvent, u8 direction) s16 y = objectEvent->currentCoords.y; // TODO followers on sideways stairs - if (IsFollowerVisible() && (objectEvent->isPlayer || objectEvent->localId == OBJ_EVENT_ID_FOLLOWER)) + if (IsFollowerVisible() && GetFollowerObject() != NULL && (objectEvent->isPlayer || objectEvent->localId == OBJ_EVENT_ID_FOLLOWER)) return FALSE; switch (direction) From 9ac8d0de25b6a1ca647bfcd4b911e375f6c2c704 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 5 Aug 2024 03:41:55 +0200 Subject: [PATCH 074/544] Optimize/get rid of unused palette vars/functions (#4841) --- include/palette.h | 30 ++-- src/battle_anim_mons.c | 6 - src/fldeff_sweetscent.c | 5 +- src/palette.c | 325 +++++----------------------------------- src/scrcmd.c | 5 +- 5 files changed, 60 insertions(+), 311 deletions(-) diff --git a/include/palette.h b/include/palette.h index 15c92cc2a7..13c06b0078 100644 --- a/include/palette.h +++ b/include/palette.h @@ -54,33 +54,31 @@ struct PaletteFadeControl extern struct PaletteFadeControl gPaletteFade; extern u32 gPlttBufferTransferPending; -extern u8 ALIGNED(4) gPaletteDecompressionBuffer[]; extern u16 ALIGNED(4) gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; extern u16 ALIGNED(4) gPlttBufferFaded[PLTT_BUFFER_SIZE]; -void LoadCompressedPalette(const u32 *src, u16 offset, u16 size); -void LoadPalette(const void *src, u16 offset, u16 size); -void FillPalette(u16 value, u16 offset, u16 size); +void LoadCompressedPalette(const u32 *src, u32 offset, u32 size); +void LoadPalette(const void *src, u32 offset, u32 size); +void FillPalette(u32 value, u32 offset, u32 size); void TransferPlttBuffer(void); -u8 UpdatePaletteFade(void); +u32 UpdatePaletteFade(void); void ResetPaletteFade(void); -bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor); -void PaletteStruct_ResetById(u16 id); +bool32 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u32 blendColor); void ResetPaletteFadeControl(void); void InvertPlttBuffer(u32 selectedPalettes); void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b); void UnfadePlttBuffer(u32 selectedPalettes); -void BeginFastPaletteFade(u8 submode); -void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters); -void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color); -void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color); +void BeginFastPaletteFade(u32 submode); +void BeginHardwarePaletteFade(u32 blendCnt, u32 delay, u32 y, u32 targetY, u32 shouldResetBlendRegisters); +void BlendPalettes(u32 selectedPalettes, u8 coeff, u32 color); +void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u32 color); void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id); -void TintPalette_GrayScale(u16 *palette, u16 count); -void TintPalette_GrayScale2(u16 *palette, u16 count); -void TintPalette_SepiaTone(u16 *palette, u16 count); -void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone); +void TintPalette_GrayScale(u16 *palette, u32 count); +void TintPalette_GrayScale2(u16 *palette, u32 count); +void TintPalette_SepiaTone(u16 *palette, u32 count); +void TintPalette_CustomTone(u16 *palette, u32 count, u16 rTone, u16 gTone, u16 bTone); -static inline void SetBackdropFromColor(u16 color) +static inline void SetBackdropFromColor(u32 color) { FillPalette(color, 0, PLTT_SIZEOF(1)); } diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 542a179d6a..73c1e99448 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -663,12 +663,6 @@ static void UNUSED TranslateSpriteToBattleAttackerPos(struct Sprite *sprite) #undef sStartY #undef sTargetY -static void UNUSED EndUnkPaletteAnim(struct Sprite *sprite) -{ - PaletteStruct_ResetById(sprite->data[5]); - DestroySpriteAndMatrix(sprite); -} - void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite) { if (sprite->affineAnimEnded) diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index a28b6fee61..a5b2740458 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -1,4 +1,5 @@ #include "global.h" +#include "decompress.h" #include "event_data.h" #include "event_scripts.h" #include "field_effect.h" @@ -52,7 +53,7 @@ void StartSweetScentFieldEffect(void) u32 palettes = ~(1 << (gSprites[GetPlayerAvatarSpriteId()].oam.paletteNum + 16) | (1 << 13) | (1 << 14) | (1 << 15)); PlaySE(SE_M_SWEET_SCENT); - CpuFastCopy(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuFastCopy(gPlttBufferUnfaded, gDecompressionBuffer, PLTT_SIZE); CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(palettes, 4, 0, 8, RGB_RED); taskId = CreateTask(TrySweetScentEncounter, 0); @@ -91,7 +92,7 @@ static void FailSweetScentEncounter(u8 taskId) { if (!gPaletteFade.active) { - CpuFastCopy(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); + CpuFastCopy(gDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); SetWeatherPalStateIdle(); ScriptContext_SetupScript(EventScript_FailSweetScent); DestroyTask(taskId); diff --git a/src/palette.c b/src/palette.c index fccff062a8..2526479ca8 100644 --- a/src/palette.c +++ b/src/palette.c @@ -13,62 +13,20 @@ enum HARDWARE_FADE, }; -// These are structs for some unused palette system. -// The full functionality of this system is unknown. - -#define NUM_PALETTE_STRUCTS 16 - -struct PaletteStructTemplate -{ - u16 id; - u16 *src; - bool16 pst_field_8_0:1; - u16 unused:9; - u16 size:5; - u8 time1; - u8 srcCount:5; - u8 state:3; - u8 time2; -}; - -struct PaletteStruct -{ - const struct PaletteStructTemplate *template; - bool32 active:1; - bool32 flag:1; - u32 baseDestOffset:9; - u32 destOffset:10; - u32 srcIndex:7; - u8 countdown1; - u8 countdown2; -}; - -static void PaletteStruct_Copy(struct PaletteStruct *, u32 *); -static void PaletteStruct_Blend(struct PaletteStruct *, u32 *); -static void PaletteStruct_TryEnd(struct PaletteStruct *); -static void PaletteStruct_Reset(u8); -static u8 PaletteStruct_GetPalNum(u16); -static u8 UpdateNormalPaletteFade(void); -static void BeginFastPaletteFadeInternal(u8); -static u8 UpdateFastPaletteFade(void); -static u8 UpdateHardwarePaletteFade(void); +static u32 UpdateNormalPaletteFade(void); +static void BeginFastPaletteFadeInternal(u32); +static u32 UpdateFastPaletteFade(void); +static u32 UpdateHardwarePaletteFade(void); static void UpdateBlendRegisters(void); -static bool8 IsSoftwarePaletteFadeFinishing(void); +static bool32 IsSoftwarePaletteFadeFinishing(void); static void Task_BlendPalettesGradually(u8 taskId); // palette buffers require alignment with agbcc because // unaligned word reads are issued in BlendPalette otherwise ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; -static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0}; EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; -EWRAM_DATA u8 ALIGNED(2) gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; - -static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { - .id = 0xFFFF, - .state = 1 -}; static const u8 sRoundedDownGrayscaleMap[] = { 0, 0, 0, 0, 0, @@ -80,20 +38,20 @@ static const u8 sRoundedDownGrayscaleMap[] = { 31, 31 }; -void LoadCompressedPalette(const u32 *src, u16 offset, u16 size) +void LoadCompressedPalette(const u32 *src, u32 offset, u32 size) { - LZDecompressWram(src, gPaletteDecompressionBuffer); - CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferUnfaded[offset], size); - CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferFaded[offset], size); + LZDecompressWram(src, gDecompressionBuffer); + CpuCopy16(gDecompressionBuffer, &gPlttBufferUnfaded[offset], size); + CpuCopy16(gDecompressionBuffer, &gPlttBufferFaded[offset], size); } -void LoadPalette(const void *src, u16 offset, u16 size) +void LoadPalette(const void *src, u32 offset, u32 size) { CpuCopy16(src, &gPlttBufferUnfaded[offset], size); CpuCopy16(src, &gPlttBufferFaded[offset], size); } -void FillPalette(u16 value, u16 offset, u16 size) +void FillPalette(u32 value, u32 offset, u32 size) { CpuFill16(value, &gPlttBufferUnfaded[offset], size); CpuFill16(value, &gPlttBufferFaded[offset], size); @@ -112,10 +70,9 @@ void TransferPlttBuffer(void) } } -u8 UpdatePaletteFade(void) +u32 UpdatePaletteFade(void) { - u8 result; - u8 dummy = 0; + u32 result; if (sPlttBufferTransferPending) return PALETTE_FADE_STATUS_LOADING; @@ -127,37 +84,19 @@ u8 UpdatePaletteFade(void) else result = UpdateHardwarePaletteFade(); - sPlttBufferTransferPending = gPaletteFade.multipurpose1 | dummy; + sPlttBufferTransferPending = gPaletteFade.multipurpose1; return result; } void ResetPaletteFade(void) { - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - PaletteStruct_Reset(i); - ResetPaletteFadeControl(); } -static void ReadPlttIntoBuffers(void) -{ - u16 i; - u16 *pltt = (u16 *)PLTT; - - for (i = 0; i < PLTT_BUFFER_SIZE; i++) - { - gPlttBufferUnfaded[i] = pltt[i]; - gPlttBufferFaded[i] = pltt[i]; - } -} - -bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor) +bool32 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u32 blendColor) { u8 temp; - u16 color = blendColor; if (gPaletteFade.active) { @@ -178,7 +117,7 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe gPaletteFade_delay = delay; gPaletteFade.y = startY; gPaletteFade.targetY = targetY; - gPaletteFade.blendColor = color; + gPaletteFade.blendColor = blendColor; gPaletteFade.active = TRUE; gPaletteFade.mode = NORMAL_FADE; @@ -200,165 +139,6 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe } } -static bool8 UNUSED BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor) -{ - ReadPlttIntoBuffers(); - return BeginNormalPaletteFade(selectedPalettes, delay, startY, targetY, blendColor); -} - -static void UNUSED PaletteStruct_Run(u8 a1, u32 *unkFlags) -{ - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - { - struct PaletteStruct *palstruct = &sPaletteStructs[i]; - if (palstruct->active) - { - if (palstruct->template->pst_field_8_0 == a1) - { - if (palstruct->srcIndex == palstruct->template->srcCount) - { - PaletteStruct_TryEnd(palstruct); - if (!palstruct->active) - continue; - } - if (palstruct->countdown1 == 0) - PaletteStruct_Copy(palstruct, unkFlags); - else - palstruct->countdown1--; - - PaletteStruct_Blend(palstruct, unkFlags); - } - } - } -} - -static void PaletteStruct_Copy(struct PaletteStruct *palStruct, u32 *unkFlags) -{ - s32 srcIndex; - s32 srcCount; - u8 i = 0; - u16 srcOffset = palStruct->srcIndex * palStruct->template->size; - - if (!palStruct->template->pst_field_8_0) - { - while (i < palStruct->template->size) - { - gPlttBufferUnfaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - i++; - palStruct->destOffset++; - srcOffset++; - } - } - else - { - while (i < palStruct->template->size) - { - gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - i++; - palStruct->destOffset++; - srcOffset++; - } - } - - palStruct->destOffset = palStruct->baseDestOffset; - palStruct->countdown1 = palStruct->template->time1; - palStruct->srcIndex++; - - srcIndex = palStruct->srcIndex; - srcCount = palStruct->template->srcCount; - - if (srcIndex >= srcCount) - { - if (palStruct->countdown2) - palStruct->countdown2--; - palStruct->srcIndex = 0; - } - - *unkFlags |= 1 << (palStruct->baseDestOffset >> 4); -} - -static void PaletteStruct_Blend(struct PaletteStruct *palStruct, u32 *unkFlags) -{ - if (gPaletteFade.active && ((1 << (palStruct->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) - { - if (!palStruct->template->pst_field_8_0) - { - if (gPaletteFade.delayCounter != gPaletteFade_delay) - { - BlendPalette( - palStruct->baseDestOffset, - palStruct->template->size, - gPaletteFade.y, - gPaletteFade.blendColor); - } - } - else - { - if (!gPaletteFade.delayCounter) - { - if (palStruct->countdown1 != palStruct->template->time1) - { - u32 srcOffset = palStruct->srcIndex * palStruct->template->size; - u8 i; - - for (i = 0; i < palStruct->template->size; i++) - gPlttBufferFaded[palStruct->baseDestOffset + i] = palStruct->template->src[srcOffset + i]; - } - } - } - } -} - -static void PaletteStruct_TryEnd(struct PaletteStruct *pal) -{ - if (pal->countdown2 == 0) - { - s32 state = pal->template->state; - - if (state == 0) - { - pal->srcIndex = 0; - pal->countdown1 = pal->template->time1; - pal->countdown2 = pal->template->time2; - pal->destOffset = pal->baseDestOffset; - } - else - { - if (state < 0) - return; - if (state > 2) - return; - PaletteStruct_ResetById(pal->template->id); - } - } - else - { - pal->countdown2--; - } -} - -void PaletteStruct_ResetById(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - PaletteStruct_Reset(paletteNum); -} - -static void PaletteStruct_Reset(u8 paletteNum) -{ - sPaletteStructs[paletteNum].template = &sDummyPaletteStructTemplate; - sPaletteStructs[paletteNum].active = FALSE; - sPaletteStructs[paletteNum].baseDestOffset = 0; - sPaletteStructs[paletteNum].destOffset = 0; - sPaletteStructs[paletteNum].srcIndex = 0; - sPaletteStructs[paletteNum].flag = 0; - sPaletteStructs[paletteNum].countdown1 = 0; - sPaletteStructs[paletteNum].countdown2 = 0; -} - void ResetPaletteFadeControl(void) { gPaletteFade.multipurpose1 = 0; @@ -379,32 +159,7 @@ void ResetPaletteFadeControl(void) gPaletteFade.deltaY = 2; } -static void UNUSED PaletteStruct_SetUnusedFlag(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - sPaletteStructs[paletteNum].flag = TRUE; -} - -static void UNUSED PaletteStruct_ClearUnusedFlag(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - sPaletteStructs[paletteNum].flag = FALSE; -} - -static u8 PaletteStruct_GetPalNum(u16 id) -{ - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - if (sPaletteStructs[i].template->id == id) - return i; - - return NUM_PALETTE_STRUCTS; -} - -static u8 UpdateNormalPaletteFade(void) +static u32 UpdateNormalPaletteFade(void) { u16 paletteOffset; u16 selectedPalettes; @@ -498,7 +253,7 @@ void InvertPlttBuffer(u32 selectedPalettes) { if (selectedPalettes & 1) { - u8 i; + u32 i; for (i = 0; i < 16; i++) gPlttBufferFaded[paletteOffset + i] = ~gPlttBufferFaded[paletteOffset + i]; } @@ -515,7 +270,7 @@ void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b) { if (selectedPalettes & 1) { - u8 i; + u32 i; for (i = 0; i < 16; i++) { struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; @@ -546,13 +301,13 @@ void UnfadePlttBuffer(u32 selectedPalettes) } } -void BeginFastPaletteFade(u8 submode) +void BeginFastPaletteFade(u32 submode) { gPaletteFade.deltaY = 2; BeginFastPaletteFadeInternal(submode); } -static void BeginFastPaletteFadeInternal(u8 submode) +static void BeginFastPaletteFadeInternal(u32 submode) { gPaletteFade.y = 31; gPaletteFade_submode = submode & 0x3F; @@ -568,9 +323,9 @@ static void BeginFastPaletteFadeInternal(u8 submode) UpdatePaletteFade(); } -static u8 UpdateFastPaletteFade(void) +static u32 UpdateFastPaletteFade(void) { - u16 i; + u32 i; u16 paletteOffsetStart; u16 paletteOffsetEnd; s8 r0; @@ -726,7 +481,7 @@ static u8 UpdateFastPaletteFade(void) return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; } -void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters) +void BeginHardwarePaletteFade(u32 blendCnt, u32 delay, u32 y, u32 targetY, u32 shouldResetBlendRegisters) { gPaletteFade_blendCnt = blendCnt; gPaletteFade.delayCounter = delay; @@ -744,7 +499,7 @@ void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 should gPaletteFade.yDec = 1; } -static u8 UpdateHardwarePaletteFade(void) +static u32 UpdateHardwarePaletteFade(void) { if (!gPaletteFade.active) return PALETTE_FADE_STATUS_DONE; @@ -805,7 +560,7 @@ static void UpdateBlendRegisters(void) } } -static bool8 IsSoftwarePaletteFadeFinishing(void) +static bool32 IsSoftwarePaletteFadeFinishing(void) { if (gPaletteFade.softwareFadeFinishing) { @@ -828,7 +583,7 @@ static bool8 IsSoftwarePaletteFadeFinishing(void) } } -void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) +void BlendPalettes(u32 selectedPalettes, u8 coeff, u32 color) { u16 paletteOffset; @@ -840,7 +595,7 @@ void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) } } -void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) +void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u32 color) { void *src = gPlttBufferUnfaded; void *dest = gPlttBufferFaded; @@ -848,10 +603,10 @@ void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) BlendPalettes(selectedPalettes, coeff, color); } -void TintPalette_GrayScale(u16 *palette, u16 count) +void TintPalette_GrayScale(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -865,10 +620,10 @@ void TintPalette_GrayScale(u16 *palette, u16 count) } } -void TintPalette_GrayScale2(u16 *palette, u16 count) +void TintPalette_GrayScale2(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -887,10 +642,10 @@ void TintPalette_GrayScale2(u16 *palette, u16 count) } } -void TintPalette_SepiaTone(u16 *palette, u16 count) +void TintPalette_SepiaTone(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -911,10 +666,10 @@ void TintPalette_SepiaTone(u16 *palette, u16 count) } } -void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone) +void TintPalette_CustomTone(u16 *palette, u32 count, u16 rTone, u16 gTone, u16 bTone) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { diff --git a/src/scrcmd.c b/src/scrcmd.c index b642f41ede..4d391e0140 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -8,6 +8,7 @@ #include "contest_util.h" #include "contest_painting.h" #include "data.h" +#include "decompress.h" #include "decoration.h" #include "decoration_inventory.h" #include "event_data.h" @@ -656,12 +657,12 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) case FADE_TO_BLACK: case FADE_TO_WHITE: default: - CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuCopy32(gPlttBufferUnfaded, gDecompressionBuffer, PLTT_SIZE); FadeScreen(mode, 0); break; case FADE_FROM_BLACK: case FADE_FROM_WHITE: - CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); + CpuCopy32(gDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); FadeScreen(mode, 0); break; } From 12351d520dcff6cec858bab53264ed96860f0087 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 5 Aug 2024 21:54:37 +0200 Subject: [PATCH 075/544] Changes Evolution methods to Enums (#4977) * Changes Evolution methods to Enums * make U8_ENUM to include/constants/global.h * revert previous commit * Update include/constants/pokemon.h --------- Co-authored-by: Eduardo Quezada --- include/constants/pokemon.h | 133 +++++++++++++++++++----------------- include/pokemon.h | 2 +- src/pokemon.c | 2 +- 3 files changed, 73 insertions(+), 64 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 8095367c97..809fcc22d4 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -243,71 +243,80 @@ #define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80 -// Evolution types #define EVOLUTIONS_END 0xFFFF // Not an actual evolution, used to mark the end of an evolution array. #define EVO_NONE 0xFFFE // Not an actual evolution, used to generate offspring that can't evolve into the specified species, like regional forms. -#define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 -#define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 -#define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 -#define EVO_LEVEL 4 // Pokémon reaches the specified level -#define EVO_TRADE 5 // Pokémon is traded -#define EVO_TRADE_ITEM 6 // Pokémon is traded while it's holding the specified item -#define EVO_ITEM 7 // specified item is used on Pokémon -#define EVO_LEVEL_ATK_GT_DEF 8 // Pokémon reaches the specified level with attack > defense -#define EVO_LEVEL_ATK_EQ_DEF 9 // Pokémon reaches the specified level with attack = defense -#define EVO_LEVEL_ATK_LT_DEF 10 // Pokémon reaches the specified level with attack < defense -#define EVO_LEVEL_SILCOON 11 // Pokémon reaches the specified level with a Silcoon personality value -#define EVO_LEVEL_CASCOON 12 // Pokémon reaches the specified level with a Cascoon personality value -#define EVO_LEVEL_NINJASK 13 // Pokémon reaches the specified level (special value for Ninjask) -#define EVO_LEVEL_SHEDINJA 14 // Pokémon reaches the specified level (special value for Shedinja) -#define EVO_BEAUTY 15 // Pokémon levels up with beauty ≥ specified value -#define EVO_LEVEL_FEMALE 16 // Pokémon reaches the specified level, is female -#define EVO_LEVEL_MALE 17 // Pokémon reaches the specified level, is male -#define EVO_LEVEL_NIGHT 18 // Pokémon reaches the specified level, is night -#define EVO_LEVEL_DAY 19 // Pokémon reaches the specified level, is day -#define EVO_LEVEL_DUSK 20 // Pokémon reaches the specified level, is dusk (5-6 P.M) -#define EVO_ITEM_HOLD_DAY 21 // Pokémon levels up, holds specified item at day -#define EVO_ITEM_HOLD_NIGHT 22 // Pokémon levels up, holds specified item at night -#define EVO_MOVE 23 // Pokémon levels up, knows specified move -#define EVO_FRIENDSHIP_MOVE_TYPE 24 // Pokémon levels up with friendship ≥ 220, knows move with specified type -#define EVO_MAPSEC 25 // Pokémon levels up on specified mapsec -#define EVO_ITEM_MALE 26 // specified item is used on a male Pokémon -#define EVO_ITEM_FEMALE 27 // specified item is used on a female Pokémon -#define EVO_LEVEL_RAIN 28 // Pokémon reaches the specified level during rain in the overworld -#define EVO_SPECIFIC_MON_IN_PARTY 29 // Pokémon levels up with a specified Pokémon in party -#define EVO_LEVEL_DARK_TYPE_MON_IN_PARTY 30 // Pokémon reaches the specified level with a Dark Type Pokémon in party -#define EVO_TRADE_SPECIFIC_MON 31 // Pokémon is traded for a specified Pokémon -#define EVO_SPECIFIC_MAP 32 // Pokémon levels up on specified map -#define EVO_LEVEL_NATURE_AMPED 33 // Pokémon reaches the specified level, it has a Hardy, Brave, Adamant, Naughty, Docile, Impish, Lax, Hasty, Jolly, Naive, Rash, Sassy, or Quirky nature. -#define EVO_LEVEL_NATURE_LOW_KEY 34 // Pokémon reaches the specified level, it has a Lonely, Bold, Relaxed, Timid, Serious, Modest, Mild, Quiet, Bashful, Calm, Gentle, or Careful nature. -#define EVO_CRITICAL_HITS 35 // Pokémon performs specified number of critical hits in one battle -#define EVO_SCRIPT_TRIGGER_DMG 36 // Pokémon has specified HP below max, then player interacts trigger -#define EVO_DARK_SCROLL 37 // interacts with Scroll of Darkness -#define EVO_WATER_SCROLL 38 // interacts with Scroll of Waters -#define EVO_ITEM_NIGHT 39 // specified item is used on Pokémon, is night -#define EVO_ITEM_DAY 40 // specified item is used on Pokémon, is day -#define EVO_ITEM_HOLD 41 // Pokémon levels up, holds specified item -#define EVO_LEVEL_FOG 42 // Pokémon reaches the specified level during fog in the overworld -#define EVO_MOVE_TWO_SEGMENT 43 // Pokémon levels up, knows specified move, has a personality value with a modulus of 0 -#define EVO_MOVE_THREE_SEGMENT 44 // Pokémon levels up, knows specified move, has a personality value with a modulus of 1-99 -#define EVO_LEVEL_FAMILY_OF_THREE 45 // Pokémon reaches the specified level in battle with a personality value with a modulus of 0 -#define EVO_LEVEL_FAMILY_OF_FOUR 46 // Pokémon reaches the specified level in battle with a personality value with a modulus of 1-99 -#define EVO_USE_MOVE_TWENTY_TIMES 47 // Pokémon levels up after having used a move for at least 20 times -#define EVO_RECOIL_DAMAGE_MALE 48 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male -#define EVO_RECOIL_DAMAGE_FEMALE 49 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female -#define EVO_ITEM_COUNT_999 50 // Pokémon levels up after trainer has collected 999 of a specific item -#define EVO_DEFEAT_THREE_WITH_ITEM 51 // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item -#define EVO_OVERWORLD_STEPS 52 // Pokémon levels up after having taken a specific amount of steps in the overworld (or as the party lead if OW_FOLLOWERS_ENABLED is FALSE) without switching -// Evolution 'modes,' for GetEvolutionTargetSpecies -#define EVO_MODE_NORMAL 0 -#define EVO_MODE_CANT_STOP 1 -#define EVO_MODE_TRADE 2 -#define EVO_MODE_ITEM_USE 3 -#define EVO_MODE_ITEM_CHECK 4 // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve -#define EVO_MODE_BATTLE_SPECIAL 5 -#define EVO_MODE_OVERWORLD_SPECIAL 6 -#define EVO_MODE_BATTLE_ONLY 7 // This mode is only used in battles to support Tandemaus' unique requirement +#if MODERN +#define U8_ENUM : u8 +#else +#define U8_ENUM +#endif + +enum EvolutionMethods U8_ENUM { + EVO_FRIENDSHIP, // Pokémon levels up with friendship ≥ 220 + EVO_FRIENDSHIP_DAY, // Pokémon levels up during the day with friendship ≥ 220 + EVO_FRIENDSHIP_NIGHT, // Pokémon levels up at night with friendship ≥ 220 + EVO_LEVEL, // Pokémon reaches the specified level + EVO_TRADE, // Pokémon is traded + EVO_TRADE_ITEM, // Pokémon is traded while it's holding the specified item + EVO_ITEM, // specified item is used on Pokémon + EVO_LEVEL_ATK_GT_DEF, // Pokémon reaches the specified level with attack > defense + EVO_LEVEL_ATK_EQ_DEF, // Pokémon reaches the specified level with attack = defense + EVO_LEVEL_ATK_LT_DEF, // Pokémon reaches the specified level with attack < defense + EVO_LEVEL_SILCOON, // Pokémon reaches the specified level with a Silcoon personality value + EVO_LEVEL_CASCOON, // Pokémon reaches the specified level with a Cascoon personality value + EVO_LEVEL_NINJASK, // Pokémon reaches the specified level (special value for Ninjask) + EVO_LEVEL_SHEDINJA, // Pokémon reaches the specified level (special value for Shedinja) + EVO_BEAUTY, // Pokémon levels up with beauty ≥ specified value + EVO_LEVEL_FEMALE, // Pokémon reaches the specified level, is female + EVO_LEVEL_MALE, // Pokémon reaches the specified level, is male + EVO_LEVEL_NIGHT, // Pokémon reaches the specified level, is night + EVO_LEVEL_DAY, // Pokémon reaches the specified level, is day + EVO_LEVEL_DUSK, // Pokémon reaches the specified level, is dusk (5-6 P.M) + EVO_ITEM_HOLD_DAY, // Pokémon levels up, holds specified item at day + EVO_ITEM_HOLD_NIGHT, // Pokémon levels up, holds specified item at night + EVO_MOVE, // Pokémon levels up, knows specified move + EVO_FRIENDSHIP_MOVE_TYPE, // Pokémon levels up with friendship ≥ 220, knows move with specified type + EVO_MAPSEC, // Pokémon levels up on specified mapsec + EVO_ITEM_MALE, // specified item is used on a male Pokémon + EVO_ITEM_FEMALE, // specified item is used on a female Pokémon + EVO_LEVEL_RAIN, // Pokémon reaches the specified level during rain in the overworld + EVO_SPECIFIC_MON_IN_PARTY, // Pokémon levels up with a specified Pokémon in party + EVO_LEVEL_DARK_TYPE_MON_IN_PARTY, // Pokémon reaches the specified level with a Dark Type Pokémon in party + EVO_TRADE_SPECIFIC_MON, // Pokémon is traded for a specified Pokémon + EVO_SPECIFIC_MAP, // Pokémon levels up on specified map + EVO_LEVEL_NATURE_AMPED, // Pokémon reaches the specified level, it has a Hardy, Brave, Adamant, Naughty, Docile, Impish, Lax, Hasty, Jolly, Naive, Rash, Sassy, or Quirky nature. + EVO_LEVEL_NATURE_LOW_KEY, // Pokémon reaches the specified level, it has a Lonely, Bold, Relaxed, Timid, Serious, Modest, Mild, Quiet, Bashful, Calm, Gentle, or Careful nature. + EVO_CRITICAL_HITS, // Pokémon performs specified number of critical hits in one battle + EVO_SCRIPT_TRIGGER_DMG, // Pokémon has specified HP below max, then player interacts trigger + EVO_DARK_SCROLL, // interacts with Scroll of Darkness + EVO_WATER_SCROLL, // interacts with Scroll of Waters + EVO_ITEM_NIGHT, // specified item is used on Pokémon, is night + EVO_ITEM_DAY, // specified item is used on Pokémon, is day + EVO_ITEM_HOLD, // Pokémon levels up, holds specified item + EVO_LEVEL_FOG, // Pokémon reaches the specified level during fog in the overworld + EVO_MOVE_TWO_SEGMENT, // Pokémon levels up, knows specified move, has a personality value with a modulus of 0 + EVO_MOVE_THREE_SEGMENT, // Pokémon levels up, knows specified move, has a personality value with a modulus of 1-99 + EVO_LEVEL_FAMILY_OF_THREE, // Pokémon reaches the specified level in battle with a personality value with a modulus of 0 + EVO_LEVEL_FAMILY_OF_FOUR, // Pokémon reaches the specified level in battle with a personality value with a modulus of 1-99 + EVO_USE_MOVE_TWENTY_TIMES, // Pokémon levels up after having used a move for at least 20 times + EVO_RECOIL_DAMAGE_MALE, // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male + EVO_RECOIL_DAMAGE_FEMALE, // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female + EVO_ITEM_COUNT_999, // Pokémon levels up after trainer has collected 999 of a specific item + EVO_DEFEAT_THREE_WITH_ITEM, // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item + EVO_OVERWORLD_STEPS, // Pokémon levels up after having taken a specific amount of steps in the overworld +}; + +enum EvolutionMode U8_ENUM { + EVO_MODE_NORMAL, + EVO_MODE_CANT_STOP, + EVO_MODE_TRADE, + EVO_MODE_ITEM_USE, + EVO_MODE_ITEM_CHECK, // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve + EVO_MODE_BATTLE_SPECIAL, + EVO_MODE_OVERWORLD_SPECIAL, + EVO_MODE_BATTLE_ONLY, // This mode is only used in battles to support Tandemaus' unique requirement +}; #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 diff --git a/include/pokemon.h b/include/pokemon.h index b299ab7d61..a67241fb14 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -798,7 +798,7 @@ u8 GetItemEffectParamOffset(u32 battler, u16 itemId, u8 effectByte, u8 effectBit u8 *UseStatIncreaseItem(u16 itemId); u8 GetNature(struct Pokemon *mon); u8 GetNatureFromPersonality(u32 personality); -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem, struct Pokemon *tradePartner); +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner); bool8 IsMonPastEvolutionLevel(struct Pokemon *mon); u16 NationalPokedexNumToSpecies(u16 nationalNum); u16 NationalToHoennOrder(u16 nationalNum); diff --git a/src/pokemon.c b/src/pokemon.c index 2b731ef13c..c8d52ddb9d 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4410,7 +4410,7 @@ static u32 GetGMaxTargetSpecies(u32 species) return SPECIES_NONE; } -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, struct Pokemon *tradePartner) +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner) { int i, j; u16 targetSpecies = SPECIES_NONE; From 745db06dc816b22eefd016189ef07dd9c818203f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 6 Aug 2024 00:12:55 +0200 Subject: [PATCH 076/544] Doesn't compile on some compilers (#5099) the u8 should be brought back once we remove agbcc. --- include/constants/pokemon.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 809fcc22d4..81671e2eb4 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -246,13 +246,7 @@ #define EVOLUTIONS_END 0xFFFF // Not an actual evolution, used to mark the end of an evolution array. #define EVO_NONE 0xFFFE // Not an actual evolution, used to generate offspring that can't evolve into the specified species, like regional forms. -#if MODERN -#define U8_ENUM : u8 -#else -#define U8_ENUM -#endif - -enum EvolutionMethods U8_ENUM { +enum EvolutionMethods { EVO_FRIENDSHIP, // Pokémon levels up with friendship ≥ 220 EVO_FRIENDSHIP_DAY, // Pokémon levels up during the day with friendship ≥ 220 EVO_FRIENDSHIP_NIGHT, // Pokémon levels up at night with friendship ≥ 220 @@ -307,7 +301,7 @@ enum EvolutionMethods U8_ENUM { EVO_OVERWORLD_STEPS, // Pokémon levels up after having taken a specific amount of steps in the overworld }; -enum EvolutionMode U8_ENUM { +enum EvolutionMode { EVO_MODE_NORMAL, EVO_MODE_CANT_STOP, EVO_MODE_TRADE, From dbb9ee874bad534df3a3a448bf17c45e2fe5d11b Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 6 Aug 2024 04:02:31 +0200 Subject: [PATCH 077/544] Change GET_MOVE_TYPE to a function (#5090) * Change GET_MOVE_TYPE to a function * add in battle check to GetMoveType function, move it to battle_util.c * Update src/battle_util.c Co-authored-by: Eduardo Quezada * Update src/battle_util.c --------- Co-authored-by: Eduardo Quezada --- include/battle.h | 7 ------- include/battle_util.h | 1 + src/battle_ai_main.c | 8 ++++---- src/battle_ai_util.c | 9 ++++----- src/battle_anim.c | 7 ++----- src/battle_main.c | 4 ++-- src/battle_script_commands.c | 35 ++++++++++++----------------------- src/battle_util.c | 30 +++++++++++++++--------------- src/battle_z_move.c | 4 +--- 9 files changed, 41 insertions(+), 64 deletions(-) diff --git a/include/battle.h b/include/battle.h index 1aa26a9470..6e1ddf9d1a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -811,13 +811,6 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects. #define F_DYNAMIC_TYPE_SET (1 << 7) // Set for all dynamic types to distinguish a dynamic type of Normal (0) from no dynamic type. -#define GET_MOVE_TYPE(move, typeArg) do { \ - if (gBattleStruct->dynamicMoveType) \ - typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \ - else \ - typeArg = gMovesInfo[move].type; \ -} while(0) - #define IS_MOVE_PHYSICAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) #define IS_MOVE_SPECIAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_SPECIAL) #define IS_MOVE_STATUS(move)(gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) diff --git a/include/battle_util.h b/include/battle_util.h index 8eadf47c98..e11e8890c3 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -268,5 +268,6 @@ u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera); bool8 CanMonParticipateInSkyBattle(struct Pokemon *mon); bool8 IsMonBannedFromSkyBattles(u16 species); void RemoveBattlerType(u32 battler, u8 type); +u32 GetMoveType(u32 move); #endif // GUARD_BATTLE_UTIL_H diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 63bab46ec9..68c7bc770f 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -826,7 +826,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return score; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (gMovesInfo[move].powderMove && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) RETURN_SCORE_MINUS(10); @@ -2749,7 +2749,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 predictedMove = aiData->predictedMoves[battlerDef]; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); // check what effect partner is using if (aiData->partnerMove != 0) @@ -5047,10 +5047,10 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 effect = gMovesInfo[move].effect; - u32 moveType = gMovesInfo[move].type; + u32 moveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 5505bbed18..6a5b71f196 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -354,7 +354,7 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) && !(unusable & gBitTable[i])) { SetTypeBeforeUsingMove(moves[i], attacker); - GET_MOVE_TYPE(moves[i], moveType); + moveType = GetMoveType(moves[i]); if (CalcTypeEffectivenessMultiplier(moves[i], moveType, attacker, target, AI_DATA->abilities[target], FALSE) != 0) usable |= gBitTable[i]; } @@ -400,10 +400,9 @@ static inline s32 DmgRoll(s32 dmg) bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) { - s32 moveType; struct AiLogicData *aiData = AI_DATA; u32 battlerDefAbility; - GET_MOVE_TYPE(move, moveType); + u32 moveType = GetMoveType(move); if (DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) battlerDefAbility = ABILITY_NONE; @@ -547,7 +546,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u gBattleStruct->dynamicMoveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, aiData->abilities[battlerDef], FALSE); if (gMovesInfo[move].power) @@ -993,7 +992,7 @@ uq4_12_t AI_GetTypeEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) gBattleStruct->dynamicMoveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); typeEffectiveness = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], FALSE); RestoreBattlerData(battlerAtk); diff --git a/src/battle_anim.c b/src/battle_anim.c index 71813ddf46..9f6648220e 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -798,7 +798,7 @@ static void Cmd_end(void) // Debugging - ensure no hanging mon bg tasks if (FuncIsActiveTask(Task_UpdateMonBg)) DebugPrintf("Move %d animation still has Task_UpdateMonBg active at the end!", gAnimMoveIndex); - + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256); if (!IsContest()) { @@ -2145,12 +2145,9 @@ static void Cmd_stopsound(void) static void Cmd_jumpifmovetypeequal(void) { - u8 moveType; const u8 *type = sBattleAnimScriptPtr + 1; sBattleAnimScriptPtr += 2; - GET_MOVE_TYPE(gCurrentMove, moveType); - - if (*type != moveType) + if (*type != GetMoveType(gCurrentMove)) sBattleAnimScriptPtr += 4; else sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); diff --git a/src/battle_main.c b/src/battle_main.c index 9df19b9566..de9b6f26d3 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5905,13 +5905,13 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) gBattleStruct->dynamicMoveType = TYPE_DARK | F_DYNAMIC_TYPE_SET; } - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) || gStatuses4[battlerAtk] & STATUS4_ELECTRIFIED) gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; // Check if a gem should activate. - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (holdEffect == HOLD_EFFECT_GEMS && moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item)) { diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index f25cef9cf5..ba95479011 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1193,9 +1193,9 @@ static void Cmd_attackcanceler(void) { CMD_ARGS(); - s32 i, moveType; + s32 i; u16 attackerAbility = GetBattlerAbility(gBattlerAttacker); - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); // Weight-based moves are blocked by Dynamax. if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && IsMoveBlockedByDynamax(gCurrentMove)) @@ -1689,7 +1689,6 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move) { - u32 type; u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); u32 abilityDef = GetBattlerAbility(gBattlerTarget); @@ -1718,8 +1717,8 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u else { u32 accuracy; + u32 type = GetMoveType(move); - GET_MOVE_TYPE(move, type); if (JumpIfMoveAffectedByProtect(move)) return; if (AccuracyCalcHelper(move)) @@ -1959,9 +1958,7 @@ static void Cmd_damagecalc(void) { CMD_ARGS(); - u8 moveType; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (gMovesInfo[gCurrentMove].effect == EFFECT_SHELL_SIDE_ARM) gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[gBattlerAttacker][gBattlerTarget] != gMovesInfo[gCurrentMove].category); gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); @@ -1972,9 +1969,7 @@ static void Cmd_typecalc(void) { CMD_ARGS(); - u8 moveType; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget), TRUE); gBattlescriptCurrInstr = cmd->nextInstr; @@ -1985,11 +1980,9 @@ static void Cmd_adjustdamage(void) CMD_ARGS(); u8 holdEffect, param; - u32 moveType; u32 affectionScore = GetBattlerAffectionHearts(gBattlerTarget); u32 rand = Random() % 100; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) goto END; @@ -2937,8 +2930,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -2951,8 +2943,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) case STATUS1_FREEZE: if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -2991,8 +2982,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -3062,8 +3052,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) case STATUS1_FROSTBITE: if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -5405,7 +5394,7 @@ static void Cmd_moveend(void) endState = cmd->endState; holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); do { @@ -5896,7 +5885,7 @@ static void Cmd_moveend(void) else { gLastLandedMoves[gBattlerTarget] = gCurrentMove; - GET_MOVE_TYPE(gCurrentMove, gLastHitByType[gBattlerTarget]); + gLastHitByType[gBattlerTarget] = GetMoveType(gCurrentMove); } } else diff --git a/src/battle_util.c b/src/battle_util.c index 678778bf1a..8eaf80721c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -196,7 +196,7 @@ void HandleAction_UseMove(void) // Set dynamic move type. SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker); - GET_MOVE_TYPE(gChosenMove, moveType); + moveType = GetMoveType(gCurrentMove); // check Z-Move used if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gCurrentMove) && !IsZMove(gCurrentMove)) @@ -722,7 +722,8 @@ void HandleAction_ActionFinished(void) | HITMARKER_CHARGING | HITMARKER_NEVER_SET | HITMARKER_IGNORE_DISGUISE); // check if Stellar type boost should be used up - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && GetBattlerTeraType(gBattlerAttacker) == TYPE_STELLAR && gMovesInfo[gCurrentMove].category != DAMAGE_CATEGORY_STATUS @@ -4086,7 +4087,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 else move = gCurrentMove; - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); switch (caseID) { @@ -4459,7 +4460,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 for (j = 0; j < MAX_MON_MOVES; j++) { move = gBattleMons[i].moves[j]; - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (CalcTypeEffectivenessMultiplier(move, moveType, i, battler, ABILITY_ANTICIPATION, FALSE) >= UQ_4_12(2.0)) { effect++; @@ -7999,7 +8000,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) case ITEMEFFECT_TARGET: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); switch (battlerHoldEffect) { case HOLD_EFFECT_AIR_BALLOON: @@ -11074,7 +11075,6 @@ static u32 SwapMoveDamageCategory(u32 move) u8 GetBattleMoveCategory(u32 moveId) { - u8 moveType; if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast return SwapMoveDamageCategory(moveId); if (gBattleStruct != NULL && (IsZMove(moveId) || IsMaxMove(moveId))) // TODO: Might be buggy depending on when this is called. @@ -11084,11 +11084,7 @@ u8 GetBattleMoveCategory(u32 moveId) if (IS_MOVE_STATUS(moveId)) return DAMAGE_CATEGORY_STATUS; - else if (gMain.inBattle) - GET_MOVE_TYPE(moveId, moveType); - else - moveType = gMovesInfo[moveId].type; - return gTypesInfo[moveType].damageCategory; + return gTypesInfo[GetMoveType(gCurrentMove)].damageCategory; } static bool32 TryRemoveScreens(u32 battler) @@ -11805,11 +11801,15 @@ static inline bool32 DoesCurrentTargetHaveAbilityImmunity(void) bool32 TargetFullyImmuneToCurrMove(u32 BattlerAtk, u32 battlerDef) { - u32 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); - - return ((CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, BattlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) + return ((CalcTypeEffectivenessMultiplier(gCurrentMove, GetMoveType(gCurrentMove), BattlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) || IsBattlerProtected(BattlerAtk, battlerDef, gCurrentMove) || IsSemiInvulnerable(battlerDef, gCurrentMove) || DoesCurrentTargetHaveAbilityImmunity()); } + +u32 GetMoveType(u32 move) +{ + if (gMain.inBattle && gBattleStruct->dynamicMoveType) + return gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; + return gMovesInfo[move].type; +} diff --git a/src/battle_z_move.c b/src/battle_z_move.c index c000c35808..ded719d54b 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -415,9 +415,7 @@ static void ZMoveSelectionDisplayPpNumber(u32 battler) static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) { u8 *txtPtr, *end; - u8 zMoveType; - - GET_MOVE_TYPE(zMove, zMoveType); + u32 zMoveType = GetMoveType(zMove); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); *(txtPtr)++ = EXT_CTRL_CODE_BEGIN; From 89cba94567e1439e73cd2d40c2d51e74a1174975 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 6 Aug 2024 03:21:12 +0100 Subject: [PATCH 078/544] Update event.inc to accomodate new gDecompressionBuffer name (#5100) --- asm/macros/event.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 83338673cf..891c7fd4ed 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1798,7 +1798,7 @@ .4byte \text .endm - @ Equivalent to fadescreen but copies gPlttBufferUnfaded to gPaletteDecompressionBuffer on the fade out + @ Equivalent to fadescreen but copies gPlttBufferUnfaded to gDecompressionBuffer on the fade out @ and the reverse on the fade in, in effect saving gPlttBufferUnfaded to restore it. .macro fadescreenswapbuffers mode:req .byte 0xdc From 355739db6310da76056074edb3ce8e684163ec14 Mon Sep 17 00:00:00 2001 From: Galaxeeh <154106034+Galaxeeh@users.noreply.github.com> Date: Thu, 8 Aug 2024 04:08:50 -0500 Subject: [PATCH 079/544] Dynamic Move Types in Summary Screen/Battle (#5084) * Dynamic Hidden Power Types * Dynamic Ivy Cudgel is summary screens * Dynamic Move types * missed unnecessary comment that got left in * format cleanup, return cleanup, added Tera Blast and Tera Starstorm, Revelation dance fix-> now displays live type update when tera is selected during battle before move selection * forgot to revert config defaults * Update src/pokemon.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * if block spaces/ raging bull fix/ more condensing on checks/ reallocating config check/ tera blast fix (was displaying tera blast type on non tera'd mons in party when battler was tera'd) * revert configs * added Hail check to Weather Ball * Fixed agbcc compile/brackets/u32 changes * Quick fix to ensure Judgment/Techno Blast/Natural Gift are not affected by -ate abilities * Update src/pokemon_summary_screen.c --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/battle_ai_switch_items.h | 1 + include/config/pokemon.h | 1 + include/pokemon.h | 2 + src/battle_ai_switch_items.c | 2 +- src/battle_controller_player.c | 17 +++- src/pokemon.c | 147 +++++++++++++++++++++++++++++++ src/pokemon_summary_screen.c | 29 +++++- 7 files changed, 192 insertions(+), 7 deletions(-) diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index b52e792612..3c70132afe 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -5,5 +5,6 @@ void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(u32 battler); u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd); bool32 ShouldSwitch(u32 battler, bool32 emitResult); +bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2); #endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 7bf9450cbb..89e72cec17 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -51,6 +51,7 @@ #define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games. #define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid won't be shiny. #define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be shiny +#define P_SHOW_DYNAMIC_TYPES FALSE // If TRUE, moves with dynamic type changes will be reflected as their current type in battle/summary screens. // Learnset helper toggles #define P_LEARNSET_HELPER_TEACHABLE TRUE // If TRUE, teachable_learnsets.h will be populated by tools/learnset_helpers/teachable.py using the included JSON files based on available TMs and tutors. diff --git a/include/pokemon.h b/include/pokemon.h index a67241fb14..4be40addbf 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -882,5 +882,7 @@ const u8 *GetMoveName(u16 moveId); const u8 *GetMoveAnimationScript(u16 moveId); void UpdateDaysPassedSinceFormChange(u16 days); void TrySetDayLimitToFormChange(struct Pokemon *mon); +u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler); +u8 CalculateHiddenPowerType(struct Pokemon *mon); #endif // GUARD_POKEMON_H diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index a0a44cb98d..d85cf28d37 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1318,7 +1318,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva return bestMonId; } -static bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) +bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) { // List that makes mon not grounded if (type1 == TYPE_FLYING || type2 == TYPE_FLYING || ability == ABILITY_LEVITATE diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 6dcea9eb98..f49a8f95c7 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1716,15 +1716,14 @@ static void MoveSelectionDisplayMoveType(u32 battler) u8 type; u32 speciesId; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); - txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); - type = gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].type; if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_BLAST) { if (IsGimmickSelected(battler, GIMMICK_TERA) || GetActiveGimmick(battler) == GIMMICK_TERA) type = GetBattlerTeraType(battler); + end = StringCopy(txtPtr, gTypesInfo[type].name); } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_IVY_CUDGEL) { @@ -1734,21 +1733,33 @@ static void MoveSelectionDisplayMoveType(u32 battler) || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK_TERA) type = gBattleMons[battler].type2; + end = StringCopy(txtPtr, gTypesInfo[type].name); } // Max Guard is a Normal-type move else if (gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].category == DAMAGE_CATEGORY_STATUS && (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))) { type = TYPE_NORMAL; + end = StringCopy(txtPtr, gTypesInfo[type].name); } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_STARSTORM) { if (gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR || (IsGimmickSelected(battler, GIMMICK_TERA) && gBattleMons[battler].species == SPECIES_TERAPAGOS_TERASTAL)) type = TYPE_STELLAR; + end = StringCopy(txtPtr, gTypesInfo[type].name); + } + else if (P_SHOW_DYNAMIC_TYPES) + { + struct Pokemon *mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; + type = CheckDynamicMoveType(mon, moveInfo->moves[gMoveSelectionCursor[battler]], battler); + end = StringCopy(txtPtr, gTypesInfo[type].name); + } + else + { + end = StringCopy(txtPtr, gTypesInfo[type].name); } - end = StringCopy(txtPtr, gTypesInfo[type].name); PrependFontIdToFit(txtPtr, end, FONT_NORMAL, WindowWidthPx(B_WIN_MOVE_TYPE) - 25); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } diff --git a/src/pokemon.c b/src/pokemon.c index c8d52ddb9d..1807b675df 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2,6 +2,7 @@ #include "malloc.h" #include "apprentice.h" #include "battle.h" +#include "battle_ai_switch_items.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" @@ -6941,3 +6942,149 @@ void UpdateDaysPassedSinceFormChange(u16 days) } } } + +u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) +{ + u32 type = gMovesInfo[move].type; + u32 species = GetMonData(mon, MON_DATA_SPECIES); + u32 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + u32 heldItemEffect = ItemId_GetHoldEffect(heldItem); + u32 ability = GetMonAbility(mon); + u32 type1 = gSpeciesInfo[species].types[0]; + u32 type2 = gSpeciesInfo[species].types[1]; + + if (move == MOVE_IVY_CUDGEL + && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA + || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA + || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) + { + type = type2; + } + else if (move == MOVE_STRUGGLE) + { + return TYPE_NORMAL; + } + else if (move == MOVE_TERA_BLAST && GetActiveGimmick(battler) == GIMMICK_TERA && gBattleMons[battler].species == species) + { + return GetMonData(mon, MON_DATA_TERA_TYPE); + } + else if (move == MOVE_TERA_STARSTORM && species == SPECIES_TERAPAGOS_STELLAR) + { + return TYPE_STELLAR; + } + else if (move == MOVE_HIDDEN_POWER) + { + return CalculateHiddenPowerType(mon); + } + else if (move == MOVE_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) + { + type = TYPE_DARK; + } + else if (gMovesInfo[move].effect == EFFECT_CHANGE_TYPE_ON_ITEM) + { + if (heldItemEffect == gMovesInfo[move].argument) + return ItemId_GetSecondaryId(heldItem); + else + return TYPE_NORMAL; + } + else if (move == MOVE_NATURAL_GIFT) + { + if (ItemId_GetPocket(heldItem) == POCKET_BERRIES) + return gNaturalGiftTable[ITEM_TO_BERRY(heldItem)].type; + else + return TYPE_NORMAL; + } + else if (move == MOVE_RAGING_BULL + && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED + || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED + || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) + { + return type2; + } + else if (move == MOVE_REVELATION_DANCE) + { + if (gBattleMons[battler].species != species && type1 != TYPE_MYSTERY) + type = type1; + else if (gBattleMons[battler].species != species && type2 != TYPE_MYSTERY) + type = type2; + else if (GetBattlerTeraType(battler) != TYPE_STELLAR && (GetActiveGimmick(battler) == GIMMICK_TERA || IsGimmickSelected(battler, GIMMICK_TERA))) + type = GetMonData(mon, MON_DATA_TERA_TYPE); + else if (gBattleMons[battler].type1 != TYPE_MYSTERY) + type = gBattleMons[battler].type1; + else if (gBattleMons[battler].type2 != TYPE_MYSTERY) + type = gBattleMons[battler].type2; + else if (gBattleMons[battler].type3 != TYPE_MYSTERY) + type = gBattleMons[battler].type3; + } + else if (gMovesInfo[move].effect == EFFECT_TERRAIN_PULSE + && ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species) + || (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY) && gBattleMons[battler].species == species))) + { + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + return TYPE_ELECTRIC; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + return TYPE_GRASS; + else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + return TYPE_FAIRY; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + return TYPE_PSYCHIC; + else //failsafe + type = TYPE_NORMAL; + } + + if (gMovesInfo[move].effect == EFFECT_WEATHER_BALL && WEATHER_HAS_EFFECT) + { + if (gBattleWeather & B_WEATHER_RAIN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_WATER; + else if (gBattleWeather & B_WEATHER_SANDSTORM) + return TYPE_ROCK; + else if (gBattleWeather & B_WEATHER_SUN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_FIRE; + else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) + return TYPE_ICE; + else + return TYPE_NORMAL; + } + + if (ability == ABILITY_NORMALIZE && gMovesInfo[move].type != TYPE_NORMAL && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) + type = TYPE_NORMAL; + + if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && type == TYPE_NORMAL) || gStatuses4[battler] & STATUS4_ELECTRIFIED) + type = TYPE_ELECTRIC; + + if (gMovesInfo[move].type == TYPE_NORMAL && gMovesInfo[move].category != DAMAGE_CATEGORY_STATUS) + { + switch (ability) + { + case ABILITY_PIXILATE: return TYPE_FAIRY; + case ABILITY_REFRIGERATE: return TYPE_ICE; + case ABILITY_AERILATE: return TYPE_FLYING; + case ABILITY_GALVANIZE: return TYPE_ELECTRIC; + default: break; + } + } + + if (ability == ABILITY_LIQUID_VOICE && gMovesInfo[move].soundMove == TRUE) + return TYPE_WATER; + + return type; +} + +u8 CalculateHiddenPowerType(struct Pokemon *mon) +{ + u32 typehp; + u32 type; + u8 typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) + | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) + | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) + | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) + | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) + | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); + + type = (15 * typeBits) / 63 + 2; + if (type >= TYPE_MYSTERY) + type++; + type |= 0xC0; + typehp = type & 0x3F; + return typehp; +} diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e81ef0b066..a1ebc2b188 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3957,16 +3957,29 @@ static void SetMonTypeIcons(void) static void SetMoveTypeIcons(void) { - u8 i; + u32 i; + u32 type; struct PokeSummary *summary = &sMonSummaryScreen->summary; + struct Pokemon *mon = &sMonSummaryScreen->currentMon; + for (i = 0; i < MAX_MON_MOVES; i++) { if (summary->moves[i] != MOVE_NONE) { - SetTypeSpritePosAndPal(gMovesInfo[summary->moves[i]].type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); + if (P_SHOW_DYNAMIC_TYPES) + { + type = CheckDynamicMoveType(mon, summary->moves[i], 0); + SetTypeSpritePosAndPal(type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); + } + else + { + SetTypeSpritePosAndPal(gMovesInfo[summary->moves[i]].type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); + } } else + { SetSpriteInvisibility(i + SPRITE_ARR_ID_TYPE, TRUE); + } } } @@ -3985,6 +3998,12 @@ static void SetContestMoveTypeIcons(void) static void SetNewMoveTypeIcon(void) { + u32 type = gMovesInfo[sMonSummaryScreen->newMove].type; + struct Pokemon *mon = &sMonSummaryScreen->currentMon; + + if (P_SHOW_DYNAMIC_TYPES) + type = CheckDynamicMoveType(mon, sMonSummaryScreen->newMove, 0); + if (sMonSummaryScreen->newMove == MOVE_NONE) { SetSpriteInvisibility(SPRITE_ARR_ID_TYPE + 4, TRUE); @@ -3992,9 +4011,13 @@ static void SetNewMoveTypeIcon(void) else { if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) - SetTypeSpritePosAndPal(gMovesInfo[sMonSummaryScreen->newMove].type, 85, 96, SPRITE_ARR_ID_TYPE + 4); + { + SetTypeSpritePosAndPal(type, 85, 96, SPRITE_ARR_ID_TYPE + 4); + } else + { SetTypeSpritePosAndPal(NUMBER_OF_MON_TYPES + gMovesInfo[sMonSummaryScreen->newMove].contestCategory, 85, 96, SPRITE_ARR_ID_TYPE + 4); + } } } From 754beeee5d29544b64c0eb48e7467d4ebbdfb7dd Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Thu, 8 Aug 2024 08:46:17 -0400 Subject: [PATCH 080/544] Created COMPOUND_STRINGs for default player names (#5037) * Converted default names to COMPOUND_STRINGs * Moved new game strings out to main_menu --- include/strings.h | 59 -------------------------- src/main_menu.c | 104 +++++++++++++++++++++++++++------------------- src/strings.c | 61 --------------------------- 3 files changed, 62 insertions(+), 162 deletions(-) diff --git a/include/strings.h b/include/strings.h index ec175ab251..7ad99aad56 100644 --- a/include/strings.h +++ b/include/strings.h @@ -324,19 +324,6 @@ extern const u8 gText_SelectorArrow3[]; extern const u8 gText_YesNo[]; // main menu/birch speech text -extern const u8 gText_SaveFileErased[]; -extern const u8 gText_SaveFileCorrupted[]; -extern const u8 gJPText_No1MSubCircuit[]; -extern const u8 gText_BatteryRunDry[]; -extern const u8 gText_MainMenuNewGame[]; -extern const u8 gText_MainMenuOption[]; -extern const u8 gText_MainMenuContinue[]; -extern const u8 gText_MainMenuMysteryGift2[]; -extern const u8 gText_MainMenuMysteryEvents[]; -extern const u8 gText_MainMenuMysteryGift[]; -extern const u8 gText_WirelessNotConnected[]; -extern const u8 gText_MysteryGiftCantUse[]; -extern const u8 gText_MysteryEventsCantUse[]; extern const u8 gText_Birch_Welcome[]; extern const u8 gText_ThisIsAPokemon[]; extern const u8 gText_Birch_MainSpeech[]; @@ -346,52 +333,6 @@ extern const u8 gText_Birch_WhatsYourName[]; extern const u8 gText_Birch_SoItsPlayer[]; extern const u8 gText_Birch_YourePlayer[]; extern const u8 gText_Birch_AreYouReady[]; -extern const u8 gText_ContinueMenuPlayer[]; -extern const u8 gText_ContinueMenuTime[]; -extern const u8 gText_ContinueMenuPokedex[]; -extern const u8 gText_ContinueMenuBadges[]; -extern const u8 gText_BirchBoy[]; -extern const u8 gText_BirchGirl[]; -extern const u8 gText_DefaultNameStu[]; -extern const u8 gText_DefaultNameMilton[]; -extern const u8 gText_DefaultNameTom[]; -extern const u8 gText_DefaultNameKenny[]; -extern const u8 gText_DefaultNameReid[]; -extern const u8 gText_DefaultNameJude[]; -extern const u8 gText_DefaultNameJaxson[]; -extern const u8 gText_DefaultNameEaston[]; -extern const u8 gText_DefaultNameWalker[]; -extern const u8 gText_DefaultNameTeru[]; -extern const u8 gText_DefaultNameJohnny[]; -extern const u8 gText_DefaultNameBrett[]; -extern const u8 gText_DefaultNameSeth[]; -extern const u8 gText_DefaultNameTerry[]; -extern const u8 gText_DefaultNameCasey[]; -extern const u8 gText_DefaultNameDarren[]; -extern const u8 gText_DefaultNameLandon[]; -extern const u8 gText_DefaultNameCollin[]; -extern const u8 gText_DefaultNameStanley[]; -extern const u8 gText_DefaultNameQuincy[]; -extern const u8 gText_DefaultNameKimmy[]; -extern const u8 gText_DefaultNameTiara[]; -extern const u8 gText_DefaultNameBella[]; -extern const u8 gText_DefaultNameJayla[]; -extern const u8 gText_DefaultNameAllie[]; -extern const u8 gText_DefaultNameLianna[]; -extern const u8 gText_DefaultNameSara[]; -extern const u8 gText_DefaultNameMonica[]; -extern const u8 gText_DefaultNameCamila[]; -extern const u8 gText_DefaultNameAubree[]; -extern const u8 gText_DefaultNameRuthie[]; -extern const u8 gText_DefaultNameHazel[]; -extern const u8 gText_DefaultNameNadine[]; -extern const u8 gText_DefaultNameTanja[]; -extern const u8 gText_DefaultNameYasmin[]; -extern const u8 gText_DefaultNameNicola[]; -extern const u8 gText_DefaultNameLillie[]; -extern const u8 gText_DefaultNameTerra[]; -extern const u8 gText_DefaultNameLucy[]; -extern const u8 gText_DefaultNameHalie[]; extern const u8 gText_BirchInTrouble[]; extern const u8 gText_ConfirmStarterChoice[]; diff --git a/src/main_menu.c b/src/main_menu.c index c1f092b2ca..504fbfb186 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -257,6 +257,26 @@ static const u32 sBirchSpeechBgMap[] = INCBIN_U32("graphics/birch_speech/map.bin static const u16 sBirchSpeechBgGradientPal[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal"); static const u16 sBirchSpeechPlatformBlackPal[] = {RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK}; +static const u8 gText_SaveFileCorrupted[] = _("The save file is corrupted. The\nprevious save file will be loaded."); +static const u8 gText_SaveFileErased[] = _("The save file has been erased\ndue to corruption or damage."); +static const u8 gJPText_No1MSubCircuit[] = _("1Mサブきばんが ささっていません!"); +static const u8 gText_BatteryRunDry[] = _("The internal battery has run dry.\nThe game can be played.\pHowever, clock-based events will\nno longer occur."); + +static const u8 gText_MainMenuNewGame[] = _("NEW GAME"); +static const u8 gText_MainMenuContinue[] = _("CONTINUE"); +static const u8 gText_MainMenuOption[] = _("OPTION"); +static const u8 gText_MainMenuMysteryGift[] = _("MYSTERY GIFT"); +static const u8 gText_MainMenuMysteryGift2[] = _("MYSTERY GIFT"); +static const u8 gText_MainMenuMysteryEvents[] = _("MYSTERY EVENTS"); +static const u8 gText_WirelessNotConnected[] = _("The Wireless Adapter is not\nconnected."); +static const u8 gText_MysteryGiftCantUse[] = _("MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached."); +static const u8 gText_MysteryEventsCantUse[] = _("MYSTERY EVENTS can't be used while\nthe Wireless Adapter is attached."); + +static const u8 gText_ContinueMenuPlayer[] = _("PLAYER"); +static const u8 gText_ContinueMenuTime[] = _("TIME"); +static const u8 gText_ContinueMenuPokedex[] = _("POKéDEX"); +static const u8 gText_ContinueMenuBadges[] = _("BADGES"); + #define MENU_LEFT 2 #define MENU_TOP_WIN0 1 #define MENU_TOP_WIN1 5 @@ -454,54 +474,54 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_PlayerShrink[] = }; static const struct MenuAction sMenuActions_Gender[] = { - {gText_BirchBoy, {NULL}}, - {gText_BirchGirl, {NULL}} + {COMPOUND_STRING("BOY"), {NULL}}, + {COMPOUND_STRING("GIRL"), {NULL}} }; static const u8 *const sMalePresetNames[] = { - gText_DefaultNameStu, - gText_DefaultNameMilton, - gText_DefaultNameTom, - gText_DefaultNameKenny, - gText_DefaultNameReid, - gText_DefaultNameJude, - gText_DefaultNameJaxson, - gText_DefaultNameEaston, - gText_DefaultNameWalker, - gText_DefaultNameTeru, - gText_DefaultNameJohnny, - gText_DefaultNameBrett, - gText_DefaultNameSeth, - gText_DefaultNameTerry, - gText_DefaultNameCasey, - gText_DefaultNameDarren, - gText_DefaultNameLandon, - gText_DefaultNameCollin, - gText_DefaultNameStanley, - gText_DefaultNameQuincy + COMPOUND_STRING("STU"), + COMPOUND_STRING("MILTON"), + COMPOUND_STRING("TOM"), + COMPOUND_STRING("KENNY"), + COMPOUND_STRING("REID"), + COMPOUND_STRING("JUDE"), + COMPOUND_STRING("JAXSON"), + COMPOUND_STRING("EASTON"), + COMPOUND_STRING("WALKER"), + COMPOUND_STRING("TERU"), + COMPOUND_STRING("JOHNNY"), + COMPOUND_STRING("BRETT"), + COMPOUND_STRING("SETH"), + COMPOUND_STRING("TERRY"), + COMPOUND_STRING("CASEY"), + COMPOUND_STRING("DARREN"), + COMPOUND_STRING("LANDON"), + COMPOUND_STRING("COLLIN"), + COMPOUND_STRING("STANLEY"), + COMPOUND_STRING("QUINCY") }; static const u8 *const sFemalePresetNames[] = { - gText_DefaultNameKimmy, - gText_DefaultNameTiara, - gText_DefaultNameBella, - gText_DefaultNameJayla, - gText_DefaultNameAllie, - gText_DefaultNameLianna, - gText_DefaultNameSara, - gText_DefaultNameMonica, - gText_DefaultNameCamila, - gText_DefaultNameAubree, - gText_DefaultNameRuthie, - gText_DefaultNameHazel, - gText_DefaultNameNadine, - gText_DefaultNameTanja, - gText_DefaultNameYasmin, - gText_DefaultNameNicola, - gText_DefaultNameLillie, - gText_DefaultNameTerra, - gText_DefaultNameLucy, - gText_DefaultNameHalie + COMPOUND_STRING("KIMMY"), + COMPOUND_STRING("TIARA"), + COMPOUND_STRING("BELLA"), + COMPOUND_STRING("JAYLA"), + COMPOUND_STRING("ALLIE"), + COMPOUND_STRING("LIANNA"), + COMPOUND_STRING("SARA"), + COMPOUND_STRING("MONICA"), + COMPOUND_STRING("CAMILA"), + COMPOUND_STRING("AUBREE"), + COMPOUND_STRING("RUTHIE"), + COMPOUND_STRING("HAZEL"), + COMPOUND_STRING("NADINE"), + COMPOUND_STRING("TANJA"), + COMPOUND_STRING("YASMIN"), + COMPOUND_STRING("NICOLA"), + COMPOUND_STRING("LILLIE"), + COMPOUND_STRING("TERRA"), + COMPOUND_STRING("LUCY"), + COMPOUND_STRING("HALIE") }; // The number of male vs. female names is assumed to be the same. diff --git a/src/strings.c b/src/strings.c index 28ed992d43..a5533731ed 100644 --- a/src/strings.c +++ b/src/strings.c @@ -21,21 +21,6 @@ const u8 gText_ExpandedPlaceholder_May[] = _("MAY"); const u8 gText_EggNickname[] = _("EGG"); const u8 gText_Pokemon[] = _("POKéMON"); const u8 gText_ProfBirchMatchCallName[] = _("PROF. BIRCH"); -const u8 gText_MainMenuNewGame[] = _("NEW GAME"); -const u8 gText_MainMenuContinue[] = _("CONTINUE"); -const u8 gText_MainMenuOption[] = _("OPTION"); -const u8 gText_MainMenuMysteryGift[] = _("MYSTERY GIFT"); -const u8 gText_MainMenuMysteryGift2[] = _("MYSTERY GIFT"); -const u8 gText_MainMenuMysteryEvents[] = _("MYSTERY EVENTS"); -const u8 gText_WirelessNotConnected[] = _("The Wireless Adapter is not\nconnected."); -const u8 gText_MysteryGiftCantUse[] = _("MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached."); -const u8 gText_MysteryEventsCantUse[] = _("MYSTERY EVENTS can't be used while\nthe Wireless Adapter is attached."); -const u8 gText_UpdatingSaveExternalData[] = _("Updating save file using external\ndata. Please wait."); // Unused -const u8 gText_SaveFileUpdated[] = _("The save file has been updated."); // Unused -const u8 gText_SaveFileCorrupted[] = _("The save file is corrupted. The\nprevious save file will be loaded."); -const u8 gText_SaveFileErased[] = _("The save file has been erased\ndue to corruption or damage."); -const u8 gJPText_No1MSubCircuit[] = _("1Mサブきばんが ささっていません!"); -const u8 gText_BatteryRunDry[] = _("The internal battery has run dry.\nThe game can be played.\pHowever, clock-based events will\nno longer occur."); const u8 gText_Player[] = _("PLAYER"); // Unused const u8 gText_Pokedex[] = _("POKéDEX"); // Unused const u8 gText_Time[] = _("TIME"); @@ -55,48 +40,6 @@ ALIGNED(4) const u8 gText_NextBack[] = _("{A_BUTTON}NEXT {B_BUTTON}BACK"); // Un ALIGNED(4) const u8 gText_PickNextCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}NEXT {B_BUTTON}CANCEL"); ALIGNED(4) const u8 gText_PickCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}{B_BUTTON}CANCEL"); ALIGNED(4) const u8 gText_AButtonExit[] = _("{A_BUTTON}EXIT"); -const u8 gText_BirchBoy[] = _("BOY"); -const u8 gText_BirchGirl[] = _("GIRL"); -const u8 gText_DefaultNameStu[] = _("STU"); -const u8 gText_DefaultNameMilton[] = _("MILTON"); -const u8 gText_DefaultNameTom[] = _("TOM"); -const u8 gText_DefaultNameKenny[] = _("KENNY"); -const u8 gText_DefaultNameReid[] = _("REID"); -const u8 gText_DefaultNameJude[] = _("JUDE"); -const u8 gText_DefaultNameJaxson[] = _("JAXSON"); -const u8 gText_DefaultNameEaston[] = _("EASTON"); -const u8 gText_DefaultNameWalker[] = _("WALKER"); -const u8 gText_DefaultNameTeru[] = _("TERU"); -const u8 gText_DefaultNameJohnny[] = _("JOHNNY"); -const u8 gText_DefaultNameBrett[] = _("BRETT"); -const u8 gText_DefaultNameSeth[] = _("SETH"); -const u8 gText_DefaultNameTerry[] = _("TERRY"); -const u8 gText_DefaultNameCasey[] = _("CASEY"); -const u8 gText_DefaultNameDarren[] = _("DARREN"); -const u8 gText_DefaultNameLandon[] = _("LANDON"); -const u8 gText_DefaultNameCollin[] = _("COLLIN"); -const u8 gText_DefaultNameStanley[] = _("STANLEY"); -const u8 gText_DefaultNameQuincy[] = _("QUINCY"); -const u8 gText_DefaultNameKimmy[] = _("KIMMY"); -const u8 gText_DefaultNameTiara[] = _("TIARA"); -const u8 gText_DefaultNameBella[] = _("BELLA"); -const u8 gText_DefaultNameJayla[] = _("JAYLA"); -const u8 gText_DefaultNameAllie[] = _("ALLIE"); -const u8 gText_DefaultNameLianna[] = _("LIANNA"); -const u8 gText_DefaultNameSara[] = _("SARA"); -const u8 gText_DefaultNameMonica[] = _("MONICA"); -const u8 gText_DefaultNameCamila[] = _("CAMILA"); -const u8 gText_DefaultNameAubree[] = _("AUBREE"); -const u8 gText_DefaultNameRuthie[] = _("RUTHIE"); -const u8 gText_DefaultNameHazel[] = _("HAZEL"); -const u8 gText_DefaultNameNadine[] = _("NADINE"); -const u8 gText_DefaultNameTanja[] = _("TANJA"); -const u8 gText_DefaultNameYasmin[] = _("YASMIN"); -const u8 gText_DefaultNameNicola[] = _("NICOLA"); -const u8 gText_DefaultNameLillie[] = _("LILLIE"); -const u8 gText_DefaultNameTerra[] = _("TERRA"); -const u8 gText_DefaultNameLucy[] = _("LUCY"); -const u8 gText_DefaultNameHalie[] = _("HALIE"); const u8 gText_ThisIsAPokemon[] = _("This is what we call a “POKéMON.”{PAUSE 96}\p"); const u8 gText_5MarksPokemon[] = _("????? POKéMON"); const u8 gText_UnkHeight[] = _("{CLEAR_TO 0x0C}??'??”"); @@ -1378,10 +1321,6 @@ const u8 gText_BattleArenaDesc[] = _("Win battles with teamed-up POKéMON!\nYour const u8 gText_BattleFactoryDesc[] = _("Aim for victory using rental POKéMON!\nYour knowledge will be tested."); const u8 gText_BattlePikeDesc[] = _("Select one of three paths to battle!\nYour luck will be tested."); const u8 gText_BattlePyramidDesc[] = _("Aim for the top with exploration!\nYour bravery will be tested."); -const u8 gText_ContinueMenuPlayer[] = _("PLAYER"); -const u8 gText_ContinueMenuTime[] = _("TIME"); -const u8 gText_ContinueMenuPokedex[] = _("POKéDEX"); -const u8 gText_ContinueMenuBadges[] = _("BADGES"); const u8 gText_Powder[] = _("POWDER"); const u8 gText_BerryPickingRecords[] = _("DODRIO BERRY-PICKING RECORDS"); const u8 gText_BerriesPicked[] = _("BERRIES picked:"); From 36aea8b68a329adea8d0bed855c7470253160ef1 Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Thu, 8 Aug 2024 08:48:01 -0400 Subject: [PATCH 081/544] Changed single-use berry blender strings to be COMPOUND_STRINGs (#4963) * Turned Berry Blender NPC names into COMPOUND_STRINGS * Moved more berry blender unused text to the unused text section * Moved more Berry Blender text to Compound Strings * Revert "Moved more Berry Blender text to Compound Strings" This reverts commit d46c3f979158639b03eadba5b4c8140515c31a37. * Removed unused Berry Blender text --- src/berry_blender.c | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/src/berry_blender.c b/src/berry_blender.c index 0af3fd3ba6..a34afcf998 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -255,35 +255,20 @@ static const u16 sBlenderOuter_Pal[] = INCBIN_U16("graphics/berry_blender/outer. static const u16 sUnused_Pal[] = INCBIN_U16("graphics/berry_blender/unused.gbapal"); static const u16 sEmpty_Pal[16 * 14] = {0}; -// unused text -static const u8 sUnusedText_YesNo[] = _("YES\nNO"); -static const u8 sUnusedText_2[] = _("▶"); -static const u8 sUnusedText_Space[] = _(" "); -static const u8 sUnusedText_Terminating[] = _("Terminating."); -static const u8 sUnusedText_LinkPartnerNotFound[] = _("Link partner(s) not found.\nPlease try again.\p"); - static const u8 sText_BerryBlenderStart[] = _("Starting up the BERRY BLENDER.\pPlease select a BERRY from your BAG\nto put in the BERRY BLENDER.\p"); static const u8 sText_NewParagraph[] = _("\p"); static const u8 sText_WasMade[] = _(" was made!"); -static const u8 sText_Mister[] = _("MISTER"); -static const u8 sText_Laddie[] = _("LADDIE"); -static const u8 sText_Lassie[] = _("LASSIE"); -static const u8 sText_Master[] = _("MASTER"); -static const u8 sText_Dude[] = _("DUDE"); -static const u8 sText_Miss[] = _("MISS"); static const u8 *const sBlenderOpponentsNames[] = { - [BLENDER_MISTER] = sText_Mister, - [BLENDER_LADDIE] = sText_Laddie, - [BLENDER_LASSIE] = sText_Lassie, - [BLENDER_MASTER] = sText_Master, - [BLENDER_DUDE] = sText_Dude, - [BLENDER_MISS] = sText_Miss + [BLENDER_MISTER] = COMPOUND_STRING("MISTER"), + [BLENDER_LADDIE] = COMPOUND_STRING("LADDIE"), + [BLENDER_LASSIE] = COMPOUND_STRING("LASSIE"), + [BLENDER_MASTER] = COMPOUND_STRING("MASTER"), + [BLENDER_DUDE] = COMPOUND_STRING("DUDE"), + [BLENDER_MISS] = COMPOUND_STRING("MISS"), }; -static const u8 sText_PressAToStart[] = _("Press the A Button to start."); -static const u8 sText_PleaseWaitAWhile[] = _("Please wait a while."); static const u8 sText_CommunicationStandby[] = _("Communication standby…"); static const u8 sText_WouldLikeToBlendAnotherBerry[] = _("Would you like to blend another BERRY?"); static const u8 sText_RunOutOfBerriesForBlending[] = _("You've run out of BERRIES for\nblending in the BERRY BLENDER.\p"); @@ -291,7 +276,6 @@ static const u8 sText_YourPokeblockCaseIsFull[] = _("Your {POKEBLOCK} CASE is fu static const u8 sText_HasNoBerriesToPut[] = _(" has no BERRIES to put in\nthe BERRY BLENDER."); static const u8 sText_ApostropheSPokeblockCaseIsFull[] = _("'s {POKEBLOCK} CASE is full.\p"); static const u8 sText_BlendingResults[] = _("RESULTS OF BLENDING"); -static const u8 sText_BerryUsed[] = _("BERRY USED"); static const u8 sText_SpaceBerry[] = _(" BERRY"); static const u8 sText_Time[] = _("Time:"); static const u8 sText_Min[] = _(" min. "); @@ -300,7 +284,6 @@ static const u8 sText_MaximumSpeed[] = _("MAXIMUM SPEED"); static const u8 sText_RPM[] = _(" RPM"); static const u8 sText_Dot[] = _("."); static const u8 sText_NewLine[] = _("\n"); -static const u8 sText_Space[] = _(" "); static const u8 sText_Ranking[] = _("RANKING"); static const u8 sText_TheLevelIs[] = _("The level is "); static const u8 sText_TheFeelIs[] = _(", and the feel is "); From 182809b515c06cd241cb37345679741c40c57460 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 8 Aug 2024 14:46:22 -0400 Subject: [PATCH 082/544] Made perfect IV count into a granular setting (#5115) * Made perfect IV count into a granular setting * Fixed optional parameter comment in SPECIES_NONE --- include/constants/pokemon.h | 4 + include/pokemon.h | 4 +- src/data/pokemon/species_info.h | 2 +- .../pokemon/species_info/gen_1_families.h | 16 +- .../pokemon/species_info/gen_2_families.h | 6 + .../pokemon/species_info/gen_3_families.h | 18 ++ .../pokemon/species_info/gen_4_families.h | 132 ++++++++------- .../pokemon/species_info/gen_5_families.h | 140 ++++++++------- .../pokemon/species_info/gen_6_families.h | 13 ++ .../pokemon/species_info/gen_7_families.h | 160 +++++++++++------- .../pokemon/species_info/gen_8_families.h | 22 +++ .../pokemon/species_info/gen_9_families.h | 14 ++ src/pokemon.c | 24 +-- 13 files changed, 355 insertions(+), 200 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 81671e2eb4..9179d628b2 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -335,6 +335,10 @@ enum EvolutionMode { // Used as a signal for givemon to generate a default ability by personality. #define NUM_ABILITY_PERSONALITY 0xFF +#if P_LEGENDARY_PERFECT_IVS >= GEN_6 #define LEGENDARY_PERFECT_IV_COUNT 3 +#else +#define LEGENDARY_PERFECT_IV_COUNT 0 +#endif #endif // GUARD_CONSTANTS_POKEMON_H diff --git a/include/pokemon.h b/include/pokemon.h index 4be40addbf..b3b9c18734 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -439,11 +439,11 @@ struct SpeciesInfo /*0xC4*/ u32 isHisuianForm:1; u32 isPaldeanForm:1; u32 cannotBeTraded:1; - u32 allPerfectIVs:1; + u32 perfectIVCount:3; // This species will always generate with the specified amount of perfect IVs. u32 dexForceRequired:1; // This species will be taken into account for Pokédex ratings even if they have the "isMythical" flag set. u32 tmIlliterate:1; // This species will be unable to learn the universal moves. u32 isFrontierBanned:1; // This species is not allowed to participate in Battle Frontier facilities. - u32 padding4:14; + u32 padding4:12; // Move Data /* 0x80 */ const struct LevelUpMove *levelUpLearnset; /* 0x84 */ const u16 *teachableLearnset; diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 4f21223eee..61da487389 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -211,7 +211,7 @@ const struct SpeciesInfo gSpeciesInfo[] = {EVO_ITEM, ITEM_MOOMOO_MILK, SPECIES_NONE}), //.formSpeciesIdTable = sNoneFormSpeciesIdTable, //.formChangeTable = sNoneFormChangeTable, - .allPerfectIVs = TRUE, + //.perfectIVCount = NUM_STATS, }, */ }; diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index e35bb848b7..5a6d447106 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -2090,6 +2090,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = FOOTPRINT(Raticate) .isTotem = TRUE, .isAlolanForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRaticateAlolanLevelUpLearnset, .teachableLearnset = sRaticateAlolanTeachableLearnset, .formSpeciesIdTable = sRaticateFormSpeciesIdTable, @@ -3411,7 +3412,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif FOOTPRINT(Pikachu) .cannotBeTraded = TRUE, - .allPerfectIVs = TRUE, + .perfectIVCount = NUM_STATS, .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, .formSpeciesIdTable = sPikachuFormSpeciesIdTable, @@ -11836,6 +11837,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = FOOTPRINT(Marowak) .isTotem = TRUE, .isAlolanForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMarowakAlolanLevelUpLearnset, .teachableLearnset = sMarowakAlolanTeachableLearnset, .formSpeciesIdTable = sMarowakFormSpeciesIdTable, @@ -15575,7 +15577,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif FOOTPRINT(Eevee) .cannotBeTraded = TRUE, - .allPerfectIVs = TRUE, + .perfectIVCount = NUM_STATS, .levelUpLearnset = sEeveeLevelUpLearnset, .teachableLearnset = sEeveeTeachableLearnset, .eggMoveLearnset = sEeveeEggMoveLearnset, @@ -16923,6 +16925,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Articuno ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sArticunoLevelUpLearnset, .teachableLearnset = sArticunoTeachableLearnset, .formSpeciesIdTable = sArticunoFormSpeciesIdTable, @@ -16988,6 +16991,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sArticunoGalarianLevelUpLearnset, .teachableLearnset = sArticunoGalarianTeachableLearnset, .formSpeciesIdTable = sArticunoFormSpeciesIdTable, @@ -17064,6 +17068,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Zapdos ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZapdosLevelUpLearnset, .teachableLearnset = sZapdosTeachableLearnset, .formSpeciesIdTable = sZapdosFormSpeciesIdTable, @@ -17128,6 +17133,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZapdosGalarianLevelUpLearnset, .teachableLearnset = sZapdosGalarianTeachableLearnset, .formSpeciesIdTable = sZapdosFormSpeciesIdTable, @@ -17199,6 +17205,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Moltres ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMoltresLevelUpLearnset, .teachableLearnset = sMoltresTeachableLearnset, .formSpeciesIdTable = sMoltresFormSpeciesIdTable, @@ -17263,6 +17270,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMoltresGalarianLevelUpLearnset, .teachableLearnset = sMoltresGalarianTeachableLearnset, .formSpeciesIdTable = sMoltresFormSpeciesIdTable, @@ -17529,6 +17537,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17587,6 +17596,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17645,6 +17655,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17721,6 +17732,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewLevelUpLearnset, .teachableLearnset = sMewTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 1bfbb41bec..ee4ab08f38 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -6772,6 +6772,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Raikou ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRaikouLevelUpLearnset, .teachableLearnset = sRaikouTeachableLearnset, }, @@ -6846,6 +6847,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Entei ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnteiLevelUpLearnset, .teachableLearnset = sEnteiTeachableLearnset, }, @@ -6920,6 +6922,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Suicune ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSuicuneLevelUpLearnset, .teachableLearnset = sSuicuneTeachableLearnset, }, @@ -7243,6 +7246,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLugiaLevelUpLearnset, .teachableLearnset = sLugiaTeachableLearnset, }, @@ -7316,6 +7320,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoOhLevelUpLearnset, .teachableLearnset = sHoOhTeachableLearnset, }, @@ -7389,6 +7394,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCelebiLevelUpLearnset, .teachableLearnset = sCelebiTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 8a23bb05fd..667dc54d0e 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -10212,6 +10212,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Regirock ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegirockLevelUpLearnset, .teachableLearnset = sRegirockTeachableLearnset, }, @@ -10281,6 +10282,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Regice ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegiceLevelUpLearnset, .teachableLearnset = sRegiceTeachableLearnset, }, @@ -10351,6 +10353,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Registeel ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegisteelLevelUpLearnset, .teachableLearnset = sRegisteelTeachableLearnset, }, @@ -10421,6 +10424,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Latias ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiasLevelUpLearnset, .teachableLearnset = sLatiasTeachableLearnset, .formSpeciesIdTable = sLatiasFormSpeciesIdTable, @@ -10479,6 +10483,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = FOOTPRINT(Latias) .isLegendary = TRUE, .isMegaEvolution = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiasLevelUpLearnset, .teachableLearnset = sLatiasTeachableLearnset, .formSpeciesIdTable = sLatiasFormSpeciesIdTable, @@ -10552,6 +10557,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Latios ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiosLevelUpLearnset, .teachableLearnset = sLatiosTeachableLearnset, .formSpeciesIdTable = sLatiosFormSpeciesIdTable, @@ -10610,6 +10616,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = FOOTPRINT(Latios) .isLegendary = TRUE, .isMegaEvolution = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiosLevelUpLearnset, .teachableLearnset = sLatiosTeachableLearnset, .formSpeciesIdTable = sLatiosFormSpeciesIdTable, @@ -10684,6 +10691,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyogreLevelUpLearnset, .teachableLearnset = sKyogreTeachableLearnset, .formSpeciesIdTable = sKyogreFormSpeciesIdTable, @@ -10741,6 +10749,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyogreLevelUpLearnset, .teachableLearnset = sKyogreTeachableLearnset, .formSpeciesIdTable = sKyogreFormSpeciesIdTable, @@ -10814,6 +10823,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGroudonLevelUpLearnset, .teachableLearnset = sGroudonTeachableLearnset, .formSpeciesIdTable = sGroudonFormSpeciesIdTable, @@ -10872,6 +10882,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGroudonLevelUpLearnset, .teachableLearnset = sGroudonTeachableLearnset, .formSpeciesIdTable = sGroudonFormSpeciesIdTable, @@ -10948,6 +10959,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRayquazaLevelUpLearnset, .teachableLearnset = sRayquazaTeachableLearnset, .formSpeciesIdTable = sRayquazaFormSpeciesIdTable, @@ -11008,6 +11020,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRayquazaLevelUpLearnset, .teachableLearnset = sRayquazaTeachableLearnset, .formSpeciesIdTable = sRayquazaFormSpeciesIdTable, @@ -11084,6 +11097,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sJirachiLevelUpLearnset, .teachableLearnset = sJirachiTeachableLearnset, }, @@ -11154,6 +11168,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysNormalLevelUpLearnset, .teachableLearnset = sDeoxysNormalTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11215,6 +11230,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysAttackLevelUpLearnset, .teachableLearnset = sDeoxysAttackTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11276,6 +11292,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysDefenseLevelUpLearnset, .teachableLearnset = sDeoxysDefenseTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11337,6 +11354,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysSpeedLevelUpLearnset, .teachableLearnset = sDeoxysSpeedTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index faa9ed73b4..828d098a5a 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -5235,6 +5235,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Uxie ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUxieLevelUpLearnset, .teachableLearnset = sUxieTeachableLearnset, }, @@ -5307,6 +5308,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Mesprit ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMespritLevelUpLearnset, .teachableLearnset = sMespritTeachableLearnset, }, @@ -5378,6 +5380,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Azelf ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sAzelfLevelUpLearnset, .teachableLearnset = sAzelfTeachableLearnset, }, @@ -5450,6 +5453,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDialgaLevelUpLearnset, .teachableLearnset = sDialgaTeachableLearnset, .formSpeciesIdTable = sDialgaFormSpeciesIdTable, @@ -5514,6 +5518,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDialgaLevelUpLearnset, .teachableLearnset = sDialgaTeachableLearnset, .formSpeciesIdTable = sDialgaFormSpeciesIdTable, @@ -5588,6 +5593,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPalkiaLevelUpLearnset, .teachableLearnset = sPalkiaTeachableLearnset, .formSpeciesIdTable = sPalkiaFormSpeciesIdTable, @@ -5652,6 +5658,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPalkiaLevelUpLearnset, .teachableLearnset = sPalkiaTeachableLearnset, .formSpeciesIdTable = sPalkiaFormSpeciesIdTable, @@ -5723,6 +5730,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Heatran ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHeatranLevelUpLearnset, .teachableLearnset = sHeatranTeachableLearnset, }, @@ -5792,6 +5800,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Regigigas ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegigigasLevelUpLearnset, .teachableLearnset = sRegigigasTeachableLearnset, }, @@ -5864,6 +5873,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGiratinaLevelUpLearnset, .teachableLearnset = sGiratinaTeachableLearnset, .formSpeciesIdTable = sGiratinaFormSpeciesIdTable, @@ -5929,6 +5939,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGiratinaLevelUpLearnset, .teachableLearnset = sGiratinaTeachableLearnset, .formSpeciesIdTable = sGiratinaFormSpeciesIdTable, @@ -6001,6 +6012,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Cresselia ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCresseliaLevelUpLearnset, .teachableLearnset = sCresseliaTeachableLearnset, }, @@ -6072,6 +6084,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPhioneLevelUpLearnset, .teachableLearnset = sPhioneTeachableLearnset, }, @@ -6141,6 +6154,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sManaphyLevelUpLearnset, .teachableLearnset = sManaphyTeachableLearnset, }, @@ -6213,6 +6227,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDarkraiLevelUpLearnset, .teachableLearnset = sDarkraiTeachableLearnset, }, @@ -6287,6 +6302,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sShayminLandLevelUpLearnset, .teachableLearnset = sShayminLandTeachableLearnset, .formSpeciesIdTable = sShayminFormSpeciesIdTable, @@ -6350,6 +6366,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = FOOTPRINT(Shaymin) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sShayminSkyLevelUpLearnset, .teachableLearnset = sShayminSkyTeachableLearnset, .formSpeciesIdTable = sShayminFormSpeciesIdTable, @@ -6375,63 +6392,64 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 1, #endif -#define ARCEUS_SPECIES_INFO(type, typeName, iconPal) \ - { \ - .baseHP = 120, \ - .baseAttack = 120, \ - .baseDefense = 120, \ - .baseSpeed = 120, \ - .baseSpAttack = 120, \ - .baseSpDefense = 120, \ - .types = MON_TYPES(type), \ - .catchRate = 3, \ - .expYield = ARCEUS_EXP_YIELD, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_MULTITYPE, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_WHITE, \ - .speciesName = _("Arceus"), \ - .cryId = CRY_ARCEUS, \ - .natDexNum = NATIONAL_DEX_ARCEUS, \ - .categoryName = _("Alpha"), \ - .height = 32, \ - .weight = 3200, \ - .description = gArceusPokedexText, \ - .pokemonScale = 256, \ - .pokemonOffset = 0, \ - .trainerScale = 495, \ - .trainerOffset = 10, \ - .frontPic = gMonFrontPic_Arceus, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Arceus, \ - .frontAnimId = ANIM_GROW_VIBRATE, \ - .backPic = gMonBackPic_Arceus, \ - .backPicSize = MON_COORDS_SIZE(64, 64), \ - .backPicYOffset = 3, \ - .backAnimId = BACK_ANIM_GROW_STUTTER, \ - .palette = gMonPalette_Arceus ##typeName, \ - .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ - ARCEUS_ICON(typeName, iconPal) \ - FOOTPRINT(Arceus) \ - OVERWORLD( \ - sPicTable_Arceus ##typeName, \ - SIZE_64x64, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Arceus ##typeName, \ - gShinyOverworldPalette_Arceus ##typeName \ - ) \ - .levelUpLearnset = sArceusLevelUpLearnset, \ - .teachableLearnset = sArceusTeachableLearnset, \ - .formSpeciesIdTable = sArceusFormSpeciesIdTable, \ - .formChangeTable = sArceusFormChangeTable, \ - .isMythical = TRUE, \ - .isFrontierBanned = TRUE, \ +#define ARCEUS_SPECIES_INFO(type, typeName, iconPal) \ + { \ + .baseHP = 120, \ + .baseAttack = 120, \ + .baseDefense = 120, \ + .baseSpeed = 120, \ + .baseSpAttack = 120, \ + .baseSpDefense = 120, \ + .types = MON_TYPES(type), \ + .catchRate = 3, \ + .expYield = ARCEUS_EXP_YIELD, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_MULTITYPE, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_WHITE, \ + .speciesName = _("Arceus"), \ + .cryId = CRY_ARCEUS, \ + .natDexNum = NATIONAL_DEX_ARCEUS, \ + .categoryName = _("Alpha"), \ + .height = 32, \ + .weight = 3200, \ + .description = gArceusPokedexText, \ + .pokemonScale = 256, \ + .pokemonOffset = 0, \ + .trainerScale = 495, \ + .trainerOffset = 10, \ + .frontPic = gMonFrontPic_Arceus, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Arceus, \ + .frontAnimId = ANIM_GROW_VIBRATE, \ + .backPic = gMonBackPic_Arceus, \ + .backPicSize = MON_COORDS_SIZE(64, 64), \ + .backPicYOffset = 3, \ + .backAnimId = BACK_ANIM_GROW_STUTTER, \ + .palette = gMonPalette_Arceus ##typeName, \ + .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ + ARCEUS_ICON(typeName, iconPal) \ + FOOTPRINT(Arceus) \ + OVERWORLD( \ + sPicTable_Arceus ##typeName, \ + SIZE_64x64, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Arceus ##typeName, \ + gShinyOverworldPalette_Arceus ##typeName \ + ) \ + .levelUpLearnset = sArceusLevelUpLearnset, \ + .teachableLearnset = sArceusTeachableLearnset, \ + .formSpeciesIdTable = sArceusFormSpeciesIdTable, \ + .formChangeTable = sArceusFormChangeTable, \ + .isMythical = TRUE, \ + .isFrontierBanned = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_ARCEUS_NORMAL] = ARCEUS_SPECIES_INFO(TYPE_NORMAL, Normal, 1), diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index ffa2dd4a1c..2495cfa961 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -62,6 +62,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVictiniLevelUpLearnset, .teachableLearnset = sVictiniTeachableLearnset, }, @@ -10795,6 +10796,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Cobalion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCobalionLevelUpLearnset, .teachableLearnset = sCobalionTeachableLearnset, }, @@ -10858,6 +10860,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Terrakion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerrakionLevelUpLearnset, .teachableLearnset = sTerrakionTeachableLearnset, }, @@ -10921,6 +10924,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Virizion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVirizionLevelUpLearnset, .teachableLearnset = sVirizionTeachableLearnset, }, @@ -10985,6 +10989,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_TornadusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTornadusLevelUpLearnset, .teachableLearnset = sTornadusTeachableLearnset, .formSpeciesIdTable = sTornadusFormSpeciesIdTable, @@ -11040,6 +11045,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 1, FOOTPRINT(Tornadus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTornadusLevelUpLearnset, .teachableLearnset = sTornadusTeachableLearnset, .formSpeciesIdTable = sTornadusFormSpeciesIdTable, @@ -11106,6 +11112,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_ThundurusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sThundurusLevelUpLearnset, .teachableLearnset = sThundurusTeachableLearnset, .formSpeciesIdTable = sThundurusFormSpeciesIdTable, @@ -11162,6 +11169,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 0, FOOTPRINT(Thundurus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sThundurusLevelUpLearnset, .teachableLearnset = sThundurusTeachableLearnset, .formSpeciesIdTable = sThundurusFormSpeciesIdTable, @@ -11228,6 +11236,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sReshiramLevelUpLearnset, .teachableLearnset = sReshiramTeachableLearnset, }, @@ -11292,6 +11301,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZekromLevelUpLearnset, .teachableLearnset = sZekromTeachableLearnset, }, @@ -11356,6 +11366,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_LandorusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLandorusLevelUpLearnset, .teachableLearnset = sLandorusTeachableLearnset, .formSpeciesIdTable = sLandorusFormSpeciesIdTable, @@ -11411,6 +11422,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 0, FOOTPRINT(Landorus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLandorusLevelUpLearnset, .teachableLearnset = sLandorusTeachableLearnset, .formSpeciesIdTable = sLandorusFormSpeciesIdTable, @@ -11480,6 +11492,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11544,6 +11557,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremWhiteLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11607,6 +11621,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremBlackLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11673,6 +11688,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKeldeoLevelUpLearnset, .teachableLearnset = sKeldeoTeachableLearnset, .formSpeciesIdTable = sKeldeoFormSpeciesIdTable, @@ -11730,6 +11746,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = FOOTPRINT(Keldeo) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKeldeoLevelUpLearnset, .teachableLearnset = sKeldeoTeachableLearnset, .formSpeciesIdTable = sKeldeoFormSpeciesIdTable, @@ -11802,6 +11819,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeloettaLevelUpLearnset, .teachableLearnset = sMeloettaTeachableLearnset, .formSpeciesIdTable = sMeloettaFormSpeciesIdTable, @@ -11871,6 +11889,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeloettaLevelUpLearnset, .teachableLearnset = sMeloettaTeachableLearnset, .formSpeciesIdTable = sMeloettaFormSpeciesIdTable, @@ -11879,66 +11898,67 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = #endif //P_FAMILY_MELOETTA #if P_FAMILY_GENESECT -#define GENESECT_SPECIES_INFO(form) \ - { \ - .baseHP = 71, \ - .baseAttack = 120, \ - .baseDefense = 95, \ - .baseSpeed = 99, \ - .baseSpAttack = 120, \ - .baseSpDefense = 95, \ - .types = MON_TYPES(TYPE_BUG, TYPE_STEEL), \ - .catchRate = 3, \ - .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, \ - .evYield_Attack = 1, \ - .evYield_Speed = 1, \ - .evYield_SpAttack = 1, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_DOWNLOAD, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_PURPLE, \ - .speciesName = _("Genesect"), \ - .cryId = CRY_GENESECT, \ - .natDexNum = NATIONAL_DEX_GENESECT, \ - .categoryName = _("Paleozoic"), \ - .height = 15, \ - .weight = 825, \ - .description = gGenesectPokedexText, \ - .pokemonScale = 268, \ - .pokemonOffset = 2, \ - .trainerScale = 271, \ - .trainerOffset = 0, \ - .frontPic = gMonFrontPic_Genesect, \ - .frontPicSize = MON_COORDS_SIZE(56, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Genesect, \ - .frontAnimId = ANIM_H_VIBRATE, \ - .backPic = gMonBackPic_Genesect, \ - .backPicSize = MON_COORDS_SIZE(64, 48), \ - .backPicYOffset = 8, \ - .backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, \ - .palette = gMonPalette_##form, \ - .shinyPalette = gMonShinyPalette_##form, \ - .iconSprite = gMonIcon_Genesect, \ - .iconPalIndex = 2, \ - FOOTPRINT(Genesect) \ - OVERWORLD( \ - sPicTable_Genesect, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Genesect, \ - gShinyOverworldPalette_Genesect \ - ) \ - .levelUpLearnset = sGenesectLevelUpLearnset, \ - .teachableLearnset = sGenesectTeachableLearnset, \ - .formSpeciesIdTable = sGenesectFormSpeciesIdTable, \ - .formChangeTable = sGenesectFormChangeTable, \ - .isMythical = TRUE, \ - .isFrontierBanned = TRUE, \ +#define GENESECT_SPECIES_INFO(form) \ + { \ + .baseHP = 71, \ + .baseAttack = 120, \ + .baseDefense = 95, \ + .baseSpeed = 99, \ + .baseSpAttack = 120, \ + .baseSpDefense = 95, \ + .types = MON_TYPES(TYPE_BUG, TYPE_STEEL), \ + .catchRate = 3, \ + .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, \ + .evYield_Attack = 1, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_DOWNLOAD, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .speciesName = _("Genesect"), \ + .cryId = CRY_GENESECT, \ + .natDexNum = NATIONAL_DEX_GENESECT, \ + .categoryName = _("Paleozoic"), \ + .height = 15, \ + .weight = 825, \ + .description = gGenesectPokedexText, \ + .pokemonScale = 268, \ + .pokemonOffset = 2, \ + .trainerScale = 271, \ + .trainerOffset = 0, \ + .frontPic = gMonFrontPic_Genesect, \ + .frontPicSize = MON_COORDS_SIZE(56, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Genesect, \ + .frontAnimId = ANIM_H_VIBRATE, \ + .backPic = gMonBackPic_Genesect, \ + .backPicSize = MON_COORDS_SIZE(64, 48), \ + .backPicYOffset = 8, \ + .backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, \ + .palette = gMonPalette_##form, \ + .shinyPalette = gMonShinyPalette_##form, \ + .iconSprite = gMonIcon_Genesect, \ + .iconPalIndex = 2, \ + FOOTPRINT(Genesect) \ + OVERWORLD( \ + sPicTable_Genesect, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Genesect, \ + gShinyOverworldPalette_Genesect \ + ) \ + .levelUpLearnset = sGenesectLevelUpLearnset, \ + .teachableLearnset = sGenesectTeachableLearnset, \ + .formSpeciesIdTable = sGenesectFormSpeciesIdTable, \ + .formChangeTable = sGenesectFormChangeTable, \ + .isMythical = TRUE, \ + .isFrontierBanned = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_GENESECT] = GENESECT_SPECIES_INFO(Genesect), diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 46c776639c..c984ce9547 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -5280,6 +5280,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXerneasLevelUpLearnset, .teachableLearnset = sXerneasTeachableLearnset, .formSpeciesIdTable = sXerneasFormSpeciesIdTable, @@ -5340,6 +5341,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXerneasLevelUpLearnset, .teachableLearnset = sXerneasTeachableLearnset, .formSpeciesIdTable = sXerneasFormSpeciesIdTable, @@ -5407,6 +5409,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sYveltalLevelUpLearnset, .teachableLearnset = sYveltalTeachableLearnset, }, @@ -5468,6 +5471,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5528,6 +5532,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5580,6 +5585,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5633,6 +5639,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5690,6 +5697,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5757,6 +5765,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDiancieLevelUpLearnset, .teachableLearnset = sDiancieTeachableLearnset, .formSpeciesIdTable = sDiancieFormSpeciesIdTable, @@ -5816,6 +5825,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .isMythical = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDiancieLevelUpLearnset, .teachableLearnset = sDiancieTeachableLearnset, .formSpeciesIdTable = sDiancieFormSpeciesIdTable, @@ -5884,6 +5894,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoopaConfinedLevelUpLearnset, .teachableLearnset = sHoopaConfinedTeachableLearnset, .formSpeciesIdTable = sHoopaFormSpeciesIdTable, @@ -5949,6 +5960,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoopaUnboundLevelUpLearnset, .teachableLearnset = sHoopaUnboundTeachableLearnset, .formSpeciesIdTable = sHoopaFormSpeciesIdTable, @@ -6015,6 +6027,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVolcanionLevelUpLearnset, .teachableLearnset = sVolcanionTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index 4669051d04..c16220ca62 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -989,6 +989,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Gumshoos ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGumshoosLevelUpLearnset, .teachableLearnset = sGumshoosTeachableLearnset, .formSpeciesIdTable = sGumshoosFormSpeciesIdTable, @@ -1234,6 +1235,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Vikavolt ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVikavoltLevelUpLearnset, .teachableLearnset = sVikavoltTeachableLearnset, .formSpeciesIdTable = sVikavoltFormSpeciesIdTable, @@ -1781,6 +1783,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Ribombee ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRibombeeLevelUpLearnset, .teachableLearnset = sRibombeeTeachableLearnset, .formSpeciesIdTable = sRibombeeFormSpeciesIdTable, @@ -2641,6 +2644,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Araquanid ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sAraquanidLevelUpLearnset, .teachableLearnset = sAraquanidTeachableLearnset, .formSpeciesIdTable = sAraquanidFormSpeciesIdTable, @@ -2824,6 +2828,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Lurantis ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLurantisLevelUpLearnset, .teachableLearnset = sLurantisTeachableLearnset, .formSpeciesIdTable = sLurantisFormSpeciesIdTable, @@ -3135,6 +3140,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Salazzle ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSalazzleLevelUpLearnset, .teachableLearnset = sSalazzleTeachableLearnset, .formSpeciesIdTable = sSalanditFormSpeciesIdTable, @@ -4018,70 +4024,72 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TypeNull ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTypeNullLevelUpLearnset, .teachableLearnset = sTypeNullTeachableLearnset, .evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_SILVALLY_NORMAL}), }, -#define SILVALLY_SPECIES_INFO(type, _palette) \ - { \ - .baseHP = 95, \ - .baseAttack = 95, \ - .baseDefense = 95, \ - .baseSpeed = 95, \ - .baseSpAttack = 95, \ - .baseSpDefense = 95, \ - .types = MON_TYPES(type), \ - .catchRate = 3, \ - .expYield = 257, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_RKS_SYSTEM, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_GRAY, \ - .isLegendary = TRUE, \ - .speciesName = _("Silvally"), \ - .cryId = CRY_SILVALLY, \ - .natDexNum = NATIONAL_DEX_SILVALLY, \ - .categoryName = _("Synthetic"), \ - .height = 23, \ - .weight = 1005, \ - .description = (type == TYPE_NORMAL \ - ? gSilvallyNormalPokedexText \ - : gSilvallyMemoryPokedexText), \ - .pokemonScale = 256, \ - .pokemonOffset = 0, \ - .trainerScale = 342, \ - .trainerOffset = 7, \ - .frontPic = gMonFrontPic_Silvally, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Silvally, \ - .frontAnimId = ANIM_V_SHAKE, \ - .backPic = gMonBackPic_Silvally, \ - .backPicSize = MON_COORDS_SIZE(56, 64), \ - .backPicYOffset = 0, \ - /*.backAnimId = BACK_ANIM_NONE,*/ \ - .palette = gMonPalette_Silvally##_palette, \ - .shinyPalette = gMonShinyPalette_Silvally##_palette, \ - .iconSprite = gMonIcon_Silvally, \ - .iconPalIndex = 0, \ - FOOTPRINT(Silvally) \ - OVERWORLD( \ - sPicTable_Silvally, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Silvally, \ - gShinyOverworldPalette_Silvally \ - ) \ - .levelUpLearnset = sSilvallyLevelUpLearnset, \ - .teachableLearnset = sSilvallyTeachableLearnset, \ - .formSpeciesIdTable = sSilvallyFormSpeciesIdTable, \ - .formChangeTable = sSilvallyFormChangeTable, \ +#define SILVALLY_SPECIES_INFO(type, _palette) \ + { \ + .baseHP = 95, \ + .baseAttack = 95, \ + .baseDefense = 95, \ + .baseSpeed = 95, \ + .baseSpAttack = 95, \ + .baseSpDefense = 95, \ + .types = MON_TYPES(type), \ + .catchRate = 3, \ + .expYield = 257, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_RKS_SYSTEM, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_GRAY, \ + .speciesName = _("Silvally"), \ + .cryId = CRY_SILVALLY, \ + .natDexNum = NATIONAL_DEX_SILVALLY, \ + .categoryName = _("Synthetic"), \ + .height = 23, \ + .weight = 1005, \ + .description = (type == TYPE_NORMAL \ + ? gSilvallyNormalPokedexText \ + : gSilvallyMemoryPokedexText), \ + .pokemonScale = 256, \ + .pokemonOffset = 0, \ + .trainerScale = 342, \ + .trainerOffset = 7, \ + .frontPic = gMonFrontPic_Silvally, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Silvally, \ + .frontAnimId = ANIM_V_SHAKE, \ + .backPic = gMonBackPic_Silvally, \ + .backPicSize = MON_COORDS_SIZE(56, 64), \ + .backPicYOffset = 0, \ + /*.backAnimId = BACK_ANIM_NONE,*/ \ + .palette = gMonPalette_Silvally##_palette, \ + .shinyPalette = gMonShinyPalette_Silvally##_palette, \ + .iconSprite = gMonIcon_Silvally, \ + .iconPalIndex = 0, \ + FOOTPRINT(Silvally) \ + OVERWORLD( \ + sPicTable_Silvally, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Silvally, \ + gShinyOverworldPalette_Silvally \ + ) \ + .isLegendary = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ + .levelUpLearnset = sSilvallyLevelUpLearnset, \ + .teachableLearnset = sSilvallyTeachableLearnset, \ + .formSpeciesIdTable = sSilvallyFormSpeciesIdTable, \ + .formChangeTable = sSilvallyFormChangeTable, \ } [SPECIES_SILVALLY_NORMAL] = SILVALLY_SPECIES_INFO(TYPE_NORMAL, Normal), @@ -4455,6 +4463,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Togedemaru ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTogedemaruLevelUpLearnset, .teachableLearnset = sTogedemaruTeachableLearnset, .eggMoveLearnset = sTogedemaruEggMoveLearnset, @@ -4621,6 +4630,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .iconPalIndex = 1, FOOTPRINT(Mimikyu) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, .eggMoveLearnset = sMimikyuEggMoveLearnset, @@ -4674,6 +4684,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .iconPalIndex = 1, FOOTPRINT(Mimikyu) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, .eggMoveLearnset = sMimikyuEggMoveLearnset, @@ -5113,6 +5124,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_KommoO ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKommoOLevelUpLearnset, .teachableLearnset = sKommoOTeachableLearnset, .formSpeciesIdTable = sKommoOFormSpeciesIdTable, @@ -5178,6 +5190,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuKoko ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuKokoLevelUpLearnset, .teachableLearnset = sTapuKokoTeachableLearnset, }, @@ -5242,6 +5255,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuLele ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuLeleLevelUpLearnset, .teachableLearnset = sTapuLeleTeachableLearnset, }, @@ -5306,6 +5320,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuBulu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuBuluLevelUpLearnset, .teachableLearnset = sTapuBuluTeachableLearnset, }, @@ -5371,6 +5386,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuFini ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuFiniLevelUpLearnset, .teachableLearnset = sTapuFiniTeachableLearnset, }, @@ -5437,6 +5453,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .tmIlliterate = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCosmogLevelUpLearnset, .teachableLearnset = sCosmogTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 43, SPECIES_COSMOEM}), @@ -5503,6 +5520,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .tmIlliterate = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCosmoemLevelUpLearnset, .teachableLearnset = sCosmoemTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL_DAY, 53, SPECIES_SOLGALEO}, @@ -5567,6 +5585,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSolgaleoLevelUpLearnset, .teachableLearnset = sSolgaleoTeachableLearnset, }, @@ -5630,6 +5649,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLunalaLevelUpLearnset, .teachableLearnset = sLunalaTeachableLearnset, }, @@ -5694,6 +5714,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Nihilego ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNihilegoLevelUpLearnset, .teachableLearnset = sNihilegoTeachableLearnset, }, @@ -5758,6 +5779,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Buzzwole ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sBuzzwoleLevelUpLearnset, .teachableLearnset = sBuzzwoleTeachableLearnset, }, @@ -5821,6 +5843,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Pheromosa ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPheromosaLevelUpLearnset, .teachableLearnset = sPheromosaTeachableLearnset, }, @@ -5884,6 +5907,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Xurkitree ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXurkitreeLevelUpLearnset, .teachableLearnset = sXurkitreeTeachableLearnset, }, @@ -5949,6 +5973,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Celesteela ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCelesteelaLevelUpLearnset, .teachableLearnset = sCelesteelaTeachableLearnset, }, @@ -6013,6 +6038,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Kartana ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKartanaLevelUpLearnset, .teachableLearnset = sKartanaTeachableLearnset, }, @@ -6076,6 +6102,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Guzzlord ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGuzzlordLevelUpLearnset, .teachableLearnset = sGuzzlordTeachableLearnset, }, @@ -6143,6 +6170,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6209,6 +6237,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6276,6 +6305,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6339,6 +6369,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isUltraBurst = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6406,6 +6437,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMagearnaLevelUpLearnset, .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, @@ -6460,6 +6492,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = FOOTPRINT(Magearna) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMagearnaLevelUpLearnset, .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, @@ -6527,6 +6560,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMarshadowLevelUpLearnset, .teachableLearnset = sMarshadowTeachableLearnset, }, @@ -6590,6 +6624,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Poipole ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPoipoleLevelUpLearnset, .teachableLearnset = sPoipoleTeachableLearnset, .evolutions = EVOLUTION({EVO_MOVE, MOVE_DRAGON_PULSE, SPECIES_NAGANADEL}), @@ -6652,6 +6687,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Naganadel ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNaganadelLevelUpLearnset, .teachableLearnset = sNaganadelTeachableLearnset, }, @@ -6715,6 +6751,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Stakataka ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sStakatakaLevelUpLearnset, .teachableLearnset = sStakatakaTeachableLearnset, }, @@ -6778,6 +6815,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Blacephalon ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sBlacephalonLevelUpLearnset, .teachableLearnset = sBlacephalonTeachableLearnset, }, @@ -6841,6 +6879,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZeraoraLevelUpLearnset, .teachableLearnset = sZeraoraTeachableLearnset, }, @@ -6904,6 +6943,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeltanLevelUpLearnset, .teachableLearnset = sMeltanTeachableLearnset, }, @@ -6965,6 +7005,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMelmetalLevelUpLearnset, .teachableLearnset = sMelmetalTeachableLearnset, .formSpeciesIdTable = sMelmetalFormSpeciesIdTable, @@ -7023,6 +7064,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isMythical = TRUE, .isGigantamax = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMelmetalLevelUpLearnset, .teachableLearnset = sMelmetalTeachableLearnset, .formSpeciesIdTable = sMelmetalFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index 353597e96a..b4c268f2ab 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -6261,6 +6261,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZacianLevelUpLearnset, .teachableLearnset = sZacianTeachableLearnset, .formSpeciesIdTable = sZacianFormSpeciesIdTable, @@ -6325,6 +6326,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZacianLevelUpLearnset, .teachableLearnset = sZacianTeachableLearnset, .formSpeciesIdTable = sZacianFormSpeciesIdTable, @@ -6391,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZamazentaLevelUpLearnset, .teachableLearnset = sZamazentaTeachableLearnset, .formSpeciesIdTable = sZamazentaFormSpeciesIdTable, @@ -6455,6 +6458,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZamazentaLevelUpLearnset, .teachableLearnset = sZamazentaTeachableLearnset, .formSpeciesIdTable = sZamazentaFormSpeciesIdTable, @@ -6522,6 +6526,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEternatusLevelUpLearnset, .teachableLearnset = sEternatusTeachableLearnset, .formSpeciesIdTable = sEternatusFormSpeciesIdTable, @@ -6578,6 +6583,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Eternatus) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEternatusLevelUpLearnset, .teachableLearnset = sEternatusTeachableLearnset, .formSpeciesIdTable = sEternatusFormSpeciesIdTable, @@ -6641,6 +6647,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Kubfu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKubfuLevelUpLearnset, .teachableLearnset = sKubfuTeachableLearnset, .evolutions = EVOLUTION({EVO_DARK_SCROLL, 0, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE}, @@ -6706,6 +6713,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Urshifu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6763,6 +6771,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6826,6 +6835,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Urshifu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6883,6 +6893,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6950,6 +6961,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZarudeLevelUpLearnset, .teachableLearnset = sZarudeTeachableLearnset, .formSpeciesIdTable = sZarudeFormSpeciesIdTable, @@ -7004,6 +7016,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Zarude) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZarudeLevelUpLearnset, .teachableLearnset = sZarudeTeachableLearnset, .formSpeciesIdTable = sZarudeFormSpeciesIdTable, @@ -7069,6 +7082,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Regieleki ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegielekiLevelUpLearnset, .teachableLearnset = sRegielekiTeachableLearnset, }, @@ -7133,6 +7147,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Regidrago ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegidragoLevelUpLearnset, .teachableLearnset = sRegidragoTeachableLearnset, }, @@ -7195,6 +7210,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Glastrier ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGlastrierLevelUpLearnset, .teachableLearnset = sGlastrierTeachableLearnset, }, @@ -7258,6 +7274,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Spectrier ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSpectrierLevelUpLearnset, .teachableLearnset = sSpectrierTeachableLearnset, }, @@ -7322,6 +7339,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexLevelUpLearnset, .teachableLearnset = sCalyrexTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7387,6 +7405,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexIceRiderLevelUpLearnset, .teachableLearnset = sCalyrexIceRiderTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7451,6 +7470,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexShadowRiderLevelUpLearnset, .teachableLearnset = sCalyrexShadowRiderTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7517,6 +7537,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = //, gShinyOverworldPalette_EnamorusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, @@ -7579,6 +7600,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = //, gShinyOverworldPalette_EnamorusTherian ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 8880d3584d..5a8452af25 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -5436,6 +5436,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 1, FOOTPRINT(WoChien) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sWoChienLevelUpLearnset, .teachableLearnset = sWoChienTeachableLearnset, }, @@ -5491,6 +5492,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(ChienPao) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sChienPaoLevelUpLearnset, .teachableLearnset = sChienPaoTeachableLearnset, }, @@ -5546,6 +5548,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(TingLu) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTingLuLevelUpLearnset, .teachableLearnset = sTingLuTeachableLearnset, }, @@ -5602,6 +5605,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(ChiYu) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sChiYuLevelUpLearnset, .teachableLearnset = sChiYuTeachableLearnset, }, @@ -5770,6 +5774,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Koraidon) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKoraidonLevelUpLearnset, .teachableLearnset = sKoraidonTeachableLearnset, }, @@ -5826,6 +5831,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Miraidon) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMiraidonLevelUpLearnset, .teachableLearnset = sMiraidonTeachableLearnset, }, @@ -6205,6 +6211,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 1, FOOTPRINT(Okidogi) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sOkidogiLevelUpLearnset, .teachableLearnset = sOkidogiTeachableLearnset, }, @@ -6260,6 +6267,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(Munkidori) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMunkidoriLevelUpLearnset, .teachableLearnset = sMunkidoriTeachableLearnset, }, @@ -6315,6 +6323,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(Fezandipiti) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sFezandipitiLevelUpLearnset, .teachableLearnset = sFezandipitiTeachableLearnset, }, @@ -6372,6 +6381,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .formChangeTable = sOgerponFormChangeTable, \ .isLegendary = TRUE, \ .isTeraForm = isTeraform, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), @@ -6663,6 +6673,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(TerapagosNormal) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6722,6 +6733,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(TerapagosTerastal) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6780,6 +6792,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .isLegendary = TRUE, .isTeraForm = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6838,6 +6851,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Pecharunt) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPecharuntLevelUpLearnset, .teachableLearnset = sPecharuntTeachableLearnset, }, diff --git a/src/pokemon.c b/src/pokemon.c index 1807b675df..660409d6f6 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1109,7 +1109,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u16 checksum; u8 i; u8 availableIVs[NUM_STATS]; - u8 selectedIvs[LEGENDARY_PERFECT_IV_COUNT]; + u8 selectedIvs[NUM_STATS]; bool32 isShiny; ZeroBoxMonData(boxMon); @@ -1226,21 +1226,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - if (gSpeciesInfo[species].allPerfectIVs) - { - iv = MAX_PER_STAT_IVS; - SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - } - else if (P_LEGENDARY_PERFECT_IVS >= GEN_6 - && (gSpeciesInfo[species].isLegendary - || gSpeciesInfo[species].isMythical - || gSpeciesInfo[species].isUltraBeast - || gSpeciesInfo[species].isTotem)) + if (gSpeciesInfo[species].perfectIVCount != 0) { iv = MAX_PER_STAT_IVS; // Initialize a list of IV indices. @@ -1249,14 +1235,14 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, availableIVs[i] = i; } - // Select the 3 IVs that will be perfected. - for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + // Select the IVs that will be perfected. + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) { u8 index = Random() % (NUM_STATS - i); selectedIvs[i] = availableIVs[index]; RemoveIVIndexFromList(availableIVs, index); } - for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) { switch (selectedIvs[i]) { From aeb9da337e506cae3548b23b507ddb89c5975014 Mon Sep 17 00:00:00 2001 From: tertu Date: Sat, 10 Aug 2024 06:33:05 -0500 Subject: [PATCH 083/544] Add some null pointer checks (#5130) * Fix some null pointer uses * fix bad merge --- src/pokemon_storage_system.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index fe65df0114..6c9c53fd7f 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1998,7 +1998,10 @@ static void VBlankCB_PokeStorage(void) ProcessSpriteCopyRequests(); UnkUtil_Run(); TransferPlttBuffer(); - SetGpuReg(REG_OFFSET_BG2HOFS, sStorage->bg2_X); + if (sStorage != NULL) + { + SetGpuReg(REG_OFFSET_BG2HOFS, sStorage->bg2_X); + } } static void CB2_PokeStorage(void) @@ -4206,11 +4209,14 @@ static void StopFlashingCloseBoxButton(void) static void UpdateCloseBoxButtonFlash(void) { - if (sStorage->closeBoxFlashing && ++sStorage->closeBoxFlashTimer > 30) + if (sStorage != NULL) { - sStorage->closeBoxFlashTimer = 0; - sStorage->closeBoxFlashState = (sStorage->closeBoxFlashState == FALSE); - UpdateCloseBoxButtonTilemap(sStorage->closeBoxFlashState); + if (sStorage->closeBoxFlashing && ++sStorage->closeBoxFlashTimer > 30) + { + sStorage->closeBoxFlashTimer = 0; + sStorage->closeBoxFlashState = (sStorage->closeBoxFlashState == FALSE); + UpdateCloseBoxButtonTilemap(sStorage->closeBoxFlashState); + } } } From 73953b3e39353687b757fb760765cc3b66fef59e Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 10 Aug 2024 14:43:50 -0700 Subject: [PATCH 084/544] Added removeallitem --- asm/macros/event.inc | 6 ++++++ src/scrcmd.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 891c7fd4ed..f5abad6f29 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2321,3 +2321,9 @@ .macro togglefakertc callnative Script_ToggleFakeRtc .endm + + @ Remove all of specified item from the player's bag + .macro removeallitem itemId:req + callnative RemoveAllItem + .2byte \itemId + .endm diff --git a/src/scrcmd.c b/src/scrcmd.c index 319e667566..955b5e00dd 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2473,3 +2473,9 @@ void ScriptSetDoubleBattleFlag(struct ScriptContext *ctx) { sIsScriptedWildDouble = TRUE; } + +void RemoveAllItem(struct ScriptContext *ctx) +{ + u16 itemId = VarGet(ScriptReadHalfword(ctx)); + RemoveBagItem(itemId, CountTotalItemQuantityInBag(itemId)); +} From 811b5d286e02ec7f433cd3f11692c2a56370b9f4 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 10 Aug 2024 21:17:50 -0700 Subject: [PATCH 085/544] Added getobjectposition --- asm/macros/event.inc | 7 +++++++ data/specials.inc | 1 + include/event_object_movement.h | 2 ++ src/event_object_movement.c | 16 +++++++--------- src/field_specials.c | 28 ++++++++++++++++++++++++++++ 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index f5abad6f29..c6e6e8847a 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2327,3 +2327,10 @@ callnative RemoveAllItem .2byte \itemId .endm + + @ return current (posType = 0) or map (posType = 1) position of object to VAR_0x8007 (x), VAR_0x8008 (y) + .macro getobjectxy localId:req, posType:req + setvar VAR_0x8000, \localId + setvar VAR_0x8001, \posType + special GetObjectPosition + .endm diff --git a/data/specials.inc b/data/specials.inc index f02497d603..32f2f63308 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -554,3 +554,4 @@ gSpecials:: def_special Script_GetChosenMonDefensiveEVs def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs + def_special GetObjectPosition diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 2906789b37..92675f01f7 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -126,6 +126,7 @@ bool8 TryGetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId, u u8 GetObjectEventIdByXY(s16 x, s16 y); void SetObjectEventDirection(struct ObjectEvent *objectEvent, u8 direction); u8 GetFirstInactiveObjectEventId(void); +u8 GetObjectEventIdByLocalId(u8); void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup); void LoadSpecialObjectReflectionPalette(u16 tag, u8 slot); void TryMoveObjectEventToMapCoords(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); @@ -210,6 +211,7 @@ void ObjectEventForceSetHeldMovement(struct ObjectEvent *objectEvent, u8 movemen bool8 ObjectEventIsMovementOverridden(struct ObjectEvent *objectEvent); u8 ObjectEventCheckHeldMovementStatus(struct ObjectEvent *objectEvent); u8 ObjectEventGetHeldMovementActionId(struct ObjectEvent *objectEvent); +const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, const struct ObjectEventTemplate *, u8); void TryOverrideTemplateCoordsForObjectEvent(const struct ObjectEvent *objectEvent, u8 movementType); void OverrideTemplateCoordsForObjectEvent(const struct ObjectEvent *objectEvent); void ShiftStillObjectEventCoords(struct ObjectEvent *objEvent); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 5a6eb28fc3..e4732cac96 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -157,7 +157,6 @@ static void ApplyLevitateMovement(u8); static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *); static bool8 MovementType_Buried_Callback(struct ObjectEvent *, struct Sprite *); static void CreateReflectionEffectSprites(void); -static u8 GetObjectEventIdByLocalId(u8); static u8 GetObjectEventIdByLocalIdAndMapInternal(u8, u8, u8); static bool8 GetAvailableObjectEventId(u16, u8, u8, u8 *); static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *); @@ -179,7 +178,6 @@ static void SpriteCB_CameraObject(struct Sprite *); static void CameraObject_Init(struct Sprite *); static void CameraObject_UpdateMove(struct Sprite *); static void CameraObject_UpdateFrozen(struct Sprite *); -static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, const struct ObjectEventTemplate *, u8); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8); static void InitSpriteForFigure8Anim(struct Sprite *); @@ -1298,7 +1296,7 @@ static u8 GetObjectEventIdByLocalIdAndMapInternal(u8 localId, u8 mapNum, u8 mapG return OBJECT_EVENTS_COUNT; } -static u8 GetObjectEventIdByLocalId(u8 localId) +u8 GetObjectEventIdByLocalId(u8 localId) { u8 i; for (i = 0; i < OBJECT_EVENTS_COUNT; i++) @@ -1493,7 +1491,7 @@ static s16 ReallocSpriteTiles(struct Sprite *sprite, u32 byteSize) { i = -1; } - + sprite->invisible = wasVisible; return i; } @@ -1510,7 +1508,7 @@ u16 LoadSheetGraphicsInfo(const struct ObjectEventGraphicsInfo *info, u16 uuid, bool32 oldInvisible; if (tag == TAG_NONE) tag = COMP_OW_TILE_TAG_BASE + uuid; - + if (sprite) { oldInvisible = sprite->invisible; @@ -1547,7 +1545,7 @@ u16 LoadSheetGraphicsInfo(const struct ObjectEventGraphicsInfo *info, u16 uuid, { FieldEffectFreeTilesIfUnused(oldTiles); } - + if (sprite) { sprite->sheetTileStart = tileStart; @@ -1566,7 +1564,7 @@ u16 LoadSheetGraphicsInfo(const struct ObjectEventGraphicsInfo *info, u16 uuid, { sprite->oam.tileNum = sprite->sheetTileStart; sprite->usingSheet = FALSE; - + } else if (sprite && !sprite->sheetTileStart && sprite->oam.size != info->oam->size) { @@ -1925,7 +1923,7 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) spritePalette.data = gSpeciesInfo[species].overworldShinyPalette; else spritePalette.data = gSpeciesInfo[species].overworldPalette; - + // Check if pal data must be decompressed if (IsLZ77Data(spritePalette.data, PLTT_SIZE_4BPP, PLTT_SIZE_4BPP)) { @@ -3306,7 +3304,7 @@ static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u return FindObjectEventTemplateByLocalId(localId, templates, count); } -static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, const struct ObjectEventTemplate *templates, u8 count) +const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, const struct ObjectEventTemplate *templates, u8 count) { u8 i; diff --git a/src/field_specials.c b/src/field_specials.c index b44c8327aa..471d88132c 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4266,3 +4266,31 @@ void PreparePartyForSkyBattle(void) VarSet(B_VAR_SKY_BATTLE,participatingPokemonSlot); CompactPartySlots(); } + +// get position (0 for current, 1 for map) of object event, return to VAR_0x8007, VAR_0x8008 +void GetObjectPosition(void) +{ + u16 localId = gSpecialVar_0x8000; + u16 useTemplate = gSpecialVar_0x8001; + + u16 *x = &gSpecialVar_0x8007; + u16 *y = &gSpecialVar_0x8008; + + if (!useTemplate) + { + /* current position */ + const u16 objId = GetObjectEventIdByLocalId(localId); + const struct ObjectEvent *objEvent = &gObjectEvents[objId]; + *x = objEvent->currentCoords.x - 7; // subtract out camera size + *y = objEvent->currentCoords.y - 7; + } + else + { + const struct ObjectEventTemplate *objTemplate = + FindObjectEventTemplateByLocalId(localId, + gSaveBlock1Ptr->objectEventTemplates, + gMapHeader.events->objectEventCount); + *x = objTemplate->x; + *y = objTemplate->y; + } +} From 0784f9fa740f697ecf1ef32c809014304603a8a4 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 10 Aug 2024 21:40:57 -0700 Subject: [PATCH 086/544] Added checkobjectat --- asm/macros/event.inc | 7 +++++++ data/specials.inc | 1 + src/field_specials.c | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index c6e6e8847a..0fb6414f61 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2334,3 +2334,10 @@ setvar VAR_0x8001, \posType special GetObjectPosition .endm + + @ checks if there is any object at a given position + .macro checkobjectat x:req, y:req + setorcopyvar VAR_0x8005, \x + setorcopyvar VAR_0x8006, \y + specialvar VAR_RESULT, CheckObjectAtXY + .endm diff --git a/data/specials.inc b/data/specials.inc index 32f2f63308..aa994a31f6 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -555,3 +555,4 @@ gSpecials:: def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs def_special GetObjectPosition + def_special CheckObjectAtXY diff --git a/src/field_specials.c b/src/field_specials.c index 471d88132c..3014d48407 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4294,3 +4294,19 @@ void GetObjectPosition(void) *y = objTemplate->y; } } + +// special to check if there is any object at a given position +u16 CheckObjectAtXY(void) +{ + u16 x = gSpecialVar_0x8005 + 7; + u16 y = gSpecialVar_0x8006 + 7; + u32 i; + + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (gObjectEvents[i].active && gObjectEvents[i].currentCoords.x == x && gObjectEvents[i].currentCoords.y == y) + return TRUE; + } + return FALSE; +} + From 97fa0be36e3013d77400cf6572f505281bb87159 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:18:56 +0200 Subject: [PATCH 087/544] Dynamic move type clean up (#5132) * Minor clean up of the new function DynamicMoveType * wrongly removed func * Overworld Weather Bug * wrong comparison --- include/pokemon.h | 3 +- src/pokemon.c | 108 ++++++++++++++++++++++++++++------------------ 2 files changed, 67 insertions(+), 44 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index 8337890935..2187b7ab38 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -880,7 +880,6 @@ const u8 *GetMoveName(u16 moveId); const u8 *GetMoveAnimationScript(u16 moveId); void UpdateDaysPassedSinceFormChange(u16 days); void TrySetDayLimitToFormChange(struct Pokemon *mon); -u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler); -u8 CalculateHiddenPowerType(struct Pokemon *mon); +u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler); #endif // GUARD_POKEMON_H diff --git a/src/pokemon.c b/src/pokemon.c index 04bdfc9046..78e19dfc8b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6929,7 +6929,26 @@ void UpdateDaysPassedSinceFormChange(u16 days) } } -u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) +static inline u32 CalculateHiddenPowerType(struct Pokemon *mon) +{ + u32 typehp; + u32 type; + u8 typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) + | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) + | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) + | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) + | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) + | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); + + type = (15 * typeBits) / 63 + 2; + if (type >= TYPE_MYSTERY) + type++; + type |= 0xC0; + typehp = type & 0x3F; + return typehp; +} + +u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) { u32 type = gMovesInfo[move].type; u32 species = GetMonData(mon, MON_DATA_SPECIES); @@ -6940,9 +6959,9 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) u32 type2 = gSpeciesInfo[species].types[1]; if (move == MOVE_IVY_CUDGEL - && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA - || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA - || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) + && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA + || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA + || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) { type = type2; } @@ -6980,13 +6999,13 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) else return TYPE_NORMAL; } - else if (move == MOVE_RAGING_BULL - && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED - || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED - || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) + else if (move == MOVE_RAGING_BULL + && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED + || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED + || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) { return type2; - } + } else if (move == MOVE_REVELATION_DANCE) { if (gBattleMons[battler].species != species && type1 != TYPE_MYSTERY) @@ -6994,7 +7013,7 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) else if (gBattleMons[battler].species != species && type2 != TYPE_MYSTERY) type = type2; else if (GetBattlerTeraType(battler) != TYPE_STELLAR && (GetActiveGimmick(battler) == GIMMICK_TERA || IsGimmickSelected(battler, GIMMICK_TERA))) - type = GetMonData(mon, MON_DATA_TERA_TYPE); + type = GetMonData(mon, MON_DATA_TERA_TYPE); else if (gBattleMons[battler].types[0] != TYPE_MYSTERY) type = gBattleMons[battler].types[0]; else if (gBattleMons[battler].types[1] != TYPE_MYSTERY) @@ -7002,10 +7021,10 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) else if (gBattleMons[battler].types[2] != TYPE_MYSTERY) type = gBattleMons[battler].types[2]; } - else if (gMovesInfo[move].effect == EFFECT_TERRAIN_PULSE - && ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species) + else if (gMovesInfo[move].effect == EFFECT_TERRAIN_PULSE + && ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species) || (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY) && gBattleMons[battler].species == species))) - { + { if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) return TYPE_ELECTRIC; else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) @@ -7015,21 +7034,45 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) return TYPE_PSYCHIC; else //failsafe - type = TYPE_NORMAL; + type = TYPE_NORMAL; } - if (gMovesInfo[move].effect == EFFECT_WEATHER_BALL && WEATHER_HAS_EFFECT) + if (gMovesInfo[move].effect == EFFECT_WEATHER_BALL) { - if (gBattleWeather & B_WEATHER_RAIN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - return TYPE_WATER; - else if (gBattleWeather & B_WEATHER_SANDSTORM) - return TYPE_ROCK; - else if (gBattleWeather & B_WEATHER_SUN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - return TYPE_FIRE; - else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) - return TYPE_ICE; + if (gMain.inBattle && WEATHER_HAS_EFFECT) + { + if (gBattleWeather & B_WEATHER_RAIN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_WATER; + else if (gBattleWeather & B_WEATHER_SANDSTORM) + return TYPE_ROCK; + else if (gBattleWeather & B_WEATHER_SUN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_FIRE; + else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) + return TYPE_ICE; + else + return TYPE_NORMAL; + } else + { + switch (gWeatherPtr->currWeather) + { + case WEATHER_SUNNY: + if (heldItem != ITEM_UTILITY_UMBRELLA) + return TYPE_FIRE; + break; + case WEATHER_RAIN: + if (heldItem != ITEM_UTILITY_UMBRELLA) + return TYPE_WATER; + break; + case WEATHER_SNOW: + return TYPE_ICE; + break; + case WEATHER_SANDSTORM: + return TYPE_ROCK; + break; + } return TYPE_NORMAL; + } } if (ability == ABILITY_NORMALIZE && gMovesInfo[move].type != TYPE_NORMAL && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) @@ -7055,22 +7098,3 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) return type; } - -u8 CalculateHiddenPowerType(struct Pokemon *mon) -{ - u32 typehp; - u32 type; - u8 typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) - | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) - | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) - | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) - | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) - | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); - - type = (15 * typeBits) / 63 + 2; - if (type >= TYPE_MYSTERY) - type++; - type |= 0xC0; - typehp = type & 0x3F; - return typehp; -} From d1183f4b8a3d1654e2426a357815b63773f6deb2 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Sun, 11 Aug 2024 08:55:51 -0700 Subject: [PATCH 088/544] Add B_SHOW_TYPES and cleaned up IsDoubleBattle (#5131) * First attempt at a port * Slightly broken but working * Got images working and opponent palettes * half finished compressed spritesheet approach instead * fix the palettes (smh) * fix hflip, and a lot of clean-up * Add B_SHOW_TYPES * Got Illusion working * Add num type enum * Updated function to get type * Fixed type icon position and cleaned up functions * Updated illusions and Tera handling * Added BATTLE_TYPE_IS_SINGLE and DOUBLE * Removed IS_BATTLE_TYPE_SINGLE * Implemented BATTLE_TYPE_IS_DOUBLE across repo * Removed SIDE macro * Updated config * Deprecated battler alive macro * Reindented file * Added exceptions for 2v1 * Replaced Fainted check with Null check * Added functionality for only types of caught mons * UseDoubleBattleCoords updated * Added ShouldFlipTypeIcon * Renamed TryLoadTypeIcon * Refactored functions * Refactored functions * Refactored functions * Refactored functions * Renamed SEEN to CAUGHT * Reset config * Added useSecondPalette and isOrdinary to gTypesInfo * Further simplified secondPalette and isOrdinary * Changed isordinary to isSpecialCase * Renamed to useSecondTypeIconPalette * Fixed Stellar type interactions * fixed spacing * fixed include/config/battle.h * fixed * fixed include/config/general.h * changed type1 and type2 * Moved IsDoubleBattle to include.battle.h Removed BATTLE_TYPE_IS_DOUBLE Removed IS_DOUBLE_BATTLE * Changed IsBattlerFainted to IsBattlerAlive * Removed IsBattlerNull * Moved GetBattlerData to be inline * Renamed GetMonDefensiveTeraType * Removed IsIllusionActive * Fixed identation * found one last isDoubleBattle hold out * fixed redundant brackets * Fixed spacing for B_SHOW_TYPES * Update src/battle_script_commands.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Fixed padding * Reindent file and refactored GetTypeIconHideMovement * Update include/data.h --------- Co-authored-by: RavePossum Co-authored-by: Frank Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- gflib/sprite.c | 2 - gflib/sprite.h | 2 + graphics/types/battle_icons1.pal | 15 + graphics/types/battle_icons1.png | Bin 0 -> 354 bytes graphics/types/battle_icons2.pal | 15 + graphics/types/battle_icons2.png | Bin 0 -> 372 bytes include/battle.h | 12 + include/battle_anim.h | 1 - include/battle_controllers.h | 5 + include/config/battle.h | 5 + include/constants/battle.h | 1 - include/data.h | 4 +- include/graphics.h | 5 + include/type_icons.h | 18 ++ src/battle_ai_main.c | 10 +- src/battle_ai_switch_items.c | 20 +- src/battle_ai_util.c | 6 +- src/battle_anim_effects_1.c | 8 +- src/battle_anim_effects_2.c | 4 +- src/battle_anim_mons.c | 7 - src/battle_anim_new.c | 22 +- src/battle_controller_opponent.c | 4 +- src/battle_controller_player.c | 20 +- src/battle_controllers.c | 8 +- src/battle_gfx_sfx_util.c | 2 +- src/battle_gimmick.c | 8 +- src/battle_main.c | 6 +- src/battle_message.c | 10 +- src/battle_script_commands.c | 73 +++-- src/battle_terastal.c | 2 +- src/battle_util.c | 22 +- src/battle_util2.c | 2 +- src/data/types_info.h | 42 +++ src/graphics.c | 6 + src/party_menu.c | 2 +- src/pokemon.c | 2 +- src/tv.c | 2 +- src/type_icons.c | 516 +++++++++++++++++++++++++++++++ 38 files changed, 758 insertions(+), 131 deletions(-) create mode 100644 graphics/types/battle_icons1.pal create mode 100644 graphics/types/battle_icons1.png create mode 100644 graphics/types/battle_icons2.pal create mode 100644 graphics/types/battle_icons2.png create mode 100644 include/type_icons.h create mode 100644 src/type_icons.c diff --git a/gflib/sprite.c b/gflib/sprite.c index 7823888cb5..9ba1662c9d 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -52,7 +52,6 @@ static void SortSprites(u32 *spritePriorities, s32 n); static u32 CreateSpriteAt(u32 index, const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority); static void ResetOamMatrices(void); static void ResetSprite(struct Sprite *sprite); -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); static void ResetAllSprites(void); static void BeginAnim(struct Sprite *sprite); static void ContinueAnim(struct Sprite *sprite); @@ -75,7 +74,6 @@ static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite); static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite); static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix); static u8 GetSpriteMatrixNum(struct Sprite *sprite); -static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); static void AffineAnimStateRestartAnim(u8 matrixNum); static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum); static void AffineAnimStateReset(u8 matrixNum); diff --git a/gflib/sprite.h b/gflib/sprite.h index 6a3084add2..937ed42ced 100644 --- a/gflib/sprite.h +++ b/gflib/sprite.h @@ -331,5 +331,7 @@ u8 SpriteTileAllocBitmapOp(u16 bit, u8 op); void ClearSpriteCopyRequests(void); void ResetAffineAnimData(void); u32 GetSpanPerImage(u32 shape, u32 size); +void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); +void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); #endif //GUARD_SPRITE_H diff --git a/graphics/types/battle_icons1.pal b/graphics/types/battle_icons1.pal new file mode 100644 index 0000000000..972dfd02af --- /dev/null +++ b/graphics/types/battle_icons1.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +120 152 128 +49 49 49 +255 255 255 +164 82 57 +172 189 32 +184 160 90 +213 180 90 +98 98 180 +180 90 164 +172 164 148 +172 172 197 +152 172 246 diff --git a/graphics/types/battle_icons1.png b/graphics/types/battle_icons1.png new file mode 100644 index 0000000000000000000000000000000000000000..c47b07f1171a309220fe403e7ed17b544dce61b2 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)gBeJ&&AV#_q!^2X+?^QKos)S9f0+Ah^6AeDr5qSvozYT0U{!x$`s_r#^L~O? zW`;68@OaH&_v*B4*$Iv5&s|*w(yuXeG{_swkC``BYN3?2$6ECzR%;a2T$7x3-fpK2 zw`)VQ%vH99|B6*k<|Py^@Yg%OV literal 0 HcmV?d00001 diff --git a/graphics/types/battle_icons2.pal b/graphics/types/battle_icons2.pal new file mode 100644 index 0000000000..bddf49ad95 --- /dev/null +++ b/graphics/types/battle_icons2.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +120 152 128 +49 49 49 +255 255 255 +240 82 48 +120 200 80 +248 197 49 +80 120 136 +123 98 230 +248 115 164 +57 156 255 +90 205 230 +246 180 246 diff --git a/graphics/types/battle_icons2.png b/graphics/types/battle_icons2.png new file mode 100644 index 0000000000000000000000000000000000000000..44aa4f89547f478a290231112e03bd84f350a08e GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)gBeJ&&AV#_q!^2X+?^QKos)S9%Lb!>Ej>Uc_m{DK*PN@0NW zNPrqp{F$eVV~9oX*+~b5njCnX4YfG_{QrMTEphh)*Y7EA%lmU~y*2PL&)#)cl~Kxp z!IERaWLAYID;xWC%9j?$eC*AdA1ZV};4{aCCrl!1c&{l7|6f;|Grv9M#7Uhdjs6y$ zGhY@M>?)gc>-e`yFYyM(vV;e(KVEcyW|W>Ye|kyVjwuaK7z8*qp3hmScV6;#`s8yB zY&Rw}_zHyodQqSi96QT++j%9)ga_;kyc`1Lo)&ZKm)+^(*_kc*uP*H+Qv<_C?~dro zBk$AS%{>(|{aMf3&E9MR8$NG+Qmi1Wad_8vzv-E=vp%1;t6yfmv6;^}dj^LH(8mm( Lu6{1-oD!MaiFlags[B_POSITION_PLAYER_RIGHT] = GetAiFlags(gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)); } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsAiVsAiBattle()) + else if (IsDoubleBattle() && IsAiVsAiBattle()) { AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_RIGHT] = AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT]; } @@ -275,7 +275,7 @@ u32 BattleAI_ChooseMoveOrAction(void) { u32 ret; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) ret = ChooseMoveOrAction_Singles(sBattler_AI); else ret = ChooseMoveOrAction_Doubles(sBattler_AI); @@ -323,7 +323,7 @@ void Ai_InitPartyStruct(void) // Save first 2 or 4(in doubles) mons CopyBattlerDataToAIParty(B_POSITION_PLAYER_LEFT, B_SIDE_PLAYER); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) CopyBattlerDataToAIParty(B_POSITION_PLAYER_RIGHT, B_SIDE_PLAYER); // If player's partner is AI, save opponent mons @@ -2050,7 +2050,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } /*if (AI_THINKING_STRUCT->aiFlags[battlerAtk] == AI_SCRIPT_CHECK_BAD_MOVE //Only basic AI - && IS_DOUBLE_BATTLE) //Make the regular AI know how to use Protect minimally in Doubles + && IsDoubleBattle()) //Make the regular AI know how to use Protect minimally in Doubles { u8 shouldProtect = ShouldProtect(battlerAtk, battlerDef, move); if (shouldProtect == USE_PROTECT || shouldProtect == PROTECT_FROM_FOES) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index ef35a95f59..966082f32f 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -82,7 +82,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return FALSE; opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); @@ -242,7 +242,7 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) struct Pokemon *party = NULL; u16 move; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return FALSE; opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); @@ -318,7 +318,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) if (IS_MOVE_STATUS(gLastLandedMoves[battler])) return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -707,7 +707,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) } } } - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return FALSE; opposingBattler = GetBattlerAtPosition(BATTLE_PARTNER(opposingPosition)); @@ -765,7 +765,7 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 modu if (IS_MOVE_STATUS(gLastLandedMoves[battler])) return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -846,7 +846,7 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) // Battler will faint to hazards, check to see if another mon can clear them if (hazardDamage > battlerHp) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -1023,7 +1023,7 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) availableToSwitch = 0; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -1140,7 +1140,7 @@ void AI_TrySwitchOrUseItem(u32 battler) s32 monToSwitchId = AI_DATA->mostSuitableMonId[battler]; if (monToSwitchId == PARTY_SIZE) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { battlerIn1 = GetBattlerAtPosition(battlerPosition); battlerIn2 = battlerIn1; @@ -2040,7 +2040,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) if (gBattleTypeFlags & BATTLE_TYPE_ARENA) return gBattlerPartyIndexes[battler] + 1; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -2074,7 +2074,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) // Split ideal mon decision between after previous mon KO'd (prioritize offensive options) and after switching active mon out (prioritize defensive options), and expand the scope of both. // Only use better mon selection if AI_FLAG_SMART_MON_CHOICES is set for the trainer. - if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !IsDoubleBattle()) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic { bestMonId = GetBestMonIntegrated(party, firstId, lastId, battler, opposingBattler, battlerIn1, battlerIn2, switchAfterMonKOd); return bestMonId; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 2af88bea8c..26950882f1 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3026,7 +3026,7 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) else party = gEnemyParty; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))]; @@ -3417,7 +3417,7 @@ s32 CountUsablePartyMons(u32 battlerId) else party = gEnemyParty; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))]; @@ -3828,7 +3828,7 @@ bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u32 move) bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) { // simple logic. just upgrades chosen move to z move if possible, unless regular move would kill opponent - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && battlerDef == BATTLE_PARTNER(battlerAtk)) + if ((IsDoubleBattle()) && battlerDef == BATTLE_PARTNER(battlerAtk)) return FALSE; // don't use z move on partner if (HasTrainerUsedGimmick(battlerAtk, GIMMICK_Z_MOVE)) return FALSE; // can't use z move twice diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index b917cdc9a5..a852033133 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3317,7 +3317,7 @@ static void AnimSolarBeamSmallOrb(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gAnimMoveIndex == MOVE_CORE_ENFORCER) + if (IsDoubleBattle() && gAnimMoveIndex == MOVE_CORE_ENFORCER) { CoreEnforcerLoadBeamTarget(sprite); } @@ -6567,11 +6567,11 @@ void PrepareDoubleTeamAnim(u32 taskId, u32 animBattler, bool32 forAllySwitch) gSprites[spriteId].sBattlerFlank = (animBattler != ANIM_ATTACKER); else gSprites[spriteId].sBattlerFlank = (animBattler == ANIM_ATTACKER); - + // correct direction on opponent side if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) gSprites[spriteId].sBattlerFlank ^= 1; - + gSprites[spriteId].callback = AnimDoubleTeam; task->tBlendSpritesCount++; } @@ -6603,7 +6603,7 @@ static void ReloadBattlerSprites(u32 battler, struct Pokemon *party) UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_ALL); // If battler has an indicator for a gimmick, hide the sprite until the move animation finishes. UpdateIndicatorVisibilityAndType(gHealthboxSpriteIds[battler], TRUE); - + // Try to recreate shadow sprite if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId < MAX_SPRITES) { diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 3324d276fd..b33c0a8bb6 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1726,7 +1726,7 @@ void AnimTask_AirCutterProjectile(u8 taskId) attackerX = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); attackerY = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) { SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &targetX, &targetY); @@ -3854,7 +3854,7 @@ static void AnimPerishSongMusicNote_Step2(struct Sprite *sprite) static void AnimGuardRing(struct Sprite *sprite) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) { SetAverageBattlerPositions(gBattleAnimAttacker, FALSE, &sprite->x, &sprite->y); sprite->y += 40; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 73c1e99448..e0b4820409 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -17,8 +17,6 @@ #include "util.h" #include "constants/battle_anim.h" -#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64; static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite); @@ -868,11 +866,6 @@ bool8 IsBattlerSpritePresent(u8 battlerId) } } -bool8 IsDoubleBattle(void) -{ - return IS_DOUBLE_BATTLE(); -} - #define BG_ANIM_PAL_1 8 #define BG_ANIM_PAL_2 9 #define BG_ANIM_PAL_CONTEST 14 diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index f023859b59..e03ad2ace6 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -7250,7 +7250,7 @@ static u8 LoadBattleAnimTarget(u8 arg) { u8 battler; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { switch (gBattleAnimArgs[arg]) { @@ -7281,7 +7281,7 @@ static u8 LoadBattleAnimTarget(u8 arg) static u8 GetProperCentredCoord(u8 battler, u8 coordType) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return (GetBattlerSpriteCoord2(battler, coordType) + GetBattlerSpriteCoord2(BATTLE_PARTNER(battler), coordType)) / 2; return GetBattlerSpriteCoord(battler, coordType); @@ -7471,14 +7471,14 @@ static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) //Attacker { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, var); else InitSpritePosToAnimAttacker(sprite, var); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, var); else InitSpritePosToAnimTarget(sprite, var); @@ -7562,7 +7562,7 @@ static void SpriteCB_GrowingSuperpower(struct Sprite *sprite) static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -7576,14 +7576,14 @@ static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, FALSE); else InitSpritePosToAnimAttacker(sprite, FALSE); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -7595,7 +7595,7 @@ static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite) static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { AnimSolarBeamBigOrb(sprite); } @@ -7867,14 +7867,14 @@ void SpriteCB_RandomCentredHits(struct Sprite *sprite) if (gBattleAnimArgs[0] == 0) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, FALSE); else InitSpritePosToAnimAttacker(sprite, FALSE); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -8179,7 +8179,7 @@ static void SpriteCB_BeamUpStep(struct Sprite *sprite) static void SpriteCB_CentredElectricity(struct Sprite *sprite) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index a5dc6f3af1..b555711933 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -581,7 +581,7 @@ static void OpponentHandleChooseMove(u32 battler) if (GetBattlerMoveTargetType(battler, move) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (battler << 8)); - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { do { target = GetBattlerAtPosition(Random() & 2); @@ -653,7 +653,7 @@ static void OpponentHandleChoosePokemon(u32 battler) { s32 battler1, battler2, firstId, lastId; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { battler2 = battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 5dae29563d..8760252c67 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -44,6 +44,7 @@ #include "level_caps.h" #include "menu.h" #include "pokemon_summary_screen.h" +#include "type_icons.h" static void PlayerBufferExecCompleted(u32 battler); static void PlayerHandleLoadMonSprite(u32 battler); @@ -59,7 +60,6 @@ static void PlayerHandlePrintString(u32 battler); static void PlayerHandlePrintSelectionString(u32 battler); static void PlayerHandleChooseAction(u32 battler); static void PlayerHandleYesNoBox(u32 battler); -static void PlayerHandleChooseMove(u32 battler); static void PlayerHandleChooseItem(u32 battler); static void PlayerHandleChoosePokemon(u32 battler); static void PlayerHandleCmd23(u32 battler); @@ -81,14 +81,11 @@ static void PlayerHandleEndLinkBattle(u32 battler); static void PlayerHandleBattleDebug(u32 battler); static void PlayerBufferRunCommand(u32 battler); -static void HandleInputChooseTarget(u32 battler); -static void HandleInputChooseMove(u32 battler); static void MoveSelectionDisplayPpNumber(u32 battler); static void MoveSelectionDisplayPpString(u32 battler); static void MoveSelectionDisplayMoveType(u32 battler); static void MoveSelectionDisplayMoveNames(u32 battler); static void MoveSelectionDisplayMoveDescription(u32 battler); -static void HandleMoveSwitching(u32 battler); static void SwitchIn_HandleSoundAndEnd(u32 battler); static void WaitForMonSelection(u32 battler); static void CompleteWhenChoseItem(u32 battler); @@ -382,7 +379,7 @@ static void HandleInputChooseAction(u32 battler) } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle() && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -426,7 +423,7 @@ static void HandleInputChooseAction(u32 battler) } } -static void HandleInputChooseTarget(u32 battler) +void HandleInputChooseTarget(u32 battler) { s32 i; static const u8 identities[MAX_BATTLERS_COUNT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT}; @@ -662,7 +659,7 @@ static void TryShowAsTarget(u32 battler) } } -static void HandleInputChooseMove(u32 battler) +void HandleInputChooseMove(u32 battler) { u16 moveTarget; u32 canSelectTarget = 0; @@ -968,7 +965,7 @@ static u32 UNUSED HandleMoveInputUnused(u32 battler) return var; } -static void HandleMoveSwitching(u32 battler) +void HandleMoveSwitching(u32 battler) { u8 perMovePPBonuses[MAX_MON_MOVES]; struct ChooseMoveStruct moveStruct; @@ -1757,7 +1754,7 @@ static void MoveSelectionDisplayMoveType(u32 battler) } else { - end = StringCopy(txtPtr, gTypesInfo[type].name); + end = StringCopy(txtPtr, gTypesInfo[type].name); } PrependFontIdToFit(txtPtr, end, FONT_NORMAL, WindowWidthPx(B_WIN_MOVE_TYPE) - 25); @@ -2075,7 +2072,7 @@ static void PlayerHandleYesNoBox(u32 battler) } } -static void HandleChooseMoveAfterDma3(u32 battler) +void HandleChooseMoveAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) { @@ -2097,7 +2094,7 @@ static void PlayerChooseMoveInBattlePalace(u32 battler) } } -static void PlayerHandleChooseMove(u32 battler) +void PlayerHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { @@ -2125,6 +2122,7 @@ static void PlayerHandleChooseMove(u32 battler) void InitMoveSelectionsVarsAndStrings(u32 battler) { + LoadTypeIcons(battler); MoveSelectionDisplayMoveNames(battler); gMultiUsePlayerCursor = 0xFF; MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index fae42939d0..e11406831b 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -175,7 +175,7 @@ static void InitSinglePlayerBtlControllers(void) gBattlerPartyIndexes[3] = 3; } } - else if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + else if (!IsDoubleBattle()) { gBattleMainFunc = BeginBattleIntro; @@ -417,7 +417,7 @@ static void InitLinkBtlControllers(void) s32 i; u8 multiplayerId; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) { @@ -442,7 +442,7 @@ static void InitLinkBtlControllers(void) gBattlersCount = 2; } } - else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && IsDoubleBattle()) { if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) { @@ -610,7 +610,7 @@ static void InitLinkBtlControllers(void) bool32 IsValidForBattle(struct Pokemon *mon) { u32 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); - return (species != SPECIES_NONE + return (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(mon, MON_DATA_HP) != 0 && GetMonData(mon, MON_DATA_IS_EGG) == FALSE); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index cb3349ee32..b396f1d7b5 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -309,7 +309,7 @@ static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move) static u16 GetBattlePalaceTarget(u32 battler) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u8 opposing1, opposing2; diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index c8ee932218..2595e4cbda 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -96,7 +96,7 @@ bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick) bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) { // Check whether partner battler has used gimmick or plans to during turn. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && IsPartnerMonFromSameTrainer(battler) && (gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] || ((gBattleStruct->gimmick.toActivate & gBitTable[BATTLE_PARTNER(battler)] @@ -115,7 +115,7 @@ bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) void SetGimmickAsActivated(u32 battler, enum Gimmick gimmick) { gBattleStruct->gimmick.activated[battler][gimmick] = TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsPartnerMonFromSameTrainer(battler)) + if (IsDoubleBattle() && IsPartnerMonFromSameTrainer(battler)) gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] = TRUE; } @@ -155,7 +155,7 @@ void CreateGimmickTriggerSprite(u32 battler) if (gBattleStruct->gimmick.triggerSpriteId == 0xFF) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) gBattleStruct->gimmick.triggerSpriteId = CreateSprite(gimmick->triggerTemplate, gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE, gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF, 0); @@ -204,7 +204,7 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) s32 xSlide, xPriority, xOptimal; s32 yDiff; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { xSlide = DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE; xPriority = DOUBLES_GIMMICK_TRIGGER_POS_X_PRIORITY; diff --git a/src/battle_main.c b/src/battle_main.c index 23047107b8..54da8223af 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4136,7 +4136,7 @@ void SwitchPartyOrder(u32 battler) partyId2 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler)); SwitchPartyMonSlots(partyId1, partyId2); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) { @@ -4277,7 +4277,7 @@ static void HandleTurnActionSelectionState(void) i); } - BtlController_EmitChooseMove(battler, BUFFER_A, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0, FALSE, &moveInfo); + BtlController_EmitChooseMove(battler, BUFFER_A, IsDoubleBattle() != 0, FALSE, &moveInfo); MarkBattlerForControllerExec(battler); } break; @@ -4570,7 +4570,7 @@ static void HandleTurnActionSelectionState(void) else i = FALSE; - if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !IsDoubleBattle()) || (position & BIT_FLANK) != B_FLANK_LEFT || (*(&gBattleStruct->absentBattlerFlags) & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))])) { diff --git a/src/battle_message.c b/src/battle_message.c index 87ac5326fb..b1c536b865 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2826,7 +2826,7 @@ void BufferStringBattle(u16 stringID, u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) stringPtr = sText_LegendaryPkmnAppeared; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]])) + else if (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]])) stringPtr = sText_TwoWildPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) stringPtr = sText_WildPkmnAppearedPause; @@ -2837,7 +2837,7 @@ void BufferStringBattle(u16 stringID, u32 battler) case STRINGID_INTROSENDOUT: // poke first send-out if (GetBattlerSide(battler) == B_SIDE_PLAYER) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) + if (IsDoubleBattle() && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) stringPtr = sText_InGamePartnerSentOutZGoN; @@ -2855,7 +2855,7 @@ void BufferStringBattle(u16 stringID, u32 battler) } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) + if (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) { if (BATTLE_TWO_VS_ONE_OPPONENT) stringPtr = sText_Trainer1SentOutTwoPkmn; @@ -2886,7 +2886,7 @@ void BufferStringBattle(u16 stringID, u32 battler) { if (*(&gBattleStruct->hpScale) == 0) stringPtr = sText_PkmnThatsEnough; - else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (*(&gBattleStruct->hpScale) == 1 || IsDoubleBattle()) stringPtr = sText_PkmnComeBack; else if (*(&gBattleStruct->hpScale) == 2) stringPtr = sText_PkmnOkComeBack; @@ -2911,7 +2911,7 @@ void BufferStringBattle(u16 stringID, u32 battler) case STRINGID_SWITCHINMON: // switch-in msg if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) { - if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (*(&gBattleStruct->hpScale) == 0 || IsDoubleBattle()) stringPtr = sText_GoPkmn2; else if (*(&gBattleStruct->hpScale) == 1) stringPtr = sText_DoItPkmn; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 575e1cd043..396521f5a0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1752,7 +1752,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u return; } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && + if (IsDoubleBattle() && (moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_ATK; else @@ -2498,7 +2498,7 @@ static void Cmd_resultmessage(void) if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK)) { if (gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate - show the ability pop-up - CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); + CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (IsDoubleBattle()) != 0); stringId = gMissStringIds[gBattleCommunication[MISS_TYPE]]; gBattleCommunication[MSG_DISPLAY] = 1; } @@ -4352,7 +4352,7 @@ static void Cmd_getexp(void) { // Music change in a wild battle after fainting opposing pokemon. if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && (gBattleMons[0].hp || (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleMons[2].hp)) + && (gBattleMons[0].hp || (IsDoubleBattle() && gBattleMons[2].hp)) && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) && !gBattleStruct->wildVictorySong) @@ -4403,7 +4403,7 @@ static void Cmd_getexp(void) } // get exp getter battler - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { if (gBattlerPartyIndexes[2] == *expMonId && !(gAbsentBattlerFlags & gBitTable[2])) gBattleStruct->expGetterBattlerId = 2; @@ -4483,7 +4483,7 @@ static void Cmd_getexp(void) // update battle mon structure after level up if (gBattlerPartyIndexes[0] == *expMonId && gBattleMons[0].hp) battler = 0; - else if (gBattlerPartyIndexes[2] == *expMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + else if (gBattlerPartyIndexes[2] == *expMonId && gBattleMons[2].hp && (IsDoubleBattle())) battler = 2; if (battler != 0xFF) @@ -5919,7 +5919,7 @@ static void Cmd_moveend(void) gBattleStruct->targetsDone[gBattlerAttacker] |= gBitTable[gBattlerTarget]; if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsDoubleBattle() && !gProtectStructs[gBattlerAttacker].chargingTurn && (moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY) @@ -6689,7 +6689,7 @@ bool32 CanBattlerSwitch(u32 battler) { battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); else battlerIn2 = battlerIn1; @@ -6701,7 +6701,7 @@ bool32 CanBattlerSwitch(u32 battler) // Check if attacker side has mon to switch into battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); else battlerIn2 = battlerIn1; @@ -6765,7 +6765,7 @@ static void Cmd_openpartyscreen(void) if (cmd->battler == BS_FAINTED_MULTIPLE_1) { - if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(IsDoubleBattle())) { for (battler = 0; battler < gBattlersCount; battler++) { @@ -6791,7 +6791,7 @@ static void Cmd_openpartyscreen(void) } } } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { bool8 hasReplacement_0, hasReplacement_1, hasReplacement_2, hasReplacement_3; @@ -6922,7 +6922,7 @@ static void Cmd_openpartyscreen(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { hitmarkerFaintBits = gHitMarker >> 28; if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits) @@ -7466,7 +7466,7 @@ static void Cmd_handlelearnnewmove(void) { GiveMoveToBattleMon(&gBattleMons[battler], learnMove); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); if (gBattlerPartyIndexes[battler] == monId @@ -7572,7 +7572,7 @@ static void Cmd_yesnoboxlearnmove(void) RemoveBattleMonPPBonus(&gBattleMons[0], movePosition); SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, movePosition); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && MOVE_IS_PERMANENT(2, movePosition)) { @@ -7686,7 +7686,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * trainerMoney; else moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney; @@ -8352,7 +8352,7 @@ static bool32 IsMonGettingExpSentOut(void) { if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId) return TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) + if (IsDoubleBattle() && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) return TRUE; return FALSE; @@ -8425,7 +8425,7 @@ static void Cmd_hpthresholds(void) { CMD_ARGS(u8 battler); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!(IsDoubleBattle())) { u32 battler = GetBattlerForBattleScript(cmd->battler); u32 opposingBattler = BATTLE_OPPOSITE(battler); @@ -8451,7 +8451,7 @@ static void Cmd_hpthresholds2(void) { CMD_ARGS(u8 battler); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!(IsDoubleBattle())) { u32 battler = GetBattlerForBattleScript(cmd->battler); u32 opposingBattler = BATTLE_OPPOSITE(battler); @@ -9931,7 +9931,7 @@ static void Cmd_various(void) case VARIOUS_ABILITY_POPUP: { VARIOUS_ARGS(); - CreateAbilityPopUp(battler, gBattleMons[battler].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); + CreateAbilityPopUp(battler, gBattleMons[battler].ability, (IsDoubleBattle()) != 0); break; } case VARIOUS_UPDATE_ABILITY_POPUP: @@ -10125,7 +10125,7 @@ static void Cmd_various(void) gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = 5; gSideTimers[GetBattlerSide(battler)].auroraVeilBattlerId = battler; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = 5; else gBattleCommunication[MULTISTRING_CHOOSER] = 5; @@ -10301,7 +10301,7 @@ static void Cmd_various(void) case VARIOUS_JUMP_IF_TEAM_HEALTHY: { VARIOUS_ARGS(const u8 *jumpInstr); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerAlive(BATTLE_PARTNER(battler))) + if ((IsDoubleBattle()) && IsBattlerAlive(BATTLE_PARTNER(battler))) { u8 partner = BATTLE_PARTNER(battler); if ((gBattleMons[battler].hp == gBattleMons[battler].maxHP && !(gBattleMons[battler].status1 & STATUS1_ANY)) @@ -10914,7 +10914,7 @@ static void Cmd_various(void) 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 && + if (IsDoubleBattle() && gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) { gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker); @@ -11233,7 +11233,7 @@ static void Cmd_setreflect(void) gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectTimer = 5; gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; @@ -12097,7 +12097,7 @@ static void Cmd_forcerandomswitch(void) battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { firstMonId = 0; lastMonId = PARTY_SIZE; @@ -12295,7 +12295,7 @@ static void Cmd_setlightscreen(void) gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenTimer = 5; gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; @@ -12465,7 +12465,7 @@ static void Cmd_updatestatusicon(void) BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); MarkBattlerForControllerExec(battler); } - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if ((IsDoubleBattle())) { battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); if (!(gAbsentBattlerFlags & gBitTable[battler])) @@ -12502,7 +12502,7 @@ static void Cmd_setfocusenergy(void) CMD_ARGS(u8 battler); u8 battler = GetBattlerForBattleScript(cmd->battler); - if ((gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_CHEER && (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || (gAbsentBattlerFlags & gBitTable[battler]))) + if ((gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_CHEER && (!(IsDoubleBattle()) || (gAbsentBattlerFlags & gBitTable[battler]))) || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) { gMoveResultFlags |= MOVE_RESULT_FAILED; @@ -13245,7 +13245,7 @@ static void Cmd_healpartystatus(void) gBattleMons[gBattlerAttacker].status1 = 0; gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && !(gAbsentBattlerFlags & gBitTable[partner])) { gBattleMons[partner].status1 = 0; @@ -14088,7 +14088,7 @@ static void Cmd_trysethelpinghand(void) gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]) && !gProtectStructs[gBattlerAttacker].helpingHand && !gProtectStructs[gBattlerTarget].helpingHand) @@ -14910,7 +14910,7 @@ static void Cmd_pursuitdoubles(void) u32 battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && !(gAbsentBattlerFlags & gBitTable[battler]) && gChosenActionByBattler[battler] == B_ACTION_USE_MOVE && gMovesInfo[gChosenMoveByBattler[battler]].effect == EFFECT_PURSUIT) @@ -15908,7 +15908,7 @@ bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) && gMovesInfo[move].strikeCount < 2 && gMovesInfo[move].effect != EFFECT_MULTI_HIT) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { switch (GetBattlerMoveTargetType(battler, move)) { @@ -16025,7 +16025,7 @@ void BS_SetZEffect(void) static void TryUpdateRoundTurnOrder(void) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u32 i; u32 j = 0; @@ -16163,8 +16163,7 @@ void BS_ItemRestoreHP(void) // Check if the recipient is an active battler. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) battler = gBattlerAttacker; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) battler = BATTLE_PARTNER(gBattlerAttacker); // Get amount to heal. @@ -16201,7 +16200,7 @@ void BS_ItemRestoreHP(void) SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); // Revived battlers on the field need to be brought back. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battler != MAX_BATTLERS_COUNT) + if (IsDoubleBattle() && battler != MAX_BATTLERS_COUNT) { gAbsentBattlerFlags &= ~gBitTable[battler]; gBattleMons[battler].hp = hp; @@ -16227,7 +16226,7 @@ void BS_ItemCureStatus(void) previousStatus2 = gBattleMons[battler].status2; gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) { battler = BATTLE_PARTNER(gBattlerAttacker); @@ -16292,7 +16291,7 @@ void BS_ItemRestorePP(void) // Check if the recipient is an active battler. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) battler = gBattlerAttacker; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) battler = BATTLE_PARTNER(gBattlerAttacker); @@ -16623,7 +16622,7 @@ void BS_SetPledge(void) gBattleCommunication[MSG_DISPLAY] = 0; } else if ((gChosenActionByBattler[partner] == B_ACTION_USE_MOVE) - && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsDoubleBattle() && IsBattlerAlive(partner) && gCurrentMove != partnerMove && gMovesInfo[partnerMove].effect == EFFECT_PLEDGE) diff --git a/src/battle_terastal.c b/src/battle_terastal.c index 6866c6aaad..c0540f5aa3 100644 --- a/src/battle_terastal.c +++ b/src/battle_terastal.c @@ -30,7 +30,7 @@ void ActivateTera(u32 battler) if (B_FLAG_TERA_ORB_CHARGED != 0 && (B_FLAG_TERA_ORB_NO_COST == 0 || !FlagGet(B_FLAG_TERA_ORB_NO_COST)) && side == B_SIDE_PLAYER - && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !IsPartnerMonFromSameTrainer(battler))) + && !(IsDoubleBattle() && !IsPartnerMonFromSameTrainer(battler))) { FlagClear(B_FLAG_TERA_ORB_CHARGED); } diff --git a/src/battle_util.c b/src/battle_util.c index 3d9338acee..24095c08ed 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -221,7 +221,7 @@ void HandleAction_UseMove(void) { gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = gSideTimers[side].followmeTarget; // follow me moxie fix } - else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle() && gSideTimers[side].followmeTimer == 0 && (gMovesInfo[gCurrentMove].power != 0 || (moveTarget != MOVE_TARGET_USER && moveTarget != MOVE_TARGET_ALL_BATTLERS)) && ((GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) @@ -305,8 +305,7 @@ void HandleAction_UseMove(void) gBattlerTarget = battler; } } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && moveTarget & MOVE_TARGET_RANDOM) + else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) { @@ -336,8 +335,7 @@ void HandleAction_UseMove(void) else gBattlerTarget = gBattlerAttacker; } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && moveTarget == MOVE_TARGET_FOES_AND_ALLY) + else if (IsDoubleBattle() && moveTarget == MOVE_TARGET_FOES_AND_ALLY) { for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { @@ -3744,7 +3742,7 @@ bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2 u32 i, side, playerId, flankId; struct Pokemon *party; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return FALSE; side = GetBattlerSide(battler); @@ -4328,7 +4326,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 target1 = GetBattlerAtPosition(side); target2 = GetBattlerAtPosition(side + BIT_FLANK); gSpecialStatuses[battler].switchInAbilityDone = TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0 && !gAbilitiesInfo[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0) @@ -5177,7 +5175,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) && !(IS_MOVE_STATUS(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) + if (!IsDoubleBattle() || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) CancelMultiTurnMoves(gBattlerAttacker); // Don't cancel moves that can hit two targets bc one target might not be protected gBattleScripting.battler = gBattlerAbility = gBattlerTarget; battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster; @@ -8252,7 +8250,7 @@ u32 SetRandomTarget(u32 battler) [B_SIDE_OPPONENT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT}, }; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { target = GetBattlerAtPosition(targets[GetBattlerSide(battler)][Random() % 2]); if (!IsBattlerAlive(target)) @@ -8317,7 +8315,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) targetBattler = gSideTimers[side].followmeTarget; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM) + else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) targetBattler = SetRandomTarget(gBattlerAttacker); else targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker))); @@ -9983,7 +9981,7 @@ static inline uq4_12_t GetScreensModifier(u32 move, u32 battlerAtk, u32 battlerD if (isCrit || abilityAtk == ABILITY_INFILTRATOR || gProtectStructs[battlerAtk].confusionSelfDmg) return UQ_4_12(1.0); if (reflect || lightScreen || auroraVeil) - return (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? UQ_4_12(0.667) : UQ_4_12(0.5); + return (IsDoubleBattle()) ? UQ_4_12(0.667) : UQ_4_12(0.5); return UQ_4_12(1.0); } @@ -11787,7 +11785,7 @@ void SetShellSideArmCategory(void) bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef) { - return (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + return (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battlerDef)) && battlerDef != BATTLE_PARTNER(battlerAtk)); } diff --git a/src/battle_util2.c b/src/battle_util2.c index 2c333978d2..326acf0e40 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -80,7 +80,7 @@ void AdjustFriendshipOnBattleFaint(u8 battler) { u8 opposingBattlerId; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u8 opposingBattlerId2; diff --git a/src/data/types_info.h b/src/data/types_info.h index f9bd233ca6..df74199bdd 100644 --- a/src/data/types_info.h +++ b/src/data/types_info.h @@ -60,6 +60,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB_WHITE, .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_NormalTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, }, [TYPE_NORMAL] = { @@ -71,6 +73,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB_WHITE, // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_NormalTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SILK_SCARF, //.berry = ITEM_CHILAN_BERRY, //.gem = ITEM_NORMAL_GEM, @@ -88,6 +92,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(26, 8, 14), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_FightingTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_BLACK_BELT, //.berry = ITEM_CHOPLE_BERRY, //.gem = ITEM_FIGHTING_GEM, @@ -107,6 +113,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 26, 7), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_FlyingTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SHARP_BEAK, //.berry = ITEM_COBA_BERRY, //.gem = ITEM_FLYING_GEM, @@ -126,6 +134,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(26, 10, 25), // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_PoisonTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_POISON_BARB, //.berry = ITEM_KEBIA_BERRY, //.gem = ITEM_POISON_GEM, @@ -145,6 +155,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(25, 23, 18), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_GroundTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SOFT_SAND, //.berry = ITEM_SHUCA_BERRY, //.gem = ITEM_GROUND_GEM, @@ -164,6 +176,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(18, 16, 8), // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_RockTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_HARD_STONE, //.berry = ITEM_CHARTI_BERRY, //.gem = ITEM_ROCK_GEM, @@ -183,6 +197,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(18, 24, 6), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_BugTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SILVER_POWDER, //.berry = ITEM_TANGA_BERRY, //.gem = ITEM_BUG_GEM, @@ -202,6 +218,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(12, 10, 16), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_GhostTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SPELL_TAG, //.berry = ITEM_KASIB_BERRY, //.gem = ITEM_GHOST_GEM, @@ -221,6 +239,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(19, 19, 20), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_SteelTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_METAL_COAT, //.berry = ITEM_BABIRI_BERRY, //.gem = ITEM_STEEL_GEM, @@ -237,6 +257,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .palette = 15, .teraTypeRGBValue = RGB_WHITE, .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, }, [TYPE_FIRE] = { @@ -248,6 +270,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 20, 11), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_FireTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_CHARCOAL, //.berry = ITEM_OCCA_BERRY, //.gem = ITEM_FIRE_GEM, @@ -267,6 +291,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(10, 18, 27), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_WaterTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MYSTIC_WATER, //.berry = ITEM_PASSHO_BERRY, //.gem = ITEM_WATER_GEM, @@ -286,6 +312,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(12, 24, 11), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_GrassTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MIRACLE_SEED, //.berry = ITEM_RINDO_BERRY, //.gem = ITEM_GRASS_GEM, @@ -305,6 +333,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(30, 26, 7), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_ElectricTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MAGNET, //.berry = ITEM_WACAN_BERRY, //.gem = ITEM_ELECTRIC_GEM, @@ -324,6 +354,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 14, 15), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_PsychicTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_TWISTED_SPOON, //.berry = ITEM_PAYAPA_BERRY, //.gem = ITEM_PSYCHIC_GEM, @@ -343,6 +375,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(14, 26, 25), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_IceTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_NEVER_MELT_ICE, //.berry = ITEM_YACHE_BERRY, //.gem = ITEM_ICE_GEM, @@ -362,6 +396,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(10, 18, 27), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_DragonTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_DRAGON_FANG, //.berry = ITEM_HABAN_BERRY, //.gem = ITEM_DRAGON_GEM, @@ -381,6 +417,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(6, 5, 8), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_DarkTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_BLACK_GLASSES, //.berry = ITEM_COLBUR_BERRY, //.gem = ITEM_DARK_GEM, @@ -400,6 +438,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 15, 21), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_FairyTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_FAIRY_FEATHER, //.berry = ITEM_ROSELI_BERRY, //.gem = ITEM_FAIRY_GEM, @@ -418,6 +458,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .maxMove = MOVE_MAX_STRIKE, .teraTypeRGBValue = RGB(10, 18, 27), .paletteTMHM = gItemIconPalette_NormalTMHM, // failsafe + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, // .teraShard = ITEM_STELLAR_TERA_SHARD, }, }; diff --git a/src/graphics.c b/src/graphics.c index c35cec3467..9fb0771575 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -2048,3 +2048,9 @@ const u16 gFrontierPassCancelButtonHighlighted_Tilemap[] = INCBIN_U16("graphics/ const u16 gBerryCrush_Crusher_Pal[] = INCBIN_U16("graphics/berry_crush/crusher.gbapal"); const u32 gBerryCrush_Crusher_Gfx[] = INCBIN_U32("graphics/berry_crush/crusher.4bpp.lz"); const u32 gBerryCrush_TextWindows_Tilemap[] = INCBIN_U32("graphics/berry_crush/text_windows.bin.lz"); + +const u32 gBattleIcons_Gfx1[] = INCBIN_U32("graphics/types/battle_icons1.4bpp.lz"); +const u32 gBattleIcons_Gfx2[] = INCBIN_U32("graphics/types/battle_icons2.4bpp.lz"); +const u32 gBattleIcons_Pal1[] = INCBIN_U32("graphics/types/battle_icons1.gbapal.lz"); +const u32 gBattleIcons_Pal2[] = INCBIN_U32("graphics/types/battle_icons2.gbapal.lz"); + diff --git a/src/party_menu.c b/src/party_menu.c index 5214ddc2be..15433854a5 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1353,7 +1353,7 @@ static void DrawCancelConfirmButtons(void) bool8 IsMultiBattle(void) { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gMain.inBattle) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && IsDoubleBattle() && gMain.inBattle) return TRUE; else return FALSE; diff --git a/src/pokemon.c b/src/pokemon.c index 78e19dfc8b..cfb2307126 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2100,7 +2100,7 @@ u8 GetDefaultMoveTarget(u8 battlerId) { u8 opposing = BATTLE_OPPOSITE(GetBattlerSide(battlerId)); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return GetBattlerAtPosition(opposing); if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, battlerId) > 1) { diff --git a/src/tv.c b/src/tv.c index e0f910eaaf..c0e207ce8a 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1262,7 +1262,7 @@ void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlaye if (gBattleTypeFlags & BATTLE_TYPE_MULTI) show->battleUpdate.battleType = 2; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) show->battleUpdate.battleType = 1; else show->battleUpdate.battleType = 0; diff --git a/src/type_icons.c b/src/type_icons.c new file mode 100644 index 0000000000..a36c347775 --- /dev/null +++ b/src/type_icons.c @@ -0,0 +1,516 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_gimmick.h" +#include "decompress.h" +#include "graphics.h" +#include "pokedex.h" +#include "sprite.h" +#include "type_icons.h" + +static void LoadTypeSpritesAndPalettes(void); +static void LoadTypeIconsPerBattler(u32, u32); + +static bool32 UseDoubleBattleCoords(u32); + +static u32 GetMonPublicType(u32, u32); +static bool32 ShouldHideUncaughtType(u32); +static u32 GetMonDefensiveTeraType(struct Pokemon *, struct Pokemon*, u32, u32, u32, u32); +static u32 IsIllusionActiveAndTypeUnchanged(struct Pokemon*, u32, u32); + +static void CreateSpriteFromType(u32, bool32, u32[], u32, u32); +static bool32 ShouldSkipSecondType(u32[], u32); +static void SetTypeIconXY(s32*, s32*, u32, bool32, u32); + +static void CreateSpriteAndSetTypeSpriteAttributes(u32, u32 x, u32 y, u32, u32, bool32); +static bool32 ShouldFlipTypeIcon(bool32, u32, u32); + +static void SpriteCB_TypeIcon(struct Sprite*); +static void DestroyTypeIcon(struct Sprite*); +static bool32 ShouldHideTypeIcon(u32); +static s32 GetTypeIconHideMovement(bool32, u32); +static s32 GetTypeIconSlideMovement(bool32, u32, s32); +static s32 GetTypeIconBounceMovement(s32, u32); + +const struct Coords16 sTypeIconPositions[][2] = +{ + [B_POSITION_PLAYER_LEFT] = + { + [FALSE] = {221, 86}, + [TRUE] = {144, 71}, + }, + [B_POSITION_OPPONENT_LEFT] = + { + [FALSE] = {20, 26}, + [TRUE] = {97, 14}, + }, + [B_POSITION_PLAYER_RIGHT] = + { + [TRUE] = {156, 96}, + }, + [B_POSITION_OPPONENT_RIGHT] = + { + [TRUE] = {85, 39}, + }, +}; + +const union AnimCmd sSpriteAnim_TypeIcon_Normal[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_NORMAL), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Fighting[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_FIGHTING), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Flying[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_FLYING), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Poison[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_POISON), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ground[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_GROUND), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Rock[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_ROCK), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Bug[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_BUG), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ghost[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_GHOST), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Steel[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_STEEL), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Mystery[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_MYSTERY), 0), + ANIMCMD_END +}; + +const union AnimCmd sSpriteAnim_TypeIcon_Fire[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_FIRE), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Water[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_WATER), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Grass[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_GRASS), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Electric[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_ELECTRIC), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Psychic[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_PSYCHIC), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ice[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_ICE), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Dragon[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_DRAGON), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Dark[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_DARK), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Fairy[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_FAIRY), 0), + ANIMCMD_END +}; + +const union AnimCmd *const sSpriteAnimTable_TypeIcons[] = +{ + [TYPE_NONE] = sSpriteAnim_TypeIcon_Mystery, + [TYPE_NORMAL] = sSpriteAnim_TypeIcon_Normal, + [TYPE_FIGHTING] = sSpriteAnim_TypeIcon_Fighting, + [TYPE_FLYING] = sSpriteAnim_TypeIcon_Flying, + [TYPE_POISON] = sSpriteAnim_TypeIcon_Poison, + [TYPE_GROUND] = sSpriteAnim_TypeIcon_Ground, + [TYPE_ROCK] = sSpriteAnim_TypeIcon_Rock, + [TYPE_BUG] = sSpriteAnim_TypeIcon_Bug, + [TYPE_GHOST] = sSpriteAnim_TypeIcon_Ghost, + [TYPE_STEEL] = sSpriteAnim_TypeIcon_Steel, + [TYPE_MYSTERY] = sSpriteAnim_TypeIcon_Mystery, + [TYPE_FIRE] = sSpriteAnim_TypeIcon_Fire, + [TYPE_WATER] = sSpriteAnim_TypeIcon_Water, + [TYPE_GRASS] = sSpriteAnim_TypeIcon_Grass, + [TYPE_ELECTRIC] = sSpriteAnim_TypeIcon_Electric, + [TYPE_PSYCHIC] = sSpriteAnim_TypeIcon_Psychic, + [TYPE_ICE] = sSpriteAnim_TypeIcon_Ice, + [TYPE_DRAGON] = sSpriteAnim_TypeIcon_Dragon, + [TYPE_DARK] = sSpriteAnim_TypeIcon_Dark, + [TYPE_FAIRY] = sSpriteAnim_TypeIcon_Fairy, + [TYPE_STELLAR] = sSpriteAnim_TypeIcon_Mystery, +}; + +const struct CompressedSpritePalette sTypeIconPal1 = +{ + .data = gBattleIcons_Pal1, + .tag = TYPE_ICON_TAG +}; + +const struct CompressedSpritePalette sTypeIconPal2 = +{ + .data = gBattleIcons_Pal2, + .tag = TYPE_ICON_TAG_2 +}; + +const struct OamData sOamData_TypeIcons = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 1, +}; + +const struct CompressedSpriteSheet sSpriteSheet_TypeIcons2 = +{ + .data = gBattleIcons_Gfx2, + .size = (8*16) * 9, + .tag = TYPE_ICON_TAG_2, +}; + +const struct CompressedSpriteSheet sSpriteSheet_TypeIcons1 = +{ + .data = gBattleIcons_Gfx1, + .size = (8*16) * 10, + .tag = TYPE_ICON_TAG, +}; + +const struct SpriteTemplate sSpriteTemplate_TypeIcons1 = +{ + .tileTag = TYPE_ICON_TAG, + .paletteTag = TYPE_ICON_TAG, + .oam = &sOamData_TypeIcons, + .anims = sSpriteAnimTable_TypeIcons, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TypeIcon +}; + +const struct SpriteTemplate sSpriteTemplate_TypeIcons2 = +{ + .tileTag = TYPE_ICON_TAG_2, + .paletteTag = TYPE_ICON_TAG_2, + .oam = &sOamData_TypeIcons, + .anims = sSpriteAnimTable_TypeIcons, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TypeIcon +}; + +void LoadTypeIcons(u32 battler) +{ + u32 position; + + if (B_SHOW_TYPES == SHOW_TYPES_NEVER) + return; + + LoadTypeSpritesAndPalettes(); + + for (position = 0; position < gBattlersCount; ++position) + LoadTypeIconsPerBattler(battler, position); +} + +static void LoadTypeSpritesAndPalettes(void) +{ + if (IndexOfSpritePaletteTag(TYPE_ICON_TAG) != UCHAR_MAX) + return; + + LoadCompressedSpriteSheet(&sSpriteSheet_TypeIcons1); + LoadCompressedSpriteSheet(&sSpriteSheet_TypeIcons2); + LoadCompressedSpritePalette(&sTypeIconPal1); + LoadCompressedSpritePalette(&sTypeIconPal2); +} + +static void LoadTypeIconsPerBattler(u32 battler, u32 position) +{ + u32 typeNum, types[2]; + u32 battlerId = GetBattlerAtPosition(position); + bool32 useDoubleBattleCoords = UseDoubleBattleCoords(battlerId); + + if (!IsBattlerAlive(battlerId)) + return; + + for (typeNum = 0; typeNum < 2; ++typeNum) + types[typeNum] = GetMonPublicType(battlerId, typeNum); + + for (typeNum = 0; typeNum < 2; ++typeNum) + CreateSpriteFromType(position, useDoubleBattleCoords, types, typeNum, battler); +} + +static bool32 UseDoubleBattleCoords(u32 position) +{ + if (!IsDoubleBattle()) + return FALSE; + + if ((position == B_POSITION_PLAYER_LEFT) && (gBattleMons[B_POSITION_PLAYER_RIGHT].species == SPECIES_NONE)) + return FALSE; + + if ((position == B_POSITION_OPPONENT_LEFT) && (gBattleMons[B_POSITION_OPPONENT_RIGHT].species == SPECIES_NONE)) + return FALSE; + + return TRUE; +} + +static u32 GetMonPublicType(u32 battlerId, u32 typeNum) +{ + struct Pokemon* mon = GetBattlerData(battlerId); + u32 monSpecies = GetMonData(mon,MON_DATA_SPECIES,NULL); + struct Pokemon* monIllusion; + u32 illusionSpecies; + + if (ShouldHideUncaughtType(monSpecies)) + return TYPE_MYSTERY; + + monIllusion = GetIllusionMonPtr(battlerId); + illusionSpecies = GetMonData(monIllusion,MON_DATA_SPECIES,NULL); + + if (GetActiveGimmick(battlerId) == GIMMICK_TERA) + return GetMonDefensiveTeraType(mon,monIllusion,battlerId,typeNum,illusionSpecies,monSpecies); + + if (IsIllusionActiveAndTypeUnchanged(monIllusion,monSpecies, battlerId)) + return gSpeciesInfo[illusionSpecies].types[typeNum]; + + return gBattleMons[battlerId].types[typeNum]; +} + +static bool32 ShouldHideUncaughtType(u32 species) +{ + if (B_SHOW_TYPES != SHOW_TYPES_CAUGHT) + return FALSE; + + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species),FLAG_GET_CAUGHT)) + return FALSE; + + return TRUE; +} + +static u32 GetMonDefensiveTeraType(struct Pokemon * mon, struct Pokemon* monIllusion, u32 battlerId, u32 typeNum, u32 illusionSpecies, u32 monSpecies) +{ + u32 teraType = GetBattlerTeraType(battlerId); + u32 targetSpecies; + + if (teraType != TYPE_STELLAR) + return teraType; + + targetSpecies = (monIllusion != NULL) ? illusionSpecies : monSpecies; + + return gSpeciesInfo[targetSpecies].types[typeNum]; +} + +static u32 IsIllusionActiveAndTypeUnchanged(struct Pokemon* monIllusion, u32 monSpecies, u32 battlerId) +{ + u32 typeNum; + + if (monIllusion == NULL) + return FALSE; + + for (typeNum = 0; typeNum < 2; typeNum++) + if (gSpeciesInfo[monSpecies].types[typeNum] != gBattleMons[battlerId].types[typeNum]) + return FALSE; + + return TRUE; +} + +static void CreateSpriteFromType(u32 position, bool32 useDoubleBattleCoords, u32 types[], u32 typeNum, u32 battler) +{ + s32 x = 0, y = 0; + + if (ShouldSkipSecondType(types, typeNum)) + return; + + SetTypeIconXY(&x, &y, position, useDoubleBattleCoords, typeNum); + + CreateSpriteAndSetTypeSpriteAttributes(types[typeNum], x, y, position, battler, useDoubleBattleCoords); +} + +static bool32 ShouldSkipSecondType(u32 types[], u32 typeNum) +{ + if (!typeNum) + return FALSE; + + if (types[0] != types[1]) + return FALSE; + + return TRUE; +} + +static void SetTypeIconXY(s32* x, s32* y, u32 position, bool32 useDoubleBattleCoords, u32 typeNum) +{ + *x = sTypeIconPositions[position][useDoubleBattleCoords].x; + *y = sTypeIconPositions[position][useDoubleBattleCoords].y + (11 * typeNum); +} + +static void CreateSpriteAndSetTypeSpriteAttributes(u32 type, u32 x, u32 y, u32 position, u32 battler, bool32 useDoubleBattleCoords) +{ + struct Sprite* sprite; + const struct SpriteTemplate* spriteTemplate = gTypesInfo[type].useSecondTypeIconPalette ? &sSpriteTemplate_TypeIcons2 : &sSpriteTemplate_TypeIcons1; + u32 spriteId = CreateSpriteAtEnd(spriteTemplate, x, y, UCHAR_MAX); + + if (spriteId == MAX_SPRITES) + return; + + sprite = &gSprites[spriteId]; + sprite->tMonPosition = position; + sprite->tBattlerId = battler; + sprite->tVerticalPosition = y; + + sprite->hFlip = ShouldFlipTypeIcon(useDoubleBattleCoords, position, type); + + StartSpriteAnim(sprite, type); +} + +static bool32 ShouldFlipTypeIcon(bool32 useDoubleBattleCoords, u32 position, u32 typeId) +{ + bool32 side = (useDoubleBattleCoords) ? B_SIDE_OPPONENT : B_SIDE_PLAYER; + + if (GetBattlerSide(GetBattlerAtPosition(position)) != side) + return FALSE; + + return !gTypesInfo[typeId].isSpecialCaseType; +} + +static void SpriteCB_TypeIcon(struct Sprite* sprite) +{ + u32 position = sprite->tMonPosition; + u32 battlerId = sprite->tBattlerId; + bool32 useDoubleBattleCoords = UseDoubleBattleCoords(GetBattlerAtPosition(position)); + + if (sprite->tHideIconTimer == NUM_FRAMES_HIDE_TYPE_ICON) + { + DestroyTypeIcon(sprite); + return; + } + + if (ShouldHideTypeIcon(battlerId)) + { + sprite->x += GetTypeIconHideMovement(useDoubleBattleCoords, position); + ++sprite->tHideIconTimer; + return; + } + + sprite->x += GetTypeIconSlideMovement(useDoubleBattleCoords,position, sprite->x); + sprite->y = GetTypeIconBounceMovement(sprite->tVerticalPosition,position); +} + +static void DestroyTypeIcon(struct Sprite* sprite) +{ + u32 i; + DestroySpriteAndFreeResources(sprite); + + for (i = 0; i < MAX_SPRITES; ++i) + { + if (!gSprites[i].inUse) + continue; + + if (gSprites[i].template->paletteTag == TYPE_ICON_TAG) + return; + } + + FreeSpritePaletteByTag(TYPE_ICON_TAG); + FreeSpritePaletteByTag(TYPE_ICON_TAG_2); +} + +static bool32 ShouldHideTypeIcon(u32 battlerId) +{ + return gBattlerControllerFuncs[battlerId] != PlayerHandleChooseMove + && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove + && gBattlerControllerFuncs[battlerId] != HandleChooseMoveAfterDma3 + && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove + && gBattlerControllerFuncs[battlerId] != HandleInputChooseTarget + && gBattlerControllerFuncs[battlerId] != HandleMoveSwitching + && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove; +} + +static s32 GetTypeIconHideMovement(bool32 useDoubleBattleCoords, u32 position) +{ + if (useDoubleBattleCoords) + { + if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_PLAYER_RIGHT) + return 1; + else + return -1; + } + + if (position == B_POSITION_PLAYER_LEFT) + return -1; + else + return 1; +} + +static s32 GetTypeIconSlideMovement(bool32 useDoubleBattleCoords, u32 position, s32 xPos) +{ + if (useDoubleBattleCoords) + { + switch (position) + { + case B_POSITION_PLAYER_LEFT: + case B_POSITION_PLAYER_RIGHT: + if (xPos > sTypeIconPositions[position][useDoubleBattleCoords].x - 10) + return -1; + break; + default: + case B_POSITION_OPPONENT_LEFT: + case B_POSITION_OPPONENT_RIGHT: + if (xPos < sTypeIconPositions[position][useDoubleBattleCoords].x + 10) + return 1; + break; + } + return 0; + } + + if (position == B_POSITION_PLAYER_LEFT) + { + if (xPos < sTypeIconPositions[position][useDoubleBattleCoords].x + 10) + return 1; + } + else + { + if (xPos > sTypeIconPositions[position][useDoubleBattleCoords].x - 10) + return -1; + } + return 0; +} + +static s32 GetTypeIconBounceMovement(s32 originalY, u32 position) +{ + struct Sprite* healthbox = &gSprites[gHealthboxSpriteIds[GetBattlerAtPosition(position)]]; + return originalY + healthbox->y2; +} + From 25f7f431faae05621ea9d57be5150a98f6d01b55 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sun, 11 Aug 2024 21:06:33 +0100 Subject: [PATCH 089/544] Remove agbcc (#4994) --- .github/workflows/build.yml | 23 +- INSTALL.md | 52 - Makefile | 109 +- common_syms/AgbRfu_LinkManager.txt | 1 - common_syms/agb_flash.txt | 10 - common_syms/apprentice.txt | 3 - common_syms/battle_anim_throw.txt | 3 - common_syms/battle_controllers.txt | 3 - common_syms/battle_factory_screen.txt | 1 - common_syms/battle_main.txt | 7 - common_syms/battle_tower.txt | 1 - common_syms/berry_blender.txt | 1 - common_syms/bg.txt | 1 - common_syms/contest.txt | 1 - common_syms/contest_painting.txt | 4 - common_syms/ereader_screen.txt | 1 - common_syms/evolution_scene.txt | 1 - common_syms/faraway_island.txt | 3 - common_syms/field_camera.txt | 3 - common_syms/field_control_avatar.txt | 1 - common_syms/field_specials.txt | 1 - common_syms/fieldmap.txt | 1 - common_syms/image_processing_effects.txt | 10 - common_syms/intro.txt | 2 - common_syms/librfu_rfu.txt | 5 - common_syms/librfu_sio32id.txt | 1 - common_syms/librfu_stwi.txt | 1 - common_syms/link.txt | 35 - common_syms/link_rfu_2.txt | 2 - common_syms/list_menu.txt | 2 - common_syms/load_save.txt | 4 - common_syms/m4a.txt | 12 - common_syms/main.txt | 10 - common_syms/mauville_old_man.txt | 1 - common_syms/overworld.txt | 8 - common_syms/party_menu.txt | 1 - common_syms/pokedex.txt | 2 - common_syms/pokedex_cry_screen.txt | 1 - common_syms/random.txt | 2 - common_syms/rtc.txt | 1 - common_syms/save.txt | 13 - common_syms/sound.txt | 1 - common_syms/sprite.txt | 2 - common_syms/start_menu.txt | 1 - common_syms/task.txt | 1 - common_syms/text.txt | 4 - common_syms/trainer_see.txt | 5 - common_syms/tv.txt | 4 - common_syms/window.txt | 2 - ld_script.ld | 1391 ---------------------- sym_bss.txt | 63 - sym_common.txt | 83 -- sym_ewram.txt | 154 --- 53 files changed, 18 insertions(+), 2037 deletions(-) delete mode 100644 common_syms/AgbRfu_LinkManager.txt delete mode 100644 common_syms/agb_flash.txt delete mode 100644 common_syms/apprentice.txt delete mode 100755 common_syms/battle_anim_throw.txt delete mode 100644 common_syms/battle_controllers.txt delete mode 100644 common_syms/battle_factory_screen.txt delete mode 100644 common_syms/battle_main.txt delete mode 100644 common_syms/battle_tower.txt delete mode 100644 common_syms/berry_blender.txt delete mode 100644 common_syms/bg.txt delete mode 100644 common_syms/contest.txt delete mode 100644 common_syms/contest_painting.txt delete mode 100644 common_syms/ereader_screen.txt delete mode 100644 common_syms/evolution_scene.txt delete mode 100755 common_syms/faraway_island.txt delete mode 100644 common_syms/field_camera.txt delete mode 100644 common_syms/field_control_avatar.txt delete mode 100644 common_syms/field_specials.txt delete mode 100644 common_syms/fieldmap.txt delete mode 100644 common_syms/image_processing_effects.txt delete mode 100644 common_syms/intro.txt delete mode 100644 common_syms/librfu_rfu.txt delete mode 100644 common_syms/librfu_sio32id.txt delete mode 100644 common_syms/librfu_stwi.txt delete mode 100644 common_syms/link.txt delete mode 100644 common_syms/link_rfu_2.txt delete mode 100644 common_syms/list_menu.txt delete mode 100644 common_syms/load_save.txt delete mode 100644 common_syms/m4a.txt delete mode 100644 common_syms/main.txt delete mode 100644 common_syms/mauville_old_man.txt delete mode 100644 common_syms/overworld.txt delete mode 100644 common_syms/party_menu.txt delete mode 100644 common_syms/pokedex.txt delete mode 100644 common_syms/pokedex_cry_screen.txt delete mode 100644 common_syms/random.txt delete mode 100644 common_syms/rtc.txt delete mode 100644 common_syms/save.txt delete mode 100644 common_syms/sound.txt delete mode 100644 common_syms/sprite.txt delete mode 100644 common_syms/start_menu.txt delete mode 100644 common_syms/task.txt delete mode 100644 common_syms/text.txt delete mode 100644 common_syms/trainer_see.txt delete mode 100644 common_syms/tv.txt delete mode 100644 common_syms/window.txt delete mode 100644 ld_script.ld delete mode 100644 sym_bss.txt delete mode 100644 sym_common.txt delete mode 100644 sym_ewram.txt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0322cbe11f..c84110d7dd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,19 +15,12 @@ jobs: GAME_VERSION: EMERALD GAME_REVISION: 0 GAME_LANGUAGE: ENGLISH - MODERN: 0 COMPARE: 0 UNUSED_ERROR: 1 steps: - name: Checkout uses: actions/checkout@v2 - - name: Checkout agbcc - uses: actions/checkout@v2 - with: - path: agbcc - repository: pret/agbcc - - name: Install binutils run: | sudo apt update @@ -36,27 +29,13 @@ jobs: # gcc-arm-none-eabi is only needed for the modern build # as an alternative to dkP - - name: Install agbcc - run: | - ./build.sh - ./install.sh ../ - working-directory: agbcc - - - name: Agbcc + - name: ROM env: - MODERN: 0 - COMPARE: 0 - run: make -j${nproc} -O all - - - name: Modern - env: - MODERN: 1 COMPARE: 0 run: make -j${nproc} -O all - name: Test env: - MODERN: 1 TEST: 1 run: | make -j${nproc} -O pokeemerald-test.elf diff --git a/INSTALL.md b/INSTALL.md index 6349d24fbb..49f11fce7c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -596,58 +596,6 @@ To build **pokeemerald.elf** with debug symbols under a modern toolchain: ```bash make DINFO=1 ``` -Note that this is not necessary for a non-modern (agbcc) build since those are built with debug symbols by default. - -### agbcc - -

- Deprecated; installing agbcc is optional since 1.7.0. - -1. Install agbcc into pokeemerald-expansion. The commands to run depend on certain conditions. **You should only follow one of the listed instructions**: -- If agbcc has **not been built before** in the folder where you chose to store pokeemerald Expansion, run the following commands to build and install it into pokeemerald-expansion: - - ```bash - git clone https://github.com/pret/agbcc - cd agbcc - ./build.sh - ./install.sh ../pokeemerald-expansion - ``` - -- **Otherwise**, if agbcc has been built before (e.g. if the git clone above fails), but was **last built on a different terminal** than the one currently used (only relevant to Windows, e.g. switching from msys2 to WSL1), then run the following commands to build and install it into pokeemerald-expansion: - - ```bash - cd agbcc - git clean -fX - ./build.sh - ./install.sh ../pokeemerald-expansion - ``` - -- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald-expansion: - - ```bash - cd agbcc - ./install.sh ../pokeemerald-expansion - ``` - -
- Note... - - > If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before. -
- -2. Once agbcc is installed, change directory back to the base directory where pokeemerald-expansion and agbcc are stored: - - ```bash - cd .. - ``` - -3. To compile with agbcc: - - ```bash - make agbcc - ``` - -
# Useful additional tools diff --git a/Makefile b/Makefile index 6dacf8b1d3..6f8951d378 100644 --- a/Makefile +++ b/Makefile @@ -25,10 +25,8 @@ AS := $(PREFIX)as LD := $(PREFIX)ld -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc -PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) +ARMCC := $(PREFIX)gcc +PATH_ARMCC := PATH="$(PATH)" $(ARMCC) ifeq ($(OS),Windows_NT) EXE := .exe @@ -40,45 +38,20 @@ TITLE := POKEMON EMER GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 -MODERN ?= 1 TEST ?= 0 ANALYZE ?= 0 UNUSED_ERROR ?= 0 -ifeq (agbcc,$(MAKECMDGOALS)) - MODERN := 0 -endif - ifeq (check,$(MAKECMDGOALS)) TEST := 1 endif -# use arm-none-eabi-cpp for macOS -# as macOS's default compiler is clang -# and clang's preprocessor will warn on \u -# when preprocessing asm files, expecting a unicode literal -# we can't unconditionally use arm-none-eabi-cpp -# as installations which install binutils-arm-none-eabi -# don't come with it -ifneq ($(MODERN),1) - ifeq ($(shell uname -s),Darwin) - CPP := $(PREFIX)cpp - else - CPP := $(CC) -E - endif -else - CPP := $(PREFIX)cpp -endif +CPP := $(PREFIX)cpp -ROM_NAME := pokeemerald_agbcc.gba +ROM_NAME := pokeemerald.gba ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) -OBJ_DIR_NAME := build/emerald - -MODERN_ROM_NAME := pokeemerald.gba -MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) -MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) -MODERN_OBJ_DIR_NAME := build/modern +OBJ_DIR_NAME := build/modern SHELL := bash -o pipefail @@ -86,14 +59,8 @@ ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) SYM = $(ROM:.gba=.sym) -TEST_OBJ_DIR_NAME_MODERN := build/modern-test -TEST_OBJ_DIR_NAME_AGBCC := build/test +TEST_OBJ_DIR_NAME := build/modern-test -ifeq ($(MODERN),0) -TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_AGBCC) -else -TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_MODERN) -endif TESTELF = $(ROM:.gba=-test.elf) HEADLESSELF = $(ROM:.gba=-test-headless.elf) @@ -116,17 +83,9 @@ SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) TEST_BUILDDIR = $(OBJ_DIR)/$(TEST_SUBDIR) -ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) +ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=1 -ifeq ($(MODERN),0) -CC1 := tools/agbcc/bin/agbcc$(EXE) -override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := $(ROM_NAME) -OBJ_DIR := $(OBJ_DIR_NAME) -LIBPATH := -L ../../tools/agbcc/lib -LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall -else -CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(PATH_ARMCC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init ifeq ($(ANALYZE),1) override CFLAGS += -fanalyzer @@ -137,11 +96,10 @@ ifneq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) override CFLAGS += -Wno-error=unused-variable -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-function -Wno-error=unused-but-set-parameter -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=unused-local-typedefs endif endif -ROM := $(MODERN_ROM_NAME) -OBJ_DIR := $(MODERN_OBJ_DIR_NAME) -LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" +ROM := $(ROM_NAME) +OBJ_DIR := $(OBJ_DIR_NAME) +LIBPATH := -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libc.a))" LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall -endif ifeq ($(TESTELF),$(MAKECMDGOALS)) TEST := 1 @@ -151,10 +109,7 @@ ifeq ($(TEST),1) OBJ_DIR := $(TEST_OBJ_DIR_NAME) endif -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -DTESTING=$(TEST) -ifneq ($(MODERN),1) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef -endif +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=1 -DTESTING=$(TEST) SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) @@ -301,26 +256,17 @@ mostlyclean: tidynonmodern tidymodern tidycheck rm -f $(AUTO_GEN_TARGETS) @$(MAKE) clean -C libagbsyscall -tidy: tidynonmodern tidymodern tidycheck +tidy: tidymodern tidycheck -tidynonmodern: +tidymodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) rm -rf $(OBJ_DIR_NAME) -tidymodern: - rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) - rm -rf $(MODERN_OBJ_DIR_NAME) - tidycheck: rm -f $(TESTELF) $(HEADLESSELF) - rm -rf $(TEST_OBJ_DIR_NAME_MODERN) - rm -rf $(TEST_OBJ_DIR_NAME_AGBCC) + rm -rf $(TEST_OBJ_DIR_NAME) -ifneq ($(MODERN),0) -$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member -endif - include graphics_file_rules.mk include map_data_rules.mk include spritesheet_rules.mk @@ -349,27 +295,11 @@ ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) %.h: %.party tools ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | $(TRAINERPROC) -o $@ -i $< - endif -ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) -$(C_BUILDDIR)/libc.o: CFLAGS := -O2 - -$(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork - -$(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork - -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) - -$(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) -$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet -else +$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast $(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init # Annoyingly we can't turn this on just for src/data/trainers.h $(C_BUILDDIR)/data.o: CFLAGS += -fno-show-column -fno-diagnostics-show-caret -endif ifeq ($(DINFO),1) override CFLAGS += -g @@ -488,13 +418,8 @@ $1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) endef $(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src))))) -ifeq ($(MODERN),0) -LD_SCRIPT := ld_script.ld -LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld -else LD_SCRIPT := ld_script_modern.ld LD_SCRIPT_DEPS := -endif $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld @@ -541,7 +466,7 @@ check: $(TESTELF) $(ROMTESTHYDRA) $(ROMTEST) $(OBJCOPY) $(HEADLESSELF) libagbsyscall: - @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) + @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=1 ################### ### Symbol file ### diff --git a/common_syms/AgbRfu_LinkManager.txt b/common_syms/AgbRfu_LinkManager.txt deleted file mode 100644 index 7ff8cd53dd..0000000000 --- a/common_syms/AgbRfu_LinkManager.txt +++ /dev/null @@ -1 +0,0 @@ -lman diff --git a/common_syms/agb_flash.txt b/common_syms/agb_flash.txt deleted file mode 100644 index cb421ec80d..0000000000 --- a/common_syms/agb_flash.txt +++ /dev/null @@ -1,10 +0,0 @@ -gFlashTimeoutFlag -PollFlashStatus -WaitForFlashWrite -ProgramFlashSector -gFlash -ProgramFlashByte -gFlashNumRemainingBytes -EraseFlashChip -EraseFlashSector -gFlashMaxTime diff --git a/common_syms/apprentice.txt b/common_syms/apprentice.txt deleted file mode 100644 index 0d3569dcbb..0000000000 --- a/common_syms/apprentice.txt +++ /dev/null @@ -1,3 +0,0 @@ -gApprenticePartyMovesData -gApprenticeQuestionData -gApprenticeFunc diff --git a/common_syms/battle_anim_throw.txt b/common_syms/battle_anim_throw.txt deleted file mode 100755 index 5e2e8b3ff3..0000000000 --- a/common_syms/battle_anim_throw.txt +++ /dev/null @@ -1,3 +0,0 @@ -gMonShrinkDuration -gMonShrinkDelta -gMonShrinkDistance diff --git a/common_syms/battle_controllers.txt b/common_syms/battle_controllers.txt deleted file mode 100644 index 0b3c25266a..0000000000 --- a/common_syms/battle_controllers.txt +++ /dev/null @@ -1,3 +0,0 @@ -gBattlerControllerFuncs -gBattleControllerData -gBattlerControllerEndFuncs diff --git a/common_syms/battle_factory_screen.txt b/common_syms/battle_factory_screen.txt deleted file mode 100644 index 3ddeb6d3b1..0000000000 --- a/common_syms/battle_factory_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gFactorySelect_CurrentOptionFunc diff --git a/common_syms/battle_main.txt b/common_syms/battle_main.txt deleted file mode 100644 index 7a9faa5a13..0000000000 --- a/common_syms/battle_main.txt +++ /dev/null @@ -1,7 +0,0 @@ -gPreBattleCallback1 -gBattleMainFunc -gBattleResults -gLeveledUpInBattle -gHealthboxSpriteIds -gMultiUsePlayerCursor -gNumberOfMovesToChoose diff --git a/common_syms/battle_tower.txt b/common_syms/battle_tower.txt deleted file mode 100644 index 7371109d51..0000000000 --- a/common_syms/battle_tower.txt +++ /dev/null @@ -1 +0,0 @@ -gFrontierTempParty diff --git a/common_syms/berry_blender.txt b/common_syms/berry_blender.txt deleted file mode 100644 index 1b15a33d61..0000000000 --- a/common_syms/berry_blender.txt +++ /dev/null @@ -1 +0,0 @@ -gInGameOpponentsNo diff --git a/common_syms/bg.txt b/common_syms/bg.txt deleted file mode 100644 index 0a3c3aecca..0000000000 --- a/common_syms/bg.txt +++ /dev/null @@ -1 +0,0 @@ -gWindowTileAutoAllocEnabled diff --git a/common_syms/contest.txt b/common_syms/contest.txt deleted file mode 100644 index 6a519fb463..0000000000 --- a/common_syms/contest.txt +++ /dev/null @@ -1 +0,0 @@ -gContestRngValue diff --git a/common_syms/contest_painting.txt b/common_syms/contest_painting.txt deleted file mode 100644 index 32bb8be161..0000000000 --- a/common_syms/contest_painting.txt +++ /dev/null @@ -1,4 +0,0 @@ -gContestMonPixels -gImageProcessingContext -gContestPaintingWinner -gContestPaintingMonPalette diff --git a/common_syms/ereader_screen.txt b/common_syms/ereader_screen.txt deleted file mode 100644 index 2189eedbc9..0000000000 --- a/common_syms/ereader_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gEReaderData diff --git a/common_syms/evolution_scene.txt b/common_syms/evolution_scene.txt deleted file mode 100644 index 137cd3e05d..0000000000 --- a/common_syms/evolution_scene.txt +++ /dev/null @@ -1 +0,0 @@ -gCB2_AfterEvolution diff --git a/common_syms/faraway_island.txt b/common_syms/faraway_island.txt deleted file mode 100755 index e02ca2ec25..0000000000 --- a/common_syms/faraway_island.txt +++ /dev/null @@ -1,3 +0,0 @@ -sPlayerToMewDeltaX -sPlayerToMewDeltaY -sMewDirectionCandidates diff --git a/common_syms/field_camera.txt b/common_syms/field_camera.txt deleted file mode 100644 index 02301ce23c..0000000000 --- a/common_syms/field_camera.txt +++ /dev/null @@ -1,3 +0,0 @@ -gFieldCamera -gTotalCameraPixelOffsetY -gTotalCameraPixelOffsetX diff --git a/common_syms/field_control_avatar.txt b/common_syms/field_control_avatar.txt deleted file mode 100644 index 268f60c641..0000000000 --- a/common_syms/field_control_avatar.txt +++ /dev/null @@ -1 +0,0 @@ -gSelectedObjectEvent diff --git a/common_syms/field_specials.txt b/common_syms/field_specials.txt deleted file mode 100644 index 7adb3f6692..0000000000 --- a/common_syms/field_specials.txt +++ /dev/null @@ -1 +0,0 @@ -gScrollableMultichoice_ListMenuTemplate diff --git a/common_syms/fieldmap.txt b/common_syms/fieldmap.txt deleted file mode 100644 index 0ead758462..0000000000 --- a/common_syms/fieldmap.txt +++ /dev/null @@ -1 +0,0 @@ -gBackupMapLayout diff --git a/common_syms/image_processing_effects.txt b/common_syms/image_processing_effects.txt deleted file mode 100644 index 134f7e88b2..0000000000 --- a/common_syms/image_processing_effects.txt +++ /dev/null @@ -1,10 +0,0 @@ -gCanvasColumnStart -gCanvasPixels -gCanvasRowEnd -gCanvasHeight -gCanvasColumnEnd -gCanvasRowStart -gCanvasMonPersonality -gCanvasWidth -gCanvasPalette -gCanvasPaletteStart diff --git a/common_syms/intro.txt b/common_syms/intro.txt deleted file mode 100644 index d069b1014f..0000000000 --- a/common_syms/intro.txt +++ /dev/null @@ -1,2 +0,0 @@ -gIntroFrameCounter -gMultibootProgramStruct diff --git a/common_syms/librfu_rfu.txt b/common_syms/librfu_rfu.txt deleted file mode 100644 index 4b742dcd25..0000000000 --- a/common_syms/librfu_rfu.txt +++ /dev/null @@ -1,5 +0,0 @@ -gRfuSlotStatusUNI -gRfuSlotStatusNI -gRfuLinkStatus -gRfuStatic -gRfuFixed diff --git a/common_syms/librfu_sio32id.txt b/common_syms/librfu_sio32id.txt deleted file mode 100644 index 97395e84b3..0000000000 --- a/common_syms/librfu_sio32id.txt +++ /dev/null @@ -1 +0,0 @@ -gRfuSIO32Id diff --git a/common_syms/librfu_stwi.txt b/common_syms/librfu_stwi.txt deleted file mode 100644 index a1f7735535..0000000000 --- a/common_syms/librfu_stwi.txt +++ /dev/null @@ -1 +0,0 @@ -gSTWIStatus diff --git a/common_syms/link.txt b/common_syms/link.txt deleted file mode 100644 index 4118d1eb4b..0000000000 --- a/common_syms/link.txt +++ /dev/null @@ -1,35 +0,0 @@ -gLinkPartnersHeldKeys -gLinkDebugSeed -gLocalLinkPlayerBlock -gLinkErrorOccurred -gLinkDebugFlags -gLinkFiller1 -gRemoteLinkPlayersNotReceived -gBlockReceivedStatus -gLinkFiller2 -gLinkHeldKeys -gRecvCmds -gLinkStatus -gLinkDummy1 -gLinkDummy2 -gReadyToExitStandby -gReadyToCloseLink -gReadyCloseLinkType -gSuppressLinkErrorMessage -gWirelessCommType -gSavedLinkPlayerCount -gSendCmd -gSavedMultiplayerId -gReceivedRemoteLinkPlayers -gLinkTestBGInfo -gLinkCallback -gShouldAdvanceLinkState -gLinkTestBlockChecksums -gBlockRequestType -gLinkFiller3 -gLinkFiller4 -gLinkFiller5 -gLastSendQueueCount -gLink -gLastRecvQueueCount -gLinkSavedIme diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt deleted file mode 100644 index 4b8f02bad8..0000000000 --- a/common_syms/link_rfu_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -gRfuAPIBuffer -gRfu diff --git a/common_syms/list_menu.txt b/common_syms/list_menu.txt deleted file mode 100644 index ed5343618c..0000000000 --- a/common_syms/list_menu.txt +++ /dev/null @@ -1,2 +0,0 @@ -gListMenuOverride -gMultiuseListMenuTemplate diff --git a/common_syms/load_save.txt b/common_syms/load_save.txt deleted file mode 100644 index 2d3d9b802f..0000000000 --- a/common_syms/load_save.txt +++ /dev/null @@ -1,4 +0,0 @@ -gFlashMemoryPresent -gSaveBlock1Ptr -gSaveBlock2Ptr -gPokemonStoragePtr diff --git a/common_syms/m4a.txt b/common_syms/m4a.txt deleted file mode 100644 index 0d6b13a79b..0000000000 --- a/common_syms/m4a.txt +++ /dev/null @@ -1,12 +0,0 @@ -gSoundInfo -gPokemonCrySongs -gPokemonCryMusicPlayers -gMPlayInfo_BGM -gMPlayJumpTable -gCgbChans -gMPlayInfo_SE1 -gMPlayInfo_SE2 -gPokemonCryTracks -gPokemonCrySong -gMPlayMemAccArea -gMPlayInfo_SE3 diff --git a/common_syms/main.txt b/common_syms/main.txt deleted file mode 100644 index f1f8076adf..0000000000 --- a/common_syms/main.txt +++ /dev/null @@ -1,10 +0,0 @@ -gKeyRepeatStartDelay -gLinkTransferringData -gMain -gKeyRepeatContinueDelay -gSoftResetDisabled -gIntrTable -gLinkVSyncDisabled -IntrMain_Buffer -gPcmDmaCounter -gAgbMainLoop_sp diff --git a/common_syms/mauville_old_man.txt b/common_syms/mauville_old_man.txt deleted file mode 100644 index 9d77b8692b..0000000000 --- a/common_syms/mauville_old_man.txt +++ /dev/null @@ -1 +0,0 @@ -gBardSong diff --git a/common_syms/overworld.txt b/common_syms/overworld.txt deleted file mode 100644 index dcada0bbef..0000000000 --- a/common_syms/overworld.txt +++ /dev/null @@ -1,8 +0,0 @@ -gOverworldTilemapBuffer_Bg2 -gOverworldTilemapBuffer_Bg1 -gOverworldTilemapBuffer_Bg3 -gHeldKeyCodeToSend -gFieldCallback -gFieldCallback2 -gLocalLinkPlayerId -gFieldLinkPlayerCount diff --git a/common_syms/party_menu.txt b/common_syms/party_menu.txt deleted file mode 100644 index 6ed37392c2..0000000000 --- a/common_syms/party_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gItemUseCB diff --git a/common_syms/pokedex.txt b/common_syms/pokedex.txt deleted file mode 100644 index c7a297b2af..0000000000 --- a/common_syms/pokedex.txt +++ /dev/null @@ -1,2 +0,0 @@ -gUnusedPokedexU8 -gPokedexVBlankCB diff --git a/common_syms/pokedex_cry_screen.txt b/common_syms/pokedex_cry_screen.txt deleted file mode 100644 index d16ec36d64..0000000000 --- a/common_syms/pokedex_cry_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gDexCryScreenState diff --git a/common_syms/random.txt b/common_syms/random.txt deleted file mode 100644 index 8037c69586..0000000000 --- a/common_syms/random.txt +++ /dev/null @@ -1,2 +0,0 @@ -gRngValue -gRng2Value diff --git a/common_syms/rtc.txt b/common_syms/rtc.txt deleted file mode 100644 index fa00a34d51..0000000000 --- a/common_syms/rtc.txt +++ /dev/null @@ -1 +0,0 @@ -gLocalTime diff --git a/common_syms/save.txt b/common_syms/save.txt deleted file mode 100644 index 131031d506..0000000000 --- a/common_syms/save.txt +++ /dev/null @@ -1,13 +0,0 @@ -gLastWrittenSector -gLastSaveCounter -gLastKnownGoodSector -gDamagedSaveSectors -gSaveCounter -gReadWriteSector -gIncrementalSectorId -gSaveUnusedVar -gSaveFileStatus -gGameContinueCallback -gRamSaveSectorLocations -gSaveUnusedVar2 -gSaveAttemptStatus diff --git a/common_syms/sound.txt b/common_syms/sound.txt deleted file mode 100644 index 0f6f2fc758..0000000000 --- a/common_syms/sound.txt +++ /dev/null @@ -1 +0,0 @@ -gDisableMusic diff --git a/common_syms/sprite.txt b/common_syms/sprite.txt deleted file mode 100644 index 627c01c0d0..0000000000 --- a/common_syms/sprite.txt +++ /dev/null @@ -1,2 +0,0 @@ -gOamMatrixAllocBitmap -gReservedSpritePaletteCount diff --git a/common_syms/start_menu.txt b/common_syms/start_menu.txt deleted file mode 100644 index 05beaf57c2..0000000000 --- a/common_syms/start_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gMenuCallback diff --git a/common_syms/task.txt b/common_syms/task.txt deleted file mode 100644 index 6601bd11bb..0000000000 --- a/common_syms/task.txt +++ /dev/null @@ -1 +0,0 @@ -gTasks diff --git a/common_syms/text.txt b/common_syms/text.txt deleted file mode 100644 index cd8886e5b1..0000000000 --- a/common_syms/text.txt +++ /dev/null @@ -1,4 +0,0 @@ -gFonts -gDisableTextPrinters -gCurGlyph -gTextFlags diff --git a/common_syms/trainer_see.txt b/common_syms/trainer_see.txt deleted file mode 100644 index 0b30a632a0..0000000000 --- a/common_syms/trainer_see.txt +++ /dev/null @@ -1,5 +0,0 @@ -gWhichTrainerToFaceAfterBattle -gPostBattleMovementScript -gApproachingTrainers -gNoOfApproachingTrainers -gTrainerApproachedPlayer diff --git a/common_syms/tv.txt b/common_syms/tv.txt deleted file mode 100644 index 0370f65e1f..0000000000 --- a/common_syms/tv.txt +++ /dev/null @@ -1,4 +0,0 @@ -sCurTVShowSlot -sTV_SecretBaseVisitMovesTemp -sTV_DecorationsBuffer -sTV_SecretBaseVisitMonsTemp diff --git a/common_syms/window.txt b/common_syms/window.txt deleted file mode 100644 index 24c093a226..0000000000 --- a/common_syms/window.txt +++ /dev/null @@ -1,2 +0,0 @@ -gTransparentTileNumber -gWindowBgTilemapBuffers diff --git a/ld_script.ld b/ld_script.ld deleted file mode 100644 index a0c069c965..0000000000 --- a/ld_script.ld +++ /dev/null @@ -1,1391 +0,0 @@ -ENTRY(Start) - -gNumMusicPlayers = 4; -gMaxLines = 0; -gInitialMainCB2 = CB2_InitCopyrightScreenAfterBootup; - -MEMORY -{ - EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K - IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K - ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M -} - -SECTIONS { - - .ewram ORIGIN(EWRAM) : AT (__ewram_lma) - ALIGN(4) - { - __ewram_start = .; - *(.ewram*) - __ewram_end = .; - } > EWRAM - - .ewram.sbss (NOLOAD) : - ALIGN(4) - { - INCLUDE "sym_ewram.ld" - src/*.o(.sbss); - gflib/*.o(.sbss); - - *libc.a:impure.o(.data); - *libc.a:locale.o(.data); - *libc.a:mallocr.o(.data); - } > EWRAM - - .iwram ORIGIN(IWRAM) : AT (__iwram_lma) - ALIGN(4) - { - __iwram_start = .; - *(.iwram*); - __iwram_end = .; - } > IWRAM - - .iwram.bss (NOLOAD) : - ALIGN(4) - { - /* .bss starts at 0x3000000 */ - INCLUDE "sym_bss.ld" - src/*.o(.bss); - gflib/*.o(.bss); - data/*.o(.bss); - - /* .bss.code starts at 0x3001AA8 */ - src/m4a.o(.bss.code); - - /* COMMON starts at 0x30022A8 */ - INCLUDE "sym_common.ld" - *libc.a:sbrkr.o(COMMON); - } > IWRAM - - /* BEGIN ROM DATA */ - . = 0x8000000; - - .text : - ALIGN(4) - { - src/rom_header.o(.text); - src/rom_header_gf.o(.text.*); - src/rom_header_rhh.o(.text.*); - src/crt0.o(.text); - src/main.o(.text); - gflib/malloc.o(.text); - gflib/dma3_manager.o(.text); - gflib/gpu_regs.o(.text); - gflib/bg.o(.text); - gflib/blit.o(.text); - gflib/window.o(.text); - gflib/text.o(.text); - gflib/sprite.o(.text); - gflib/string_util.o(.text); - src/link.o(.text); - src/AgbRfu_LinkManager.o(.text); - src/link_rfu_3.o(.text); - src/link_rfu_2.o(.text); - src/union_room.o(.text); - src/mystery_gift_menu.o(.text); - src/union_room_player_avatar.o(.text); - src/wireless_communication_status_screen.o(.text); - src/union_room_battle.o(.text); - src/mystery_gift.o(.text); - src/mystery_gift_view.o(.text); - src/mystery_gift_server.o(.text); - src/mystery_gift_client.o(.text); - src/mystery_gift_link.o(.text); - src/wonder_news.o(.text); - src/union_room_chat.o(.text); - src/berry_crush.o(.text); - src/berry_powder.o(.text); - src/dodrio_berry_picking.o(.text); - src/pokemon_jump.o(.text); - src/minigame_countdown.o(.text); - src/rtc.o(.text); - src/main_menu.o(.text); - src/battle_controllers.o(.text); - src/decompress.o(.text); - src/digit_obj_util.o(.text); - src/battle_bg.o(.text); - src/battle_main.o(.text); - src/battle_util.o(.text); - src/battle_z_move.o(.text); - src/battle_script_commands.o(.text); - src/battle_util2.o(.text); - src/battle_controller_player.o(.text); - src/battle_gfx_sfx_util.o(.text); - src/battle_controller_opponent.o(.text); - src/battle_ai_switch_items.o(.text); - src/battle_controller_link_opponent.o(.text); - src/battle_debug.o(.text); - src/pokemon.o(.text); - src/trig.o(.text); - src/random.o(.text); - src/util.o(.text); - src/daycare.o(.text); - src/egg_hatch.o(.text); - src/battle_interface.o(.text); - src/battle_anim_smokescreen.o(.text); - src/pokeball.o(.text); - src/load_save.o(.text); - src/trade.o(.text); - src/berry_blender.o(.text); - src/play_time.o(.text); - src/new_game.o(.text); - src/overworld.o(.text); - src/fieldmap.o(.text); - src/metatile_behavior.o(.text); - src/field_camera.o(.text); - src/field_door.o(.text); - src/field_player_avatar.o(.text); - src/event_object_movement.o(.text); - src/follower_helper.o(.text); - src/field_message_box.o(.text); - src/event_object_lock.o(.text); - src/text_window.o(.text); - src/script.o(.text); - src/scrcmd.o(.text); - src/field_control_avatar.o(.text); - src/event_data.o(.text); - src/coord_event_weather.o(.text); - src/field_tasks.o(.text); - src/clock.o(.text); - src/reset_rtc_screen.o(.text); - src/start_menu.o(.text); - src/tileset_anims.o(.text); - src/palette.o(.text); - src/sound.o(.text); - src/battle_anim.o(.text); - src/battle_anim_mons.o(.text); - src/task.o(.text); - src/reshow_battle_screen.o(.text); - src/battle_anim_status_effects.o(.text); - src/title_screen.o(.text); - src/field_weather.o(.text); - src/field_weather_effect.o(.text); - src/field_screen_effect.o(.text); - src/battle_setup.o(.text); - src/cable_club.o(.text); - src/trainer_see.o(.text); - src/wild_encounter.o(.text); - src/field_effect.o(.text); - src/scanline_effect.o(.text); - src/option_menu.o(.text); - src/pokedex.o(.text); - src/trainer_card.o(.text); - src/frontier_pass.o(.text); - src/pokemon_storage_system.o(.text); - src/pokemon_icon.o(.text); - src/script_movement.o(.text); - src/fldeff_cut.o(.text); - src/mail_data.o(.text); - src/map_name_popup.o(.text); - src/item_menu_icons.o(.text); - src/battle_anim_mon_movement.o(.text); - src/item.o(.text); - src/contest.o(.text); - src/shop.o(.text); - src/fldeff_escalator.o(.text); - src/berry.o(.text); - src/script_menu.o(.text); - src/naming_screen.o(.text); - src/money.o(.text); - src/contest_effect.o(.text); - src/record_mixing.o(.text); - src/secret_base.o(.text); - src/tv.o(.text); - src/contest_util.o(.text); - src/script_pokemon_util.o(.text); - src/field_poison.o(.text); - src/pokemon_size_record.o(.text); - src/fldeff_misc.o(.text); - src/field_special_scene.o(.text); - src/rotating_gate.o(.text); - src/safari_zone.o(.text); - src/contest_link.o(.text); - src/item_use.o(.text); - src/battle_anim_effects_1.o(.text); - src/battle_anim_effects_2.o(.text); - src/battle_anim_water.o(.text); - src/battle_anim_fire.o(.text); - src/battle_anim_electric.o(.text); - src/battle_anim_ice.o(.text); - src/battle_anim_fight.o(.text); - src/battle_anim_poison.o(.text); - src/battle_anim_flying.o(.text); - src/battle_anim_psychic.o(.text); - src/battle_anim_bug.o(.text); - src/battle_anim_rock.o(.text); - src/battle_anim_ghost.o(.text); - src/battle_anim_dragon.o(.text); - src/battle_anim_dark.o(.text); - src/battle_anim_ground.o(.text); - src/battle_anim_normal.o(.text); - src/battle_anim_utility_funcs.o(.text); - src/battle_anim_new.o(.text); - src/battle_intro.o(.text); - src/bike.o(.text); - src/easy_chat.o(.text); - src/mon_markings.o(.text); - src/mauville_old_man.o(.text); - src/mail.o(.text); - src/menu_helpers.o(.text); - src/dewford_trend.o(.text); - src/heal_location.o(.text); - src/region_map.o(.text); - src/image_processing_effects.o(.text); - src/decoration.o(.text); - src/slot_machine.o(.text); - src/contest_painting.o(.text); - src/battle_ai_main.o(.text); - src/battle_ai_util.o(.text); - src/trader.o(.text); - src/starter_choose.o(.text); - src/wallclock.o(.text); - src/fldeff_rocksmash.o(.text); - src/fldeff_dig.o(.text); - src/pokeblock.o(.text); - src/fldeff_flash.o(.text); - src/post_battle_event_funcs.o(.text); - src/time_events.o(.text); - src/birch_pc.o(.text); - src/hof_pc.o(.text); - src/field_specials.o(.text); - src/battle_records.o(.text); - src/pokedex_area_screen.o(.text); - src/evolution_scene.o(.text); - src/roulette.o(.text); - src/pokedex_cry_screen.o(.text); - src/coins.o(.text); - src/landmark.o(.text); - src/fldeff_strength.o(.text); - src/battle_transition.o(.text); - src/battle_controller_link_partner.o(.text); - src/battle_message.o(.text); - src/cable_car.o(.text); - src/math_util.o(.text); - src/palette_util.o(.text); - src/confetti_util.o(.text); - src/save.o(.text); - src/mystery_event_script.o(.text); - src/field_effect_helpers.o(.text); - src/contest_ai.o(.text); - src/battle_anim_sound_tasks.o(.text); - src/battle_controller_safari.o(.text); - src/fldeff_sweetscent.o(.text); - src/battle_anim_effects_3.o(.text); - src/move_relearner.o(.text); - src/fldeff_softboiled.o(.text); - src/decoration_inventory.o(.text); - src/roamer.o(.text); - src/battle_tower.o(.text); - src/use_pokeblock.o(.text); - src/battle_controller_wally.o(.text); - src/player_pc.o(.text); - src/intro.o(.text); - src/reload_save.o(.text); - src/field_region_map.o(.text); - src/battle_anim_throw.o(.text); - src/hall_of_fame.o(.text); - src/credits.o(.text); - src/lottery_corner.o(.text); - src/diploma.o(.text); - src/berry_tag_screen.o(.text); - src/mystery_event_menu.o(.text); - src/save_failed_screen.o(.text); - src/braille_puzzles.o(.text); - src/pokeblock_feed.o(.text); - src/clear_save_data_screen.o(.text); - src/intro_credits_graphics.o(.text); - src/evolution_graphics.o(.text); - src/bard_music.o(.text); - src/fldeff_teleport.o(.text); - src/battle_tv.o(.text); - src/pokemon_animation.o(.text); - src/recorded_battle.o(.text); - src/battle_controller_recorded_opponent.o(.text); - src/battle_controller_recorded_player.o(.text); - src/trainer_pokemon_sprites.o(.text); - src/lilycove_lady.o(.text); - src/battle_dome.o(.text); - src/battle_palace.o(.text); - src/match_call.o(.text); - src/menu.o(.text); - src/battle_factory_screen.o(.text); - src/apprentice.o(.text); - src/frontier_util.o(.text); - src/battle_arena.o(.text); - src/battle_factory.o(.text); - src/battle_pike.o(.text); - src/rotating_tile_puzzle.o(.text); - src/battle_pyramid.o(.text); - src/item_menu.o(.text); - src/list_menu.o(.text); - src/dynamic_placeholder_text_util.o(.text); - src/save_location.o(.text); - src/item_icon.o(.text); - src/party_menu.o(.text); - src/battle_tent.o(.text); - src/braille.o(.text); - src/multiboot.o(.text); - src/berry_fix_graphics.o(.text); - src/battle_controller_player_partner.o(.text); - src/mirage_tower.o(.text); - src/berry_fix_program.o(.text); - src/pokemon_summary_screen.o(.text); - src/pokedex_area_region_map.o(.text); - src/battle_pyramid_bag.o(.text); - src/pokenav.o(.text); - src/pokenav_main_menu.o(.text); - src/pokenav_list.o(.text); - src/pokenav_menu_handler.o(.text); - src/pokenav_menu_handler_gfx.o(.text); - src/pokenav_match_call_list.o(.text); - src/pokenav_match_call_gfx.o(.text); - src/pokenav_region_map.o(.text); - src/pokenav_conditions.o(.text); - src/pokenav_conditions_gfx.o(.text); - src/pokenav_conditions_search_results.o(.text); - src/pokenav_ribbons_list.o(.text); - src/pokenav_ribbons_summary.o(.text); - src/pokenav_match_call_data.o(.text); - src/menu_specialized.o(.text); - src/ereader_helpers.o(.text); - src/faraway_island.o(.text); - src/ereader_screen.o(.text); - src/trainer_hill.o(.text); - src/rayquaza_scene.o(.text); - src/walda_phrase.o(.text); - src/contest_link_util.o(.text); - src/gym_leader_rematch.o(.text); - src/battle_transition_frontier.o(.text); - src/international_string_util.o(.text); - src/pokemon_sprite_visualizer.o(.text); - src/expansion_intro.o(.text); - } > ROM =0 - - script_data : - ALIGN(4) - { - data/event_scripts.o(script_data); - data/battle_anim_scripts.o(script_data); - data/battle_scripts_1.o(script_data); - data/field_effect_scripts.o(script_data); - data/battle_scripts_2.o(script_data); - data/contest_ai_scripts.o(script_data); - data/mystery_event_script_cmd_table.o(script_data); - } > ROM =0 - - lib_text : - ALIGN(4) - { - src/libgcnmultiboot.o(.text); - src/m4a_1.o(.text); - src/m4a.o(.text); - src/agb_flash.o(.text); - src/agb_flash_1m.o(.text); - src/agb_flash_mx.o(.text); - src/siirtc.o(.text); - src/librfu_stwi.o(.text); - src/librfu_intr.o(.text); - src/librfu_rfu.o(.text); - src/librfu_sio32id.o(.text); - src/libisagbprn.o(.text); - *libagbsyscall.a:ArcTan2.o(.text); - *libagbsyscall.a:BgAffineSet.o(.text); - *libagbsyscall.a:CpuFastSet.o(.text); - *libagbsyscall.a:CpuSet.o(.text); - *libagbsyscall.a:Div.o(.text); - *libagbsyscall.a:LZ77UnCompVram.o(.text); - *libagbsyscall.a:LZ77UnCompWram.o(.text); - *libagbsyscall.a:MultiBoot.o(.text); - *libagbsyscall.a:ObjAffineSet.o(.text); - *libagbsyscall.a:RLUnCompVram.o(.text); - *libagbsyscall.a:RLUnCompWram.o(.text); - *libagbsyscall.a:RegisterRamReset.o(.text); - *libagbsyscall.a:SoftReset.o(.text); - *libagbsyscall.a:Sqrt.o(.text); - *libagbsyscall.a:VBlankIntrWait.o(.text); - *libgcc.a:_call_via_rX.o(.text); - *libgcc.a:_divdi3.o(.text); - *libgcc.a:_divsi3.o(.text); - *libgcc.a:_dvmd_tls.o(.text); - *libgcc.a:_fixunsdfsi.o(.text); - *libgcc.a:_fixunssfsi.o(.text); - *libgcc.a:_modsi3.o(.text); - *libgcc.a:_muldi3.o(.text); - *libgcc.a:_udivdi3.o(.text); - *libgcc.a:_udivsi3.o(.text); - *libgcc.a:_umodsi3.o(.text); - *libgcc.a:dp-bit.o(.text); - *libgcc.a:fp-bit.o(.text); - *libgcc.a:_lshrdi3.o(.text); - *libgcc.a:_negdi2.o(.text); - *libc.a:memcpy.o(.text); - *libc.a:memset.o(.text); - *libc.a:strcmp.o(.text); - *libc.a:strcpy.o(.text); - *libc.a:impure.o(.text); - *libc.a:vsprintf.o(.text); - *libc.a:vfprintf.o(.text); - *libc.a:wsetup.o(.text); - *libc.a:dtoa.o(.text); - *libc.a:fflush.o(.text); - *libc.a:findfp.o(.text); - *libc.a:freer.o(.text); - *libc.a:mtrim.o(.text); - *libc.a:fvwrite.o(.text); - *libc.a:fwalk.o(.text); - *libc.a:locale.o(.text); - *libc.a:makebuf.o(.text); - *libc.a:mallocr.o(.text); - *libc.a:mbtowc_r.o(.text); - *libc.a:memchr.o(.text); - *libc.a:memmove.o(.text); - *libc.a:mlock.o(.text); - *libc.a:mprec.o(.text); - *libc.a:s_isinf.o(.text); - *libc.a:s_isnan.o(.text); - *libc.a:sbrkr.o(.text); - *libc.a:stdio.o(.text); - *libc.a:strlen.o(.text); - *libc.a:syscalls.o(.text); - *libc.a:writer.o(.text); - *libc.a:callocr.o(.text); - *libc.a:closer.o(.text); - *libc.a:errno.o(.text); - *libc.a:fstatr.o(.text); - *libc.a:libcfunc.o(.text); - *libc.a:lseekr.o(.text); - *libc.a:readr.o(.text); - } > ROM =0 - - .rodata : - ALIGN(4) - { - src/rom_header.o(.rodata); - src/rom_header_gf.o(.rodata); - src/main.o(.rodata); - gflib/bg.o(.rodata); - gflib/window.o(.rodata); - gflib/text.o(.rodata); - gflib/sprite.o(.rodata); - gflib/io_reg.o(.rodata); - gflib/string_util.o(.rodata); - src/link.o(.rodata); - src/link.o(.rodata.str1.4); - src/AgbRfu_LinkManager.o(.rodata); - src/link_rfu_3.o(.rodata); - src/link_rfu_2.o(.rodata); - src/link_rfu_2.o(.rodata.str1.4); - src/union_room.o(.rodata); - src/mystery_gift_menu.o(.rodata); - src/union_room_player_avatar.o(.rodata); - src/wireless_communication_status_screen.o(.rodata); - src/union_room_battle.o(.rodata); - src/mystery_gift.o(.rodata); - src/mystery_gift_view.o(.rodata); - src/mystery_gift_server.o(.rodata); - src/mystery_gift_client.o(.rodata); - src/mystery_gift_scripts.o(.rodata); - src/wonder_news.o(.rodata); - src/union_room_chat.o(.rodata); - src/berry_crush.o(.rodata); - src/berry_powder.o(.rodata); - src/dodrio_berry_picking.o(.rodata); - src/pokemon_jump.o(.rodata); - src/minigame_countdown.o(.rodata); - src/rtc.o(.rodata); - src/main_menu.o(.rodata); - src/battle_controllers.o(.rodata); - src/digit_obj_util.o(.rodata); - src/data.o(.rodata); - src/battle_bg.o(.rodata); - src/battle_main.o(.rodata); - src/battle_util.o(.rodata); - src/battle_z_move.o(.rodata); - src/battle_script_commands.o(.rodata); - src/battle_controller_player.o(.rodata); - src/battle_anim_smokescreen.o(.rodata); - src/battle_controller_opponent.o(.rodata); - src/battle_ai_switch_items.o(.rodata); - src/battle_controller_link_opponent.o(.rodata); - src/battle_debug.o(.rodata); - src/pokemon.o(.rodata); - src/trig.o(.rodata); - src/util.o(.rodata); - src/daycare.o(.rodata); - src/egg_hatch.o(.rodata); - src/battle_gfx_sfx_util.o(.rodata); - src/battle_interface.o(.rodata); - src/pokeball.o(.rodata); - src/trade.o(.rodata); - src/berry_blender.o(.rodata); - src/new_game.o(.rodata); - src/overworld.o(.rodata); - src/tilesets.o(.rodata); - data/maps.o(.rodata); - src/fieldmap.o(.rodata); - src/metatile_behavior.o(.rodata); - src/field_door.o(.rodata); - src/field_player_avatar.o(.rodata); - src/event_object_movement.o(.rodata); - src/follower_helper.o(.rodata); - src/text_window.o(.rodata); - src/scrcmd.o(.rodata); - src/field_control_avatar.o(.rodata); - src/coord_event_weather.o(.rodata); - src/field_tasks.o(.rodata); - src/reset_rtc_screen.o(.rodata); - src/start_menu.o(.rodata); - src/tileset_anims.o(.rodata); - src/palette.o(.rodata); - src/sound.o(.rodata); - src/battle_anim.o(.rodata); - src/battle_anim_mons.o(.rodata); - data/map_events.o(.rodata); - src/reshow_battle_screen.o(.rodata); - src/battle_anim_status_effects.o(.rodata); - src/title_screen.o(.rodata); - src/field_weather.o(.rodata); - src/field_weather_effect.o(.rodata); - src/field_screen_effect.o(.rodata); - src/battle_setup.o(.rodata); - src/cable_club.o(.rodata); - src/trainer_see.o(.rodata); - src/wild_encounter.o(.rodata); - src/field_effect.o(.rodata); - src/scanline_effect.o(.rodata); - src/option_menu.o(.rodata); - src/pokedex.o(.rodata); - src/trainer_card.o(.rodata); - src/frontier_pass.o(.rodata); - src/pokemon_storage_system.o(.rodata); - src/pokemon_icon.o(.rodata); - src/fldeff_cut.o(.rodata); - src/map_name_popup.o(.rodata); - src/item_menu_icons.o(.rodata); - src/battle_anim_mon_movement.o(.rodata); - src/item.o(.rodata); - src/contest.o(.rodata); - src/shop.o(.rodata); - src/fldeff_escalator.o(.rodata); - src/berry.o(.rodata); - src/script_menu.o(.rodata); - src/naming_screen.o(.rodata); - src/money.o(.rodata); - src/contest_effect.o(.rodata); - src/record_mixing.o(.rodata); - src/secret_base.o(.rodata); - src/tv.o(.rodata); - src/contest_util.o(.rodata); - src/script_pokemon_util.o(.rodata); - src/pokemon_size_record.o(.rodata) - src/fldeff_misc.o(.rodata); - src/field_special_scene.o(.rodata); - src/rotating_gate.o(.rodata); - src/contest_link.o(.rodata); - src/item_use.o(.rodata); - src/battle_anim_effects_1.o(.rodata); - src/battle_anim_effects_2.o(.rodata); - src/battle_anim_water.o(.rodata); - src/battle_anim_fire.o(.rodata); - src/battle_anim_electric.o(.rodata); - src/battle_anim_ice.o(.rodata); - src/battle_anim_fight.o(.rodata); - src/battle_anim_poison.o(.rodata); - src/battle_anim_flying.o(.rodata); - src/battle_anim_psychic.o(.rodata); - src/battle_anim_bug.o(.rodata); - src/battle_anim_rock.o(.rodata); - src/battle_anim_ghost.o(.rodata); - src/battle_anim_dragon.o(.rodata); - src/battle_anim_dark.o(.rodata); - src/battle_anim_ground.o(.rodata); - src/battle_anim_normal.o(.rodata); - src/battle_anim_utility_funcs.o(.rodata); - src/battle_anim_new.o(.rodata); - src/battle_intro.o(.rodata); - src/bike.o(.rodata); - src/easy_chat.o(.rodata); - src/mon_markings.o(.rodata); - src/mauville_old_man.o(.rodata); - src/mail.o(.rodata); - src/menu_helpers.o(.rodata); - src/heal_location.o(.rodata); - src/region_map.o(.rodata); - src/image_processing_effects.o(.rodata); - src/decoration.o(.rodata); - src/slot_machine.o(.rodata); - src/contest_painting.o(.rodata); - src/battle_ai_main.o(.rodata); - src/battle_ai_util.o(.rodata); - src/trader.o(.rodata); - src/starter_choose.o(.rodata); - src/wallclock.o(.rodata); - src/pokeblock.o(.rodata); - src/fldeff_flash.o(.rodata); - src/time_events.o(.rodata); - src/field_specials.o(.rodata); - src/battle_records.o(.rodata); - src/pokedex_area_screen.o(.rodata); - src/evolution_scene.o(.rodata); - src/roulette.o(.rodata); - src/pokedex_cry_screen.o(.rodata); - src/landmark.o(.rodata); - src/battle_transition.o(.rodata); - src/battle_controller_link_partner.o(.rodata); - src/battle_message.o(.rodata); - src/cable_car.o(.rodata); - src/save.o(.rodata); - src/field_effect_helpers.o(.rodata); - src/contest_ai.o(.rodata); - src/battle_anim_sound_tasks.o(.rodata); - src/battle_controller_safari.o(.rodata); - src/battle_anim_effects_3.o(.rodata); - src/move_relearner.o(.rodata); - src/roamer.o(.rodata); - src/battle_tower.o(.rodata); - src/use_pokeblock.o(.rodata); - src/battle_controller_wally.o(.rodata); - src/player_pc.o(.rodata); - src/intro.o(.rodata); - src/field_region_map.o(.rodata); - src/battle_anim_throw.o(.rodata); - src/hall_of_fame.o(.rodata); - src/credits.o(.rodata); - src/lottery_corner.o(.rodata); - src/diploma.o(.rodata); - src/strings.o(.rodata); - src/berry_tag_screen.o(.rodata); - src/mystery_event_menu.o(.rodata); - src/save_failed_screen.o(.rodata); - src/braille_puzzles.o(.rodata); - src/pokeblock_feed.o(.rodata); - src/clear_save_data_screen.o(.rodata); - src/intro_credits_graphics.o(.rodata); - src/evolution_graphics.o(.rodata); - src/bard_music.o(.rodata); - src/battle_tv.o(.rodata); - src/pokemon_animation.o(.rodata); - src/battle_controller_recorded_opponent.o(.rodata); - src/battle_controller_recorded_player.o(.rodata); - src/trainer_pokemon_sprites.o(.rodata); - src/lilycove_lady.o(.rodata); - src/battle_dome.o(.rodata); - src/battle_palace.o(.rodata); - src/match_call.o(.rodata); - src/menu.o(.rodata); - src/battle_factory_screen.o(.rodata); - src/apprentice.o(.rodata); - src/frontier_util.o(.rodata); - src/battle_arena.o(.rodata); - src/battle_factory.o(.rodata); - src/battle_pike.o(.rodata); - src/rotating_tile_puzzle.o(.rodata); - src/battle_pyramid.o(.rodata); - src/item_menu.o(.rodata); - src/list_menu.o(.rodata); - src/save_location.o(.rodata); - src/item_icon.o(.rodata); - src/party_menu.o(.rodata); - src/battle_tent.o(.rodata); - src/braille.o(.rodata); - src/multiboot.o(.rodata); - src/berry_fix_graphics.o(.rodata); - src/battle_controller_player_partner.o(.rodata); - src/mirage_tower.o(.rodata); - src/berry_fix_program.o(.rodata); - src/pokemon_summary_screen.o(.rodata); - src/pokedex_area_region_map.o(.rodata); - src/battle_pyramid_bag.o(.rodata); - src/pokenav.o(.rodata); - src/pokenav_main_menu.o(.rodata); - src/pokenav_list.o(.rodata); - src/pokenav_menu_handler.o(.rodata); - src/pokenav_menu_handler_gfx.o(.rodata); - src/pokenav_match_call_list.o(.rodata); - src/pokenav_match_call_gfx.o(.rodata); - src/pokenav_region_map.o(.rodata); - src/pokenav_conditions_gfx.o(.rodata); - src/pokenav_conditions_search_results.o(.rodata); - src/pokenav_ribbons_list.o(.rodata); - src/pokenav_ribbons_summary.o(.rodata); - src/pokenav_match_call_data.o(.rodata); - src/menu_specialized.o(.rodata); - src/ereader_helpers.o(.rodata); - src/faraway_island.o(.rodata); - src/ereader_screen.o(.rodata); - src/trainer_hill.o(.rodata); - src/rayquaza_scene.o(.rodata); - src/walda_phrase.o(.rodata); - src/gym_leader_rematch.o(.rodata); - src/battle_transition_frontier.o(.rodata); - src/text_input_strings.o(.rodata); - src/fonts.o(.rodata); - src/international_string_util.o(.rodata); - src/mystery_event_msg.o(.rodata); - data/mystery_gift.o(.rodata); - src/m4a_tables.o(.rodata); - data/sound_data.o(.rodata); - src/pokemon_sprite_visualizer.o(.rodata); - src/expansion_intro.o(.rodata); - } > ROM =0 - - song_data : - ALIGN(4) - { - sound/songs/midi/mus_dummy.o(.rodata); - sound/songs/midi/se_use_item.o(.rodata); - sound/songs/midi/se_pc_login.o(.rodata); - sound/songs/midi/se_pc_off.o(.rodata); - sound/songs/midi/se_pc_on.o(.rodata); - sound/songs/midi/se_select.o(.rodata); - sound/songs/se_win_open.o(.rodata); - sound/songs/se_wall_hit.o(.rodata); - sound/songs/midi/se_door.o(.rodata); - sound/songs/midi/se_exit.o(.rodata); - sound/songs/midi/se_ledge.o(.rodata); - sound/songs/midi/se_bike_bell.o(.rodata); - sound/songs/midi/se_not_effective.o(.rodata); - sound/songs/midi/se_effective.o(.rodata); - sound/songs/midi/se_super_effective.o(.rodata); - sound/songs/midi/se_ball_open.o(.rodata); - sound/songs/midi/se_faint.o(.rodata); - sound/songs/midi/se_flee.o(.rodata); - sound/songs/midi/se_sliding_door.o(.rodata); - sound/songs/midi/se_ship.o(.rodata); - sound/songs/midi/se_bang.o(.rodata); - sound/songs/midi/se_pin.o(.rodata); - sound/songs/midi/se_boo.o(.rodata); - sound/songs/midi/se_ball.o(.rodata); - sound/songs/midi/se_contest_place.o(.rodata); - sound/songs/midi/se_a.o(.rodata); - sound/songs/midi/se_i.o(.rodata); - sound/songs/midi/se_u.o(.rodata); - sound/songs/midi/se_e.o(.rodata); - sound/songs/midi/se_o.o(.rodata); - sound/songs/midi/se_n.o(.rodata); - sound/songs/midi/se_success.o(.rodata); - sound/songs/midi/se_failure.o(.rodata); - sound/songs/midi/se_exp.o(.rodata); - sound/songs/midi/se_bike_hop.o(.rodata); - sound/songs/midi/se_switch.o(.rodata); - sound/songs/midi/se_click.o(.rodata); - sound/songs/midi/se_fu_zaku.o(.rodata); - sound/songs/midi/se_contest_condition_lose.o(.rodata); - sound/songs/midi/se_lavaridge_fall_warp.o(.rodata); - sound/songs/midi/se_ice_stairs.o(.rodata); - sound/songs/midi/se_ice_break.o(.rodata); - sound/songs/midi/se_ice_crack.o(.rodata); - sound/songs/midi/se_fall.o(.rodata); - sound/songs/midi/se_unlock.o(.rodata); - sound/songs/midi/se_warp_in.o(.rodata); - sound/songs/midi/se_warp_out.o(.rodata); - sound/songs/midi/se_repel.o(.rodata); - sound/songs/midi/se_rotating_gate.o(.rodata); - sound/songs/midi/se_truck_move.o(.rodata); - sound/songs/midi/se_truck_stop.o(.rodata); - sound/songs/midi/se_truck_unload.o(.rodata); - sound/songs/midi/se_truck_door.o(.rodata); - sound/songs/midi/se_berry_blender.o(.rodata); - sound/songs/midi/se_card.o(.rodata); - sound/songs/midi/se_save.o(.rodata); - sound/songs/midi/se_ball_bounce_1.o(.rodata); - sound/songs/midi/se_ball_bounce_2.o(.rodata); - sound/songs/midi/se_ball_bounce_3.o(.rodata); - sound/songs/midi/se_ball_bounce_4.o(.rodata); - sound/songs/midi/se_ball_trade.o(.rodata); - sound/songs/midi/se_ball_throw.o(.rodata); - sound/songs/midi/se_note_c.o(.rodata); - sound/songs/midi/se_note_d.o(.rodata); - sound/songs/midi/se_note_e.o(.rodata); - sound/songs/midi/se_note_f.o(.rodata); - sound/songs/midi/se_note_g.o(.rodata); - sound/songs/midi/se_note_a.o(.rodata); - sound/songs/midi/se_note_b.o(.rodata); - sound/songs/midi/se_note_c_high.o(.rodata); - sound/songs/midi/se_puddle.o(.rodata); - sound/songs/midi/se_bridge_walk.o(.rodata); - sound/songs/midi/se_itemfinder.o(.rodata); - sound/songs/midi/se_ding_dong.o(.rodata); - sound/songs/midi/se_balloon_red.o(.rodata); - sound/songs/midi/se_balloon_blue.o(.rodata); - sound/songs/midi/se_balloon_yellow.o(.rodata); - sound/songs/midi/se_breakable_door.o(.rodata); - sound/songs/midi/se_mud_ball.o(.rodata); - sound/songs/midi/se_field_poison.o(.rodata); - sound/songs/midi/se_escalator.o(.rodata); - sound/songs/midi/se_thunderstorm.o(.rodata); - sound/songs/midi/se_thunderstorm_stop.o(.rodata); - sound/songs/midi/se_downpour.o(.rodata); - sound/songs/midi/se_downpour_stop.o(.rodata); - sound/songs/midi/se_rain.o(.rodata); - sound/songs/midi/se_rain_stop.o(.rodata); - sound/songs/midi/se_thunder.o(.rodata); - sound/songs/midi/se_thunder2.o(.rodata); - sound/songs/midi/se_elevator.o(.rodata); - sound/songs/midi/se_low_health.o(.rodata); - sound/songs/midi/se_exp_max.o(.rodata); - sound/songs/midi/se_roulette_ball.o(.rodata); - sound/songs/midi/se_roulette_ball2.o(.rodata); - sound/songs/midi/se_taillow_wing_flap.o(.rodata); - sound/songs/midi/se_shop.o(.rodata); - sound/songs/midi/se_contest_heart.o(.rodata); - sound/songs/midi/se_contest_curtain_rise.o(.rodata); - sound/songs/midi/se_contest_curtain_fall.o(.rodata); - sound/songs/midi/se_contest_icon_change.o(.rodata); - sound/songs/midi/se_contest_icon_clear.o(.rodata); - sound/songs/midi/se_contest_mons_turn.o(.rodata); - sound/songs/midi/se_shiny.o(.rodata); - sound/songs/midi/se_intro_blast.o(.rodata); - sound/songs/midi/se_mugshot.o(.rodata); - sound/songs/midi/se_applause.o(.rodata); - sound/songs/midi/se_vend.o(.rodata); - sound/songs/midi/se_orb.o(.rodata); - sound/songs/se_dex_scroll.o(.rodata); - sound/songs/se_dex_page.o(.rodata); - sound/songs/midi/se_pokenav_on.o(.rodata); - sound/songs/midi/se_pokenav_off.o(.rodata); - sound/songs/midi/se_dex_search.o(.rodata); - sound/songs/midi/se_egg_hatch.o(.rodata); - sound/songs/midi/se_ball_tray_enter.o(.rodata); - sound/songs/midi/se_ball_tray_ball.o(.rodata); - sound/songs/midi/se_ball_tray_exit.o(.rodata); - sound/songs/midi/se_glass_flute.o(.rodata); - sound/songs/se_m_thunderbolt.o(.rodata); - sound/songs/se_m_thunderbolt2.o(.rodata); - sound/songs/se_m_harden.o(.rodata); - sound/songs/se_m_nightmare.o(.rodata); - sound/songs/se_m_vital_throw.o(.rodata); - sound/songs/se_m_vital_throw2.o(.rodata); - sound/songs/se_m_bubble.o(.rodata); - sound/songs/se_m_bubble2.o(.rodata); - sound/songs/se_m_bubble3.o(.rodata); - sound/songs/se_m_rain_dance.o(.rodata); - sound/songs/midi/se_m_cut.o(.rodata); - sound/songs/se_m_string_shot.o(.rodata); - sound/songs/se_m_string_shot2.o(.rodata); - sound/songs/se_m_rock_throw.o(.rodata); - sound/songs/midi/se_m_gust.o(.rodata); - sound/songs/midi/se_m_gust2.o(.rodata); - sound/songs/midi/se_m_double_slap.o(.rodata); - sound/songs/se_m_double_team.o(.rodata); - sound/songs/midi/se_m_razor_wind.o(.rodata); - sound/songs/se_m_icy_wind.o(.rodata); - sound/songs/se_m_thunder_wave.o(.rodata); - sound/songs/midi/se_m_comet_punch.o(.rodata); - sound/songs/midi/se_m_mega_kick.o(.rodata); - sound/songs/midi/se_m_mega_kick2.o(.rodata); - sound/songs/se_m_crabhammer.o(.rodata); - sound/songs/midi/se_m_jump_kick.o(.rodata); - sound/songs/se_m_flame_wheel.o(.rodata); - sound/songs/se_m_flame_wheel2.o(.rodata); - sound/songs/se_m_flamethrower.o(.rodata); - sound/songs/midi/se_m_fire_punch.o(.rodata); - sound/songs/se_m_toxic.o(.rodata); - sound/songs/se_m_sacred_fire.o(.rodata); - sound/songs/se_m_sacred_fire2.o(.rodata); - sound/songs/se_m_ember.o(.rodata); - sound/songs/midi/se_m_take_down.o(.rodata); - sound/songs/se_m_blizzard.o(.rodata); - sound/songs/se_m_blizzard2.o(.rodata); - sound/songs/midi/se_m_scratch.o(.rodata); - sound/songs/midi/se_m_vicegrip.o(.rodata); - sound/songs/midi/se_m_wing_attack.o(.rodata); - sound/songs/midi/se_m_fly.o(.rodata); - sound/songs/midi/se_m_sand_attack.o(.rodata); - sound/songs/midi/se_m_razor_wind2.o(.rodata); - sound/songs/se_m_bite.o(.rodata); - sound/songs/midi/se_m_headbutt.o(.rodata); - sound/songs/se_m_surf.o(.rodata); - sound/songs/se_m_hydro_pump.o(.rodata); - sound/songs/se_m_whirlpool.o(.rodata); - sound/songs/midi/se_m_horn_attack.o(.rodata); - sound/songs/midi/se_m_tail_whip.o(.rodata); - sound/songs/se_m_mist.o(.rodata); - sound/songs/se_m_poison_powder.o(.rodata); - sound/songs/midi/se_m_bind.o(.rodata); - sound/songs/se_m_dragon_rage.o(.rodata); - sound/songs/se_m_sing.o(.rodata); - sound/songs/se_m_perish_song.o(.rodata); - sound/songs/midi/se_m_pay_day.o(.rodata); - sound/songs/se_m_dig.o(.rodata); - sound/songs/se_m_dizzy_punch.o(.rodata); - sound/songs/se_m_self_destruct.o(.rodata); - sound/songs/se_m_explosion.o(.rodata); - sound/songs/se_m_absorb_2.o(.rodata); - sound/songs/se_m_absorb.o(.rodata); - sound/songs/se_m_screech.o(.rodata); - sound/songs/se_m_bubble_beam.o(.rodata); - sound/songs/se_m_bubble_beam2.o(.rodata); - sound/songs/se_m_supersonic.o(.rodata); - sound/songs/se_m_belly_drum.o(.rodata); - sound/songs/se_m_metronome.o(.rodata); - sound/songs/se_m_bonemerang.o(.rodata); - sound/songs/se_m_lick.o(.rodata); - sound/songs/se_m_psybeam.o(.rodata); - sound/songs/se_m_faint_attack.o(.rodata); - sound/songs/midi/se_m_swords_dance.o(.rodata); - sound/songs/midi/se_m_leer.o(.rodata); - sound/songs/se_m_swagger.o(.rodata); - sound/songs/se_m_swagger2.o(.rodata); - sound/songs/se_m_heal_bell.o(.rodata); - sound/songs/se_m_confuse_ray.o(.rodata); - sound/songs/se_m_snore.o(.rodata); - sound/songs/se_m_brick_break.o(.rodata); - sound/songs/se_m_giga_drain.o(.rodata); - sound/songs/se_m_psybeam2.o(.rodata); - sound/songs/se_m_solar_beam.o(.rodata); - sound/songs/se_m_petal_dance.o(.rodata); - sound/songs/se_m_teleport.o(.rodata); - sound/songs/se_m_minimize.o(.rodata); - sound/songs/se_m_sketch.o(.rodata); - sound/songs/se_m_swift.o(.rodata); - sound/songs/se_m_reflect.o(.rodata); - sound/songs/se_m_barrier.o(.rodata); - sound/songs/se_m_detect.o(.rodata); - sound/songs/se_m_lock_on.o(.rodata); - sound/songs/se_m_moonlight.o(.rodata); - sound/songs/se_m_charm.o(.rodata); - sound/songs/se_m_charge.o(.rodata); - sound/songs/se_m_strength.o(.rodata); - sound/songs/se_m_hyper_beam.o(.rodata); - sound/songs/se_m_waterfall.o(.rodata); - sound/songs/se_m_reversal.o(.rodata); - sound/songs/se_m_acid_armor.o(.rodata); - sound/songs/se_m_sandstorm.o(.rodata); - sound/songs/se_m_tri_attack.o(.rodata); - sound/songs/se_m_tri_attack2.o(.rodata); - sound/songs/se_m_encore.o(.rodata); - sound/songs/se_m_encore2.o(.rodata); - sound/songs/se_m_baton_pass.o(.rodata); - sound/songs/se_m_milk_drink.o(.rodata); - sound/songs/se_m_attract.o(.rodata); - sound/songs/se_m_attract2.o(.rodata); - sound/songs/se_m_morning_sun.o(.rodata); - sound/songs/se_m_flatter.o(.rodata); - sound/songs/se_m_sand_tomb.o(.rodata); - sound/songs/se_m_grasswhistle.o(.rodata); - sound/songs/se_m_spit_up.o(.rodata); - sound/songs/se_m_dive.o(.rodata); - sound/songs/se_m_earthquake.o(.rodata); - sound/songs/se_m_twister.o(.rodata); - sound/songs/se_m_sweet_scent.o(.rodata); - sound/songs/se_m_yawn.o(.rodata); - sound/songs/se_m_sky_uppercut.o(.rodata); - sound/songs/se_m_stat_increase.o(.rodata); - sound/songs/se_m_heat_wave.o(.rodata); - sound/songs/se_m_uproar.o(.rodata); - sound/songs/se_m_hail.o(.rodata); - sound/songs/se_m_cosmic_power.o(.rodata); - sound/songs/se_m_teeter_dance.o(.rodata); - sound/songs/se_m_stat_decrease.o(.rodata); - sound/songs/se_m_haze.o(.rodata); - sound/songs/se_m_hyper_beam2.o(.rodata); - sound/songs/midi/se_rg_door.o(.rodata); - sound/songs/midi/se_rg_card_flip.o(.rodata); - sound/songs/midi/se_rg_card_flipping.o(.rodata); - sound/songs/midi/se_rg_card_open.o(.rodata); - sound/songs/midi/se_rg_bag_cursor.o(.rodata); - sound/songs/midi/se_rg_bag_pocket.o(.rodata); - sound/songs/midi/se_rg_ball_click.o(.rodata); - sound/songs/midi/se_rg_shop.o(.rodata); - sound/songs/midi/se_rg_ss_anne_horn.o(.rodata); - sound/songs/midi/se_rg_help_open.o(.rodata); - sound/songs/midi/se_rg_help_close.o(.rodata); - sound/songs/midi/se_rg_help_error.o(.rodata); - sound/songs/midi/se_rg_deoxys_move.o(.rodata); - sound/songs/midi/se_rg_poke_jump_success.o(.rodata); - sound/songs/midi/se_rg_poke_jump_failure.o(.rodata); - sound/songs/midi/se_pokenav_call.o(.rodata); - sound/songs/midi/se_pokenav_hang_up.o(.rodata); - sound/songs/midi/se_arena_timeup1.o(.rodata); - sound/songs/midi/se_arena_timeup2.o(.rodata); - sound/songs/midi/se_pike_curtain_close.o(.rodata); - sound/songs/midi/se_pike_curtain_open.o(.rodata); - sound/songs/midi/se_sudowoodo_shake.o(.rodata); - sound/songs/midi/mus_littleroot_test.o(.rodata); - sound/songs/midi/mus_gsc_route38.o(.rodata); - sound/songs/midi/mus_caught.o(.rodata); - sound/songs/midi/mus_victory_wild.o(.rodata); - sound/songs/midi/mus_victory_gym_leader.o(.rodata); - sound/songs/midi/mus_victory_league.o(.rodata); - sound/songs/midi/mus_c_comm_center.o(.rodata); - sound/songs/midi/mus_gsc_pewter.o(.rodata); - sound/songs/midi/mus_c_vs_legend_beast.o(.rodata); - sound/songs/midi/mus_route101.o(.rodata); - sound/songs/midi/mus_route110.o(.rodata); - sound/songs/midi/mus_route120.o(.rodata); - sound/songs/midi/mus_petalburg.o(.rodata); - sound/songs/midi/mus_oldale.o(.rodata); - sound/songs/midi/mus_gym.o(.rodata); - sound/songs/midi/mus_surf.o(.rodata); - sound/songs/midi/mus_petalburg_woods.o(.rodata); - sound/songs/midi/mus_level_up.o(.rodata); - sound/songs/midi/mus_heal.o(.rodata); - sound/songs/midi/mus_obtain_badge.o(.rodata); - sound/songs/midi/mus_obtain_item.o(.rodata); - sound/songs/midi/mus_evolved.o(.rodata); - sound/songs/midi/mus_obtain_tmhm.o(.rodata); - sound/songs/midi/mus_lilycove_museum.o(.rodata); - sound/songs/midi/mus_route122.o(.rodata); - sound/songs/midi/mus_oceanic_museum.o(.rodata); - sound/songs/midi/mus_evolution_intro.o(.rodata); - sound/songs/midi/mus_evolution.o(.rodata); - sound/songs/midi/mus_move_deleted.o(.rodata); - sound/songs/midi/mus_encounter_girl.o(.rodata); - sound/songs/midi/mus_encounter_male.o(.rodata); - sound/songs/midi/mus_abandoned_ship.o(.rodata); - sound/songs/midi/mus_fortree.o(.rodata); - sound/songs/midi/mus_birch_lab.o(.rodata); - sound/songs/midi/mus_b_tower_rs.o(.rodata); - sound/songs/midi/mus_encounter_swimmer.o(.rodata); - sound/songs/midi/mus_cave_of_origin.o(.rodata); - sound/songs/midi/mus_obtain_berry.o(.rodata); - sound/songs/midi/mus_awaken_legend.o(.rodata); - sound/songs/midi/mus_slots_jackpot.o(.rodata); - sound/songs/midi/mus_slots_win.o(.rodata); - sound/songs/midi/mus_too_bad.o(.rodata); - sound/songs/midi/mus_roulette.o(.rodata); - sound/songs/midi/mus_link_contest_p1.o(.rodata); - sound/songs/midi/mus_link_contest_p2.o(.rodata); - sound/songs/midi/mus_link_contest_p3.o(.rodata); - sound/songs/midi/mus_link_contest_p4.o(.rodata); - sound/songs/midi/mus_encounter_rich.o(.rodata); - sound/songs/midi/mus_verdanturf.o(.rodata); - sound/songs/midi/mus_rustboro.o(.rodata); - sound/songs/midi/mus_poke_center.o(.rodata); - sound/songs/midi/mus_route104.o(.rodata); - sound/songs/midi/mus_route119.o(.rodata); - sound/songs/midi/mus_cycling.o(.rodata); - sound/songs/midi/mus_poke_mart.o(.rodata); - sound/songs/midi/mus_littleroot.o(.rodata); - sound/songs/midi/mus_mt_chimney.o(.rodata); - sound/songs/midi/mus_encounter_female.o(.rodata); - sound/songs/midi/mus_lilycove.o(.rodata); - sound/songs/midi/mus_route111.o(.rodata); - sound/songs/midi/mus_help.o(.rodata); - sound/songs/midi/mus_underwater.o(.rodata); - sound/songs/midi/mus_victory_trainer.o(.rodata); - sound/songs/midi/mus_title.o(.rodata); - sound/songs/midi/mus_intro.o(.rodata); - sound/songs/midi/mus_encounter_may.o(.rodata); - sound/songs/midi/mus_encounter_intense.o(.rodata); - sound/songs/midi/mus_encounter_cool.o(.rodata); - sound/songs/midi/mus_route113.o(.rodata); - sound/songs/midi/mus_encounter_aqua.o(.rodata); - sound/songs/midi/mus_follow_me.o(.rodata); - sound/songs/midi/mus_encounter_brendan.o(.rodata); - sound/songs/midi/mus_ever_grande.o(.rodata); - sound/songs/midi/mus_encounter_suspicious.o(.rodata); - sound/songs/midi/mus_victory_aqua_magma.o(.rodata); - sound/songs/midi/mus_cable_car.o(.rodata); - sound/songs/midi/mus_game_corner.o(.rodata); - sound/songs/midi/mus_dewford.o(.rodata); - sound/songs/midi/mus_safari_zone.o(.rodata); - sound/songs/midi/mus_victory_road.o(.rodata); - sound/songs/midi/mus_aqua_magma_hideout.o(.rodata); - sound/songs/midi/mus_sailing.o(.rodata); - sound/songs/midi/mus_mt_pyre.o(.rodata); - sound/songs/midi/mus_slateport.o(.rodata); - sound/songs/midi/mus_mt_pyre_exterior.o(.rodata); - sound/songs/midi/mus_school.o(.rodata); - sound/songs/midi/mus_hall_of_fame.o(.rodata); - sound/songs/midi/mus_fallarbor.o(.rodata); - sound/songs/midi/mus_sealed_chamber.o(.rodata); - sound/songs/midi/mus_contest_winner.o(.rodata); - sound/songs/midi/mus_contest.o(.rodata); - sound/songs/midi/mus_encounter_magma.o(.rodata); - sound/songs/midi/mus_intro_battle.o(.rodata); - sound/songs/midi/mus_abnormal_weather.o(.rodata); - sound/songs/midi/mus_weather_groudon.o(.rodata); - sound/songs/midi/mus_sootopolis.o(.rodata); - sound/songs/midi/mus_contest_results.o(.rodata); - sound/songs/midi/mus_hall_of_fame_room.o(.rodata); - sound/songs/midi/mus_trick_house.o(.rodata); - sound/songs/midi/mus_encounter_twins.o(.rodata); - sound/songs/midi/mus_encounter_elite_four.o(.rodata); - sound/songs/midi/mus_encounter_hiker.o(.rodata); - sound/songs/midi/mus_contest_lobby.o(.rodata); - sound/songs/midi/mus_encounter_interviewer.o(.rodata); - sound/songs/midi/mus_encounter_champion.o(.rodata); - sound/songs/midi/mus_credits.o(.rodata); - sound/songs/midi/mus_end.o(.rodata); - sound/songs/midi/mus_b_frontier.o(.rodata); - sound/songs/midi/mus_b_arena.o(.rodata); - sound/songs/midi/mus_obtain_b_points.o(.rodata); - sound/songs/midi/mus_register_match_call.o(.rodata); - sound/songs/midi/mus_b_pyramid.o(.rodata); - sound/songs/midi/mus_b_pyramid_top.o(.rodata); - sound/songs/midi/mus_b_palace.o(.rodata); - sound/songs/midi/mus_rayquaza_appears.o(.rodata); - sound/songs/midi/mus_b_tower.o(.rodata); - sound/songs/midi/mus_obtain_symbol.o(.rodata); - sound/songs/midi/mus_b_dome.o(.rodata); - sound/songs/midi/mus_b_pike.o(.rodata); - sound/songs/midi/mus_b_factory.o(.rodata); - sound/songs/midi/mus_vs_rayquaza.o(.rodata); - sound/songs/midi/mus_vs_frontier_brain.o(.rodata); - sound/songs/midi/mus_vs_mew.o(.rodata); - sound/songs/midi/mus_b_dome_lobby.o(.rodata); - sound/songs/midi/mus_vs_wild.o(.rodata); - sound/songs/midi/mus_vs_aqua_magma.o(.rodata); - sound/songs/midi/mus_vs_trainer.o(.rodata); - sound/songs/midi/mus_vs_gym_leader.o(.rodata); - sound/songs/midi/mus_vs_champion.o(.rodata); - sound/songs/midi/mus_vs_regi.o(.rodata); - sound/songs/midi/mus_vs_kyogre_groudon.o(.rodata); - sound/songs/midi/mus_vs_rival.o(.rodata); - sound/songs/midi/mus_vs_elite_four.o(.rodata); - sound/songs/midi/mus_vs_aqua_magma_leader.o(.rodata); - sound/songs/midi/mus_rg_follow_me.o(.rodata); - sound/songs/midi/mus_rg_game_corner.o(.rodata); - sound/songs/midi/mus_rg_rocket_hideout.o(.rodata); - sound/songs/midi/mus_rg_gym.o(.rodata); - sound/songs/midi/mus_rg_jigglypuff.o(.rodata); - sound/songs/midi/mus_rg_intro_fight.o(.rodata); - sound/songs/midi/mus_rg_title.o(.rodata); - sound/songs/midi/mus_rg_cinnabar.o(.rodata); - sound/songs/midi/mus_rg_lavender.o(.rodata); - sound/songs/midi/mus_rg_heal.o(.rodata); - sound/songs/midi/mus_rg_cycling.o(.rodata); - sound/songs/midi/mus_rg_encounter_rocket.o(.rodata); - sound/songs/midi/mus_rg_encounter_girl.o(.rodata); - sound/songs/midi/mus_rg_encounter_boy.o(.rodata); - sound/songs/midi/mus_rg_hall_of_fame.o(.rodata); - sound/songs/midi/mus_rg_viridian_forest.o(.rodata); - sound/songs/midi/mus_rg_mt_moon.o(.rodata); - sound/songs/midi/mus_rg_poke_mansion.o(.rodata); - sound/songs/midi/mus_rg_credits.o(.rodata); - sound/songs/midi/mus_rg_route1.o(.rodata); - sound/songs/midi/mus_rg_route24.o(.rodata); - sound/songs/midi/mus_rg_route3.o(.rodata); - sound/songs/midi/mus_rg_route11.o(.rodata); - sound/songs/midi/mus_rg_victory_road.o(.rodata); - sound/songs/midi/mus_rg_vs_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_vs_trainer.o(.rodata); - sound/songs/midi/mus_rg_vs_wild.o(.rodata); - sound/songs/midi/mus_rg_vs_champion.o(.rodata); - sound/songs/midi/mus_rg_pallet.o(.rodata); - sound/songs/midi/mus_rg_oak_lab.o(.rodata); - sound/songs/midi/mus_rg_oak.o(.rodata); - sound/songs/midi/mus_rg_poke_center.o(.rodata); - sound/songs/midi/mus_rg_ss_anne.o(.rodata); - sound/songs/midi/mus_rg_surf.o(.rodata); - sound/songs/midi/mus_rg_poke_tower.o(.rodata); - sound/songs/midi/mus_rg_silph.o(.rodata); - sound/songs/midi/mus_rg_fuchsia.o(.rodata); - sound/songs/midi/mus_rg_celadon.o(.rodata); - sound/songs/midi/mus_rg_victory_trainer.o(.rodata); - sound/songs/midi/mus_rg_victory_wild.o(.rodata); - sound/songs/midi/mus_rg_victory_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_vermillion.o(.rodata); - sound/songs/midi/mus_rg_pewter.o(.rodata); - sound/songs/midi/mus_rg_encounter_rival.o(.rodata); - sound/songs/midi/mus_rg_rival_exit.o(.rodata); - sound/songs/midi/mus_rg_dex_rating.o(.rodata); - sound/songs/midi/mus_rg_obtain_key_item.o(.rodata); - sound/songs/midi/mus_rg_caught_intro.o(.rodata); - sound/songs/midi/mus_rg_photo.o(.rodata); - sound/songs/midi/mus_rg_game_freak.o(.rodata); - sound/songs/midi/mus_rg_caught.o(.rodata); - sound/songs/midi/mus_rg_new_game_instruct.o(.rodata); - sound/songs/midi/mus_rg_new_game_intro.o(.rodata); - sound/songs/midi/mus_rg_new_game_exit.o(.rodata); - sound/songs/midi/mus_rg_poke_jump.o(.rodata); - sound/songs/midi/mus_rg_union_room.o(.rodata); - sound/songs/midi/mus_rg_net_center.o(.rodata); - sound/songs/midi/mus_rg_mystery_gift.o(.rodata); - sound/songs/midi/mus_rg_berry_pick.o(.rodata); - sound/songs/midi/mus_rg_sevii_cave.o(.rodata); - sound/songs/midi/mus_rg_teachy_tv_show.o(.rodata); - sound/songs/midi/mus_rg_sevii_route.o(.rodata); - sound/songs/midi/mus_rg_sevii_dungeon.o(.rodata); - sound/songs/midi/mus_rg_sevii_123.o(.rodata); - sound/songs/midi/mus_rg_sevii_45.o(.rodata); - sound/songs/midi/mus_rg_sevii_67.o(.rodata); - sound/songs/midi/mus_rg_poke_flute.o(.rodata); - sound/songs/midi/mus_rg_vs_deoxys.o(.rodata); - sound/songs/midi/mus_rg_vs_mewtwo.o(.rodata); - sound/songs/midi/mus_rg_vs_legend.o(.rodata); - sound/songs/midi/mus_rg_encounter_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_encounter_deoxys.o(.rodata); - sound/songs/midi/mus_rg_trainer_tower.o(.rodata); - sound/songs/midi/mus_rg_slow_pallet.o(.rodata); - sound/songs/midi/mus_rg_teachy_tv_menu.o(.rodata); - sound/songs/midi/ph_trap_blend.o(.rodata); - sound/songs/midi/ph_trap_held.o(.rodata); - sound/songs/midi/ph_trap_solo.o(.rodata); - sound/songs/midi/ph_face_blend.o(.rodata); - sound/songs/midi/ph_face_held.o(.rodata); - sound/songs/midi/ph_face_solo.o(.rodata); - sound/songs/midi/ph_cloth_blend.o(.rodata); - sound/songs/midi/ph_cloth_held.o(.rodata); - sound/songs/midi/ph_cloth_solo.o(.rodata); - sound/songs/midi/ph_dress_blend.o(.rodata); - sound/songs/midi/ph_dress_held.o(.rodata); - sound/songs/midi/ph_dress_solo.o(.rodata); - sound/songs/midi/ph_fleece_blend.o(.rodata); - sound/songs/midi/ph_fleece_held.o(.rodata); - sound/songs/midi/ph_fleece_solo.o(.rodata); - sound/songs/midi/ph_kit_blend.o(.rodata); - sound/songs/midi/ph_kit_held.o(.rodata); - sound/songs/midi/ph_kit_solo.o(.rodata); - sound/songs/midi/ph_price_blend.o(.rodata); - sound/songs/midi/ph_price_held.o(.rodata); - sound/songs/midi/ph_price_solo.o(.rodata); - sound/songs/midi/ph_lot_blend.o(.rodata); - sound/songs/midi/ph_lot_held.o(.rodata); - sound/songs/midi/ph_lot_solo.o(.rodata); - sound/songs/midi/ph_goat_blend.o(.rodata); - sound/songs/midi/ph_goat_held.o(.rodata); - sound/songs/midi/ph_goat_solo.o(.rodata); - sound/songs/midi/ph_thought_blend.o(.rodata); - sound/songs/midi/ph_thought_held.o(.rodata); - sound/songs/midi/ph_thought_solo.o(.rodata); - sound/songs/midi/ph_choice_blend.o(.rodata); - sound/songs/midi/ph_choice_held.o(.rodata); - sound/songs/midi/ph_choice_solo.o(.rodata); - sound/songs/midi/ph_mouth_blend.o(.rodata); - sound/songs/midi/ph_mouth_held.o(.rodata); - sound/songs/midi/ph_mouth_solo.o(.rodata); - sound/songs/midi/ph_foot_blend.o(.rodata); - sound/songs/midi/ph_foot_held.o(.rodata); - sound/songs/midi/ph_foot_solo.o(.rodata); - sound/songs/midi/ph_goose_blend.o(.rodata); - sound/songs/midi/ph_goose_held.o(.rodata); - sound/songs/midi/ph_goose_solo.o(.rodata); - sound/songs/midi/ph_strut_blend.o(.rodata); - sound/songs/midi/ph_strut_held.o(.rodata); - sound/songs/midi/ph_strut_solo.o(.rodata); - sound/songs/midi/ph_cure_blend.o(.rodata); - sound/songs/midi/ph_cure_held.o(.rodata); - sound/songs/midi/ph_cure_solo.o(.rodata); - sound/songs/midi/ph_nurse_blend.o(.rodata); - sound/songs/midi/ph_nurse_held.o(.rodata); - sound/songs/midi/ph_nurse_solo.o(.rodata); - } > ROM =0 - - lib_rodata : - SUBALIGN(4) - { - src/m4a.o(.rodata); - src/agb_flash.o(.rodata); - src/agb_flash_1m.o(.rodata); - src/agb_flash_mx.o(.rodata); - src/agb_flash_le.o(.rodata); - src/siirtc.o(.rodata); - src/librfu_rfu.o(.rodata); - src/librfu_sio32id.o(.rodata); - *libgcc.a:_divdi3.o(.rodata); - *libgcc.a:_udivdi3.o(.rodata); - *libc.a:memcpy.o(.rodata); - *libc.a:memset.o(.rodata); - *libc.a:strcmp.o(.rodata); - *libc.a:strcpy.o(.rodata); - *libc.a:impure.o(.rodata); - *libc.a:vsprintf.o(.rodata); - *libc.a:vfprintf.o(.rodata); - *libc.a:wsetup.o(.rodata); - *libc.a:dtoa.o(.rodata); - *libc.a:fflush.o(.rodata); - *libc.a:findfp.o(.rodata); - *libc.a:freer.o(.rodata); - *libc.a:mtrim.o(.rodata); - *libc.a:fvwrite.o(.rodata); - *libc.a:fwalk.o(.rodata); - *libc.a:locale.o(.rodata); - *libc.a:makebuf.o(.rodata); - *libc.a:mallocr.o(.rodata); - *libc.a:mbtowc_r.o(.rodata); - *libc.a:memchr.o(.rodata); - *libc.a:memmove.o(.rodata); - *libc.a:mlock.o(.rodata); - *libc.a:mprec.o(.rodata); - *libc.a:s_isinf.o(.rodata); - *libc.a:s_isnan.o(.rodata); - *libc.a:sbrkr.o(.rodata); - *libc.a:stdio.o(.rodata); - *libc.a:strlen.o(.rodata); - *libc.a:syscalls.o(.rodata); - *libc.a:writer.o(.rodata); - *libc.a:callocr.o(.rodata); - *libc.a:closer.o(.rodata); - *libc.a:errno.o(.rodata); - *libc.a:fstatr.o(.rodata); - *libc.a:libcfunc.o(.rodata); - *libc.a:lseekr.o(.rodata); - *libc.a:readr.o(.rodata); - src/libisagbprn.o(.rodata); - } > ROM =0 - - multiboot_data : - ALIGN(4) - { - data/multiboot_ereader.o(.rodata); - data/multiboot_berry_glitch_fix.o(.rodata); - data/multiboot_pokemon_colosseum.o(.rodata); - } > ROM =0 - - gfx_data : - ALIGN(4) - { - src/graphics.o(.rodata); - } > ROM =0 - - extra : - ALIGN(4) - { - src/*.o(.text); - gflib/*.o(.text); - src/*.o(.rodata); - gflib/*.o(.rodata); - data/*.o(.rodata); - } > ROM = 0 - - .data.iwram : - ALIGN(4) - { - __iwram_lma = .; - . = . + (__iwram_end - __iwram_start); - } > ROM = 0 - - .data.ewram : - ALIGN(4) - { - __ewram_lma = .; - . = . + (__ewram_end - __ewram_start); - } > ROM = 0 - - __rom_end = .; - - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - - /* Discard everything not specifically mentioned above. */ - /DISCARD/ : - { - *(*); - } -} diff --git a/sym_bss.txt b/sym_bss.txt deleted file mode 100644 index 3a23e74789..0000000000 --- a/sym_bss.txt +++ /dev/null @@ -1,63 +0,0 @@ - .include "src/main.o" - .include "gflib/malloc.o" - .include "gflib/dma3_manager.o" - .include "gflib/gpu_regs.o" - .include "gflib/bg.o" - .include "gflib/text.o" - .include "gflib/sprite.o" - .include "src/link.o" - .include "src/AgbRfu_LinkManager.o" - .include "src/link_rfu_3.o" - .include "src/link_rfu_2.o" - .include "src/union_room.o" - .include "src/wireless_communication_status_screen.o" - .include "src/union_room_battle.o" - .include "src/dodrio_berry_picking.o" - .include "src/rtc.o" - .include "src/main_menu.o" - .include "src/digit_obj_util.o" - .include "src/egg_hatch.o" - .include "src/berry_blender.o" - .include "src/play_time.o" - .include "src/overworld.o" - .include "src/field_camera.o" - .include "src/script.o" - .include "src/scrcmd.o" - .include "src/tileset_anims.o" - .include "src/palette.o" - .include "src/sound.o" - .include "src/field_weather.o" - .include "src/field_effect.o" - .include "src/pokemon_storage_system.o" - .include "src/fldeff_cut.o" - .include "src/script_menu.o" - .include "src/record_mixing.o" - .include "src/tv.o" - .include "src/mauville_old_man.o" - .include "src/menu_helpers.o" - .include "src/region_map.o" - .include "src/slot_machine.o" - .include "src/contest_painting.o" - .include "src/starter_choose.o" - .include "src/pokedex_area_screen.o" - .include "src/battle_transition.o" - .include "src/pokemon_animation.o" - .include "src/recorded_battle.o" - .include "src/battle_factory_screen.o" - .include "src/battle_factory.o" - .include "src/battle_pike.o" - .include "src/battle_tent.o" - .include "src/multiboot.o" - .include "src/mirage_tower.o" - .include "src/berry_fix_program.o" - .include "src/pokenav_conditions_gfx.o" - .include "src/pokenav_ribbons_summary.o" - .include "src/ereader_helpers.o" - .include "src/faraway_island.o" - .include "src/m4a_1.o" - .include "data/sound_data.o" - .include "src/agb_flash.o" - .include "src/siirtc.o" - .include "*libgcc.a:dp-bit.o" - .include "*libgcc.a:fp-bit.o" - .include "*libc.a:syscalls.o" diff --git a/sym_common.txt b/sym_common.txt deleted file mode 100644 index 170aee2f42..0000000000 --- a/sym_common.txt +++ /dev/null @@ -1,83 +0,0 @@ - .space 0x8 - .include "main.o" - @ ../gflib/bg.o - .align 2 -gWindowTileAutoAllocEnabled: - .space 4 - @ ../gflib/window.o - .align 4 -gTransparentTileNumber: - .space 1 - .align 4 -gWindowBgTilemapBuffers: - .space 16 - @ ../gflib/text.o - .align 4 -gFonts: - .space 4 - .align 2 -gDisableTextPrinters: - .space 1 - .align 4 -gCurGlyph: - .space 132 - .align 2 -gTextFlags: - .space 4 - @ ../gflib/sprite.o - .align 2 -gOamMatrixAllocBitmap: - .space 4 - .align 2 -gReservedSpritePaletteCount: - .space 1 - .align 4 - .include "link.o" - .include "AgbRfu_LinkManager.o" - .include "link_rfu_2.o" - .include "rtc.o" - .include "battle_main.o" - .include "battle_controllers.o" - .include "random.o" - .include "load_save.o" - .include "berry_blender.o" - .include "overworld.o" - .include "fieldmap.o" - .include "field_camera.o" - .include "field_control_avatar.o" - .include "start_menu.o" - .include "sound.o" - .include "task.o" - .include "trainer_see.o" - .include "pokedex.o" - .include "contest.o" - .include "tv.o" - .include "mauville_old_man.o" - .include "image_processing_effects.o" - - .space 0x4 - - .include "contest_painting.o" - .include "field_specials.o" - .include "evolution_scene.o" - .include "pokedex_cry_screen.o" - .include "save.o" - .include "battle_tower.o" - .include "intro.o" - .include "battle_anim_throw.o" - .include "battle_factory_screen.o" - .include "apprentice.o" - - .space 0x8 - - .include "list_menu.o" - .include "party_menu.o" - - .space 0x44 - - .include "ereader_screen.o" - .include "m4a.o" - .include "agb_flash.o" - .include "librfu_stwi.o" - .include "librfu_rfu.o" - .include "librfu_sio32id.o" diff --git a/sym_ewram.txt b/sym_ewram.txt deleted file mode 100644 index 3123b3388a..0000000000 --- a/sym_ewram.txt +++ /dev/null @@ -1,154 +0,0 @@ - .include "gflib/malloc.o" - .include "src/decompress.o" - .include "src/main.o" - .include "gflib/window.o" - .include "gflib/text.o" - .include "gflib/sprite.o" - .include "gflib/string_util.o" - .include "src/link.o" - .include "src/AgbRfu_LinkManager.o" - .include "src/link_rfu_3.o" - .include "src/link_rfu_2.o" - .include "src/union_room.o" - .include "src/mystery_gift_menu.o" - .include "src/union_room_player_avatar.o" - .include "src/wireless_communication_status_screen.o" - .include "src/union_room_battle.o" - .include "src/mystery_gift.o" - .include "src/mystery_gift_view.o" - .include "src/mystery_gift_server.o" - .include "src/mystery_gift_client.o" - .include "src/union_room_chat.o" - .include "src/berry_crush.o" - .include "src/berry_powder.o" - .include "src/dodrio_berry_picking.o" - .include "src/pokemon_jump.o" - .include "src/main_menu.o" - .include "src/battle_controllers.o" - .include "src/digit_obj_util.o" - .include "src/battle_main.o" - .include "src/pokemon.o" - .include "src/random.o" - .include "src/daycare.o" - .include "src/load_save.o" - .include "src/trade.o" - .include "src/berry_blender.o" - .include "src/new_game.o" - .include "src/overworld.o" - .include "src/fieldmap.o" - .include "src/field_camera.o" - .include "src/field_player_avatar.o" - .include "src/event_object_movement.o" - .include "src/field_message_box.o" - .include "src/scrcmd.o" - .include "src/field_control_avatar.o" - .include "src/event_data.o" - .include "src/start_menu.o" - .include "src/tileset_anims.o" - .include "src/palette.o" - .include "src/sound.o" - .include "src/battle_anim.o" - .include "src/battle_anim_mons.o" - - .space 0xC - .include "src/field_weather.o" - .include "src/field_weather_effect.o" - .include "src/battle_setup.o" - .include "src/trainer_see.o" - .include "src/wild_encounter.o" - .include "src/field_effect.o" - .include "src/scanline_effect.o" - .include "src/option_menu.o" - .include "src/pokedex.o" - .include "src/trainer_card.o" - .include "src/frontier_pass.o" - .include "src/pokemon_storage_system.o" - .include "src/script_movement.o" - .include "src/fldeff_cut.o" - .include "src/map_name_popup.o" - .include "src/item.o" - .include "src/contest.o" - .include "src/shop.o" - .include "src/fldeff_escalator.o" - .include "src/script_menu.o" - .include "src/naming_screen.o" - .include "src/money.o" - .include "src/record_mixing.o" - .include "src/secret_base.o" - .include "src/tv.o" - .include "src/contest_util.o" - .include "src/rotating_gate.o" - .include "src/safari_zone.o" - .include "src/item_use.o" - .include "src/battle_anim_effects_1.o" - .include "src/battle_anim_dragon.o" - .include "src/battle_anim_utility_funcs.o" - .include "src/battle_intro.o" - .include "src/easy_chat.o" - .include "src/mon_markings.o" - .include "src/mauville_old_man.o" - .include "src/mail.o" - .include "src/menu_helpers.o" - .include "src/region_map.o" - .include "src/decoration.o" - .include "src/slot_machine.o" - .include "src/battle_ai_main.o" - .include "src/fldeff_misc.o" - .include "src/pokeblock.o" - .include "src/field_specials.o" - .include "src/battle_records.o" - .include "src/pokedex_area_screen.o" - .include "src/evolution_scene.o" - .include "src/roulette.o" - .include "src/pokedex_cry_screen.o" - .include "src/coins.o" - .include "src/battle_transition.o" - .include "src/battle_message.o" - .include "src/cable_car.o" - .include "src/confetti_util.o" - .include "src/save.o" - .include "src/mystery_event_script.o" - .include "src/move_relearner.o" - .include "src/decoration_inventory.o" - .include "src/roamer.o" - .include "src/battle_tower.o" - .include "src/use_pokeblock.o" - .include "src/player_pc.o" - .include "src/intro.o" - .include "src/field_region_map.o" - .include "src/hall_of_fame.o" - .include "src/credits.o" - .include "src/lottery_corner.o" - .include "src/diploma.o" - .include "src/berry_tag_screen.o" - .include "src/mystery_event_menu.o" - .include "src/save_failed_screen.o" - .include "src/braille_puzzles.o" - .include "src/pokeblock_feed.o" - .include "src/intro_credits_graphics.o" - .include "src/recorded_battle.o" - .include "src/trainer_pokemon_sprites.o" - .include "src/lilycove_lady.o" - .include "src/battle_dome.o" - .include "src/match_call.o" - .include "src/menu.o" - .include "src/battle_factory_screen.o" - .include "src/rotating_tile_puzzle.o" - .include "src/item_menu.o" - .include "src/list_menu.o" - .include "src/dynamic_placeholder_text_util.o" - .include "src/item_icon.o" - .include "src/party_menu.o" - .include "src/mirage_tower.o" - .include "src/pokemon_summary_screen.o" - .include "src/pokedex_area_region_map.o" - .include "src/battle_pyramid_bag.o" - .include "src/pokenav.o" - .include "src/pokenav_list.o" - .include "src/menu_specialized.o" - .include "src/faraway_island.o" - .include "src/trainer_hill.o" - .include "src/rayquaza_scene.o" - .include "src/debug.o" - .include "src/battle_controller_player.o" - .include "src/pokedex_plus_hgss.o" From 0a55a7f40bd8ed14b71e6a8dfbb24da0121d83e4 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 17:29:09 -0700 Subject: [PATCH 090/544] Combined if statements per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#discussion_r1712962988 --- src/field_control_avatar.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 1699a6daa2..584c319595 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -183,18 +183,15 @@ int ProcessPlayerFieldInput(struct FieldInput *input) return TRUE; } - if (input->checkStandardWildEncounter) - { - if (input->dpadDirection == 0 || input->dpadDirection == playerDirection) - { - GetInFrontOfPlayerPosition(&position); - metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) - return TRUE; - GetPlayerPosition(&position); - metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - } - } + if ((input->checkStandardWildEncounter) && ((input->dpadDirection == 0) || input->dpadDirection == playerDirection)) + { + GetInFrontOfPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) + return TRUE; + GetPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + } if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE) return TRUE; From cb779498811f9c9a7d48bffd2a434abb2967d37d Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 17:30:59 -0700 Subject: [PATCH 091/544] Fixed identation per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#discussion_r1712963035 --- src/field_control_avatar.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 584c319595..c9163c1a7e 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -183,15 +183,15 @@ int ProcessPlayerFieldInput(struct FieldInput *input) return TRUE; } - if ((input->checkStandardWildEncounter) && ((input->dpadDirection == 0) || input->dpadDirection == playerDirection)) - { - GetInFrontOfPlayerPosition(&position); - metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) - return TRUE; - GetPlayerPosition(&position); - metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); - } + if ((input->checkStandardWildEncounter) && ((input->dpadDirection == 0) || input->dpadDirection == playerDirection)) + { + GetInFrontOfPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) + return TRUE; + GetPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + } if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE) return TRUE; @@ -205,7 +205,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); if (input->heldDirection && (input->dpadDirection == playerDirection) && (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)) - return TRUE; + return TRUE; if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE) return TRUE; From b39258ebced39d8cf858c8f5551619fa5e5a271f Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 17:36:01 -0700 Subject: [PATCH 092/544] Combined conditions per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#discussion_r1712963093 --- src/field_control_avatar.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index c9163c1a7e..40992feae6 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1093,9 +1093,7 @@ static bool32 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u32 m { const u8 *script; - if (JOY_HELD(DPAD_LEFT | DPAD_RIGHT)) - return FALSE; - if (playerDirection != DIR_NORTH) + if ((JOY_HELD(DPAD_LEFT | DPAD_RIGHT)) || (playerDirection != DIR_NORTH)) return FALSE; switch (GetFacingSignpostType(metatileBehavior, playerDirection)) From 846e8a29daadc96035944250dde9b391e8fe2846 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 17:49:07 -0700 Subject: [PATCH 093/544] Removed IsMsgSignPost per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#discussion_r1712963672 --- include/script.h | 4 +++- src/field_message_box.c | 2 +- src/menu.c | 2 +- src/script.c | 9 ++------- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/include/script.h b/include/script.h index 48d1f6c0ec..fc50c9d424 100644 --- a/include/script.h +++ b/include/script.h @@ -63,10 +63,12 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize); // srccmd.h void SetMovingNpcId(u16 npcId); +extern u8 sMsgIsSignPost; +extern u8 sMsgBoxIsCancelable; + void SetWalkingIntoSignVars(void); void MsgSetSignPost(void); void ResetFacingNpcOrSignPostVars(void); -bool32 IsMsgSignPost(void); bool32 CanWalkAwayToCancelMsgBox(void); void ClearMsgBoxCancelableState(void); diff --git a/src/field_message_box.c b/src/field_message_box.c index 9d07ce24dc..c0fc1004e9 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -32,7 +32,7 @@ static void Task_DrawFieldMessage(u8 taskId) switch (task->tState) { case 0: - if (IsMsgSignPost()) + if (sMsgIsSignPost) LoadSignPostWindowFrameGfx(); else LoadMessageBoxAndBorderGfx(); diff --git a/src/menu.c b/src/menu.c index 441c80250e..20b8c4dd97 100644 --- a/src/menu.c +++ b/src/menu.c @@ -328,7 +328,7 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi static inline void *GetWindowFunc_DialogueFrame(void) { - return (IsMsgSignPost() ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); + return (sMsgIsSignPost ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); } void DrawDialogueFrame(u8 windowId, bool8 copyToVram) diff --git a/src/script.c b/src/script.c index 98d679cd9f..632af41ff4 100644 --- a/src/script.c +++ b/src/script.c @@ -27,8 +27,8 @@ static u8 sGlobalScriptContextStatus; static struct ScriptContext sGlobalScriptContext; static struct ScriptContext sImmediateScriptContext; static bool8 sLockFieldControls; -static u8 sMsgIsSignPost; -static u8 sMsgBoxIsCancelable; +EWRAM_DATA u8 sMsgIsSignPost = FALSE; +EWRAM_DATA u8 sMsgBoxIsCancelable = FALSE; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; @@ -513,11 +513,6 @@ void SetWalkingIntoSignVars(void) sMsgBoxIsCancelable = TRUE; } -bool32 IsMsgSignPost(void) -{ - return sMsgIsSignPost; -} - void ResetFacingNpcOrSignPostVars(void) { sMsgIsSignPost = FALSE; From c3c433439e2f5745782b01ef42e6915783dd5655 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 18:01:52 -0700 Subject: [PATCH 094/544] Removed ClearMsgBoxCancelableState per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#discussion_r1712963672 --- include/script.h | 3 --- src/field_control_avatar.c | 4 ++-- src/scrcmd.c | 4 ++-- src/script.c | 15 --------------- 4 files changed, 4 insertions(+), 22 deletions(-) diff --git a/include/script.h b/include/script.h index fc50c9d424..a8e7656d51 100644 --- a/include/script.h +++ b/include/script.h @@ -67,9 +67,6 @@ extern u8 sMsgIsSignPost; extern u8 sMsgBoxIsCancelable; void SetWalkingIntoSignVars(void); -void MsgSetSignPost(void); -void ResetFacingNpcOrSignPostVars(void); bool32 CanWalkAwayToCancelMsgBox(void); -void ClearMsgBoxCancelableState(void); #endif // GUARD_SCRIPT_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 40992feae6..6144ca7af0 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -162,7 +162,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) gSpecialVar_LastTalked = 0; gSelectedObjectEvent = 0; - ResetFacingNpcOrSignPostVars(); + sMsgIsSignPost = FALSE; playerDirection = GetPlayerFacingDirection(); GetPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); @@ -1130,7 +1130,7 @@ static u32 GetFacingSignpostType(u16 metatileBehavior, u32 playerDirection) static void SetMsgSignPostAndVarFacing(u32 playerDirection) { SetWalkingIntoSignVars(); - MsgSetSignPost(); + sMsgIsSignPost = TRUE; gSpecialVar_Facing = playerDirection; } diff --git a/src/scrcmd.c b/src/scrcmd.c index e1d6202a04..69c9d961b6 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1290,7 +1290,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); - ClearMsgBoxCancelableState(); + sMsgBoxIsCancelable = FALSE; return FALSE; } @@ -1309,7 +1309,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); - ClearMsgBoxCancelableState(); + sMsgBoxIsCancelable = FALSE; return FALSE; } diff --git a/src/script.c b/src/script.c index 632af41ff4..7945b57ea9 100644 --- a/src/script.c +++ b/src/script.c @@ -513,21 +513,6 @@ void SetWalkingIntoSignVars(void) sMsgBoxIsCancelable = TRUE; } -void ResetFacingNpcOrSignPostVars(void) -{ - sMsgIsSignPost = FALSE; -} - -void MsgSetSignPost(void) -{ - sMsgIsSignPost = TRUE; -} - -void ClearMsgBoxCancelableState(void) -{ - sMsgBoxIsCancelable = FALSE; -} - bool32 CanWalkAwayToCancelMsgBox(void) { return sMsgBoxIsCancelable; From 4387b6ef708b88cffbe4660e7df6574cfabd6409 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 18:10:18 -0700 Subject: [PATCH 095/544] Removed SetWalkingIntoSignVars per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#discussion_r1712963824 --- include/field_control_avatar.h | 3 +++ include/script.h | 3 --- src/field_control_avatar.c | 9 ++++----- src/script.c | 12 ------------ 4 files changed, 7 insertions(+), 20 deletions(-) diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index cbee293a31..da23fe4336 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -36,4 +36,7 @@ const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); void ClearPoisonStepCounter(void); void CancelSignPostMessageBox(struct FieldInput *input); +#define NOT_SIGNPOST 0 +#define WALK_AWAY_SIGNPOST_FRAMES 6 + #endif // GUARD_FIELDCONTROLAVATAR_H diff --git a/include/script.h b/include/script.h index a8e7656d51..9c778c395d 100644 --- a/include/script.h +++ b/include/script.h @@ -66,7 +66,4 @@ void SetMovingNpcId(u16 npcId); extern u8 sMsgIsSignPost; extern u8 sMsgBoxIsCancelable; -void SetWalkingIntoSignVars(void); -bool32 CanWalkAwayToCancelMsgBox(void); - #endif // GUARD_SCRIPT_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 6144ca7af0..05060825fa 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -44,8 +44,6 @@ static EWRAM_DATA u16 sPrevMetatileBehavior = 0; u8 gSelectedObjectEvent; -#define NOT_SIGNPOST 0 - static void GetPlayerPosition(struct MapPosition *); static void GetInFrontOfPlayerPosition(struct MapPosition *); static u16 GetPlayerCurMetatileBehavior(int); @@ -1129,7 +1127,8 @@ static u32 GetFacingSignpostType(u16 metatileBehavior, u32 playerDirection) static void SetMsgSignPostAndVarFacing(u32 playerDirection) { - SetWalkingIntoSignVars(); + gWalkAwayFromSignpostTimer = WALK_AWAY_SIGNPOST_FRAMES; + sMsgBoxIsCancelable = TRUE; sMsgIsSignPost = TRUE; gSpecialVar_Facing = playerDirection; } @@ -1176,8 +1175,8 @@ void CancelSignPostMessageBox(struct FieldInput *input) return; } - if (!CanWalkAwayToCancelMsgBox()) - return; + if (!sMsgBoxIsCancelable) + return; if (IsDpadPushedToTurnOrMovePlayer(input)) { diff --git a/src/script.c b/src/script.c index 7945b57ea9..276163bbb6 100644 --- a/src/script.c +++ b/src/script.c @@ -505,15 +505,3 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize) #endif //FREE_MYSTERY_EVENT_BUFFERS } -#define WALK_AWAY_SIGNPOST_FRAMES 6 - -void SetWalkingIntoSignVars(void) -{ - gWalkAwayFromSignpostTimer = WALK_AWAY_SIGNPOST_FRAMES; - sMsgBoxIsCancelable = TRUE; -} - -bool32 CanWalkAwayToCancelMsgBox(void) -{ - return sMsgBoxIsCancelable; -} From fba1452c3b7169a4ea54fba3956299392c4a0d76 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 18:49:42 -0700 Subject: [PATCH 096/544] Added Seen/CaughtMon macros --- asm/macros/event.inc | 26 ++++++++++++++++++++++++++ data/specials.inc | 4 ++++ src/field_specials.c | 22 ++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 0fb6414f61..e3c47c04ea 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2341,3 +2341,29 @@ setorcopyvar VAR_0x8006, \y specialvar VAR_RESULT, CheckObjectAtXY .endm + + @ Checks the state of the Pokédex Seen flag of the specified Pokemon + @ The result is stored in VAR_RESULT + .macro getseenmon species:req + setvar VAR_TEMP_1, \species + specialvar VAR_RESULT, GetSeenMon + .endm + + @ Checks the state of the Pokédex Caught flag of the specified Pokemon + @ The result is stored in VAR_RESULT + .macro getcaughtmon species:req + setvar VAR_TEMP_1, \species + specialvar VAR_RESULT, GetCaughtMon + .endm + + @ Sets the Pokédex Seen flag of the specified Pokemon + .macro setseenmon species:req + setvar VAR_TEMP_1, \species + special SetSeenMon + .endm + + @ Sets the Pokédex Caught flag of the specified Pokemon + .macro setcaughtmon species:req + setvar VAR_TEMP_1, \species + special SetCaughtMon + .endm diff --git a/data/specials.inc b/data/specials.inc index aa994a31f6..8f17fd8e55 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -556,3 +556,7 @@ gSpecials:: def_special Script_GetChosenMonDefensiveIVs def_special GetObjectPosition def_special CheckObjectAtXY + def_special GetSeenMon + def_special GetCaughtMon + def_special SetSeenMon + def_special SetCaughtMon diff --git a/src/field_specials.c b/src/field_specials.c index 3014d48407..64330d2e6d 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -68,6 +68,7 @@ #include "constants/metatile_labels.h" #include "palette.h" #include "battle_util.h" +#include "pokedex.h" #define TAG_ITEM_ICON 5500 @@ -4310,3 +4311,24 @@ u16 CheckObjectAtXY(void) return FALSE; } +bool8 GetSeenMon(void) +{ + return GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_GET_SEEN); +} + +bool8 GetCaughtMon(void) +{ + return GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_GET_CAUGHT); +} + +void SetSeenMon(void) +{ + GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_SET_SEEN); +} + +void SetCaughtMon(void) +{ + GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_SET_SEEN); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_SET_CAUGHT); +} + From e746334e1e664f6e5eaa8defa6b3a4d73b5a9283 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 18:53:39 -0700 Subject: [PATCH 097/544] Added setmonball --- asm/macros/event.inc | 8 ++++++++ data/specials.inc | 1 + src/field_specials.c | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index e3c47c04ea..7529edc55a 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2367,3 +2367,11 @@ setvar VAR_TEMP_1, \species special SetCaughtMon .endm + + @ Changes the caught ball of a selected Pokémon + .macro setmonball ballId:req + special ChoosePartyMon + waitstate + setvar VAR_TEMP_1, \ballId + special SetMonBall + .endm diff --git a/data/specials.inc b/data/specials.inc index 8f17fd8e55..67e82c0e18 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -560,3 +560,4 @@ gSpecials:: def_special GetCaughtMon def_special SetSeenMon def_special SetCaughtMon + def_special SetMonBall diff --git a/src/field_specials.c b/src/field_specials.c index 64330d2e6d..a574083ae4 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4332,3 +4332,8 @@ void SetCaughtMon(void) GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_SET_CAUGHT); } +void SetMonBall(void) +{ + u16 ballId = VarGet(VAR_TEMP_1); + SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_POKEBALL, &ballId); +} From 262505589a69a71cf7995624ff67a00b0d2a6fb3 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 19:19:15 -0700 Subject: [PATCH 098/544] checkforspecies --- asm/macros/event.inc | 17 +++++++++++++++++ data/specials.inc | 1 + src/field_specials.c | 12 ++++++++++++ 3 files changed, 30 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 7529edc55a..da6935ed3c 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2375,3 +2375,20 @@ setvar VAR_TEMP_1, \ballId special SetMonBall .endm + + OPEN_PARTY_SCREEN = FALSE + NO_PARTY_SCREEN = TRUE + + @ Check if the Player has \speciesId in their party. + .macro checkforspecies speciesId:req, silent:req, script:req + .if \silent == OPEN_PARTY_SCREEN + special ChoosePartyMon + waitstate + specialvar VAR_RESULT, ScriptGetPartyMonSpecies + goto_if_eq VAR_RESULT, \speciesId, \script + .else + setvar VAR_TEMP_1, \speciesId + specialvar VAR_RESULT, CheckPartyForMon + goto_if_eq VAR_RESULT, TRUE, \script + .endif + .endm diff --git a/data/specials.inc b/data/specials.inc index 67e82c0e18..00a8c54029 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -561,3 +561,4 @@ gSpecials:: def_special SetSeenMon def_special SetCaughtMon def_special SetMonBall + def_special CheckPartyForMon diff --git a/src/field_specials.c b/src/field_specials.c index a574083ae4..78ac17678b 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4337,3 +4337,15 @@ void SetMonBall(void) u16 ballId = VarGet(VAR_TEMP_1); SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_POKEBALL, &ballId); } + +bool8 CheckPartyForMon(void) +{ + int i; + for (i = 0; i < CalculatePlayerPartyCount(); i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == VarGet(VAR_TEMP_1)) + return TRUE; + } + return FALSE; +} + From 7f5ecd8d0f5f95d284241d83b04a33df2b02322d Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 19:27:18 -0700 Subject: [PATCH 099/544] getobjectfacingdirection --- asm/macros/event.inc | 6 ++++++ data/specials.inc | 1 + src/event_object_movement.c | 7 +++++++ 3 files changed, 14 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index da6935ed3c..f29a2dfb06 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2392,3 +2392,9 @@ goto_if_eq VAR_RESULT, TRUE, \script .endif .endm + + @ Gets the facing direction of a given event object and stores it in the variable \dest. + .macro getobjectfacingdirection evObjId:req, dest:req + setvar VAR_TEMP_1, \evObjId + specialvar \dest, Script_GetObjectFacingDirection + .endm diff --git a/data/specials.inc b/data/specials.inc index 00a8c54029..5b0aa23ddd 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -562,3 +562,4 @@ gSpecials:: def_special SetCaughtMon def_special SetMonBall def_special CheckPartyForMon + def_special Script_GetObjectFacingDirection diff --git a/src/event_object_movement.c b/src/event_object_movement.c index e4732cac96..7facbab5c9 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -10632,3 +10632,10 @@ void GetDaycareGraphics(struct ScriptContext *ctx) } gSpecialVar_Result = i; } + +u8 Script_GetObjectFacingDirection(void) +{ + u8 objId = GetObjectEventIdByLocalId(VarGet(VAR_TEMP_1)); + return gObjectEvents[objId].facingDirection; +} + From 7869cb4137fcc48a4725110dd5767265aa812a42 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 19:31:52 -0700 Subject: [PATCH 100/544] Improved RemoveAllItem --- src/scrcmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scrcmd.c b/src/scrcmd.c index 955b5e00dd..12ec041895 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2476,6 +2476,6 @@ void ScriptSetDoubleBattleFlag(struct ScriptContext *ctx) void RemoveAllItem(struct ScriptContext *ctx) { - u16 itemId = VarGet(ScriptReadHalfword(ctx)); + u32 itemId = VarGet(ScriptReadHalfword(ctx)); RemoveBagItem(itemId, CountTotalItemQuantityInBag(itemId)); } From ebae09f0a6b9132ad53c925d9717dcb4b07247f3 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 20:16:27 -0700 Subject: [PATCH 101/544] Improved checkobjectat --- asm/macros/event.inc | 5 +++- src/field_specials.c | 67 ++++++++++++++++++++++---------------------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index f29a2dfb06..9375b7be9a 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2328,7 +2328,10 @@ .2byte \itemId .endm - @ return current (posType = 0) or map (posType = 1) position of object to VAR_0x8007 (x), VAR_0x8008 (y) + CURRENT_POSITION = FALSE + TEMPLATE_POSITION = TRUE + + @ Stores the CURRENT / TEMPLATE position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y) .macro getobjectxy localId:req, posType:req setvar VAR_0x8000, \localId setvar VAR_0x8001, \posType diff --git a/src/field_specials.c b/src/field_specials.c index 78ac17678b..98a909d725 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4268,47 +4268,48 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } -// get position (0 for current, 1 for map) of object event, return to VAR_0x8007, VAR_0x8008 void GetObjectPosition(void) { - u16 localId = gSpecialVar_0x8000; - u16 useTemplate = gSpecialVar_0x8001; + u32 localId = gSpecialVar_0x8000; + u32 useTemplate = gSpecialVar_0x8001; + u32 objectId; + struct ObjectEvent* objEvent; - u16 *x = &gSpecialVar_0x8007; - u16 *y = &gSpecialVar_0x8008; + u16 *x = &gSpecialVar_0x8007; + u16 *y = &gSpecialVar_0x8008; - if (!useTemplate) - { - /* current position */ - const u16 objId = GetObjectEventIdByLocalId(localId); - const struct ObjectEvent *objEvent = &gObjectEvents[objId]; - *x = objEvent->currentCoords.x - 7; // subtract out camera size - *y = objEvent->currentCoords.y - 7; - } - else - { - const struct ObjectEventTemplate *objTemplate = - FindObjectEventTemplateByLocalId(localId, - gSaveBlock1Ptr->objectEventTemplates, - gMapHeader.events->objectEventCount); - *x = objTemplate->x; - *y = objTemplate->y; - } + if (useTemplate) + { + const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); + *x = objTemplate->x; + *y = objTemplate->y; + return; + } + + objectId = GetObjectEventIdByLocalId(localId); + objEvent = &gObjectEvents[objectId]; + *x = objEvent->currentCoords.x - 7; + *y = objEvent->currentCoords.y - 7; } -// special to check if there is any object at a given position -u16 CheckObjectAtXY(void) +bool32 CheckObjectAtXY(void) { - u16 x = gSpecialVar_0x8005 + 7; - u16 y = gSpecialVar_0x8006 + 7; - u32 i; + u32 x = gSpecialVar_0x8005 + 7; + u32 y = gSpecialVar_0x8006 + 7; + u32 i; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) - { - if (gObjectEvents[i].active && gObjectEvents[i].currentCoords.x == x && gObjectEvents[i].currentCoords.y == y) - return TRUE; - } - return FALSE; + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (!gObjectEvents[i].active) + return FALSE; + + if (gObjectEvents[i].currentCoords.x != x) + return FALSE; + + if (gObjectEvents[i].currentCoords.y != y) + return FALSE; + } + return TRUE; } bool8 GetSeenMon(void) From abb17ea88b19579b66804408801cc433462bfc39 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 21:01:31 -0700 Subject: [PATCH 102/544] Improved dex flags functions --- asm/macros/event.inc | 20 ++++++++++++-------- data/specials.inc | 5 +---- src/field_specials.c | 22 ++++++---------------- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 9375b7be9a..c4bbda645f 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2348,27 +2348,31 @@ @ Checks the state of the Pokédex Seen flag of the specified Pokemon @ The result is stored in VAR_RESULT .macro getseenmon species:req - setvar VAR_TEMP_1, \species - specialvar VAR_RESULT, GetSeenMon + setvar VAR_0x8005, \species + setvar VAR_0x8006, 0 + specialvar VAR_RESULT, Script_GetSetPokedexFlag .endm @ Checks the state of the Pokédex Caught flag of the specified Pokemon @ The result is stored in VAR_RESULT .macro getcaughtmon species:req - setvar VAR_TEMP_1, \species - specialvar VAR_RESULT, GetCaughtMon + setvar VAR_0x8005, \species + setvar VAR_0x8006, 1 + specialvar VAR_RESULT, Script_GetSetPokedexFlag .endm @ Sets the Pokédex Seen flag of the specified Pokemon .macro setseenmon species:req - setvar VAR_TEMP_1, \species - special SetSeenMon + setvar VAR_0x8005, \species + setvar VAR_0x8006, 2 + specialvar VAR_RESULT, Script_GetSetPokedexFlag .endm @ Sets the Pokédex Caught flag of the specified Pokemon .macro setcaughtmon species:req - setvar VAR_TEMP_1, \species - special SetCaughtMon + setvar VAR_0x8005, \species + setvar VAR_0x8006, 3 + specialvar VAR_RESULT, Script_GetSetPokedexFlag .endm @ Changes the caught ball of a selected Pokémon diff --git a/data/specials.inc b/data/specials.inc index 5b0aa23ddd..7b391cc968 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -556,10 +556,7 @@ gSpecials:: def_special Script_GetChosenMonDefensiveIVs def_special GetObjectPosition def_special CheckObjectAtXY - def_special GetSeenMon - def_special GetCaughtMon - def_special SetSeenMon - def_special SetCaughtMon + def_special Script_GetSetPokedexFlag def_special SetMonBall def_special CheckPartyForMon def_special Script_GetObjectFacingDirection diff --git a/src/field_specials.c b/src/field_specials.c index 98a909d725..a161ba3c44 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4312,25 +4312,15 @@ bool32 CheckObjectAtXY(void) return TRUE; } -bool8 GetSeenMon(void) +bool32 Script_GetSetPokedexFlag(void) { - return GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_GET_SEEN); -} + u32 speciesId = SpeciesToNationalPokedexNum(gSpecialVar_0x8005); + bool32 desiredFlag = gSpecialVar_0x8006; -bool8 GetCaughtMon(void) -{ - return GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_GET_CAUGHT); -} + if (desiredFlag == FLAG_SET_CAUGHT) + GetSetPokedexFlag(speciesId,FLAG_SET_SEEN); -void SetSeenMon(void) -{ - GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_SET_SEEN); -} - -void SetCaughtMon(void) -{ - GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_SET_SEEN); - GetSetPokedexFlag(SpeciesToNationalPokedexNum(VarGet(VAR_TEMP_1)), FLAG_SET_CAUGHT); + return GetSetPokedexFlag(speciesId,desiredFlag); } void SetMonBall(void) From f0d5b68f70aabdc41af0f56f4fc6e29b25b37596 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 11 Aug 2024 22:10:04 -0700 Subject: [PATCH 103/544] Improved checkspecies functions --- asm/macros/event.inc | 22 ++++++++++++++-------- data/specials.inc | 3 ++- src/field_specials.c | 19 ++++++++++++------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index c4bbda645f..399ad6104f 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2379,7 +2379,7 @@ .macro setmonball ballId:req special ChoosePartyMon waitstate - setvar VAR_TEMP_1, \ballId + setvar VAR_0x8005, \ballId special SetMonBall .endm @@ -2387,19 +2387,25 @@ NO_PARTY_SCREEN = TRUE @ Check if the Player has \speciesId in their party. - .macro checkforspecies speciesId:req, silent:req, script:req - .if \silent == OPEN_PARTY_SCREEN + .macro checkspecies speciesId:req, mode:req + setvar VAR_0x8005, \speciesId + .if \mode == OPEN_PARTY_SCREEN special ChoosePartyMon waitstate - specialvar VAR_RESULT, ScriptGetPartyMonSpecies - goto_if_eq VAR_RESULT, \speciesId, \script + specialvar VAR_RESULT, CheckChosenMonMatchDesiredSpecie .else - setvar VAR_TEMP_1, \speciesId - specialvar VAR_RESULT, CheckPartyForMon - goto_if_eq VAR_RESULT, TRUE, \script + specialvar VAR_RESULT, CheckPartyHasSpecie .endif .endm + .macro checkspecies_choose speciesId:req + checkspecies \speciesId, OPEN_PARTY_SCREEN + .endm + + .macro checkspecies_auto speciesId:req + checkspecies \speciesId, NO_PARTY_SCREEN + .endm + @ Gets the facing direction of a given event object and stores it in the variable \dest. .macro getobjectfacingdirection evObjId:req, dest:req setvar VAR_TEMP_1, \evObjId diff --git a/data/specials.inc b/data/specials.inc index 7b391cc968..ed88d42eae 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -558,5 +558,6 @@ gSpecials:: def_special CheckObjectAtXY def_special Script_GetSetPokedexFlag def_special SetMonBall - def_special CheckPartyForMon + def_special CheckPartyHasSpecie + def_special CheckChosenMonMatchDesiredSpecie def_special Script_GetObjectFacingDirection diff --git a/src/field_specials.c b/src/field_specials.c index a161ba3c44..e58d861f54 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4325,18 +4325,23 @@ bool32 Script_GetSetPokedexFlag(void) void SetMonBall(void) { - u16 ballId = VarGet(VAR_TEMP_1); + u32 ballId = gSpecialVar_0x8005; SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_POKEBALL, &ballId); } -bool8 CheckPartyForMon(void) +bool32 CheckPartyHasSpecie(void) { - int i; - for (i = 0; i < CalculatePlayerPartyCount(); i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == VarGet(VAR_TEMP_1)) + u32 partyIndex; + + for (partyIndex = 0; partyIndex < CalculatePlayerPartyCount(); partyIndex++) + if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES) == gSpecialVar_0x8005) return TRUE; - } + return FALSE; } +bool32 CheckChosenMonMatchDesiredSpecie(void) +{ + return (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES) == gSpecialVar_0x8005); +} + From 881e54a52b965c87359774f80a516358f2001ecc Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 12 Aug 2024 06:51:09 -0700 Subject: [PATCH 104/544] Incremental improvement of getobjectfacing --- asm/macros/event.inc | 3 ++- src/event_object_movement.c | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 399ad6104f..9321f5b8c5 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2408,6 +2408,7 @@ @ Gets the facing direction of a given event object and stores it in the variable \dest. .macro getobjectfacingdirection evObjId:req, dest:req - setvar VAR_TEMP_1, \evObjId + setvar VAR_0x8005, \evObjId specialvar \dest, Script_GetObjectFacingDirection .endm + diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 7facbab5c9..4105aa42a5 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -10633,9 +10633,8 @@ void GetDaycareGraphics(struct ScriptContext *ctx) gSpecialVar_Result = i; } -u8 Script_GetObjectFacingDirection(void) +u32 Script_GetObjectFacingDirection(void) { - u8 objId = GetObjectEventIdByLocalId(VarGet(VAR_TEMP_1)); - return gObjectEvents[objId].facingDirection; + return gObjectEvents[GetObjectEventIdByLocalId(gSpecialVar_0x8005)].facingDirection; } From 30cc06785d5906750fd945fce8a482af2298da02 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 12 Aug 2024 06:55:33 -0700 Subject: [PATCH 105/544] Fixed global variable naming conventions --- include/script.h | 4 ++-- src/field_control_avatar.c | 8 ++++---- src/field_message_box.c | 2 +- src/menu.c | 2 +- src/scrcmd.c | 4 ++-- src/script.c | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/script.h b/include/script.h index 9c778c395d..1f3c4f7afb 100644 --- a/include/script.h +++ b/include/script.h @@ -63,7 +63,7 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize); // srccmd.h void SetMovingNpcId(u16 npcId); -extern u8 sMsgIsSignPost; -extern u8 sMsgBoxIsCancelable; +extern u8 gMsgIsSignPost; +extern u8 gMsgBoxIsCancelable; #endif // GUARD_SCRIPT_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 05060825fa..b64301e670 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -160,7 +160,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) gSpecialVar_LastTalked = 0; gSelectedObjectEvent = 0; - sMsgIsSignPost = FALSE; + gMsgIsSignPost = FALSE; playerDirection = GetPlayerFacingDirection(); GetPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); @@ -1128,8 +1128,8 @@ static u32 GetFacingSignpostType(u16 metatileBehavior, u32 playerDirection) static void SetMsgSignPostAndVarFacing(u32 playerDirection) { gWalkAwayFromSignpostTimer = WALK_AWAY_SIGNPOST_FRAMES; - sMsgBoxIsCancelable = TRUE; - sMsgIsSignPost = TRUE; + gMsgBoxIsCancelable = TRUE; + gMsgIsSignPost = TRUE; gSpecialVar_Facing = playerDirection; } @@ -1175,7 +1175,7 @@ void CancelSignPostMessageBox(struct FieldInput *input) return; } - if (!sMsgBoxIsCancelable) + if (!gMsgBoxIsCancelable) return; if (IsDpadPushedToTurnOrMovePlayer(input)) diff --git a/src/field_message_box.c b/src/field_message_box.c index c0fc1004e9..569f067caa 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -32,7 +32,7 @@ static void Task_DrawFieldMessage(u8 taskId) switch (task->tState) { case 0: - if (sMsgIsSignPost) + if (gMsgIsSignPost) LoadSignPostWindowFrameGfx(); else LoadMessageBoxAndBorderGfx(); diff --git a/src/menu.c b/src/menu.c index 20b8c4dd97..d9b331a8b2 100644 --- a/src/menu.c +++ b/src/menu.c @@ -328,7 +328,7 @@ static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 wi static inline void *GetWindowFunc_DialogueFrame(void) { - return (sMsgIsSignPost ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); + return (gMsgIsSignPost ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); } void DrawDialogueFrame(u8 windowId, bool8 copyToVram) diff --git a/src/scrcmd.c b/src/scrcmd.c index 69c9d961b6..23b42b7acd 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1290,7 +1290,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); - sMsgBoxIsCancelable = FALSE; + gMsgBoxIsCancelable = FALSE; return FALSE; } @@ -1309,7 +1309,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); - sMsgBoxIsCancelable = FALSE; + gMsgBoxIsCancelable = FALSE; return FALSE; } diff --git a/src/script.c b/src/script.c index 276163bbb6..7b1af3d542 100644 --- a/src/script.c +++ b/src/script.c @@ -27,8 +27,8 @@ static u8 sGlobalScriptContextStatus; static struct ScriptContext sGlobalScriptContext; static struct ScriptContext sImmediateScriptContext; static bool8 sLockFieldControls; -EWRAM_DATA u8 sMsgIsSignPost = FALSE; -EWRAM_DATA u8 sMsgBoxIsCancelable = FALSE; +EWRAM_DATA u8 gMsgIsSignPost = FALSE; +EWRAM_DATA u8 gMsgBoxIsCancelable = FALSE; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; From c74ad262cb5e6a2267e0115a3554e8b4181f2c8e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 12 Aug 2024 16:32:11 -0400 Subject: [PATCH 106/544] Fixed incoming usage of GET_MOVE_TYPE from master --- src/battle_util.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index adcb745c7b..9da592b09f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8256,8 +8256,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) { u8 targetBattler = 0; u32 moveTarget, side; - u32 moveType; - GET_MOVE_TYPE(move, moveType); + u32 moveType = GetMoveType(move); if (setTarget != NO_TARGET_OVERRIDE) moveTarget = setTarget - 1; @@ -10468,8 +10467,7 @@ uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef) { uq4_12_t modifier = UQ_4_12(1.0); - u32 moveType; - GET_MOVE_TYPE(move, moveType); + u32 moveType = GetMoveType(move); if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY) { From f18859ac331c5356ac8ad4895729640ac9fa2b11 Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Mon, 12 Aug 2024 23:07:12 -0400 Subject: [PATCH 107/544] Refactor Frontier Brains (#5027) * Created gFrontierBrainInfo with trainerId * Added objEventGfx and isFemale * Added win/loss texts * Added battleBit and streakAppearances * Added macro for texts * Added macro for sprites --- src/frontier_util.c | 218 ++++++++++++++++++++------------------------ 1 file changed, 97 insertions(+), 121 deletions(-) diff --git a/src/frontier_util.c b/src/frontier_util.c index ca8c76a0fd..7cadbf364b 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -49,6 +49,17 @@ struct FrontierBrainMon u16 moves[MAX_MON_MOVES]; }; +struct FrontierBrain +{ + u16 trainerId; + u8 objEventGfx; + u8 isFemale; + const u8 *lostTexts[2]; + const u8 *wonTexts[2]; + u16 battledBit[2]; + u8 streakAppearances[4]; +}; + // This file's functions. static void GetChallengeStatus(void); static void GetFrontierData(void); @@ -83,16 +94,74 @@ static void ShowPyramidResultsWindow(void); static void ShowLinkContestResultsWindow(void); static void CopyFrontierBrainText(bool8 playerWonText); -// const rom data -static const u8 sFrontierBrainStreakAppearances[NUM_FRONTIER_FACILITIES][4] = +#define FRONTIER_BRAIN_SPRITES(Brain) \ + .trainerId = TRAINER_##Brain, \ + .objEventGfx = OBJ_EVENT_GFX_##Brain + +#define FRONTIER_BRAIN_TEXTS(Brain) \ + .lostTexts = {gText_##Brain##DefeatSilver, gText_##Brain##DefeatGold}, \ + .wonTexts = {gText_##Brain##WonSilver, gText_##Brain##WonGold} + +// battledBit: Flags to change the conversation when the Frontier Brain is encountered for a battle +// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) +const struct FrontierBrain gFrontierBrainInfo[NUM_FRONTIER_FACILITIES] = { - [FRONTIER_FACILITY_TOWER] = {35, 70, 35, 1}, - [FRONTIER_FACILITY_DOME] = { 4, 9, 5, 0}, - [FRONTIER_FACILITY_PALACE] = {21, 42, 21, 1}, - [FRONTIER_FACILITY_ARENA] = {28, 56, 28, 1}, - [FRONTIER_FACILITY_FACTORY] = {21, 42, 21, 1}, - [FRONTIER_FACILITY_PIKE] = {28, 140, 56, 1}, - [FRONTIER_FACILITY_PYRAMID] = {21, 70, 35, 0}, + [FRONTIER_FACILITY_TOWER] = + { + FRONTIER_BRAIN_SPRITES(ANABEL), + .isFemale = TRUE, + FRONTIER_BRAIN_TEXTS(Anabel), + .battledBit = {1 << 0, 1 << 1}, + .streakAppearances = {35, 70, 35, 1}, + }, + [FRONTIER_FACILITY_DOME] = + { + FRONTIER_BRAIN_SPRITES(TUCKER), + .isFemale = FALSE, + FRONTIER_BRAIN_TEXTS(Tucker), + .battledBit = {1 << 2, 1 << 3}, + .streakAppearances = {1, 2, 5, 0}, + }, + [FRONTIER_FACILITY_PALACE] = + { + FRONTIER_BRAIN_SPRITES(SPENSER), + .isFemale = FALSE, + FRONTIER_BRAIN_TEXTS(Spenser), + .battledBit = {1 << 4, 1 << 5}, + .streakAppearances = {21, 42, 21, 1}, + }, + [FRONTIER_FACILITY_ARENA] = + { + FRONTIER_BRAIN_SPRITES(GRETA), + .isFemale = TRUE, + FRONTIER_BRAIN_TEXTS(Greta), + .battledBit = {1 << 6, 1 << 7}, + .streakAppearances = {28, 56, 28, 1}, + }, + [FRONTIER_FACILITY_FACTORY] = + { + FRONTIER_BRAIN_SPRITES(NOLAND), + .isFemale = FALSE, + FRONTIER_BRAIN_TEXTS(Noland), + .battledBit = {1 << 8, 1 << 9}, + .streakAppearances = {21, 42, 21, 1}, + }, + [FRONTIER_FACILITY_PIKE] = + { + FRONTIER_BRAIN_SPRITES(LUCY), + .isFemale = TRUE, + FRONTIER_BRAIN_TEXTS(Lucy), + .battledBit = {1 << 10, 1 << 11}, + .streakAppearances = {28, 140, 56, 1}, + }, + [FRONTIER_FACILITY_PYRAMID] = + { + FRONTIER_BRAIN_SPRITES(BRANDON), + .isFemale = FALSE, + FRONTIER_BRAIN_TEXTS(Brandon), + .battledBit = {1 << 12, 1 << 13}, + .streakAppearances = {21, 70, 35, 0}, + }, }; static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZE] = @@ -537,20 +606,6 @@ static const u8 sBattlePointAwards[NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT] }, }; - -// Flags to change the conversation when the Frontier Brain is encountered for a battle -// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) -static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] = -{ - [FRONTIER_FACILITY_TOWER] = {1 << 0, 1 << 1}, - [FRONTIER_FACILITY_DOME] = {1 << 2, 1 << 3}, - [FRONTIER_FACILITY_PALACE] = {1 << 4, 1 << 5}, - [FRONTIER_FACILITY_ARENA] = {1 << 6, 1 << 7}, - [FRONTIER_FACILITY_FACTORY] = {1 << 8, 1 << 9}, - [FRONTIER_FACILITY_PIKE] = {1 << 10, 1 << 11}, - [FRONTIER_FACILITY_PYRAMID] = {1 << 12, 1 << 13}, -}; - static void (* const sFrontierUtilFuncs[])(void) = { [FRONTIER_UTIL_FUNC_GET_STATUS] = GetChallengeStatus, @@ -611,18 +666,6 @@ static const struct WindowTemplate sRankingHallRecordsWindowTemplate = .baseBlock = 1 }; -// Second field - whether the character is female. -static const u8 sFrontierBrainObjEventGfx[NUM_FRONTIER_FACILITIES][2] = -{ - [FRONTIER_FACILITY_TOWER] = {OBJ_EVENT_GFX_ANABEL, TRUE}, - [FRONTIER_FACILITY_DOME] = {OBJ_EVENT_GFX_TUCKER, FALSE}, - [FRONTIER_FACILITY_PALACE] = {OBJ_EVENT_GFX_SPENSER, FALSE}, - [FRONTIER_FACILITY_ARENA] = {OBJ_EVENT_GFX_GRETA, TRUE}, - [FRONTIER_FACILITY_FACTORY] = {OBJ_EVENT_GFX_NOLAND, FALSE}, - [FRONTIER_FACILITY_PIKE] = {OBJ_EVENT_GFX_LUCY, TRUE}, - [FRONTIER_FACILITY_PYRAMID] = {OBJ_EVENT_GFX_BRANDON, FALSE}, -}; - static const u8 *const sRecordsWindowChallengeTexts[][2] = { [RANKING_HALL_TOWER_SINGLES] = {gText_BattleTower2, gText_FacilitySingle}, @@ -657,73 +700,6 @@ static const u8 *const sHallFacilityToRecordsText[] = [RANKING_HALL_TOWER_LINK] = gText_FrontierFacilityWinStreak, }; -static const u16 sFrontierBrainTrainerIds[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = TRAINER_ANABEL, - [FRONTIER_FACILITY_DOME] = TRAINER_TUCKER, - [FRONTIER_FACILITY_PALACE] = TRAINER_SPENSER, - [FRONTIER_FACILITY_ARENA] = TRAINER_GRETA, - [FRONTIER_FACILITY_FACTORY] = TRAINER_NOLAND, - [FRONTIER_FACILITY_PIKE] = TRAINER_LUCY, - [FRONTIER_FACILITY_PYRAMID] = TRAINER_BRANDON, -}; - -static const u8 *const sFrontierBrainPlayerLostSilverTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelWonSilver, - [FRONTIER_FACILITY_DOME] = gText_TuckerWonSilver, - [FRONTIER_FACILITY_PALACE] = gText_SpenserWonSilver, - [FRONTIER_FACILITY_ARENA] = gText_GretaWonSilver, - [FRONTIER_FACILITY_FACTORY] = gText_NolandWonSilver, - [FRONTIER_FACILITY_PIKE] = gText_LucyWonSilver, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonWonSilver, -}; - -static const u8 *const sFrontierBrainPlayerWonSilverTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelDefeatSilver, - [FRONTIER_FACILITY_DOME] = gText_TuckerDefeatSilver, - [FRONTIER_FACILITY_PALACE] = gText_SpenserDefeatSilver, - [FRONTIER_FACILITY_ARENA] = gText_GretaDefeatSilver, - [FRONTIER_FACILITY_FACTORY] = gText_NolandDefeatSilver, - [FRONTIER_FACILITY_PIKE] = gText_LucyDefeatSilver, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonDefeatSilver, -}; - -static const u8 *const sFrontierBrainPlayerLostGoldTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelWonGold, - [FRONTIER_FACILITY_DOME] = gText_TuckerWonGold, - [FRONTIER_FACILITY_PALACE] = gText_SpenserWonGold, - [FRONTIER_FACILITY_ARENA] = gText_GretaWonGold, - [FRONTIER_FACILITY_FACTORY] = gText_NolandWonGold, - [FRONTIER_FACILITY_PIKE] = gText_LucyWonGold, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonWonGold, -}; - -static const u8 *const sFrontierBrainPlayerWonGoldTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelDefeatGold, - [FRONTIER_FACILITY_DOME] = gText_TuckerDefeatGold, - [FRONTIER_FACILITY_PALACE] = gText_SpenserDefeatGold, - [FRONTIER_FACILITY_ARENA] = gText_GretaDefeatGold, - [FRONTIER_FACILITY_FACTORY] = gText_NolandDefeatGold, - [FRONTIER_FACILITY_PIKE] = gText_LucyDefeatGold, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonDefeatGold, -}; - -static const u8 *const *const sFrontierBrainPlayerLostTexts[] = -{ - sFrontierBrainPlayerLostSilverTexts, - sFrontierBrainPlayerLostGoldTexts, -}; - -static const u8 *const *const sFrontierBrainPlayerWonTexts[] = -{ - sFrontierBrainPlayerWonSilverTexts, - sFrontierBrainPlayerWonGoldTexts, -}; - // code void CallFrontierUtilFunc(void) { @@ -785,7 +761,7 @@ static void GetFrontierData(void) gSpecialVar_Result = gSaveBlock2Ptr->frontier.disableRecordBattle; break; case FRONTIER_DATA_HEARD_BRAIN_SPEECH: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & sBattledBrainBitFlags[facility][hasSymbol]; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & gFrontierBrainInfo[facility].battledBit[hasSymbol]; break; } } @@ -820,7 +796,7 @@ static void SetFrontierData(void) gSaveBlock2Ptr->frontier.disableRecordBattle = gSpecialVar_0x8006; break; case FRONTIER_DATA_HEARD_BRAIN_SPEECH: - gSaveBlock2Ptr->frontier.battledBrainFlags |= sBattledBrainBitFlags[facility][hasSymbol]; + gSaveBlock2Ptr->frontier.battledBrainFlags |= gFrontierBrainInfo[facility].battledBit[hasSymbol]; break; } } @@ -1600,7 +1576,7 @@ u8 GetFrontierBrainStatus(void) s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u16 winStreakNoModifier = GetCurrentFacilityWinStreak(); - s32 winStreak = winStreakNoModifier + sFrontierBrainStreakAppearances[facility][3]; + s32 winStreak = winStreakNoModifier + gFrontierBrainInfo[facility].streakAppearances[3]; s32 symbolsCount; if (battleMode != FRONTIER_MODE_SINGLES) @@ -1612,20 +1588,20 @@ u8 GetFrontierBrainStatus(void) // Missing a symbol case 0: case 1: - if (winStreak == sFrontierBrainStreakAppearances[facility][symbolsCount]) + if (winStreak == gFrontierBrainInfo[facility].streakAppearances[symbolsCount]) status = symbolsCount + 1; // FRONTIER_BRAIN_SILVER and FRONTIER_BRAIN_GOLD break; // Already received both symbols case 2: default: // Silver streak is reached - if (winStreak == sFrontierBrainStreakAppearances[facility][0]) + if (winStreak == gFrontierBrainInfo[facility].streakAppearances[0]) status = FRONTIER_BRAIN_STREAK; // Gold streak is reached - else if (winStreak == sFrontierBrainStreakAppearances[facility][1]) + else if (winStreak == gFrontierBrainInfo[facility].streakAppearances[1]) status = FRONTIER_BRAIN_STREAK_LONG; // Some increment of the gold streak is reached - else if (winStreak > sFrontierBrainStreakAppearances[facility][1] && (winStreak - sFrontierBrainStreakAppearances[facility][1]) % sFrontierBrainStreakAppearances[facility][2] == 0) + else if (winStreak > gFrontierBrainInfo[facility].streakAppearances[1] && (winStreak - gFrontierBrainInfo[facility].streakAppearances[1]) % gFrontierBrainInfo[facility].streakAppearances[2] == 0) status = FRONTIER_BRAIN_STREAK_LONG; break; } @@ -2396,7 +2372,7 @@ u8 GetFrontierBrainTrainerPicIndex(void) else facility = VarGet(VAR_FRONTIER_FACILITY); - return GetTrainerPicFromId(sFrontierBrainTrainerIds[facility]); + return GetTrainerPicFromId(gFrontierBrainInfo[facility].trainerId); } u8 GetFrontierBrainTrainerClass(void) @@ -2408,7 +2384,7 @@ u8 GetFrontierBrainTrainerClass(void) else facility = VarGet(VAR_FRONTIER_FACILITY); - return GetTrainerClassFromId(sFrontierBrainTrainerIds[facility]); + return GetTrainerClassFromId(gFrontierBrainInfo[facility].trainerId); } void CopyFrontierBrainTrainerName(u8 *dst) @@ -2422,7 +2398,7 @@ void CopyFrontierBrainTrainerName(u8 *dst) else facility = VarGet(VAR_FRONTIER_FACILITY); - trainerName = GetTrainerNameFromId(sFrontierBrainTrainerIds[facility]); + trainerName = GetTrainerNameFromId(gFrontierBrainInfo[facility].trainerId); for (i = 0; i < PLAYER_NAME_LENGTH; i++) dst[i] = trainerName[i]; @@ -2432,13 +2408,13 @@ void CopyFrontierBrainTrainerName(u8 *dst) bool8 IsFrontierBrainFemale(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - return sFrontierBrainObjEventGfx[facility][1]; + return gFrontierBrainInfo[facility].isFemale; } void SetFrontierBrainObjEventGfx_2(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - VarSet(VAR_OBJ_GFX_ID_0, sFrontierBrainObjEventGfx[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, gFrontierBrainInfo[facility].objEventGfx); } #define FRONTIER_BRAIN_OTID 61226 @@ -2505,7 +2481,7 @@ u16 GetFrontierBrainMonSpecies(u8 monId) void SetFrontierBrainObjEventGfx(u8 facility) { gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN; - VarSet(VAR_OBJ_GFX_ID_0, sFrontierBrainObjEventGfx[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, gFrontierBrainInfo[facility].objEventGfx); } u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId) @@ -2540,12 +2516,12 @@ s32 GetFronterBrainSymbol(void) if (symbol == 2) { u16 winStreak = GetCurrentFacilityWinStreak(); - if (winStreak + sFrontierBrainStreakAppearances[facility][3] == sFrontierBrainStreakAppearances[facility][0]) + if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] == gFrontierBrainInfo[facility].streakAppearances[0]) symbol = 0; - else if (winStreak + sFrontierBrainStreakAppearances[facility][3] == sFrontierBrainStreakAppearances[facility][1]) + else if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] == gFrontierBrainInfo[facility].streakAppearances[1]) symbol = 1; - else if (winStreak + sFrontierBrainStreakAppearances[facility][3] > sFrontierBrainStreakAppearances[facility][1] - && (winStreak + sFrontierBrainStreakAppearances[facility][3] - sFrontierBrainStreakAppearances[facility][1]) % sFrontierBrainStreakAppearances[facility][2] == 0) + else if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] > gFrontierBrainInfo[facility].streakAppearances[1] + && (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] - gFrontierBrainInfo[facility].streakAppearances[1]) % gFrontierBrainInfo[facility].streakAppearances[2] == 0) symbol = 1; } return symbol; @@ -2571,10 +2547,10 @@ static void CopyFrontierBrainText(bool8 playerWonText) switch (playerWonText) { case FALSE: - StringCopy(gStringVar4, sFrontierBrainPlayerLostTexts[symbol][facility]); + StringCopy(gStringVar4, gFrontierBrainInfo[facility].wonTexts[symbol]); break; case TRUE: - StringCopy(gStringVar4, sFrontierBrainPlayerWonTexts[symbol][facility]); + StringCopy(gStringVar4, gFrontierBrainInfo[facility].lostTexts[symbol]); break; } } From 38752b59b42235e020cd32624d36107a2588352a Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Tue, 13 Aug 2024 15:42:39 -0700 Subject: [PATCH 108/544] Fix a sprite issue with B_SHOW_TYPES (#5157) * Fixed issue where tiles were not freed * Updated to destroy first * Cleaned up returns * Added typeIconTags Added FreeAllTypeIconResources Fixed issue where typeIcons were not being properly handled when hidden --- src/type_icons.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/type_icons.c b/src/type_icons.c index a36c347775..2877d22071 100644 --- a/src/type_icons.c +++ b/src/type_icons.c @@ -28,6 +28,7 @@ static bool32 ShouldFlipTypeIcon(bool32, u32, u32); static void SpriteCB_TypeIcon(struct Sprite*); static void DestroyTypeIcon(struct Sprite*); +static void FreeAllTypeIconResources(void); static bool32 ShouldHideTypeIcon(u32); static s32 GetTypeIconHideMovement(bool32, u32); static s32 GetTypeIconSlideMovement(bool32, u32, s32); @@ -429,22 +430,45 @@ static void SpriteCB_TypeIcon(struct Sprite* sprite) sprite->y = GetTypeIconBounceMovement(sprite->tVerticalPosition,position); } +static const u32 typeIconTags[] = +{ + TYPE_ICON_TAG, + TYPE_ICON_TAG_2 +}; + static void DestroyTypeIcon(struct Sprite* sprite) { - u32 i; + u32 spriteId, tag; + DestroySpriteAndFreeResources(sprite); - for (i = 0; i < MAX_SPRITES; ++i) + for (spriteId = 0; spriteId < MAX_SPRITES; ++spriteId) { - if (!gSprites[i].inUse) + if (!gSprites[spriteId].inUse) continue; - if (gSprites[i].template->paletteTag == TYPE_ICON_TAG) - return; + for (tag = 0; tag < 2; tag++) + { + if (gSprites[spriteId].template->paletteTag == typeIconTags[tag]) + return; + + if (gSprites[spriteId].template->tileTag == typeIconTags[tag]) + return; + } } - FreeSpritePaletteByTag(TYPE_ICON_TAG); - FreeSpritePaletteByTag(TYPE_ICON_TAG_2); + FreeAllTypeIconResources(); +} + +static void FreeAllTypeIconResources(void) +{ + u32 tag; + + for (tag = 0; tag < 2; tag++) + { + FreeSpriteTilesByTag(typeIconTags[tag]); + FreeSpritePaletteByTag(typeIconTags[tag]); + } } static bool32 ShouldHideTypeIcon(u32 battlerId) From 6f0004ec4ed7b052052f5bfb785ab4b63e3ce954 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 14 Aug 2024 09:51:34 -0400 Subject: [PATCH 109/544] Removed some hardcoding of move IDs + Gen4/5 Defog (#5156) * Removed some hardcoding of move IDs * Added Defog Gen6+ config (+ updated tests) --- include/config/battle.h | 2 +- src/battle_ai_main.c | 2 +- src/battle_ai_switch_items.c | 4 +- src/battle_script_commands.c | 21 +++++---- src/battle_util.c | 2 +- src/pokemon.c | 21 ++++----- test/battle/move_effect/defog.c | 77 ++++++++++++++++++++------------- 7 files changed, 75 insertions(+), 54 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 72fda7f76c..4bf84a1716 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -110,7 +110,7 @@ #define B_BURN_HIT_THAW GEN_LATEST // In Gen6+, damaging moves with a chance of burn will thaw the target, regardless if they're fire-type moves or not. #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_DEFOG_EFFECT_CLEARING GEN_LATEST // In Gen6+, Defog clears Spikes, Toxic Spikes, Stealth Rock and Sticky Web from both sides. 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_TRANSFORM_SHINY GEN_LATEST // In Gen4+, Transform will copy the shiny state of the opponent instead of maintaining its own shiny state. #define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms. diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index c814210766..b0229cd926 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -4056,7 +4056,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); // Force 'em out next turn break; default: - if (move != MOVE_BESTOW && aiData->items[battlerAtk] == ITEM_NONE) + if (gMovesInfo[gCurrentMove].effect != EFFECT_BESTOW && aiData->items[battlerAtk] == ITEM_NONE) { switch (aiData->holdEffects[battlerDef]) { diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 966082f32f..e1e25b5279 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -881,7 +881,9 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) for (j = 0; j < MAX_MON_MOVES; j++) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL); - if (aiMove == MOVE_RAPID_SPIN || aiMove == MOVE_DEFOG || aiMove == MOVE_MORTAL_SPIN || aiMove == MOVE_TIDY_UP) + if (MoveHasAdditionalEffectSelf(aiMove, MOVE_EFFECT_RAPID_SPIN) + || (B_DEFOG_EFFECT_CLEARING >= GEN_6 && gMovesInfo[aiMove].effect == EFFECT_DEFOG) + || gMovesInfo[aiMove].effect == EFFECT_TIDY_UP) { // Have a mon that can clear the hazards, so switching out is okay return TRUE; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ecd6fc7ffb..befc8f95ca 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1491,14 +1491,14 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } // If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits. - else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { if (!JumpIfMoveFailed(7, move)) RecordAbilityBattle(gBattlerAttacker, ABILITY_NO_GUARD); return TRUE; } // If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits. - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { if (!JumpIfMoveFailed(7, move)) RecordAbilityBattle(gBattlerTarget, ABILITY_NO_GUARD); @@ -2165,7 +2165,7 @@ static void Cmd_attackanimation(void) && gCurrentMove != MOVE_SUBSTITUTE && gCurrentMove != MOVE_ALLY_SWITCH // In a wild double battle gotta use the teleport animation if two wild pokemon are alive. - && !(gCurrentMove == MOVE_TELEPORT && WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))) + && !(gMovesInfo[gCurrentMove].effect == EFFECT_TELEPORT && WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))) { BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; @@ -8605,11 +8605,14 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) DEFOG_CLEAR(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, BattleScript_SideStatusWoreOffReturn, MOVE_AURORA_VEIL); DEFOG_CLEAR(SIDE_STATUS_SAFEGUARD, safeguardTimer, BattleScript_SideStatusWoreOffReturn, MOVE_SAFEGUARD); } - DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STEELSURGE, steelsurgeAmount, BattleScript_SteelsurgeDefog, 0); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + { + DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_STEELSURGE, steelsurgeAmount, BattleScript_SteelsurgeDefog, 0); + } if (gBattleWeather & B_WEATHER_FOG) { gBattleWeather &= ~B_WEATHER_FOG; @@ -8617,7 +8620,7 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) gBattlescriptCurrInstr = BattleScript_FogEnded_Ret; return TRUE; } - if (B_DEFOG_CLEARS_TERRAIN >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + if (B_DEFOG_EFFECT_CLEARING >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) { RemoveAllTerrains(); BattleScriptPushCursor(); diff --git a/src/battle_util.c b/src/battle_util.c index 9da592b09f..7bcdf1ee08 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8391,7 +8391,7 @@ u8 IsMonDisobedient(void) // is not obedient if (gCurrentMove == MOVE_RAGE) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RAGE; - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK)) + if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gMovesInfo[gCurrentMove].effect == EFFECT_SNORE || gMovesInfo[gCurrentMove].effect == EFFECT_SLEEP_TALK)) { gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep; return 1; diff --git a/src/pokemon.c b/src/pokemon.c index cfb2307126..306e310372 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6957,8 +6957,9 @@ u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) u32 ability = GetMonAbility(mon); u32 type1 = gSpeciesInfo[species].types[0]; u32 type2 = gSpeciesInfo[species].types[1]; + u32 effect = gMovesInfo[move].effect; - if (move == MOVE_IVY_CUDGEL + if (effect == EFFECT_IVY_CUDGEL && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) @@ -6969,11 +6970,11 @@ u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) { return TYPE_NORMAL; } - else if (move == MOVE_TERA_BLAST && GetActiveGimmick(battler) == GIMMICK_TERA && gBattleMons[battler].species == species) + else if (effect == EFFECT_TERA_BLAST && GetActiveGimmick(battler) == GIMMICK_TERA && gBattleMons[battler].species == species) { return GetMonData(mon, MON_DATA_TERA_TYPE); } - else if (move == MOVE_TERA_STARSTORM && species == SPECIES_TERAPAGOS_STELLAR) + else if (effect == EFFECT_TERA_STARSTORM && species == SPECIES_TERAPAGOS_STELLAR) { return TYPE_STELLAR; } @@ -6981,32 +6982,32 @@ u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) { return CalculateHiddenPowerType(mon); } - else if (move == MOVE_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) + else if (effect == EFFECT_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) { type = TYPE_DARK; } - else if (gMovesInfo[move].effect == EFFECT_CHANGE_TYPE_ON_ITEM) + else if (effect == EFFECT_CHANGE_TYPE_ON_ITEM) { if (heldItemEffect == gMovesInfo[move].argument) return ItemId_GetSecondaryId(heldItem); else return TYPE_NORMAL; } - else if (move == MOVE_NATURAL_GIFT) + else if (effect == EFFECT_NATURAL_GIFT) { if (ItemId_GetPocket(heldItem) == POCKET_BERRIES) return gNaturalGiftTable[ITEM_TO_BERRY(heldItem)].type; else return TYPE_NORMAL; } - else if (move == MOVE_RAGING_BULL + else if (effect == EFFECT_RAGING_BULL && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) { return type2; } - else if (move == MOVE_REVELATION_DANCE) + else if (effect == EFFECT_REVELATION_DANCE) { if (gBattleMons[battler].species != species && type1 != TYPE_MYSTERY) type = type1; @@ -7021,7 +7022,7 @@ u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) else if (gBattleMons[battler].types[2] != TYPE_MYSTERY) type = gBattleMons[battler].types[2]; } - else if (gMovesInfo[move].effect == EFFECT_TERRAIN_PULSE + else if (effect == EFFECT_TERRAIN_PULSE && ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species) || (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY) && gBattleMons[battler].species == species))) { @@ -7037,7 +7038,7 @@ u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) type = TYPE_NORMAL; } - if (gMovesInfo[move].effect == EFFECT_WEATHER_BALL) + if (effect == EFFECT_WEATHER_BALL) { if (gMain.inBattle && WEATHER_HAS_EFFECT) { diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 418d28d97b..80d500d2ee 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -131,7 +131,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard } } -DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side") +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side (Gen 6+)") { u16 move; @@ -154,13 +154,15 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); + } } // Switch happens SWITCH_OUT_MESSAGE("Wobbuffet"); SEND_IN_MESSAGE("Wobbuffet"); - if (move != MOVE_DEFOG) { + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); @@ -198,12 +200,13 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("The spikes disappeared from the ground around your team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + MESSAGE("The spikes disappeared from the ground around your team!"); } // Switch happens SWITCH_OUT_MESSAGE("Wobbuffet"); SEND_IN_MESSAGE("Wobbuffet"); - if (move != MOVE_DEFOG) { + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(player); MESSAGE("Wobbuffet is hurt by spikes!"); } @@ -216,7 +219,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player } } -SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") { u16 move; @@ -225,7 +228,6 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") PARAMETRIZE { move = MOVE_MISTY_TERRAIN; } PARAMETRIZE { move = MOVE_GRASSY_TERRAIN; } GIVEN { - ASSUME(B_DEFOG_CLEARS_TERRAIN >= GEN_8); PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } } WHEN { @@ -235,19 +237,29 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's evasiveness fell!"); - if (move == MOVE_PSYCHIC_TERRAIN) { - MESSAGE("The weirdness disappeared from the battlefield."); + if (B_DEFOG_EFFECT_CLEARING >= GEN_8) { + if (move == MOVE_PSYCHIC_TERRAIN) { + MESSAGE("The weirdness disappeared from the battlefield."); + } + else if (move == MOVE_ELECTRIC_TERRAIN) { + MESSAGE("The electricity disappeared from the battlefield."); + } + else if (move == MOVE_MISTY_TERRAIN) { + MESSAGE("The mist disappeared from the battlefield."); + } + else if (move == MOVE_GRASSY_TERRAIN) { + MESSAGE("The grass disappeared from the battlefield."); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); + } else { + NONE_OF { + MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The electricity disappeared from the battlefield."); + MESSAGE("The mist disappeared from the battlefield."); + MESSAGE("The grass disappeared from the battlefield."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); + } } - else if (move == MOVE_ELECTRIC_TERRAIN) { - MESSAGE("The electricity disappeared from the battlefield."); - } - else if (move == MOVE_MISTY_TERRAIN) { - MESSAGE("The mist disappeared from the battlefield."); - } - else if (move == MOVE_GRASSY_TERRAIN) { - MESSAGE("The grass disappeared from the battlefield."); - } - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); } } @@ -270,11 +282,12 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's evasiveness fell!"); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); } // Switch happens MESSAGE("2 sent out Wobbuffet!"); - if (move != MOVE_DEFOG) { + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { MESSAGE("Foe Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); @@ -356,15 +369,17 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" 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!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { + 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 7d921fa89b877ec0a76d6441453c005fa516590d Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Wed, 14 Aug 2024 18:27:44 -0400 Subject: [PATCH 110/544] Slight storage system documentation --- src/pokemon_storage_system.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index b398b88752..48eefd66fd 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -4824,7 +4824,7 @@ static void MovePartySpriteToNextSlot(struct Sprite *sprite, u16 partyId) sprite->sMonY = (u16)(sprite->y) * 8; sprite->sSpeedX = ((x * 8) - sprite->sMonX) / 8; sprite->sSpeedY = ((y * 8) - sprite->sMonY) / 8; - sprite->data[6] = 8; + sprite->sMoveSteps = 8; sprite->callback = SpriteCB_MovePartyMonToNextSlot; } @@ -8258,7 +8258,7 @@ static bool8 MultiMove_GrabSelection(void) if (!DoMonPlaceChange()) { StartCursorAnim(CURSOR_ANIM_FIST); - MultiMove_InitMove(0, 256, 8); + MultiMove_InitMove(0, Q_8_8(1), 8); InitMultiMonPlaceChange(TRUE); sMultiMove->state++; } @@ -8291,7 +8291,7 @@ static bool8 MultiMove_PlaceMons(void) { case 0: MultiMove_SetPlacedMonData(); - MultiMove_InitMove(0, -256, 8); + MultiMove_InitMove(0, Q_8_8(-1), 8); InitMultiMonPlaceChange(FALSE); sMultiMove->state++; break; @@ -8335,25 +8335,25 @@ static bool8 MultiMove_TryMoveGroup(u8 dir) if (sMultiMove->minRow == 0) return FALSE; sMultiMove->minRow--; - MultiMove_InitMove(0, 1024, 6); + MultiMove_InitMove(0, Q_8_8(4), 6); break; case 1: // Down if (sMultiMove->minRow + sMultiMove->rowsTotal >= IN_BOX_ROWS) return FALSE; sMultiMove->minRow++; - MultiMove_InitMove(0, -1024, 6); + MultiMove_InitMove(0, Q_8_8(-4), 6); break; case 2: // Left if (sMultiMove->minColumn == 0) return FALSE; sMultiMove->minColumn--; - MultiMove_InitMove(1024, 0, 6); + MultiMove_InitMove(Q_8_8(4), 0, 6); break; case 3: // Right if (sMultiMove->minColumn + sMultiMove->columnsTotal >= IN_BOX_COLUMNS) return FALSE; sMultiMove->minColumn++; - MultiMove_InitMove(-1024, 0, 6); + MultiMove_InitMove(Q_8_8(-4), 0, 6); break; } return TRUE; From bdeedaa9499e8866251242b48d5959ac7ce72c76 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 14 Aug 2024 19:05:30 -0700 Subject: [PATCH 111/544] Renamed evObjId to localId --- asm/macros/event.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 9321f5b8c5..7407774578 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2407,8 +2407,8 @@ .endm @ Gets the facing direction of a given event object and stores it in the variable \dest. - .macro getobjectfacingdirection evObjId:req, dest:req - setvar VAR_0x8005, \evObjId + .macro getobjectfacingdirection localId:req, dest:req + setvar VAR_0x8005, \localId specialvar \dest, Script_GetObjectFacingDirection .endm From 458340e0439104da1310d675255837f68cb75896 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 14 Aug 2024 19:09:56 -0700 Subject: [PATCH 112/544] Moved pokedex special constants to header --- asm/macros/event.inc | 5 +---- include/constants/field_specials.h | 5 +++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 7407774578..1c5b004bbb 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2383,10 +2383,7 @@ special SetMonBall .endm - OPEN_PARTY_SCREEN = FALSE - NO_PARTY_SCREEN = TRUE - - @ Check if the Player has \speciesId in their party. + @ Check if the Player has \speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. .macro checkspecies speciesId:req, mode:req setvar VAR_0x8005, \speciesId .if \mode == OPEN_PARTY_SCREEN diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h index 1e08a47f95..35769ba3b1 100644 --- a/include/constants/field_specials.h +++ b/include/constants/field_specials.h @@ -86,4 +86,9 @@ #define DEOXYS_ROCK_SOLVED 2 #define DEOXYS_ROCK_COMPLETE 3 +enum { + OPEN_PARTY_SCREEN, + NO_PARTY_SCREEN +}; + #endif // GUARD_CONSTANTS_FIELD_SPECIALS_H From dc06321054d6f1fca891d26a2cb736241ac9caaf Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 14 Aug 2024 19:24:55 -0700 Subject: [PATCH 113/544] Moved pokedex flags to constants files andadded constants to header of event_scripts --- asm/macros/event.inc | 8 ++++---- data/event_scripts.s | 1 + include/constants/pokedex.h | 14 ++++++++++++++ include/pokedex.h | 14 -------------- src/field_specials.c | 2 +- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 1c5b004bbb..ac008119ef 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2349,7 +2349,7 @@ @ The result is stored in VAR_RESULT .macro getseenmon species:req setvar VAR_0x8005, \species - setvar VAR_0x8006, 0 + setvar VAR_0x8006, FLAG_GET_SEEN specialvar VAR_RESULT, Script_GetSetPokedexFlag .endm @@ -2357,21 +2357,21 @@ @ The result is stored in VAR_RESULT .macro getcaughtmon species:req setvar VAR_0x8005, \species - setvar VAR_0x8006, 1 + setvar VAR_0x8006, FLAG_GET_CAUGHT specialvar VAR_RESULT, Script_GetSetPokedexFlag .endm @ Sets the Pokédex Seen flag of the specified Pokemon .macro setseenmon species:req setvar VAR_0x8005, \species - setvar VAR_0x8006, 2 + setvar VAR_0x8006, FLAG_SET_SEEN specialvar VAR_RESULT, Script_GetSetPokedexFlag .endm @ Sets the Pokédex Caught flag of the specified Pokemon .macro setcaughtmon species:req setvar VAR_0x8005, \species - setvar VAR_0x8006, 3 + setvar VAR_0x8006, FLAG_SET_CAUGHT specialvar VAR_RESULT, Script_GetSetPokedexFlag .endm diff --git a/data/event_scripts.s b/data/event_scripts.s index d4393ac9d4..8ff14199f6 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -42,6 +42,7 @@ #include "constants/metatile_labels.h" #include "constants/moves.h" #include "constants/party_menu.h" +#include "constants/pokedex.h" #include "constants/pokemon.h" #include "constants/roulette.h" #include "constants/script_menu.h" diff --git a/include/constants/pokedex.h b/include/constants/pokedex.h index 8058f01e5c..241198e178 100644 --- a/include/constants/pokedex.h +++ b/include/constants/pokedex.h @@ -1327,4 +1327,18 @@ enum { #define DEX_HGSS_Y_BOTTOM_PADDING 4 #define DEX_HGSS_MEASUREMENT_X_PADDING 51 +enum +{ + DEX_MODE_HOENN, + DEX_MODE_NATIONAL +}; + +enum +{ + FLAG_GET_SEEN, + FLAG_GET_CAUGHT, + FLAG_SET_SEEN, + FLAG_SET_CAUGHT +}; + #endif // GUARD_CONSTANTS_POKEDEX_H diff --git a/include/pokedex.h b/include/pokedex.h index be861fe682..0bd91449c3 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -4,20 +4,6 @@ extern u8 gUnusedPokedexU8; extern void (*gPokedexVBlankCB)(void); -enum -{ - DEX_MODE_HOENN, - DEX_MODE_NATIONAL -}; - -enum -{ - FLAG_GET_SEEN, - FLAG_GET_CAUGHT, - FLAG_SET_SEEN, - FLAG_SET_CAUGHT -}; - void ResetPokedex(void); u16 GetNationalPokedexCount(u8); u16 GetHoennPokedexCount(u8); diff --git a/src/field_specials.c b/src/field_specials.c index e58d861f54..a99a21f6b7 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -30,6 +30,7 @@ #include "overworld.h" #include "party_menu.h" #include "pokeblock.h" +#include "pokedex.h" #include "pokemon.h" #include "pokemon_storage_system.h" #include "random.h" @@ -68,7 +69,6 @@ #include "constants/metatile_labels.h" #include "palette.h" #include "battle_util.h" -#include "pokedex.h" #define TAG_ITEM_ICON 5500 From 67f8a61eef101d197c1f95524f4f8682a7258d0c Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 14 Aug 2024 19:44:18 -0700 Subject: [PATCH 114/544] Moved current and template positions to headers --- asm/macros/event.inc | 17 +++++++++++++---- include/constants/field_specials.h | 5 +++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index ac008119ef..7b4bca1170 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2328,16 +2328,25 @@ .2byte \itemId .endm - CURRENT_POSITION = FALSE - TEMPLATE_POSITION = TRUE - - @ Stores the CURRENT / TEMPLATE position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y) + @ Stores the position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y). Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will takje the object's template position. .macro getobjectxy localId:req, posType:req setvar VAR_0x8000, \localId setvar VAR_0x8001, \posType special GetObjectPosition .endm + .macro getobjecttemplatexy localId:req + setvar VAR_0x8000, \localId + setvar VAR_0x8001, TEMPLATE_POSITION + special GetObjectPosition + .endm + + .macro getobjectcurrentxy localId:req + setvar VAR_0x8000, \localId + setvar VAR_0x8001, CURRENT_POSITION + special GetObjectPosition + .endm + @ checks if there is any object at a given position .macro checkobjectat x:req, y:req setorcopyvar VAR_0x8005, \x diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h index 35769ba3b1..64a105a5fd 100644 --- a/include/constants/field_specials.h +++ b/include/constants/field_specials.h @@ -91,4 +91,9 @@ enum { NO_PARTY_SCREEN }; +enum { + CURRENT_POSITION, + TEMPLATE_POSITION +}; + #endif // GUARD_CONSTANTS_FIELD_SPECIALS_H From fed7fc4f0a6b871adef04c18411633e44a6ae1b0 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 14 Aug 2024 21:35:03 -0700 Subject: [PATCH 115/544] Fixed bug with checkobjectat --- src/field_specials.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/field_specials.c b/src/field_specials.c index a99a21f6b7..38e4fa4fde 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4301,15 +4301,16 @@ bool32 CheckObjectAtXY(void) for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { if (!gObjectEvents[i].active) - return FALSE; + continue; if (gObjectEvents[i].currentCoords.x != x) - return FALSE; + continue; if (gObjectEvents[i].currentCoords.y != y) - return FALSE; + continue; + return TRUE; } - return TRUE; + return FALSE; } bool32 Script_GetSetPokedexFlag(void) From 287f6baaa965ae9ec4ba66bdf162ba8a731d2014 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 14 Aug 2024 22:14:48 -0700 Subject: [PATCH 116/544] spaces over tabs please don't eat my ass --- include/constants/field_specials.h | 8 +-- src/event_object_movement.c | 44 ++++++++--------- src/field_specials.c | 78 +++++++++++++++--------------- 3 files changed, 65 insertions(+), 65 deletions(-) diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h index 64a105a5fd..72966adeb8 100644 --- a/include/constants/field_specials.h +++ b/include/constants/field_specials.h @@ -87,13 +87,13 @@ #define DEOXYS_ROCK_COMPLETE 3 enum { - OPEN_PARTY_SCREEN, - NO_PARTY_SCREEN + OPEN_PARTY_SCREEN, + NO_PARTY_SCREEN }; enum { - CURRENT_POSITION, - TEMPLATE_POSITION + CURRENT_POSITION, + TEMPLATE_POSITION }; #endif // GUARD_CONSTANTS_FIELD_SPECIALS_H diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 4105aa42a5..8c069a895b 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -9494,30 +9494,30 @@ static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, st static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) { - // Specifies which bike track shape to show next. - // For example, when the bike turns from up to right, it will show - // a track that curves to the right. - // Each 4-byte row corresponds to the initial direction of the bike, and - // each byte in that row is for the next direction of the bike in the order - // of down, up, left, right. - static const u8 slitherTracks_Transitions[4][4] = { - {1, 2, 7, 8}, - {1, 2, 6, 5}, - {5, 8, 3, 4}, - {6, 7, 3, 4}, - }; + // Specifies which bike track shape to show next. + // For example, when the bike turns from up to right, it will show + // a track that curves to the right. + // Each 4-byte row corresponds to the initial direction of the bike, and + // each byte in that row is for the next direction of the bike in the order + // of down, up, left, right. + static const u8 slitherTracks_Transitions[4][4] = { + {1, 2, 7, 8}, + {1, 2, 6, 5}, + {5, 8, 3, 4}, + {6, 7, 3, 4}, + }; - if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y) - { - gFieldEffectArguments[0] = objEvent->previousCoords.x; - gFieldEffectArguments[1] = objEvent->previousCoords.y; - gFieldEffectArguments[2] = 149; - gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = - slitherTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; + if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y) + { + gFieldEffectArguments[0] = objEvent->previousCoords.x; + gFieldEffectArguments[1] = objEvent->previousCoords.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = + slitherTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; gFieldEffectArguments[5] = objEvent->previousMetatileBehavior; - FieldEffectStart(FLDEFF_TRACKS_SLITHER); - } + FieldEffectStart(FLDEFF_TRACKS_SLITHER); + } } void GroundEffect_Ripple(struct ObjectEvent *objEvent, struct Sprite *sprite) diff --git a/src/field_specials.c b/src/field_specials.c index 38e4fa4fde..d0d370c566 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4270,58 +4270,58 @@ void PreparePartyForSkyBattle(void) void GetObjectPosition(void) { - u32 localId = gSpecialVar_0x8000; - u32 useTemplate = gSpecialVar_0x8001; - u32 objectId; - struct ObjectEvent* objEvent; + u32 localId = gSpecialVar_0x8000; + u32 useTemplate = gSpecialVar_0x8001; + u32 objectId; + struct ObjectEvent* objEvent; - u16 *x = &gSpecialVar_0x8007; - u16 *y = &gSpecialVar_0x8008; + u16 *x = &gSpecialVar_0x8007; + u16 *y = &gSpecialVar_0x8008; - if (useTemplate) - { - const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); - *x = objTemplate->x; - *y = objTemplate->y; - return; - } + if (useTemplate) + { + const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); + *x = objTemplate->x; + *y = objTemplate->y; + return; + } - objectId = GetObjectEventIdByLocalId(localId); - objEvent = &gObjectEvents[objectId]; - *x = objEvent->currentCoords.x - 7; - *y = objEvent->currentCoords.y - 7; + objectId = GetObjectEventIdByLocalId(localId); + objEvent = &gObjectEvents[objectId]; + *x = objEvent->currentCoords.x - 7; + *y = objEvent->currentCoords.y - 7; } bool32 CheckObjectAtXY(void) { - u32 x = gSpecialVar_0x8005 + 7; - u32 y = gSpecialVar_0x8006 + 7; - u32 i; + u32 x = gSpecialVar_0x8005 + 7; + u32 y = gSpecialVar_0x8006 + 7; + u32 i; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) - { - if (!gObjectEvents[i].active) - continue; + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (!gObjectEvents[i].active) + continue; - if (gObjectEvents[i].currentCoords.x != x) - continue; + if (gObjectEvents[i].currentCoords.x != x) + continue; - if (gObjectEvents[i].currentCoords.y != y) - continue; - return TRUE; - } - return FALSE; + if (gObjectEvents[i].currentCoords.y != y) + continue; + return TRUE; + } + return FALSE; } bool32 Script_GetSetPokedexFlag(void) { - u32 speciesId = SpeciesToNationalPokedexNum(gSpecialVar_0x8005); - bool32 desiredFlag = gSpecialVar_0x8006; + u32 speciesId = SpeciesToNationalPokedexNum(gSpecialVar_0x8005); + bool32 desiredFlag = gSpecialVar_0x8006; - if (desiredFlag == FLAG_SET_CAUGHT) - GetSetPokedexFlag(speciesId,FLAG_SET_SEEN); + if (desiredFlag == FLAG_SET_CAUGHT) + GetSetPokedexFlag(speciesId,FLAG_SET_SEEN); - return GetSetPokedexFlag(speciesId,desiredFlag); + return GetSetPokedexFlag(speciesId,desiredFlag); } void SetMonBall(void) @@ -4332,9 +4332,9 @@ void SetMonBall(void) bool32 CheckPartyHasSpecie(void) { - u32 partyIndex; + u32 partyIndex; - for (partyIndex = 0; partyIndex < CalculatePlayerPartyCount(); partyIndex++) + for (partyIndex = 0; partyIndex < CalculatePlayerPartyCount(); partyIndex++) if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES) == gSpecialVar_0x8005) return TRUE; @@ -4343,6 +4343,6 @@ bool32 CheckPartyHasSpecie(void) bool32 CheckChosenMonMatchDesiredSpecie(void) { - return (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES) == gSpecialVar_0x8005); + return (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES) == gSpecialVar_0x8005); } From fe275ef0629cf4560c774bbccba54fd5aeee1f8d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 15 Aug 2024 07:45:01 -0400 Subject: [PATCH 117/544] Teatime animations use B_WAIT_TIME_LONG (#5173) --- 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 c47127c651..47436136ca 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -578,7 +578,7 @@ BattleScript_Teatimerod: statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer printfromtable gStatUpStringIds - waitmessage 0x40 + waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_TeatimeLoop moveendcase MOVEEND_CLEAR_BITS @@ -590,7 +590,7 @@ BattleScript_Teatimemotor: statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer printfromtable gStatUpStringIds - waitmessage 0x40 + waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_TeatimeLoop moveendcase MOVEEND_CLEAR_BITS From c1ee43254e7f9e5032fd61eac65e090c3a80049f Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 15 Aug 2024 19:34:56 +0200 Subject: [PATCH 118/544] Clean up defines lacking spaces --- include/battle.h | 16 ++++++++-------- include/battle_main.h | 6 +++--- include/battle_util.h | 6 +++--- include/constants/items.h | 4 ++-- include/data.h | 8 ++++---- include/gba/defines.h | 2 +- include/global.h | 4 ++-- include/mail.h | 2 +- include/menu_specialized.h | 2 +- include/random.h | 4 ++-- src/battle_setup.c | 2 +- src/data/decoration/tilemaps.h | 2 +- src/data/pokemon/experience_tables.h | 12 ++++++------ src/data/union_room.h | 8 ++++---- src/field_specials.c | 14 +++++++------- src/fieldmap.c | 2 +- src/frontier_pass.c | 2 +- src/link_rfu_2.c | 2 +- src/menu_specialized.c | 2 +- src/pokemon_jump.c | 2 +- src/pokenav_ribbons_summary.c | 2 +- src/region_map.c | 2 +- src/roulette.c | 10 +++++----- src/union_room_player_avatar.c | 2 +- 24 files changed, 59 insertions(+), 59 deletions(-) diff --git a/include/battle.h b/include/battle.h index eb25b96550..1edd784030 100644 --- a/include/battle.h +++ b/include/battle.h @@ -460,26 +460,26 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER typeArg = gBattleMoves[move].type; \ } -#define IS_TYPE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY) -#define IS_TYPE_SPECIAL(moveType)(moveType > TYPE_MYSTERY) +#define IS_TYPE_PHYSICAL(moveType) (moveType < TYPE_MYSTERY) +#define IS_TYPE_SPECIAL(moveType) (moveType > TYPE_MYSTERY) #define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0)) -#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].types[0] == type || gBattleMons[battlerId].types[1] == type)) +#define IS_BATTLER_OF_TYPE(battlerId, type) ((gBattleMons[battlerId].types[0] == type || gBattleMons[battlerId].types[1] == type)) #define SET_BATTLER_TYPE(battlerId, type) \ { \ gBattleMons[battlerId].types[0] = type; \ gBattleMons[battlerId].types[1] = type; \ } -#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8 -#define GET_STAT_BUFF_VALUE2(n)((n & 0xF0)) -#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40 +#define GET_STAT_BUFF_ID(n) ((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8 +#define GET_STAT_BUFF_VALUE2(n) ((n & 0xF0)) +#define GET_STAT_BUFF_VALUE(n) (((n >> 4) & 7)) // 0x10, 0x20, 0x40 #define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit -#define SET_STAT_BUFF_VALUE(n)((((n) << 4) & 0xF0)) +#define SET_STAT_BUFF_VALUE(n) ((((n) << 4) & 0xF0)) -#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7)) +#define SET_STATCHANGER(statId, stage, goesDown) (gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7)) // NOTE: The members of this struct have hard-coded offsets // in include/constants/battle_script_commands.h diff --git a/include/battle_main.h b/include/battle_main.h index e3e0cb7ea4..ae970286ca 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -23,9 +23,9 @@ struct MultiPartnerMenuPokemon }; // defines for the u8 array gTypeEffectiveness -#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0])) -#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1])) -#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2])) +#define TYPE_EFFECT_ATK_TYPE(i) ((gTypeEffectiveness[i + 0])) +#define TYPE_EFFECT_DEF_TYPE(i) ((gTypeEffectiveness[i + 1])) +#define TYPE_EFFECT_MULTIPLIER(i) ((gTypeEffectiveness[i + 2])) // defines for the gTypeEffectiveness multipliers #define TYPE_MUL_NO_EFFECT 0 diff --git a/include/battle_util.h b/include/battle_util.h index c7de9aae86..870990e9f5 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -33,9 +33,9 @@ #define ABILITYEFFECT_WATER_SPORT 254 #define ABILITYEFFECT_SWITCH_IN_WEATHER 255 -#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0)) -#define ABILITY_ON_FIELD(abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0)) -#define ABILITY_ON_FIELD2(abilityId)(AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0)) +#define ABILITY_ON_OPPOSING_FIELD(battlerId, abilityId) (AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, battlerId, abilityId, 0, 0)) +#define ABILITY_ON_FIELD(abilityId) (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0)) +#define ABILITY_ON_FIELD2(abilityId) (AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0)) // For the first argument of ItemBattleEffects, to deteremine which block of item effects to try #define ITEMEFFECT_ON_SWITCH_IN 0 diff --git a/include/constants/items.h b/include/constants/items.h index ed9bfb5ec8..9e6fecf014 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -441,8 +441,8 @@ #define NUM_ROUTE_114_MAN_BERRIES (LAST_ROUTE_114_MAN_BERRY - FIRST_ROUTE_114_MAN_BERRY + 1) #define NUM_ROUTE_114_MAN_BERRIES_SKIPPED (FIRST_ROUTE_114_MAN_BERRY - FIRST_BERRY_INDEX) -#define ITEM_TO_BERRY(itemId)(((itemId) - FIRST_BERRY_INDEX) + 1) -#define ITEM_TO_MAIL(itemId)((itemId) - FIRST_MAIL_INDEX) +#define ITEM_TO_BERRY(itemId) (((itemId) - FIRST_BERRY_INDEX) + 1) +#define ITEM_TO_MAIL(itemId) ((itemId) - FIRST_MAIL_INDEX) #define MAIL_NONE 0xFF #define NUM_TECHNICAL_MACHINES 50 diff --git a/include/data.h b/include/data.h index 41b34d73e2..558b1dfff3 100644 --- a/include/data.h +++ b/include/data.h @@ -28,9 +28,9 @@ struct MonCoords u8 y_offset; }; -#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 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) struct TrainerMonNoItemDefaultMoves { @@ -91,7 +91,7 @@ struct Trainer /*0x24*/ union TrainerMonPtr party; }; -#define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) +#define TRAINER_ENCOUNTER_MUSIC(trainer) ((gTrainers[trainer].encounterMusic_gender & 0x7F)) extern const u16 gMinigameDigits_Pal[]; extern const u32 gMinigameDigits_Gfx[]; diff --git a/include/gba/defines.h b/include/gba/defines.h index fa3a30fd6e..febe6882cf 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -75,7 +75,7 @@ #define DISPLAY_TILE_HEIGHT (DISPLAY_HEIGHT / TILE_HEIGHT) // Size of different tile formats in bytes -#define TILE_SIZE(bpp)((bpp) * TILE_WIDTH * TILE_HEIGHT / 8) +#define TILE_SIZE(bpp) ((bpp) * TILE_WIDTH * TILE_HEIGHT / 8) #define TILE_SIZE_1BPP TILE_SIZE(1) // 8 #define TILE_SIZE_4BPP TILE_SIZE(4) // 32 #define TILE_SIZE_8BPP TILE_SIZE(8) // 64 diff --git a/include/global.h b/include/global.h index 658af43da7..00d608e672 100644 --- a/include/global.h +++ b/include/global.h @@ -89,7 +89,7 @@ // There are cases where GF does a&(n-1) where we would really like to have a%n, because // if n is changed to a value that isn't a power of 2 then a&(n-1) is unlikely to work as // intended, and a%n for powers of 2 isn't always optimized to use &. -#define MOD(a, n)(((n) & ((n)-1)) ? ((a) % (n)) : ((a) & ((n)-1))) +#define MOD(a, n) (((n) & ((n)-1)) ? ((a) % (n)) : ((a) & ((n)-1))) // Extracts the upper 16 bits of a 32-bit number #define HIHALF(n) (((n) & 0xFFFF0000) >> 16) @@ -130,7 +130,7 @@ f; \ }) -#define DIV_ROUND_UP(val, roundBy)(((val) / (roundBy)) + (((val) % (roundBy)) ? 1 : 0)) +#define DIV_ROUND_UP(val, roundBy) (((val) / (roundBy)) + (((val) % (roundBy)) ? 1 : 0)) #define ROUND_BITS_TO_BYTES(numBits) DIV_ROUND_UP(numBits, 8) diff --git a/include/mail.h b/include/mail.h index f4590a70ec..403078f097 100644 --- a/include/mail.h +++ b/include/mail.h @@ -1,7 +1,7 @@ #ifndef GUARD_MAIL_H #define GUARD_MAIL_H -#define IS_ITEM_MAIL(itemId)((itemId == ITEM_ORANGE_MAIL \ +#define IS_ITEM_MAIL(itemId) ((itemId == ITEM_ORANGE_MAIL \ || itemId == ITEM_HARBOR_MAIL \ || itemId == ITEM_GLITTER_MAIL \ || itemId == ITEM_MECH_MAIL \ diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 06a188b8a0..152afb59ac 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -44,7 +44,7 @@ enum { // The number of extra sparkles shown on a Pokémon's condition screen. // All Pokémon start with 1, so the max here is MAX_CONDITION_SPARKLES - 1 -#define GET_NUM_CONDITION_SPARKLES(sheen)((sheen) != MAX_SHEEN) ? (sheen) / ((u32)MAX_SHEEN / (MAX_CONDITION_SPARKLES - 1) + 1) : MAX_CONDITION_SPARKLES - 1; +#define GET_NUM_CONDITION_SPARKLES(sheen) ((sheen) != MAX_SHEEN) ? (sheen) / ((u32)MAX_SHEEN / (MAX_CONDITION_SPARKLES - 1) + 1) : MAX_CONDITION_SPARKLES - 1; #define CONDITION_GRAPH_TOP_Y 56 #define CONDITION_GRAPH_BOTTOM_Y 121 diff --git a/include/random.h b/include/random.h index 6bf61de6c6..ba7aeccc1a 100644 --- a/include/random.h +++ b/include/random.h @@ -13,8 +13,8 @@ u16 Random2(void); // The number 1103515245 comes from the example implementation of rand and srand // in the ISO C standard. -#define ISO_RANDOMIZE1(val)(1103515245 * (val) + 24691) -#define ISO_RANDOMIZE2(val)(1103515245 * (val) + 12345) +#define ISO_RANDOMIZE1(val) (1103515245 * (val) + 24691) +#define ISO_RANDOMIZE2(val) (1103515245 * (val) + 12345) //Sets the initial seed value of the pseudorandom number generator void SeedRng(u16 seed); diff --git a/src/battle_setup.c b/src/battle_setup.c index e87ce6dd27..be5b09e5e5 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -859,7 +859,7 @@ static u8 GetTrainerBattleTransition(void) return sBattleTransitionTable_Trainer[transitionType][1]; } -#define RANDOM_TRANSITION(table)(table[Random() % ARRAY_COUNT(table)]) +#define RANDOM_TRANSITION(table) (table[Random() % ARRAY_COUNT(table)]) u8 GetSpecialBattleTransition(s32 id) { u16 var; diff --git a/src/data/decoration/tilemaps.h b/src/data/decoration/tilemaps.h index eebb3acb25..d6c351ae85 100644 --- a/src/data/decoration/tilemaps.h +++ b/src/data/decoration/tilemaps.h @@ -171,7 +171,7 @@ static const u8 sDecorTilemap_3x2_X[] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -#define DECORSIZE(width, height)((width) * (height) * 4) +#define DECORSIZE(width, height) ((width) * (height) * 4) static const struct { const u8 *tiles; diff --git a/src/data/pokemon/experience_tables.h b/src/data/pokemon/experience_tables.h index 8f50e10918..848d5c5016 100644 --- a/src/data/pokemon/experience_tables.h +++ b/src/data/pokemon/experience_tables.h @@ -1,10 +1,10 @@ -#define SQUARE(n)((n) * (n)) -#define CUBE(n)((n) * (n) * (n)) +#define SQUARE(n) ((n) * (n)) +#define CUBE(n) ((n) * (n) * (n)) -#define EXP_SLOW(n)((5 * CUBE(n)) / 4) // (5 * (n)^3) / 4 -#define EXP_FAST(n)((4 * CUBE(n)) / 5) // (4 * (n)^3) / 5 -#define EXP_MEDIUM_FAST(n)(CUBE(n)) // (n)^3 -#define EXP_MEDIUM_SLOW(n)((6 * CUBE(n)) / 5 - (15 * SQUARE(n)) + (100 * n) - 140) // (6 * (n)^3) / 5 - (15 * (n)^2) + (100 * n) - 140 +#define EXP_SLOW(n) ((5 * CUBE(n)) / 4) // (5 * (n)^3) / 4 +#define EXP_FAST(n) ((4 * CUBE(n)) / 5) // (4 * (n)^3) / 5 +#define EXP_MEDIUM_FAST(n) (CUBE(n)) // (n)^3 +#define EXP_MEDIUM_SLOW(n) ((6 * CUBE(n)) / 5 - (15 * SQUARE(n)) + (100 * n) - 140) // (6 * (n)^3) / 5 - (15 * (n)^2) + (100 * n) - 140 #define EXP_ERRATIC(n) \ (n <= 50) ? ((100 - n) * CUBE(n) / 50) \ :(n <= 68) ? ((150 - n) * CUBE(n) / 100) \ diff --git a/src/data/union_room.h b/src/data/union_room.h index 129c629941..c4bd984736 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -633,10 +633,10 @@ static const struct WindowTemplate sWindowTemplate_BButtonCancel = { // Minimum and maximum number of players for a link group // A minimum of 0 means the min and max are equal -#define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8)) -#define GROUP_MAX(capacity)(capacity & 0x0F) -#define GROUP_MIN(capacity)(capacity >> 4) -#define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match +#define LINK_GROUP_CAPACITY(min, max) (((min) << 12) | ((max) << 8)) +#define GROUP_MAX(capacity) (capacity & 0x0F) +#define GROUP_MIN(capacity) (capacity >> 4) +#define GROUP_MIN2(capacity) (capacity & 0xF0) // Unnecessary to have both, but needed to match static const u32 sLinkGroupToActivityAndCapacity[NUM_LINK_GROUP_TYPES] = { [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2), diff --git a/src/field_specials.c b/src/field_specials.c index 7d20d3571d..d8fc96c49d 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -3957,14 +3957,14 @@ bool8 InPokemonCenter(void) #define FANCLUB_BITFIELD (gSaveBlock1Ptr->vars[VAR_FANCLUB_FAN_COUNTER - VARS_START]) #define FANCLUB_COUNTER 0x007F -#define GET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD >> (flag) & 1) -#define SET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD |= 1 << (flag)) -#define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(FANCLUB_BITFIELD ^= 1 << (flag)) +#define GET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD >> (flag) & 1) +#define SET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD |= 1 << (flag)) +#define FLIP_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD ^= 1 << (flag)) -#define GET_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD & FANCLUB_COUNTER) -#define SET_TRAINER_FAN_CLUB_COUNTER(count) (FANCLUB_BITFIELD = (FANCLUB_BITFIELD & ~FANCLUB_COUNTER) | (count)) -#define INCR_TRAINER_FAN_CLUB_COUNTER(count)(FANCLUB_BITFIELD += (count)) -#define CLEAR_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD &= ~FANCLUB_COUNTER) +#define GET_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD & FANCLUB_COUNTER) +#define SET_TRAINER_FAN_CLUB_COUNTER(count) (FANCLUB_BITFIELD = (FANCLUB_BITFIELD & ~FANCLUB_COUNTER) | (count)) +#define INCR_TRAINER_FAN_CLUB_COUNTER(count) (FANCLUB_BITFIELD += (count)) +#define CLEAR_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD &= ~FANCLUB_COUNTER) void ResetFanClub(void) { diff --git a/src/fieldmap.c b/src/fieldmap.c index 5fdc4cbfb7..e4dc0026a3 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -48,7 +48,7 @@ static const struct MapConnection *GetIncomingConnection(u8 direction, int x, in 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)({ \ +#define GetBorderBlockAt(x, y) ({ \ u16 block; \ int i; \ const u16 *border = gMapHeader.mapLayout->border; /* Unused, they read it again below */ \ diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 07e06ad3b9..a351d81ce9 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -1241,7 +1241,7 @@ static void ShowHideZoomingArea(bool8 show, bool8 zoomedIn) static void UpdateAreaHighlight(u8 cursorArea, u8 previousCursorArea) { - #define NON_HIGHLIGHT_AREA(area)((area) == CURSOR_AREA_NOTHING || (area) > CURSOR_AREA_CANCEL) + #define NON_HIGHLIGHT_AREA(area) ((area) == CURSOR_AREA_NOTHING || (area) > CURSOR_AREA_CANCEL) // If moving off highlightable area, unhighlight it switch (previousCursorArea) diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 9979097a49..b34c7184cf 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -138,7 +138,7 @@ static const u8 sAvailSlots[] = { [4] = AVAIL_SLOT4 }; -#define BLOCK_MASK(bitNum)((1 << (bitNum)) - 1) +#define BLOCK_MASK(bitNum) ((1 << (bitNum)) - 1) static const u32 sAllBlocksReceived[] = { BLOCK_MASK(0), BLOCK_MASK(1), diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 20ddce1f44..1272277aa5 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -317,7 +317,7 @@ void MailboxMenu_Free(void) // filled with the graph color. //--------------------------------------- -#define SHIFT_RIGHT_ADJUSTED(n, s)(((n) >> (s)) + (((n) >> ((s) - 1)) & 1)) +#define SHIFT_RIGHT_ADJUSTED(n, s) (((n) >> (s)) + (((n) >> ((s) - 1)) & 1)) void ConditionGraph_Init(struct ConditionGraph *graph) { diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index d744ff6650..a1c401c6df 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -108,7 +108,7 @@ enum { // the lower 8 bits are a timer to the next state. // When the timer is incremented above 255, it increments // the vine state and the timer is reset. -#define VINE_STATE_TIMER(vineState)(((vineState) << 8) | 0xFF) +#define VINE_STATE_TIMER(vineState) (((vineState) << 8) | 0xFF) enum { MONSTATE_NORMAL, // Pokémon is either on the ground or in the middle of a jump diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c index e77f839a80..c799daf57b 100644 --- a/src/pokenav_ribbons_summary.c +++ b/src/pokenav_ribbons_summary.c @@ -1080,7 +1080,7 @@ enum { RIBBONGFX_GIFT_3, }; -#define TO_PAL_OFFSET(palNum)((palNum) - PALTAG_RIBBON_ICONS_1) +#define TO_PAL_OFFSET(palNum) ((palNum) - PALTAG_RIBBON_ICONS_1) struct { diff --git a/src/region_map.c b/src/region_map.c index 21c6314d30..8fa53a0e7b 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -189,7 +189,7 @@ static const u16 sTerraOrMarineCaveMapSecIds[ABNORMAL_WEATHER_LOCATIONS] = [ABNORMAL_WEATHER_ROUTE_129_EAST - 1] = MAPSEC_ROUTE_129 }; -#define MARINE_CAVE_COORD(location)(ABNORMAL_WEATHER_##location - MARINE_CAVE_LOCATIONS_START) +#define MARINE_CAVE_COORD(location) (ABNORMAL_WEATHER_##location - MARINE_CAVE_LOCATIONS_START) static const struct UCoords16 sMarineCaveLocationCoords[MARINE_CAVE_LOCATIONS] = { diff --git a/src/roulette.c b/src/roulette.c index ec4c8cfcfe..f4e6012a8d 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -70,13 +70,13 @@ // Get the id of the col/row from the selection ID // e.g. GET_ROW(SQU_PURPLE_SKITTY) is ROW_PURPLE -#define GET_COL(selectionId)((selectionId) % (NUM_BOARD_POKES + 1)) -#define GET_ROW(selectionId)((selectionId) / (NUM_BOARD_POKES + 1) * (NUM_BOARD_POKES + 1)) +#define GET_COL(selectionId) ((selectionId) % (NUM_BOARD_POKES + 1)) +#define GET_ROW(selectionId) ((selectionId) / (NUM_BOARD_POKES + 1) * (NUM_BOARD_POKES + 1)) // Get the col/row index from the selection ID // e.g. GET_ROW_IDX(SQU_PURPLE_SKITTY) is 2 (purple being the 3rd row) -#define GET_COL_IDX(selectionId)(selectionId - 1) -#define GET_ROW_IDX(selectionId)(selectionId / 5 - 1) +#define GET_COL_IDX(selectionId) (selectionId - 1) +#define GET_ROW_IDX(selectionId) (selectionId / 5 - 1) // Flags for the above selections, used to set which spaces have been hit or bet on #define F_WYNAUT_COL (1 << COL_WYNAUT) @@ -149,7 +149,7 @@ // 2 different Roulette tables with 2 different rates (normal vs service day special) // & 1 gets which table, >> 7 gets if ROULETTE_SPECIAL_RATE is set -#define GET_MIN_BET_ID(var)(((var) & 1) + (((var) >> 7) * 2)) +#define GET_MIN_BET_ID(var) (((var) & 1) + (((var) >> 7) * 2)) // Having Shroomish or Taillow in the party can make rolls more consistent in length // It also increases the likelihood that, if they appear to unstick a ball, they'll move it to a slot the player bet on diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c index a7d5045b38..1bb7968359 100644 --- a/src/union_room_player_avatar.c +++ b/src/union_room_player_avatar.c @@ -14,7 +14,7 @@ // Each parent player can lead a group of up to MAX_RFU_PLAYERS (including themselves). // Multiply the leader's id by MAX_RFU_PLAYERS and add the member's id (0 if the leader) to // get the sprite index of that player. -#define UR_PLAYER_SPRITE_ID(leaderId, memberId)(MAX_RFU_PLAYERS * leaderId + memberId) +#define UR_PLAYER_SPRITE_ID(leaderId, memberId) (MAX_RFU_PLAYERS * leaderId + memberId) static EWRAM_DATA struct UnionRoomObject * sUnionObjWork = NULL; static EWRAM_DATA u32 sUnionObjRefreshTimer = 0; From 3f49c5cbaf5bd8bdb02cb54d0a44e61faba114f4 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 7 Aug 2024 16:24:30 -0400 Subject: [PATCH 119/544] Fix trainer match call flags --- include/constants/flags.h | 164 +++++++++++++++++----------------- include/constants/rematches.h | 89 ++++++++++++++++++ include/gym_leader_rematch.h | 85 +----------------- map_data_rules.mk | 4 +- src/battle_setup.c | 4 +- src/field_specials.c | 2 +- src/match_call.c | 11 +-- src/pokenav_match_call_data.c | 16 ++-- src/pokenav_match_call_list.c | 2 +- 9 files changed, 194 insertions(+), 183 deletions(-) create mode 100644 include/constants/rematches.h diff --git a/include/constants/flags.h b/include/constants/flags.h index 8d98e3aa04..5b1b5efd19 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -2,6 +2,7 @@ #define GUARD_CONSTANTS_FLAGS_H #include "constants/opponents.h" +#include "constants/rematches.h" // Temporary Flags // These temporary flags are are cleared every time a map is loaded. They are used @@ -375,86 +376,89 @@ #define FLAG_MET_FRONTIER_BEAUTY_MOVE_TUTOR 0x15A #define FLAG_MET_FRONTIER_SWIMMER_MOVE_TUTOR 0x15B -// Trainer Rematch Flags -#define FLAG_MATCH_CALL_REGISTERED 0x15C -#define FLAG_REMATCH_ROSE 0x15D -#define FLAG_REMATCH_ANDRES 0x15E -#define FLAG_REMATCH_DUSTY 0x15F -#define FLAG_REMATCH_LOLA 0x160 -#define FLAG_REMATCH_RICKY 0x161 -#define FLAG_REMATCH_LILA_AND_ROY 0x162 -#define FLAG_REMATCH_CRISTIN 0x163 -#define FLAG_REMATCH_BROOKE 0x164 -#define FLAG_REMATCH_WILTON 0x165 -#define FLAG_REMATCH_VALERIE 0x166 -#define FLAG_REMATCH_CINDY 0x167 -#define FLAG_REMATCH_THALIA 0x168 -#define FLAG_REMATCH_JESSICA 0x169 -#define FLAG_REMATCH_WINSTON 0x16A -#define FLAG_REMATCH_STEVE 0x16B -#define FLAG_REMATCH_TONY 0x16C -#define FLAG_REMATCH_NOB 0x16D -#define FLAG_REMATCH_KOJI 0x16E -#define FLAG_REMATCH_FERNANDO 0x16F -#define FLAG_REMATCH_DALTON 0x170 -#define FLAG_REMATCH_BERNIE 0x171 -#define FLAG_REMATCH_ETHAN 0x172 -#define FLAG_REMATCH_JOHN_AND_JAY 0x173 -#define FLAG_REMATCH_JEFFREY 0x174 -#define FLAG_REMATCH_CAMERON 0x175 -#define FLAG_REMATCH_JACKI 0x176 -#define FLAG_REMATCH_WALTER 0x177 -#define FLAG_REMATCH_KAREN 0x178 -#define FLAG_REMATCH_JERRY 0x179 -#define FLAG_REMATCH_ANNA_AND_MEG 0x17A -#define FLAG_REMATCH_ISABEL 0x17B -#define FLAG_REMATCH_MIGUEL 0x17C -#define FLAG_REMATCH_TIMOTHY 0x17D -#define FLAG_REMATCH_SHELBY 0x17E -#define FLAG_REMATCH_CALVIN 0x17F -#define FLAG_REMATCH_ELLIOT 0x180 -#define FLAG_REMATCH_ISAIAH 0x181 -#define FLAG_REMATCH_MARIA 0x182 -#define FLAG_REMATCH_ABIGAIL 0x183 -#define FLAG_REMATCH_DYLAN 0x184 -#define FLAG_REMATCH_KATELYN 0x185 -#define FLAG_REMATCH_BENJAMIN 0x186 -#define FLAG_REMATCH_PABLO 0x187 -#define FLAG_REMATCH_NICOLAS 0x188 -#define FLAG_REMATCH_ROBERT 0x189 -#define FLAG_REMATCH_LAO 0x18A -#define FLAG_REMATCH_CYNDY 0x18B -#define FLAG_REMATCH_MADELINE 0x18C -#define FLAG_REMATCH_JENNY 0x18D -#define FLAG_REMATCH_DIANA 0x18E -#define FLAG_REMATCH_AMY_AND_LIV 0x18F -#define FLAG_REMATCH_ERNEST 0x190 -#define FLAG_REMATCH_CORY 0x191 -#define FLAG_REMATCH_EDWIN 0x192 -#define FLAG_REMATCH_LYDIA 0x193 -#define FLAG_REMATCH_ISAAC 0x194 -#define FLAG_REMATCH_GABRIELLE 0x195 -#define FLAG_REMATCH_CATHERINE 0x196 -#define FLAG_REMATCH_JACKSON 0x197 -#define FLAG_REMATCH_HALEY 0x198 -#define FLAG_REMATCH_JAMES 0x199 -#define FLAG_REMATCH_TRENT 0x19A -#define FLAG_REMATCH_SAWYER 0x19B -#define FLAG_REMATCH_KIRA_AND_DAN 0x19C -#define FLAG_REMATCH_WALLY 0x19D -#define FLAG_REMATCH_ROXANNE 0x19E -#define FLAG_REMATCH_BRAWLY 0x19F -#define FLAG_REMATCH_WATTSON 0x1A0 -#define FLAG_REMATCH_FLANNERY 0x1A1 -#define FLAG_REMATCH_NORMAN 0x1A2 -#define FLAG_REMATCH_WINONA 0x1A3 -#define FLAG_REMATCH_TATE_AND_LIZA 0x1A4 -// Note: FLAG_REMATCH_JUAN is handled by FLAG_ENABLE_JUAN_MATCH_CALL instead. -#define FLAG_REMATCH_SIDNEY 0x1A5 -#define FLAG_REMATCH_PHOEBE 0x1A6 -#define FLAG_REMATCH_GLACIA 0x1A7 -#define FLAG_REMATCH_DRAKE 0x1A8 -#define FLAG_REMATCH_WALLACE 0x1A9 +// Flags for whether a rematchable trainer has been registered in the player's Match Call. +// Most are used implicitly by adding their REMATCH_* id to TRAINER_REGISTERED_FLAGS_START. +// Some Match Call entries (like those for gym leaders, Wally, and all non-trainer NPCs like Prof. Birch) +// have their own separate flag that needs to be set to be enabled; see src/pokenav_match_call_data.c +#define TRAINER_REGISTERED_FLAGS_START 0x15C +#define FLAG_REGISTERED_ROSE (TRAINER_REGISTERED_FLAGS_START + REMATCH_ROSE) +#define FLAG_REGISTERED_ANDRES (TRAINER_REGISTERED_FLAGS_START + REMATCH_ANDRES) +#define FLAG_REGISTERED_DUSTY (TRAINER_REGISTERED_FLAGS_START + REMATCH_DUSTY) +#define FLAG_REGISTERED_LOLA (TRAINER_REGISTERED_FLAGS_START + REMATCH_LOLA) +#define FLAG_REGISTERED_RICKY (TRAINER_REGISTERED_FLAGS_START + REMATCH_RICKY) +#define FLAG_REGISTERED_LILA_AND_ROY (TRAINER_REGISTERED_FLAGS_START + REMATCH_LILA_AND_ROY) +#define FLAG_REGISTERED_CRISTIN (TRAINER_REGISTERED_FLAGS_START + REMATCH_CRISTIN) +#define FLAG_REGISTERED_BROOKE (TRAINER_REGISTERED_FLAGS_START + REMATCH_BROOKE) +#define FLAG_REGISTERED_WILTON (TRAINER_REGISTERED_FLAGS_START + REMATCH_WILTON) +#define FLAG_REGISTERED_VALERIE (TRAINER_REGISTERED_FLAGS_START + REMATCH_VALERIE) +#define FLAG_REGISTERED_CINDY (TRAINER_REGISTERED_FLAGS_START + REMATCH_CINDY) +#define FLAG_REGISTERED_THALIA (TRAINER_REGISTERED_FLAGS_START + REMATCH_THALIA) +#define FLAG_REGISTERED_JESSICA (TRAINER_REGISTERED_FLAGS_START + REMATCH_JESSICA) +#define FLAG_REGISTERED_WINSTON (TRAINER_REGISTERED_FLAGS_START + REMATCH_WINSTON) +#define FLAG_REGISTERED_STEVE (TRAINER_REGISTERED_FLAGS_START + REMATCH_STEVE) +#define FLAG_REGISTERED_TONY (TRAINER_REGISTERED_FLAGS_START + REMATCH_TONY) +#define FLAG_REGISTERED_NOB (TRAINER_REGISTERED_FLAGS_START + REMATCH_NOB) +#define FLAG_REGISTERED_KOJI (TRAINER_REGISTERED_FLAGS_START + REMATCH_KOJI) +#define FLAG_REGISTERED_FERNANDO (TRAINER_REGISTERED_FLAGS_START + REMATCH_FERNANDO) +#define FLAG_REGISTERED_DALTON (TRAINER_REGISTERED_FLAGS_START + REMATCH_DALTON) +#define FLAG_REGISTERED_BERNIE (TRAINER_REGISTERED_FLAGS_START + REMATCH_BERNIE) +#define FLAG_REGISTERED_ETHAN (TRAINER_REGISTERED_FLAGS_START + REMATCH_ETHAN) +#define FLAG_REGISTERED_JOHN_AND_JAY (TRAINER_REGISTERED_FLAGS_START + REMATCH_JOHN_AND_JAY) +#define FLAG_REGISTERED_JEFFREY (TRAINER_REGISTERED_FLAGS_START + REMATCH_JEFFREY) +#define FLAG_REGISTERED_CAMERON (TRAINER_REGISTERED_FLAGS_START + REMATCH_CAMERON) +#define FLAG_REGISTERED_JACKI (TRAINER_REGISTERED_FLAGS_START + REMATCH_JACKI) +#define FLAG_REGISTERED_WALTER (TRAINER_REGISTERED_FLAGS_START + REMATCH_WALTER) +#define FLAG_REGISTERED_KAREN (TRAINER_REGISTERED_FLAGS_START + REMATCH_KAREN) +#define FLAG_REGISTERED_JERRY (TRAINER_REGISTERED_FLAGS_START + REMATCH_JERRY) +#define FLAG_REGISTERED_ANNA_AND_MEG (TRAINER_REGISTERED_FLAGS_START + REMATCH_ANNA_AND_MEG) +#define FLAG_REGISTERED_ISABEL (TRAINER_REGISTERED_FLAGS_START + REMATCH_ISABEL) +#define FLAG_REGISTERED_MIGUEL (TRAINER_REGISTERED_FLAGS_START + REMATCH_MIGUEL) +#define FLAG_REGISTERED_TIMOTHY (TRAINER_REGISTERED_FLAGS_START + REMATCH_TIMOTHY) +#define FLAG_REGISTERED_SHELBY (TRAINER_REGISTERED_FLAGS_START + REMATCH_SHELBY) +#define FLAG_REGISTERED_CALVIN (TRAINER_REGISTERED_FLAGS_START + REMATCH_CALVIN) +#define FLAG_REGISTERED_ELLIOT (TRAINER_REGISTERED_FLAGS_START + REMATCH_ELLIOT) +#define FLAG_REGISTERED_ISAIAH (TRAINER_REGISTERED_FLAGS_START + REMATCH_ISAIAH) +#define FLAG_REGISTERED_MARIA (TRAINER_REGISTERED_FLAGS_START + REMATCH_MARIA) +#define FLAG_REGISTERED_ABIGAIL (TRAINER_REGISTERED_FLAGS_START + REMATCH_ABIGAIL) +#define FLAG_REGISTERED_DYLAN (TRAINER_REGISTERED_FLAGS_START + REMATCH_DYLAN) +#define FLAG_REGISTERED_KATELYN (TRAINER_REGISTERED_FLAGS_START + REMATCH_KATELYN) +#define FLAG_REGISTERED_BENJAMIN (TRAINER_REGISTERED_FLAGS_START + REMATCH_BENJAMIN) +#define FLAG_REGISTERED_PABLO (TRAINER_REGISTERED_FLAGS_START + REMATCH_PABLO) +#define FLAG_REGISTERED_NICOLAS (TRAINER_REGISTERED_FLAGS_START + REMATCH_NICOLAS) +#define FLAG_REGISTERED_ROBERT (TRAINER_REGISTERED_FLAGS_START + REMATCH_ROBERT) +#define FLAG_REGISTERED_LAO (TRAINER_REGISTERED_FLAGS_START + REMATCH_LAO) +#define FLAG_REGISTERED_CYNDY (TRAINER_REGISTERED_FLAGS_START + REMATCH_CYNDY) +#define FLAG_REGISTERED_MADELINE (TRAINER_REGISTERED_FLAGS_START + REMATCH_MADELINE) +#define FLAG_REGISTERED_JENNY (TRAINER_REGISTERED_FLAGS_START + REMATCH_JENNY) +#define FLAG_REGISTERED_DIANA (TRAINER_REGISTERED_FLAGS_START + REMATCH_DIANA) +#define FLAG_REGISTERED_AMY_AND_LIV (TRAINER_REGISTERED_FLAGS_START + REMATCH_AMY_AND_LIV) +#define FLAG_REGISTERED_ERNEST (TRAINER_REGISTERED_FLAGS_START + REMATCH_ERNEST) +#define FLAG_REGISTERED_CORY (TRAINER_REGISTERED_FLAGS_START + REMATCH_CORY) +#define FLAG_REGISTERED_EDWIN (TRAINER_REGISTERED_FLAGS_START + REMATCH_EDWIN) +#define FLAG_REGISTERED_LYDIA (TRAINER_REGISTERED_FLAGS_START + REMATCH_LYDIA) +#define FLAG_REGISTERED_ISAAC (TRAINER_REGISTERED_FLAGS_START + REMATCH_ISAAC) +#define FLAG_REGISTERED_GABRIELLE (TRAINER_REGISTERED_FLAGS_START + REMATCH_GABRIELLE) +#define FLAG_REGISTERED_CATHERINE (TRAINER_REGISTERED_FLAGS_START + REMATCH_CATHERINE) +#define FLAG_REGISTERED_JACKSON (TRAINER_REGISTERED_FLAGS_START + REMATCH_JACKSON) +#define FLAG_REGISTERED_HALEY (TRAINER_REGISTERED_FLAGS_START + REMATCH_HALEY) +#define FLAG_REGISTERED_JAMES (TRAINER_REGISTERED_FLAGS_START + REMATCH_JAMES) +#define FLAG_REGISTERED_TRENT (TRAINER_REGISTERED_FLAGS_START + REMATCH_TRENT) +#define FLAG_REGISTERED_SAWYER (TRAINER_REGISTERED_FLAGS_START + REMATCH_SAWYER) +#define FLAG_REGISTERED_KIRA_AND_DAN (TRAINER_REGISTERED_FLAGS_START + REMATCH_KIRA_AND_DAN) +#define FLAG_REGISTERED_WALLY (TRAINER_REGISTERED_FLAGS_START + REMATCH_WALLY) +#define FLAG_REGISTERED_ROXANNE (TRAINER_REGISTERED_FLAGS_START + REMATCH_ROXANNE) +#define FLAG_REGISTERED_BRAWLY (TRAINER_REGISTERED_FLAGS_START + REMATCH_BRAWLY) +#define FLAG_REGISTERED_WATTSON (TRAINER_REGISTERED_FLAGS_START + REMATCH_WATTSON) +#define FLAG_REGISTERED_FLANNERY (TRAINER_REGISTERED_FLAGS_START + REMATCH_FLANNERY) +#define FLAG_REGISTERED_NORMAN (TRAINER_REGISTERED_FLAGS_START + REMATCH_NORMAN) +#define FLAG_REGISTERED_WINONA (TRAINER_REGISTERED_FLAGS_START + REMATCH_WINONA) +#define FLAG_REGISTERED_TATE_AND_LIZA (TRAINER_REGISTERED_FLAGS_START + REMATCH_TATE_AND_LIZA) +#define FLAG_REGISTERED_JUAN (TRAINER_REGISTERED_FLAGS_START + REMATCH_JUAN) +#define FLAG_REGISTERED_SIDNEY (TRAINER_REGISTERED_FLAGS_START + REMATCH_SIDNEY) +#define FLAG_REGISTERED_PHOEBE (TRAINER_REGISTERED_FLAGS_START + REMATCH_PHOEBE) +#define FLAG_REGISTERED_GLACIA (TRAINER_REGISTERED_FLAGS_START + REMATCH_GLACIA) +#define FLAG_REGISTERED_DRAKE (TRAINER_REGISTERED_FLAGS_START + REMATCH_DRAKE) +#define FLAG_REGISTERED_WALLACE (TRAINER_REGISTERED_FLAGS_START + REMATCH_WALLACE) #define FLAG_UNUSED_0x1AA 0x1AA // Unused Flag #define FLAG_UNUSED_0x1AB 0x1AB // Unused Flag diff --git a/include/constants/rematches.h b/include/constants/rematches.h new file mode 100644 index 0000000000..2ddefcc578 --- /dev/null +++ b/include/constants/rematches.h @@ -0,0 +1,89 @@ +#ifndef GUARD_REMATCHES_H +#define GUARD_REMATCHES_H + +enum { + REMATCH_ROSE, + REMATCH_ANDRES, + REMATCH_DUSTY, + REMATCH_LOLA, + REMATCH_RICKY, + REMATCH_LILA_AND_ROY, + REMATCH_CRISTIN, + REMATCH_BROOKE, + REMATCH_WILTON, + REMATCH_VALERIE, + REMATCH_CINDY, + REMATCH_THALIA, + REMATCH_JESSICA, + REMATCH_WINSTON, + REMATCH_STEVE, + REMATCH_TONY, + REMATCH_NOB, + REMATCH_KOJI, + REMATCH_FERNANDO, + REMATCH_DALTON, + REMATCH_BERNIE, + REMATCH_ETHAN, + REMATCH_JOHN_AND_JAY, + REMATCH_JEFFREY, + REMATCH_CAMERON, + REMATCH_JACKI, + REMATCH_WALTER, + REMATCH_KAREN, + REMATCH_JERRY, + REMATCH_ANNA_AND_MEG, + REMATCH_ISABEL, + REMATCH_MIGUEL, + REMATCH_TIMOTHY, + REMATCH_SHELBY, + REMATCH_CALVIN, + REMATCH_ELLIOT, + REMATCH_ISAIAH, + REMATCH_MARIA, + REMATCH_ABIGAIL, + REMATCH_DYLAN, + REMATCH_KATELYN, + REMATCH_BENJAMIN, + REMATCH_PABLO, + REMATCH_NICOLAS, + REMATCH_ROBERT, + REMATCH_LAO, + REMATCH_CYNDY, + REMATCH_MADELINE, + REMATCH_JENNY, + REMATCH_DIANA, + REMATCH_AMY_AND_LIV, + REMATCH_ERNEST, + REMATCH_CORY, + REMATCH_EDWIN, + REMATCH_LYDIA, + REMATCH_ISAAC, + REMATCH_GABRIELLE, + REMATCH_CATHERINE, + REMATCH_JACKSON, + REMATCH_HALEY, + REMATCH_JAMES, + REMATCH_TRENT, + REMATCH_SAWYER, + REMATCH_KIRA_AND_DAN, + REMATCH_WALLY_VR, // Entries above WALLY are considered normal trainers, from Wally below are special trainers + REMATCH_ROXANNE, + REMATCH_BRAWLY, + REMATCH_WATTSON, + REMATCH_FLANNERY, + REMATCH_NORMAN, + REMATCH_WINONA, + REMATCH_TATE_AND_LIZA, + REMATCH_JUAN, + REMATCH_SIDNEY, // Entries from SIDNEY below are considered part of REMATCH_ELITE_FOUR_ENTRIES. + REMATCH_PHOEBE, + REMATCH_GLACIA, + REMATCH_DRAKE, + REMATCH_WALLACE, + REMATCH_TABLE_ENTRIES // The total number of rematch entries. Must be last in enum +}; + +#define REMATCH_SPECIAL_TRAINER_START REMATCH_WALLY_VR +#define REMATCH_ELITE_FOUR_ENTRIES REMATCH_SIDNEY + +#endif // GUARD_REMATCHES_H diff --git a/include/gym_leader_rematch.h b/include/gym_leader_rematch.h index b31fb5e228..622d2db1bc 100644 --- a/include/gym_leader_rematch.h +++ b/include/gym_leader_rematch.h @@ -1,90 +1,7 @@ #ifndef GUARD_TRAINER_REMATCH_H #define GUARD_TRAINER_REMATCH_H -enum { - REMATCH_ROSE, - REMATCH_ANDRES, - REMATCH_DUSTY, - REMATCH_LOLA, - REMATCH_RICKY, - REMATCH_LILA_AND_ROY, - REMATCH_CRISTIN, - REMATCH_BROOKE, - REMATCH_WILTON, - REMATCH_VALERIE, - REMATCH_CINDY, - REMATCH_THALIA, - REMATCH_JESSICA, - REMATCH_WINSTON, - REMATCH_STEVE, - REMATCH_TONY, - REMATCH_NOB, - REMATCH_KOJI, - REMATCH_FERNANDO, - REMATCH_DALTON, - REMATCH_BERNIE, - REMATCH_ETHAN, - REMATCH_JOHN_AND_JAY, - REMATCH_JEFFREY, - REMATCH_CAMERON, - REMATCH_JACKI, - REMATCH_WALTER, - REMATCH_KAREN, - REMATCH_JERRY, - REMATCH_ANNA_AND_MEG, - REMATCH_ISABEL, - REMATCH_MIGUEL, - REMATCH_TIMOTHY, - REMATCH_SHELBY, - REMATCH_CALVIN, - REMATCH_ELLIOT, - REMATCH_ISAIAH, - REMATCH_MARIA, - REMATCH_ABIGAIL, - REMATCH_DYLAN, - REMATCH_KATELYN, - REMATCH_BENJAMIN, - REMATCH_PABLO, - REMATCH_NICOLAS, - REMATCH_ROBERT, - REMATCH_LAO, - REMATCH_CYNDY, - REMATCH_MADELINE, - REMATCH_JENNY, - REMATCH_DIANA, - REMATCH_AMY_AND_LIV, - REMATCH_ERNEST, - REMATCH_CORY, - REMATCH_EDWIN, - REMATCH_LYDIA, - REMATCH_ISAAC, - REMATCH_GABRIELLE, - REMATCH_CATHERINE, - REMATCH_JACKSON, - REMATCH_HALEY, - REMATCH_JAMES, - REMATCH_TRENT, - REMATCH_SAWYER, - REMATCH_KIRA_AND_DAN, - REMATCH_WALLY_VR, // Entries above WALLY are considered normal trainers, from Wally below are special trainers - REMATCH_ROXANNE, - REMATCH_BRAWLY, - REMATCH_WATTSON, - REMATCH_FLANNERY, - REMATCH_NORMAN, - REMATCH_WINONA, - REMATCH_TATE_AND_LIZA, - REMATCH_JUAN, - REMATCH_SIDNEY, // Entries from SIDNEY below are considered part of REMATCH_ELITE_FOUR_ENTRIES. - REMATCH_PHOEBE, - REMATCH_GLACIA, - REMATCH_DRAKE, - REMATCH_WALLACE, - REMATCH_TABLE_ENTRIES // The total number of rematch entries. Must be last in enum -}; - -#define REMATCH_SPECIAL_TRAINER_START REMATCH_WALLY_VR -#define REMATCH_ELITE_FOUR_ENTRIES REMATCH_SIDNEY +#include "constants/rematches.h" void UpdateGymLeaderRematch(void); diff --git a/map_data_rules.mk b/map_data_rules.mk index 626cd47240..d3f47a352e 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -9,9 +9,9 @@ MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) MAP_HEADERS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/header.inc,$(MAP_DIRS)) $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.inc $(LAYOUTS_DIR)/layouts_table.inc $(MAPS_DIR)/headers.inc $(MAPS_DIR)/groups.inc $(MAPS_DIR)/connections.inc $(MAP_CONNECTIONS) $(MAP_HEADERS) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) - $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@ + $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ $(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json diff --git a/src/battle_setup.c b/src/battle_setup.c index e87ce6dd27..435ba4b8a3 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1615,7 +1615,7 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u // Trainer already wants a rematch. Don't bother updating it. ret = TRUE; } - else if (FlagGet(FLAG_MATCH_CALL_REGISTERED + i) + else if (FlagGet(TRAINER_REGISTERED_FLAGS_START + i) && (Random() % 100) <= 30) // 31% chance of getting a rematch. { SetRematchIdForTrainer(table, i); @@ -1744,7 +1744,7 @@ static u32 GetTrainerMatchCallFlag(u32 trainerId) for (i = 0; i < REMATCH_TABLE_ENTRIES; i++) { if (gRematchTable[i].trainerIds[0] == trainerId) - return FLAG_MATCH_CALL_REGISTERED + i; + return TRAINER_REGISTERED_FLAGS_START + i; } return 0xFFFF; diff --git a/src/field_specials.c b/src/field_specials.c index 7d20d3571d..1bbbbf4e17 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -3620,7 +3620,7 @@ bool32 IsTrainerRegistered(void) int index = GetRematchIdxByTrainerIdx(gSpecialVar_0x8004); if (index >= 0) { - if (FlagGet(FLAG_MATCH_CALL_REGISTERED + index) == TRUE) + if (FlagGet(TRAINER_REGISTERED_FLAGS_START + index) == TRUE) return TRUE; } return FALSE; diff --git a/src/match_call.c b/src/match_call.c index a9d18b3477..2c1ad924a5 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -131,7 +131,7 @@ static EWRAM_DATA struct MatchCallState sMatchCallState = {0}; static EWRAM_DATA struct BattleFrontierStreakInfo sBattleFrontierStreakInfo = {0}; static u32 GetCurrentTotalMinutes(struct Time *); -static u32 GetNumRegisteredNPCs(void); +static u32 GetNumRegisteredTrainers(void); static u32 GetActiveMatchCallTrainerId(u32); static int GetTrainerMatchCallId(int); static u16 GetRematchTrainerLocation(int); @@ -1098,7 +1098,7 @@ static bool32 UpdateMatchCallStepCounter(void) static bool32 SelectMatchCallTrainer(void) { u32 matchCallId; - u32 numRegistered = GetNumRegisteredNPCs(); + u32 numRegistered = GetNumRegisteredTrainers(); if (numRegistered == 0) return FALSE; @@ -1114,12 +1114,13 @@ static bool32 SelectMatchCallTrainer(void) return TRUE; } -static u32 GetNumRegisteredNPCs(void) +// Ignores registrable non-trainer NPCs, and special trainers like Wally and the gym leaders. +static u32 GetNumRegisteredTrainers(void) { u32 i, count; for (i = 0, count = 0; i < REMATCH_SPECIAL_TRAINER_START; i++) { - if (FlagGet(FLAG_MATCH_CALL_REGISTERED + i)) + if (FlagGet(TRAINER_REGISTERED_FLAGS_START + i)) count++; } @@ -1131,7 +1132,7 @@ static u32 GetActiveMatchCallTrainerId(u32 activeMatchCallId) u32 i; for (i = 0; i < REMATCH_SPECIAL_TRAINER_START; i++) { - if (FlagGet(FLAG_MATCH_CALL_REGISTERED + i)) + if (FlagGet(TRAINER_REGISTERED_FLAGS_START + i)) { if (!activeMatchCallId) return gRematchTable[i].trainerIds[0]; diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index f6d71009bb..1c3cf9aeeb 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -506,7 +506,7 @@ static const struct MatchCallStructTrainer sSidneyMatchCallHeader = { .type = MC_TYPE_LEADER, .mapSec = MAPSEC_EVER_GRANDE_CITY, - .flag = FLAG_REMATCH_SIDNEY, + .flag = FLAG_REGISTERED_SIDNEY, .rematchTableIdx = REMATCH_SIDNEY, .desc = gText_EliteFourMatchCallDesc, .name = NULL, @@ -522,7 +522,7 @@ static const struct MatchCallStructTrainer sPhoebeMatchCallHeader = { .type = MC_TYPE_LEADER, .mapSec = MAPSEC_EVER_GRANDE_CITY, - .flag = FLAG_REMATCH_PHOEBE, + .flag = FLAG_REGISTERED_PHOEBE, .rematchTableIdx = REMATCH_PHOEBE, .desc = gText_EliteFourMatchCallDesc, .name = NULL, @@ -538,7 +538,7 @@ static const struct MatchCallStructTrainer sGlaciaMatchCallHeader = { .type = MC_TYPE_LEADER, .mapSec = MAPSEC_EVER_GRANDE_CITY, - .flag = FLAG_REMATCH_GLACIA, + .flag = FLAG_REGISTERED_GLACIA, .rematchTableIdx = REMATCH_GLACIA, .desc = gText_EliteFourMatchCallDesc, .name = NULL, @@ -554,7 +554,7 @@ static const struct MatchCallStructTrainer sDrakeMatchCallHeader = { .type = MC_TYPE_LEADER, .mapSec = MAPSEC_EVER_GRANDE_CITY, - .flag = FLAG_REMATCH_DRAKE, + .flag = FLAG_REGISTERED_DRAKE, .rematchTableIdx = REMATCH_DRAKE, .desc = gText_EliteFourMatchCallDesc, .name = NULL, @@ -570,7 +570,7 @@ static const struct MatchCallStructTrainer sWallaceMatchCallHeader = { .type = MC_TYPE_LEADER, .mapSec = MAPSEC_EVER_GRANDE_CITY, - .flag = FLAG_REMATCH_WALLACE, + .flag = FLAG_REGISTERED_WALLACE, .rematchTableIdx = REMATCH_WALLACE, .desc = gText_ChampionMatchCallDesc, .name = NULL, @@ -1136,7 +1136,7 @@ bool32 MatchCall_HasRematchId(u32 idx) void SetMatchCallRegisteredFlag(void) { - int r0 = GetRematchIdxByTrainerIdx(gSpecialVar_0x8004); - if (r0 >= 0) - FlagSet(FLAG_MATCH_CALL_REGISTERED + r0); + int index = GetRematchIdxByTrainerIdx(gSpecialVar_0x8004); + if (index >= 0) + FlagSet(TRAINER_REGISTERED_FLAGS_START + index); } diff --git a/src/pokenav_match_call_list.c b/src/pokenav_match_call_list.c index 8d1a73f557..fb89e33e0b 100755 --- a/src/pokenav_match_call_list.c +++ b/src/pokenav_match_call_list.c @@ -261,7 +261,7 @@ static u32 LoopedTask_BuildMatchCallList(s32 taskState) bool32 IsRematchEntryRegistered(int rematchIndex) { if (rematchIndex < REMATCH_TABLE_ENTRIES) - return FlagGet(FLAG_MATCH_CALL_REGISTERED + rematchIndex); + return FlagGet(TRAINER_REGISTERED_FLAGS_START + rematchIndex); return FALSE; } From bced2c97a1d3a9823c5aaf8a0c3729e0f7385601 Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Fri, 16 Aug 2024 16:41:26 -0400 Subject: [PATCH 120/544] Created PokeNav COMPOUND_STRINGS (#4983) * Converted Match Call names and descriptions to COMPOUND_STRINGs * Moved May/Brendan and Elite Four descriptions into pokenav_match_call_data.c * Moved Steven, Brendan, and May's Match Call text to pokenav_match_call_data.c * Cleaned up Steven's Match Call text * Added PokeNav option text to match_call_gfx * Moved PokeNav page descriptions to menu_handler_gfx * Moved help bar texts to pokenav_main_menu.c * Moved various PokeNav strings out of strings.c and into their relevant files * Removed unused PokeNav strings --- include/strings.h | 85 ------------------------- src/pokenav_conditions_gfx.c | 2 + src/pokenav_conditions_search_results.c | 2 + src/pokenav_list.c | 4 ++ src/pokenav_main_menu.c | 24 +++---- src/pokenav_match_call_data.c | 67 +++++++++++-------- src/pokenav_match_call_gfx.c | 11 +++- src/pokenav_match_call_list.c | 2 + src/pokenav_menu_handler_gfx.c | 30 +++++---- src/pokenav_ribbons_summary.c | 2 + src/strings.c | 84 ------------------------ 11 files changed, 90 insertions(+), 223 deletions(-) diff --git a/include/strings.h b/include/strings.h index 7ad99aad56..80df986993 100644 --- a/include/strings.h +++ b/include/strings.h @@ -986,23 +986,6 @@ extern const u8 gText_SomeonesPC[]; extern const u8 gText_PlayersPC[]; extern const u8 gText_WhichPCShouldBeAccessed[]; -extern const u8 gText_PokenavMatchCall_Strategy[]; -extern const u8 gText_PokenavMatchCall_TrainerPokemon[]; -extern const u8 gText_PokenavMatchCall_SelfIntroduction[]; -extern const u8 gText_Pokenav_ClearButtonList[]; -extern const u8 gText_PokenavMap_ZoomedOutButtons[]; -extern const u8 gText_PokenavMap_ZoomedInButtons[]; -extern const u8 gText_PokenavCondition_MonListButtons[]; -extern const u8 gText_PokenavCondition_MonStatusButtons[]; -extern const u8 gText_PokenavCondition_MarkingButtons[]; -extern const u8 gText_PokenavMatchCall_TrainerListButtons[]; -extern const u8 gText_PokenavMatchCall_CallMenuButtons[]; -extern const u8 gText_PokenavMatchCall_CheckTrainerButtons[]; -extern const u8 gText_PokenavRibbons_MonListButtons[]; -extern const u8 gText_PokenavRibbons_RibbonListButtons[]; -extern const u8 gText_PokenavRibbons_RibbonCheckButtons[]; -extern const u8 gText_Number2[]; - extern const u8 gText_Petalburg[]; extern const u8 gText_Slateport[]; extern const u8 gText_Enter2[]; @@ -2443,43 +2426,6 @@ extern const u8 MatchCall_Text_Phoebe[]; extern const u8 MatchCall_Text_Glacia[]; extern const u8 MatchCall_Text_Drake[]; extern const u8 MatchCall_Text_Wallace[]; -extern const u8 gText_MrStoneMatchCallDesc[]; -extern const u8 gText_MrStoneMatchCallName[]; -extern const u8 gText_StevenMatchCallDesc[]; -extern const u8 gText_StevenMatchCallName[]; -extern const u8 gText_MayBrendanMatchCallDesc[]; -extern const u8 gText_WallyMatchCallDesc[]; -extern const u8 gText_NormanMatchCallDesc[]; -extern const u8 gText_NormanMatchCallName[]; -extern const u8 gText_MomMatchCallDesc[]; -extern const u8 gText_MomMatchCallName[]; -extern const u8 gText_ScottMatchCallDesc[]; -extern const u8 gText_ScottMatchCallName[]; -extern const u8 gText_RoxanneMatchCallDesc[]; -extern const u8 gText_BrawlyMatchCallDesc[]; -extern const u8 gText_WattsonMatchCallDesc[]; -extern const u8 gText_FlanneryMatchCallDesc[]; -extern const u8 gText_WinonaMatchCallDesc[]; -extern const u8 gText_TateLizaMatchCallDesc[]; -extern const u8 gText_JuanMatchCallDesc[]; -extern const u8 gText_EliteFourMatchCallDesc[]; -extern const u8 gText_ChampionMatchCallDesc[]; -extern const u8 gText_ProfBirchMatchCallDesc[]; -extern const u8 gText_ProfBirchMatchCallName[]; -extern const u8 gText_MatchCallSteven_Strategy[]; -extern const u8 gText_MatchCallSteven_Pokemon[]; -extern const u8 gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle[]; -extern const u8 gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle[]; -extern const u8 gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle[]; -extern const u8 gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle[]; -extern const u8 gText_MatchCallBrendan_Strategy[]; -extern const u8 gText_MatchCallBrendan_Pokemon[]; -extern const u8 gText_MatchCallBrendan_Intro1[]; -extern const u8 gText_MatchCallBrendan_Intro2[]; -extern const u8 gText_MatchCallMay_Strategy[]; -extern const u8 gText_MatchCallMay_Pokemon[]; -extern const u8 gText_MatchCallMay_Intro1[]; -extern const u8 gText_MatchCallMay_Intro2[]; // Contest Link extern const u8 gText_ColorDarkGray[]; @@ -2897,37 +2843,6 @@ extern const u8 gText_CutenessContest[]; extern const u8 gText_SmartnessContest[]; extern const u8 gText_ToughnessContest[]; -// PokéNav Match Call -extern const u8 gText_CallCantBeMadeHere[]; -extern const u8 gText_NumberRegistered[]; -extern const u8 gText_NumberOfBattles[]; -extern const u8 gText_Unknown[]; -extern const u8 gText_TrainerCloseBy[]; -extern const u8 gText_Call[]; -extern const u8 gText_Check[]; -extern const u8 gText_Cancel6[]; - -// PokéNav Menu Handler -extern const u8 gText_CheckMapOfHoenn[]; -extern const u8 gText_CheckPokemonInDetail[]; -extern const u8 gText_CallRegisteredTrainer[]; -extern const u8 gText_CheckObtainedRibbons[]; -extern const u8 gText_PutAwayPokenav[]; -extern const u8 gText_CheckPartyPokemonInDetail[]; -extern const u8 gText_CheckAllPokemonInDetail[]; -extern const u8 gText_ReturnToPokenavMenu[]; -extern const u8 gText_FindCoolPokemon[]; -extern const u8 gText_FindBeautifulPokemon[]; -extern const u8 gText_FindCutePokemon[]; -extern const u8 gText_FindSmartPokemon[]; -extern const u8 gText_FindToughPokemon[]; -extern const u8 gText_ReturnToConditionMenu[]; -extern const u8 gText_NoRibbonWinners[]; - -// PokéNav -extern const u8 gText_NumberIndex[]; -extern const u8 gText_RibbonsF700[]; - // use_pokeblock extern const u8 gText_Coolness[]; extern const u8 gText_Toughness[]; diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c index 26d8e99e06..8845307c0e 100644 --- a/src/pokenav_conditions_gfx.c +++ b/src/pokenav_conditions_gfx.c @@ -30,6 +30,8 @@ static const u32 sConditionGraphData_Gfx[] = INCBIN_U32("graphics/pokenav/condit static const u32 sConditionGraphData_Tilemap[] = INCBIN_U32("graphics/pokenav/condition/graph_data.bin.lz"); static const u16 sMonMarkings_Pal[] = INCBIN_U16("graphics/pokenav/condition/mon_markings.gbapal"); +static const u8 gText_Number2[] = _("No. "); + static const struct BgTemplate sMenuBgTemplates[3] = { { diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c index 9afb2bb2d9..4889dd788c 100644 --- a/src/pokenav_conditions_search_results.c +++ b/src/pokenav_conditions_search_results.c @@ -22,6 +22,8 @@ enum CONDITION_SEARCH_FUNC_SELECT_MON, }; +static const u8 gText_NumberIndex[] = _("No. {DYNAMIC 0}"); + struct Pokenav_SearchResults { u32 (*callback)(struct Pokenav_SearchResults *); diff --git a/src/pokenav_list.c b/src/pokenav_list.c index ed3d40dee2..dbcf137331 100644 --- a/src/pokenav_list.c +++ b/src/pokenav_list.c @@ -96,6 +96,10 @@ static u32 LoopedTask_PrintCheckPageInfo(s32); static const u16 sListArrow_Pal[] = INCBIN_U16("graphics/pokenav/list_arrows.gbapal"); static const u32 sListArrow_Gfx[] = INCBIN_U32("graphics/pokenav/list_arrows.4bpp.lz"); +static const u8 gText_PokenavMatchCall_Strategy[] = _("STRATEGY"); +static const u8 gText_PokenavMatchCall_TrainerPokemon[] = _("TRAINER'S POKéMON"); +static const u8 gText_PokenavMatchCall_SelfIntroduction[] = _("SELF-INTRODUCTION"); + static EWRAM_DATA u32 sMoveWindowDownIndex = 0; // Read, but pointlessly bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset) diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 761f572d6b..dfd656833d 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -86,18 +86,18 @@ static const struct WindowTemplate sHelpBarWindowTemplate[] = static const u8 *const sHelpBarTexts[HELPBAR_COUNT] = { - [HELPBAR_NONE] = gText_Pokenav_ClearButtonList, - [HELPBAR_MAP_ZOOMED_OUT] = gText_PokenavMap_ZoomedOutButtons, - [HELPBAR_MAP_ZOOMED_IN] = gText_PokenavMap_ZoomedInButtons, - [HELPBAR_CONDITION_MON_LIST] = gText_PokenavCondition_MonListButtons, - [HELPBAR_CONDITION_MON_STATUS] = gText_PokenavCondition_MonStatusButtons, - [HELPBAR_CONDITION_MARKINGS] = gText_PokenavCondition_MarkingButtons, - [HELPBAR_MC_TRAINER_LIST] = gText_PokenavMatchCall_TrainerListButtons, - [HELPBAR_MC_CALL_MENU] = gText_PokenavMatchCall_CallMenuButtons, - [HELPBAR_MC_CHECK_PAGE] = gText_PokenavMatchCall_CheckTrainerButtons, - [HELPBAR_RIBBONS_MON_LIST] = gText_PokenavRibbons_MonListButtons, - [HELPBAR_RIBBONS_LIST] = gText_PokenavRibbons_RibbonListButtons, - [HELPBAR_RIBBONS_CHECK] = gText_PokenavRibbons_RibbonCheckButtons, + [HELPBAR_NONE] = COMPOUND_STRING("{CLEAR 0x80}"), + [HELPBAR_MAP_ZOOMED_OUT] = COMPOUND_STRING("{A_BUTTON}ZOOM {B_BUTTON}CANCEL"), + [HELPBAR_MAP_ZOOMED_IN] = COMPOUND_STRING("{A_BUTTON}FULL {B_BUTTON}CANCEL"), + [HELPBAR_CONDITION_MON_LIST] = COMPOUND_STRING("{A_BUTTON}CONDITION {B_BUTTON}CANCEL"), + [HELPBAR_CONDITION_MON_STATUS] = COMPOUND_STRING("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL"), + [HELPBAR_CONDITION_MARKINGS] = COMPOUND_STRING("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL"), + [HELPBAR_MC_TRAINER_LIST] = COMPOUND_STRING("{A_BUTTON}MENU {B_BUTTON}CANCEL"), + [HELPBAR_MC_CALL_MENU] = COMPOUND_STRING("{A_BUTTON}OK {B_BUTTON}CANCEL"), + [HELPBAR_MC_CHECK_PAGE] = COMPOUND_STRING("{B_BUTTON}CANCEL"), + [HELPBAR_RIBBONS_MON_LIST] = COMPOUND_STRING("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL"), + [HELPBAR_RIBBONS_LIST] = COMPOUND_STRING("{A_BUTTON}CHECK {B_BUTTON}CANCEL"), + [HELPBAR_RIBBONS_CHECK] = COMPOUND_STRING("{B_BUTTON}CANCEL"), }; static const u8 sHelpBarTextColors[3] = diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index ca027380d4..a2cf3f93c4 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -179,8 +179,8 @@ static const struct MatchCallStructNPC sMrStoneMatchCallHeader = .type = MC_TYPE_NPC, .mapSec = MAPSEC_RUSTBORO_CITY, .flag = 0xFFFF, - .desc = gText_MrStoneMatchCallDesc, - .name = gText_MrStoneMatchCallName, + .desc = COMPOUND_STRING("DEVON PRES"), + .name = COMPOUND_STRING("MR. STONE"), .textData = sMrStoneTextScripts }; @@ -203,8 +203,8 @@ static const struct MatchCallStructTrainer sNormanMatchCallHeader = .mapSec = MAPSEC_PETALBURG_CITY, .flag = FLAG_ENABLE_NORMAN_MATCH_CALL, .rematchTableIdx = REMATCH_NORMAN, - .desc = gText_NormanMatchCallDesc, - .name = gText_NormanMatchCallName, + .desc = COMPOUND_STRING("RELIABLE ONE"), + .name = COMPOUND_STRING("DAD"), .textData = sNormanTextScripts }; @@ -213,8 +213,8 @@ static const struct MatchCallBirch sProfBirchMatchCallHeader = .type = MC_TYPE_BIRCH, .mapSec = 0, .flag = FLAG_ENABLE_PROF_BIRCH_MATCH_CALL, - .desc = gText_ProfBirchMatchCallDesc, - .name = gText_ProfBirchMatchCallName + .desc = COMPOUND_STRING("{PKMN} PROF."), + .name = COMPOUND_STRING("PROF. BIRCH") }; static const match_call_text_data_t sMomTextScripts[] = { @@ -229,8 +229,8 @@ static const struct MatchCallStructNPC sMomMatchCallHeader = .type = MC_TYPE_NPC, .mapSec = MAPSEC_LITTLEROOT_TOWN, .flag = FLAG_ENABLE_MOM_MATCH_CALL, - .desc = gText_MomMatchCallDesc, - .name = gText_MomMatchCallName, + .desc = COMPOUND_STRING("CALM & KIND"), + .name = COMPOUND_STRING("MOM"), .textData = sMomTextScripts }; @@ -250,11 +250,13 @@ static const struct MatchCallStructNPC sStevenMatchCallHeader = .type = MC_TYPE_NPC, .mapSec = MAPSEC_NONE, .flag = FLAG_REGISTERED_STEVEN_POKENAV, - .desc = gText_StevenMatchCallDesc, - .name = gText_StevenMatchCallName, + .desc = COMPOUND_STRING("HARD AS ROCK"), + .name = COMPOUND_STRING("STEVEN"), .textData = sStevenTextScripts }; +static const u8 gText_MayBrendanMatchCallDesc[] = _("RAD NEIGHBOR"); + static const match_call_text_data_t sMayTextScripts[] = { { MatchCall_Text_May1, 0xFFFF, 0xFFFF }, { MatchCall_Text_May2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF }, @@ -337,7 +339,7 @@ static const struct MatchCallWally sWallyMatchCallHeader = .mapSec = 0, .flag = FLAG_ENABLE_WALLY_MATCH_CALL, .rematchTableIdx = REMATCH_WALLY_VR, - .desc = gText_WallyMatchCallDesc, + .desc = COMPOUND_STRING("{PKMN} LOVER"), .textData = sWallyTextScripts, .locationData = sWallyLocationData }; @@ -359,8 +361,8 @@ static const struct MatchCallStructNPC sScottMatchCallHeader = .type = 0, .mapSec = MAPSEC_NONE, .flag = FLAG_ENABLE_SCOTT_MATCH_CALL, - .desc = gText_ScottMatchCallDesc, - .name = gText_ScottMatchCallName, + .desc = COMPOUND_STRING("ELUSIVE EYES"), + .name = COMPOUND_STRING("SCOTT"), .textData = sScottTextScripts }; @@ -378,7 +380,7 @@ static const struct MatchCallStructTrainer sRoxanneMatchCallHeader = .mapSec = MAPSEC_RUSTBORO_CITY, .flag = FLAG_ENABLE_ROXANNE_MATCH_CALL, .rematchTableIdx = REMATCH_ROXANNE, - .desc = gText_RoxanneMatchCallDesc, + .desc = COMPOUND_STRING("ROCKIN' WHIZ"), .name = NULL, .textData = sRoxanneTextScripts }; @@ -397,7 +399,7 @@ static const struct MatchCallStructTrainer sBrawlyMatchCallHeader = .mapSec = MAPSEC_DEWFORD_TOWN, .flag = FLAG_ENABLE_BRAWLY_MATCH_CALL, .rematchTableIdx = REMATCH_BRAWLY, - .desc = gText_BrawlyMatchCallDesc, + .desc = COMPOUND_STRING("THE BIG HIT"), .name = NULL, .textData = sBrawlyTextScripts }; @@ -416,7 +418,7 @@ static const struct MatchCallStructTrainer sWattsonMatchCallHeader = .mapSec = MAPSEC_MAUVILLE_CITY, .flag = FLAG_ENABLE_WATTSON_MATCH_CALL, .rematchTableIdx = REMATCH_WATTSON, - .desc = gText_WattsonMatchCallDesc, + .desc = COMPOUND_STRING("SWELL SHOCK"), .name = NULL, .textData = sWattsonTextScripts }; @@ -435,7 +437,7 @@ static const struct MatchCallStructTrainer sFlanneryMatchCallHeader = .mapSec = MAPSEC_LAVARIDGE_TOWN, .flag = FLAG_ENABLE_FLANNERY_MATCH_CALL, .rematchTableIdx = REMATCH_FLANNERY, - .desc = gText_FlanneryMatchCallDesc, + .desc = COMPOUND_STRING("PASSION BURN"), .name = NULL, .textData = sFlanneryTextScripts }; @@ -454,7 +456,7 @@ static const struct MatchCallStructTrainer sWinonaMatchCallHeader = .mapSec = MAPSEC_FORTREE_CITY, .flag = FLAG_ENABLE_WINONA_MATCH_CALL, .rematchTableIdx = REMATCH_WINONA, - .desc = gText_WinonaMatchCallDesc, + .desc = COMPOUND_STRING("SKY TAMER"), .name = NULL, .textData = sWinonaTextScripts }; @@ -473,7 +475,7 @@ static const struct MatchCallStructTrainer sTateLizaMatchCallHeader = .mapSec = MAPSEC_MOSSDEEP_CITY, .flag = FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL, .rematchTableIdx = REMATCH_TATE_AND_LIZA, - .desc = gText_TateLizaMatchCallDesc, + .desc = COMPOUND_STRING("MYSTIC DUO"), .name = NULL, .textData = sTateLizaTextScripts }; @@ -492,11 +494,13 @@ static const struct MatchCallStructTrainer sJuanMatchCallHeader = .mapSec = MAPSEC_SOOTOPOLIS_CITY, .flag = FLAG_ENABLE_JUAN_MATCH_CALL, .rematchTableIdx = REMATCH_JUAN, - .desc = gText_JuanMatchCallDesc, + .desc = COMPOUND_STRING("DANDY CHARM"), .name = NULL, .textData = sJuanTextScripts }; +static const u8 gText_EliteFourMatchCallDesc[] = _("ELITE FOUR"); + static const match_call_text_data_t sSidneyTextScripts[] = { { MatchCall_Text_Sidney, 0xFFFF, 0xFFFF }, { NULL, 0xFFFF, 0xFFFF } @@ -572,7 +576,7 @@ static const struct MatchCallStructTrainer sWallaceMatchCallHeader = .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_WALLACE, .rematchTableIdx = REMATCH_WALLACE, - .desc = gText_ChampionMatchCallDesc, + .desc = COMPOUND_STRING("CHAMPION"), .name = NULL, .textData = sWallaceTextScripts }; @@ -657,6 +661,19 @@ static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8 MatchCall_GetNameAndDesc_Birch }; +static const u8 gText_MatchCallSteven_Strategy[] = _("Attack the weak points!"); +static const u8 gText_MatchCallSteven_Pokemon[] = _("Ultimate STEEL POKéMON."); + +static const u8 gText_MatchCallBrendan_Strategy[] = _("Battle with knowledge!"); +static const u8 gText_MatchCallBrendan_Pokemon[] = _("I will use various POKéMON."); +static const u8 gText_MatchCallBrendan_Intro1[] = _("I'll be a better POKéMON"); +static const u8 gText_MatchCallBrendan_Intro2[] = _("prof than my father is!"); + +static const u8 gText_MatchCallMay_Strategy[] = _("I'm not so good at battles."); +static const u8 gText_MatchCallMay_Pokemon[] = _("I'll use any POKéMON!"); +static const u8 gText_MatchCallMay_Intro1[] = _("My POKéMON and I help"); +static const u8 gText_MatchCallMay_Intro2[] = _("my father's research."); + static const struct MatchCallCheckPageOverride sCheckPageOverrides[] = { { .idx = MC_HEADER_STEVEN, @@ -665,8 +682,8 @@ static const struct MatchCallCheckPageOverride sCheckPageOverrides[] = { .flavorTexts = { [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy, [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon, - [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle, - [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle + [CHECK_PAGE_INTRO_1] = COMPOUND_STRING("I'd climb even waterfalls"), + [CHECK_PAGE_INTRO_2] = COMPOUND_STRING("to find a rare stone!") } }, { @@ -676,8 +693,8 @@ static const struct MatchCallCheckPageOverride sCheckPageOverrides[] = { .flavorTexts = { [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy, [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon, - [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle, - [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle + [CHECK_PAGE_INTRO_1] = COMPOUND_STRING("I'm the strongest and most"), + [CHECK_PAGE_INTRO_2] = COMPOUND_STRING("energetic after all!") } }, { diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index 594b4d83d4..80e2709cf0 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -124,6 +124,11 @@ static const u16 sListWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/lis static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/pokenav/match_call/pokeball.gbapal"); static const u32 sPokeball_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/pokeball.4bpp.lz"); +static const u8 gText_NumberRegistered[] = _("No. registered"); +static const u8 gText_NumberOfBattles[] = _("No. of battles"); +static const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAINER in person!"); +static const u8 gText_Unknown[] = _("UNKNOWN"); + static const struct BgTemplate sMatchCallBgTemplates[3] = { { @@ -199,9 +204,9 @@ static const struct WindowTemplate sMatchCallInfoBoxWindowTemplate = static const u8 *const sMatchCallOptionTexts[MATCH_CALL_OPTION_COUNT] = { - [MATCH_CALL_OPTION_CALL] = gText_Call, - [MATCH_CALL_OPTION_CHECK] = gText_Check, - [MATCH_CALL_OPTION_CANCEL] = gText_Cancel6 + [MATCH_CALL_OPTION_CALL] = COMPOUND_STRING("CALL"), + [MATCH_CALL_OPTION_CHECK] = COMPOUND_STRING("CHECK"), + [MATCH_CALL_OPTION_CANCEL] = COMPOUND_STRING("CANCEL") }; // The series of 5 dots that appear when someone is called with Match Call diff --git a/src/pokenav_match_call_list.c b/src/pokenav_match_call_list.c index 43cd5220dd..94a13031da 100755 --- a/src/pokenav_match_call_list.c +++ b/src/pokenav_match_call_list.c @@ -36,6 +36,8 @@ static u32 CB2_HandleCallExitInput(struct Pokenav_MatchCallMenu *); static u32 LoopedTask_BuildMatchCallList(s32); static bool32 ShouldDoNearbyMessage(void); +static const u8 gText_CallCantBeMadeHere[] = _("A call can't be made from here."); + #include "data/text/match_call_messages.h" static const u8 sMatchCallOptionsNoCheckPage[] = diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index b0128d385d..09fb96f3dc 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -108,6 +108,8 @@ static const u32 sPokenavDeviceBgTilemap[] = INCBIN_U32("graphics/pokenav/device static const u16 sMatchCallBlueLightPal[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); static const u32 sMatchCallBlueLightTiles[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); +static const u8 gText_NoRibbonWinners[] = _("There are no RIBBON winners."); + static const struct BgTemplate sPokenavMainMenuBgTemplates[] = { { .bg = 1, @@ -267,20 +269,20 @@ static const struct WindowTemplate sOptionDescWindowTemplate = static const u8 *const sPageDescriptions[] = { - [POKENAV_MENUITEM_MAP] = gText_CheckMapOfHoenn, - [POKENAV_MENUITEM_CONDITION] = gText_CheckPokemonInDetail, - [POKENAV_MENUITEM_MATCH_CALL] = gText_CallRegisteredTrainer, - [POKENAV_MENUITEM_RIBBONS] = gText_CheckObtainedRibbons, - [POKENAV_MENUITEM_SWITCH_OFF] = gText_PutAwayPokenav, - [POKENAV_MENUITEM_CONDITION_PARTY] = gText_CheckPartyPokemonInDetail, - [POKENAV_MENUITEM_CONDITION_SEARCH] = gText_CheckAllPokemonInDetail, - [POKENAV_MENUITEM_CONDITION_CANCEL] = gText_ReturnToPokenavMenu, - [POKENAV_MENUITEM_CONDITION_SEARCH_COOL] = gText_FindCoolPokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY] = gText_FindBeautifulPokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_CUTE] = gText_FindCutePokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_SMART] = gText_FindSmartPokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH] = gText_FindToughPokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL] = gText_ReturnToConditionMenu + [POKENAV_MENUITEM_MAP] = COMPOUND_STRING("Check the map of the HOENN region"), + [POKENAV_MENUITEM_CONDITION] = COMPOUND_STRING("Check POKéMON in detail."), + [POKENAV_MENUITEM_MATCH_CALL] = COMPOUND_STRING("Call a registered TRAINER."), + [POKENAV_MENUITEM_RIBBONS] = COMPOUND_STRING("Check obtained RIBBONS."), + [POKENAV_MENUITEM_SWITCH_OFF] = COMPOUND_STRING("Put away the POKéNAV."), + [POKENAV_MENUITEM_CONDITION_PARTY] = COMPOUND_STRING("Check party POKéMON in detail."), + [POKENAV_MENUITEM_CONDITION_SEARCH] = COMPOUND_STRING("Check all POKéMON in detail."), + [POKENAV_MENUITEM_CONDITION_CANCEL] = COMPOUND_STRING("Return to the POKéNAV menu."), + [POKENAV_MENUITEM_CONDITION_SEARCH_COOL] = COMPOUND_STRING("Find cool POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY] = COMPOUND_STRING("Find beautiful POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_CUTE] = COMPOUND_STRING("Find cute POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_SMART] = COMPOUND_STRING("Find smart POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH] = COMPOUND_STRING("Find tough POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL] = COMPOUND_STRING("Return to the CONDITION menu.") }; static const u8 sOptionDescTextColors[] = {TEXT_COLOR_GREEN, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_GREEN}; diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c index bba1c3600c..9a5eafeea5 100644 --- a/src/pokenav_ribbons_summary.c +++ b/src/pokenav_ribbons_summary.c @@ -40,6 +40,8 @@ enum #define MON_SPRITE_X_OFF -32 #define MON_SPRITE_Y 104 +static const u8 gText_RibbonsF700[] = _("RIBBONS {DYNAMIC 0}"); + struct Pokenav_RibbonsSummaryList { u8 unused1[8]; diff --git a/src/strings.c b/src/strings.c index a5533731ed..54a08f32e2 100644 --- a/src/strings.c +++ b/src/strings.c @@ -20,7 +20,6 @@ const u8 gText_ExpandedPlaceholder_Brendan[] = _("BRENDAN"); const u8 gText_ExpandedPlaceholder_May[] = _("MAY"); const u8 gText_EggNickname[] = _("EGG"); const u8 gText_Pokemon[] = _("POKéMON"); -const u8 gText_ProfBirchMatchCallName[] = _("PROF. BIRCH"); const u8 gText_Player[] = _("PLAYER"); // Unused const u8 gText_Pokedex[] = _("POKéDEX"); // Unused const u8 gText_Time[] = _("TIME"); @@ -897,57 +896,11 @@ const u8 gText_SeeYaDescription[] = _("Return to the previous menu."); const u8 gText_JustOnePkmn[] = _("There is just one POKéMON with you."); const u8 gText_PartyFull[] = _("Your party is full!"); const u8 gText_Box[] = _("BOX"); -const u8 gText_CheckMapOfHoenn[] = _("Check the map of the HOENN region."); -const u8 gText_CheckPokemonInDetail[] = _("Check POKéMON in detail."); -const u8 gText_CallRegisteredTrainer[] = _("Call a registered TRAINER."); -const u8 gText_CheckObtainedRibbons[] = _("Check obtained RIBBONS."); -const u8 gText_PutAwayPokenav[] = _("Put away the POKéNAV."); -const u8 gText_NoRibbonWinners[] = _("There are no RIBBON winners."); -const u8 gText_NoTrainersRegistered[] = _("No TRAINERS are registered."); // Unused -const u8 gText_CheckPartyPokemonInDetail[] = _("Check party POKéMON in detail."); -const u8 gText_CheckAllPokemonInDetail[] = _("Check all POKéMON in detail."); -const u8 gText_ReturnToPokenavMenu[] = _("Return to the POKéNAV menu."); -const u8 gText_FindCoolPokemon[] = _("Find cool POKéMON."); -const u8 gText_FindBeautifulPokemon[] = _("Find beautiful POKéMON."); -const u8 gText_FindCutePokemon[] = _("Find cute POKéMON."); -const u8 gText_FindSmartPokemon[] = _("Find smart POKéMON."); -const u8 gText_FindToughPokemon[] = _("Find tough POKéMON."); -const u8 gText_ReturnToConditionMenu[] = _("Return to the CONDITION menu."); -const u8 gText_NumberRegistered[] = _("No. registered"); -const u8 gText_NumberOfBattles[] = _("No. of battles"); -const u8 gText_Detail[] = _("DETAIL"); // Unused -const u8 gText_Call2[] = _("CALL"); // Unused -const u8 gText_UnusedExit[] = _("EXIT"); // Unused -const u8 gText_CantCallOpponentHere[] = _("Can't call opponent here."); // Unused -const u8 gText_PokenavMatchCall_Strategy[] = _("STRATEGY"); -const u8 gText_PokenavMatchCall_TrainerPokemon[] = _("TRAINER'S POKéMON"); -const u8 gText_PokenavMatchCall_SelfIntroduction[] = _("SELF-INTRODUCTION"); -const u8 gText_Pokenav_ClearButtonList[] = _("{CLEAR 0x80}"); -const u8 gText_PokenavMap_ZoomedOutButtons[] = _("{A_BUTTON}ZOOM {B_BUTTON}CANCEL"); -const u8 gText_PokenavMap_ZoomedInButtons[] = _("{A_BUTTON}FULL {B_BUTTON}CANCEL"); -const u8 gText_PokenavCondition_MonListButtons[] = _("{A_BUTTON}CONDITION {B_BUTTON}CANCEL"); -const u8 gText_PokenavCondition_MonStatusButtons[] = _("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL"); -const u8 gText_PokenavCondition_MarkingButtons[] = _("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL"); -const u8 gText_PokenavMatchCall_TrainerListButtons[] = _("{A_BUTTON}MENU {B_BUTTON}CANCEL"); -const u8 gText_PokenavMatchCall_CallMenuButtons[] = _("{A_BUTTON}OK {B_BUTTON}CANCEL"); -const u8 gText_PokenavMatchCall_CheckTrainerButtons[] = _("{B_BUTTON}CANCEL"); -const u8 gText_PokenavRibbons_MonListButtons[] = _("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL"); -const u8 gText_PokenavRibbons_RibbonListButtons[] = _("{A_BUTTON}CHECK {B_BUTTON}CANCEL"); -const u8 gText_PokenavRibbons_RibbonCheckButtons[] = _("{B_BUTTON}CANCEL"); const u8 gText_NatureSlash[] = _("NATURE/"); -const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAINER in person!"); const u8 gText_InParty[] = _("IN PARTY"); -const u8 gText_Number2[] = _("No. "); -const u8 gText_Ribbons[] = _("RIBBONS"); // Unused const u8 gText_PokemonMaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}"); // Unused const u8 gText_PokemonFemaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}"); // Unused const u8 gText_PokemonNoGenderLv[] = _("{DYNAMIC 0}/{LV}{DYNAMIC 1}"); // Unused -const u8 gText_Unknown[] = _("UNKNOWN"); -const u8 gText_Call[] = _("CALL"); -const u8 gText_Check[] = _("CHECK"); -const u8 gText_Cancel6[] = _("CANCEL"); -const u8 gText_NumberIndex[] = _("No. {DYNAMIC 0}"); -const u8 gText_RibbonsF700[] = _("RIBBONS {DYNAMIC 0}"); const u8 gText_PokemonMaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused const u8 gText_PokemonFemaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused const u8 gText_PokemonNoGenderLv2[] = _("{DYNAMIC 0}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused @@ -1240,20 +1193,6 @@ const u8 gText_ThankYou[] = _("THANK YOU"); const u8 gText_ByeBye[] = _("BYE-BYE!"); const u8 gText_PlayerScurriedToCenter[] = _("{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm…\p"); const u8 gText_PlayerScurriedBackHome[] = _("{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm…\p"); -const u8 gText_MatchCallSteven_Strategy[] = _("Attack the weak points!"); -const u8 gText_MatchCallSteven_Pokemon[] = _("Ultimate STEEL POKéMON."); -const u8 gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle[] = _("I'd climb even waterfalls"); -const u8 gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle[] = _("to find a rare stone!"); -const u8 gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle[] = _("I'm the strongest and most"); -const u8 gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle[] = _("energetic after all!"); -const u8 gText_MatchCallBrendan_Strategy[] = _("Battle with knowledge!"); -const u8 gText_MatchCallBrendan_Pokemon[] = _("I will use various POKéMON."); -const u8 gText_MatchCallBrendan_Intro1[] = _("I'll be a better POKéMON"); -const u8 gText_MatchCallBrendan_Intro2[] = _("prof than my father is!"); -const u8 gText_MatchCallMay_Strategy[] = _("I'm not so good at battles."); -const u8 gText_MatchCallMay_Pokemon[] = _("I'll use any POKéMON!"); -const u8 gText_MatchCallMay_Intro1[] = _("My POKéMON and I help"); -const u8 gText_MatchCallMay_Intro2[] = _("my father's research."); const u8 gText_HatchedFromEgg[] = _("{STR_VAR_1} hatched from the EGG!"); const u8 gText_NicknameHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?"); ALIGNED(4) const u8 gText_ReadyPickBerry[] = _("Are you ready to BERRY-CRUSH?\nPlease pick a BERRY for use.\p"); @@ -1549,7 +1488,6 @@ const u8 gText_BoxName[] = _("BOX NAME?"); const u8 gText_PkmnsNickname[] = _("{STR_VAR_1}'s nickname?"); const u8 gText_TellHimTheWords[] = _("Tell him the words."); const u8 gText_MoveOkBack[] = _("{DPAD_NONE}MOVE {A_BUTTON}OK {B_BUTTON}BACK"); -const u8 gText_CallCantBeMadeHere[] = _("A call can't be made from here."); const u8 gText_RentalPkmn2[] = _("RENTAL POKéMON"); const u8 gText_SelectFirstPkmn[] = _("Select the first POKéMON."); const u8 gText_SelectSecondPkmn[] = _("Select the second POKéMON."); @@ -1720,28 +1658,6 @@ const u8 gText_ClearingData[] = _("Clearing data…\nPlease wait."); const u8 gText_IsThisTheCorrectTime[] = _("Is this the correct time?"); const u8 gText_Confirm3[] = _("CONFIRM"); const u8 gText_Cancel4[] = _("CANCEL"); -const u8 gText_MrStoneMatchCallDesc[] = _("DEVON PRES"); -const u8 gText_MrStoneMatchCallName[] = _("MR. STONE"); -const u8 gText_StevenMatchCallDesc[] = _("HARD AS ROCK"); -const u8 gText_StevenMatchCallName[] = _("STEVEN"); -const u8 gText_MayBrendanMatchCallDesc[] = _("RAD NEIGHBOR"); -const u8 gText_NormanMatchCallDesc[] = _("RELIABLE ONE"); -const u8 gText_MomMatchCallDesc[] = _("CALM & KIND"); -const u8 gText_WallyMatchCallDesc[] = _("{PKMN} LOVER"); -const u8 gText_NormanMatchCallName[] = _("DAD"); -const u8 gText_MomMatchCallName[] = _("MOM"); -const u8 gText_ScottMatchCallDesc[] = _("ELUSIVE EYES"); -const u8 gText_ScottMatchCallName[] = _("SCOTT"); -const u8 gText_RoxanneMatchCallDesc[] = _("ROCKIN' WHIZ"); -const u8 gText_BrawlyMatchCallDesc[] = _("THE BIG HIT"); -const u8 gText_WattsonMatchCallDesc[] = _("SWELL SHOCK"); -const u8 gText_FlanneryMatchCallDesc[] = _("PASSION BURN"); -const u8 gText_WinonaMatchCallDesc[] = _("SKY TAMER"); -const u8 gText_TateLizaMatchCallDesc[] = _("MYSTIC DUO"); -const u8 gText_JuanMatchCallDesc[] = _("DANDY CHARM"); -const u8 gText_EliteFourMatchCallDesc[] = _("ELITE FOUR"); -const u8 gText_ChampionMatchCallDesc[] = _("CHAMPION"); -const u8 gText_ProfBirchMatchCallDesc[] = _("{PKMN} PROF."); const u8 gText_CommStandbyAwaitingOtherPlayer[] = _("Communication standby…\nAwaiting another player to choose."); const u8 gText_BattleWasRefused[] = _("The battle was refused.{PAUSE 60}"); const u8 gText_RefusedBattle[] = _("Refused the battle.{PAUSE 60}"); From 15348eae84b9480c832f43c48a36589cf34b58e0 Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Fri, 16 Aug 2024 17:31:19 -0400 Subject: [PATCH 121/544] Consolidated the values of Rotom's moves and added Gen9 base form effect (#5186) * Consolidated Rotom move values * Updated changing Rotom into its base form to its Gen9 effect * Fixed order of if statement --- include/config/item.h | 1 + src/data/party_menu.h | 17 ++++++++++++----- src/party_menu.c | 16 ++++++++-------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/include/config/item.h b/include/config/item.h index 644a73ade6..2f60739335 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -19,6 +19,7 @@ #define I_BERRY_PRICE GEN_7 // Since Berries have become unplantable (Gen8+), their price has gone up. #define I_POWER_ITEM_BOOST GEN_LATEST // In Gen7+, Power Items grant 8 EVs instead of 4 EVs. #define I_PREMIER_BALL_BONUS GEN_LATEST // In LGPE onwards (Gen8+ here), you are given a Premier Ball for every 10 Poké Balls of any type and in the same purchase. Previously, it only applied to regular Poké Balls and only 1 could be obtained per purchase. +#define I_ROTOM_CATALOG_THUNDER_SHOCK GEN_LATEST // In Gen9+, reverting Rotom to its base form will teach it Thunder Shock even if it knows another move. // 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/src/data/party_menu.h b/src/data/party_menu.h index 99488d4ebe..841cedca88 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -1140,11 +1140,18 @@ static const u8 *const sUnused_StatStrings[] = gText_Speed2 }; +#define ROTOM_BASE_MOVE MOVE_THUNDER_SHOCK +#define ROTOM_HEAT_MOVE MOVE_OVERHEAT +#define ROTOM_WASH_MOVE MOVE_HYDRO_PUMP +#define ROTOM_FROST_MOVE MOVE_BLIZZARD +#define ROTOM_FAN_MOVE MOVE_AIR_SLASH +#define ROTOM_MOW_MOVE MOVE_LEAF_STORM + static const u16 sRotomFormChangeMoves[5] = { - MOVE_HYDRO_PUMP, - MOVE_BLIZZARD, - MOVE_OVERHEAT, - MOVE_AIR_SLASH, - MOVE_LEAF_STORM, + ROTOM_HEAT_MOVE, + ROTOM_WASH_MOVE, + ROTOM_FROST_MOVE, + ROTOM_FAN_MOVE, + ROTOM_MOW_MOVE, }; diff --git a/src/party_menu.c b/src/party_menu.c index 15433854a5..5def34b3eb 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -6413,13 +6413,13 @@ static void Task_TryItemUseFormChange(u8 taskId) case 6: if (!IsPartyMenuTextPrinterActive()) { - if (gSpecialVar_ItemId == ITEM_ROTOM_CATALOG) //only for rotom currently + if (gSpecialVar_ItemId == ITEM_ROTOM_CATALOG) //only for Rotom currently { u32 i; for (i = 0; i < ARRAY_COUNT(sRotomFormChangeMoves); i++) DeleteMove(mon, sRotomFormChangeMoves[i]); - if (gSpecialVar_0x8000 == MOVE_THUNDER_SHOCK) + if (I_ROTOM_CATALOG_THUNDER_SHOCK < GEN_9 && gSpecialVar_0x8000 == ROTOM_BASE_MOVE) { if (!DoesMonHaveAnyMoves(mon)) FormChangeTeachMove(taskId, gSpecialVar_0x8000, gPartyMenu.slotId); @@ -6517,42 +6517,42 @@ bool32 TryMultichoiceFormChange(u8 taskId) static void CursorCb_CatalogBulb(u8 taskId) { gSpecialVar_Result = 0; - gSpecialVar_0x8000 = MOVE_THUNDER_SHOCK; + gSpecialVar_0x8000 = ROTOM_BASE_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogOven(u8 taskId) { gSpecialVar_Result = 1; - gSpecialVar_0x8000 = MOVE_OVERHEAT; + gSpecialVar_0x8000 = ROTOM_HEAT_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogWashing(u8 taskId) { gSpecialVar_Result = 2; - gSpecialVar_0x8000 = MOVE_HYDRO_PUMP; + gSpecialVar_0x8000 = ROTOM_WASH_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogFridge(u8 taskId) { gSpecialVar_Result = 3; - gSpecialVar_0x8000 = MOVE_BLIZZARD; + gSpecialVar_0x8000 = ROTOM_FROST_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogFan(u8 taskId) { gSpecialVar_Result = 4; - gSpecialVar_0x8000 = MOVE_AIR_SLASH; + gSpecialVar_0x8000 = ROTOM_FAN_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogMower(u8 taskId) { gSpecialVar_Result = 5; - gSpecialVar_0x8000 = MOVE_LEAF_STORM; + gSpecialVar_0x8000 = ROTOM_MOW_MOVE; TryMultichoiceFormChange(taskId); } From e4c81ba6e0fb353589262869b09f7fac4bf87c5c Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sat, 17 Aug 2024 17:28:09 +0200 Subject: [PATCH 122/544] Removed all instances of gBitTable[x] (#5123) * Replaced all the gBitTable[X] usages with 1 << X, and cleaned up script output * Fixed failed merge in online viewer --------- Co-authored-by: Hedara --- include/battle.h | 6 +- include/constants/battle.h | 6 +- include/util.h | 1 - src/battle_ai_main.c | 8 +- src/battle_ai_switch_items.c | 42 ++-- src/battle_ai_util.c | 18 +- src/battle_arena.c | 4 +- src/battle_controller_link_opponent.c | 4 +- src/battle_controller_link_partner.c | 4 +- src/battle_controller_opponent.c | 6 +- src/battle_controller_player.c | 20 +- src/battle_controller_player_partner.c | 6 +- src/battle_controller_recorded_opponent.c | 4 +- src/battle_controller_recorded_player.c | 4 +- src/battle_controller_safari.c | 4 +- src/battle_controller_wally.c | 4 +- src/battle_controllers.c | 6 +- src/battle_dome.c | 18 +- src/battle_gfx_sfx_util.c | 14 +- src/battle_gimmick.c | 4 +- src/battle_interface.c | 10 +- src/battle_main.c | 64 +++--- src/battle_pyramid.c | 10 +- src/battle_script_commands.c | 250 +++++++++++----------- src/battle_terastal.c | 4 +- src/battle_util.c | 154 ++++++------- src/battle_z_move.c | 4 +- src/pokemon.c | 14 +- src/recorded_battle.c | 2 +- src/script_movement.c | 6 +- src/trainer_hill.c | 6 +- src/util.c | 36 ---- test/test_runner_battle.c | 18 +- 33 files changed, 362 insertions(+), 399 deletions(-) diff --git a/include/battle.h b/include/battle.h index 28a6dd0f36..57242e4bd7 100644 --- a/include/battle.h +++ b/include/battle.h @@ -42,7 +42,7 @@ // Used to exclude moves learned temporarily by Transform or Mimic #define MOVE_IS_PERMANENT(battler, moveSlot) \ (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) \ - && !(gDisableStructs[battler].mimickedMoves & gBitTable[moveSlot])) + && !(gDisableStructs[battler].mimickedMoves & (1u << moveSlot))) // Battle Actions // These determine what each battler will do in a turn @@ -819,8 +819,8 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define IS_MOVE_RECOIL(move)(gMovesInfo[move].recoil > 0 || gMovesInfo[move].effect == EFFECT_RECOIL_IF_MISS) #define BATTLER_MAX_HP(battlerId)(gBattleMons[battlerId].hp == gBattleMons[battlerId].maxHP) -#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0) || (gBattleStruct->enduredDamage & gBitTable[gBattlerTarget])) -#define BATTLER_TURN_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0) || (gBattleStruct->enduredDamage & gBitTable[battler])) +#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0) || (gBattleStruct->enduredDamage & (1u << gBattlerTarget))) +#define BATTLER_TURN_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0) || (gBattleStruct->enduredDamage & (1u << battler))) #define IS_BATTLER_OF_TYPE(battlerId, type)((GetBattlerType(battlerId, 0, FALSE) == type || GetBattlerType(battlerId, 1, FALSE) == type || (GetBattlerType(battlerId, 2, FALSE) != TYPE_MYSTERY && GetBattlerType(battlerId, 2, FALSE) == type))) #define IS_BATTLER_OF_BASE_TYPE(battlerId, type)((GetBattlerType(battlerId, 0, TRUE) == type || GetBattlerType(battlerId, 1, TRUE) == type || (GetBattlerType(battlerId, 2, TRUE) != TYPE_MYSTERY && GetBattlerType(battlerId, 2, TRUE) == type))) diff --git a/include/constants/battle.h b/include/constants/battle.h index 39d52d3a45..f9800ef4b3 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -137,7 +137,7 @@ #define STATUS2_WRAPPED (1 << 13) #define STATUS2_POWDER (1 << 14) #define STATUS2_INFATUATION (1 << 16 | 1 << 17 | 1 << 18 | 1 << 19) // 4 bits, one for every battler -#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16) +#define STATUS2_INFATUATED_WITH(battler) (1u << (battler + 16)) #define STATUS2_DEFENSE_CURL (1 << 20) #define STATUS2_TRANSFORMED (1 << 21) #define STATUS2_RECHARGE (1 << 22) @@ -217,8 +217,8 @@ #define HITMARKER_OBEYS (1 << 25) #define HITMARKER_NEVER_SET (1 << 26) // Cleared as part of a large group. Never set or checked #define HITMARKER_CHARGING (1 << 27) -#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28) -#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler) +#define HITMARKER_FAINTED(battler) (1u << (battler + 28)) +#define HITMARKER_FAINTED2(battler) HITMARKER_FAINTED(battler) #define HITMARKER_STRING_PRINTED (1 << 29) // Per-side statuses that affect an entire party diff --git a/include/util.h b/include/util.h index 3c90f136a6..fcc4e37bb1 100644 --- a/include/util.h +++ b/include/util.h @@ -4,7 +4,6 @@ #include "sprite.h" extern const u8 gMiscBlank_Gfx[]; // unused in Emerald -extern const u32 gBitTable[]; u8 CreateInvisibleSpriteWithCallback(void (*)(struct Sprite *)); void StoreWordInTwoHalfwords(u16 *, u32); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index b0229cd926..df055d62ba 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -262,7 +262,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) // Ignore moves that aren't possible to use. for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBitTable[i] & moveLimitations) + if ((1u << i) & moveLimitations) SET_SCORE(battler, i, 0); } @@ -446,7 +446,7 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 if (move != 0 && move != 0xFFFF //&& gMovesInfo[move].power != 0 /* we want to get effectiveness and accuracy of status moves */ - && !(aiData->moveLimitations[battlerAtk] & gBitTable[i])) + && !(aiData->moveLimitations[battlerAtk] & (1u << i))) { if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_HIGHEST); @@ -506,12 +506,12 @@ static bool32 AI_SwitchMonIfSuitable(u32 battler, bool32 doubleBattle) if (doubleBattle) { u32 partner = BATTLE_PARTNER(battler); - if (AI_DATA->shouldSwitchMon & gBitTable[partner] && AI_DATA->monToSwitchId[partner] == monToSwitchId) + if (AI_DATA->shouldSwitchMon & (1u << partner) && AI_DATA->monToSwitchId[partner] == monToSwitchId) { return FALSE; } } - AI_DATA->shouldSwitchMon |= gBitTable[battler]; + AI_DATA->shouldSwitchMon |= 1 << battler; AI_DATA->monToSwitchId[battler] = monToSwitchId; return TRUE; } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index e1e25b5279..aca8687797 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -40,7 +40,7 @@ static void InitializeSwitchinCandidate(struct Pokemon *mon) static bool32 IsAceMon(u32 battler, u32 monPartyId) { if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON - && !(gBattleStruct->forcedSwitch & gBitTable[battler]) + && !(gBattleStruct->forcedSwitch & (1u << battler)) && monPartyId == CalculateEnemyPartyCount()-1) return TRUE; return FALSE; @@ -218,9 +218,9 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) static bool32 ShouldSwitchIfAllBadMoves(u32 battler, bool32 emitResult) { - if (AI_DATA->shouldSwitchMon & gBitTable[battler]) + if (AI_DATA->shouldSwitchMon & (1u << battler)) { - AI_DATA->shouldSwitchMon &= ~(gBitTable[battler]); + AI_DATA->shouldSwitchMon &= ~(1u << battler); gBattleStruct->AI_monToSwitchIntoId[battler] = AI_DATA->monToSwitchId[battler]; if (emitResult) BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); @@ -321,7 +321,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); @@ -690,7 +690,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) u32 opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); u32 opposingBattler = GetBattlerAtPosition(opposingPosition); - if (!(gAbsentBattlerFlags & gBitTable[opposingBattler])) + if (!(gAbsentBattlerFlags & (1u << opposingBattler))) { for (i = 0; i < MAX_MON_MOVES; i++) { @@ -712,7 +712,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) opposingBattler = GetBattlerAtPosition(BATTLE_PARTNER(opposingPosition)); - if (!(gAbsentBattlerFlags & gBitTable[opposingBattler])) + if (!(gAbsentBattlerFlags & (1u << opposingBattler))) { for (i = 0; i < MAX_MON_MOVES; i++) { @@ -768,7 +768,7 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 modu if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); @@ -849,7 +849,7 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); @@ -1028,7 +1028,7 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); @@ -1197,14 +1197,14 @@ static u32 GetBestMonBatonPass(struct Pokemon *party, int firstId, int lastId, u for (i = firstId; i < lastId; i++) { - if (invalidMons & gBitTable[i]) + if (invalidMons & (1u << i)) continue; for (j = 0; j < MAX_MON_MOVES; j++) { if (GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL) == MOVE_BATON_PASS) { - bits |= gBitTable[i]; + bits |= 1u << i; break; } } @@ -1215,7 +1215,7 @@ static u32 GetBestMonBatonPass(struct Pokemon *party, int firstId, int lastId, u do { i = (Random() % (lastId - firstId)) + firstId; - } while (!(bits & gBitTable[i])); + } while (!(bits & (1 << i))); return i; } @@ -1233,7 +1233,7 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, // Find the mon whose type is the most suitable defensively. for (i = firstId; i < lastId; i++) { - if (!(gBitTable[i] & invalidMons) && !(gBitTable[i] & bits)) + if (!((1u << i) & invalidMons) && !((1u << i) & bits)) { u16 species = GetMonData(&party[i], MON_DATA_SPECIES); uq4_12_t typeEffectiveness = UQ_4_12(1.0); @@ -1273,7 +1273,7 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, if (i != MAX_MON_MOVES) return bestMonId; // Has both the typing and at least one super effective move. - bits |= gBitTable[bestMonId]; // Sorry buddy, we want something better. + bits |= (1u << bestMonId); // Sorry buddy, we want something better. } else { @@ -1295,7 +1295,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva // If we couldn't find the best mon in terms of typing, find the one that deals most damage. for (i = firstId; i < lastId; i++) { - if (gBitTable[i] & invalidMons) + if ((1 << (i)) & invalidMons) continue; InitializeSwitchinCandidate(&party[i]); for (j = 0; j < MAX_MON_MOVES; j++) @@ -1735,7 +1735,7 @@ static int GetRandomSwitchinWithBatonPass(int aliveCount, int bits, int firstId, do { return (Random() % (lastId - firstId)) + firstId; - } while (!(bits & gBitTable[currentMonId])); + } while (!(bits & (1 << (currentMonId)))); } // Catch any other cases (such as only one mon alive and it has Baton Pass) @@ -1875,7 +1875,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not if (aiMove == MOVE_BATON_PASS && ((hitsToKOAI > hitsToKOAIThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) - bits |= gBitTable[i]; + bits |= 1u << i; // Check for mon with resistance and super effective move for GetBestMonTypeMatchup if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) @@ -2045,13 +2045,13 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); opposingBattler = BATTLE_OPPOSITE(battlerIn1); - if (gAbsentBattlerFlags & gBitTable[opposingBattler]) + if (gAbsentBattlerFlags & (1u << opposingBattler)) opposingBattler ^= BIT_FLANK; } else @@ -2097,12 +2097,12 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) || i == gBattleStruct->monToSwitchIntoId[battlerIn2] || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))) // While not really invalid per se, not really wise to switch into this mon.) { - invalidMons |= gBitTable[i]; + invalidMons |= 1u << i; } else if (IsAceMon(battler, i))// Save Ace Pokemon for last. { aceMonId = i; - invalidMons |= gBitTable[i]; + invalidMons |= 1u << i; } else { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 03adcb1982..1cde7614ed 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -351,12 +351,12 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && GetBattleMoveCategory(moves[i]) == category - && !(unusable & gBitTable[i])) + && !(unusable & (1u << i))) { SetTypeBeforeUsingMove(moves[i], attacker); moveType = GetMoveType(moves[i]); if (CalcTypeEffectivenessMultiplier(moves[i], moveType, attacker, target, AI_DATA->abilities[target], FALSE) != 0) - usable |= gBitTable[i]; + usable |= 1u << i; } } @@ -1105,7 +1105,7 @@ bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & gBitTable[i]) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) && AI_DATA->simulatedDmg[battlerDef][battlerAtk][i].expected >= gBattleMons[battlerAtk].hp) { return TRUE; @@ -1143,7 +1143,7 @@ u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef) for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & gBitTable[i]) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) && bestDmg < AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected) { bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected; @@ -1164,7 +1164,7 @@ u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget) { if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE - && !(unusable & gBitTable[i]) + && !(unusable & (1u << i)) && bestDmg < AI_DATA->simulatedDmg[battler][battlerTarget][i].expected) { bestDmg = AI_DATA->simulatedDmg[battler][battlerTarget][i].expected; @@ -1184,7 +1184,7 @@ bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(moveLimitations & gBitTable[i])) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(moveLimitations & (1u << i))) { // Use the pre-calculated value in simulatedDmg instead of re-calculating it dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected; @@ -1229,7 +1229,7 @@ bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dm if (dmgMod) dmg *= dmgMod; - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & gBitTable[i]) && dmg >= hpCheck) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) && dmg >= hpCheck) { return TRUE; } @@ -2091,7 +2091,7 @@ bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool if (moves[i] == MOVE_NONE || moves[i] == MOVE_UNAVAILABLE) continue; - if (!(gBitTable[i] & moveLimitations)) + if (!((1u << i) & moveLimitations)) { if (ignoreStatus && IS_MOVE_STATUS(moves[i])) continue; @@ -2117,7 +2117,7 @@ bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef) { if (moves[i] == MOVE_NONE) break; - if (!(gBitTable[i] & moveLimitations)) + if (!((1u << i) & moveLimitations)) { if (gMovesInfo[moves[i]].effect == EFFECT_SLEEP && AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] < 85) diff --git a/src/battle_arena.c b/src/battle_arena.c index 26df519be0..f9a51ac652 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -386,9 +386,9 @@ void BattleArena_AddSkillPoints(u8 battler) if (gHitMarker & HITMARKER_OBEYS) { u8 *failedMoveBits = &gBattleStruct->alreadyStatusedMoveAttempt; - if (*failedMoveBits & gBitTable[battler]) + if (*failedMoveBits & (1u << battler)) { - *failedMoveBits &= ~(gBitTable[battler]); + *failedMoveBits &= ~((1u << battler)); skillPoints[battler] -= 2; } else if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 0c71d0a1da..7aeefa54b6 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -118,7 +118,7 @@ void SetControllerToLinkOpponent(u32 battler) static void LinkOpponentBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands)) sLinkOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -376,7 +376,7 @@ static void LinkOpponentBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index e5fb49bebf..283b492a91 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -117,7 +117,7 @@ void SetControllerToLinkPartner(u32 battler) static void LinkPartnerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands)) sLinkPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -202,7 +202,7 @@ static void LinkPartnerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index b555711933..275aa623b6 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -132,7 +132,7 @@ void SetControllerToOpponent(u32 battler) static void OpponentBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sOpponentBufferCommands)) sOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -390,7 +390,7 @@ static void OpponentBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } @@ -549,7 +549,7 @@ static void OpponentHandleChooseMove(u32 battler) if (GetBattlerMoveTargetType(battler, chosenMove) & MOVE_TARGET_BOTH) { gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (gAbsentBattlerFlags & (1u << gBattlerTarget)) gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); } // If opponent can and should use a gimmick (considering trainer data), do it diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 8760252c67..61f2b8162d 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -180,13 +180,13 @@ static void PlayerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } static void PlayerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerBufferCommands)) sPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -381,7 +381,7 @@ static void HandleInputChooseAction(u32 battler) { if (IsDoubleBattle() && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT - && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]) + && !(gAbsentBattlerFlags & (1u << GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { // Return item to bag if partner had selected one. @@ -507,7 +507,7 @@ void HandleInputChooseTarget(u32 battler) break; } - if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor] + if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move)) i = 0; } while (i == 0); @@ -557,7 +557,7 @@ void HandleInputChooseTarget(u32 battler) break; } - if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor] + if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move)) i = 0; } while (i == 0); @@ -753,7 +753,7 @@ void HandleInputChooseMove(u32 battler) if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) gMultiUsePlayerCursor = battler; - else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]) + else if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))) gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); else gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); @@ -994,10 +994,10 @@ void HandleMoveSwitching(u32 battler) moveInfo->maxPp[gMoveSelectionCursor[battler]] = moveInfo->maxPp[gMultiUsePlayerCursor]; moveInfo->maxPp[gMultiUsePlayerCursor] = i; - if (gDisableStructs[battler].mimickedMoves & gBitTable[gMoveSelectionCursor[battler]]) + if (gDisableStructs[battler].mimickedMoves & (1u << gMoveSelectionCursor[battler])) { - gDisableStructs[battler].mimickedMoves &= (~gBitTable[gMoveSelectionCursor[battler]]); - gDisableStructs[battler].mimickedMoves |= gBitTable[gMultiUsePlayerCursor]; + gDisableStructs[battler].mimickedMoves &= ~(1u << gMoveSelectionCursor[battler]); + gDisableStructs[battler].mimickedMoves |= 1u << gMultiUsePlayerCursor; } MoveSelectionDisplayMoveNames(battler); @@ -2109,7 +2109,7 @@ void PlayerHandleChooseMove(u32 battler) gBattleStruct->gimmick.playerSelect = FALSE; AssignUsableZMoves(battler, moveInfo->moves); - gBattleStruct->zmove.viable = (gBattleStruct->zmove.possibleZMoves[battler] & gBitTable[gMoveSelectionCursor[battler]]) != 0; + gBattleStruct->zmove.viable = (gBattleStruct->zmove.possibleZMoves[battler] & (1u << gMoveSelectionCursor[battler])) != 0; if (!IsGimmickTriggerSpriteActive()) gBattleStruct->gimmick.triggerSpriteId = 0xFF; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 2dffd4f702..47d71d87c6 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -121,7 +121,7 @@ void SetControllerToPlayerPartner(u32 battler) static void PlayerPartnerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands)) sPlayerPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -274,7 +274,7 @@ static void PlayerPartnerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } @@ -365,7 +365,7 @@ static void PlayerPartnerHandleChooseMove(u32 battler) if (gMovesInfo[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH) { gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (gAbsentBattlerFlags & (1u << gBattlerTarget)) gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } // If partner can and should use a gimmick (considering trainer data), do it diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index abadcc231c..da977fab89 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -124,7 +124,7 @@ void SetControllerToRecordedOpponent(u32 battler) static void RecordedOpponentBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands)) sRecordedOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -145,7 +145,7 @@ static void RecordedOpponentBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 3a9ca1ec00..2bb64f3066 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -121,7 +121,7 @@ void SetControllerToRecordedPlayer(u32 battler) static void RecordedPlayerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands)) sRecordedPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -351,7 +351,7 @@ static void RecordedPlayerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 39fbc63ab6..b85157f246 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -112,7 +112,7 @@ void SetControllerToSafari(u32 battler) static void SafariBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sSafariBufferCommands)) sSafariBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -240,7 +240,7 @@ static void SafariBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 7b0bb6f154..66d3932694 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -129,7 +129,7 @@ void SetControllerToWally(u32 battler) static void WallyBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sWallyBufferCommands)) sWallyBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -288,7 +288,7 @@ static void WallyBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index e11406831b..9c9c1b50ba 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -851,7 +851,7 @@ void TryReceiveLinkBattleData(void) DestroyTask_RfuIdle(); for (i = 0; i < GetLinkPlayerCount(); i++) { - if (GetBlockReceivedStatus() & gBitTable[i]) + if (GetBlockReceivedStatus() & (1 << (i))) { ResetBlockReceivedFlag(i); recvBuffer = (u8 *)gBlockRecvBuffer[i]; @@ -898,7 +898,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0]) { case 0: - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) return; memcpy(gBattleResources->bufferA[battler], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); @@ -917,7 +917,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) break; case 2: var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA]; - gBattleControllerExecFlags &= ~(gBitTable[battler] << (var * 4)); + gBattleControllerExecFlags &= ~(1u << (battler + var * 4)); break; } diff --git a/src/battle_dome.c b/src/battle_dome.c index 67b9a1e293..6069f5439c 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2030,8 +2030,8 @@ static void InitDomeTrainers(void) rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL); rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL); rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL); - monTypesBits |= gBitTable[gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[0]]; - monTypesBits |= gBitTable[gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[1]]; + monTypesBits |= 1u << gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[0]; + monTypesBits |= 1u << gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[1]; } // Count the number of types in the players party, to factor into the ranking @@ -2062,8 +2062,8 @@ static void InitDomeTrainers(void) rankingScores[i] += statValues[STAT_SPDEF]; rankingScores[i] += statValues[STAT_SPEED]; rankingScores[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]]; - monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]]; + monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]; + monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]; } for (monTypesCount = 0, j = 0; j < 32; j++) @@ -2344,9 +2344,9 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) while (i != DOME_BATTLE_PARTY_SIZE) { u32 rand = Random() & FRONTIER_PARTY_SIZE; - if (rand != FRONTIER_PARTY_SIZE && !(selectedMonBits & gBitTable[rand])) + if (rand != FRONTIER_PARTY_SIZE && !(selectedMonBits & (1u << rand))) { - selectedMonBits |= gBitTable[rand]; + selectedMonBits |= 1u << rand; i++; } } @@ -2376,7 +2376,7 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) for (i = 0; i < DOME_BATTLE_PARTY_SIZE; i++) { - selectedMonBits |= gBitTable[partyPositions[i]]; + selectedMonBits |= 1u << partyPositions[i]; } } @@ -5802,8 +5802,8 @@ static void InitRandomTourneyTreeResults(void) statSums[i] += statValues[STAT_SPDEF]; statSums[i] += statValues[STAT_SPEED]; statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]]; - monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]]; + monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]; + monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]; } // Because GF hates temporary vars, trainerId acts like monTypesCount here. diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index b396f1d7b5..22736b7c2b 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -126,7 +126,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) // If battler is < 50% HP and not asleep, use second set of move group likelihoods // otherwise use first set - i = (gBattleStruct->palaceFlags & gBitTable[battler]) ? 2 : 0; + i = (gBattleStruct->palaceFlags & (1u << battler)) ? 2 : 0; minGroupNum = i; maxGroupNum = i + 2; // + 2 because there are two percentages per set of likelihoods @@ -150,7 +150,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) if (moveInfo->moves[i] == MOVE_NONE) break; if (selectedGroup == GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) && moveInfo->currentPp[i] != 0) - selectedMoves |= gBitTable[i]; + selectedMoves |= 1u << i; } // Pass selected moves to AI, pick one @@ -178,11 +178,11 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) { // Count the number of usable moves the battler has in each move group. // The totals will be stored separately in 3 groups of 4 bits each in numMovesPerGroup. - if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !((1u << i) & unusableMovesBits)) numMovesPerGroup += (1 << 0); - if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !((1u << i) & unusableMovesBits)) numMovesPerGroup += (1 << 4); - if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !((1u << i) & unusableMovesBits)) numMovesPerGroup += (1 << 8); } @@ -215,7 +215,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) do { i = Random() % MAX_MON_MOVES; - if (!(gBitTable[i] & unusableMovesBits)) + if (!((1u << i) & unusableMovesBits)) chosenMoveId = i; } while (chosenMoveId == -1); } @@ -241,7 +241,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) do { i = Random() % MAX_MON_MOVES; - if (!(gBitTable[i] & unusableMovesBits) && randSelectGroup == GetBattlePalaceMoveGroup(battler, moveInfo->moves[i])) + if (!((1u << i) & unusableMovesBits) && randSelectGroup == GetBattlePalaceMoveGroup(battler, moveInfo->moves[i])) chosenMoveId = i; } while (chosenMoveId == -1); } diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index 2595e4cbda..815fd5fc3e 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -45,7 +45,7 @@ bool32 IsGimmickSelected(u32 battler, enum Gimmick gimmick) { // There's no player select in tests, but some gimmicks need to test choice before they are fully activated. if (TESTING) - return (gBattleStruct->gimmick.toActivate & gBitTable[battler]) && gBattleStruct->gimmick.usableGimmick[battler] == gimmick; + return (gBattleStruct->gimmick.toActivate & (1u << battler)) && gBattleStruct->gimmick.usableGimmick[battler] == gimmick; else return gBattleStruct->gimmick.usableGimmick[battler] == gimmick && gBattleStruct->gimmick.playerSelect; } @@ -99,7 +99,7 @@ bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) if (IsDoubleBattle() && IsPartnerMonFromSameTrainer(battler) && (gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] - || ((gBattleStruct->gimmick.toActivate & gBitTable[BATTLE_PARTNER(battler)] + || ((gBattleStruct->gimmick.toActivate & (1u << BATTLE_PARTNER(battler)) && gBattleStruct->gimmick.usableGimmick[BATTLE_PARTNER(battler)] == gimmick)))) { return TRUE; diff --git a/src/battle_interface.c b/src/battle_interface.c index 8d50bf95c3..4c17322b53 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1377,7 +1377,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, // fainted mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostPlayerMons & gBitTable[j]) + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostPlayerMons & (1u << j)) { // fainted arena mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; @@ -1433,7 +1433,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, // fainted mon gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3; } - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j]) + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & (1u << j)) { // fainted arena mon gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3; @@ -2718,7 +2718,7 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle) LoadSpriteSheet(&sSpriteSheet_AbilityPopUp); LoadSpritePalette(&sSpritePalette_AbilityPopUp); } - gBattleStruct->activeAbilityPopUps |= gBitTable[battlerId]; + gBattleStruct->activeAbilityPopUps |= 1u << battlerId; battlerPosition = GetBattlerPosition(battlerId); if (isDoubleBattle) @@ -2809,7 +2809,7 @@ static void SpriteCb_AbilityPopUp(struct Sprite *sprite) ||(sprite->tRightToLeft && (sprite->x -= 4) <= sprite->tOriginalX - ABILITY_POP_UP_POS_X_SLIDE) ) { - gBattleStruct->activeAbilityPopUps &= ~(gBitTable[sprite->tBattlerId]); + gBattleStruct->activeAbilityPopUps &= ~(1u << sprite->tBattlerId); DestroySprite(sprite); } } @@ -2823,7 +2823,7 @@ static void SpriteCb_AbilityPopUp(struct Sprite *sprite) void DestroyAbilityPopUp(u8 battlerId) { - if (gBattleStruct->activeAbilityPopUps & gBitTable[battlerId]) + if (gBattleStruct->activeAbilityPopUps & (1u << battlerId)) { gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][0]].tFrames = 0; gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][1]].tFrames = 0; diff --git a/src/battle_main.c b/src/battle_main.c index b46feaf0f9..25cee6dfa9 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3218,9 +3218,9 @@ void SwitchInClearSetData(u32 battler) gBattleStruct->lastTakenMoveFrom[battler][1] = 0; gBattleStruct->lastTakenMoveFrom[battler][2] = 0; gBattleStruct->lastTakenMoveFrom[battler][3] = 0; - gBattleStruct->lastMoveFailed &= ~(gBitTable[battler]); - gBattleStruct->palaceFlags &= ~(gBitTable[battler]); - gBattleStruct->boosterEnergyActivates &= ~(gBitTable[battler]); + gBattleStruct->lastMoveFailed &= ~(1u << battler); + gBattleStruct->palaceFlags &= ~(1u << battler); + gBattleStruct->boosterEnergyActivates &= ~(1u << battler); for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) { @@ -3245,7 +3245,7 @@ void SwitchInClearSetData(u32 battler) // Reset damage to prevent things like red card activating if the switched-in mon is holding it gSpecialStatuses[battler].physicalDmg = 0; gSpecialStatuses[battler].specialDmg = 0; - gBattleStruct->enduredDamage &= ~gBitTable[battler]; + gBattleStruct->enduredDamage &= ~(1u << battler); // Reset G-Max Chi Strike boosts. gBattleStruct->bonusCritStages[battler] = 0; @@ -3348,8 +3348,8 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->lastTakenMoveFrom[battler][2] = 0; gBattleStruct->lastTakenMoveFrom[battler][3] = 0; - gBattleStruct->palaceFlags &= ~(gBitTable[battler]); - gBattleStruct->boosterEnergyActivates &= ~(gBitTable[battler]); + gBattleStruct->palaceFlags &= ~(1u << battler); + gBattleStruct->boosterEnergyActivates &= ~(1u << battler); for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) { @@ -3790,7 +3790,7 @@ static void TryDoEventsBeforeFirstTurn(void) struct Pokemon *party = GetBattlerParty(i); struct Pokemon *mon = &party[gBattlerPartyIndexes[i]]; if (!IsBattlerAlive(i) || gBattleMons[i].species == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG)) - gAbsentBattlerFlags |= gBitTable[i]; + gAbsentBattlerFlags |= 1u << i; } } @@ -3923,7 +3923,7 @@ static void TryDoEventsBeforeFirstTurn(void) gBattleMons[i].status2 &= ~STATUS2_FLINCHED; // Record party slots of player's mons that appeared in battle if (!BattlerHasAi(i)) - gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]]; + gBattleStruct->appearedInBattle |= 1u << gBattlerPartyIndexes[i]; } *(&gBattleStruct->turnEffectsTracker) = 0; @@ -4195,10 +4195,10 @@ static void HandleTurnActionSelectionState(void) *(gBattleStruct->monToSwitchIntoId + battler) = PARTY_SIZE; if (gBattleTypeFlags & BATTLE_TYPE_MULTI || (position & BIT_FLANK) == B_FLANK_LEFT - || gBattleStruct->absentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))] + || gBattleStruct->absentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(position))) || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) { - if (gBattleStruct->absentBattlerFlags & gBitTable[battler]) + if (gBattleStruct->absentBattlerFlags & (1u << battler)) { gChosenActionByBattler[battler] = B_ACTION_NOTHING_FAINTED; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -4234,7 +4234,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_ACTION_CHOSEN: // Try to perform an action. - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & (((1u << battler)) | (0xF << 28) | ((1u << battler) << 4) | ((1u << battler) << 8) | ((1u << battler) << 12)))) { RecordedBattle_SetBattlerAction(battler, gBattleResources->bufferB[battler][1]); gChosenActionByBattler[battler] = gBattleResources->bufferB[battler][1]; @@ -4386,7 +4386,7 @@ static void HandleTurnActionSelectionState(void) RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 3); } - gBattleStruct->gimmick.toActivate &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]); + gBattleStruct->gimmick.toActivate &= ~((1u << BATTLE_PARTNER(GetBattlerPosition(battler)))); BtlController_EmitEndBounceEffect(battler, BUFFER_A); MarkBattlerForControllerExec(battler); return; @@ -4429,7 +4429,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_ACTION_CASE_CHOSEN: - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & (((1u << battler)) | (0xF << 28) | ((1u << battler) << 4) | ((1u << battler) << 8) | ((1u << battler) << 12)))) { switch (gChosenActionByBattler[battler]) { @@ -4480,7 +4480,7 @@ static void HandleTurnActionSelectionState(void) // Check to see if any gimmicks need to be prepared. if (gBattleResources->bufferB[battler][2] & RET_GIMMICK) - gBattleStruct->gimmick.toActivate |= gBitTable[battler]; + gBattleStruct->gimmick.toActivate |= 1u << battler; // Max Move check if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX)) @@ -4559,11 +4559,11 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_ACTION_CONFIRMED_STANDBY: - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) - | (gBitTable[battler] << 4) - | (gBitTable[battler] << 8) - | (gBitTable[battler] << 12)))) + | (1u << (battler + 4)) + | (1u << (battler + 8)) + | (1u << (battler + 12))))) { if (AllAtActionConfirmed()) i = TRUE; @@ -4572,7 +4572,7 @@ static void HandleTurnActionSelectionState(void) if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !IsDoubleBattle()) || (position & BIT_FLANK) != B_FLANK_LEFT - || (*(&gBattleStruct->absentBattlerFlags) & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))])) + || (*(&gBattleStruct->absentBattlerFlags) & (1u << GetBattlerAtPosition(BATTLE_PARTNER(position))))) { BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_STOP_BOUNCE, i); } @@ -4585,7 +4585,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_ACTION_CONFIRMED: - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12))))) { gBattleCommunication[ACTIONS_CONFIRMED_COUNT]++; } @@ -4599,7 +4599,7 @@ static void HandleTurnActionSelectionState(void) { gBattlerAttacker = battler; gBattlescriptCurrInstr = gSelectionBattleScripts[battler]; - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12))))) { gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } @@ -4607,7 +4607,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_SET_BEFORE_ACTION: - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12))))) { gBattleCommunication[battler] = STATE_BEFORE_ACTION_CHOSEN; } @@ -4631,7 +4631,7 @@ static void HandleTurnActionSelectionState(void) { gBattlerAttacker = battler; gBattlescriptCurrInstr = gSelectionBattleScripts[battler]; - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12))))) { gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } @@ -5154,10 +5154,10 @@ static bool32 TryDoGimmicksBeforeMoves(void) for (i = 0; i < gBattlersCount; i++) { // Search through each battler and activate their gimmick if they have one prepared. - if ((gBattleStruct->gimmick.toActivate & gBitTable[order[i]]) && !(gProtectStructs[order[i]].noValidMoves)) + if ((gBattleStruct->gimmick.toActivate & (1u << order[i])) && !(gProtectStructs[order[i]].noValidMoves)) { battler = gBattlerAttacker = gBattleScripting.battler = order[i]; - gBattleStruct->gimmick.toActivate &= ~(gBitTable[battler]); + gBattleStruct->gimmick.toActivate &= ~(1u << battler); if (gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]].ActivateGimmick != NULL) { gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]].ActivateGimmick(battler); @@ -5183,12 +5183,12 @@ static bool32 TryDoMoveEffectsBeforeMoves(void) SortBattlersBySpeed(battlers, FALSE); for (i = 0; i < gBattlersCount; i++) { - if (!(gBattleStruct->focusPunchBattlers & gBitTable[battlers[i]]) + if (!(gBattleStruct->focusPunchBattlers & (1u << battlers[i])) && !(gBattleMons[battlers[i]].status1 & STATUS1_SLEEP) && !(gDisableStructs[battlers[i]].truantCounter) && !(gProtectStructs[battlers[i]].noValidMoves)) { - gBattleStruct->focusPunchBattlers |= gBitTable[battlers[i]]; + gBattleStruct->focusPunchBattlers |= 1u << battlers[i]; gBattlerAttacker = battlers[i]; switch (gChosenMoveByBattler[gBattlerAttacker]) { @@ -5560,7 +5560,7 @@ static void HandleEndTurn_FinishBattle(void) bool8 changedForm = FALSE; // Appeared in battle and didn't faint - if ((gBattleStruct->appearedInBattle & gBitTable[i]) && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) + if ((gBattleStruct->appearedInBattle & (1u << i)) && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE_TERRAIN); if (!changedForm) @@ -5635,15 +5635,15 @@ static void TryEvolvePokemon(void) for (i = 0; i < PARTY_SIZE; i++) { - if (!(sTriedEvolving & gBitTable[i])) + if (!(sTriedEvolving & (1u << i))) { u16 species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_SPECIAL, i, NULL); bool32 evoModeNormal = TRUE; - sTriedEvolving |= gBitTable[i]; + sTriedEvolving |= 1u << i; - if (species == SPECIES_NONE && (gLeveledUpInBattle & gBitTable[i])) + if (species == SPECIES_NONE && (gLeveledUpInBattle & (1u << i))) { - gLeveledUpInBattle &= ~(gBitTable[i]); + gLeveledUpInBattle &= ~(1u << i); species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_ONLY, gLeveledUpInBattle, NULL); } diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index ce7a0526f2..aa3c63ef82 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -1081,7 +1081,7 @@ static void ShowPostBattleHintText(void) textIndex = sPyramidFloorTemplates[id].numTrainers; for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) { - if (gBitTable[i] & gSaveBlock2Ptr->frontier.pyramidTrainerFlags) + if ((1u << i) & gSaveBlock2Ptr->frontier.pyramidTrainerFlags) textIndex--; } i = 1; @@ -1317,7 +1317,7 @@ u16 LocalIdToPyramidTrainerId(u8 localId) bool8 GetBattlePyramidTrainerFlag(u8 eventId) { - return gSaveBlock2Ptr->frontier.pyramidTrainerFlags & gBitTable[gObjectEvents[eventId].localId - 1]; + return gSaveBlock2Ptr->frontier.pyramidTrainerFlags & ((1u << gObjectEvents[eventId].localId) - 1); } void MarkApproachingPyramidTrainersAsBattled(void) @@ -1337,7 +1337,7 @@ static void MarkPyramidTrainerAsBattled(u16 trainerId) for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) - gSaveBlock2Ptr->frontier.pyramidTrainerFlags |= gBitTable[i]; + gSaveBlock2Ptr->frontier.pyramidTrainerFlags |= 1u << i; } gObjectEvents[gSelectedObjectEvent].movementType = MOVEMENT_TYPE_WANDER_AROUND; @@ -1893,12 +1893,12 @@ static void SetPyramidObjectPositionsUniformly(u8 objType) { if (bits & 1) { - if (!(gBitTable[squareId] & gSaveBlock2Ptr->frontier.pyramidRandoms[3])) + if (!((1u << squareId) & gSaveBlock2Ptr->frontier.pyramidRandoms[3])) bits |= 2; } else { - if (gBitTable[squareId] & gSaveBlock2Ptr->frontier.pyramidRandoms[3]) + if ((1u << squareId) & gSaveBlock2Ptr->frontier.pyramidRandoms[3]) bits |= 2; } if (++squareId >= NUM_PYRAMID_FLOOR_SQUARES) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 44ad1868a8..2553794caa 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1173,7 +1173,7 @@ bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef) { - if (!(gBattleStruct->distortedTypeMatchups & gBitTable[battlerDef]) + if (!(gBattleStruct->distortedTypeMatchups & (1u << battlerDef)) && GetBattlerAbility(battlerDef) == ABILITY_TERA_SHELL && gBattleMons[battlerDef].species == SPECIES_TERAPAGOS_TERASTAL && !IS_MOVE_STATUS(move) @@ -1242,7 +1242,7 @@ static void Cmd_attackcanceler(void) if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_OFF && GetBattlerAbility(gBattlerAttacker) == ABILITY_PARENTAL_BOND && IsMoveAffectedByParentalBond(gCurrentMove, gBattlerAttacker) - && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + && !(gAbsentBattlerFlags & (1u << gBattlerTarget)) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE) { gSpecialStatuses[gBattlerAttacker].parentalBondState = PARENTAL_BOND_1ST_HIT; @@ -1847,7 +1847,7 @@ static void Cmd_ppreduce(void) if (ShouldTeraShellDistortTypeMatchups(gCurrentMove, gBattlerTarget)) { - gBattleStruct->distortedTypeMatchups |= gBitTable[gBattlerTarget]; + gBattleStruct->distortedTypeMatchups |= 1u << gBattlerTarget; gBattlerAbility = gBattlerTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TeraShellDistortingTypeMatchups; @@ -1987,7 +1987,7 @@ static void Cmd_adjustdamage(void) goto END; if (DoesDisguiseBlockMove(gBattlerTarget, gCurrentMove)) { - gBattleStruct->enduredDamage |= gBitTable[gBattlerTarget]; + gBattleStruct->enduredDamage |= 1u << gBattlerTarget; goto END; } if (GetBattlerAbility(gBattlerTarget) == ABILITY_ICE_FACE && IS_MOVE_PHYSICAL(gCurrentMove) && gBattleMons[gBattlerTarget].species == SPECIES_EISCUE) @@ -2041,7 +2041,7 @@ static void Cmd_adjustdamage(void) // Handle reducing the dmg to 1 hp. gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; - gBattleStruct->enduredDamage |= gBitTable[gBattlerTarget]; + gBattleStruct->enduredDamage |= 1u << gBattlerTarget; if (gProtectStructs[gBattlerTarget].endured) { @@ -2069,7 +2069,7 @@ END: gBattlescriptCurrInstr = cmd->nextInstr; if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMoveDamage >= 1) - gSpecialStatuses[gBattlerAttacker].damagedMons |= gBitTable[gBattlerTarget]; + gSpecialStatuses[gBattlerAttacker].damagedMons |= (1 << (gBattlerTarget)); // Check gems and damage reducing berries. if (gSpecialStatuses[gBattlerTarget].berryReduced @@ -2144,7 +2144,7 @@ static void Cmd_multihitresultmessage(void) if (gSpecialStatuses[gBattlerTarget].berryReduced && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[gBattlerTarget]]; + gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= 1u << gBattlerPartyIndexes[gBattlerTarget]; gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString; @@ -2605,7 +2605,7 @@ static void Cmd_resultmessage(void) if (gSpecialStatuses[gBattlerTarget].berryReduced && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[gBattlerTarget]]; + gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= 1u << gBattlerPartyIndexes[gBattlerTarget]; gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString; @@ -3530,7 +3530,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) { bool32 byTwo = FALSE; - gBattleStruct->stolenStats[0] |= gBitTable[i]; + gBattleStruct->stolenStats[0] |= (1 << (i)); // Store by how many stages to raise the stat. gBattleStruct->stolenStats[i] = gBattleMons[gBattlerTarget].statStages[i] - DEFAULT_STAT_STAGE; while (gBattleMons[gBattlerAttacker].statStages[i] + gBattleStruct->stolenStats[i] > MAX_STAT_STAGE) @@ -3945,7 +3945,7 @@ static void Cmd_tryfaintmon(void) destinyBondBattler = gBattlerAttacker; faintScript = BattleScript_FaintTarget; } - if (!(gAbsentBattlerFlags & gBitTable[battler]) + if (!(gAbsentBattlerFlags & (1u << battler)) && !IsBattlerAlive(battler)) { gHitMarker |= HITMARKER_FAINTED(battler); @@ -4243,7 +4243,7 @@ static void Cmd_getexp(void) else { gBattleScripting.getexpState++; - gBattleStruct->givenExpMons |= gBitTable[gBattlerPartyIndexes[gBattlerFainted]]; + gBattleStruct->givenExpMons |= (1u << gBattlerPartyIndexes[gBattlerFainted]); } break; case 1: // calculate experience points to redistribute @@ -4260,25 +4260,25 @@ static void Cmd_getexp(void) { if (!IsValidForBattle(&gPlayerParty[i])) continue; - if (gBitTable[i] & sentInBits) + if ((1u << i) & sentInBits) viaSentIn++; holdEffect = GetMonHoldEffect(&gPlayerParty[i]); if (holdEffect == HOLD_EFFECT_EXP_SHARE || IsGen6ExpShareEnabled()) { - expShareBits |= gBitTable[i]; + expShareBits |= 1u << i; viaExpShare++; } } // Get order of mons getting exp: 1. all mons via sent in, 2. all mons via exp share for (i = 0; i < PARTY_SIZE; i++) { - if (gBitTable[i] & sentInBits) + if ((1u << i) & sentInBits) gBattleStruct->expGettersOrder[orderId++] = i; } for (i = 0; i < PARTY_SIZE; i++) { - if (!(gBitTable[i] & sentInBits) && gBitTable[i] & expShareBits) + if (!((1u << i) & sentInBits) && (1u << i) & expShareBits) gBattleStruct->expGettersOrder[orderId++] = i; } if (orderId < PARTY_SIZE) @@ -4330,7 +4330,7 @@ static void Cmd_getexp(void) case 2: // set exp value to the poke in expgetter_id and print message if (gBattleControllerExecFlags == 0) { - bool32 wasSentOut = ((gBattleStruct->expSentInMons & gBitTable[*expMonId]) != 0); + bool32 wasSentOut = (gBattleStruct->expSentInMons & (1u << *expMonId)) != 0; holdEffect = GetMonHoldEffect(&gPlayerParty[*expMonId]); if ((holdEffect != HOLD_EFFECT_EXP_SHARE && !wasSentOut && !IsGen6ExpShareEnabled()) @@ -4404,11 +4404,11 @@ static void Cmd_getexp(void) // get exp getter battler if (IsDoubleBattle()) { - if (gBattlerPartyIndexes[2] == *expMonId && !(gAbsentBattlerFlags & gBitTable[2])) + if (gBattlerPartyIndexes[2] == *expMonId && !(gAbsentBattlerFlags & 4)) gBattleStruct->expGetterBattlerId = 2; else { - if (!(gAbsentBattlerFlags & gBitTable[0])) + if (!(gAbsentBattlerFlags & 1)) gBattleStruct->expGetterBattlerId = 0; else gBattleStruct->expGetterBattlerId = 2; @@ -4474,7 +4474,7 @@ static void Cmd_getexp(void) PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[*expMonId], MON_DATA_LEVEL)); BattleScriptPushCursor(); - gLeveledUpInBattle |= gBitTable[*expMonId]; + gLeveledUpInBattle |= 1 << *expMonId; gBattlescriptCurrInstr = BattleScript_LevelUp; gBattleMoveDamage = T1_READ_32(&gBattleResources->bufferB[expBattler][2]); AdjustFriendship(&gPlayerParty[*expMonId], FRIENDSHIP_EVENT_GROW_LEVEL); @@ -4547,7 +4547,7 @@ bool32 NoAliveMonsForPlayer(void) for (i = 0; i < maxI; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) - && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & gBitTable[i]))) + && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & (1u << i)))) { HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); } @@ -4565,7 +4565,7 @@ static bool32 NoAliveMonsForOpponent(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) - && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i]))) + && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & (1u << i)))) { HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP); } @@ -5338,7 +5338,7 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef) } else { - gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]]; + gWishFutureKnock.knockedOffMons[side] |= 1u << gBattlerPartyIndexes[battlerDef]; } BattleScriptPushCursor(); @@ -5366,7 +5366,7 @@ static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent) if (i != gBattlerAttacker && !(excludeCurrent && i == gBattlerTarget) && IsBattlerAlive(i) - && !(gBattleStruct->targetsDone[gBattlerAttacker] & gBitTable[i]) + && !(gBattleStruct->targetsDone[gBattlerAttacker] & (1u << i)) && (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) break; } @@ -5816,9 +5816,9 @@ static void Cmd_moveend(void) if ((gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE)) || (gBattleMons[gBattlerAttacker].status2 & (STATUS2_FLINCHED)) || gProtectStructs[gBattlerAttacker].prlzImmobility) - gBattleStruct->lastMoveFailed |= gBitTable[gBattlerAttacker]; + gBattleStruct->lastMoveFailed |= 1u << gBattlerAttacker; else - gBattleStruct->lastMoveFailed &= ~(gBitTable[gBattlerAttacker]); + gBattleStruct->lastMoveFailed &= ~(1u << gBattlerAttacker); // Set ShellTrap to activate after the attacker's turn if target was hit by a physical move. if (gMovesInfo[gChosenMoveByBattler[gBattlerTarget]].effect == EFFECT_SHELL_TRAP @@ -5844,7 +5844,7 @@ static void Cmd_moveend(void) } if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) { - gDisableStructs[gBattlerAttacker].usedMoves |= gBitTable[gCurrMovePos]; + gDisableStructs[gBattlerAttacker].usedMoves |= 1u << gCurrMovePos; gBattleStruct->lastMoveTarget[gBattlerAttacker] = gBattlerTarget; if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) { @@ -5854,8 +5854,8 @@ static void Cmd_moveend(void) gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker]; } } - if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) - && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker]) + if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) + && !(gBattleStruct->absentBattlerFlags & (1u << gBattlerAttacker)) && gMovesInfo[originallyUsedMove].effect != EFFECT_BATON_PASS && gMovesInfo[originallyUsedMove].effect != EFFECT_HEALING_WISH) { @@ -5897,8 +5897,8 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_MIRROR_MOVE: // mirror move - if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) - && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker]) + if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) + && !(gBattleStruct->absentBattlerFlags & (1u << gBattlerAttacker)) && !gMovesInfo[originallyUsedMove].mirrorMoveBanned && gHitMarker & HITMARKER_OBEYS && gBattlerAttacker != gBattlerTarget @@ -5918,7 +5918,7 @@ static void Cmd_moveend(void) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) gProtectStructs[gBattlerAttacker].targetAffected = TRUE; - gBattleStruct->targetsDone[gBattlerAttacker] |= gBitTable[gBattlerTarget]; + gBattleStruct->targetsDone[gBattlerAttacker] |= 1u << gBattlerTarget; if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && IsDoubleBattle() && !gProtectStructs[gBattlerAttacker].chargingTurn @@ -5949,7 +5949,7 @@ static void Cmd_moveend(void) u8 originalBounceTarget = gBattlerAttacker; gBattleStruct->bouncedMoveIsUsed = FALSE; gBattlerAttacker = gBattleStruct->attackerBeforeBounce; - gBattleStruct->targetsDone[gBattlerAttacker] |= gBitTable[originalBounceTarget]; + gBattleStruct->targetsDone[gBattlerAttacker] |= 1u << originalBounceTarget; gBattleStruct->targetsDone[originalBounceTarget] = 0; nextTarget = GetNextTarget(moveTarget, FALSE); @@ -6052,7 +6052,7 @@ static void Cmd_moveend(void) && TARGET_TURN_DAMAGED && CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) && !gSpecialStatuses[gBattlerAttacker].gemBoost // In base game, gems are consumed after magician would activate. - && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]]) + && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget])) && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && (GetBattlerAbility(gBattlerTarget) != ABILITY_STICKY_HOLD || !IsBattlerAlive(gBattlerTarget))) @@ -6076,9 +6076,9 @@ static void Cmd_moveend(void) u32 holdEffect; holdEffect = GetBattlerHoldEffect(i, TRUE); if (holdEffect == HOLD_EFFECT_EJECT_BUTTON) - ejectButtonBattlers |= gBitTable[i]; + ejectButtonBattlers |= 1u << i; else if (holdEffect == HOLD_EFFECT_EJECT_PACK) - ejectPackBattlers |= gBitTable[i]; + ejectPackBattlers |= 1u << i; } if (ejectButtonBattlers || ejectPackBattlers) { @@ -6089,7 +6089,7 @@ static void Cmd_moveend(void) { u32 battler = battlers[i]; - if (battler != gBattlerAttacker && ejectButtonBattlers & gBitTable[battler]) + if (battler != gBattlerAttacker && ejectButtonBattlers & (1u << battler)) { if (TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) // Apparently Sheer Force blocks Eject Button, but not Eject Pack continue; @@ -6098,7 +6098,7 @@ static void Cmd_moveend(void) if (!BATTLER_TURN_DAMAGED(battler)) continue; } - else if (ejectPackBattlers & gBitTable[battler]) + else if (ejectPackBattlers & (1u << battler)) { if (!gProtectStructs[battler].statFell || gProtectStructs[battler].disableEjectPack) continue; @@ -6120,7 +6120,7 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection effect = TRUE; BattleScriptPushCursor(); - if (ejectButtonBattlers & gBitTable[battler]) + if (ejectButtonBattlers & (1u << battler)) { gBattlescriptCurrInstr = BattleScript_EjectButtonActivates; } @@ -6159,7 +6159,7 @@ static void Cmd_moveend(void) if (i == gBattlerAttacker) continue; if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_RED_CARD) - redCardBattlers |= gBitTable[i]; + redCardBattlers |= (1u << i); } if (redCardBattlers && (gMovesInfo[gCurrentMove].effect != EFFECT_HIT_SWITCH_TARGET || gBattleStruct->hitSwitchTargetFailed) @@ -6176,7 +6176,7 @@ static void Cmd_moveend(void) u32 battler = battlers[i]; // Search for fastest hit pokemon with a red card // Attacker is the one to be switched out, battler is one with red card - if (redCardBattlers & gBitTable[battler] + if (redCardBattlers & (1u << battler) && IsBattlerAlive(battler) && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && BATTLER_TURN_DAMAGED(battler) @@ -6207,7 +6207,7 @@ static void Cmd_moveend(void) case MOVEEND_PICKPOCKET: if (IsBattlerAlive(gBattlerAttacker) && gBattleMons[gBattlerAttacker].item != ITEM_NONE // Attacker must be holding an item - && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]) // But not knocked off + && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker])) // But not knocked off && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) // Pickpocket doesn't activate for sheer force && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) // Pickpocket requires contact && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) // Obviously attack needs to have worked @@ -6451,7 +6451,7 @@ static void Cmd_getswitchedmondata(void) gBattlerPartyIndexes[battler] = gBattleStruct->monToSwitchIntoId[battler]; - BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[battler]]); + BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]); MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = cmd->nextInstr; @@ -6497,7 +6497,7 @@ static void Cmd_switchindataupdate(void) if (i != PARTY_SIZE) { gBattlerPartyIndexes[battler] = gBattleStruct->monToSwitchIntoId[battler] = i; - BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[battler]]); + BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]); MarkBattlerForControllerExec(battler); return; } @@ -6520,7 +6520,7 @@ static void Cmd_switchindataupdate(void) // check knocked off item i = GetBattlerSide(battler); - if (gWishFutureKnock.knockedOffMons[i] & gBitTable[gBattlerPartyIndexes[battler]]) + if (gWishFutureKnock.knockedOffMons[i] & (1u << gBattlerPartyIndexes[battler])) { gBattleMons[battler].item = ITEM_NONE; } @@ -6541,7 +6541,7 @@ static void Cmd_switchindataupdate(void) && IsBattlerAlive(battler) && !(gBattleMons[battler].status1 & STATUS1_SLEEP)) { - gBattleStruct->palaceFlags |= gBitTable[battler]; + gBattleStruct->palaceFlags |= 1u << battler; } gBattleScripting.battler = battler; @@ -6570,7 +6570,7 @@ static void Cmd_switchinanim(void) | BATTLE_TYPE_FRONTIER))) HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[battler].species), FLAG_SET_SEEN, gBattleMons[battler].personality); - gAbsentBattlerFlags &= ~(gBitTable[battler]); + gAbsentBattlerFlags &= ~(1u << battler); BtlController_EmitSwitchInAnim(battler, BUFFER_A, gBattlerPartyIndexes[battler], cmd->dontClearSubstitute); MarkBattlerForControllerExec(battler); @@ -6749,7 +6749,7 @@ static void ChooseMonToSendOut(u32 battler, u8 slotId) { gBattleStruct->battlerPartyIndexes[battler] = gBattlerPartyIndexes[battler]; gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; - gBattleStruct->field_93 &= ~(gBitTable[battler]); + gBattleStruct->field_93 &= ~(1u << battler); BtlController_EmitChoosePokemon(battler, BUFFER_A, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); MarkBattlerForControllerExec(battler); @@ -6774,7 +6774,7 @@ static void Cmd_openpartyscreen(void) { if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(battler); @@ -6798,12 +6798,12 @@ static void Cmd_openpartyscreen(void) hitmarkerFaintBits = gHitMarker >> 28; - if (gBitTable[0] & hitmarkerFaintBits) + if (1u & hitmarkerFaintBits) { battler = 0; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6820,12 +6820,12 @@ static void Cmd_openpartyscreen(void) flags |= 1; } } - if (gBitTable[2] & hitmarkerFaintBits && !(gBitTable[0] & hitmarkerFaintBits)) + if (4u & hitmarkerFaintBits && !(1u & hitmarkerFaintBits)) { battler = 2; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6841,12 +6841,12 @@ static void Cmd_openpartyscreen(void) MarkBattlerForControllerExec(battler); } } - if (gBitTable[1] & hitmarkerFaintBits) + if (2 & hitmarkerFaintBits) { battler = 1; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6863,12 +6863,12 @@ static void Cmd_openpartyscreen(void) flags |= 2; } } - if (gBitTable[3] & hitmarkerFaintBits && !(gBitTable[1] & hitmarkerFaintBits)) + if (8 & hitmarkerFaintBits && !(2 & hitmarkerFaintBits)) { battler = 3; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6891,7 +6891,7 @@ static void Cmd_openpartyscreen(void) hasReplacement_2 = gSpecialStatuses[2].faintedHasReplacement; if (!hasReplacement_2 && hitmarkerFaintBits != 0) { - if (gAbsentBattlerFlags & gBitTable[0]) + if (gAbsentBattlerFlags & 1) battler = 2; else battler = 0; @@ -6907,7 +6907,7 @@ static void Cmd_openpartyscreen(void) hasReplacement_3 = gSpecialStatuses[3].faintedHasReplacement; if (!hasReplacement_3 && hitmarkerFaintBits != 0) { - if (gAbsentBattlerFlags & gBitTable[1]) + if (gAbsentBattlerFlags & 2) battler = 3; else battler = 1; @@ -6926,12 +6926,12 @@ static void Cmd_openpartyscreen(void) if (IsDoubleBattle()) { hitmarkerFaintBits = gHitMarker >> 28; - if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits) + if (4 & hitmarkerFaintBits && 1 & hitmarkerFaintBits) { battler = 2; if (HasNoMonsToSwitch(battler, gBattleResources->bufferB[0][1], PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6942,12 +6942,12 @@ static void Cmd_openpartyscreen(void) gSpecialStatuses[battler].faintedHasReplacement = TRUE; } } - if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1]) + if (8u & hitmarkerFaintBits && hitmarkerFaintBits & 2u) { battler = 3; if (HasNoMonsToSwitch(battler, gBattleResources->bufferB[1][1], PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6975,7 +6975,7 @@ static void Cmd_openpartyscreen(void) hitmarkerFaintBits = gHitMarker >> 28; gBattlerFainted = 0; - while (!(gBitTable[gBattlerFainted] & hitmarkerFaintBits) + while (!((1u << gBattlerFainted) & hitmarkerFaintBits) && gBattlerFainted < gBattlersCount) gBattlerFainted++; @@ -6996,7 +6996,7 @@ static void Cmd_openpartyscreen(void) } else if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); gBattlescriptCurrInstr = failInstr; } @@ -7004,7 +7004,7 @@ static void Cmd_openpartyscreen(void) { *(gBattleStruct->battlerPartyIndexes + battler) = gBattlerPartyIndexes[battler]; *(gBattleStruct->monToSwitchIntoId + battler) = PARTY_SIZE; - gBattleStruct->field_93 &= ~(gBitTable[battler]); + gBattleStruct->field_93 &= ~(1u << battler); BtlController_EmitChoosePokemon(battler, BUFFER_A, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + BATTLE_PARTNER(battler)), ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); MarkBattlerForControllerExec(battler); @@ -7028,7 +7028,7 @@ static void Cmd_openpartyscreen(void) else { u32 battlerOpposite = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); - if (gAbsentBattlerFlags & gBitTable[battlerOpposite]) + if (gAbsentBattlerFlags & (1u << battlerOpposite)) battlerOpposite ^= BIT_FLANK; // Make sure we're checking a valid battler. In edge case scenarios - battler could be absent and battlerOpposite would become a non-existent one softlocking the game. @@ -7060,10 +7060,10 @@ static void Cmd_switchhandleorder(void) if (gBattleResources->bufferB[i][0] == CONTROLLER_CHOSENMONRETURNVALUE) { *(gBattleStruct->monToSwitchIntoId + i) = gBattleResources->bufferB[i][1]; - if (!(gBattleStruct->field_93 & gBitTable[i])) + if (!(gBattleStruct->field_93 & (1u << i))) { RecordedBattle_SetBattlerAction(i, gBattleResources->bufferB[i][1]); - gBattleStruct->field_93 |= gBitTable[i]; + gBattleStruct->field_93 |= 1u << i; } } } @@ -7073,10 +7073,10 @@ static void Cmd_switchhandleorder(void) SwitchPartyOrder(battler); break; case 2: - if (!(gBattleStruct->field_93 & gBitTable[battler])) + if (!(gBattleStruct->field_93 & (1u << battler))) { RecordedBattle_SetBattlerAction(battler, gBattleResources->bufferB[battler][1]); - gBattleStruct->field_93 |= gBitTable[battler]; + gBattleStruct->field_93 |= 1u << battler; } // fall through case 3: @@ -7144,7 +7144,7 @@ static void UpdateSentMonFlags(u32 battler) gSpecialStatuses[battler].faintedHasReplacement = FALSE; if (!BattlerHasAi(battler)) - gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->appearedInBattle |= 1u << gBattlerPartyIndexes[battler]; } static bool32 DoSwitchInEffectsForBattler(u32 battler) @@ -7161,20 +7161,20 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) } // Healing Wish activates before hazards. // Starting from Gen8 - it heals only pokemon which can be healed. In gens 5,6,7 the effect activates anyways. - else if (((gBattleStruct->storedHealingWish & gBitTable[battler]) || (gBattleStruct->storedLunarDance & gBitTable[battler])) + else if (((gBattleStruct->storedHealingWish & (1u << battler)) || (gBattleStruct->storedLunarDance & (1u << battler))) && (gBattleMons[battler].hp != gBattleMons[battler].maxHP || gBattleMons[battler].status1 != 0 || B_HEALING_WISH_SWITCH < GEN_8)) { - if (gBattleStruct->storedHealingWish & gBitTable[battler]) + if (gBattleStruct->storedHealingWish & (1u << battler)) { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_HealingWishActivates; - gBattleStruct->storedHealingWish &= ~(gBitTable[battler]); + gBattleStruct->storedHealingWish &= ~(1u << battler); } else // Lunar Dance { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_LunarDanceActivates; - gBattleStruct->storedLunarDance &= ~(gBitTable[battler]); + gBattleStruct->storedLunarDance &= ~(1u << battler); } } else if (!(gDisableStructs[battler].spikesDone) @@ -7308,7 +7308,7 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp; } - gBattleStruct->forcedSwitch &= ~(gBitTable[battler]); + gBattleStruct->forcedSwitch &= ~(1u << battler); return FALSE; } @@ -7324,7 +7324,7 @@ static void Cmd_switchineffects(void) { // Multiple mons fainted and are being switched-in. Their abilities/hazards will play according to speed ties. case BS_FAINTED_MULTIPLE_1: // Saves the battlers. - gBattleStruct->multipleSwitchInBattlers |= gBitTable[battler]; + gBattleStruct->multipleSwitchInBattlers |= 1 << battler; UpdateSentMonFlags(battler); // Increment fainted battler. @@ -7333,7 +7333,7 @@ static void Cmd_switchineffects(void) gBattlerFainted++; if (gBattlerFainted >= gBattlersCount) break; - if (gHitMarker & HITMARKER_FAINTED(gBattlerFainted) && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted])) + if (gHitMarker & HITMARKER_FAINTED(gBattlerFainted) && !(gAbsentBattlerFlags & (1u << gBattlerFainted))) break; } while (1); @@ -7353,7 +7353,7 @@ static void Cmd_switchineffects(void) for (; gBattleStruct->multipleSwitchInCursor < gBattlersCount; gBattleStruct->multipleSwitchInCursor++) { gBattlerFainted = gBattleStruct->multipleSwitchInSortedBattlers[gBattleStruct->multipleSwitchInCursor]; - if (gBattleStruct->multipleSwitchInBattlers & gBitTable[gBattlerFainted]) + if (gBattleStruct->multipleSwitchInBattlers & (1 << (gBattlerFainted))) { if (DoSwitchInEffectsForBattler(gBattlerFainted)) return; @@ -7982,7 +7982,7 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) if (ItemId_GetPocket(itemId) == POCKET_BERRIES && GetBattlerAbility(battler) == ABILITY_CHEEK_POUCH && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) - && gBattleStruct->ateBerry[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]] + && gBattleStruct->ateBerry[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]) && !BATTLER_MAX_HP(battler)) { gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 3; @@ -8515,7 +8515,7 @@ bool32 CanUseLastResort(u8 battler) { if (gBattleMons[battler].moves[i] != MOVE_NONE) knownMovesCount++; - if (i != gCurrMovePos && gDisableStructs[battler].usedMoves & gBitTable[i]) // Increment used move count for all moves except current Last Resort. + if (i != gCurrMovePos && gDisableStructs[battler].usedMoves & (1u << i)) // Increment used move count for all moves except current Last Resort. usedMovesCount++; } @@ -8847,7 +8847,7 @@ static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battler, u32 type) PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battler].species); - BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[battler]], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); + BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); MarkBattlerForControllerExec(battler); } // Update healthbox and elevation and play cry. @@ -9165,9 +9165,9 @@ static void Cmd_various(void) // Raise stats for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { - if (gBattleStruct->stolenStats[0] & gBitTable[i]) + if (gBattleStruct->stolenStats[0] & (1u << i)) { - gBattleStruct->stolenStats[0] &= ~(gBitTable[i]); + gBattleStruct->stolenStats[0] &= ~(1u << i); SET_STATCHANGER(i, gBattleStruct->stolenStats[i], FALSE); if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), i, MOVE_EFFECT_CERTAIN | MOVE_EFFECT_AFFECTS_USER, NULL) == STAT_CHANGE_WORKED) { @@ -9192,7 +9192,7 @@ static void Cmd_various(void) for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN)) - bits |= gBitTable[i]; + bits |= 1u << i; } if (bits) { @@ -9200,7 +9200,7 @@ static void Cmd_various(void) do { statId = (Random() % (NUM_BATTLE_STATS - 1)) + 1; - } while (!(bits & gBitTable[statId])); + } while (!(bits & (1u << statId))); SET_STATCHANGER(statId, 2, FALSE); gBattlescriptCurrInstr = cmd->nextInstr; @@ -9300,12 +9300,12 @@ static void Cmd_various(void) // Try and print end-of-turn Battle Palace flavor text (e.g. "A glint appears in mon's eyes") gBattleCommunication[0] = FALSE; // whether or not msg should be printed gBattleScripting.battler = battler = gBattleCommunication[1]; - if (!(gBattleStruct->palaceFlags & gBitTable[battler]) + if (!(gBattleStruct->palaceFlags & (1u << battler)) && gBattleMons[battler].maxHP / 2 >= gBattleMons[battler].hp && IsBattlerAlive(battler) && !(gBattleMons[battler].status1 & STATUS1_SLEEP)) { - gBattleStruct->palaceFlags |= gBitTable[battler]; + gBattleStruct->palaceFlags |= 1u << battler; gBattleCommunication[0] = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = gNaturesInfo[GetNatureFromPersonality(gBattleMons[battler].personality)].battlePalaceFlavorText; } @@ -9330,7 +9330,7 @@ static void Cmd_various(void) VARIOUS_ARGS(); gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(1); - gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; + gBattleStruct->arenaLostOpponentMons |= 1u << gBattlerPartyIndexes[1]; gDisableStructs[1].truantSwitchInHack = 1; break; } @@ -9340,7 +9340,7 @@ static void Cmd_various(void) gBattleMons[0].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_PLAYER_FAINTED; - gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; + gBattleStruct->arenaLostPlayerMons |= 1u << gBattlerPartyIndexes[0]; gDisableStructs[0].truantSwitchInHack = 1; break; } @@ -9352,8 +9352,8 @@ static void Cmd_various(void) gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_FAINTED(1); gHitMarker |= HITMARKER_PLAYER_FAINTED; - gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; - gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; + gBattleStruct->arenaLostPlayerMons |= 1u << gBattlerPartyIndexes[0]; + gBattleStruct->arenaLostOpponentMons |= 1u << gBattlerPartyIndexes[1]; gDisableStructs[0].truantSwitchInHack = 1; gDisableStructs[1].truantSwitchInHack = 1; break; @@ -9438,7 +9438,7 @@ static void Cmd_various(void) case VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT: { VARIOUS_ARGS(); - gBattleStruct->alreadyStatusedMoveAttempt |= gBitTable[battler]; + gBattleStruct->alreadyStatusedMoveAttempt |= 1u << battler; break; } case VARIOUS_PALACE_TRY_ESCAPE_STATUS: @@ -9455,7 +9455,7 @@ static void Cmd_various(void) // and its partner is still alive. if (GetBattlerSide(battler) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(battler))) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker |= HITMARKER_FAINTED(battler); gBattleMons[battler].hp = 0; SetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP, &gBattleMons[battler].hp); @@ -9830,7 +9830,7 @@ static void Cmd_various(void) if (!gBattleTextBuff1) PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battler].species); */ - BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[battler]], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); + BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); MarkBattlerForControllerExec(battler); } // Change stats. @@ -10034,7 +10034,7 @@ static void Cmd_various(void) || gBattleMons[gBattlerTarget].item != ITEM_NONE || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item) - || gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]]) + || gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget])) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -10279,7 +10279,7 @@ static void Cmd_various(void) ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) gBattleMons[battler].pp[i] -= ppToDeduct; - if (!(gDisableStructs[battler].mimickedMoves & gBitTable[i]) + if (!(gDisableStructs[battler].mimickedMoves & (1u << i)) && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) { BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[battler].pp[i]), &gBattleMons[battler].pp[i]); @@ -10518,9 +10518,9 @@ static void Cmd_various(void) if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND && HasAttackerFaintedTarget() && CalculateBattlerPartyCount(gBattlerTarget) > 1 - && !(gBattleStruct->battleBondTransformed[GetBattlerSide(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]])) + && !(gBattleStruct->battleBondTransformed[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker]))) { - gBattleStruct->battleBondTransformed[GetBattlerSide(gBattlerAttacker)] |= gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]; + gBattleStruct->battleBondTransformed[GetBattlerSide(gBattlerAttacker)] |= 1u << gBattlerPartyIndexes[gBattlerAttacker]; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species); gBattleStruct->changedSpecies[GetBattlerSide(gBattlerAttacker)][gBattlerPartyIndexes[gBattlerAttacker]] = gBattleMons[gBattlerAttacker].species; gBattleMons[gBattlerAttacker].species = SPECIES_GRENINJA_ASH; @@ -10542,7 +10542,7 @@ static void Cmd_various(void) if (cmd->fromBattler) gLastUsedItem = gBattleMons[battler].item; - gBattleStruct->ateBerry[battler & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->ateBerry[battler & BIT_SIDE] |= 1u << gBattlerPartyIndexes[battler]; gBattleScripting.battler = gEffectBattler = gBattlerTarget = battler; // Cover all berry effect battler cases. e.g. ChangeStatBuffs uses target ID if (ItemBattleEffects(ITEMEFFECT_USE_LAST_ITEM, battler, FALSE)) return; @@ -10882,9 +10882,9 @@ static void Cmd_various(void) { VARIOUS_ARGS(); if (gCurrentMove == MOVE_LUNAR_DANCE) - gBattleStruct->storedLunarDance |= gBitTable[battler]; + gBattleStruct->storedLunarDance |= 1u << battler; else - gBattleStruct->storedHealingWish |= gBitTable[battler]; + gBattleStruct->storedHealingWish |= 1u << battler; break; } case VARIOUS_HIT_SWITCH_TARGET_FAILED: @@ -10913,7 +10913,7 @@ static void Cmd_various(void) struct Pokemon *party = GetSideParty(side); u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; - BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HP_BATTLE, gBitTable[gSelectedMonPartyId], sizeof(hp), &hp); + BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HP_BATTLE, 1u << gSelectedMonPartyId, sizeof(hp), &hp); MarkBattlerForControllerExec(gBattlerAttacker); PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES)); @@ -12136,7 +12136,7 @@ static void Cmd_forcerandomswitch(void) { *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; - gBattleStruct->forcedSwitch |= gBitTable[gBattlerTarget]; + gBattleStruct->forcedSwitch |= 1u << gBattlerTarget; *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[RandomUniform(RNG_FORCE_RANDOM_SWITCH, 0, validMonsCount - 1)]; if (!IsMultiBattle()) @@ -12464,7 +12464,7 @@ static void Cmd_updatestatusicon(void) else { battler = gBattlerAttacker; - if (!(gAbsentBattlerFlags & gBitTable[battler])) + if (!(gAbsentBattlerFlags & (1u << battler))) { BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); MarkBattlerForControllerExec(battler); @@ -12472,7 +12472,7 @@ static void Cmd_updatestatusicon(void) if ((IsDoubleBattle())) { battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (!(gAbsentBattlerFlags & gBitTable[battler])) + if (!(gAbsentBattlerFlags & (1u << battler))) { BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); MarkBattlerForControllerExec(battler); @@ -12506,8 +12506,8 @@ static void Cmd_setfocusenergy(void) CMD_ARGS(u8 battler); u8 battler = GetBattlerForBattleScript(cmd->battler); - if ((gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_CHEER && (!(IsDoubleBattle()) || (gAbsentBattlerFlags & gBitTable[battler]))) - || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) + if ((gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_CHEER && (!(IsDoubleBattle()) || (gAbsentBattlerFlags & (1u << battler)))) + || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) { gMoveResultFlags |= MOVE_RESULT_FAILED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FOCUS_ENERGY_FAILED; @@ -12650,7 +12650,7 @@ static void Cmd_mimicattackcopy(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) - gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos]; + gDisableStructs[gBattlerAttacker].mimickedMoves |= 1u << gCurrMovePos; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -12906,7 +12906,7 @@ static void Cmd_settypetorandomresistance(void) { case UQ_4_12(0): case UQ_4_12(0.5): - resistTypes |= gBitTable[i]; + resistTypes |= 1u << i; break; } } @@ -12914,11 +12914,11 @@ static void Cmd_settypetorandomresistance(void) while (resistTypes != 0) { i = Random() % NUMBER_OF_MON_TYPES; - if (resistTypes & gBitTable[i]) + if (resistTypes & (1u << i)) { if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) { - resistTypes &= ~(gBitTable[i]); // Type resists, but the user is already of this type. + resistTypes &= ~(1u << i); // Type resists, but the user is already of this type. } else { @@ -13008,7 +13008,7 @@ static void Cmd_trychoosesleeptalkmove(void) if (gMovesInfo[gBattleMons[gBattlerAttacker].moves[i]].sleepTalkBanned || gBattleMoveEffects[gMovesInfo[gBattleMons[gBattlerAttacker].moves[i]].effect].twoTurnEffect) { - unusableMovesBits |= gBitTable[i]; + unusableMovesBits |= (1 << (i)); } } @@ -13020,11 +13020,11 @@ static void Cmd_trychoosesleeptalkmove(void) else // at least one move can be chosen { // Set Sleep Talk as used move, so it works with Last Resort. - gDisableStructs[gBattlerAttacker].usedMoves |= gBitTable[gCurrMovePos]; + gDisableStructs[gBattlerAttacker].usedMoves |= 1u << gCurrMovePos; do { movePosition = MOD(Random(), MAX_MON_MOVES); - } while ((gBitTable[movePosition] & unusableMovesBits)); + } while ((1u << movePosition) & unusableMovesBits); if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gBattleMons[gBattlerAttacker].moves[movePosition])) { @@ -13135,7 +13135,7 @@ static void Cmd_tryspiteppreduce(void) gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct; // if (MOVE_IS_PERMANENT(gBattlerTarget, i)), but backwards - if (!(gDisableStructs[gBattlerTarget].mimickedMoves & gBitTable[i]) + if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i)) && !(gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED)) { BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]); @@ -13250,7 +13250,7 @@ static void Cmd_healpartystatus(void) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; if (IsDoubleBattle() - && !(gAbsentBattlerFlags & gBitTable[partner])) + && !(gAbsentBattlerFlags & (1u <failInstr; } @@ -14619,7 +14619,7 @@ static void Cmd_switchoutabilities(void) case ABILITY_NATURAL_CURE: gBattleMons[battler].status1 = 0; BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, - gBitTable[*(gBattleStruct->battlerPartyIndexes + battler)], + 1u << *(gBattleStruct->battlerPartyIndexes + battler), sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1); MarkBattlerForControllerExec(battler); @@ -14630,7 +14630,7 @@ static void Cmd_switchoutabilities(void) if (gBattleMoveDamage > gBattleMons[battler].maxHP) gBattleMoveDamage = gBattleMons[battler].maxHP; BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HP_BATTLE, - gBitTable[*(gBattleStruct->battlerPartyIndexes + battler)], + 1u << *(gBattleStruct->battlerPartyIndexes + battler), sizeof(gBattleMoveDamage), &gBattleMoveDamage); MarkBattlerForControllerExec(battler); @@ -14915,7 +14915,7 @@ static void Cmd_pursuitdoubles(void) u32 battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); if (IsDoubleBattle() - && !(gAbsentBattlerFlags & gBitTable[battler]) + && !(gAbsentBattlerFlags & (1u << battler)) && gChosenActionByBattler[battler] == B_ACTION_USE_MOVE && gMovesInfo[gChosenMoveByBattler[battler]].effect == EFFECT_PURSUIT) { @@ -16206,7 +16206,7 @@ void BS_ItemRestoreHP(void) // Revived battlers on the field need to be brought back. if (IsDoubleBattle() && battler != MAX_BATTLERS_COUNT) { - gAbsentBattlerFlags &= ~gBitTable[battler]; + gAbsentBattlerFlags &= ~(1u << battler); gBattleMons[battler].hp = hp; gBattleCommunication[MULTIUSE_STATE] = TRUE; } diff --git a/src/battle_terastal.c b/src/battle_terastal.c index f687150d39..2c140414db 100644 --- a/src/battle_terastal.c +++ b/src/battle_terastal.c @@ -114,14 +114,14 @@ u32 GetBattlerTeraType(u32 battler) void ExpendTypeStellarBoost(u32 battler, u32 type) { if (type < 32 && gBattleMons[battler].species != SPECIES_TERAPAGOS_STELLAR) // avoid OOB access - gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] |= gBitTable[type]; + gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] |= 1u << type; } // Checks whether a type's Stellar boost has been expended. bool32 IsTypeStellarBoosted(u32 battler, u32 type) { if (type < 32) // avoid OOB access - return !(gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] & gBitTable[type]); + return !(gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] & (1u << type)); else return FALSE; } diff --git a/src/battle_util.c b/src/battle_util.c index b16a33764b..7187c7cde8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -130,7 +130,7 @@ void HandleAction_UseMove(void) u16 moveTarget; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - if (gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker] || !IsBattlerAlive(gBattlerAttacker)) + if (gBattleStruct->absentBattlerFlags & (1u << gBattlerAttacker) || !IsBattlerAlive(gBattlerAttacker)) { gCurrentActionFuncId = B_ACTION_FINISHED; return; @@ -322,7 +322,7 @@ void HandleAction_UseMove(void) gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); } - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget] + if (gAbsentBattlerFlags & (1u << gBattlerTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); @@ -964,29 +964,29 @@ static void UNUSED MarkAllBattlersForControllerExec(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK) { for (i = 0; i < gBattlersCount; i++) - gBattleControllerExecFlags |= gBitTable[i] << (32 - MAX_BATTLERS_COUNT); + gBattleControllerExecFlags |= 1u << (i + 32 - MAX_BATTLERS_COUNT); } else { for (i = 0; i < gBattlersCount; i++) - gBattleControllerExecFlags |= gBitTable[i]; + gBattleControllerExecFlags |= 1 << i; } } bool32 IsBattlerMarkedForControllerExec(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) - return (gBattleControllerExecFlags & (gBitTable[battler] << 0x1C)) != 0; + return (gBattleControllerExecFlags & (1 << (battler + 28))) != 0; else - return (gBattleControllerExecFlags & (gBitTable[battler])) != 0; + return (gBattleControllerExecFlags & (1 << battler)) != 0; } void MarkBattlerForControllerExec(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) - gBattleControllerExecFlags |= gBitTable[battler] << (32 - MAX_BATTLERS_COUNT); + gBattleControllerExecFlags |= 1u << (32 - MAX_BATTLERS_COUNT); else - gBattleControllerExecFlags |= gBitTable[battler]; + gBattleControllerExecFlags |= 1u << battler; } void MarkBattlerReceivedLinkData(u32 battler) @@ -994,9 +994,9 @@ void MarkBattlerReceivedLinkData(u32 battler) s32 i; for (i = 0; i < GetLinkPlayerCount(); i++) - gBattleControllerExecFlags |= gBitTable[battler] << (i << 2); + gBattleControllerExecFlags |= 1u << (battler + (i << 2)); - gBattleControllerExecFlags &= ~((1 << 28) << battler); + gBattleControllerExecFlags &= ~(1u << (28 + battler)); } const u8* CancelMultiTurnMoves(u32 battler) @@ -1172,7 +1172,7 @@ void ResetSentPokesToOpponentValue(void) gSentPokesToOpponent[1] = 0; for (i = 0; i < gBattlersCount; i += 2) - bits |= gBitTable[gBattlerPartyIndexes[i]]; + bits |= 1u << gBattlerPartyIndexes[i]; for (i = 1; i < gBattlersCount; i += 2) gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits; @@ -1190,8 +1190,8 @@ void OpponentSwitchInResetSentPokesToOpponentValue(u32 battler) for (i = 0; i < gBattlersCount; i += 2) { - if (!(gAbsentBattlerFlags & gBitTable[i])) - bits |= gBitTable[gBattlerPartyIndexes[i]]; + if (!(gAbsentBattlerFlags & (1u << i))) + bits |= 1u << gBattlerPartyIndexes[i]; } gSentPokesToOpponent[flank] = bits; } @@ -1207,7 +1207,7 @@ void UpdateSentPokesToOpponentValue(u32 battler) { s32 i; for (i = 1; i < gBattlersCount; i++) - gSentPokesToOpponent[(i & BIT_FLANK) >> 1] |= gBitTable[gBattlerPartyIndexes[battler]]; + gSentPokesToOpponent[(i & BIT_FLANK) >> 1] |= 1u << gBattlerPartyIndexes[battler]; } } @@ -1248,7 +1248,7 @@ bool32 IsBelchPreventingMove(u32 battler, u32 move) if (gMovesInfo[move].effect != EFFECT_BELCH) return FALSE; - return !(gBattleStruct->ateBerry[battler & BIT_SIDE] & gBitTable[gBattlerPartyIndexes[battler]]); + return !(gBattleStruct->ateBerry[battler & BIT_SIDE] & (1u << gBattlerPartyIndexes[battler])); } // Dynamax bypasses all selection prevention except Taunt and Assault Vest. @@ -1513,55 +1513,55 @@ u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) moveEffect = gMovesInfo[move].effect; // No move if (check & MOVE_LIMITATION_ZEROMOVE && move == MOVE_NONE) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // No PP else if (check & MOVE_LIMITATION_PP && gBattleMons[battler].pp[i] == 0) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Placeholder else if (check & MOVE_LIMITATION_PLACEHOLDER && moveEffect == EFFECT_PLACEHOLDER) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Disable else if (check & MOVE_LIMITATION_DISABLED && move == gDisableStructs[battler].disabledMove) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Torment else if (check & MOVE_LIMITATION_TORMENTED && move == gLastMoves[battler] && gBattleMons[battler].status2 & STATUS2_TORMENT) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Taunt else if (check & MOVE_LIMITATION_TAUNT && gDisableStructs[battler].tauntTimer && IS_MOVE_STATUS(move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Imprison else if (check & MOVE_LIMITATION_IMPRISON && GetImprisonedMovesCount(battler, move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Encore else if (check & MOVE_LIMITATION_ENCORE && gDisableStructs[battler].encoreTimer && gDisableStructs[battler].encoredMove != move) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Choice Items else if (check & MOVE_LIMITATION_CHOICE_ITEM && HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Assault Vest else if (check & MOVE_LIMITATION_ASSAULT_VEST && holdEffect == HOLD_EFFECT_ASSAULT_VEST && IS_MOVE_STATUS(move) && gMovesInfo[move].effect != EFFECT_ME_FIRST) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Gravity else if (check & MOVE_LIMITATION_GRAVITY && IsGravityPreventingMove(move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Heal Block else if (check & MOVE_LIMITATION_HEAL_BLOCK && IsHealBlockPreventingMove(battler, move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Belch else if (check & MOVE_LIMITATION_BELCH && IsBelchPreventingMove(battler, move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Throat Chop else if (check & MOVE_LIMITATION_THROAT_CHOP && gDisableStructs[battler].throatChopTimer && gMovesInfo[move].soundMove) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Stuff Cheeks else if (check & MOVE_LIMITATION_STUFF_CHEEKS && moveEffect == EFFECT_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[battler].item) != POCKET_BERRIES) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Gorilla Tactics else if (check & MOVE_LIMITATION_CHOICE_ITEM && GetBattlerAbility(battler) == ABILITY_GORILLA_TACTICS && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Can't Use Twice flag else if (check & MOVE_LIMITATION_CANT_USE_TWICE && gMovesInfo[move].cantUseTwice && move == gLastResultingMoves[battler]) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; } return unusableMoves; } @@ -1703,10 +1703,10 @@ u8 DoFieldEndTurnEffects(void) { u8 effect = 0; - for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount && gAbsentBattlerFlags & gBitTable[gBattlerAttacker]; gBattlerAttacker++) + for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount && gAbsentBattlerFlags & (1u << gBattlerAttacker); gBattlerAttacker++) { } - for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount && gAbsentBattlerFlags & gBitTable[gBattlerTarget]; gBattlerTarget++) + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount && gAbsentBattlerFlags & (1u << gBattlerTarget); gBattlerTarget++) { } @@ -2370,7 +2370,7 @@ u8 DoBattlerEndTurnEffects(void) while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= ENDTURN_BATTLER_COUNT) { battler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId]; - if (gAbsentBattlerFlags & gBitTable[battler]) + if (gAbsentBattlerFlags & (1u << battler)) { gBattleStruct->turnEffectsBattlerId++; continue; @@ -3032,7 +3032,7 @@ bool32 HandleWishPerishSongOnTurnEnd(void) if (gWishFutureKnock.futureSightCounter[battler] != 0 && --gWishFutureKnock.futureSightCounter[battler] == 0 - && !(gAbsentBattlerFlags & gBitTable[battler])) + && !(gAbsentBattlerFlags & (1u << battler))) { struct Pokemon *party; @@ -3073,7 +3073,7 @@ bool32 HandleWishPerishSongOnTurnEnd(void) while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount) { battler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->wishPerishSongBattlerId]; - if (gAbsentBattlerFlags & gBitTable[battler]) + if (gAbsentBattlerFlags & (1u << battler)) { gBattleStruct->wishPerishSongBattlerId++; continue; @@ -3139,8 +3139,8 @@ bool32 HandleFaintedMonActions(void) gBattleStruct->faintedActionsState++; for (i = 0; i < gBattlersCount; i++) { - if (gAbsentBattlerFlags & gBitTable[i] && !HasNoMonsToSwitch(i, PARTY_SIZE, PARTY_SIZE)) - gAbsentBattlerFlags &= ~(gBitTable[i]); + if (gAbsentBattlerFlags & (1u << i) && !HasNoMonsToSwitch(i, PARTY_SIZE, PARTY_SIZE)) + gAbsentBattlerFlags &= ~(1u << i); } // fall through case 1: @@ -3148,8 +3148,8 @@ bool32 HandleFaintedMonActions(void) { gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId; if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0 - && !(gBattleStruct->givenExpMons & gBitTable[gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId]]) - && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId])) + && !(gBattleStruct->givenExpMons & (1u << gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId])) + && !(gAbsentBattlerFlags & (1u << gBattleStruct->faintedActionsBattlerId))) { BattleScriptExecute(BattleScript_GiveExp); gBattleStruct->faintedActionsState = 2; @@ -3170,7 +3170,7 @@ bool32 HandleFaintedMonActions(void) && !NoAliveMonsForEitherParty() && gCurrentTurnActionNumber != gBattlersCount) { - gAbsentBattlerFlags |= gBitTable[gBattlerFainted]; + gAbsentBattlerFlags |= 1u << gBattlerFainted; if (gBattleStruct->faintedActionsState != 1) return FALSE; } @@ -3192,7 +3192,7 @@ bool32 HandleFaintedMonActions(void) { gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId; if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0 - && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId])) + && !(gAbsentBattlerFlags & (1u << gBattleStruct->faintedActionsBattlerId))) { BattleScriptExecute(BattleScript_HandleFaintedMon); gBattleStruct->faintedActionsState = 5; @@ -3498,7 +3498,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gCurrentMove = MOVE_BIDE; gBattleScripting.bideDmg = gBideDmg[gBattlerAttacker] * 2; gBattlerTarget = gBideTarget[gBattlerAttacker]; - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (gAbsentBattlerFlags & (1u << gBattlerTarget)) gBattlerTarget = GetMoveTarget(MOVE_BIDE, MOVE_TARGET_SELECTED + 1); gBattlescriptCurrInstr = BattleScript_BideAttack; } @@ -4731,11 +4731,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_SUPERSWEET_SYRUP: if (!gSpecialStatuses[battler].switchInAbilityDone - && !(gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]))) { gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] |= (1u << gBattlerPartyIndexes[battler]); BattleScriptPushCursorAndCallback(BattleScript_SupersweetSyrupActivates); effect++; } @@ -4772,12 +4772,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_INTREPID_SWORD: if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) - && !(gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]))) { gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; if (B_INTREPID_SWORD == GEN_9) - gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] |= 1u << gBattlerPartyIndexes[battler]; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_ATK, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); @@ -4786,12 +4786,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_DAUNTLESS_SHIELD: if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN) - && !(gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]))) { gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; if (B_DAUNTLESS_SHIELD == GEN_9) - gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] |= 1u << gBattlerPartyIndexes[battler]; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_DEF, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); @@ -4895,11 +4895,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_PALAFIN_HERO - && !(gBattleStruct->transformZeroToHero[side] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->transformZeroToHero[side] & (1u << gBattlerPartyIndexes[battler]))) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; gBattlerAttacker = battler; - gBattleStruct->transformZeroToHero[side] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->transformZeroToHero[side] |= 1u << gBattlerPartyIndexes[battler]; BattleScriptPushCursorAndCallback(BattleScript_ZeroToHeroActivates); effect++; } @@ -5046,9 +5046,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 for (i = STAT_ATK; i < statsNum; i++) { if (CompareStat(battler, i, MIN_STAT_STAGE, CMP_GREATER_THAN)) - validToLower |= gBitTable[i]; + validToLower |= 1u << i; if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN)) - validToRaise |= gBitTable[i]; + validToRaise |= 1u << i; } if (validToLower != 0 || validToRaise != 0) // Can lower one stat, or can raise one stat @@ -5059,16 +5059,16 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 do { i = (Random() % statsNum) + STAT_ATK; - } while (!(validToRaise & gBitTable[i])); + } while (!(validToRaise & (1u << i))); SET_STATCHANGER(i, 2, FALSE); - validToLower &= ~(gBitTable[i]); // Can't lower the same stat as raising. + validToLower &= ~(1u << i); // Can't lower the same stat as raising. } if (validToLower != 0) // Find stat to lower { do { i = (Random() % statsNum) + STAT_ATK; - } while (!(validToLower & gBitTable[i])); + } while (!(validToLower & (1u << i))); SET_STATCHANGER2(gBattleScripting.savedStatChanger, i, 1, TRUE); } BattleScriptPushCursorAndCallback(BattleScript_MoodyActivates); @@ -7560,13 +7560,13 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = TryConsumeMirrorHerb(battler, TRUE); break; case HOLD_EFFECT_BOOSTER_ENERGY: - if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler]) + if (!(gBattleStruct->boosterEnergyActivates & (1u << battler)) && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN)) || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)))) { PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); gBattleScripting.battler = battler; - gBattleStruct->boosterEnergyActivates |= gBitTable[battler]; + gBattleStruct->boosterEnergyActivates |= 1u << battler; BattleScriptExecute(BattleScript_BoosterEnergyEnd2); effect = ITEM_EFFECT_OTHER; } @@ -7827,13 +7827,13 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = TryConsumeMirrorHerb(battler, TRUE); break; case HOLD_EFFECT_BOOSTER_ENERGY: - if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler]) + if (!(gBattleStruct->boosterEnergyActivates & (1u << battler)) && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN)) || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)))) { PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); gBattlerAbility = gBattleScripting.battler = battler; - gBattleStruct->boosterEnergyActivates |= gBitTable[battler]; + gBattleStruct->boosterEnergyActivates |= 1u << battler; BattleScriptExecute(BattleScript_BoosterEnergyEnd2); effect = ITEM_EFFECT_OTHER; } @@ -8210,7 +8210,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) // Berry was successfully used on a Pokemon. if (effect && (gLastUsedItem >= FIRST_BERRY_INDEX && gLastUsedItem <= LAST_BERRY_INDEX)) - gBattleStruct->ateBerry[battler & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->ateBerry[battler & BIT_SIDE] |= 1u << gBattlerPartyIndexes[battler]; return effect; } @@ -8401,7 +8401,7 @@ u8 IsMonDisobedient(void) calc = (levelReferenced + obedienceLevel) * rnd >> 8; if (calc < obedienceLevel) { - calc = CheckMoveLimitations(gBattlerAttacker, gBitTable[gCurrMovePos], MOVE_LIMITATIONS_ALL); + calc = CheckMoveLimitations(gBattlerAttacker, 1u << gCurrMovePos, MOVE_LIMITATIONS_ALL); if (calc == ALL_MOVES_MASK) // all moves cannot be used { // Randomly select, then print a disobedient string @@ -8415,7 +8415,7 @@ u8 IsMonDisobedient(void) do { gCurrMovePos = gChosenMovePos = MOD(Random(), MAX_MON_MOVES); - } while (gBitTable[gCurrMovePos] & calc); + } while ((1u << gCurrMovePos) & calc); gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; SetAtkCancellerForCalledMove(); @@ -8630,7 +8630,7 @@ bool32 IsBattlerAlive(u32 battler) return FALSE; else if (battler >= gBattlersCount) return FALSE; - else if (gAbsentBattlerFlags & gBitTable[battler]) + else if (gAbsentBattlerFlags & (1u << battler)) return FALSE; else return TRUE; @@ -8703,12 +8703,12 @@ u32 GetMoveTargetCount(u32 move, u32 battlerAtk, u32 battlerDef) switch (GetBattlerMoveTargetType(gBattlerAttacker, move)) { case MOVE_TARGET_BOTH: - return !(gAbsentBattlerFlags & gBitTable[battlerDef]) - + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerDef)]); + return !(gAbsentBattlerFlags & (1u << battlerDef)) + + !(gAbsentBattlerFlags & (1u << BATTLE_PARTNER(battlerDef))); case MOVE_TARGET_FOES_AND_ALLY: - return !(gAbsentBattlerFlags & gBitTable[battlerDef]) - + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerDef)]) - + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)]); + return !(gAbsentBattlerFlags & (1u << battlerDef)) + + !(gAbsentBattlerFlags & (1u << BATTLE_PARTNER(battlerDef))) + + !(gAbsentBattlerFlags & (1u << BATTLE_PARTNER(battlerAtk))); case MOVE_TARGET_OPPONENTS_FIELD: return 1; case MOVE_TARGET_DEPENDS: @@ -9126,7 +9126,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); break; case EFFECT_STOMPING_TANTRUM: - if (gBattleStruct->lastMoveFailed & gBitTable[battlerAtk]) + if (gBattleStruct->lastMoveFailed & (1u << battlerAtk)) modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); break; case EFFECT_MAGNITUDE: @@ -9281,7 +9281,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_PROTOSYNTHESIS: { u8 atkHighestStat = GetHighestStatId(battlerAtk); - if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerAtk]) + if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK))) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); } @@ -9289,7 +9289,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_QUARK_DRIVE: { u8 atkHighestStat = GetHighestStatId(battlerAtk); - if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerAtk]) + if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK))) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); } @@ -9359,7 +9359,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_PROTOSYNTHESIS: { u8 defHighestStat = GetHighestStatId(battlerDef); - if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerDef]) + if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & (1u << battlerDef)) && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF))) modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); } @@ -9367,7 +9367,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_QUARK_DRIVE: { u8 defHighestStat = GetHighestStatId(battlerDef); - if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerDef]) + if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battlerDef)) && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF))) modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); } @@ -10335,7 +10335,7 @@ static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 move mod = UQ_4_12(1.0); } - if (gBattleStruct->distortedTypeMatchups & gBitTable[battlerDef] || (gBattleStruct->aiCalcInProgress && ShouldTeraShellDistortTypeMatchups(move, battlerDef))) + if (gBattleStruct->distortedTypeMatchups & (1u << battlerDef) || (gBattleStruct->aiCalcInProgress && ShouldTeraShellDistortTypeMatchups(move, battlerDef))) { mod = UQ_4_12(0.5); if (recordAbilities) @@ -11245,7 +11245,7 @@ bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item) | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_SECRET_BASE)) - && (gWishFutureKnock.knockedOffMons[stealerSide] & gBitTable[gBattlerPartyIndexes[battlerStealing]])) + && (gWishFutureKnock.knockedOffMons[stealerSide] & (1u << gBattlerPartyIndexes[battlerStealing]))) { return FALSE; } diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 8113da48a9..5a5816142c 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -209,13 +209,13 @@ void AssignUsableZMoves(u32 battler, u16 *moves) for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE && IsViableZMove(battler, moves[i])) - gBattleStruct->zmove.possibleZMoves[battler] |= gBitTable[i]; + gBattleStruct->zmove.possibleZMoves[battler] |= 1u << i; } } bool32 TryChangeZTrigger(u32 battler, u32 moveIndex) { - bool32 viableZMove = (gBattleStruct->zmove.possibleZMoves[battler] & gBitTable[moveIndex]) != 0; + bool32 viableZMove = (gBattleStruct->zmove.possibleZMoves[battler] & (1u << moveIndex)) != 0; if (gBattleStruct->zmove.viable && !viableZMove) HideGimmickTriggerSprite(); // Was a viable z move, now is not -> slide out diff --git a/src/pokemon.c b/src/pokemon.c index 306e310372..1acaa3a2ed 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2080,14 +2080,14 @@ u8 CountAliveMonsInBattle(u8 caseId, u32 battler) case BATTLE_ALIVE_EXCEPT_BATTLER: for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (i != battler && !(gAbsentBattlerFlags & gBitTable[i])) + if (i != battler && !(gAbsentBattlerFlags & (1u << i))) retVal++; } break; case BATTLE_ALIVE_SIDE: for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (GetBattlerSide(i) == GetBattlerSide(battler) && !(gAbsentBattlerFlags & gBitTable[i])) + if (GetBattlerSide(i) == GetBattlerSide(battler) && !(gAbsentBattlerFlags & (1u << i))) retVal++; } break; @@ -2115,7 +2115,7 @@ u8 GetDefaultMoveTarget(u8 battlerId) } else { - if ((gAbsentBattlerFlags & gBitTable[opposing])) + if ((gAbsentBattlerFlags & (1u << opposing))) return GetBattlerAtPosition(BATTLE_PARTNER(opposing)); else return GetBattlerAtPosition(opposing); @@ -2691,7 +2691,7 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) || substruct1->move2 == move || substruct1->move3 == move || substruct1->move4 == move) - retVal |= gBitTable[i]; + retVal |= (1u << i); i++; } } @@ -5316,7 +5316,7 @@ void RandomlyGivePartyPokerus(struct Pokemon *party) } while (!GetMonData(mon, MON_DATA_SPECIES, 0) || GetMonData(mon, MON_DATA_IS_EGG, 0)); - if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd]))) + if (!(CheckPartyHasHadPokerus(party, 1u << rnd))) { u8 rnd2; @@ -6651,9 +6651,9 @@ void TrySpecialOverworldEvo(void) for (i = 0; i < PARTY_SIZE; i++) { u16 targetSpecies = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_OVERWORLD_SPECIAL, evoMethod, SPECIES_NONE); - if (targetSpecies != SPECIES_NONE && !(sTriedEvolving & gBitTable[i])) + if (targetSpecies != SPECIES_NONE && !(sTriedEvolving & (1u << i))) { - sTriedEvolving |= gBitTable[i]; + sTriedEvolving |= 1u << i; if(gMain.callback2 == TrySpecialOverworldEvo) // This fixes small graphics glitches. EvolutionScene(&gPlayerParty[i], targetSpecies, canStopEvo, i); else diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 2ac33a08a0..c32e86b525 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -741,7 +741,7 @@ void RecordedBattle_CheckMovesetChanges(u8 mode) movePp.moves[j] = gBattleMons[battlerId].moves[moveSlots[j]]; movePp.currentPp[j] = gBattleMons[battlerId].pp[moveSlots[j]]; movePp.maxPp[j] = ppBonuses[moveSlots[j]]; - mimickedMoveSlots[j] = (gDisableStructs[battlerId].mimickedMoves & gBitTable[j]) >> j; + mimickedMoveSlots[j] = (gDisableStructs[battlerId].mimickedMoves & (1u << j)) >> j; } for (j = 0; j < MAX_MON_MOVES; j++) { diff --git a/src/script_movement.c b/src/script_movement.c index 10517dfc8e..d67afd9972 100644 --- a/src/script_movement.c +++ b/src/script_movement.c @@ -142,19 +142,19 @@ static void LoadObjectEventIdFromMovementScript(u8 taskId, u8 moveScrId, u8 *obj static void ClearMovementScriptFinished(u8 taskId, u8 moveScrId) { - u16 mask = ~gBitTable[moveScrId]; + u16 mask = ~(1u << moveScrId); gTasks[taskId].data[0] &= mask; } static void SetMovementScriptFinished(u8 taskId, u8 moveScrId) { - gTasks[taskId].data[0] |= gBitTable[moveScrId]; + gTasks[taskId].data[0] |= (1u << moveScrId); } static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId) { - u16 moveScriptFinished = (u16)gTasks[taskId].data[0] & gBitTable[moveScrId]; + u16 moveScriptFinished = (u16)gTasks[taskId].data[0] & (1u << moveScrId); if (moveScriptFinished != 0) return TRUE; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index aa7c8ee930..c89803ffb2 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -852,7 +852,7 @@ bool8 GetHillTrainerFlag(u8 objectEventId) u32 trainerIndexStart = GetFloorId() * HILL_TRAINERS_PER_FLOOR; u8 bitId = gObjectEvents[objectEventId].localId - 1 + trainerIndexStart; - return gSaveBlock2Ptr->frontier.trainerFlags & gBitTable[bitId]; + return gSaveBlock2Ptr->frontier.trainerFlags & (1u << bitId); } void SetHillTrainerFlag(void) @@ -864,7 +864,7 @@ void SetHillTrainerFlag(void) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_A) { - gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[trainerIndexStart + i]; + gSaveBlock2Ptr->frontier.trainerFlags |= 1u << (trainerIndexStart + i); break; } } @@ -875,7 +875,7 @@ void SetHillTrainerFlag(void) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_B) { - gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[trainerIndexStart + i]; + gSaveBlock2Ptr->frontier.trainerFlags |= 1u << (trainerIndexStart + i); break; } } diff --git a/src/util.c b/src/util.c index 77d9cde2f1..002b2fabf0 100644 --- a/src/util.c +++ b/src/util.c @@ -4,42 +4,6 @@ #include "palette.h" #include "constants/rgb.h" -const u32 gBitTable[] = -{ - 1 << 0, - 1 << 1, - 1 << 2, - 1 << 3, - 1 << 4, - 1 << 5, - 1 << 6, - 1 << 7, - 1 << 8, - 1 << 9, - 1 << 10, - 1 << 11, - 1 << 12, - 1 << 13, - 1 << 14, - 1 << 15, - 1 << 16, - 1 << 17, - 1 << 18, - 1 << 19, - 1 << 20, - 1 << 21, - 1 << 22, - 1 << 23, - 1 << 24, - 1 << 25, - 1 << 26, - 1 << 27, - 1 << 28, - 1 << 29, - 1 << 30, - 1 << 31, -}; - static const struct SpriteTemplate sInvisibleSpriteTemplate = { .tileTag = 0, diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 92789710f7..53e63dc7cf 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -769,7 +769,7 @@ static u32 CountAiExpectMoves(struct ExpectedAIAction *expectedAction, u32 battl u32 i, countExpected = 0; for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBitTable[i] & expectedAction->moveSlots) + if ((1u << i) & expectedAction->moveSlots) { if (printLog) PrintAiMoveLog(battlerId, i, gBattleMons[battlerId].moves[i], gBattleStruct->aiFinalScore[battlerId][expectedAction->target][i]); @@ -801,7 +801,7 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBitTable[i] & expectedAction->moveSlots) + if ((1u << i) & expectedAction->moveSlots) { expectedMoveId = gBattleMons[battlerId].moves[i]; if (!expectedAction->notMove) @@ -917,8 +917,8 @@ static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct Exp // We expect move 'i', but it has the same best score as another move that we didn't expect. if (scores[i] == scores[bestScoreId] && !aiAction->notMove - && (aiAction->moveSlots & gBitTable[i]) - && !(aiAction->moveSlots & gBitTable[bestScoreId])) + && (aiAction->moveSlots & (1u << i)) + && !(aiAction->moveSlots & (1u << bestScoreId))) { Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: EXPECT_MOVE %S has the same best score(%d) as not expected MOVE %S", filename, aiAction->sourceLine, GetMoveName(moves[i]), scores[i], GetMoveName(moves[bestScoreId])); @@ -926,8 +926,8 @@ static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct Exp // We DO NOT expect move 'i', but it has the same best score as another move. if (scores[i] == scores[bestScoreId] && aiAction->notMove - && (aiAction->moveSlots & gBitTable[i]) - && !(aiAction->moveSlots & gBitTable[bestScoreId])) + && (aiAction->moveSlots & (1u << i)) + && !(aiAction->moveSlots & (1u << bestScoreId))) { Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: NOT_EXPECT_MOVE %S has the same best score(%d) as MOVE %S", filename, aiAction->sourceLine, GetMoveName(moves[i]), scores[i], GetMoveName(moves[bestScoreId])); @@ -940,9 +940,9 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco s32 i, scoreFromLogs = 0; if (!DATA.logAI) return; - if (DATA.aiLogPrintedForMove[battlerId] & gBitTable[moveSlot]) return; + if (DATA.aiLogPrintedForMove[battlerId] & (1u << moveSlot)) return; - DATA.aiLogPrintedForMove[battlerId] |= gBitTable[moveSlot]; + DATA.aiLogPrintedForMove[battlerId] |= 1u << moveSlot; Test_MgbaPrintf("Score Log for move %S:\n", GetMoveName(moveId)); for (i = 0; i < MAX_AI_LOG_LINES; i++) { @@ -2187,7 +2187,7 @@ static void TryMarkExpectMove(u32 sourceLine, struct BattlePokemon *battler, str id = DATA.expectedAiActionIndex[battlerId]; DATA.expectedAiActions[battlerId][id].type = B_ACTION_USE_MOVE; - DATA.expectedAiActions[battlerId][id].moveSlots |= gBitTable[moveSlot]; + DATA.expectedAiActions[battlerId][id].moveSlots |= 1 << moveSlot; DATA.expectedAiActions[battlerId][id].target = target; DATA.expectedAiActions[battlerId][id].explicitTarget = ctx->explicitTarget; DATA.expectedAiActions[battlerId][id].sourceLine = sourceLine; From 8ca234de7e1e18459989e59919de3881a3941274 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sat, 17 Aug 2024 19:38:55 +0200 Subject: [PATCH 123/544] Removed gBitTable usage again (#5193) Co-authored-by: Hedara --- src/battle_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 25cee6dfa9..10b5f25e0c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4738,9 +4738,9 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) speed *= 2; else if (ability == ABILITY_SLOW_START && gDisableStructs[battler].slowStartTimer != 0) speed /= 2; - else if (ability == ABILITY_PROTOSYNTHESIS && (gBattleWeather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battler])) + else if (ability == ABILITY_PROTOSYNTHESIS && (gBattleWeather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & (1u << battler))) speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; - else if (ability == ABILITY_QUARK_DRIVE && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battler])) + else if (ability == ABILITY_QUARK_DRIVE && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battler))) speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; // stat stages From af12697845f83b2a9984556af436c9668a938c5a Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Tue, 20 Aug 2024 04:23:33 -0700 Subject: [PATCH 124/544] Adds OW_BERRY_IMMORTAL (#5187) * Added OW_BERRY_IMMORTAL Added cases for OW_BERRY_IMMORTAL * removed one preproc * removed other preproc * Fixed identation * Set config to FALSE * Update include/config/overworld.h per https://github.com/rh-hideout/pokeemerald-expansion/pull/5187#discussion_r1720747388 Co-authored-by: Bassoonian * Reordered condition per https://github.com/rh-hideout/pokeemerald-expansion/pull/5187\#discussion_r1720747652 * Update include/config/overworld.h --------- Co-authored-by: Bassoonian --- include/config/overworld.h | 1 + src/berry.c | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/config/overworld.h b/include/config/overworld.h index b47cef5c50..63479f1831 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -33,6 +33,7 @@ #define OW_BERRY_GROWTH_RATE GEN_3 // Presets for how long each Berry plant takes to grow. #define OW_BERRY_YIELD_RATE GEN_3 // Presets for how many Berries each plant can yield. #define OW_BERRY_DRAIN_RATE GEN_6_ORAS // If OW_BERRY_MOISTURE is enabled, this setting changes how fast the soil dries out. GEN_4 uses a Berry-dependent drain rate, GEN_6_XY dries out in 24 hours (4 hours with the relevant Mulch) and GEN_6_ORAS dries out in 4 hours. Other values are illegal. +#define OW_BERRY_IMMORTAL FALSE // If enabled, once a Berry tree has grown a Berry, the tree will not disappear until picked by the player. // Overworld Pokémon #define OW_POKEMON_OBJECT_EVENTS TRUE // Adds Object Event fields for every species. Can be used for NPCs using the OBJ_EVENT_GFX_SPECIES macro (eg. OBJ_EVENT_GFX_SPECIES(BULBASAUR)) diff --git a/src/berry.c b/src/berry.c index 9f187bd1e2..1a1c3b7f1f 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1817,6 +1817,8 @@ bool32 BerryTreeGrow(struct BerryTree *tree) tree->stage = BERRY_STAGE_BERRIES; break; case BERRY_STAGE_BERRIES: + if (OW_BERRY_IMMORTAL) + break; tree->watered = 0; tree->berryYield = 0; tree->stage = BERRY_STAGE_SPROUTED; @@ -1842,16 +1844,16 @@ static u16 GetMulchAffectedGrowthRate(u16 berryDuration, u8 mulch, u8 stage) void BerryTreeTimeUpdate(s32 minutes) { int i; - u8 drainVal; + u32 drainVal; struct BerryTree *tree; for (i = 0; i < BERRY_TREES_COUNT; i++) { tree = &gSaveBlock1Ptr->berryTrees[i]; - if (tree->berry && tree->stage && !tree->stopGrowth) + if (tree->berry && tree->stage && !tree->stopGrowth && (!OW_BERRY_IMMORTAL || tree->stage != BERRY_STAGE_BERRIES)) { - if (minutes >= GetStageDurationByBerryType(tree->berry) * 71) + if ((!OW_BERRY_IMMORTAL) && (minutes >= GetStageDurationByBerryType(tree->berry) * 71)) { *tree = gBlankBerryTree; } From 5c55cc374815fb99ef43f55b8d2332d3798efc59 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 21 Aug 2024 07:50:41 +0100 Subject: [PATCH 125/544] [preproc] support arbitrary expressions in enums --- tools/preproc/asm_file.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index ca8b8cc4ae..36b6c7ed06 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -520,6 +520,7 @@ bool AsmFile::ParseEnum() long currentHeaderLine = SkipWhitespaceAndEol(); std::string enumName = ReadIdentifier(); currentHeaderLine += SkipWhitespaceAndEol(); + std::string enumBase = "0"; long enumCounter = 0; long symbolCount = 0; @@ -542,11 +543,28 @@ bool AsmFile::ParseEnum() if (m_buffer[m_pos] == '=') { m_pos++; - currentHeaderLine += SkipWhitespaceAndEol(); - enumCounter = ReadInteger(headerFilename, currentHeaderLine); - currentHeaderLine += SkipWhitespaceAndEol(); + SkipWhitespace(); + enumBase.clear(); + for (;;) + { + if (m_pos == m_size) + RaiseError("unexpected EOF"); + if (m_buffer[m_pos] == ',') + break; + if (m_buffer[m_pos] == '\n') + { + currentHeaderLine++; + enumBase.push_back(' '); + } + else + { + enumBase.push_back(m_buffer[m_pos]); + } + m_pos++; + } + enumCounter = 0; } - std::printf(".equiv %s, %ld\n", currentIdentName.c_str(), enumCounter); + std::printf(".equiv %s, (%s) + %ld\n", currentIdentName.c_str(), enumBase.c_str(), enumCounter); enumCounter++; symbolCount++; } From 77148f83a6b67c1874e80eb5793a52579a015da0 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 21 Aug 2024 09:57:28 -0400 Subject: [PATCH 126/544] DoBattleIntro state documentation (#5231) * DoBattleIntro state documentation * Removed unused state * Update src/battle_main.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Fixed state jumps * BattleStruct state uses enum * Renamed state enums --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/battle.h | 26 ++++++++++++- src/battle_main.c | 95 +++++++++++++++++++++++------------------------ 2 files changed, 71 insertions(+), 50 deletions(-) diff --git a/include/battle.h b/include/battle.h index 6d81bc146e..084c09f789 100644 --- a/include/battle.h +++ b/include/battle.h @@ -607,6 +607,30 @@ struct BattleVideo { }; #endif +enum BattleIntroStates +{ + BATTLE_INTRO_STATE_GET_MON_DATA, + BATTLE_INTRO_STATE_LOOP_BATTLER_DATA, + BATTLE_INTRO_STATE_PREPARE_BG_SLIDE, + BATTLE_INTRO_STATE_WAIT_FOR_BG_SLIDE, + BATTLE_INTRO_STATE_DRAW_SPRITES, + BATTLE_INTRO_STATE_DRAW_PARTY_SUMMARY, + BATTLE_INTRO_STATE_WAIT_FOR_PARTY_SUMMARY, + BATTLE_INTRO_STATE_INTRO_TEXT, + BATTLE_INTRO_STATE_WAIT_FOR_INTRO_TEXT, + BATTLE_INTRO_STATE_TRAINER_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_TRAINER_1_SEND_OUT_ANIM, + BATTLE_INTRO_STATE_TRAINER_2_SEND_OUT_ANIM, + BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM, + BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT, + BATTLE_INTRO_STATE_PRINT_PLAYER_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_WAIT_FOR_PLAYER_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_PRINT_PLAYER_1_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_PRINT_PLAYER_2_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_SET_DEX_AND_BATTLE_VARS +}; + struct BattleStruct { u8 turnEffectsTracker; @@ -726,7 +750,7 @@ struct BattleStruct struct BattleGimmickData gimmick; const u8 *trainerSlideMsg; bool8 trainerSlideLowHpMsgDone; - u8 introState; + enum BattleIntroStates introState:8; u8 ateBerry[2]; // array id determined by side, each party pokemon as bit u8 stolenStats[NUM_BATTLE_STATS]; // hp byte is used for which stats to raise, other inform about by how many stages u8 lastMoveFailed; // as bits for each battler, for the sake of Stomping Tantrum diff --git a/src/battle_main.c b/src/battle_main.c index e0ab912e4f..72b2f0838a 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3425,26 +3425,25 @@ static void DoBattleIntro(void) { s32 i; u32 battler; - u8 *state = &gBattleStruct->introState; - switch (*state) + switch (gBattleStruct->introState) { - case 0: // Get Data of all battlers. + case BATTLE_INTRO_STATE_GET_MON_DATA: battler = gBattleCommunication[1]; BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 0); MarkBattlerForControllerExec(battler); - (*state)++; + gBattleStruct->introState++; break; - case 1: // Loop through all battlers. + case BATTLE_INTRO_STATE_LOOP_BATTLER_DATA: if (!gBattleControllerExecFlags) { if (++gBattleCommunication[1] == gBattlersCount) - (*state)++; + gBattleStruct->introState++; else - *state = 0; + gBattleStruct->introState = BATTLE_INTRO_STATE_GET_MON_DATA; } break; - case 2: // Start graphical intro slide. + case BATTLE_INTRO_STATE_PREPARE_BG_SLIDE: if (!gBattleControllerExecFlags) { battler = GetBattlerAtPosition(0); @@ -3452,14 +3451,14 @@ static void DoBattleIntro(void) MarkBattlerForControllerExec(battler); gBattleCommunication[0] = 0; gBattleCommunication[1] = 0; - (*state)++; + gBattleStruct->introState++; } break; - case 3: // Wait for intro slide. + case BATTLE_INTRO_STATE_WAIT_FOR_BG_SLIDE: if (!gBattleControllerExecFlags) - (*state)++; + gBattleStruct->introState++; break; - case 4: // Copy battler data gotten in cases 0 and 1. Draw trainer/mon sprite. + case BATTLE_INTRO_STATE_DRAW_SPRITES: for (battler = 0; battler < gBattlersCount; battler++) { if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerSide(battler) == B_SIDE_PLAYER) @@ -3539,17 +3538,17 @@ static void DoBattleIntro(void) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - (*state)++; + gBattleStruct->introState++; } else // Skip party summary since it is a wild battle. { if (B_FAST_INTRO == TRUE) - *state = 7; // Don't wait for sprite, print message at the same time. + gBattleStruct->introState = BATTLE_INTRO_STATE_INTRO_TEXT; // Don't wait for sprite, print message at the same time. else - *state = 6; // Wait for sprite to load. + gBattleStruct->introState++; // Wait for sprite to load. } break; - case 5: // draw party summary in trainer battles + case BATTLE_INTRO_STATE_DRAW_PARTY_SUMMARY: if (!gBattleControllerExecFlags) { struct HpAndStatus hpStatus[PARTY_SIZE]; @@ -3592,48 +3591,48 @@ static void DoBattleIntro(void) BtlController_EmitDrawPartyStatusSummary(battler, BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY); MarkBattlerForControllerExec(battler); - (*state)++; + gBattleStruct->introState++; } break; - case 6: // wait for previous action to complete + case BATTLE_INTRO_STATE_WAIT_FOR_PARTY_SUMMARY: if (!gBattleControllerExecFlags) - (*state)++; + gBattleStruct->introState++; break; - case 7: // print battle intro message + case BATTLE_INTRO_STATE_INTRO_TEXT: if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) { PrepareStringBattle(STRINGID_INTROMSG, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); - (*state)++; + gBattleStruct->introState++; } break; - case 8: // wait for intro message to be printed + case BATTLE_INTRO_STATE_WAIT_FOR_INTRO_TEXT: if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - (*state)++; + gBattleStruct->introState++; } else { if (B_FAST_INTRO == TRUE) - *state = 15; // Wait for text to be printed. + gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; else - *state = 14; // Wait for text and sprite. + gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM; } } break; - case 9: // print opponent sends out + case BATTLE_INTRO_STATE_TRAINER_SEND_OUT_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); else PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); - (*state)++; + gBattleStruct->introState++; break; - case 10: // wait for opponent sends out text + case BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_SEND_OUT_TEXT: if (!gBattleControllerExecFlags) - (*state)++; + gBattleStruct->introState++; break; - case 11: // first opponent's mon send out animation + case BATTLE_INTRO_STATE_TRAINER_1_SEND_OUT_ANIM: if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); else @@ -3641,11 +3640,9 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A); MarkBattlerForControllerExec(battler); - (*state)++; + gBattleStruct->introState++; break; - case 12: // nothing - (*state)++; - case 13: // second opponent's mon send out + case BATTLE_INTRO_STATE_TRAINER_2_SEND_OUT_ANIM: if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3658,19 +3655,19 @@ static void DoBattleIntro(void) } if (B_FAST_INTRO == TRUE && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK))) - *state = 15; // Print at the same time as trainer sends out second mon. + gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; // Print at the same time as trainer sends out second mon. else - (*state)++; + gBattleStruct->introState++; break; - case 14: // wait for opponent 2 send out + case BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM: if (!gBattleControllerExecFlags) - (*state)++; + gBattleStruct->introState++; break; - case 15: // wait for wild battle message + case BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT: if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) - (*state)++; + gBattleStruct->introState++; break; - case 16: // print player sends out + case BATTLE_INTRO_STATE_PRINT_PLAYER_SEND_OUT_TEXT: if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3689,9 +3686,9 @@ static void DoBattleIntro(void) PrepareStringBattle(STRINGID_INTROSENDOUT, battler); } - (*state)++; + gBattleStruct->introState++; break; - case 17: // wait for player send out message + case BATTLE_INTRO_STATE_WAIT_FOR_PLAYER_SEND_OUT_TEXT: if (!(gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleControllerExecFlags)) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3700,10 +3697,10 @@ static void DoBattleIntro(void) battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); if (!IsBattlerMarkedForControllerExec(battler)) - (*state)++; + gBattleStruct->introState++; } break; - case 18: // player 1 send out + case BATTLE_INTRO_STATE_PRINT_PLAYER_1_SEND_OUT_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); else @@ -3711,9 +3708,9 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A); MarkBattlerForControllerExec(battler); - (*state)++; + gBattleStruct->introState++; break; - case 19: // player 2 send out + case BATTLE_INTRO_STATE_PRINT_PLAYER_2_SEND_OUT_TEXT: if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3724,9 +3721,9 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A); MarkBattlerForControllerExec(battler); } - (*state)++; + gBattleStruct->introState++; break; - case 20: // set dex and battle vars + case BATTLE_INTRO_STATE_SET_DEX_AND_BATTLE_VARS: if (!gBattleControllerExecFlags) { for (battler = 0; battler < gBattlersCount; battler++) From 17f68563ebe4164d2e16a603a167a9efc92905d4 Mon Sep 17 00:00:00 2001 From: tertu Date: Sat, 24 Aug 2024 12:07:00 -0500 Subject: [PATCH 127/544] Remove support for the original LCG random number generator (#5078) --- include/battle.h | 7 ----- include/random.h | 56 +++++++------------------------------- src/battle_main.c | 6 ----- src/main.c | 57 +++++++++++++-------------------------- src/random.c | 34 ----------------------- test/random.c | 22 ++++----------- test/test_runner_battle.c | 24 +++++------------ 7 files changed, 38 insertions(+), 168 deletions(-) diff --git a/include/battle.h b/include/battle.h index 084c09f789..ab0d356d95 100644 --- a/include/battle.h +++ b/include/battle.h @@ -600,12 +600,10 @@ struct LostItem u16 stolen:1; }; -#if HQ_RANDOM == TRUE struct BattleVideo { u32 battleTypeFlags; rng_value_t rngSeed; }; -#endif enum BattleIntroStates { @@ -707,12 +705,7 @@ struct BattleStruct u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker] union { struct LinkBattlerHeader linkBattlerHeader; - - #if HQ_RANDOM == FALSE - u32 battleVideo[2]; - #else struct BattleVideo battleVideo; - #endif } multiBuffer; u8 wishPerishSongState; u8 wishPerishSongBattlerId; diff --git a/include/random.h b/include/random.h index d254a08f03..b5ce987f39 100644 --- a/include/random.h +++ b/include/random.h @@ -6,25 +6,21 @@ #define ISO_RANDOMIZE1(val)(1103515245 * (val) + 24691) #define ISO_RANDOMIZE2(val)(1103515245 * (val) + 12345) -/* Some functions have been added to support HQ_RANDOM. +/* Some functions have been added to support Expansion's RNG implementation. * -* If using HQ_RANDOM, you cannot call Random() in interrupt handlers safely. -* AdvanceRandom() is provided to handle burning numbers in the VBlank handler -* if you choose to do that, and can be used regardless of HQ_RANDOM setting. +* LocalRandom(*val) provides a higher-quality replacement for uses of +* ISO_RANDOMIZE in vanilla Emerald. You can use LocalRandomSeed(u32) to +* create a local state. +* +* It is no longer possible to call Random() in interrupt handlers safely. +* AdvanceRandom() is provided to handle burning numbers in VBlank handlers. * If you need to use random numbers in the VBlank handler, a local state * should be used instead. * -* LocalRandom(*val) allows you to have local random states that are the same -* type as the global states regardless of HQ_RANDOM setting, which is useful -* if you want to be able to set them from or assign them to gRngValue. -* LocalRandomSeed(u32) returns a properly seeded rng_value_t. -* -* Random2_32() was added to HQ_RANDOM because the output of the generator is -* always 32 bits and Random()/Random2() are just wrappers in that mode. It is -* also available in non-HQ mode for consistency. +* Random2_32() was added, even though it is not used directly, because the +* underlying RNG always outputs 32 bits. */ -#if HQ_RANDOM == TRUE struct Sfc32State { u32 a; u32 b; @@ -70,40 +66,6 @@ static inline u16 Random2(void) } void AdvanceRandom(void); -#else -typedef u32 rng_value_t; - -#define RNG_VALUE_EMPTY 0 - -//Returns a 16-bit pseudorandom number -u16 Random(void); -u16 Random2(void); - -//Sets the initial seed value of the pseudorandom number generator -void SeedRng(u16 seed); -void SeedRng2(u16 seed); - -//Returns a 32-bit pseudorandom number -#define Random32() (Random() | (Random() << 16)) -#define Random2_32() (Random2() | (Random2() << 16)) - -static inline u16 LocalRandom(rng_value_t *val) -{ - *val = ISO_RANDOMIZE1(*val); - return *val >> 16; -} - -static inline void AdvanceRandom(void) -{ - Random(); -} - -static inline rng_value_t LocalRandomSeed(u32 seed) -{ - return seed; -} - -#endif extern rng_value_t gRngValue; extern rng_value_t gRng2Value; diff --git a/src/battle_main.c b/src/battle_main.c index 72b2f0838a..68296138ef 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1692,15 +1692,9 @@ static void CB2_HandleStartMultiBattle(void) case 8: if (IsLinkTaskFinished()) { - #if HQ_RANDOM == TRUE struct BattleVideo *ptr = &gBattleStruct->multiBuffer.battleVideo; ptr->battleTypeFlags = gBattleTypeFlags; ptr->rngSeed = gRecordedBattleRngSeed; - #else - u32 *ptr = gBattleStruct->multiBuffer.battleVideo; - ptr[0] = gBattleTypeFlags; - ptr[1] = gRecordedBattleRngSeed; // UB: overwrites berry data - #endif SendBlock(BitmaskAllOtherLinkPlayers(), ptr, sizeof(gBattleStruct->multiBuffer.battleVideo)); gBattleCommunication[MULTIUSE_STATE]++; diff --git a/src/main.c b/src/main.c index b0bba2f3f3..47907a0111 100644 --- a/src/main.c +++ b/src/main.c @@ -205,12 +205,9 @@ void SetMainCallback2(MainCallback callback) void StartTimer1(void) { - if (HQ_RANDOM) - { - REG_TM2CNT_L = 0; - REG_TM2CNT_H = TIMER_ENABLE | TIMER_COUNTUP; - } + REG_TM2CNT_L = 0; + REG_TM2CNT_H = TIMER_ENABLE | TIMER_COUNTUP; REG_TM1CNT_H = TIMER_ENABLE; } @@ -218,24 +215,12 @@ void SeedRngAndSetTrainerId(void) { u32 val; - if (HQ_RANDOM) - { - REG_TM1CNT_H = 0; - REG_TM2CNT_H = 0; - val = ((u32)REG_TM2CNT_L) << 16; - val |= REG_TM1CNT_L; - SeedRng(val); - sTrainerId = Random(); - } - else - { - // Do it exactly like it was originally done, including not stopping - // the timer beforehand. - val = REG_TM1CNT_L; - SeedRng((u16)val); - REG_TM1CNT_H = 0; - sTrainerId = val; - } + REG_TM1CNT_H = 0; + REG_TM2CNT_H = 0; + val = ((u32)REG_TM2CNT_L) << 16; + val |= REG_TM1CNT_L; + SeedRng(val); + sTrainerId = Random(); } u16 GetGeneratedTrainerIdLower(void) @@ -254,22 +239,16 @@ void EnableVCountIntrAtLine150(void) #ifdef BUGFIX static void SeedRngWithRtc(void) { - #if HQ_RANDOM == FALSE - u32 seed = RtcGetMinuteCount(); - seed = (seed >> 16) ^ (seed & 0xFFFF); - SeedRng(seed); - #else - #define BCD8(x) ((((x) >> 4) & 0xF) * 10 + ((x) & 0xF)) - u32 seconds; - struct SiiRtcInfo rtc; - RtcGetInfo(&rtc); - seconds = - ((HOURS_PER_DAY * RtcGetDayCount(&rtc) + BCD8(rtc.hour)) - * MINUTES_PER_HOUR + BCD8(rtc.minute)) - * SECONDS_PER_MINUTE + BCD8(rtc.second); - SeedRng(seconds); - #undef BCD8 - #endif + #define BCD8(x) ((((x) >> 4) & 0xF) * 10 + ((x) & 0xF)) + u32 seconds; + struct SiiRtcInfo rtc; + RtcGetInfo(&rtc); + seconds = + ((HOURS_PER_DAY * RtcGetDayCount(&rtc) + BCD8(rtc.hour)) + * MINUTES_PER_HOUR + BCD8(rtc.minute)) + * SECONDS_PER_MINUTE + BCD8(rtc.second); + SeedRng(seconds); + #undef BCD8 } #endif diff --git a/src/random.c b/src/random.c index 9d43ae3740..969aa6d404 100644 --- a/src/random.c +++ b/src/random.c @@ -8,7 +8,6 @@ rng_value_t gRngValue; rng_value_t gRng2Value; -#if HQ_RANDOM == TRUE EWRAM_DATA static volatile bool8 sRngLoopUnlocked; @@ -112,39 +111,6 @@ void AdvanceRandom(void) #define LOOP_RANDOM ((u16)(_SFC32_Next(state) >> 16)) -#else -EWRAM_DATA static u32 sRandCount = 0; - -u16 Random(void) -{ - gRngValue = ISO_RANDOMIZE1(gRngValue); - sRandCount++; - return gRngValue >> 16; -} - -void SeedRng(u16 seed) -{ - gRngValue = seed; -} - -void SeedRng2(u16 seed) -{ - gRng2Value = seed; -} - -u16 Random2(void) -{ - gRng2Value = ISO_RANDOMIZE1(gRng2Value); - return gRng2Value >> 16; -} - -#define LOOP_RANDOM_START -#define LOOP_RANDOM_END - -#define LOOP_RANDOM (Random()) - -#endif - #define SHUFFLE_IMPL \ u32 tmp; \ LOOP_RANDOM_START; \ diff --git a/test/random.c b/test/random.c index 0232ff1547..238a76467e 100644 --- a/test/random.c +++ b/test/random.c @@ -196,13 +196,8 @@ TEST("RandomElement generates a uniform distribution") TEST("RandomUniform mul-based faster than mod-based (compile-time)") { - #if HQ_RANDOM == TRUE - const u32 expectedMulSum = 6; - const u32 expectedModSum = 4; - #else - const u32 expectedMulSum = 3; - const u32 expectedModSum = 4; - #endif + const u32 expectedMulSum = 6; + const u32 expectedModSum = 4; struct Benchmark mulBenchmark, modBenchmark; u32 mulSum = 0, modSum = 0; @@ -234,13 +229,8 @@ TEST("RandomUniform mul-based faster than mod-based (compile-time)") TEST("RandomUniform mul-based faster than mod-based (run-time)") { - #if HQ_RANDOM == TRUE - const u32 expectedMulSum = 289; - const u32 expectedModSum = 205; - #else - const u32 expectedMulSum = 232; - const u32 expectedModSum = 249; - #endif + const u32 expectedMulSum = 289; + const u32 expectedModSum = 205; u32 i; struct Benchmark mulBenchmark, modBenchmark; u32 mulSum = 0, modSum = 0; @@ -264,7 +254,6 @@ TEST("RandomUniform mul-based faster than mod-based (run-time)") EXPECT_EQ(modSum, expectedModSum); } -#if HQ_RANDOM == TRUE TEST("Thumb and C SFC32 implementations produce the same results") { u32 thumbSum; @@ -285,5 +274,4 @@ TEST("Thumb and C SFC32 implementations produce the same results") } EXPECT_EQ(thumbSum, cSum); -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 11a6565663..9a1ad8d708 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -35,20 +35,12 @@ #define STATE gBattleTestRunnerState #define DATA gBattleTestRunnerState->data -#if HQ_RANDOM == TRUE #define RNG_SEED_DEFAULT {0, 0, 0, 0} static inline bool32 RngSeedNotDefault(const rng_value_t *seed) { return (seed->a | seed->b | seed->c | seed->ctr) != 0; } -#else -#define RNG_SEED_DEFAULT 0x00000000 -static inline bool32 RngSeedNotDefault(const rng_value_t *seed) -{ - return *seed != RNG_SEED_DEFAULT; -} -#endif #undef Q_4_12 #define Q_4_12(n) (s32)((n) * 4096) @@ -1357,17 +1349,13 @@ static void CB2_BattleTest_NextParameter(void) static inline rng_value_t MakeRngValue(const u16 seed) { - #if HQ_RANDOM == TRUE - int i; - rng_value_t result = {0, 0, seed, 1}; - for (i = 0; i < 16; i++) - { + int i; + rng_value_t result = {0, 0, seed, 1}; + for (i = 0; i < 16; i++) + { _SFC32_Next(&result); - } - return result; - #else - return ISO_RANDOMIZE1(seed); - #endif + } + return result; } static void CB2_BattleTest_NextTrial(void) From 68e470f84a44f52e36ad50f0928e46f550345a15 Mon Sep 17 00:00:00 2001 From: Galaxeeh <154106034+Galaxeeh@users.noreply.github.com> Date: Sat, 24 Aug 2024 13:51:18 -0500 Subject: [PATCH 128/544] Dynamic Move Display fixes (#5251) * Weatherball fire type check changed to WEATHER_DROUGHT, added overworld check for field terrain set by weather dependent on configs * Update src/pokemon.c FRICKIN INDENTS LMAO Co-authored-by: Eduardo Quezada <93919226+equezada-jej@users.noreply.github.com> --------- Co-authored-by: Eduardo Quezada <93919226+equezada-jej@users.noreply.github.com> --- src/pokemon.c | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 1acaa3a2ed..718ce00c65 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -7026,16 +7026,35 @@ u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) && ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species) || (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY) && gBattleMons[battler].species == species))) { - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) - return TYPE_ELECTRIC; - else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - return TYPE_GRASS; - else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) - return TYPE_FAIRY; - else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) - return TYPE_PSYCHIC; - else //failsafe - type = TYPE_NORMAL; + if (gMain.inBattle) + { + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + return TYPE_ELECTRIC; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + return TYPE_GRASS; + else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + return TYPE_FAIRY; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + return TYPE_PSYCHIC; + else //failsafe + type = TYPE_NORMAL; + } + else + { + switch (gWeatherPtr->currWeather) + { + case WEATHER_RAIN_THUNDERSTORM: + if (B_THUNDERSTORM_TERRAIN) + return TYPE_ELECTRIC; + break; + case WEATHER_FOG_HORIZONTAL: + case WEATHER_FOG_DIAGONAL: + if (B_OVERWORLD_FOG >= GEN_8) + return TYPE_FAIRY; + break; + } + return TYPE_NORMAL; + } } if (effect == EFFECT_WEATHER_BALL) @@ -7057,11 +7076,12 @@ u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) { switch (gWeatherPtr->currWeather) { - case WEATHER_SUNNY: + case WEATHER_DROUGHT: if (heldItem != ITEM_UTILITY_UMBRELLA) return TYPE_FIRE; break; case WEATHER_RAIN: + case WEATHER_RAIN_THUNDERSTORM: if (heldItem != ITEM_UTILITY_UMBRELLA) return TYPE_WATER; break; From 8d47db6160530855804c62bc449eaeeba5726638 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sun, 25 Aug 2024 16:39:25 -0500 Subject: [PATCH 129/544] Add Population Bomb animation (#5194) * Population Bomb animation * Update battle_anim_new.c * Update battle_anim_new.c --- data/battle_anim_scripts.s | 23 ++++++++++++++++++++++- src/battle_anim_new.c | 10 ++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 2f1a3cb73c..fdc7a59e4e 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -17630,9 +17630,30 @@ Move_MALIGNANT_CHAIN:: waitforvisualfinish end +Move_POPULATION_BOMB:: + loadspritegfx ANIM_TAG_CUT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + createvisualtask AnimTask_RandomBool, 2 + jumpretfalse PopulationBombSliceRight + jumprettrue PopulationBombSliceLeft +PopulationBombSliceRight: + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + goto PopulationBombContinue +PopulationBombSliceLeft: + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 +PopulationBombContinue: + delay 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + end + Move_TERA_BLAST:: Move_ORDER_UP:: -Move_POPULATION_BOMB:: Move_GLAIVE_RUSH:: Move_REVIVAL_BLESSING:: Move_SALT_CURE:: diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index a704a73f40..fd821250fc 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -9285,3 +9285,13 @@ static void AnimMakingItRain(struct Sprite *sprite) sprite->callback = TranslateSpriteInEllipse; sprite->callback(sprite); } + +void AnimTask_RandomBool(u8 taskId) +{ + if (RandomPercentage(RNG_NONE, 50)) + gBattleAnimArgs[ARG_RET_ID] = TRUE; + else + gBattleAnimArgs[ARG_RET_ID] = FALSE; + + DestroyAnimVisualTask(taskId); +} From 03e0472cbe93e10b3ec6e9dca8c1b459b54ece24 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 26 Aug 2024 08:58:12 -0500 Subject: [PATCH 130/544] Add I_REPEL_INCLUDE_FAINTED config and behavior (#5239) * Add I_REPEL_INCLUDE_FAINTED config * Update src/wild_encounter.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Update wild_encounter.c * Update wild_encounter.c * Update src/wild_encounter.c --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/config/item.h | 1 + src/wild_encounter.c | 10 +++------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/include/config/item.h b/include/config/item.h index 2f60739335..272848e82e 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -20,6 +20,7 @@ #define I_POWER_ITEM_BOOST GEN_LATEST // In Gen7+, Power Items grant 8 EVs instead of 4 EVs. #define I_PREMIER_BALL_BONUS GEN_LATEST // In LGPE onwards (Gen8+ here), you are given a Premier Ball for every 10 Poké Balls of any type and in the same purchase. Previously, it only applied to regular Poké Balls and only 1 could be obtained per purchase. #define I_ROTOM_CATALOG_THUNDER_SHOCK GEN_LATEST // In Gen9+, reverting Rotom to its base form will teach it Thunder Shock even if it knows another move. +#define I_REPEL_INCLUDE_FAINTED GEN_LATEST // In Gen1 and Gen6+, Repels always use the level of the first member of the party to check which wild Pokémon to prevent encounters with, even if that member is fainted. In Gen2-5, it only uses the level of the first non-fainted Pokémon. // 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/src/wild_encounter.c b/src/wild_encounter.c index ae7770aa3a..033eec56da 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -1002,14 +1002,10 @@ static bool8 IsWildLevelAllowedByRepel(u8 wildLevel) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_HP) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + if (I_REPEL_INCLUDE_FAINTED == GEN_1 || I_REPEL_INCLUDE_FAINTED >= GEN_6 || GetMonData(&gPlayerParty[i], MON_DATA_HP)) { - u8 ourLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - - if (wildLevel < ourLevel) - return FALSE; - else - return TRUE; + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + return wildLevel >= GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); } } From b6299ac4cef4a95bb50e982673ebe5a5201416a3 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Mon, 26 Aug 2024 12:16:56 -0700 Subject: [PATCH 131/544] Fix a display issue with B_SHOW_TYPES (#5201) * Moved HandleInputChooseTarget and ShowEntireFieldTargets to non-static and added them as cases to ShouldHideTypeIcon * Made ShouldHideTypeIcon easier to parse * Made ShouldHideTypeIcon a for loop * Fixed identation * Made showTypesControllerFuncs a static const array per https://github.com/rh-hideout/pokeemerald-expansion/pull/5201\#discussion_r1730336265 --- include/battle_controllers.h | 2 ++ src/battle_controller_player.c | 4 ++-- src/type_icons.c | 26 +++++++++++++++++++------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 50860a7285..5e92cac763 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -313,6 +313,8 @@ void MoveSelectionDestroyCursorAt(u8 cursorPosition); void PlayerHandleChooseMove(u32 battler); void HandleInputChooseMove(u32 battler); void HandleInputChooseTarget(u32 battler); +void HandleInputShowEntireFieldTargets(u32 battler); +void HandleInputShowTargets(u32 battler); void HandleMoveSwitching(u32 battler); void HandleChooseMoveAfterDma3(u32 battler); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 61f2b8162d..52507157e7 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -593,7 +593,7 @@ static void HideShownTargets(u32 battler) } } -static void HandleInputShowEntireFieldTargets(u32 battler) +void HandleInputShowEntireFieldTargets(u32 battler) { if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; @@ -621,7 +621,7 @@ static void HandleInputShowEntireFieldTargets(u32 battler) } } -static void HandleInputShowTargets(u32 battler) +void HandleInputShowTargets(u32 battler) { if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; diff --git a/src/type_icons.c b/src/type_icons.c index 2877d22071..361312ab91 100644 --- a/src/type_icons.c +++ b/src/type_icons.c @@ -471,15 +471,27 @@ static void FreeAllTypeIconResources(void) } } +static void (* const sShowTypesControllerFuncs[])(u32 battler) = +{ + PlayerHandleChooseMove, + HandleChooseMoveAfterDma3, + HandleInputChooseTarget, + HandleInputShowTargets, + HandleInputShowEntireFieldTargets, + HandleMoveSwitching, + HandleInputChooseMove, +}; + + static bool32 ShouldHideTypeIcon(u32 battlerId) { - return gBattlerControllerFuncs[battlerId] != PlayerHandleChooseMove - && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove - && gBattlerControllerFuncs[battlerId] != HandleChooseMoveAfterDma3 - && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove - && gBattlerControllerFuncs[battlerId] != HandleInputChooseTarget - && gBattlerControllerFuncs[battlerId] != HandleMoveSwitching - && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove; + u32 funcIndex; + + for (funcIndex = 0; funcIndex < ARRAY_COUNT(sShowTypesControllerFuncs); funcIndex++) + if (gBattlerControllerFuncs[battlerId] == sShowTypesControllerFuncs[funcIndex]) + return FALSE; + + return TRUE; } static s32 GetTypeIconHideMovement(bool32 useDoubleBattleCoords, u32 position) From 74a790f09c60b29522dc4270339813447175a5bd Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 26 Aug 2024 19:11:33 -0500 Subject: [PATCH 132/544] Chilly Reception AI --- src/battle_ai_main.c | 12 ++++++++++++ src/battle_ai_switch_items.c | 2 +- src/battle_ai_util.c | 3 ++- test/battle/ai/ai_flag_sequence_switching.c | 4 +++- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index df055d62ba..55b38f7ad7 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1739,6 +1739,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_HIT_ESCAPE: break; + case EFFECT_CHILLY_RECEPTION: + if (CountUsablePartyMons(battlerAtk) == 0) + ADJUST_SCORE(-10); + else if (weather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) || IsMoveEffectWeather(aiData->partnerMove)) + ADJUST_SCORE(-8); + else if (weather & B_WEATHER_HAIL) + ADJUST_SCORE(-2); // mainly to prevent looping between hail and snow + break; case EFFECT_BELLY_DRUM: case EFFECT_FILLET_AWAY: if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY) @@ -2773,6 +2781,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_SNOWSCAPE: case EFFECT_RAIN_DANCE: case EFFECT_SANDSTORM: + case EFFECT_CHILLY_RECEPTION: if (IsMoveEffectWeather(move)) ADJUST_SCORE(-10); break; @@ -2852,6 +2861,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_SNOWSCAPE: + case EFFECT_CHILLY_RECEPTION: if (IsBattlerAlive(battlerAtkPartner) && ShouldSetSnow(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) { @@ -3621,6 +3631,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) //fallthrough case EFFECT_HIT_ESCAPE: case EFFECT_PARTING_SHOT: + case EFFECT_CHILLY_RECEPTION: if (!IsDoubleBattle()) { switch (ShouldPivot(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, movesetIndex)) @@ -4879,6 +4890,7 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_SANDSTORM: case EFFECT_HAIL: case EFFECT_SNOWSCAPE: + case EFFECT_CHILLY_RECEPTION: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: ADJUST_SCORE(DECENT_EFFECT); diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index c31dab8936..e2d0d85a3c 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -2002,7 +2002,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, } // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. if (aceMonId != PARTY_SIZE - && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS)) + && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS || gMovesInfo[gLastUsedMove].effect == EFFECT_CHILLY_RECEPTION)) return aceMonId; return PARTY_SIZE; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index f1509fdd80..8c1cb578ed 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3262,7 +3262,8 @@ bool32 IsMoveEffectWeather(u32 move) || gMovesInfo[move].effect == EFFECT_RAIN_DANCE || gMovesInfo[move].effect == EFFECT_SANDSTORM || gMovesInfo[move].effect == EFFECT_HAIL - || gMovesInfo[move].effect == EFFECT_SNOWSCAPE)) + || gMovesInfo[move].effect == EFFECT_SNOWSCAPE + || gMovesInfo[move].effect == EFFECT_CHILLY_RECEPTION)) return TRUE; return FALSE; } diff --git a/test/battle/ai/ai_flag_sequence_switching.c b/test/battle/ai/ai_flag_sequence_switching.c index 1b4a264a24..7a0f3528bd 100644 --- a/test/battle/ai/ai_flag_sequence_switching.c +++ b/test/battle/ai/ai_flag_sequence_switching.c @@ -64,7 +64,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still fo } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lowest party index after U-Turn, Parting Shot, and Baton Pass") +AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lowest party index after U-Turn, Parting Shot, Baton Pass, and Chilly Reception") { u32 j, aiSequenceSwitchingFlag = 0, move = MOVE_NONE; @@ -72,6 +72,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lo MOVE_U_TURN, MOVE_PARTING_SHOT, MOVE_BATON_PASS, + MOVE_CHILLY_RECEPTION, }; for (j = 0; j < ARRAY_COUNT(switchMoves); j++) @@ -84,6 +85,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lo ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE); ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT); ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); + ASSUME(gMovesInfo[MOVE_CHILLY_RECEPTION].effect == EFFECT_CHILLY_RECEPTION); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag); PLAYER(SPECIES_SWELLOW) { Level (50); } OPPONENT(SPECIES_MACHOP) { Level(1); Moves(move); } From 04faf370e6875807c659cd1436783f7009a71fd9 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sun, 25 Aug 2024 17:37:15 -0700 Subject: [PATCH 133/544] Cleaned up and reordered functions --- include/field_screen_effect.h | 2 +- src/field_control_avatar.c | 48 ++-- src/field_screen_effect.c | 400 ++++++++++++++++++---------------- src/metatile_behavior.c | 5 +- 4 files changed, 248 insertions(+), 207 deletions(-) diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index b9a2ef9d5b..3f120ffdeb 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -43,6 +43,6 @@ void FadeOutOrbEffect(void); void WriteFlashScanlineEffectBuffer(u8 flashLevel); bool8 IsPlayerStandingStill(void); void DoStairWarp(u16 metatileBehavior, u16 delay); -bool8 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection); +bool32 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 58afd16310..c1d2455ff7 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -727,34 +727,38 @@ static bool8 CheckStandardWildEncounter(u16 metatileBehavior) return FALSE; } +static void StorePlayerStateAndSetupWarp(struct MapPosition *position, s32 warpEventId) +{ + StoreInitialPlayerAvatarState(); + SetupWarp(&gMapHeader, warpEventId, position); +} + static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8 direction) { - s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position); - u16 delay; + s32 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position); + u32 delay; - if (warpEventId != WARP_ID_NONE) + if (warpEventId == WARP_ID_NONE) + return FALSE; + + if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE) { - if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE) + StorePlayerStateAndSetupWarp(position, warpEventId); + DoWarp(); + return TRUE; + } + else if (IsDirectionalStairWarpMetatileBehavior(metatileBehavior, direction) == TRUE) + { + delay = 0; + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_BIKE) { - StoreInitialPlayerAvatarState(); - SetupWarp(&gMapHeader, warpEventId, position); - DoWarp(); - return TRUE; - } - else if (IsDirectionalStairWarpMetatileBehavior(metatileBehavior, direction) == TRUE) - { - delay = 0; - if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) - { - SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); - delay = 12; - } - - StoreInitialPlayerAvatarState(); - SetupWarp(&gMapHeader, warpEventId, position); - DoStairWarp(metatileBehavior, delay); - return TRUE; + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); + delay = 12; } + + StorePlayerStateAndSetupWarp(position, warpEventId); + DoStairWarp(metatileBehavior, delay); + return TRUE; } return FALSE; } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 0cce757f56..0839dc6bb2 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -50,7 +50,14 @@ static void Task_SpinEnterWarp(u8 taskId); static void Task_WarpAndLoadMap(u8 taskId); static void Task_DoDoorWarp(u8 taskId); static void Task_EnableScriptAfterMusicFade(u8 taskId); -static void Task_ExitStairs(u8 taskId); + +static void ExitStairsMovement(s16*, s16*, s16*, s16*, s16*); +static void GetStairsMovementDirection(u32, s16*, s16*); +static void Task_ExitStairs(u8); +static bool8 WaitStairExitMovementFinished(s16*, s16*, s16*, s16*, s16*); +static void UpdateStairsMovement(s16, s16, s16*, s16*, s16*); +static void Task_StairWarp(u8); +static void ForceStairsMovement(u32, s16*, s16*); // data[0] is used universally by tasks in this file as a state for switches #define tState data[0] @@ -1328,129 +1335,6 @@ static bool32 PrintWhiteOutRecoveryMessage(u8 taskId, const u8 *text, u32 x, u32 return FALSE; } -static void GetStairsMovementDirection(u8 a0, s16 *a1, s16 *a2) -{ - if (MetatileBehavior_IsDirectionalUpRightStairWarp(a0)) - { - *a1 = 16; - *a2 = -10; - } - else if (MetatileBehavior_IsDirectionalUpLeftStairWarp(a0)) - { - *a1 = -17; - *a2 = -10; - } - else if (MetatileBehavior_IsDirectionalDownRightStairWarp(a0)) - { - *a1 = 17; - *a2 = 3; - } - else if (MetatileBehavior_IsDirectionalDownLeftStairWarp(a0)) - { - *a1 = -17; - *a2 = 3; - } - else - { - *a1 = 0; - *a2 = 0; - } -} - -static bool8 WaitStairExitMovementFinished(s16 *a0, s16 *a1, s16 *a2, s16 *a3, s16 *a4) -{ - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; - if (*a4 != 0) - { - *a2 += *a0; - *a3 += *a1; - sprite->x2 = *a2 >> 5; - sprite->y2 = *a3 >> 5; - (*a4)--; - return TRUE; - } - else - { - sprite->x2 = 0; - sprite->y2 = 0; - return FALSE; - } -} - -static void ExitStairsMovement(s16 *a0, s16 *a1, s16 *a2, s16 *a3, s16 *a4) -{ - s16 x, y; - u8 behavior; - s32 r1; - struct Sprite *sprite; - - PlayerGetDestCoords(&x, &y); - behavior = MapGridGetMetatileBehaviorAt(x, y); - if (MetatileBehavior_IsDirectionalDownRightStairWarp(behavior) || MetatileBehavior_IsDirectionalUpRightStairWarp(behavior)) - r1 = 3; - else - r1 = 4; - - ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetWalkInPlaceSlowMovementAction(r1)); - GetStairsMovementDirection(behavior, a0, a1); - *a2 = *a0 * 16; - *a3 = *a1 * 16; - *a4 = 16; - sprite = &gSprites[gPlayerAvatar.spriteId]; - sprite->x2 = *a2 >> 5; - sprite->y2 = *a3 >> 5; - *a0 *= -1; - *a1 *= -1; -} - -static void Task_ExitStairs(u8 taskId) -{ - s16 * data = gTasks[taskId].data; - switch (data[0]) - { - default: - if (WaitForWeatherFadeIn() == TRUE) - { - CameraObjectReset(); - UnlockPlayerFieldControls(); - DestroyTask(taskId); - } - break; - case 0: - Overworld_PlaySpecialMapMusic(); - WarpFadeInScreen(); - LockPlayerFieldControls(); - ExitStairsMovement(&data[1], &data[2], &data[3], &data[4], &data[5]); - data[0]++; - break; - case 1: - if (!WaitStairExitMovementFinished(&data[1], &data[2], &data[3], &data[4], &data[5])) - data[0]++; - break; - } -} - -bool8 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection) -{ - switch (playerDirection) - { - case DIR_WEST: - if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior)) - return TRUE; - if (MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) - return TRUE; - break; - case DIR_EAST: - if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) - return TRUE; - if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) - return TRUE; - break; - } - return FALSE; -} - enum { FRLG_WHITEOUT_ENTER_MSG_SCREEN, FRLG_WHITEOUT_PRINT_MSG, @@ -1517,86 +1401,236 @@ void FieldCB_RushInjuredPokemonToCenter(void) gTasks[taskId].tState = FRLG_WHITEOUT_ENTER_MSG_SCREEN; } -static void ForceStairsMovement(u16 a0, s16 *a1, s16 *a2) +static void GetStairsMovementDirection(u32 metatileBehavior, s16 *speedX, s16 *speedY) { - ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); - GetStairsMovementDirection(a0, a1, a2); + if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) + { + *speedX = 16; + *speedY = -10; + } + else if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior)) + { + *speedX = -17; + *speedY = -10; + } + else if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) + { + *speedX = 17; + *speedY = 3; + } + else if (MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) + { + *speedX = -17; + *speedY = 3; + } + else + { + *speedX = 0; + *speedY = 0; + } } -static void UpdateStairsMovement(s16 a0, s16 a1, s16 *a2, s16 *a3, s16 *a4) +static bool8 WaitStairExitMovementFinished(s16 *speedX, s16 *speedY, s16 *offsetX, s16 *offsetY, s16 *timer) { - struct Sprite *playerSpr = &gSprites[gPlayerAvatar.spriteId]; - struct ObjectEvent *playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite *sprite; + sprite = &gSprites[gPlayerAvatar.spriteId]; + if (*timer != 0) + { + *offsetX += *speedX; + *offsetY += *speedY; + sprite->x2 = *offsetX >> 5; + sprite->y2 = *offsetY >> 5; + (*timer)--; + return TRUE; + } + else + { + sprite->x2 = 0; + sprite->y2 = 0; + return FALSE; + } +} - if (a1 > 0 || *a4 > 6) - *a3 += a1; +static void ExitStairsMovement(s16 *speedX, s16 *speedY, s16 *offsetX, s16 *offsetY, s16 *timer) +{ + s16 x, y; + u32 metatileBehavior; + s32 direction; + struct Sprite *sprite; - *a2 += a0; - (*a4)++; - playerSpr->x2 = *a2 >> 5; - playerSpr->y2 = *a3 >> 5; - if (playerObj->heldMovementFinished) - ObjectEventForceSetHeldMovement(playerObj, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); + PlayerGetDestCoords(&x, &y); + metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior) || MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) + direction = DIR_WEST; + else + direction = DIR_EAST; + + ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetWalkInPlaceSlowMovementAction(direction)); + GetStairsMovementDirection(metatileBehavior, speedX, speedY); + *offsetX = *speedX * 16; + *offsetY = *speedY * 16; + *timer = 16; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->x2 = *offsetX >> 5; + sprite->y2 = *offsetY >> 5; + *speedX *= -1; + *speedY *= -1; +} + +#define tState data[0] +#define tSpeedX data[1] +#define tSpeedY data[2] +#define tOffsetX data[3] +#define tOffsetY data[4] +#define tTimer data[5] + +static void Task_ExitStairs(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + switch (tState) + { + default: + if (WaitForWeatherFadeIn() == TRUE) + { + CameraObjectReset(); + UnlockPlayerFieldControls(); + DestroyTask(taskId); + } + break; + case 0: + Overworld_PlaySpecialMapMusic(); + WarpFadeInScreen(); + LockPlayerFieldControls(); + ExitStairsMovement(&tSpeedX, &tSpeedY, &tOffsetX, &tOffsetY, &tTimer); + tState++; + break; + case 1: + if (!WaitStairExitMovementFinished(&tSpeedX, &tSpeedY, &tOffsetX, &tOffsetY, &tTimer)) + tState++; + break; + } +} + +static void ForceStairsMovement(u32 metatileBehavior, s16 *speedX, s16 *speedY) +{ + ObjectEventForceSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); + GetStairsMovementDirection(metatileBehavior, speedX, speedY); +} +#undef tSpeedX +#undef tSpeedY +#undef tOffsetX +#undef tOffsetY +#undef tTimer + +#define tMetatileBehavior data[1] +#define tSpeedX data[2] +#define tSpeedY data[3] +#define tOffsetX data[4] +#define tOffsetY data[5] +#define tTimer data[6] +#define tDelay data[15] + +static void UpdateStairsMovement(s16 speedX, s16 speedY, s16 *offsetX, s16 *offsetY, s16 *timer) +{ + struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId]; + struct ObjectEvent *playerObjectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + + if (speedY > 0 || *timer > 6) + *offsetY += speedY; + + *offsetX += speedX; + (*timer)++; + playerSprite->x2 = *offsetX >> 5; + playerSprite->y2 = *offsetY >> 5; + if (playerObjectEvent->heldMovementFinished) + ObjectEventForceSetHeldMovement(playerObjectEvent, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection())); } static void Task_StairWarp(u8 taskId) { s16 * data = gTasks[taskId].data; - struct ObjectEvent *playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; - struct Sprite *playerSpr = &gSprites[gPlayerAvatar.spriteId]; + struct ObjectEvent *playerObjectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId]; - switch (data[0]) + switch (tState) { - case 0: - LockPlayerFieldControls(); - FreezeObjectEvents(); - CameraObjectFreeze(); - data[0]++; - break; - case 1: - if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj)) - { - if (data[15] != 0) - data[15]--; - else + case 0: + LockPlayerFieldControls(); + FreezeObjectEvents(); + CameraObjectFreeze(); + tState++; + break; + case 1: + if (!ObjectEventIsMovementOverridden(playerObjectEvent) || ObjectEventClearHeldMovementIfFinished(playerObjectEvent)) { - TryFadeOutOldMapMusic(); - PlayRainStoppingSoundEffect(); - playerSpr->oam.priority = 1; - ForceStairsMovement(data[1], &data[2], &data[3]); - PlaySE(SE_EXIT); - data[0]++; + if (tDelay != 0) + tDelay--; + else + { + TryFadeOutOldMapMusic(); + PlayRainStoppingSoundEffect(); + playerSprite->oam.priority = 1; + ForceStairsMovement(tMetatileBehavior, &tSpeedX, &tSpeedY); + PlaySE(SE_EXIT); + tState++; + } } - } - break; - case 2: - UpdateStairsMovement(data[2], data[3], &data[4], &data[5], &data[6]); - data[15]++; - if (data[15] >= 12) - { - WarpFadeOutScreen(); - data[0]++; - } - break; - case 3: - UpdateStairsMovement(data[2], data[3], &data[4], &data[5], &data[6]); - if (!PaletteFadeActive() && BGMusicStopped()) - data[0]++; - break; - default: - gFieldCallback = FieldCB_DefaultWarpExit; - WarpIntoMap(); - SetMainCallback2(CB2_LoadMap); - DestroyTask(taskId); - break; + break; + case 2: + UpdateStairsMovement(tSpeedX, tSpeedY, &tOffsetX, &tOffsetY, &tTimer); + tDelay++; + if (tDelay >= 12) + { + WarpFadeOutScreen(); + tState++; + } + break; + case 3: + UpdateStairsMovement(tSpeedX, tSpeedY, &tOffsetX, &tOffsetY, &tTimer); + if (!PaletteFadeActive() && BGMusicStopped()) + tState++; + break; + default: + gFieldCallback = FieldCB_DefaultWarpExit; + WarpIntoMap(); + SetMainCallback2(CB2_LoadMap); + DestroyTask(taskId); + break; } } void DoStairWarp(u16 metatileBehavior, u16 delay) { u8 taskId = CreateTask(Task_StairWarp, 10); - gTasks[taskId].data[1] = metatileBehavior; - gTasks[taskId].data[15] = delay; + gTasks[taskId].tMetatileBehavior = metatileBehavior; + gTasks[taskId].tDelay = delay; Task_StairWarp(taskId); } +#undef tMetatileBehavior +#undef tSpeedX +#undef tSpeedY +#undef tOffsetX +#undef tOffsetY +#undef tTimer +#undef tDelay + +bool32 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection) +{ + switch (playerDirection) + { + case DIR_WEST: + if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior)) + return TRUE; + if (MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) + return TRUE; + break; + case DIR_EAST: + if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) + return TRUE; + if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) + return TRUE; + break; + } + return FALSE; +} diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index f5e438042a..d165d702ab 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1435,7 +1435,10 @@ bool8 MetatileBehavior_IsDirectionalDownLeftStairWarp(u8 metatileBehavior) bool8 MetatileBehavior_IsDirectionalStairWarp(u8 metatileBehavior) { - if (metatileBehavior >= MB_UP_RIGHT_STAIR_WARP && metatileBehavior <= MB_DOWN_LEFT_STAIR_WARP) + if (metatileBehavior == MB_UP_RIGHT_STAIR_WARP + || metatileBehavior == MB_UP_LEFT_STAIR_WARP + || metatileBehavior == MB_DOWN_RIGHT_STAIR_WARP + || metatileBehavior == MB_DOWN_LEFT_STAIR_WARP) return TRUE; else return FALSE; From 622dead80c62517fe1a2400be5493c173b74298d Mon Sep 17 00:00:00 2001 From: SarnPoke <77281351+SarnPoke@users.noreply.github.com> Date: Wed, 28 Aug 2024 13:40:35 +0200 Subject: [PATCH 134/544] Shed Tail Retarget (#5275) Re-targets Shed Tail PR to upcoming --- include/battle_ai_util.h | 1 + src/battle_ai_main.c | 34 +++++++++---------------- src/battle_ai_util.c | 39 +++++++++++++++++++++++++++++ test/battle/move_effect/shed_tail.c | 13 ++++++++++ 4 files changed, 65 insertions(+), 22 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 94d895e8fd..04920cb3a2 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -205,5 +205,6 @@ bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef); bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData); void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, struct AiLogicData *aiData); +void IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); #endif //GUARD_BATTLE_AI_UTIL_H diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 55b38f7ad7..e6e35a3388 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1531,6 +1531,16 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (HasSubstituteIgnoringMove(battlerDef)) ADJUST_SCORE(-8); break; + case EFFECT_SHED_TAIL: + if (CountUsablePartyMons(battlerAtk) == 0) + ADJUST_SCORE(-10); + if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_INFILTRATOR) + ADJUST_SCORE(-8); + else if (aiData->hpPercents[battlerAtk] <= 50) + ADJUST_SCORE(-10); + else if (HasSubstituteIgnoringMove(battlerDef)) + ADJUST_SCORE(-8); + break; case EFFECT_LEECH_SEED: if (gStatuses3[battlerDef] & STATUS3_LEECHSEED || IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) @@ -3582,28 +3592,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_SUBSTITUTE: - if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 4) - ADJUST_SCORE(GOOD_EFFECT); - if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) - ADJUST_SCORE(GOOD_EFFECT); - if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) - ADJUST_SCORE(GOOD_EFFECT); - else if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) - ADJUST_SCORE(DECENT_EFFECT); - // TODO: - // if (IsPredictedToSwitch(battlerDef, battlerAtk) - // ADJUST_SCORE(DECENT_EFFECT); - if (HasMoveEffect(battlerDef, EFFECT_SLEEP) - || HasMoveEffect(battlerDef, EFFECT_TOXIC) - || HasMoveEffect(battlerDef, EFFECT_POISON) - || HasMoveEffect(battlerDef, EFFECT_PARALYZE) - || HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP) - || HasMoveEffect(battlerDef, EFFECT_CONFUSE) - || HasMoveEffect(battlerDef, EFFECT_LEECH_SEED)) - ADJUST_SCORE(GOOD_EFFECT); - if (!gBattleMons[battlerDef].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION && aiData->hpPercents[battlerAtk] > 70)) - ADJUST_SCORE(WEAK_EFFECT); - break; + case EFFECT_SHED_TAIL: + IncreaseSubstituteMoveScore(battlerAtk, battlerDef, move, &score); case EFFECT_MIMIC: if (AI_IsFaster(battlerAtk, battlerDef, move)) { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 8c1cb578ed..0ff5050e38 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3987,3 +3987,42 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st && AI_IsFaster(battlerAtk, battlerAtkPartner, TRUE) && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)); } + +void IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) +{ + if (gMovesInfo[move].effect == EFFECT_SUBSTITUTE) // Substitute specific + { + if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 4) + ADJUST_SCORE_PTR(GOOD_EFFECT); + } + else if (gMovesInfo[move].effect == EFFECT_SHED_TAIL) // Shed Tail specific + { + if ((ShouldPivot(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_THINKING_STRUCT->movesetIndex)) + && (HasAnyKnownMove(battlerDef) && (GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 2))) + ADJUST_SCORE_PTR(BEST_EFFECT); + } + + if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) + ADJUST_SCORE_PTR(GOOD_EFFECT); + + if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) + ADJUST_SCORE_PTR(GOOD_EFFECT); + else if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) + ADJUST_SCORE_PTR(DECENT_EFFECT); + + // TODO: + // if (IsPredictedToSwitch(battlerDef, battlerAtk) + // ADJUST_SCORE_PTR(DECENT_EFFECT); + + if (HasMoveEffect(battlerDef, EFFECT_SLEEP) + || HasMoveEffect(battlerDef, EFFECT_TOXIC) + || HasMoveEffect(battlerDef, EFFECT_POISON) + || HasMoveEffect(battlerDef, EFFECT_PARALYZE) + || HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP) + || HasMoveEffect(battlerDef, EFFECT_CONFUSE) + || HasMoveEffect(battlerDef, EFFECT_LEECH_SEED)) + ADJUST_SCORE_PTR(GOOD_EFFECT); + + if (AI_DATA->hpPercents[battlerAtk] > 70) + ADJUST_SCORE_PTR(WEAK_EFFECT); +} diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c index 55a8950d00..d69993b88b 100644 --- a/test/battle/move_effect/shed_tail.c +++ b/test/battle/move_effect/shed_tail.c @@ -85,3 +85,16 @@ SINGLE_BATTLE_TEST("Shed Tail's HP cost doesn't trigger effects that trigger on NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } + +AI_SINGLE_BATTLE_TEST("AI will use Shed Tail to pivot to another mon while in damage stalemate with player") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { Speed(100); Ability(ABILITY_RUN_AWAY); Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Ability(ABILITY_RUN_AWAY); Moves(MOVE_CONFUSION, MOVE_SHED_TAIL); } + OPPONENT(SPECIES_SCIZOR) { Speed(101); Moves(MOVE_CELEBRATE, MOVE_X_SCISSOR); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_CONFUSION); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_SHED_TAIL); } + } +} From f07189b1be74b37ce19f7792f1f08aad9611109f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 28 Aug 2024 15:15:09 -0500 Subject: [PATCH 135/544] More missing AI logic (#5279) * More missing AI logic * Update battle_ai_switch_items.c * Update battle_ai_main.c --- src/battle_ai_main.c | 41 +++++++++++++++++++++++++++++++----- src/battle_ai_switch_items.c | 2 +- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index be8e0eb0e3..cf650f1c14 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -857,6 +857,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_COUNTER: case EFFECT_MIRROR_COAT: case EFFECT_METAL_BURST: + case EFFECT_FINAL_GAMBIT: + case EFFECT_GUARDIAN_OF_ALOLA: break; default: RETURN_SCORE_MINUS(10); @@ -1828,6 +1830,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_TRICK: case EFFECT_KNOCK_OFF: + case EFFECT_CORROSIVE_GAS: if (aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) ADJUST_SCORE(-10); break; @@ -2176,6 +2179,17 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5)) ADJUST_SCORE(-4); break; + case EFFECT_DOODLE: // Same as Role Play, but also check if the partner's ability should be replaced + if (aiData->abilities[battlerAtk] == aiData->abilities[battlerDef] + || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == aiData->abilities[battlerDef] + || aiData->abilities[battlerDef] == ABILITY_NONE + || gAbilitiesInfo[aiData->abilities[battlerAtk]].cantBeSuppressed + || gAbilitiesInfo[aiData->abilities[BATTLE_PARTNER(battlerAtk)]].cantBeSuppressed + || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeCopied) + ADJUST_SCORE(-10); + else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5) || IsAbilityOfRating(aiData->abilities[BATTLE_PARTNER(battlerAtk)], 5)) + ADJUST_SCORE(-4); + break; case EFFECT_WISH: if (gWishFutureKnock.wishCounter[battlerAtk] != 0) ADJUST_SCORE(-10); @@ -2889,7 +2903,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (atkPartnerAbility) { case ABILITY_ANGER_POINT: - if (gMovesInfo[move].alwaysCriticalHit == TRUE + if (gMovesInfo[move].alwaysCriticalHit == TRUE && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) && AI_IsFaster(battlerAtk, battlerAtkPartner, move) && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) @@ -3498,6 +3512,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_MULTI_HIT: case EFFECT_TRIPLE_KICK: + case EFFECT_POPULATION_BOMB: if (AI_MoveMakesContact(aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk], move) && aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && aiData->holdEffects[battlerDef] == HOLD_EFFECT_ROCKY_HELMET) @@ -4098,11 +4113,27 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } } break; + case EFFECT_CORROSIVE_GAS: + if (CanKnockOffItem(battlerDef, aiData->items[battlerDef])) + { + switch (aiData->holdEffects[battlerDef]) + { + case HOLD_EFFECT_IRON_BALL: + if (HasMoveEffect(battlerDef, EFFECT_FLING)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case HOLD_EFFECT_LAGGING_TAIL: + case HOLD_EFFECT_STICKY_BARB: + break; + default: + ADJUST_SCORE(DECENT_EFFECT); + break; + } + } + break; case EFFECT_ROLE_PLAY: - if (!gAbilitiesInfo[aiData->abilities[battlerAtk]].cantBeSuppressed - && !gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeCopied - && !IsAbilityOfRating(aiData->abilities[battlerAtk], 5) - && IsAbilityOfRating(aiData->abilities[battlerDef], 5)) + case EFFECT_DOODLE: + if (IsAbilityOfRating(aiData->abilities[battlerDef], 5)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_INGRAIN: diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index ad03c27c9f..b087cf3939 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -2002,7 +2002,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, } // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. if (aceMonId != PARTY_SIZE - && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS || gMovesInfo[gLastUsedMove].effect == EFFECT_CHILLY_RECEPTION)) + && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS || gMovesInfo[gLastUsedMove].effect == EFFECT_CHILLY_RECEPTION || gMovesInfo[gLastUsedMove].effect == EFFECT_SHED_TAIL)) return aceMonId; return PARTY_SIZE; From 2ab0dd77de5cde2ca04944cd03b894034a5c9f8e Mon Sep 17 00:00:00 2001 From: Hedara Date: Thu, 29 Aug 2024 15:36:05 +0200 Subject: [PATCH 136/544] Added performance counter --- include/global.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/include/global.h b/include/global.h index f5ada78360..783a913106 100644 --- a/include/global.h +++ b/include/global.h @@ -131,6 +131,31 @@ #define FEATURE_FLAG_ASSERT(flag, id) STATIC_ASSERT(flag > TEMP_FLAGS_END || flag == 0, id) +#ifndef NDEBUG +static inline void CycleCountStart() +{ + REG_TM2CNT_H = 0; + REG_TM3CNT_H = 0; + + REG_TM2CNT_L = 0; + REG_TM3CNT_L = 0; + + // init timers (tim3 count up mode, tim2 every clock cycle) + REG_TM3CNT_H = TIMER_ENABLE | TIMER_COUNTUP; + REG_TM2CNT_H = TIMER_1CLK | TIMER_ENABLE; +} + +static inline u32 CycleCountEnd() +{ + // stop timers + REG_TM2CNT_H = 0; + REG_TM3CNT_H = 0; + + // return result + return REG_TM2CNT_L | (REG_TM3CNT_L << 16u); +} +#endif + struct Coords8 { s8 x; From 625a006cabbf44734be2d0324264d86c3edba51b Mon Sep 17 00:00:00 2001 From: Icedude907 <34080011+Icedude907@users.noreply.github.com> Date: Fri, 30 Aug 2024 06:01:01 +1200 Subject: [PATCH 137/544] [Build System Rewrite] `mapjson` now takes output directory parameters. (#1949) --- Makefile | 57 ++-- include/constants/.gitignore | 3 + include/constants/layouts.h | 450 ------------------------- include/constants/map_groups.h | 596 --------------------------------- make_tools.mk | 14 +- map_data_rules.mk | 30 +- tools/jsonproc/jsonproc.cpp | 2 + tools/mapjson/mapjson.cpp | 112 ++++--- 8 files changed, 124 insertions(+), 1140 deletions(-) create mode 100644 include/constants/.gitignore delete mode 100755 include/constants/layouts.h delete mode 100755 include/constants/map_groups.h diff --git a/Makefile b/Makefile index bf74e0331a..15cbd709e4 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,9 @@ ifeq (compare,$(MAKECMDGOALS)) COMPARE := 1 endif +# Default make rule +all: rom + # don't use dkP's base_tools anymore # because the redefinition of $(CC) conflicts # with when we want to use $(CC) to preprocess files @@ -119,24 +122,23 @@ ifneq ($(MODERN),1) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef endif +# Variable filled out in other make files +AUTO_GEN_TARGETS := +include make_tools.mk + SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c -GFX := tools/gbagfx/gbagfx$(EXE) -AIF := tools/aif2pcm/aif2pcm$(EXE) -MID := tools/mid2agb/mid2agb$(EXE) -SCANINC := tools/scaninc/scaninc$(EXE) -PREPROC := tools/preproc/preproc$(EXE) -RAMSCRGEN := tools/ramscrgen/ramscrgen$(EXE) -FIX := tools/gbafix/gbafix$(EXE) -MAPJSON := tools/mapjson/mapjson$(EXE) -JSONPROC := tools/jsonproc/jsonproc$(EXE) +GFX := $(TOOLS_DIR)/gbagfx/gbagfx$(EXE) +AIF := $(TOOLS_DIR)/aif2pcm/aif2pcm$(EXE) +MID := $(TOOLS_DIR)/mid2agb/mid2agb$(EXE) +SCANINC := $(TOOLS_DIR)/scaninc/scaninc$(EXE) +PREPROC := $(TOOLS_DIR)/preproc/preproc$(EXE) +RAMSCRGEN := $(TOOLS_DIR)/ramscrgen/ramscrgen$(EXE) +FIX := $(TOOLS_DIR)/gbafix/gbafix$(EXE) +MAPJSON := $(TOOLS_DIR)/mapjson/mapjson$(EXE) +JSONPROC := $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) PERL := perl -# Inclusive list. If you don't want a tool to be built, don't add it here. -TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc -TOOLBASE = $(TOOLDIRS:tools/%=%) -TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE)) - MAKEFLAGS += --no-print-directory # Clear the default suffixes @@ -149,7 +151,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) libagbsyscall modern tidymodern tidynonmodern +.PHONY: all rom clean compare tidy mostlyclean libagbsyscall modern tidymodern tidynonmodern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -159,6 +161,7 @@ infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst # Since we don't need to reload most of this makefile ifeq (,$(filter-out all rom compare modern libagbsyscall syms,$(MAKECMDGOALS))) $(call infoshell, $(MAKE) -f make_tools.mk) +$(call infoshell, $(MAKE) generated) else NODEP ?= 1 endif @@ -209,17 +212,8 @@ SUBDIRS := $(sort $(dir $(OBJS))) $(shell mkdir -p $(SUBDIRS)) endif -AUTO_GEN_TARGETS := - -all: rom - -tools: $(TOOLDIRS) - syms: $(SYM) -$(TOOLDIRS): - @$(MAKE) -C $@ - rom: $(ROM) ifeq ($(COMPARE),1) @$(SHA1) rom.sha1 @@ -230,9 +224,6 @@ compare: all clean: mostlyclean clean-tools -clean-tools: - @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) - mostlyclean: tidynonmodern tidymodern find sound -iname '*.bin' -exec rm {} + rm -f $(MID_SUBDIR)/*.s @@ -263,6 +254,8 @@ include spritesheet_rules.mk include json_data_rules.mk include songs.mk +generated: $(AUTO_GEN_TARGETS) + %.s: ; %.png: ; %.pal: ; @@ -280,7 +273,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/libc.o: CC1 := $(TOOLS_DIR)/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -289,10 +282,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) +$(C_BUILDDIR)/m4a.o: CC1 := $(TOOLS_DIR)/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) +$(C_BUILDDIR)/librfu_intr.o: CC1 := $(TOOLS_DIR)/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast @@ -320,7 +313,7 @@ else endif else define C_DEP -$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) +$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include -I gflib $2) ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - @@ -347,7 +340,7 @@ else endif else define GFLIB_DEP -$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) +$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include -I gflib $2) ifeq (,$$(KEEP_TEMPS)) @echo "$$(CC1) -o $$@ $$<" @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - diff --git a/include/constants/.gitignore b/include/constants/.gitignore new file mode 100644 index 0000000000..761af9db76 --- /dev/null +++ b/include/constants/.gitignore @@ -0,0 +1,3 @@ +# Will be moved to build/ eventually +map_groups.h +layouts.h \ No newline at end of file diff --git a/include/constants/layouts.h b/include/constants/layouts.h deleted file mode 100755 index db92c95942..0000000000 --- a/include/constants/layouts.h +++ /dev/null @@ -1,450 +0,0 @@ -#ifndef GUARD_CONSTANTS_LAYOUTS_H -#define GUARD_CONSTANTS_LAYOUTS_H - -// -// DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json -// - -#define LAYOUT_PETALBURG_CITY 1 -#define LAYOUT_SLATEPORT_CITY 2 -#define LAYOUT_MAUVILLE_CITY 3 -#define LAYOUT_RUSTBORO_CITY 4 -#define LAYOUT_FORTREE_CITY 5 -#define LAYOUT_LILYCOVE_CITY 6 -#define LAYOUT_MOSSDEEP_CITY 7 -#define LAYOUT_SOOTOPOLIS_CITY 8 -#define LAYOUT_EVER_GRANDE_CITY 9 -#define LAYOUT_LITTLEROOT_TOWN 10 -#define LAYOUT_OLDALE_TOWN 11 -#define LAYOUT_DEWFORD_TOWN 12 -#define LAYOUT_LAVARIDGE_TOWN 13 -#define LAYOUT_FALLARBOR_TOWN 14 -#define LAYOUT_VERDANTURF_TOWN 15 -#define LAYOUT_PACIFIDLOG_TOWN 16 -#define LAYOUT_ROUTE101 17 -#define LAYOUT_ROUTE102 18 -#define LAYOUT_ROUTE103 19 -#define LAYOUT_ROUTE104 20 -#define LAYOUT_ROUTE105 21 -#define LAYOUT_ROUTE106 22 -#define LAYOUT_ROUTE107 23 -#define LAYOUT_ROUTE108 24 -#define LAYOUT_ROUTE109 25 -#define LAYOUT_ROUTE110 26 -#define LAYOUT_ROUTE111 27 -#define LAYOUT_ROUTE112 28 -#define LAYOUT_ROUTE113 29 -#define LAYOUT_ROUTE114 30 -#define LAYOUT_ROUTE115 31 -#define LAYOUT_ROUTE116 32 -#define LAYOUT_ROUTE117 33 -#define LAYOUT_ROUTE118 34 -#define LAYOUT_ROUTE119 35 -#define LAYOUT_ROUTE120 36 -#define LAYOUT_ROUTE121 37 -#define LAYOUT_ROUTE122 38 -#define LAYOUT_ROUTE123 39 -#define LAYOUT_ROUTE124 40 -#define LAYOUT_ROUTE125 41 -#define LAYOUT_ROUTE126 42 -#define LAYOUT_ROUTE127 43 -#define LAYOUT_ROUTE128 44 -#define LAYOUT_ROUTE129 45 -#define LAYOUT_ROUTE130_MIRAGE_ISLAND 46 -#define LAYOUT_ROUTE131 47 -#define LAYOUT_ROUTE132 48 -#define LAYOUT_ROUTE133 49 -#define LAYOUT_ROUTE134 50 -#define LAYOUT_UNDERWATER_ROUTE126 51 -#define LAYOUT_UNDERWATER_ROUTE127 52 -#define LAYOUT_UNDERWATER_ROUTE128 53 -#define LAYOUT_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F 54 -#define LAYOUT_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F 55 -#define LAYOUT_LITTLEROOT_TOWN_MAYS_HOUSE_1F 56 -#define LAYOUT_LITTLEROOT_TOWN_MAYS_HOUSE_2F 57 -#define LAYOUT_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB 58 -#define LAYOUT_HOUSE1 59 -#define LAYOUT_HOUSE2 60 -#define LAYOUT_POKEMON_CENTER_1F 61 -#define LAYOUT_POKEMON_CENTER_2F 62 -#define LAYOUT_MART 63 -#define LAYOUT_HOUSE3 64 -#define LAYOUT_DEWFORD_TOWN_GYM 65 -#define LAYOUT_DEWFORD_TOWN_HALL 66 -#define LAYOUT_HOUSE4 67 -#define LAYOUT_LAVARIDGE_TOWN_HERB_SHOP 68 -#define LAYOUT_LAVARIDGE_TOWN_GYM_1F 69 -#define LAYOUT_LAVARIDGE_TOWN_GYM_B1F 70 -#define LAYOUT_LAVARIDGE_TOWN_POKEMON_CENTER_1F 71 -#define LAYOUT_FALLARBOR_TOWN_LEFTOVER_RSCONTEST_LOBBY 72 -#define LAYOUT_FALLARBOR_TOWN_LEFTOVER_RSCONTEST_HALL 73 -#define LAYOUT_LILYCOVE_CITY_HOUSE2 74 -#define LAYOUT_UNUSED_CONTEST_ROOM1 75 -#define LAYOUT_VERDANTURF_TOWN_WANDAS_HOUSE 76 -#define LAYOUT_PACIFIDLOG_TOWN_HOUSE1 77 -#define LAYOUT_PACIFIDLOG_TOWN_HOUSE2 78 -#define LAYOUT_PETALBURG_CITY_GYM 79 -#define LAYOUT_HOUSE_WITH_BED 80 -#define LAYOUT_SLATEPORT_CITY_STERNS_SHIPYARD_1F 81 -#define LAYOUT_SLATEPORT_CITY_STERNS_SHIPYARD_2F 82 -#define LAYOUT_UNUSED_CONTEST_ROOM2 83 -#define LAYOUT_UNUSED_CONTEST_ROOM3 84 -#define LAYOUT_SLATEPORT_CITY_POKEMON_FAN_CLUB 85 -#define LAYOUT_SLATEPORT_CITY_OCEANIC_MUSEUM_1F 86 -#define LAYOUT_SLATEPORT_CITY_OCEANIC_MUSEUM_2F 87 -#define LAYOUT_HARBOR 88 -#define LAYOUT_MAUVILLE_CITY_GYM 89 -#define LAYOUT_MAUVILLE_CITY_BIKE_SHOP 90 -#define LAYOUT_MAUVILLE_CITY_GAME_CORNER 91 -#define LAYOUT_RUSTBORO_CITY_DEVON_CORP_1F 92 -#define LAYOUT_RUSTBORO_CITY_DEVON_CORP_2F 93 -#define LAYOUT_RUSTBORO_CITY_GYM 94 -#define LAYOUT_RUSTBORO_CITY_POKEMON_SCHOOL 95 -#define LAYOUT_RUSTBORO_CITY_HOUSE 96 -#define LAYOUT_RUSTBORO_CITY_HOUSE1 97 -#define LAYOUT_RUSTBORO_CITY_CUTTERS_HOUSE 98 -#define LAYOUT_FORTREE_CITY_HOUSE1 99 -#define LAYOUT_FORTREE_CITY_GYM 100 -#define LAYOUT_FORTREE_CITY_HOUSE2 101 -#define LAYOUT_ROUTE104_MR_BRINEYS_HOUSE 102 -#define LAYOUT_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F 103 -#define LAYOUT_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F 104 -#define LAYOUT_LILYCOVE_CITY_CONTEST_LOBBY 105 -#define LAYOUT_LILYCOVE_CITY_CONTEST_HALL 106 -#define LAYOUT_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB 107 -#define LAYOUT_MOSSDEEP_CITY_GYM 108 -#define LAYOUT_SOOTOPOLIS_CITY_GYM_1F 109 -#define LAYOUT_SOOTOPOLIS_CITY_GYM_B1F 110 -#define LAYOUT_EVER_GRANDE_CITY_SIDNEYS_ROOM 111 -#define LAYOUT_EVER_GRANDE_CITY_PHOEBES_ROOM 112 -#define LAYOUT_EVER_GRANDE_CITY_GLACIAS_ROOM 113 -#define LAYOUT_EVER_GRANDE_CITY_DRAKES_ROOM 114 -#define LAYOUT_EVER_GRANDE_CITY_CHAMPIONS_ROOM 115 -#define LAYOUT_EVER_GRANDE_CITY_SHORT_HALL 116 -#define LAYOUT_ROUTE104_PRETTY_PETAL_FLOWER_SHOP 117 -#define LAYOUT_CABLE_CAR_STATION 118 -#define LAYOUT_ROUTE114_FOSSIL_MANIACS_HOUSE 119 -#define LAYOUT_ROUTE114_FOSSIL_MANIACS_TUNNEL 120 -#define LAYOUT_ROUTE114_LANETTES_HOUSE 121 -#define LAYOUT_ROUTE116_TUNNELERS_REST_HOUSE 122 -#define LAYOUT_ROUTE117_POKEMON_DAY_CARE 123 -#define LAYOUT_ROUTE121_SAFARI_ZONE_ENTRANCE 124 -#define LAYOUT_METEOR_FALLS_1F_1R 125 -#define LAYOUT_METEOR_FALLS_1F_2R 126 -#define LAYOUT_METEOR_FALLS_B1F_1R 127 -#define LAYOUT_METEOR_FALLS_B1F_2R 128 -#define LAYOUT_RUSTURF_TUNNEL 129 -#define LAYOUT_UNDERWATER_SOOTOPOLIS_CITY 130 -#define LAYOUT_DESERT_RUINS 131 -#define LAYOUT_GRANITE_CAVE_1F 132 -#define LAYOUT_GRANITE_CAVE_B1F 133 -#define LAYOUT_GRANITE_CAVE_B2F 134 -#define LAYOUT_PETALBURG_WOODS 135 -#define LAYOUT_MT_CHIMNEY 136 -#define LAYOUT_MT_PYRE_1F 137 -#define LAYOUT_MT_PYRE_2F 138 -#define LAYOUT_MT_PYRE_3F 139 -#define LAYOUT_MT_PYRE_4F 140 -#define LAYOUT_MT_PYRE_5F 141 -#define LAYOUT_MT_PYRE_6F 142 -#define LAYOUT_AQUA_HIDEOUT_1F 143 -#define LAYOUT_AQUA_HIDEOUT_B1F 144 -#define LAYOUT_AQUA_HIDEOUT_B2F 145 -#define LAYOUT_UNDERWATER_SEAFLOOR_CAVERN 146 -#define LAYOUT_SEAFLOOR_CAVERN_ENTRANCE 147 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM1 148 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM2 149 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM3 150 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM4 151 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM5 152 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM6 153 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM7 154 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM8 155 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM9 156 -#define LAYOUT_CAVE_OF_ORIGIN_ENTRANCE 157 -#define LAYOUT_CAVE_OF_ORIGIN_1F 158 -#define LAYOUT_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1 159 -#define LAYOUT_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2 160 -#define LAYOUT_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3 161 -#define LAYOUT_CAVE_OF_ORIGIN_B1F 162 -#define LAYOUT_VICTORY_ROAD_1F 163 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM 164 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_INNER_ROOM 165 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM 166 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM 167 -#define LAYOUT_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM 168 -#define LAYOUT_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM 169 -#define LAYOUT_UNUSED_CAVE1 170 -#define LAYOUT_UNUSED_CAVE2 171 -#define LAYOUT_UNUSED_CAVE3 172 -#define LAYOUT_UNUSED_CAVE4 173 -#define LAYOUT_UNUSED_CAVE5 174 -#define LAYOUT_UNUSED_CAVE6 175 -#define LAYOUT_UNUSED_CAVE7 176 -#define LAYOUT_UNUSED_CAVE8 177 -#define LAYOUT_UNUSED_CAVE9 178 -#define LAYOUT_UNUSED_CAVE10 179 -#define LAYOUT_UNUSED_CAVE11 180 -#define LAYOUT_UNUSED_CAVE12 181 -#define LAYOUT_UNUSED_CAVE13 182 -#define LAYOUT_UNUSED_CAVE14 183 -#define LAYOUT_NEW_MAUVILLE_ENTRANCE 184 -#define LAYOUT_NEW_MAUVILLE_INSIDE 185 -#define LAYOUT_ABANDONED_SHIP_DECK 186 -#define LAYOUT_ABANDONED_SHIP_CORRIDORS_1F 187 -#define LAYOUT_ABANDONED_SHIP_ROOMS_1F 188 -#define LAYOUT_ABANDONED_SHIP_CORRIDORS_B1F 189 -#define LAYOUT_ABANDONED_SHIP_ROOMS_B1F 190 -#define LAYOUT_ABANDONED_SHIP_ROOMS2_B1F 191 -#define LAYOUT_ABANDONED_SHIP_UNDERWATER1 192 -#define LAYOUT_ABANDONED_SHIP_ROOM_B1F 193 -#define LAYOUT_ABANDONED_SHIP_ROOMS2_1F 194 -#define LAYOUT_ABANDONED_SHIP_CAPTAINS_OFFICE 195 -#define LAYOUT_ABANDONED_SHIP_UNDERWATER2 196 -#define LAYOUT_SECRET_BASE_RED_CAVE1 197 -#define LAYOUT_SECRET_BASE_BROWN_CAVE1 198 -#define LAYOUT_SECRET_BASE_BLUE_CAVE1 199 -#define LAYOUT_SECRET_BASE_YELLOW_CAVE1 200 -#define LAYOUT_SECRET_BASE_TREE1 201 -#define LAYOUT_SECRET_BASE_SHRUB1 202 -#define LAYOUT_SECRET_BASE_RED_CAVE2 203 -#define LAYOUT_SECRET_BASE_BROWN_CAVE2 204 -#define LAYOUT_SECRET_BASE_BLUE_CAVE2 205 -#define LAYOUT_SECRET_BASE_YELLOW_CAVE2 206 -#define LAYOUT_SECRET_BASE_TREE2 207 -#define LAYOUT_SECRET_BASE_SHRUB2 208 -#define LAYOUT_SECRET_BASE_RED_CAVE3 209 -#define LAYOUT_SECRET_BASE_BROWN_CAVE3 210 -#define LAYOUT_SECRET_BASE_BLUE_CAVE3 211 -#define LAYOUT_SECRET_BASE_YELLOW_CAVE3 212 -#define LAYOUT_SECRET_BASE_TREE3 213 -#define LAYOUT_SECRET_BASE_SHRUB3 214 -#define LAYOUT_SECRET_BASE_RED_CAVE4 215 -#define LAYOUT_SECRET_BASE_BROWN_CAVE4 216 -#define LAYOUT_SECRET_BASE_BLUE_CAVE4 217 -#define LAYOUT_SECRET_BASE_YELLOW_CAVE4 218 -#define LAYOUT_SECRET_BASE_TREE4 219 -#define LAYOUT_SECRET_BASE_SHRUB4 220 -#define LAYOUT_BATTLE_COLOSSEUM_2P 221 -#define LAYOUT_TRADE_CENTER 222 -#define LAYOUT_RECORD_CORNER 223 -#define LAYOUT_BATTLE_COLOSSEUM_4P 224 -#define LAYOUT_CONTEST_HALL 225 -#define LAYOUT_UNUSED_CONTEST_HALL1 226 -#define LAYOUT_UNUSED_CONTEST_HALL2 227 -#define LAYOUT_UNUSED_CONTEST_HALL3 228 -#define LAYOUT_UNUSED_CONTEST_HALL4 229 -#define LAYOUT_UNUSED_CONTEST_HALL5 230 -#define LAYOUT_UNUSED_CONTEST_HALL6 231 -#define LAYOUT_CONTEST_HALL_BEAUTY 232 -#define LAYOUT_CONTEST_HALL_TOUGH 233 -#define LAYOUT_CONTEST_HALL_COOL 234 -#define LAYOUT_CONTEST_HALL_SMART 235 -#define LAYOUT_CONTEST_HALL_CUTE 236 -#define LAYOUT_INSIDE_OF_TRUCK 237 -#define LAYOUT_SAFARI_ZONE_NORTHWEST 238 -#define LAYOUT_SAFARI_ZONE_NORTH 239 -#define LAYOUT_SAFARI_ZONE_SOUTHWEST 240 -#define LAYOUT_SAFARI_ZONE_SOUTH 241 -#define LAYOUT_UNUSED_OUTDOOR_AREA 242 -#define LAYOUT_ROUTE109_SEASHORE_HOUSE 243 -#define LAYOUT_ROUTE110_TRICK_HOUSE_ENTRANCE 244 -#define LAYOUT_ROUTE110_TRICK_HOUSE_END 245 -#define LAYOUT_ROUTE110_TRICK_HOUSE_CORRIDOR 246 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE1 247 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE2 248 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE3 249 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE4 250 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE5 251 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE6 252 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE7 253 -#define LAYOUT_ROUTE110_TRICK_HOUSE_PUZZLE8 254 -#define LAYOUT_FORTREE_CITY_DECORATION_SHOP 255 -#define LAYOUT_ROUTE110_SEASIDE_CYCLING_ROAD_ENTRANCE 256 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_1F 257 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_2F 258 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_3F 259 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_4F 260 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_5F 261 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP 262 -#define LAYOUT_ROUTE130 263 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY 264 -#define LAYOUT_BATTLE_FRONTIER_OUTSIDE_WEST 265 -#define LAYOUT_BATTLE_ELEVATOR 266 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR 267 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM 268 -#define LAYOUT_RUSTBORO_CITY_DEVON_CORP_3F 269 -#define LAYOUT_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F 270 -#define LAYOUT_ROUTE119_WEATHER_INSTITUTE_1F 271 -#define LAYOUT_ROUTE119_WEATHER_INSTITUTE_2F 272 -#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR 273 -#define LAYOUT_UNDERWATER_ROUTE124 274 -#define LAYOUT_MOSSDEEP_CITY_SPACE_CENTER_1F 275 -#define LAYOUT_MOSSDEEP_CITY_SPACE_CENTER_2F 276 -#define LAYOUT_SS_TIDAL_CORRIDOR 277 -#define LAYOUT_SS_TIDAL_LOWER_DECK 278 -#define LAYOUT_SS_TIDAL_ROOMS 279 -#define LAYOUT_ISLAND_CAVE 280 -#define LAYOUT_ANCIENT_TOMB 281 -#define LAYOUT_UNDERWATER_ROUTE134 282 -#define LAYOUT_UNDERWATER_SEALED_CHAMBER 283 -#define LAYOUT_SEALED_CHAMBER_OUTER_ROOM 284 -#define LAYOUT_VICTORY_ROAD_B1F 285 -#define LAYOUT_VICTORY_ROAD_B2F 286 -#define LAYOUT_ROUTE104_PROTOTYPE 287 -#define LAYOUT_GRANITE_CAVE_STEVENS_ROOM 288 -#define LAYOUT_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS 289 -#define LAYOUT_SOUTHERN_ISLAND_EXTERIOR 290 -#define LAYOUT_SOUTHERN_ISLAND_INTERIOR 291 -#define LAYOUT_JAGGED_PASS 292 -#define LAYOUT_FIERY_PATH 293 -#define LAYOUT_RUSTBORO_CITY_FLAT2_1F 294 -#define LAYOUT_RUSTBORO_CITY_FLAT2_2F 295 -#define LAYOUT_RUSTBORO_CITY_FLAT2_3F 296 -#define LAYOUT_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE 297 -#define LAYOUT_EVER_GRANDE_CITY_HALL_OF_FAME 298 -#define LAYOUT_LILYCOVE_CITY_COVE_LILY_MOTEL_1F 299 -#define LAYOUT_LILYCOVE_CITY_COVE_LILY_MOTEL_2F 300 -#define LAYOUT_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE 301 -#define LAYOUT_MT_PYRE_EXTERIOR 302 -#define LAYOUT_MT_PYRE_SUMMIT 303 -#define LAYOUT_SEALED_CHAMBER_INNER_ROOM 304 -#define LAYOUT_MOSSDEEP_CITY_GAME_CORNER_1F 305 -#define LAYOUT_MOSSDEEP_CITY_GAME_CORNER_B1F 306 -#define LAYOUT_SOOTOPOLIS_CITY_HOUSE1 307 -#define LAYOUT_SOOTOPOLIS_CITY_HOUSE2 308 -#define LAYOUT_SOOTOPOLIS_CITY_HOUSE3 309 -#define LAYOUT_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS 310 -#define LAYOUT_SCORCHED_SLAB 311 -#define LAYOUT_CAVE_OF_ORIGIN_UNUSED_B4F_LAVA 312 -#define LAYOUT_RUSTBORO_CITY_FLAT1_1F 313 -#define LAYOUT_RUSTBORO_CITY_FLAT1_2F 314 -#define LAYOUT_EVER_GRANDE_CITY_HALL4 315 -#define LAYOUT_AQUA_HIDEOUT_UNUSED_RUBY_MAP1 316 -#define LAYOUT_AQUA_HIDEOUT_UNUSED_RUBY_MAP2 317 -#define LAYOUT_AQUA_HIDEOUT_UNUSED_RUBY_MAP3 318 -#define LAYOUT_ROUTE131_SKY_PILLAR 319 -#define LAYOUT_SKY_PILLAR_ENTRANCE 320 -#define LAYOUT_SKY_PILLAR_OUTSIDE 321 -#define LAYOUT_SKY_PILLAR_1F 322 -#define LAYOUT_SKY_PILLAR_2F 323 -#define LAYOUT_SKY_PILLAR_3F 324 -#define LAYOUT_SKY_PILLAR_4F 325 -#define LAYOUT_SEAFLOOR_CAVERN_ROOM9_LAVA 326 -#define LAYOUT_MOSSDEEP_CITY_STEVENS_HOUSE 327 -#define LAYOUT_SHOAL_CAVE_LOW_TIDE_ICE_ROOM 328 -#define LAYOUT_SAFARI_ZONE_REST_HOUSE 329 -#define LAYOUT_SKY_PILLAR_5F 330 -#define LAYOUT_SKY_PILLAR_TOP 331 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_DOME_LOBBY 332 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR 333 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM 334 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM 335 -#define LAYOUT_MAGMA_HIDEOUT_1F 336 -#define LAYOUT_MAGMA_HIDEOUT_2F_1R 337 -#define LAYOUT_MAGMA_HIDEOUT_2F_2R 338 -#define LAYOUT_MAGMA_HIDEOUT_3F_1R 339 -#define LAYOUT_MAGMA_HIDEOUT_3F_2R 340 -#define LAYOUT_MAGMA_HIDEOUT_4F 341 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY 342 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR 343 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM 344 -#define LAYOUT_BATTLE_FRONTIER_OUTSIDE_EAST 345 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY 346 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM 347 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM 348 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY 349 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR 350 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM 351 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL 352 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL 353 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY 354 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR 355 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM 356 -#define LAYOUT_SOOTOPOLIS_CITY_LEGENDS_BATTLE 357 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS 358 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_UNUSED 359 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY 360 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR 361 -#define LAYOUT_BATTLE_PYRAMID_SQUARE01 362 -#define LAYOUT_BATTLE_PYRAMID_SQUARE02 363 -#define LAYOUT_BATTLE_PYRAMID_SQUARE03 364 -#define LAYOUT_BATTLE_PYRAMID_SQUARE04 365 -#define LAYOUT_BATTLE_PYRAMID_SQUARE05 366 -#define LAYOUT_BATTLE_PYRAMID_SQUARE06 367 -#define LAYOUT_BATTLE_PYRAMID_SQUARE07 368 -#define LAYOUT_BATTLE_PYRAMID_SQUARE08 369 -#define LAYOUT_BATTLE_PYRAMID_SQUARE09 370 -#define LAYOUT_BATTLE_PYRAMID_SQUARE10 371 -#define LAYOUT_BATTLE_PYRAMID_SQUARE11 372 -#define LAYOUT_BATTLE_PYRAMID_SQUARE12 373 -#define LAYOUT_BATTLE_PYRAMID_SQUARE13 374 -#define LAYOUT_BATTLE_PYRAMID_SQUARE14 375 -#define LAYOUT_BATTLE_PYRAMID_SQUARE15 376 -#define LAYOUT_BATTLE_PYRAMID_SQUARE16 377 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP 378 -#define LAYOUT_MAGMA_HIDEOUT_3F_3R 379 -#define LAYOUT_MAGMA_HIDEOUT_2F_3R 380 -#define LAYOUT_MIRAGE_TOWER_1F 381 -#define LAYOUT_MIRAGE_TOWER_2F 382 -#define LAYOUT_MIRAGE_TOWER_3F 383 -#define LAYOUT_BATTLE_TENT_LOBBY 384 -#define LAYOUT_BATTLE_TENT_CORRIDOR 385 -#define LAYOUT_BATTLE_TENT_BATTLE_ROOM 386 -#define LAYOUT_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM 387 -#define LAYOUT_MIRAGE_TOWER_4F 388 -#define LAYOUT_DESERT_UNDERPASS 389 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM 390 -#define LAYOUT_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR 391 -#define LAYOUT_ROUTE111_NO_MIRAGE_TOWER 392 -#define LAYOUT_UNION_ROOM 393 -#define LAYOUT_SAFARI_ZONE_NORTHEAST 394 -#define LAYOUT_SAFARI_ZONE_SOUTHEAST 395 -#define LAYOUT_BATTLE_FRONTIER_RANKING_HALL 396 -#define LAYOUT_BATTLE_FRONTIER_LOUNGE1 397 -#define LAYOUT_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER 398 -#define LAYOUT_BATTLE_FRONTIER_RECEPTION_GATE 399 -#define LAYOUT_ARTISAN_CAVE_B1F 400 -#define LAYOUT_ARTISAN_CAVE_1F 401 -#define LAYOUT_FARAWAY_ISLAND_ENTRANCE 402 -#define LAYOUT_FARAWAY_ISLAND_INTERIOR 403 -#define LAYOUT_BIRTH_ISLAND_EXTERIOR 404 -#define LAYOUT_ISLAND_HARBOR 405 -#define LAYOUT_UNDERWATER_MARINE_CAVE 406 -#define LAYOUT_MARINE_CAVE_ENTRANCE 407 -#define LAYOUT_TERRA_CAVE_ENTRANCE 408 -#define LAYOUT_TERRA_CAVE_END 409 -#define LAYOUT_UNDERWATER_ROUTE105 410 -#define LAYOUT_UNDERWATER_ROUTE125 411 -#define LAYOUT_UNDERWATER_ROUTE129 412 -#define LAYOUT_MARINE_CAVE_END 413 -#define LAYOUT_TRAINER_HILL_ENTRANCE 414 -#define LAYOUT_TRAINER_HILL_1F 415 -#define LAYOUT_TRAINER_HILL_2F 416 -#define LAYOUT_TRAINER_HILL_3F 417 -#define LAYOUT_TRAINER_HILL_4F 418 -#define LAYOUT_TRAINER_HILL_ROOF 419 -#define LAYOUT_ALTERING_CAVE 420 -#define LAYOUT_NAVEL_ROCK_EXTERIOR 421 -#define LAYOUT_NAVEL_ROCK_ENTRANCE 422 -#define LAYOUT_NAVEL_ROCK_TOP 423 -#define LAYOUT_NAVEL_ROCK_BOTTOM 424 -#define LAYOUT_NAVEL_ROCK_LADDER_ROOM1 425 -#define LAYOUT_NAVEL_ROCK_LADDER_ROOM2 426 -#define LAYOUT_NAVEL_ROCK_B1F 427 -#define LAYOUT_NAVEL_ROCK_FORK 428 -#define LAYOUT_BATTLE_FRONTIER_LOUNGE2 429 -#define LAYOUT_BATTLE_FRONTIER_SCOTTS_HOUSE 430 -#define LAYOUT_METEOR_FALLS_STEVENS_CAVE 431 -#define LAYOUT_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB_WITH_TABLE 432 -#define LAYOUT_SKY_PILLAR_1F_CLEAN 433 -#define LAYOUT_SKY_PILLAR_2F_CLEAN 434 -#define LAYOUT_SKY_PILLAR_3F_CLEAN 435 -#define LAYOUT_SKY_PILLAR_4F_CLEAN 436 -#define LAYOUT_SKY_PILLAR_5F_CLEAN 437 -#define LAYOUT_SKY_PILLAR_TOP_CLEAN 438 -#define LAYOUT_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F 439 -#define LAYOUT_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F 440 -#define LAYOUT_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F_STAIRS_UNBLOCKED 441 - -#endif // GUARD_CONSTANTS_LAYOUTS_H diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h deleted file mode 100755 index eaf40a525d..0000000000 --- a/include/constants/map_groups.h +++ /dev/null @@ -1,596 +0,0 @@ -#ifndef GUARD_CONSTANTS_MAP_GROUPS_H -#define GUARD_CONSTANTS_MAP_GROUPS_H - -// -// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json -// - -// gMapGroup_TownsAndRoutes -#define MAP_PETALBURG_CITY (0 | (0 << 8)) -#define MAP_SLATEPORT_CITY (1 | (0 << 8)) -#define MAP_MAUVILLE_CITY (2 | (0 << 8)) -#define MAP_RUSTBORO_CITY (3 | (0 << 8)) -#define MAP_FORTREE_CITY (4 | (0 << 8)) -#define MAP_LILYCOVE_CITY (5 | (0 << 8)) -#define MAP_MOSSDEEP_CITY (6 | (0 << 8)) -#define MAP_SOOTOPOLIS_CITY (7 | (0 << 8)) -#define MAP_EVER_GRANDE_CITY (8 | (0 << 8)) -#define MAP_LITTLEROOT_TOWN (9 | (0 << 8)) -#define MAP_OLDALE_TOWN (10 | (0 << 8)) -#define MAP_DEWFORD_TOWN (11 | (0 << 8)) -#define MAP_LAVARIDGE_TOWN (12 | (0 << 8)) -#define MAP_FALLARBOR_TOWN (13 | (0 << 8)) -#define MAP_VERDANTURF_TOWN (14 | (0 << 8)) -#define MAP_PACIFIDLOG_TOWN (15 | (0 << 8)) -#define MAP_ROUTE101 (16 | (0 << 8)) -#define MAP_ROUTE102 (17 | (0 << 8)) -#define MAP_ROUTE103 (18 | (0 << 8)) -#define MAP_ROUTE104 (19 | (0 << 8)) -#define MAP_ROUTE105 (20 | (0 << 8)) -#define MAP_ROUTE106 (21 | (0 << 8)) -#define MAP_ROUTE107 (22 | (0 << 8)) -#define MAP_ROUTE108 (23 | (0 << 8)) -#define MAP_ROUTE109 (24 | (0 << 8)) -#define MAP_ROUTE110 (25 | (0 << 8)) -#define MAP_ROUTE111 (26 | (0 << 8)) -#define MAP_ROUTE112 (27 | (0 << 8)) -#define MAP_ROUTE113 (28 | (0 << 8)) -#define MAP_ROUTE114 (29 | (0 << 8)) -#define MAP_ROUTE115 (30 | (0 << 8)) -#define MAP_ROUTE116 (31 | (0 << 8)) -#define MAP_ROUTE117 (32 | (0 << 8)) -#define MAP_ROUTE118 (33 | (0 << 8)) -#define MAP_ROUTE119 (34 | (0 << 8)) -#define MAP_ROUTE120 (35 | (0 << 8)) -#define MAP_ROUTE121 (36 | (0 << 8)) -#define MAP_ROUTE122 (37 | (0 << 8)) -#define MAP_ROUTE123 (38 | (0 << 8)) -#define MAP_ROUTE124 (39 | (0 << 8)) -#define MAP_ROUTE125 (40 | (0 << 8)) -#define MAP_ROUTE126 (41 | (0 << 8)) -#define MAP_ROUTE127 (42 | (0 << 8)) -#define MAP_ROUTE128 (43 | (0 << 8)) -#define MAP_ROUTE129 (44 | (0 << 8)) -#define MAP_ROUTE130 (45 | (0 << 8)) -#define MAP_ROUTE131 (46 | (0 << 8)) -#define MAP_ROUTE132 (47 | (0 << 8)) -#define MAP_ROUTE133 (48 | (0 << 8)) -#define MAP_ROUTE134 (49 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE124 (50 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE126 (51 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE127 (52 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE128 (53 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE129 (54 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE105 (55 | (0 << 8)) -#define MAP_UNDERWATER_ROUTE125 (56 | (0 << 8)) - -// gMapGroup_IndoorLittleroot -#define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F (0 | (1 << 8)) -#define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F (1 | (1 << 8)) -#define MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F (2 | (1 << 8)) -#define MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F (3 | (1 << 8)) -#define MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB (4 | (1 << 8)) - -// gMapGroup_IndoorOldale -#define MAP_OLDALE_TOWN_HOUSE1 (0 | (2 << 8)) -#define MAP_OLDALE_TOWN_HOUSE2 (1 | (2 << 8)) -#define MAP_OLDALE_TOWN_POKEMON_CENTER_1F (2 | (2 << 8)) -#define MAP_OLDALE_TOWN_POKEMON_CENTER_2F (3 | (2 << 8)) -#define MAP_OLDALE_TOWN_MART (4 | (2 << 8)) - -// gMapGroup_IndoorDewford -#define MAP_DEWFORD_TOWN_HOUSE1 (0 | (3 << 8)) -#define MAP_DEWFORD_TOWN_POKEMON_CENTER_1F (1 | (3 << 8)) -#define MAP_DEWFORD_TOWN_POKEMON_CENTER_2F (2 | (3 << 8)) -#define MAP_DEWFORD_TOWN_GYM (3 | (3 << 8)) -#define MAP_DEWFORD_TOWN_HALL (4 | (3 << 8)) -#define MAP_DEWFORD_TOWN_HOUSE2 (5 | (3 << 8)) - -// gMapGroup_IndoorLavaridge -#define MAP_LAVARIDGE_TOWN_HERB_SHOP (0 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_GYM_1F (1 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_GYM_B1F (2 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_HOUSE (3 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_MART (4 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F (5 | (4 << 8)) -#define MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F (6 | (4 << 8)) - -// gMapGroup_IndoorFallarbor -#define MAP_FALLARBOR_TOWN_MART (0 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY (1 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR (2 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_BATTLE_TENT_BATTLE_ROOM (3 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F (4 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F (5 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_COZMOS_HOUSE (6 | (5 << 8)) -#define MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE (7 | (5 << 8)) - -// gMapGroup_IndoorVerdanturf -#define MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY (0 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR (1 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM (2 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_MART (3 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F (4 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F (5 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_WANDAS_HOUSE (6 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE (7 | (6 << 8)) -#define MAP_VERDANTURF_TOWN_HOUSE (8 | (6 << 8)) - -// gMapGroup_IndoorPacifidlog -#define MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F (0 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F (1 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE1 (2 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE2 (3 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE3 (4 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE4 (5 | (7 << 8)) -#define MAP_PACIFIDLOG_TOWN_HOUSE5 (6 | (7 << 8)) - -// gMapGroup_IndoorPetalburg -#define MAP_PETALBURG_CITY_WALLYS_HOUSE (0 | (8 << 8)) -#define MAP_PETALBURG_CITY_GYM (1 | (8 << 8)) -#define MAP_PETALBURG_CITY_HOUSE1 (2 | (8 << 8)) -#define MAP_PETALBURG_CITY_HOUSE2 (3 | (8 << 8)) -#define MAP_PETALBURG_CITY_POKEMON_CENTER_1F (4 | (8 << 8)) -#define MAP_PETALBURG_CITY_POKEMON_CENTER_2F (5 | (8 << 8)) -#define MAP_PETALBURG_CITY_MART (6 | (8 << 8)) - -// gMapGroup_IndoorSlateport -#define MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F (0 | (9 << 8)) -#define MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F (1 | (9 << 8)) -#define MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY (2 | (9 << 8)) -#define MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR (3 | (9 << 8)) -#define MAP_SLATEPORT_CITY_BATTLE_TENT_BATTLE_ROOM (4 | (9 << 8)) -#define MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE (5 | (9 << 8)) -#define MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB (6 | (9 << 8)) -#define MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F (7 | (9 << 8)) -#define MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F (8 | (9 << 8)) -#define MAP_SLATEPORT_CITY_HARBOR (9 | (9 << 8)) -#define MAP_SLATEPORT_CITY_HOUSE (10 | (9 << 8)) -#define MAP_SLATEPORT_CITY_POKEMON_CENTER_1F (11 | (9 << 8)) -#define MAP_SLATEPORT_CITY_POKEMON_CENTER_2F (12 | (9 << 8)) -#define MAP_SLATEPORT_CITY_MART (13 | (9 << 8)) - -// gMapGroup_IndoorMauville -#define MAP_MAUVILLE_CITY_GYM (0 | (10 << 8)) -#define MAP_MAUVILLE_CITY_BIKE_SHOP (1 | (10 << 8)) -#define MAP_MAUVILLE_CITY_HOUSE1 (2 | (10 << 8)) -#define MAP_MAUVILLE_CITY_GAME_CORNER (3 | (10 << 8)) -#define MAP_MAUVILLE_CITY_HOUSE2 (4 | (10 << 8)) -#define MAP_MAUVILLE_CITY_POKEMON_CENTER_1F (5 | (10 << 8)) -#define MAP_MAUVILLE_CITY_POKEMON_CENTER_2F (6 | (10 << 8)) -#define MAP_MAUVILLE_CITY_MART (7 | (10 << 8)) - -// gMapGroup_IndoorRustboro -#define MAP_RUSTBORO_CITY_DEVON_CORP_1F (0 | (11 << 8)) -#define MAP_RUSTBORO_CITY_DEVON_CORP_2F (1 | (11 << 8)) -#define MAP_RUSTBORO_CITY_DEVON_CORP_3F (2 | (11 << 8)) -#define MAP_RUSTBORO_CITY_GYM (3 | (11 << 8)) -#define MAP_RUSTBORO_CITY_POKEMON_SCHOOL (4 | (11 << 8)) -#define MAP_RUSTBORO_CITY_POKEMON_CENTER_1F (5 | (11 << 8)) -#define MAP_RUSTBORO_CITY_POKEMON_CENTER_2F (6 | (11 << 8)) -#define MAP_RUSTBORO_CITY_MART (7 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT1_1F (8 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT1_2F (9 | (11 << 8)) -#define MAP_RUSTBORO_CITY_HOUSE1 (10 | (11 << 8)) -#define MAP_RUSTBORO_CITY_CUTTERS_HOUSE (11 | (11 << 8)) -#define MAP_RUSTBORO_CITY_HOUSE2 (12 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT2_1F (13 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT2_2F (14 | (11 << 8)) -#define MAP_RUSTBORO_CITY_FLAT2_3F (15 | (11 << 8)) -#define MAP_RUSTBORO_CITY_HOUSE3 (16 | (11 << 8)) - -// gMapGroup_IndoorFortree -#define MAP_FORTREE_CITY_HOUSE1 (0 | (12 << 8)) -#define MAP_FORTREE_CITY_GYM (1 | (12 << 8)) -#define MAP_FORTREE_CITY_POKEMON_CENTER_1F (2 | (12 << 8)) -#define MAP_FORTREE_CITY_POKEMON_CENTER_2F (3 | (12 << 8)) -#define MAP_FORTREE_CITY_MART (4 | (12 << 8)) -#define MAP_FORTREE_CITY_HOUSE2 (5 | (12 << 8)) -#define MAP_FORTREE_CITY_HOUSE3 (6 | (12 << 8)) -#define MAP_FORTREE_CITY_HOUSE4 (7 | (12 << 8)) -#define MAP_FORTREE_CITY_HOUSE5 (8 | (12 << 8)) -#define MAP_FORTREE_CITY_DECORATION_SHOP (9 | (12 << 8)) - -// gMapGroup_IndoorLilycove -#define MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F (0 | (13 << 8)) -#define MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F (1 | (13 << 8)) -#define MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F (2 | (13 << 8)) -#define MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F (3 | (13 << 8)) -#define MAP_LILYCOVE_CITY_CONTEST_LOBBY (4 | (13 << 8)) -#define MAP_LILYCOVE_CITY_CONTEST_HALL (5 | (13 << 8)) -#define MAP_LILYCOVE_CITY_POKEMON_CENTER_1F (6 | (13 << 8)) -#define MAP_LILYCOVE_CITY_POKEMON_CENTER_2F (7 | (13 << 8)) -#define MAP_LILYCOVE_CITY_UNUSED_MART (8 | (13 << 8)) -#define MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB (9 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HARBOR (10 | (13 << 8)) -#define MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE (11 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HOUSE1 (12 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HOUSE2 (13 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HOUSE3 (14 | (13 << 8)) -#define MAP_LILYCOVE_CITY_HOUSE4 (15 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F (16 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F (17 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F (18 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F (19 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F (20 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP (21 | (13 << 8)) -#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR (22 | (13 << 8)) - -// gMapGroup_IndoorMossdeep -#define MAP_MOSSDEEP_CITY_GYM (0 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_HOUSE1 (1 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_HOUSE2 (2 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F (3 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F (4 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_MART (5 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_HOUSE3 (6 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_STEVENS_HOUSE (7 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_HOUSE4 (8 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_SPACE_CENTER_1F (9 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_SPACE_CENTER_2F (10 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_GAME_CORNER_1F (11 | (14 << 8)) -#define MAP_MOSSDEEP_CITY_GAME_CORNER_B1F (12 | (14 << 8)) - -// gMapGroup_IndoorSootopolis -#define MAP_SOOTOPOLIS_CITY_GYM_1F (0 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_GYM_B1F (1 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F (2 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F (3 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_MART (4 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE1 (5 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE2 (6 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE3 (7 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE4 (8 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE5 (9 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE6 (10 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_HOUSE7 (11 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE (12 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F (13 | (15 << 8)) -#define MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F (14 | (15 << 8)) - -// gMapGroup_IndoorEverGrande -#define MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM (0 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_PHOEBES_ROOM (1 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_GLACIAS_ROOM (2 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_DRAKES_ROOM (3 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM (4 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL1 (5 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL2 (6 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL3 (7 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL4 (8 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL5 (9 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F (10 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_HALL_OF_FAME (11 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F (12 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F (13 | (16 << 8)) -#define MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F (14 | (16 << 8)) - -// gMapGroup_IndoorRoute104 -#define MAP_ROUTE104_MR_BRINEYS_HOUSE (0 | (17 << 8)) -#define MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP (1 | (17 << 8)) - -// gMapGroup_IndoorRoute111 -#define MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE (0 | (18 << 8)) -#define MAP_ROUTE111_OLD_LADYS_REST_STOP (1 | (18 << 8)) - -// gMapGroup_IndoorRoute112 -#define MAP_ROUTE112_CABLE_CAR_STATION (0 | (19 << 8)) -#define MAP_MT_CHIMNEY_CABLE_CAR_STATION (1 | (19 << 8)) - -// gMapGroup_IndoorRoute114 -#define MAP_ROUTE114_FOSSIL_MANIACS_HOUSE (0 | (20 << 8)) -#define MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL (1 | (20 << 8)) -#define MAP_ROUTE114_LANETTES_HOUSE (2 | (20 << 8)) - -// gMapGroup_IndoorRoute116 -#define MAP_ROUTE116_TUNNELERS_REST_HOUSE (0 | (21 << 8)) - -// gMapGroup_IndoorRoute117 -#define MAP_ROUTE117_POKEMON_DAY_CARE (0 | (22 << 8)) - -// gMapGroup_IndoorRoute121 -#define MAP_ROUTE121_SAFARI_ZONE_ENTRANCE (0 | (23 << 8)) - -// gMapGroup_Dungeons -#define MAP_METEOR_FALLS_1F_1R (0 | (24 << 8)) -#define MAP_METEOR_FALLS_1F_2R (1 | (24 << 8)) -#define MAP_METEOR_FALLS_B1F_1R (2 | (24 << 8)) -#define MAP_METEOR_FALLS_B1F_2R (3 | (24 << 8)) -#define MAP_RUSTURF_TUNNEL (4 | (24 << 8)) -#define MAP_UNDERWATER_SOOTOPOLIS_CITY (5 | (24 << 8)) -#define MAP_DESERT_RUINS (6 | (24 << 8)) -#define MAP_GRANITE_CAVE_1F (7 | (24 << 8)) -#define MAP_GRANITE_CAVE_B1F (8 | (24 << 8)) -#define MAP_GRANITE_CAVE_B2F (9 | (24 << 8)) -#define MAP_GRANITE_CAVE_STEVENS_ROOM (10 | (24 << 8)) -#define MAP_PETALBURG_WOODS (11 | (24 << 8)) -#define MAP_MT_CHIMNEY (12 | (24 << 8)) -#define MAP_JAGGED_PASS (13 | (24 << 8)) -#define MAP_FIERY_PATH (14 | (24 << 8)) -#define MAP_MT_PYRE_1F (15 | (24 << 8)) -#define MAP_MT_PYRE_2F (16 | (24 << 8)) -#define MAP_MT_PYRE_3F (17 | (24 << 8)) -#define MAP_MT_PYRE_4F (18 | (24 << 8)) -#define MAP_MT_PYRE_5F (19 | (24 << 8)) -#define MAP_MT_PYRE_6F (20 | (24 << 8)) -#define MAP_MT_PYRE_EXTERIOR (21 | (24 << 8)) -#define MAP_MT_PYRE_SUMMIT (22 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_1F (23 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_B1F (24 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_B2F (25 | (24 << 8)) -#define MAP_UNDERWATER_SEAFLOOR_CAVERN (26 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ENTRANCE (27 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM1 (28 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM2 (29 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM3 (30 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM4 (31 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM5 (32 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM6 (33 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM7 (34 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM8 (35 | (24 << 8)) -#define MAP_SEAFLOOR_CAVERN_ROOM9 (36 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_ENTRANCE (37 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_1F (38 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1 (39 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2 (40 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3 (41 | (24 << 8)) -#define MAP_CAVE_OF_ORIGIN_B1F (42 | (24 << 8)) -#define MAP_VICTORY_ROAD_1F (43 | (24 << 8)) -#define MAP_VICTORY_ROAD_B1F (44 | (24 << 8)) -#define MAP_VICTORY_ROAD_B2F (45 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM (46 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM (47 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM (48 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM (49 | (24 << 8)) -#define MAP_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM (50 | (24 << 8)) -#define MAP_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM (51 | (24 << 8)) -#define MAP_NEW_MAUVILLE_ENTRANCE (52 | (24 << 8)) -#define MAP_NEW_MAUVILLE_INSIDE (53 | (24 << 8)) -#define MAP_ABANDONED_SHIP_DECK (54 | (24 << 8)) -#define MAP_ABANDONED_SHIP_CORRIDORS_1F (55 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOMS_1F (56 | (24 << 8)) -#define MAP_ABANDONED_SHIP_CORRIDORS_B1F (57 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOMS_B1F (58 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOMS2_B1F (59 | (24 << 8)) -#define MAP_ABANDONED_SHIP_UNDERWATER1 (60 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOM_B1F (61 | (24 << 8)) -#define MAP_ABANDONED_SHIP_ROOMS2_1F (62 | (24 << 8)) -#define MAP_ABANDONED_SHIP_CAPTAINS_OFFICE (63 | (24 << 8)) -#define MAP_ABANDONED_SHIP_UNDERWATER2 (64 | (24 << 8)) -#define MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS (65 | (24 << 8)) -#define MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS (66 | (24 << 8)) -#define MAP_ISLAND_CAVE (67 | (24 << 8)) -#define MAP_ANCIENT_TOMB (68 | (24 << 8)) -#define MAP_UNDERWATER_ROUTE134 (69 | (24 << 8)) -#define MAP_UNDERWATER_SEALED_CHAMBER (70 | (24 << 8)) -#define MAP_SEALED_CHAMBER_OUTER_ROOM (71 | (24 << 8)) -#define MAP_SEALED_CHAMBER_INNER_ROOM (72 | (24 << 8)) -#define MAP_SCORCHED_SLAB (73 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP1 (74 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP2 (75 | (24 << 8)) -#define MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP3 (76 | (24 << 8)) -#define MAP_SKY_PILLAR_ENTRANCE (77 | (24 << 8)) -#define MAP_SKY_PILLAR_OUTSIDE (78 | (24 << 8)) -#define MAP_SKY_PILLAR_1F (79 | (24 << 8)) -#define MAP_SKY_PILLAR_2F (80 | (24 << 8)) -#define MAP_SKY_PILLAR_3F (81 | (24 << 8)) -#define MAP_SKY_PILLAR_4F (82 | (24 << 8)) -#define MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM (83 | (24 << 8)) -#define MAP_SKY_PILLAR_5F (84 | (24 << 8)) -#define MAP_SKY_PILLAR_TOP (85 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_1F (86 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_2F_1R (87 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_2F_2R (88 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_3F_1R (89 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_3F_2R (90 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_4F (91 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_3F_3R (92 | (24 << 8)) -#define MAP_MAGMA_HIDEOUT_2F_3R (93 | (24 << 8)) -#define MAP_MIRAGE_TOWER_1F (94 | (24 << 8)) -#define MAP_MIRAGE_TOWER_2F (95 | (24 << 8)) -#define MAP_MIRAGE_TOWER_3F (96 | (24 << 8)) -#define MAP_MIRAGE_TOWER_4F (97 | (24 << 8)) -#define MAP_DESERT_UNDERPASS (98 | (24 << 8)) -#define MAP_ARTISAN_CAVE_B1F (99 | (24 << 8)) -#define MAP_ARTISAN_CAVE_1F (100 | (24 << 8)) -#define MAP_UNDERWATER_MARINE_CAVE (101 | (24 << 8)) -#define MAP_MARINE_CAVE_ENTRANCE (102 | (24 << 8)) -#define MAP_MARINE_CAVE_END (103 | (24 << 8)) -#define MAP_TERRA_CAVE_ENTRANCE (104 | (24 << 8)) -#define MAP_TERRA_CAVE_END (105 | (24 << 8)) -#define MAP_ALTERING_CAVE (106 | (24 << 8)) -#define MAP_METEOR_FALLS_STEVENS_CAVE (107 | (24 << 8)) - -// gMapGroup_IndoorDynamic -#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8)) -#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8)) -#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8)) -#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8)) -#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8)) -#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8)) -#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8)) -#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8)) -#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8)) -#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8)) -#define MAP_BATTLE_COLOSSEUM_2P (24 | (25 << 8)) -#define MAP_TRADE_CENTER (25 | (25 << 8)) -#define MAP_RECORD_CORNER (26 | (25 << 8)) -#define MAP_BATTLE_COLOSSEUM_4P (27 | (25 << 8)) -#define MAP_CONTEST_HALL (28 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL1 (29 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL2 (30 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL3 (31 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL4 (32 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL5 (33 | (25 << 8)) -#define MAP_UNUSED_CONTEST_HALL6 (34 | (25 << 8)) -#define MAP_CONTEST_HALL_BEAUTY (35 | (25 << 8)) -#define MAP_CONTEST_HALL_TOUGH (36 | (25 << 8)) -#define MAP_CONTEST_HALL_COOL (37 | (25 << 8)) -#define MAP_CONTEST_HALL_SMART (38 | (25 << 8)) -#define MAP_CONTEST_HALL_CUTE (39 | (25 << 8)) -#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8)) -#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8)) -#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8)) -#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8)) -#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8)) -#define MAP_UNION_ROOM (60 | (25 << 8)) - -// gMapGroup_SpecialArea -#define MAP_SAFARI_ZONE_NORTHWEST (0 | (26 << 8)) -#define MAP_SAFARI_ZONE_NORTH (1 | (26 << 8)) -#define MAP_SAFARI_ZONE_SOUTHWEST (2 | (26 << 8)) -#define MAP_SAFARI_ZONE_SOUTH (3 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_OUTSIDE_WEST (4 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY (5 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR (6 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR (7 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM (8 | (26 << 8)) -#define MAP_SOUTHERN_ISLAND_EXTERIOR (9 | (26 << 8)) -#define MAP_SOUTHERN_ISLAND_INTERIOR (10 | (26 << 8)) -#define MAP_SAFARI_ZONE_REST_HOUSE (11 | (26 << 8)) -#define MAP_SAFARI_ZONE_NORTHEAST (12 | (26 << 8)) -#define MAP_SAFARI_ZONE_SOUTHEAST (13 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_OUTSIDE_EAST (14 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM (15 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR (16 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM (17 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY (18 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR (19 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM (20 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM (21 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY (22 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR (23 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM (24 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY (25 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR (26 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP (27 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY (28 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR (29 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM (30 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY (31 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM (32 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM (33 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY (34 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR (35 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM (36 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL (37 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL (38 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS (39 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_RANKING_HALL (40 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE1 (41 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER (42 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE2 (43 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE3 (44 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE4 (45 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_SCOTTS_HOUSE (46 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE5 (47 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE6 (48 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE7 (49 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_RECEPTION_GATE (50 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE8 (51 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_LOUNGE9 (52 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F (53 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F (54 | (26 << 8)) -#define MAP_BATTLE_FRONTIER_MART (55 | (26 << 8)) -#define MAP_FARAWAY_ISLAND_ENTRANCE (56 | (26 << 8)) -#define MAP_FARAWAY_ISLAND_INTERIOR (57 | (26 << 8)) -#define MAP_BIRTH_ISLAND_EXTERIOR (58 | (26 << 8)) -#define MAP_BIRTH_ISLAND_HARBOR (59 | (26 << 8)) -#define MAP_TRAINER_HILL_ENTRANCE (60 | (26 << 8)) -#define MAP_TRAINER_HILL_1F (61 | (26 << 8)) -#define MAP_TRAINER_HILL_2F (62 | (26 << 8)) -#define MAP_TRAINER_HILL_3F (63 | (26 << 8)) -#define MAP_TRAINER_HILL_4F (64 | (26 << 8)) -#define MAP_TRAINER_HILL_ROOF (65 | (26 << 8)) -#define MAP_NAVEL_ROCK_EXTERIOR (66 | (26 << 8)) -#define MAP_NAVEL_ROCK_HARBOR (67 | (26 << 8)) -#define MAP_NAVEL_ROCK_ENTRANCE (68 | (26 << 8)) -#define MAP_NAVEL_ROCK_B1F (69 | (26 << 8)) -#define MAP_NAVEL_ROCK_FORK (70 | (26 << 8)) -#define MAP_NAVEL_ROCK_UP1 (71 | (26 << 8)) -#define MAP_NAVEL_ROCK_UP2 (72 | (26 << 8)) -#define MAP_NAVEL_ROCK_UP3 (73 | (26 << 8)) -#define MAP_NAVEL_ROCK_UP4 (74 | (26 << 8)) -#define MAP_NAVEL_ROCK_TOP (75 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN01 (76 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN02 (77 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN03 (78 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN04 (79 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN05 (80 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN06 (81 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN07 (82 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN08 (83 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN09 (84 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN10 (85 | (26 << 8)) -#define MAP_NAVEL_ROCK_DOWN11 (86 | (26 << 8)) -#define MAP_NAVEL_ROCK_BOTTOM (87 | (26 << 8)) -#define MAP_TRAINER_HILL_ELEVATOR (88 | (26 << 8)) - -// gMapGroup_IndoorRoute104Prototype -#define MAP_ROUTE104_PROTOTYPE (0 | (27 << 8)) -#define MAP_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP (1 | (27 << 8)) - -// gMapGroup_IndoorRoute109 -#define MAP_ROUTE109_SEASHORE_HOUSE (0 | (28 << 8)) - -// gMapGroup_IndoorRoute110 -#define MAP_ROUTE110_TRICK_HOUSE_ENTRANCE (0 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_END (1 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_CORRIDOR (2 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE1 (3 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE2 (4 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE3 (5 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE4 (6 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE5 (7 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE6 (8 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE7 (9 | (29 << 8)) -#define MAP_ROUTE110_TRICK_HOUSE_PUZZLE8 (10 | (29 << 8)) -#define MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE (11 | (29 << 8)) -#define MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE (12 | (29 << 8)) - -// gMapGroup_IndoorRoute113 -#define MAP_ROUTE113_GLASS_WORKSHOP (0 | (30 << 8)) - -// gMapGroup_IndoorRoute123 -#define MAP_ROUTE123_BERRY_MASTERS_HOUSE (0 | (31 << 8)) - -// gMapGroup_IndoorRoute119 -#define MAP_ROUTE119_WEATHER_INSTITUTE_1F (0 | (32 << 8)) -#define MAP_ROUTE119_WEATHER_INSTITUTE_2F (1 | (32 << 8)) -#define MAP_ROUTE119_HOUSE (2 | (32 << 8)) - -// gMapGroup_IndoorRoute124 -#define MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE (0 | (33 << 8)) - -#define MAP_GROUPS_COUNT 34 - -#endif // GUARD_CONSTANTS_MAP_GROUPS_H diff --git a/make_tools.mk b/make_tools.mk index 7e0baf8900..7adf510319 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -1,12 +1,20 @@ +# This controls building executables in the `tools` folder. +# Can be invoked through the `Makefile` or standalone. MAKEFLAGS += --no-print-directory # Inclusive list. If you don't want a tool to be built, don't add it here. -TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc +TOOLS_DIR := tools +TOOL_NAMES := aif2pcm bin2c gbafix gbagfx jsonproc mapjson mid2agb preproc ramscrgen rsfont scaninc -.PHONY: all $(TOOLDIRS) +TOOLDIRS := $(TOOL_NAMES:%=$(TOOLS_DIR)/%) -all: $(TOOLDIRS) +.PHONY: tools check-tools clean-tools $(TOOLDIRS) + +tools: $(TOOLDIRS) $(TOOLDIRS): @$(MAKE) -C $@ + +clean-tools: + @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) diff --git a/map_data_rules.mk b/map_data_rules.mk index d3f47a352e..ed7c08edea 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -1,8 +1,17 @@ # Map JSON data +# Inputs MAPS_DIR = $(DATA_ASM_SUBDIR)/maps LAYOUTS_DIR = $(DATA_ASM_SUBDIR)/layouts +# Outputs +MAPS_OUTDIR := $(MAPS_DIR) +LAYOUTS_OUTDIR := $(LAYOUTS_DIR) +INCLUDECONSTS_OUTDIR := include/constants + +AUTO_GEN_TARGETS += $(INCLUDECONSTS_OUTDIR)/map_groups.h +AUTO_GEN_TARGETS += $(INCLUDECONSTS_OUTDIR)/layouts.h + MAP_DIRS := $(dir $(wildcard $(MAPS_DIR)/*/map.json)) MAP_CONNECTIONS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/connections.inc,$(MAP_DIRS)) MAP_EVENTS := $(patsubst $(MAPS_DIR)/%/,$(MAPS_DIR)/%/events.inc,$(MAP_DIRS)) @@ -13,19 +22,12 @@ $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.in $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ -$(MAPS_DIR)/%/header.inc: $(MAPS_DIR)/%/map.json - $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json -$(MAPS_DIR)/%/events.inc: $(MAPS_DIR)/%/header.inc ; -$(MAPS_DIR)/%/connections.inc: $(MAPS_DIR)/%/events.inc ; -$(MAPS_DIR)/groups.inc: $(MAPS_DIR)/map_groups.json - $(MAPJSON) groups emerald $< -$(MAPS_DIR)/connections.inc: $(MAPS_DIR)/groups.inc ; -$(MAPS_DIR)/events.inc: $(MAPS_DIR)/connections.inc ; -$(MAPS_DIR)/headers.inc: $(MAPS_DIR)/events.inc ; -include/constants/map_groups.h: $(MAPS_DIR)/headers.inc ; +$(MAPS_OUTDIR)/%/header.inc $(MAPS_OUTDIR)/%/events.inc $(MAPS_OUTDIR)/%/connections.inc: $(MAPS_DIR)/%/map.json + $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json $(@D) -$(LAYOUTS_DIR)/layouts.inc: $(LAYOUTS_DIR)/layouts.json - $(MAPJSON) layouts emerald $< -$(LAYOUTS_DIR)/layouts_table.inc: $(LAYOUTS_DIR)/layouts.inc ; -include/constants/layouts.h: $(LAYOUTS_DIR)/layouts_table.inc ; +$(MAPS_OUTDIR)/connections.inc $(MAPS_OUTDIR)/groups.inc $(MAPS_OUTDIR)/events.inc $(MAPS_OUTDIR)/headers.inc $(INCLUDECONSTS_OUTDIR)/map_groups.h: $(MAPS_DIR)/map_groups.json + $(MAPJSON) groups emerald $< $(MAPS_OUTDIR) $(INCLUDECONSTS_OUTDIR) + +$(LAYOUTS_OUTDIR)/layouts.inc $(LAYOUTS_OUTDIR)/layouts_table.inc $(INCLUDECONSTS_OUTDIR)/layouts.h: $(LAYOUTS_DIR)/layouts.json + $(MAPJSON) layouts emerald $< $(LAYOUTS_OUTDIR) $(INCLUDECONSTS_OUTDIR) diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp index 9ef23cd43e..03e51b765a 100755 --- a/tools/jsonproc/jsonproc.cpp +++ b/tools/jsonproc/jsonproc.cpp @@ -1,4 +1,6 @@ // jsonproc.cpp +// jsonproc converts JSON data to an output file based on an Inja template. +// https://github.com/pantor/inja #include "jsonproc.h" diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index e53ac7924d..1a10c9dab8 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -30,6 +30,8 @@ using json11::Json; #include "mapjson.h" string version; +// System directory separator +string sep; string read_text_file(string filepath) { ifstream in_file(filepath); @@ -330,13 +332,22 @@ string generate_map_events_text(Json map_data) { return text.str(); } -string get_directory_name(string filename) { - size_t dir_pos = filename.find_last_of("/\\"); +string strip_trailing_separator(string filename) { + if(filename.back() == '/' || filename.back() == '\\') + filename.pop_back(); + return filename; +} +void infer_separator(string filename) { + size_t dir_pos = filename.find_last_of("/\\"); + sep = filename[dir_pos]; +} +string file_parent(string filename){ + size_t dir_pos = filename.find_last_of("/\\"); return filename.substr(0, dir_pos + 1); } -void process_map(string map_filepath, string layouts_filepath) { +void process_map(string map_filepath, string layouts_filepath, string output_dir) { string mapdata_err, layouts_err; string mapdata_json_text = read_text_file(map_filepath); @@ -354,10 +365,10 @@ void process_map(string map_filepath, string layouts_filepath) { string events_text = generate_map_events_text(map_data); string connections_text = generate_map_connections_text(map_data); - string files_dir = get_directory_name(map_filepath); - write_text_file(files_dir + "header.inc", header_text); - write_text_file(files_dir + "events.inc", events_text); - write_text_file(files_dir + "connections.inc", connections_text); + string out_dir = strip_trailing_separator(output_dir).append(sep); + write_text_file(out_dir + "header.inc", header_text); + write_text_file(out_dir + "events.inc", events_text); + write_text_file(out_dir + "connections.inc", connections_text); } string generate_groups_text(Json groups_data) { @@ -382,7 +393,7 @@ string generate_groups_text(Json groups_data) { return text.str(); } -string generate_connections_text(Json groups_data) { +string generate_connections_text(Json groups_data, string include_path) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) @@ -407,12 +418,12 @@ string generate_connections_text(Json groups_data) { text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; for (Json map_name : map_names) - text << "\t.include \"data/maps/" << json_to_string(map_name) << "/connections.inc\"\n"; + text << "\t.include \"" << include_path << "/" << json_to_string(map_name) << "/connections.inc\"\n"; return text.str(); } -string generate_headers_text(Json groups_data) { +string generate_headers_text(Json groups_data, string include_path) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) @@ -424,12 +435,12 @@ string generate_headers_text(Json groups_data) { text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; for (string map_name : map_names) - text << "\t.include \"data/maps/" << map_name << "/header.inc\"\n"; + text << "\t.include \"" << include_path << "/" << map_name << "/header.inc\"\n"; return text.str(); } -string generate_events_text(Json groups_data) { +string generate_events_text(Json groups_data, string include_path) { vector map_names; for (auto &group : groups_data["group_order"].array_items()) @@ -438,17 +449,16 @@ string generate_events_text(Json groups_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from " << include_path << "/map_groups.json\n@\n\n"; for (string map_name : map_names) - text << "\t.include \"data/maps/" << map_name << "/events.inc\"\n"; + text << "\t.include \"" << include_path << "/" << map_name << "/events.inc\"\n"; return text.str(); } string generate_map_constants_text(string groups_filepath, Json groups_data) { - string file_dir = get_directory_name(groups_filepath); - char dir_separator = file_dir.back(); + string file_dir = file_parent(groups_filepath) + sep; ostringstream text; @@ -466,7 +476,7 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { size_t max_length = 0; for (auto &map_name : groups_data[groupName].array_items()) { - string map_filepath = file_dir + json_to_string(map_name) + dir_separator + "map.json"; + string map_filepath = file_dir + json_to_string(map_name) + sep + "map.json"; string err_str; Json map_data = Json::parse(read_text_file(map_filepath), err_str); if (map_data == Json()) @@ -493,7 +503,11 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { return text.str(); } -void process_groups(string groups_filepath) { +// Output paths are directories with trailing path separators +void process_groups(string groups_filepath, string output_asm, string output_c) { + output_asm = strip_trailing_separator(output_asm); // Remove separator if existing. + output_c = strip_trailing_separator(output_c); + string err; Json groups_data = Json::parse(read_text_file(groups_filepath), err); @@ -501,19 +515,16 @@ void process_groups(string groups_filepath) { FATAL_ERROR("%s\n", err.c_str()); string groups_text = generate_groups_text(groups_data); - string connections_text = generate_connections_text(groups_data); - string headers_text = generate_headers_text(groups_data); - string events_text = generate_events_text(groups_data); + string connections_text = generate_connections_text(groups_data, output_asm); + string headers_text = generate_headers_text(groups_data, output_asm); + string events_text = generate_events_text(groups_data, output_asm); string map_header_text = generate_map_constants_text(groups_filepath, groups_data); - string file_dir = get_directory_name(groups_filepath); - char s = file_dir.back(); - - write_text_file(file_dir + "groups.inc", groups_text); - write_text_file(file_dir + "connections.inc", connections_text); - write_text_file(file_dir + "headers.inc", headers_text); - write_text_file(file_dir + "events.inc", events_text); - write_text_file(file_dir + ".." + s + ".." + s + "include" + s + "constants" + s + "map_groups.h", map_header_text); + write_text_file(output_asm + sep + "groups.inc", groups_text); + write_text_file(output_asm + sep + "connections.inc", connections_text); + write_text_file(output_asm + sep + "headers.inc", headers_text); + write_text_file(output_asm + sep + "events.inc", events_text); + write_text_file(output_c + sep + "map_groups.h", map_header_text); } string generate_layout_headers_text(Json layouts_data) { @@ -586,7 +597,10 @@ string generate_layouts_constants_text(Json layouts_data) { return text.str(); } -void process_layouts(string layouts_filepath) { +void process_layouts(string layouts_filepath, string output_asm, string output_c) { + output_asm = strip_trailing_separator(output_asm).append(sep); + output_c = strip_trailing_separator(output_c).append(sep); + string err; Json layouts_data = Json::parse(read_text_file(layouts_filepath), err); @@ -597,12 +611,9 @@ void process_layouts(string layouts_filepath) { string layouts_table_text = generate_layouts_table_text(layouts_data); string layouts_constants_text = generate_layouts_constants_text(layouts_data); - string file_dir = get_directory_name(layouts_filepath); - char s = file_dir.back(); - - write_text_file(file_dir + "layouts.inc", layout_headers_text); - write_text_file(file_dir + "layouts_table.inc", layouts_table_text); - write_text_file(file_dir + ".." + s + ".." + s + "include" + s + "constants" + s + "layouts.h", layouts_constants_text); + write_text_file(output_asm + "layouts.inc", layout_headers_text); + write_text_file(output_asm + "layouts_table.inc", layouts_table_text); + write_text_file(output_c + "layouts.h", layouts_constants_text); } int main(int argc, char *argv[]) { @@ -620,29 +631,40 @@ int main(int argc, char *argv[]) { FATAL_ERROR("ERROR: must be 'layouts', 'map', or 'groups'.\n"); if (mode == "map") { - if (argc != 5) - FATAL_ERROR("USAGE: mapjson map \n"); + if (argc != 6) + FATAL_ERROR("USAGE: mapjson map \n"); + infer_separator(argv[3]); string filepath(argv[3]); string layouts_filepath(argv[4]); + string output_dir(argv[5]); - process_map(filepath, layouts_filepath); + process_map(filepath, layouts_filepath, output_dir); } else if (mode == "groups") { - if (argc != 4) - FATAL_ERROR("USAGE: mapjson groups \n"); + if (argc != 6) + FATAL_ERROR("USAGE: mapjson groups \n"); + infer_separator(argv[3]); string filepath(argv[3]); + string output_asm(argv[4]); + string output_c(argv[5]); - process_groups(filepath); + process_groups(filepath, output_asm, output_c); } else if (mode == "layouts") { - if (argc != 4) - FATAL_ERROR("USAGE: mapjson layouts \n"); + if (argc != 6) + FATAL_ERROR("USAGE: mapjson layouts \n"); + infer_separator(argv[3]); string filepath(argv[3]); + string output_asm(argv[4]); + string output_c(argv[5]); - process_layouts(filepath); + process_layouts(filepath, output_asm, output_c); + } + else { + FATAL_ERROR("ERROR: must be 'layouts', 'map', or 'groups'.\n"); } return 0; From 4f393541855e35e1c5bbc2b98ffd1207cb36378b Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:33:25 -0700 Subject: [PATCH 138/544] Deprecate MMBN Names (#5240) * Removed HANDLE_EXPANDED_MOVE_NAME * Removed HANDLE_EXPANDED_TYPE_NAME * Removed HANDLE_EXPANDED_ITEM_NAME * Removed HANDLE_EXPANDED_SPECIES_NAME * Removed I_EXPANDED_ITEM_NAMES * Removed B_EXPANDED_MOVE_NAMES * Removed B_EXPANDED_TYPE_NAMES * Removed B_EXPANDED_ABILITY_NAMES * Removed B_EXPANDED_ABILITY_NAMES * Added documentation of names * Github markdown spacing is silly * Removed list per https://github.com/rh-hideout/pokeemerald-expansion/pull/5240\#discussion_r1736860339 * Removed list per https://github.com/rh-hideout/pokeemerald-expansion/pull/5240\#discussion_r1736860339 --- docs/mmbn_style_names.md | 300 ++++++++++++++++++ include/config/battle.h | 3 - include/config/item.h | 1 - include/config/test.h | 6 - include/constants/global.h | 8 +- src/data/abilities.h | 200 ------------ src/data/items.h | 264 ++++++++------- src/data/moves_info.h | 270 ++++++++-------- src/data/pokemon/species_info.h | 6 - .../pokemon/species_info/gen_2_families.h | 4 +- .../pokemon/species_info/gen_5_families.h | 4 +- .../pokemon/species_info/gen_6_families.h | 2 +- .../pokemon/species_info/gen_7_families.h | 4 +- .../pokemon/species_info/gen_8_families.h | 14 +- .../pokemon/species_info/gen_9_families.h | 52 +-- src/data/types_info.h | 14 +- 16 files changed, 609 insertions(+), 543 deletions(-) create mode 100644 docs/mmbn_style_names.md diff --git a/docs/mmbn_style_names.md b/docs/mmbn_style_names.md new file mode 100644 index 0000000000..f9d5f11fe1 --- /dev/null +++ b/docs/mmbn_style_names.md @@ -0,0 +1,300 @@ +# Megaman Battle Network Style Names + +Prior to 1.10, names in expansion that were too long for the game's UIs were truncated to fit using the naming conventions from the [Megaman Battle Network]() series. + +These were removed as part of https://github.com/rh-hideout/pokeemerald-expansion/pull/5240. They are stored here for users that may want to refer back to them or restore them. + +# Table + +Attribute | MMBN | Official +-- | -- | -- +Item | PewtrCrnches | Pewter Crunchies +Item | RageCandyBar | Rage Candy Bar +Item | LumioseGlete | Lumiose Galette +Item | ShalourSable | Shalour Sable +Item | HealthFeather | Health Feather +Item | MuscleFeather | Muscle Feather +Item | ResistFeather | Resist Feather +Item | GeniusFeather | Genius Feather +Item | CleverFeather | Clever Feather +Item | SwiftFeather | Swift Feather +Item | AbilityCapsle | Ability Capsule +Item | AbilityPatch | Ability Patch +Item | AbilityPatches | Ability Patches +Item | Exp.Candy XS | Exp. Candy XS +Item | Exp.Candies XS | Exp. Candies XS +Item | Exp.Candy S | Exp. Candy S +Item | Exp.Candies S | Exp. Candies S +Item | Exp.Candy M | Exp. Candy M +Item | Exp.Candies M | Exp. Candies M +Item | Exp.Candy L | Exp. Candy L +Item | Exp.Candies L | Exp. Candies L +Item | Exp.Candy XL | Exp. Candy XL +Item | Exp.Candies XL | Exp. Candies XL +Item | DynamaxCandy | Dynamax Candy +Item | DynamaxCandies | Dynamax Candies +Item | MaxMushrooms | Max Mushrooms +Item | GoldBottlCap | Gold Bottle Cap +Item | PrettyFeather | Pretty Feather +Item | StrngeSouvnr | Strange Souvenir +Item | FosslzedBird | Fossilized Bird +Item | FosslzedFish | Fossilized Fish +Item | FosslzedFishes | Fossilized Fishes +Item | FosslzedDrke | Fossilized Drake +Item | FosslzedDino | Fossilized Dino +Item | SurprseMulch | Surprise Mulch +Item | YellwApricorn | Yellow Apricorn +Item | GreenApricorn | Green Apricorn +Item | WhiteApricorn | White Apricorn +Item | BlackApricorn | Black Apricorn +Item | WishingPiece | Wishing Piece +Item | GalaricaTwig | Galarica Twig +Item | GalaricaCuff | Galarica Cuff +Item | GalrcaWreath | Galarica Wreath +Item | GalrcaWreathes | Galarica Wreathes +Item | StrwbrySweet | Strawberry Sweet +Item | ElectrcMemory | Electric Memory +Item | ElectrcMemories | Electric Memories +Item | FightngMemory | Fighting Memory +Item | FightngMemories | Fighting Memories +Item | PsychicMemory | Psychic Memory +Item | PsychicMemories | Psychic Memories +Item | RustedSword | Rusted Sword +Item | RustedShield | Rusted Shield +Item | CharizarditeX | Charizardite X +Item | CharizarditeY | Charizardite Y +Item | U-Necrozium Z | Ultranecrozium Z +Item | DeepSeaScale | Deep Sea Scale +Item | DeepSeaTooth | Deep Sea Tooth +Item | Never-MeltIce | Never-Melt Ice +Item | WeaknssPolicy | Weakness Policy +Item | WeaknssPolicies | Weakness Policies +Item | SafetyGoggles | Safety Goggles +Item | AdrenalineOrb | Adrenaline Orb +Item | TerainExtendr | Terrain Extender +Item | ProtectvePads | Protective Pads +Item | Heavy-DtyBts | Heavy-Duty Boots +Item | BlundrPolicy | Blunder Policy +Item | BlundrPolicies | Blunder Policies +Item | UtltyUmbrlla | Utility Umbrella +Item | CatchngCharm | Catching Charm +Item | RotomCatalog | Rotom Catalog +Item | ReinsOfUnity | Reins of Unity +Item | Dowsing MCHN | Dowsing Machine +Item | AbilityShield | Ability Shield +Item | PunchingGlove | Punching Glove +Item | AuspciousArmr | Auspicious Armor +Item | BoosterEnergy | Booster Energy +Item | BoosterEnergies | Booster Energies +Item | BigBmbooShoot | Big Bamboo Shoot +Item | GimighoulCoin | Gimmighoul Coin +Item | Leader'sCrest | Leader's Crest +Item | MaliciousArmr | Malicious Armor +Item | ScrllOfDrknss | Scroll of Darkness +Item | ScrllsOfDrknss | Scrolls of Darkness +Item | ScrollOfWatrs | Scroll of Waters +Item | ScrollsOfWatrs | Scrolls of Waters +Item | TinyBmbooShot | Tiny Bamboo Shoot +Item | Bug TeraShard | Bug Tera Shard +Item | DarkTeraShard | Dark Tera Shard +Item | DragnTeraShrd | Dragon Tera Shard +Item | EltrcTeraShrd | Electric Tera Shard +Item | FairyTeraShrd | Fairy Tera Shard +Item | FghtngTerShrd | Fighting Tera Shard +Item | FireTeraShard | Fire Tera Shard +Item | FlyngTeraShrd | Flying Tera Shard +Item | GhostTeraShrd | Ghost Tera Shard +Item | GrassTeraShrd | Grass Tera Shard +Item | GrondTeraShrd | Ground Tera Shard +Item | Ice TeraShard | Ice Tera Shard +Item | NormlTeraShrd | Normal Tera Shard +Item | PoisnTeraShrd | Poison Tera Shard +Item | PschcTeraShrd | Psychic Tera Shard +Item | RockTeraShard | Rock Tera Shard +Item | SteelTeraShrd | Steel Tera Shard +Item | WaterTeraShrd | Water Tera Shard +Item | AdamantCrystl | Adamant Crystal +Item | LustrousGlobe | Lustrous Globe +Item | BlackAugurite | Black Augurite +Item | UnrmkblTeacup | Unremarkable Teacup +Item | MstrpceTeacup | Masterpiece Teacup +Item | CornrstneMask | Cornerstone Mask +Item | WellsprngMask | Wellspring Mask +Item | HrthflameMask | Hearthflame Mask +Item | FrshStrtMochi | Fresh Start Mochi +Item | GlmmringCharm | Glimmering Charm +Item | StllrTeraShrd | Stellar Tera Shard +Item | JublifeMuffin | Jubilife Muffin +Item | AuxPowerguard | Aux Powerguard +Item | ChoiceDumplng | Choice Dumpling +Item | 2xSpicedRadsh | Twice-Spiced Radish +Move | ThunderPunch | Thunder Punch +Move | PoisonPowder | Poison Powder +Move | ThunderShock | Thunder Shock +Move | SelfDestruct | Self-Destruct +Move | HighJumpKick | High Jump Kick +Move | DynamicPunch | Dynamic Punch +Move | DragonBreath | Dragon Breath +Move | ExtremeSpeed | Extreme Speed +Move | AncientPower | Ancient Power +Move | SmellngSalts | Smelling Salts +Move | FeatherDance | Feather Dance +Move | GrassWhistle | Grass Whistle +Move | PhantomForce | Phantom Force +Move | TrickOrTreat | Trick-or-Treat +Move | ParabolcChrg | Parabolic Charge +Move | Forest'sCurs | Forest's Curse +Move | PetalBlizzrd | Petal Blizzard +Move | DisrmngVoice | Disarming Voice +Move | DrainingKiss | Draining Kiss +Move | CraftyShield | Crafty Shield +Move | FlowerShield | Flower Shield +Move | GrssyTerrain | Grassy Terrain +Move | MistyTerrain | Misty Terrain +Move | King'sShield | King's Shield +Move | DiamondStorm | Diamond Storm +Move | SteamErption | Steam Eruption +Move | HyprspceHole | Hyperspace Hole +Move | WatrShuriken | Water Shuriken +Move | MysticalFire | Mystical Fire +Move | AromaticMist | Aromatic Mist +Move | EerieImpulse | Eerie Impulse +Move | MagneticFlux | Magnetic Flux +Move | ElctrcTrrain | Electric Terrain +Move | DazzlngGleam | Dazzling Gleam +Move | BabyDollEyes | Baby-Doll Eyes +Move | PowerUpPunch | Power-Up Punch +Move | OblivionWing | Oblivion Wing +Move | ThousndArrws | Thousand Arrows +Move | ThousndWaves | Thousand Waves +Move | LightOfRuin | Light Of Ruin +Move | PrcipceBldes | Precipice Blades +Move | DragonAscent | Dragon Ascent +Move | HyprspceFury | Hyperspace Fury +Move | FrstImpressn | First Impression +Move | BanefulBunkr | Baneful Bunker +Move | SpiritShackl | Spirit Shackle +Move | DarkstLariat | Darkest Lariat +Move | SparklngAria | Sparkling Aria +Move | FloralHealng | Floral Healing +Move | HighHorsepwr | High Horsepower +Move | PsychcTrrain | Psychic Terrain +Move | RvlationDnce | Revelation Dance +Move | CoreEnforcer | Core Enforcer +Move | ClngngScales | Clanging Scales +Move | DragonHammer | Dragon Hammer +Move | PsychicFangs | Psychic Fangs +Move | StmpngTantrm | Stomping Tantrum +Move | PrsmaticLasr | Prismatic Laser +Move | SpectrlThief | Spectral Thief +Move | SnsteelStrke | Sunsteel Strike +Move | MoongestBeam | Moongeist Beam +Move | Natur'sMadns | Nature's Madness +Move | PhotonGeyser | Photon Geyser +Move | SplishySplsh | Splishy Splash +Move | BouncyBubble | Bouncy Bubble +Move | SparklySwirl | Sparkly Swirl +Move | VeeveeVolley | Veevee Volley +Move | DublIronBash | Double Iron Bash +Move | DynamxCannon | Dynamax Cannon +Move | FishiousRend | Fishious Rend +Move | ClngrousSoul | Clangorous Soul +Move | BehemthBlade | Behemoth Blade +Move | BehemothBash | Behemoth Bash +Move | BreakngSwipe | Breaking Swipe +Move | StrangeSteam | Strange Steam +Move | FalsSurrendr | False Surrender +Move | MeteorAssalt | Meteor Assault +Move | ExpandngForc | Expanding Force +Move | ShellSideArm | Shell Side Arm +Move | MstyExplsion | Misty Explosion +Move | RisngVoltage | Rising Voltage +Move | TerrainPulse | Terrain Pulse +Move | SkitterSmack | Skitter Smack +Move | BrningJelosy | Burning Jealousy +Move | CorrosiveGas | Corrosive Gas +Move | DualWingbeat | Dual Wingbeat +Move | ScorchngSnds | Scorching Sands +Move | JungleHealng | Jungle Healing +Move | SurgngStrkes | Surging Strikes +Move | DragonEnergy | Dragon Energy +Move | FreezngGlare | Freezing Glare +Move | ThnderusKick | Thunderous Kick +Move | GlacialLance | Glacial Lance +Move | AstrlBarrage | Astral Barrage +Move | PsyshieldBsh | Psyshield Bash +Move | SprngtdeStrm | Springtide Storm +Move | MystcalPower | Mystical Power +Move | MountainGale | Mountain Gale +Move | VictoryDance | Victory Dance +Move | HeadlongRush | Headlong Rush +Move | BitterMalice | Bitter Malice +Move | TripleArrows | Triple Arrows +Move | InfrnlParade | Infernal Parade +Move | CeaslessEdge | Ceaseless Edge +Move | BlekwndStorm | Bleakwind Storm +Move | WildbltStorm | Wildbolt Storm +Move | SndsearStorm | Sandsear Storm +Move | LunarBlessng | Lunar Blessing +Move | LastRespects | Last Respects +Move | SpicyExtract | Spicy Extract +Move | PoplatinBomb | Population Bomb +Move | RevivlBlesng | Revival Blessing +Move | KowtowCleave | Kowtow Cleave +Move | ColisinCours | Collision Course +Move | ElectroDrift | Electro Drift +Move | ChilReceptin | Chilly Reception +Move | ChillingWatr | Chilling Water +Move | GigatonHammr | Gigaton Hammer +Move | BlazngTorque | Blazing Torque +Move | WickedTorque | Wicked Torque +Move | NoxiusTorque | Noxious Torque +Move | CombatTorque | Combat Torque +Move | MagiclTorque | Magical Torque +Move | MatchaGotcha | Matcha Gotcha +Move | TeraStarstrm | Tera Starstorm +Move | BurnngBulwrk | Burning Bulwark +Move | MightyCleave | Mighty Cleave +Move | TachyonCuttr | Tachyon Cutter +Move | AllurngVoice | Alluring Voice +Move | SuprcellSlam | Supercell Slam +Move | PsychicNoise | Psychic Noise +Move | MalignntChan | Malignant Chain +Species | Dudunsprce | Dudunsparce +Species | Corvisquir | Corvisquire +Species | Corviknigh | Corviknight +Species | Barraskewd | Barraskewda +Species | Centiskorc | Centiskorch +Species | Polteageis | Polteageist +Species | Stonjourne | Stonjourner +Species | Meowscarad | Meowscarada +Species | Sqawkabily | Squawkabilly +Species | Kilowatrel | Kilowattrel +Species | Brmblghast | Brambleghast +Species | ScreamTail | Scream Tail +Species | BruteBonet | Brute Bonnet +Species | FluttrMane | Flutter Mane +Species | SlithrWing | Slither Wing +Species | SndyShocks | Sandy Shocks +Species | IronTreads | Iron Treads +Species | IronBundle | Iron Bundle +Species | IronJuguls | Iron Jugulis +Species | IronThorns | Iron Thorns +Species | RoarngMoon | Roaring Moon +Species | IronVliant | Iron Valiant +Species | WalkngWake | Walking Wake +Species | IronLeaves | Iron Leaves +Species | Ptchageist | Poltchageist +Species | Fezndipiti | Fezandipiti +Species | GouginFire | Gouging Fire +Species | RagingBolt | Raging Bolt +Species | IronBouldr | Iron Boulder +Species | Crabminabl | Crabominable +Species | Blacephaln | Blacephalon +Species | Bsculegion | Basculegion +Species | Flechinder | Fletchinder +Type | Fight | Fighting +Type | Electr | Electric +Type | Psychc | Psychic +Type | Stellr | Stellar + diff --git a/include/config/battle.h b/include/config/battle.h index 12b694cd0e..8ddea8e311 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -39,7 +39,6 @@ #define B_MULTIPLE_TARGETS_DMG GEN_LATEST // In Gen4+, damage dealt by moves that hit multiple targets at once is reduced to 75%. Before, it was 50%. // Type settings -#define B_EXPANDED_TYPE_NAMES TRUE // If TRUE, type names are increased from 6 characters to 8 characters. #define B_GHOSTS_ESCAPE GEN_LATEST // In Gen6+, abilities like Shadow Tag or moves like Mean Look fail on Ghost-type Pokémon. They can also escape any Wild Battle. #define B_PARALYZE_ELECTRIC GEN_LATEST // In Gen6+, Electric-type Pokémon can't be paralyzed. #define B_POWDER_GRASS GEN_LATEST // In Gen6+, Grass-type Pokémon are immune to powder and spore moves. @@ -124,7 +123,6 @@ #define B_CHARGE GEN_LATEST // In Gen8-, Charge status is lost regardless of the typing of the next move. // Ability settings -#define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. #define B_ABILITY_WEATHER GEN_LATEST // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability. #define B_GALE_WINGS GEN_LATEST // In Gen7+ requires full HP to trigger. #define B_STANCE_CHANGE_FAIL GEN_LATEST // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't. @@ -222,7 +220,6 @@ #define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 Pokémon, will be shown before selecting a move. #define B_SHOW_CATEGORY_ICON TRUE // If set to TRUE, it will show an icon in the summary and move relearner showing the move's category. #define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations. -#define B_EXPANDED_MOVE_NAMES TRUE // If set to FALSE, move names are decreased from 16 characters to 12 characters. #define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles. #define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option #define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu diff --git a/include/config/item.h b/include/config/item.h index 272848e82e..67916cbe4d 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -2,7 +2,6 @@ #define GUARD_CONFIG_ITEM_H // Item config -#define I_EXPANDED_ITEM_NAMES TRUE // If set to FALSE, item names are decreased from 20 characters to 14 characters. #define I_SHINY_CHARM_ADDITIONAL_ROLLS 2 // Amount of additional shiny rolls if the player has the Shiny Charm. Set it 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. diff --git a/include/config/test.h b/include/config/test.h index bd721beb9d..708c2ca581 100644 --- a/include/config/test.h +++ b/include/config/test.h @@ -1,14 +1,8 @@ #ifndef GUARD_CONFIG_TEST_H #define GUARD_CONFIG_TEST_H -#undef B_EXPANDED_MOVE_NAMES -#define B_EXPANDED_MOVE_NAMES TRUE -#undef I_EXPANDED_ITEM_NAMES -#define I_EXPANDED_ITEM_NAMES TRUE #undef POKEMON_NAME_LENGTH #define POKEMON_NAME_LENGTH 12 -#undef B_EXPANDED_TYPE_NAMES -#define B_EXPANDED_TYPE_NAMES TRUE #undef P_MEGA_EVOLUTIONS #define P_MEGA_EVOLUTIONS TRUE diff --git a/include/constants/global.h b/include/constants/global.h index 6d2fbe81c7..7e26bd5a0d 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -103,7 +103,7 @@ #define CONTEST_CATEGORIES_COUNT 5 // string lengths -#define ITEM_NAME_LENGTH ((I_EXPANDED_ITEM_NAMES == TRUE) ? 20 : 14) +#define ITEM_NAME_LENGTH 20 #define ITEM_NAME_PLURAL_LENGTH ITEM_NAME_LENGTH + 2 // 2 is used for the instance where a word's suffix becomes y->ies #define POKEMON_NAME_LENGTH 12 #define VANILLA_POKEMON_NAME_LENGTH 10 @@ -111,15 +111,15 @@ #define PLAYER_NAME_LENGTH 7 #define MAIL_WORDS_COUNT 9 #define EASY_CHAT_BATTLE_WORDS_COUNT 6 -#define MOVE_NAME_LENGTH ((B_EXPANDED_MOVE_NAMES == TRUE) ? 16 : 12) +#define MOVE_NAME_LENGTH 16 #define NUM_QUESTIONNAIRE_WORDS 4 #define QUIZ_QUESTION_LEN 9 #define WONDER_CARD_TEXT_LENGTH 40 #define WONDER_NEWS_TEXT_LENGTH 40 #define WONDER_CARD_BODY_TEXT_LINES 4 #define WONDER_NEWS_BODY_TEXT_LINES 10 -#define TYPE_NAME_LENGTH ((B_EXPANDED_TYPE_NAMES == TRUE) ? 8 : 6) -#define ABILITY_NAME_LENGTH ((B_EXPANDED_ABILITY_NAMES == TRUE) ? 16 : 12) +#define TYPE_NAME_LENGTH 8 +#define ABILITY_NAME_LENGTH 16 #define TRAINER_NAME_LENGTH 10 #define MAX_STAMP_CARD_STAMPS 7 diff --git a/src/data/abilities.h b/src/data/abilities.h index ccb27ffe35..c09107ab94 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -110,11 +110,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_COMPOUND_EYES] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Compound Eyes"), - #else - .name = _("CompoundEyes"), - #endif .description = COMPOUND_STRING("Raises accuracy."), .aiRating = 7, }, @@ -244,11 +240,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_LIGHTNING_ROD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Lightning Rod"), - #else - .name = _("LightningRod"), - #endif .description = COMPOUND_STRING("Draws electrical moves."), .aiRating = 7, .breakable = TRUE, @@ -1328,11 +1320,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_STANCE_CHANGE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Stance Change"), - #else - .name = _("StanceChange"), - #endif .description = COMPOUND_STRING("Transforms as it battles."), .aiRating = 10, .cantBeCopied = TRUE, @@ -1351,11 +1339,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_MEGA_LAUNCHER] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Mega Launcher"), - #else - .name = _("MegaLauncher"), - #endif .description = COMPOUND_STRING("Boosts pulse moves."), .aiRating = 7, }, @@ -1405,11 +1389,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_PARENTAL_BOND] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Parental Bond"), - #else - .name = _("ParentalBond"), - #endif .description = COMPOUND_STRING("Moves hit twice."), .aiRating = 10, }, @@ -1437,22 +1417,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_PRIMORDIAL_SEA] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Primordial Sea"), - #else - .name = _("PrimrdialSea"), - #endif .description = COMPOUND_STRING("Summons heavy rain."), .aiRating = 10, }, [ABILITY_DESOLATE_LAND] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Desolate Land"), - #else - .name = _("DesolateLand"), - #endif .description = COMPOUND_STRING("Summons intense sunlight."), .aiRating = 10, }, @@ -1480,22 +1452,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMERGENCY_EXIT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Emergency Exit"), - #else - .name = _("EmergncyExit"), - #endif .description = COMPOUND_STRING("Flees at half HP."), .aiRating = 3, }, [ABILITY_WATER_COMPACTION] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Water Compaction"), - #else - .name = _("WtrCmpaction"), - #endif .description = COMPOUND_STRING("Water boosts Defense."), .aiRating = 4, }, @@ -1629,11 +1593,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_POWER_CONSTRUCT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Power Construct"), - #else - .name = _("PwrConstruct"), - #endif .description = COMPOUND_STRING("Cells aid it when weakened."), .aiRating = 10, .cantBeCopied = TRUE, @@ -1664,11 +1624,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_QUEENLY_MAJESTY] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Queenly Majesty"), - #else - .name = _("QueenlyMjsty"), - #endif .description = COMPOUND_STRING("Protects from priority."), .aiRating = 6, .breakable = TRUE, @@ -1720,11 +1676,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_TANGLING_HAIR] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Tangling Hair"), - #else - .name = _("TanglingHair"), - #endif .description = COMPOUND_STRING("Lowers Speed on contact."), .aiRating = 5, }, @@ -1740,11 +1692,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_POWER_OF_ALCHEMY] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Power Of Alchemy"), - #else - .name = _("PwrOfAlchemy"), - #endif .description = COMPOUND_STRING("Copies ally's ability."), .aiRating = 0, .cantBeCopied = TRUE, @@ -1772,22 +1720,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_ELECTRIC_SURGE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Electric Surge"), - #else - .name = _("ElectrcSurge"), - #endif .description = COMPOUND_STRING("Field becomes Electric."), .aiRating = 8, }, [ABILITY_PSYCHIC_SURGE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Psychic Surge"), - #else - .name = _("PsychicSurge"), - #endif .description = COMPOUND_STRING("Field becomes weird."), .aiRating = 8, }, @@ -1808,22 +1748,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_FULL_METAL_BODY] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Full Metal Body"), - #else - .name = _("FullMetalBdy"), - #endif .description = COMPOUND_STRING("Prevents stat reduction."), .aiRating = 4, }, [ABILITY_SHADOW_SHIELD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Shadow Shield"), - #else - .name = _("ShadowShield"), - #endif .description = COMPOUND_STRING("Halves damage at full HP."), .aiRating = 8, }, @@ -1844,22 +1776,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_INTREPID_SWORD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Intrepid Sword"), - #else - .name = _("IntrepidSwrd"), - #endif .description = COMPOUND_STRING("Ups Attack on entry."), .aiRating = 3, }, [ABILITY_DAUNTLESS_SHIELD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Dauntless Shield"), - #else - .name = _("DauntlssShld"), - #endif .description = COMPOUND_STRING("Ups Defense on entry."), .aiRating = 3, }, @@ -1886,11 +1810,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_PROPELLER_TAIL] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Propeller Tail"), - #else - .name = _("PropellrTail"), - #endif .description = COMPOUND_STRING("Ignores foe's redirection."), .aiRating = 2, }, @@ -1988,22 +1908,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SCREEN_CLEANER] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Screen Cleaner"), - #else - .name = _("ScreenCleanr"), - #endif .description = COMPOUND_STRING("Removes walls of light."), .aiRating = 3, }, [ABILITY_STEELY_SPIRIT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Steely Spirit"), - #else - .name = _("SteelySpirit"), - #endif .description = COMPOUND_STRING("Boosts ally's Steel moves."), .aiRating = 2, }, @@ -2017,33 +1929,21 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_WANDERING_SPIRIT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Wandering Spirit"), - #else - .name = _("WandrngSprit"), - #endif .description = COMPOUND_STRING("Trade abilities on contact."), .aiRating = 2, }, [ABILITY_GORILLA_TACTICS] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Gorilla Tactics"), - #else - .name = _("GorillaTacti"), - #endif .description = COMPOUND_STRING("Ups Attack and locks move."), .aiRating = 4, }, [ABILITY_NEUTRALIZING_GAS] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Neutralizing Gas"), - #else - .name = _("NeutrlzngGas"), - #endif .description = COMPOUND_STRING("All Abilities are nullified."), .aiRating = 5, .cantBeCopied = TRUE, @@ -2062,11 +1962,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_HUNGER_SWITCH] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Hunger Switch"), - #else - .name = _("HungerSwitch"), - #endif .description = COMPOUND_STRING("Changes form each turn."), .aiRating = 2, .cantBeCopied = TRUE, @@ -2091,11 +1987,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_CURIOUS_MEDICINE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Curious Medicine"), - #else - .name = _("CuriusMedicn"), - #endif .description = COMPOUND_STRING("Remove ally's stat changes."), .aiRating = 3, }, @@ -2116,11 +2008,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_CHILLING_NEIGH] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Chilling Neigh"), - #else - .name = _("ChillngNeigh"), - #endif .description = COMPOUND_STRING("KOs boost Attack stat."), .aiRating = 7, }, @@ -2158,11 +2046,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_LINGERING_AROMA] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Lingering Aroma"), - #else - .name = _("LngerngAroma"), - #endif .description = COMPOUND_STRING("Spreads with contact."), .aiRating = 5, }, @@ -2176,11 +2060,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_THERMAL_EXCHANGE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Thermal Exchange"), - #else - .name = _("ThrmlExchnge"), - #endif .description = COMPOUND_STRING("Fire hits up Attack."), .aiRating = 4, .breakable = TRUE, @@ -2195,11 +2075,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_PURIFYING_SALT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Purifying Salt"), - #else - .name = _("PurfyingSalt"), - #endif .description = COMPOUND_STRING("Protected by pure salts."), .aiRating = 6, .breakable = TRUE, @@ -2207,11 +2083,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_WELL_BAKED_BODY] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Well-Baked Body"), - #else - .name = _("WellBakedBdy"), - #endif .description = COMPOUND_STRING("Strengthened by Fire."), .aiRating = 5, .breakable = TRUE, @@ -2235,11 +2107,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_ROCKY_PAYLOAD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Rocky Payload"), - #else - .name = _("RockyPayload"), - #endif .description = COMPOUND_STRING("Powers up Rock moves."), .aiRating = 6, }, @@ -2277,22 +2145,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_ELECTROMORPHOSIS] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Electromorphosis"), - #else - .name = _("Elecmrphosis"), - #endif .description = COMPOUND_STRING("Gets Charged when hit."), .aiRating = 5, }, [ABILITY_PROTOSYNTHESIS] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Protosynthesis"), - #else - .name = _("Protosnthsis"), - #endif .description = COMPOUND_STRING("Sun boosts best stat."), .aiRating = 7, .cantBeCopied = TRUE, @@ -2322,11 +2182,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_VESSEL_OF_RUIN] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Vessel of Ruin"), - #else - .name = _("VesselOfRuin"), - #endif .description = COMPOUND_STRING("Lowers foes' sp. damage."), .aiRating = 5, .breakable = TRUE, @@ -2334,11 +2190,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SWORD_OF_RUIN] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Sword of Ruin"), - #else - .name = _("SwordOfRuin"), - #endif .description = COMPOUND_STRING("Lowers foes' Defense."), .aiRating = 5, .breakable = TRUE, @@ -2346,11 +2198,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_TABLETS_OF_RUIN] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Tablets of Ruin"), - #else - .name = _("TabltsOfRuin"), - #endif .description = COMPOUND_STRING("Lowers foes' damage."), .aiRating = 5, .breakable = TRUE, @@ -2358,11 +2206,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_BEADS_OF_RUIN] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Beads of Ruin"), - #else - .name = _("BeadsOfRuin"), - #endif .description = COMPOUND_STRING("Lowers foes' Sp. Defense."), .aiRating = 5, .breakable = TRUE, @@ -2370,22 +2214,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_ORICHALCUM_PULSE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Orichalcum Pulse"), - #else - .name = _("OrchlcumPlse"), - #endif .description = COMPOUND_STRING("Summons sunlight in battle."), .aiRating = 8, }, [ABILITY_HADRON_ENGINE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Hadron Engine"), - #else - .name = _("HadronEngine"), - #endif .description = COMPOUND_STRING("Field becomes Electric."), .aiRating = 8, }, @@ -2413,11 +2249,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SUPREME_OVERLORD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Supreme Overlord"), - #else - .name = _("SuprmeOvrlrd"), - #endif .description = COMPOUND_STRING("Inherits fallen's strength."), .aiRating = 6, }, @@ -2454,11 +2286,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_MYCELIUM_MIGHT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Mycelium Might"), - #else - .name = _("MceliumMight"), - #endif .description = COMPOUND_STRING("Status moves never fail."), .aiRating = 2, }, @@ -2480,11 +2308,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMBODY_ASPECT_TEAL_MASK] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Embody Aspect"), - #else - .name = _("EmbodyAspect"), - #endif .description = COMPOUND_STRING("Raises Speed."), .aiRating = 6, .cantBeCopied = TRUE, @@ -2495,11 +2319,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Embody Aspect"), - #else - .name = _("EmbodyAspect"), - #endif .description = COMPOUND_STRING("Raises Attack."), .aiRating = 6, .cantBeCopied = TRUE, @@ -2510,11 +2330,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMBODY_ASPECT_WELLSPRING_MASK] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Embody Aspect"), - #else - .name = _("EmbodyAspect"), - #endif .description = COMPOUND_STRING("Raises Sp. Def."), .aiRating = 6, .cantBeCopied = TRUE, @@ -2525,11 +2341,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Embody Aspect"), - #else - .name = _("EmbodyAspect"), - #endif .description = COMPOUND_STRING("Raises Defense."), .aiRating = 6, .cantBeCopied = TRUE, @@ -2547,11 +2359,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SUPERSWEET_SYRUP] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Supersweet Syrup"), - #else - .name = _("SuprswtSyrup"), - #endif .description = COMPOUND_STRING("Lowers the foe's Evasion."), .aiRating = 5, }, @@ -2582,11 +2390,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_TERAFORM_ZERO] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Teraform Zero"), - #else - .name = _("TeraformZero"), - #endif .description = COMPOUND_STRING("Removes weather and terrain."), .aiRating = 10, .cantBeCopied = TRUE, @@ -2596,11 +2400,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_POISON_PUPPETEER] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Poison Puppeteer"), - #else - .name = _("PoisnPuppter"), - #endif .description = COMPOUND_STRING("Confuses poisoned foes."), .aiRating = 8, .cantBeCopied = TRUE, diff --git a/src/data/items.h b/src/data/items.h index f97c4670c1..27d9829899 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -1,9 +1,3 @@ -#if I_EXPANDED_ITEM_NAMES == TRUE -#define HANDLE_EXPANDED_ITEM_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_ITEM_NAME(_name, ...) _(_name) -#endif - #if I_USE_EVO_HELD_ITEMS_FROM_BAG == TRUE #define EVO_HELD_ITEM_TYPE ITEM_USE_PARTY_MENU #define EVO_HELD_ITEM_FIELD_FUNC ItemUseOutOfBattle_EvolutionStone @@ -1159,8 +1153,8 @@ const struct Item gItemsInfo[] = [ITEM_PEWTER_CRUNCHIES] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PewtrCrnches", "Pewter Crunchies"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("PewtrCrnches", "Pewter Crunchies"), + .name = _("Pewter Crunchies"), + .pluralName = _("Pewter Crunchies"), .price = 250, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -1175,7 +1169,7 @@ const struct Item gItemsInfo[] = [ITEM_RAGE_CANDY_BAR] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RageCandyBar", "Rage Candy Bar"), + .name = _("Rage Candy Bar"), .price = (I_PRICE >= GEN_7) ? 350 : 300, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -1239,7 +1233,7 @@ const struct Item gItemsInfo[] = [ITEM_LUMIOSE_GALETTE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("LumioseGlete", "Lumiose Galette"), + .name = _("Lumiose Galette"), .price = (I_PRICE >= GEN_7) ? 350 : 200, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -1254,7 +1248,7 @@ const struct Item gItemsInfo[] = [ITEM_SHALOUR_SABLE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ShalourSable", "Shalour Sable"), + .name = _("Shalour Sable"), .price = (I_PRICE >= GEN_7) ? 350 : 200, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -1425,7 +1419,7 @@ const struct Item gItemsInfo[] = [ITEM_HEALTH_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("HealthFeather", "Health Feather"), + .name = _("Health Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sHealthFeatherDesc, .pocket = POCKET_ITEMS, @@ -1439,7 +1433,7 @@ const struct Item gItemsInfo[] = [ITEM_MUSCLE_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("MuscleFeather", "Muscle Feather"), + .name = _("Muscle Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sMuscleFeatherDesc, .pocket = POCKET_ITEMS, @@ -1453,7 +1447,7 @@ const struct Item gItemsInfo[] = [ITEM_RESIST_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ResistFeather", "Resist Feather"), + .name = _("Resist Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sResistFeatherDesc, .pocket = POCKET_ITEMS, @@ -1467,7 +1461,7 @@ const struct Item gItemsInfo[] = [ITEM_GENIUS_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GeniusFeather", "Genius Feather"), + .name = _("Genius Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sGeniusFeatherDesc, .pocket = POCKET_ITEMS, @@ -1481,7 +1475,7 @@ const struct Item gItemsInfo[] = [ITEM_CLEVER_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CleverFeather", "Clever Feather"), + .name = _("Clever Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sCleverFeatherDesc, .pocket = POCKET_ITEMS, @@ -1495,7 +1489,7 @@ const struct Item gItemsInfo[] = [ITEM_SWIFT_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("SwiftFeather", "Swift Feather"), + .name = _("Swift Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sSwiftFeatherDesc, .pocket = POCKET_ITEMS, @@ -1511,7 +1505,7 @@ const struct Item gItemsInfo[] = [ITEM_ABILITY_CAPSULE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AbilityCapsle", "Ability Capsule"), + .name = _("Ability Capsule"), .price = (I_PRICE < GEN_7) ? 1000 : ((I_PRICE < GEN_9) ? 10000 : 100000), .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -1526,8 +1520,8 @@ const struct Item gItemsInfo[] = [ITEM_ABILITY_PATCH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AbilityPatch", "Ability Patch"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("AbilityPatches", "Ability Patches"), + .name = _("Ability Patch"), + .pluralName = _("Ability Patches"), .price = (I_PRICE >= GEN_9) ? 250000 : 20, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -1922,8 +1916,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_XS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy XS", "Exp. Candy XS"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies XS", "Exp. Candies XS"), + .name = _("Exp. Candy XS"), + .pluralName = _("Exp. Candies XS"), .price = 20, .holdEffectParam = EXP_100, .description = COMPOUND_STRING( @@ -1941,8 +1935,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_S] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy S", "Exp. Candy S"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies S", "Exp. Candies S"), + .name = _("Exp. Candy S"), + .pluralName = _("Exp. Candies S"), .price = 240, .holdEffectParam = EXP_800, .description = COMPOUND_STRING( @@ -1960,8 +1954,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_M] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy M", "Exp. Candy M"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies M", "Exp. Candies M"), + .name = _("Exp. Candy M"), + .pluralName = _("Exp. Candies M"), .price = 1000, .holdEffectParam = EXP_3000, .description = COMPOUND_STRING( @@ -1979,8 +1973,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_L] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy L", "Exp. Candy L"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies L", "Exp. Candies L"), + .name = _("Exp. Candy L"), + .pluralName = _("Exp. Candies L"), .price = 3000, .holdEffectParam = EXP_10000, .description = COMPOUND_STRING( @@ -1998,8 +1992,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_XL] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy XL", "Exp. Candy XL"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies XL", "Exp. Candies XL"), + .name = _("Exp. Candy XL"), + .pluralName = _("Exp. Candies XL"), .price = 10000, .holdEffectParam = EXP_30000, .description = COMPOUND_STRING( @@ -2017,8 +2011,8 @@ const struct Item gItemsInfo[] = [ITEM_DYNAMAX_CANDY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DynamaxCandy", "Dynamax Candy"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("DynamaxCandies", "Dynamax Candies"), + .name = _("Dynamax Candy"), + .pluralName = _("Dynamax Candies"), .price = 0, .description = COMPOUND_STRING( "Raises the Dynamax\n" @@ -2486,8 +2480,8 @@ const struct Item gItemsInfo[] = [ITEM_MAX_MUSHROOMS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("MaxMushrooms", "Max Mushrooms"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("MaxMushrooms", "Max Mushrooms"), + .name = _("Max Mushrooms"), + .pluralName = _("Max Mushrooms"), .price = 8000, .description = COMPOUND_STRING( "Raises every stat\n" @@ -2522,7 +2516,7 @@ const struct Item gItemsInfo[] = [ITEM_GOLD_BOTTLE_CAP] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GoldBottlCap", "Gold Bottle Cap"), + .name = _("Gold Bottle Cap"), .price = (I_PRICE >= GEN_9) ? 60000 : 10000, .description = COMPOUND_STRING( "A beautiful bottle\n" @@ -2859,7 +2853,7 @@ const struct Item gItemsInfo[] = [ITEM_PRETTY_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PrettyFeather", "Pretty Feather"), + .name = _("Pretty Feather"), .price = (I_PRICE >= GEN_7) ? 1000 * TREASURE_FACTOR: 200, .description = COMPOUND_STRING( "A beautiful yet\n" @@ -2987,7 +2981,7 @@ const struct Item gItemsInfo[] = [ITEM_STRANGE_SOUVENIR] = { - .name = HANDLE_EXPANDED_ITEM_NAME("StrngeSouvnr", "Strange Souvenir"), + .name = _("Strange Souvenir"), .price = (I_PRICE >= GEN_7) ? 3000 : 10, .description = COMPOUND_STRING( "An ornament that\n" @@ -3205,7 +3199,7 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_BIRD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedBird", "Fossilized Bird"), + .name = _("Fossilized Bird"), .price = 5000, .description = COMPOUND_STRING( "A fossil of an\n" @@ -3221,8 +3215,8 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_FISH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedFish", "Fossilized Fish"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("FosslzedFishes", "Fossilized Fishes"), + .name = _("Fossilized Fish"), + .pluralName = _("Fossilized Fishes"), .price = 5000, .description = sFossilizedFishDesc, .pocket = POCKET_ITEMS, @@ -3235,7 +3229,7 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_DRAKE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedDrke", "Fossilized Drake"), + .name = _("Fossilized Drake"), .price = 5000, .description = COMPOUND_STRING( "A fossil of an\n" @@ -3251,7 +3245,7 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_DINO] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedDino", "Fossilized Dino"), + .name = _("Fossilized Dino"), .price = 5000, .description = sFossilizedFishDesc, .pocket = POCKET_ITEMS, @@ -3376,8 +3370,8 @@ const struct Item gItemsInfo[] = [ITEM_SURPRISE_MULCH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("SurprseMulch", "Surprise Mulch"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("SurprseMulch", "Surprise Mulch"), + .name = _("Surprise Mulch"), + .pluralName = _("Surprise Mulch"), .price = 200, #if OW_BERRY_MULCH_USAGE == TRUE .description = COMPOUND_STRING( @@ -3474,7 +3468,7 @@ const struct Item gItemsInfo[] = [ITEM_YELLOW_APRICORN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("YellwApricorn", "Yellow Apricorn"), + .name = _("Yellow Apricorn"), .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), .description = COMPOUND_STRING( "A yellow apricorn.\n" @@ -3489,7 +3483,7 @@ const struct Item gItemsInfo[] = [ITEM_GREEN_APRICORN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GreenApricorn", "Green Apricorn"), + .name = _("Green Apricorn"), .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), .description = COMPOUND_STRING( "A green apricorn.\n" @@ -3519,7 +3513,7 @@ const struct Item gItemsInfo[] = [ITEM_WHITE_APRICORN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WhiteApricorn", "White Apricorn"), + .name = _("White Apricorn"), .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), .description = COMPOUND_STRING( "A white apricorn.\n" @@ -3534,7 +3528,7 @@ const struct Item gItemsInfo[] = [ITEM_BLACK_APRICORN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BlackApricorn", "Black Apricorn"), + .name = _("Black Apricorn"), .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), .description = COMPOUND_STRING( "A black apricorn.\n" @@ -3549,7 +3543,7 @@ const struct Item gItemsInfo[] = [ITEM_WISHING_PIECE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WishingPiece", "Wishing Piece"), + .name = _("Wishing Piece"), .price = 20, .description = COMPOUND_STRING( "Throw into a\n" @@ -3565,7 +3559,7 @@ const struct Item gItemsInfo[] = [ITEM_GALARICA_TWIG] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GalaricaTwig", "Galarica Twig"), + .name = _("Galarica Twig"), .price = 20 * TREASURE_FACTOR, .description = COMPOUND_STRING( "A twig from a tree\n" @@ -4025,7 +4019,7 @@ const struct Item gItemsInfo[] = [ITEM_GALARICA_CUFF] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GalaricaCuff", "Galarica Cuff"), + .name = _("Galarica Cuff"), .price = (I_PRICE >= GEN_9) ? 3000 : 6000, .description = COMPOUND_STRING( "A cuff from Galar\n" @@ -4042,8 +4036,8 @@ const struct Item gItemsInfo[] = [ITEM_GALARICA_WREATH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GalrcaWreath", "Galarica Wreath"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("GalrcaWreathes", "Galarica Wreathes"), + .name = _("Galarica Wreath"), + .pluralName = _("Galarica Wreathes"), .price = (I_PRICE >= GEN_9) ? 3000 : 6000, .description = COMPOUND_STRING( "A wreath made in\n" @@ -4251,7 +4245,7 @@ const struct Item gItemsInfo[] = [ITEM_STRAWBERRY_SWEET] = { - .name = HANDLE_EXPANDED_ITEM_NAME("StrwbrySweet", "Strawberry Sweet"), + .name = _("Strawberry Sweet"), .price = 500 * TREASURE_FACTOR, .description = COMPOUND_STRING( "Strawberry-shaped\n" @@ -4879,8 +4873,8 @@ const struct Item gItemsInfo[] = [ITEM_ELECTRIC_MEMORY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ElectrcMemory", "Electric Memory"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ElectrcMemories", "Electric Memories"), + .name = _("Electric Memory"), + .pluralName = _("Electric Memories"), .price = 1000, .holdEffect = HOLD_EFFECT_MEMORY, .holdEffectParam = 0, @@ -4939,8 +4933,8 @@ const struct Item gItemsInfo[] = [ITEM_FIGHTING_MEMORY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FightngMemory", "Fighting Memory"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("FightngMemories", "Fighting Memories"), + .name = _("Fighting Memory"), + .pluralName = _("Fighting Memories"), .price = 1000, .holdEffect = HOLD_EFFECT_MEMORY, .holdEffectParam = 0, @@ -5019,8 +5013,8 @@ const struct Item gItemsInfo[] = [ITEM_PSYCHIC_MEMORY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PsychicMemory", "Psychic Memory"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("PsychicMemories", "Psychic Memories"), + .name = _("Psychic Memory"), + .pluralName = _("Psychic Memories"), .price = 1000, .holdEffect = HOLD_EFFECT_MEMORY, .holdEffectParam = 0, @@ -5179,7 +5173,7 @@ const struct Item gItemsInfo[] = [ITEM_RUSTED_SWORD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RustedSword", "Rusted Sword"), + .name = _("Rusted Sword"), .price = 0, .description = COMPOUND_STRING( "A rusty sword. A\n" @@ -5194,7 +5188,7 @@ const struct Item gItemsInfo[] = [ITEM_RUSTED_SHIELD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RustedShield", "Rusted Shield"), + .name = _("Rusted Shield"), .price = 0, .description = COMPOUND_STRING( "A rusty shield. A\n" @@ -5262,7 +5256,7 @@ const struct Item gItemsInfo[] = [ITEM_CHARIZARDITE_X] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CharizarditeX", "Charizardite X"), + .name = _("Charizardite X"), .pluralName = _("Charizardites X"), .price = 0, .holdEffect = HOLD_EFFECT_MEGA_STONE, @@ -5277,7 +5271,7 @@ const struct Item gItemsInfo[] = [ITEM_CHARIZARDITE_Y] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CharizarditeY", "Charizardite Y"), + .name = _("Charizardite Y"), .pluralName = _("Charizardites Y"), .price = 0, .holdEffect = HOLD_EFFECT_MEGA_STONE, @@ -6942,7 +6936,7 @@ const struct Item gItemsInfo[] = [ITEM_ULTRANECROZIUM_Z] = { - .name = HANDLE_EXPANDED_ITEM_NAME("U-Necrozium Z", "Ultranecrozium Z"), + .name = _("Ultranecrozium Z"), .price = 0, .holdEffect = HOLD_EFFECT_Z_CRYSTAL, .description = COMPOUND_STRING( @@ -7066,7 +7060,7 @@ const struct Item gItemsInfo[] = [ITEM_DEEP_SEA_SCALE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DeepSeaScale", "Deep Sea Scale"), + .name = _("Deep Sea Scale"), .price = (I_PRICE >= GEN_7) ? 2000 : 200, .holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE, .description = COMPOUND_STRING( @@ -7084,7 +7078,7 @@ const struct Item gItemsInfo[] = [ITEM_DEEP_SEA_TOOTH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DeepSeaTooth", "Deep Sea Tooth"), + .name = _("Deep Sea Tooth"), .pluralName = _("Deep Sea Teeth"), .price = (I_PRICE >= GEN_7) ? 2000 : 200, .holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH, @@ -7631,8 +7625,8 @@ const struct Item gItemsInfo[] = [ITEM_NEVER_MELT_ICE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Never-MeltIce", "Never-Melt Ice"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Never-MeltIce", "Never-Melt Ice"), + .name = _("Never-Melt Ice"), + .pluralName = _("Never-Melt Ice"), .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), .holdEffect = HOLD_EFFECT_ICE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, @@ -8921,8 +8915,8 @@ const struct Item gItemsInfo[] = [ITEM_WEAKNESS_POLICY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WeaknssPolicy", "Weakness Policy"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("WeaknssPolicies", "Weakness Policies"), + .name = _("Weakness Policy"), + .pluralName = _("Weakness Policies"), .price = (I_PRICE >= GEN_9) ? 50000 : 1000, .holdEffect = HOLD_EFFECT_WEAKNESS_POLICY, .holdEffectParam = 0, @@ -8958,8 +8952,8 @@ const struct Item gItemsInfo[] = [ITEM_SAFETY_GOGGLES] = { - .name = HANDLE_EXPANDED_ITEM_NAME("SafetyGoggles", "Safety Goggles"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("SafetyGoggles", "Safety Goggles"), + .name = _("Safety Goggles"), + .pluralName = _("Safety Goggles"), .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 1000), .holdEffect = HOLD_EFFECT_SAFETY_GOGGLES, .description = COMPOUND_STRING( @@ -8976,7 +8970,7 @@ const struct Item gItemsInfo[] = [ITEM_ADRENALINE_ORB] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AdrenalineOrb", "Adrenaline Orb"), + .name = _("Adrenaline Orb"), .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_8) ? 4000 : 300), .holdEffect = HOLD_EFFECT_ADRENALINE_ORB, .description = COMPOUND_STRING( @@ -8993,7 +8987,7 @@ const struct Item gItemsInfo[] = [ITEM_TERRAIN_EXTENDER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("TerainExtendr", "Terrain Extender"), + .name = _("Terrain Extender"), .price = (I_PRICE >= GEN_9) ? 15000 : 4000, .holdEffect = HOLD_EFFECT_TERRAIN_EXTENDER, .description = COMPOUND_STRING( @@ -9010,8 +9004,8 @@ const struct Item gItemsInfo[] = [ITEM_PROTECTIVE_PADS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ProtectvePads", "Protective Pads"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ProtectvePads", "Protective Pads"), + .name = _("Protective Pads"), + .pluralName = _("Protective Pads"), .price = (I_PRICE >= GEN_9) ? 15000 : 4000, .holdEffect = HOLD_EFFECT_PROTECTIVE_PADS, .description = COMPOUND_STRING( @@ -9062,8 +9056,8 @@ const struct Item gItemsInfo[] = [ITEM_HEAVY_DUTY_BOOTS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Heavy-DtyBts", "Heavy-Duty Boots"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Heavy-DtyBts", "Heavy-Duty Boots"), + .name = _("Heavy-Duty Boots"), + .pluralName = _("Heavy-Duty Boots"), .price = (I_PRICE >= GEN_9) ? 20000 : 4000, .holdEffect = HOLD_EFFECT_HEAVY_DUTY_BOOTS, .description = COMPOUND_STRING( @@ -9080,8 +9074,8 @@ const struct Item gItemsInfo[] = [ITEM_BLUNDER_POLICY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BlundrPolicy", "Blunder Policy"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("BlundrPolicies", "Blunder Policies"), + .name = _("Blunder Policy"), + .pluralName = _("Blunder Policies"), .price = (I_PRICE >= GEN_9) ? 30000 : 4000, .holdEffect = HOLD_EFFECT_BLUNDER_POLICY, .description = COMPOUND_STRING( @@ -9115,7 +9109,7 @@ const struct Item gItemsInfo[] = [ITEM_UTILITY_UMBRELLA] = { - .name = HANDLE_EXPANDED_ITEM_NAME("UtltyUmbrlla", "Utility Umbrella"), + .name = _("Utility Umbrella"), .price = (I_PRICE >= GEN_9) ? 15000 : 4000, .holdEffect = HOLD_EFFECT_UTILITY_UMBRELLA, .description = COMPOUND_STRING( @@ -11910,7 +11904,7 @@ const struct Item gItemsInfo[] = [ITEM_CATCHING_CHARM] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CatchngCharm", "Catching Charm"), + .name = _("Catching Charm"), .price = 0, .importance = 1, .description = COMPOUND_STRING( @@ -11944,7 +11938,7 @@ const struct Item gItemsInfo[] = [ITEM_ROTOM_CATALOG] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RotomCatalog", "Rotom Catalog"), + .name = _("Rotom Catalog"), .price = 0, .importance = 1, .description = COMPOUND_STRING( @@ -12074,8 +12068,8 @@ const struct Item gItemsInfo[] = [ITEM_REINS_OF_UNITY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ReinsOfUnity", "Reins of Unity"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ReinsOfUnity", "Reins of Unity"), + .name = _("Reins of Unity"), + .pluralName = _("Reins of Unity"), .price = 0, .importance = 1, .description = COMPOUND_STRING( @@ -12243,7 +12237,7 @@ const struct Item gItemsInfo[] = [ITEM_DOWSING_MACHINE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Dowsing MCHN", "Dowsing Machine"), + .name = _("Dowsing Machine"), .price = 0, .description = COMPOUND_STRING( "A device that\n" @@ -12985,7 +12979,7 @@ const struct Item gItemsInfo[] = [ITEM_ABILITY_SHIELD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AbilityShield", "Ability Shield"), + .name = _("Ability Shield"), .price = 20000, .holdEffect = HOLD_EFFECT_ABILITY_SHIELD, .description = COMPOUND_STRING( @@ -13021,7 +13015,7 @@ const struct Item gItemsInfo[] = [ITEM_PUNCHING_GLOVE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PunchingGlove", "Punching Glove"), + .name = _("Punching Glove"), .price = 15000, .holdEffect = HOLD_EFFECT_PUNCHING_GLOVE, .description = COMPOUND_STRING( @@ -13073,7 +13067,7 @@ const struct Item gItemsInfo[] = [ITEM_AUSPICIOUS_ARMOR] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AuspciousArmr", "Auspicious Armor"), + .name = _("Auspicious Armor"), .price = 3000, .description = COMPOUND_STRING( "Armor inhabited by\n" @@ -13090,8 +13084,8 @@ const struct Item gItemsInfo[] = [ITEM_BOOSTER_ENERGY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BoosterEnergy", "Booster Energy"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("BoosterEnergies", "Booster Energies"), + .name = _("Booster Energy"), + .pluralName = _("Booster Energies"), .price = 0, .holdEffect = HOLD_EFFECT_BOOSTER_ENERGY, .description = COMPOUND_STRING( @@ -13108,7 +13102,7 @@ const struct Item gItemsInfo[] = [ITEM_BIG_BAMBOO_SHOOT] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BigBmbooShoot", "Big Bamboo Shoot"), + .name = _("Big Bamboo Shoot"), .price = 3000, .description = COMPOUND_STRING( "A large and rare\n" @@ -13124,7 +13118,7 @@ const struct Item gItemsInfo[] = [ITEM_GIMMIGHOUL_COIN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GimighoulCoin", "Gimmighoul Coin"), + .name = _("Gimmighoul Coin"), .price = 400, .description = COMPOUND_STRING( "Gimmighoul hoard\n" @@ -13139,7 +13133,7 @@ const struct Item gItemsInfo[] = [ITEM_LEADERS_CREST] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Leader'sCrest", "Leader's Crest"), + .name = _("Leader's Crest"), .price = 3000, .description = COMPOUND_STRING( "A shard of an old\n" @@ -13154,7 +13148,7 @@ const struct Item gItemsInfo[] = [ITEM_MALICIOUS_ARMOR] = { - .name = HANDLE_EXPANDED_ITEM_NAME("MaliciousArmr", "Malicious Armor"), + .name = _("Malicious Armor"), .price = 3000, .description = COMPOUND_STRING( "Armor inhabited by\n" @@ -13188,8 +13182,8 @@ const struct Item gItemsInfo[] = [ITEM_SCROLL_OF_DARKNESS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ScrllOfDrknss", "Scroll of Darkness"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ScrllsOfDrknss", "Scrolls of Darkness"), + .name = _("Scroll of Darkness"), + .pluralName = _("Scrolls of Darkness"), .price = 0, .description = COMPOUND_STRING( "A peculiar scroll\n" @@ -13206,8 +13200,8 @@ const struct Item gItemsInfo[] = [ITEM_SCROLL_OF_WATERS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ScrollOfWatrs", "Scroll of Waters"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ScrollsOfWatrs", "Scrolls of Waters"), + .name = _("Scroll of Waters"), + .pluralName = _("Scrolls of Waters"), .price = 0, .description = COMPOUND_STRING( "A peculiar scroll\n" @@ -13240,7 +13234,7 @@ const struct Item gItemsInfo[] = [ITEM_TINY_BAMBOO_SHOOT] = { - .name = HANDLE_EXPANDED_ITEM_NAME("TinyBmbooShot", "Tiny Bamboo Shoot"), + .name = _("Tiny Bamboo Shoot"), .price = 750, .description = COMPOUND_STRING( "A small and rare\n" @@ -13256,7 +13250,7 @@ const struct Item gItemsInfo[] = [ITEM_BUG_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Bug TeraShard", "Bug Tera Shard"), + .name = _("Bug Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13268,7 +13262,7 @@ const struct Item gItemsInfo[] = [ITEM_DARK_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DarkTeraShard", "Dark Tera Shard"), + .name = _("Dark Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13280,7 +13274,7 @@ const struct Item gItemsInfo[] = [ITEM_DRAGON_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DragnTeraShrd", "Dragon Tera Shard"), + .name = _("Dragon Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13292,7 +13286,7 @@ const struct Item gItemsInfo[] = [ITEM_ELECTRIC_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("EltrcTeraShrd", "Electric Tera Shard"), + .name = _("Electric Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13304,7 +13298,7 @@ const struct Item gItemsInfo[] = [ITEM_FAIRY_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FairyTeraShrd", "Fairy Tera Shard"), + .name = _("Fairy Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13316,7 +13310,7 @@ const struct Item gItemsInfo[] = [ITEM_FIGHTING_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FghtngTerShrd", "Fighting Tera Shard"), + .name = _("Fighting Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13328,7 +13322,7 @@ const struct Item gItemsInfo[] = [ITEM_FIRE_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FireTeraShard", "Fire Tera Shard"), + .name = _("Fire Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13340,7 +13334,7 @@ const struct Item gItemsInfo[] = [ITEM_FLYING_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FlyngTeraShrd", "Flying Tera Shard"), + .name = _("Flying Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13352,7 +13346,7 @@ const struct Item gItemsInfo[] = [ITEM_GHOST_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GhostTeraShrd", "Ghost Tera Shard"), + .name = _("Ghost Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13364,7 +13358,7 @@ const struct Item gItemsInfo[] = [ITEM_GRASS_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GrassTeraShrd", "Grass Tera Shard"), + .name = _("Grass Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13376,7 +13370,7 @@ const struct Item gItemsInfo[] = [ITEM_GROUND_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GrondTeraShrd", "Ground Tera Shard"), + .name = _("Ground Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13388,7 +13382,7 @@ const struct Item gItemsInfo[] = [ITEM_ICE_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Ice TeraShard", "Ice Tera Shard"), + .name = _("Ice Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13400,7 +13394,7 @@ const struct Item gItemsInfo[] = [ITEM_NORMAL_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("NormlTeraShrd", "Normal Tera Shard"), + .name = _("Normal Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13412,7 +13406,7 @@ const struct Item gItemsInfo[] = [ITEM_POISON_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PoisnTeraShrd", "Poison Tera Shard"), + .name = _("Poison Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13424,7 +13418,7 @@ const struct Item gItemsInfo[] = [ITEM_PSYCHIC_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PschcTeraShrd", "Psychic Tera Shard"), + .name = _("Psychic Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13436,7 +13430,7 @@ const struct Item gItemsInfo[] = [ITEM_ROCK_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RockTeraShard", "Rock Tera Shard"), + .name = _("Rock Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13448,7 +13442,7 @@ const struct Item gItemsInfo[] = [ITEM_STEEL_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("SteelTeraShrd", "Steel Tera Shard"), + .name = _("Steel Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13460,7 +13454,7 @@ const struct Item gItemsInfo[] = [ITEM_WATER_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WaterTeraShrd", "Water Tera Shard"), + .name = _("Water Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13472,7 +13466,7 @@ const struct Item gItemsInfo[] = [ITEM_ADAMANT_CRYSTAL] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AdamantCrystl", "Adamant Crystal"), + .name = _("Adamant Crystal"), .price = 0, .description = COMPOUND_STRING( "A large, glowing gem\n" @@ -13504,7 +13498,7 @@ const struct Item gItemsInfo[] = [ITEM_LUSTROUS_GLOBE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("LustrousGlobe", "Lustrous Globe"), + .name = _("Lustrous Globe"), .price = 0, .description = COMPOUND_STRING( "A large, glowing gem\n" @@ -13520,7 +13514,7 @@ const struct Item gItemsInfo[] = [ITEM_BLACK_AUGURITE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BlackAugurite", "Black Augurite"), + .name = _("Black Augurite"), .price = 8000, .description = COMPOUND_STRING( "A black stone that\n" @@ -13623,7 +13617,7 @@ const struct Item gItemsInfo[] = [ITEM_UNREMARKABLE_TEACUP] = { - .name = HANDLE_EXPANDED_ITEM_NAME("UnrmkblTeacup", "Unremarkable Teacup"), + .name = _("Unremarkable Teacup"), .price = 1600, .description = COMPOUND_STRING( "A cracked teacup\n" @@ -13640,7 +13634,7 @@ const struct Item gItemsInfo[] = [ITEM_MASTERPIECE_TEACUP] = { - .name = HANDLE_EXPANDED_ITEM_NAME("MstrpceTeacup", "Masterpiece Teacup"), + .name = _("Masterpiece Teacup"), .price = 38000, .description = COMPOUND_STRING( "A chipped teacup\n" @@ -13657,7 +13651,7 @@ const struct Item gItemsInfo[] = [ITEM_CORNERSTONE_MASK] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CornrstneMask", "Cornerstone Mask"), + .name = _("Cornerstone Mask"), .price = 0, .description = COMPOUND_STRING( "Allows Ogerpon to\n" @@ -13672,7 +13666,7 @@ const struct Item gItemsInfo[] = [ITEM_WELLSPRING_MASK] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WellsprngMask", "Wellspring Mask"), + .name = _("Wellspring Mask"), .price = 0, .description = COMPOUND_STRING( "Allows Ogerpon to\n" @@ -13687,7 +13681,7 @@ const struct Item gItemsInfo[] = [ITEM_HEARTHFLAME_MASK] = { - .name = HANDLE_EXPANDED_ITEM_NAME("HrthflameMask", "Hearthflame Mask"), + .name = _("Hearthflame Mask"), .price = 0, .description = COMPOUND_STRING( "Allows Ogerpon to\n" @@ -13792,8 +13786,8 @@ const struct Item gItemsInfo[] = [ITEM_FRESH_START_MOCHI] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FrshStrtMochi", "Fresh Start Mochi"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("FrshStrtMochi", "Fresh Start Mochi"), + .name = _("Fresh Start Mochi"), + .pluralName = _("Fresh Start Mochi"), .price = 300, .description = COMPOUND_STRING( "An item that resets\n" @@ -13810,7 +13804,7 @@ const struct Item gItemsInfo[] = [ITEM_GLIMMERING_CHARM] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GlmmringCharm", "Glimmering Charm"), + .name = _("Glimmering Charm"), .price = 0, .importance = 1, .description = COMPOUND_STRING( @@ -13842,7 +13836,7 @@ const struct Item gItemsInfo[] = [ITEM_STELLAR_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("StllrTeraShrd", "Stellar Tera Shard"), + .name = _("Stellar Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13854,7 +13848,7 @@ const struct Item gItemsInfo[] = [ITEM_JUBILIFE_MUFFIN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("JublifeMuffin", "Jubilife Muffin"), + .name = _("Jubilife Muffin"), .price = 250, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -13996,7 +13990,7 @@ const struct Item gItemsInfo[] = [ITEM_AUX_POWERGUARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AuxPowerguard", "Aux Powerguard"), + .name = _("Aux Powerguard"), .price = 1200, .holdEffectParam = X_ITEM_STAGES, .description = COMPOUND_STRING( @@ -14019,7 +14013,7 @@ const struct Item gItemsInfo[] = [ITEM_CHOICE_DUMPLING] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ChoiceDumplng", "Choice Dumpling"), + .name = _("Choice Dumpling"), .price = 1200, .description = sQuestionMarksDesc, .pocket = POCKET_ITEMS, @@ -14045,7 +14039,7 @@ const struct Item gItemsInfo[] = [ITEM_TWICE_SPICED_RADISH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("2xSpicedRadsh", "Twice-Spiced Radish"), + .name = _("Twice-Spiced Radish"), .price = 1600, .description = sQuestionMarksDesc, .pocket = POCKET_ITEMS, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index cef7b6971a..99217808ac 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -11,12 +11,6 @@ // The Gen. 4+ contest data comes from urpg's contest movedex. -#if B_EXPANDED_MOVE_NAMES == TRUE -#define HANDLE_EXPANDED_MOVE_NAME(_name, ...) COMPOUND_STRING(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_MOVE_NAME(_name, ...) COMPOUND_STRING(_name) -#endif - #if B_BINDING_TURNS >= GEN_5 #define BINDING_TURNS "4 or 5" #else @@ -335,7 +329,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_THUNDER_PUNCH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThunderPunch", "Thunder Punch"), + .name = COMPOUND_STRING("Thunder Punch"), .description = COMPOUND_STRING( "An electrified punch that\n" "may paralyze the foe."), @@ -2008,7 +2002,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_POISON_POWDER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PoisonPowder", "Poison Powder"), + .name = COMPOUND_STRING("Poison Powder"), .description = COMPOUND_STRING( "Scatters a toxic powder\n" "that may poison the foe."), @@ -2185,7 +2179,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_THUNDER_SHOCK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThunderShock", "Thunder Shock"), + .name = COMPOUND_STRING("Thunder Shock"), .description = COMPOUND_STRING( "An electrical attack that\n" "may paralyze the foe."), @@ -3082,7 +3076,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SELF_DESTRUCT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SelfDestruct", "Self-Destruct"), + .name = COMPOUND_STRING("Self-Destruct"), .description = COMPOUND_STRING( "Inflicts severe damage but\n" "makes the user faint."), @@ -3478,7 +3472,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_HIGH_JUMP_KICK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HighJumpKick", "High Jump Kick"), + .name = COMPOUND_STRING("High Jump Kick"), .description = COMPOUND_STRING( "A jumping knee kick. If it\n" "misses, the user is hurt."), @@ -5657,7 +5651,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DYNAMIC_PUNCH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DynamicPunch", "Dynamic Punch"), + .name = COMPOUND_STRING("Dynamic Punch"), .description = COMPOUND_STRING( "Powerful and sure to cause\n" "confusion, but inaccurate."), @@ -5706,7 +5700,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DRAGON_BREATH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DragonBreath", "Dragon Breath"), + .name = COMPOUND_STRING("Dragon Breath"), .description = COMPOUND_STRING( "Strikes the foe with an\n" "incredible blast of breath."), @@ -6219,7 +6213,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_EXTREME_SPEED] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ExtremeSpeed", "Extreme Speed"), + .name = COMPOUND_STRING("Extreme Speed"), .description = COMPOUND_STRING( "An extremely fast and\n" "powerful attack."), @@ -6241,7 +6235,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_ANCIENT_POWER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("AncientPower", "Ancient Power"), + .name = COMPOUND_STRING("Ancient Power"), .description = COMPOUND_STRING( "An attack that may raise\n" "all stats."), @@ -6720,7 +6714,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SMELLING_SALTS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SmellngSalts", "Smelling Salts"), + .name = COMPOUND_STRING("Smelling Salts"), .description = COMPOUND_STRING( "Powerful against paralyzed\n" "foes, but also heals them."), @@ -7521,7 +7515,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FEATHER_DANCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FeatherDance", "Feather Dance"), + .name = COMPOUND_STRING("Feather Dance"), .description = COMPOUND_STRING( "Envelops the foe with down\n" "to sharply reduce Attack."), @@ -8102,7 +8096,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_GRASS_WHISTLE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("GrassWhistle", "Grass Whistle"), + .name = COMPOUND_STRING("Grass Whistle"), .description = COMPOUND_STRING( "Lulls the foe into sleep\n" "with a pleasant melody."), @@ -14089,7 +14083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PHANTOM_FORCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PhantomForce", "Phantom Force"), + .name = COMPOUND_STRING("Phantom Force"), .description = sShadowForceDescription, .effect = EFFECT_SEMI_INVULNERABLE, .power = 90, @@ -14118,7 +14112,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_TRICK_OR_TREAT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TrickOrTreat", "Trick-or-Treat"), + .name = COMPOUND_STRING("Trick-or-Treat"), .description = COMPOUND_STRING( "Goes trick-or-treating\n" "making the foe Ghost-type."), @@ -14191,7 +14185,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PARABOLIC_CHARGE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ParabolcChrg", "Parabolic Charge"), + .name = COMPOUND_STRING("Parabolic Charge"), .description = COMPOUND_STRING( "Damages adjacent Pokémon and\n" "heals up by half of it."), @@ -14213,7 +14207,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FORESTS_CURSE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("Forest'sCurs", "Forest's Curse"), + .name = COMPOUND_STRING("Forest's Curse"), .description = COMPOUND_STRING( "Puts a curse on the foe\n" "making the foe Grass-type."), @@ -14237,7 +14231,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PETAL_BLIZZARD] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PetalBlizzrd", "Petal Blizzard"), + .name = COMPOUND_STRING("Petal Blizzard"), .description = COMPOUND_STRING( "Stirs up a violent storm\n" "of petals to attack."), @@ -14289,7 +14283,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DISARMING_VOICE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DisrmngVoice", "Disarming Voice"), + .name = COMPOUND_STRING("Disarming Voice"), .description = COMPOUND_STRING( "Lets out a charming cry\n" "that cannot be evaded."), @@ -14360,7 +14354,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DRAINING_KISS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DrainingKiss", "Draining Kiss"), + .name = COMPOUND_STRING("Draining Kiss"), .description = sDrainingKissDescription, .effect = EFFECT_ABSORB, .power = 50, @@ -14382,7 +14376,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_CRAFTY_SHIELD] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CraftyShield", "Crafty Shield"), + .name = COMPOUND_STRING("Crafty Shield"), .description = COMPOUND_STRING( "Evades status moves for\n" "one turn."), @@ -14408,7 +14402,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FLOWER_SHIELD] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FlowerShield", "Flower Shield"), + .name = COMPOUND_STRING("Flower Shield"), .description = COMPOUND_STRING( "Raises the Defense of\n" "Grass-type Pokémon."), @@ -14432,7 +14426,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_GRASSY_TERRAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("GrssyTerrain", "Grassy Terrain"), + .name = COMPOUND_STRING("Grassy Terrain"), .description = COMPOUND_STRING( "The ground turns to grass\n" "for 5 turns. Restores HP."), @@ -14457,7 +14451,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MISTY_TERRAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MistyTerrain", "Misty Terrain"), + .name = COMPOUND_STRING("Misty Terrain"), .description = COMPOUND_STRING( "Covers the ground with mist\n" "for 5 turns. Blocks status."), @@ -14624,7 +14618,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_KINGS_SHIELD] = { - .name = HANDLE_EXPANDED_MOVE_NAME("King'sShield", "King's Shield"), + .name = COMPOUND_STRING("King's Shield"), .description = COMPOUND_STRING( "Evades damage, and sharply\n" "reduces Attack if struck."), @@ -14703,7 +14697,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DIAMOND_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DiamondStorm", "Diamond Storm"), + .name = COMPOUND_STRING("Diamond Storm"), .description = COMPOUND_STRING( "Whips up a storm of\n" "diamonds. May up Defense."), @@ -14730,7 +14724,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_STEAM_ERUPTION] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SteamErption", "Steam Eruption"), + .name = COMPOUND_STRING("Steam Eruption"), .description = COMPOUND_STRING( "Immerses the foe in heated\n" "steam. May inflict a burn."), @@ -14757,7 +14751,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_HYPERSPACE_HOLE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HyprspceHole", "Hyperspace Hole"), + .name = COMPOUND_STRING("Hyperspace Hole"), .description = sHyperspaceHoleDescription, .effect = EFFECT_HIT, .power = 80, @@ -14782,7 +14776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_WATER_SHURIKEN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("WatrShuriken", "Water Shuriken"), + .name = COMPOUND_STRING("Water Shuriken"), .description = COMPOUND_STRING( "Throws 2 to 5 stars that\n" "are sure to strike first."), @@ -14803,7 +14797,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MYSTICAL_FIRE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MysticalFire", "Mystical Fire"), + .name = COMPOUND_STRING("Mystical Fire"), .description = COMPOUND_STRING( "Breathes a special, hot\n" "fire. Lowers Sp. Atk."), @@ -14855,7 +14849,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_AROMATIC_MIST] = { - .name = HANDLE_EXPANDED_MOVE_NAME("AromaticMist", "Aromatic Mist"), + .name = COMPOUND_STRING("Aromatic Mist"), .description = COMPOUND_STRING( "Raises the Sp. Def of a\n" "partner Pokémon."), @@ -14880,7 +14874,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_EERIE_IMPULSE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("EerieImpulse", "Eerie Impulse"), + .name = COMPOUND_STRING("Eerie Impulse"), .description = COMPOUND_STRING( "Exposes the foe to a pulse\n" "that sharply cuts Sp. Atk."), @@ -14976,7 +14970,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MAGNETIC_FLUX] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MagneticFlux", "Magnetic Flux"), + .name = COMPOUND_STRING("Magnetic Flux"), .description = COMPOUND_STRING( "Boosts the defenses of\n" "those with Plus or Minus."), @@ -15026,7 +15020,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_ELECTRIC_TERRAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ElctrcTrrain", "Electric Terrain"), + .name = COMPOUND_STRING("Electric Terrain"), .description = COMPOUND_STRING( "Electrifies the ground for\n" "5 turns. Prevents sleep."), @@ -15051,7 +15045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DAZZLING_GLEAM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DazzlngGleam", "Dazzling Gleam"), + .name = COMPOUND_STRING("Dazzling Gleam"), .description = COMPOUND_STRING( "Damages foes by emitting\n" "a bright flash."), @@ -15132,7 +15126,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BABY_DOLL_EYES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BabyDollEyes", "Baby-Doll Eyes"), + .name = COMPOUND_STRING("Baby-Doll Eyes"), .description = COMPOUND_STRING( "Lowers the foe's Attack\n" "before it can move."), @@ -15226,7 +15220,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_POWER_UP_PUNCH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PowerUpPunch", "Power-Up Punch"), + .name = COMPOUND_STRING("Power-Up Punch"), .description = COMPOUND_STRING( "A hard punch that raises\n" "the user's Attack."), @@ -15254,7 +15248,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_OBLIVION_WING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("OblivionWing", "Oblivion Wing"), + .name = COMPOUND_STRING("Oblivion Wing"), .description = sDrainingKissDescription, .effect = EFFECT_ABSORB, .power = 80, @@ -15275,7 +15269,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_THOUSAND_ARROWS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThousndArrws", "Thousand Arrows"), + .name = COMPOUND_STRING("Thousand Arrows"), .description = COMPOUND_STRING( "Can hit Flying foes, then\n" "knocks them to the ground."), @@ -15303,7 +15297,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_THOUSAND_WAVES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThousndWaves", "Thousand Waves"), + .name = COMPOUND_STRING("Thousand Waves"), .description = COMPOUND_STRING( "Those hit by the wave can\n" "no longer escape."), @@ -15351,7 +15345,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_LIGHT_OF_RUIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("LightOfRuin", "Light Of Ruin"), + .name = COMPOUND_STRING("Light Of Ruin"), .description = COMPOUND_STRING( "Fires a great beam of light\n" "that also hurts the user."), @@ -15393,7 +15387,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PRECIPICE_BLADES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PrcipceBldes", "Precipice Blades"), + .name = COMPOUND_STRING("Precipice Blades"), .description = COMPOUND_STRING( "Fearsome blades of stone\n" "attack both foes."), @@ -15415,7 +15409,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DRAGON_ASCENT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DragonAscent", "Dragon Ascent"), + .name = COMPOUND_STRING("Dragon Ascent"), .description = sCloseCombatDescription, .effect = EFFECT_HIT, .power = 120, @@ -15440,7 +15434,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_HYPERSPACE_FURY] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HyprspceFury", "Hyperspace Fury"), + .name = COMPOUND_STRING("Hyperspace Fury"), .description = sHyperspaceHoleDescription, .effect = EFFECT_HYPERSPACE_FURY, .power = 100, @@ -15494,7 +15488,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FIRST_IMPRESSION] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FrstImpressn", "First Impression"), + .name = COMPOUND_STRING("First Impression"), .description = COMPOUND_STRING( "Hits hard and first.\n" "Only works first turn."), @@ -15517,7 +15511,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BANEFUL_BUNKER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BanefulBunkr", "Baneful Bunker"), + .name = COMPOUND_STRING("Baneful Bunker"), .description = COMPOUND_STRING( "Protects user and poisons\n" "foes on contact."), @@ -15544,7 +15538,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SPIRIT_SHACKLE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SpiritShackl", "Spirit Shackle"), + .name = COMPOUND_STRING("Spirit Shackle"), .description = COMPOUND_STRING( "After being hit, foes can\n" "no longer escape."), @@ -15569,7 +15563,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DARKEST_LARIAT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DarkstLariat", "Darkest Lariat"), + .name = COMPOUND_STRING("Darkest Lariat"), .description = COMPOUND_STRING( "Swings the arms to strike\n" "It ignores stat changes."), @@ -15592,7 +15586,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SPARKLING_ARIA] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SparklngAria", "Sparkling Aria"), + .name = COMPOUND_STRING("Sparkling Aria"), .description = COMPOUND_STRING( "Sings with bubbles. Cures\n" "burns on contact."), @@ -15647,7 +15641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FLORAL_HEALING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FloralHealng", "Floral Healing"), + .name = COMPOUND_STRING("Floral Healing"), .description = COMPOUND_STRING( "Restores an ally's HP.\n" "Heals more on grass."), @@ -15673,7 +15667,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_HIGH_HORSEPOWER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HighHorsepwr", "High Horsepower"), + .name = COMPOUND_STRING("High Horsepower"), .description = COMPOUND_STRING( "Slams hard into the foe with\n" "its entire body."), @@ -15941,7 +15935,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PSYCHIC_TERRAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PsychcTrrain", "Psychic Terrain"), + .name = COMPOUND_STRING("Psychic Terrain"), .description = COMPOUND_STRING( "The ground turns weird for\n" "5 turns. Blocks priority."), @@ -16136,7 +16130,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_REVELATION_DANCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("RvlationDnce", "Revelation Dance"), + .name = COMPOUND_STRING("Revelation Dance"), .description = COMPOUND_STRING( "Dances with mystical power.\n" "Matches user's first type."), @@ -16158,7 +16152,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_CORE_ENFORCER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CoreEnforcer", "Core Enforcer"), + .name = COMPOUND_STRING("Core Enforcer"), .description = COMPOUND_STRING( "Hits with a ray that\n" "nullifies the foe's ability."), @@ -16264,7 +16258,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_CLANGING_SCALES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ClngngScales", "Clanging Scales"), + .name = COMPOUND_STRING("Clanging Scales"), .description = COMPOUND_STRING( "Makes a big noise with\n" "its scales. Drops Defense."), @@ -16291,7 +16285,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DRAGON_HAMMER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DragonHammer", "Dragon Hammer"), + .name = COMPOUND_STRING("Dragon Hammer"), .description = COMPOUND_STRING( "Swings its whole body\n" "like a hammer to damage."), @@ -16414,7 +16408,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PSYCHIC_FANGS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PsychicFangs", "Psychic Fangs"), + .name = COMPOUND_STRING("Psychic Fangs"), .description = COMPOUND_STRING( "Chomps with psychic fangs.\n" "Destroys any barriers."), @@ -16437,7 +16431,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_STOMPING_TANTRUM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("StmpngTantrm", "Stomping Tantrum"), + .name = COMPOUND_STRING("Stomping Tantrum"), .description = COMPOUND_STRING( "Stomps around angrily.\n" "Stronger after a failure."), @@ -16533,7 +16527,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PRISMATIC_LASER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PrsmaticLasr", "Prismatic Laser"), + .name = COMPOUND_STRING("Prismatic Laser"), .description = COMPOUND_STRING( "A high power laser that\n" "forces recharge next turn."), @@ -16558,7 +16552,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SPECTRAL_THIEF] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SpectrlThief", "Spectral Thief"), + .name = COMPOUND_STRING("Spectral Thief"), .description = COMPOUND_STRING( "Steals the target's stat\n" "boosts, then attacks."), @@ -16585,7 +16579,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SUNSTEEL_STRIKE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SnsteelStrke", "Sunsteel Strike"), + .name = COMPOUND_STRING("Sunsteel Strike"), .description = COMPOUND_STRING( "A sun-fueled strike that\n" "ignores abilities."), @@ -16609,7 +16603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MOONGEIST_BEAM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MoongestBeam", "Moongeist Beam"), + .name = COMPOUND_STRING("Moongeist Beam"), .description = COMPOUND_STRING( "A moon-powered beam that\n" "ignores abilities."), @@ -16682,7 +16676,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_NATURES_MADNESS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("Natur'sMadns", "Nature's Madness"), + .name = COMPOUND_STRING("Nature's Madness"), .description = COMPOUND_STRING( "Halves the foe's HP with\n" "the power of nature."), @@ -16773,7 +16767,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PHOTON_GEYSER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PhotonGeyser", "Photon Geyser"), + .name = COMPOUND_STRING("Photon Geyser"), .description = COMPOUND_STRING( "User's highest attack stat\n" "determines its category."), @@ -16823,7 +16817,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SPLISHY_SPLASH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SplishySplsh", "Splishy Splash"), + .name = COMPOUND_STRING("Splishy Splash"), .description = COMPOUND_STRING( "A huge electrified wave that\n" "may paralyze the foe."), @@ -16890,7 +16884,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BOUNCY_BUBBLE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BouncyBubble", "Bouncy Bubble"), + .name = COMPOUND_STRING("Bouncy Bubble"), .description = COMPOUND_STRING( "An attack that absorbs\n" #if B_UPDATED_MOVE_DATA >= GEN_8 @@ -17040,7 +17034,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SPARKLY_SWIRL] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SparklySwirl", "Sparkly Swirl"), + .name = COMPOUND_STRING("Sparkly Swirl"), .description = COMPOUND_STRING( "Wrap foe with whirlwind of\n" "scent. Heals party's status."), @@ -17059,7 +17053,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_VEEVEE_VOLLEY] = { - .name = HANDLE_EXPANDED_MOVE_NAME("VeeveeVolley", "Veevee Volley"), + .name = COMPOUND_STRING("Veevee Volley"), .description = COMPOUND_STRING( "Eevee's love increases its\n" "power. It never misses."), @@ -17079,7 +17073,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DOUBLE_IRON_BASH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DublIronBash", "Double Iron Bash"), + .name = COMPOUND_STRING("Double Iron Bash"), .description = COMPOUND_STRING( "The user spins and hits with\n" "its arms. May cause flinch."), @@ -17109,7 +17103,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DYNAMAX_CANNON] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DynamxCannon", "Dynamax Cannon"), + .name = COMPOUND_STRING("Dynamax Cannon"), .description = COMPOUND_STRING( "Fires a strong beam. Deals\n" "2x damage to Dynamaxed foes."), @@ -17371,7 +17365,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FISHIOUS_REND] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FishiousRend", "Fishious Rend"), + .name = COMPOUND_STRING("Fishious Rend"), .description = COMPOUND_STRING( "Double power if the user\n" "moves before the target."), @@ -17416,7 +17410,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_CLANGOROUS_SOUL] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ClngrousSoul", "Clangorous Soul"), + .name = COMPOUND_STRING("Clangorous Soul"), .description = COMPOUND_STRING( "The user uses some of its\n" "HP to raise all its stats."), @@ -17572,7 +17566,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BEHEMOTH_BLADE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BehemthBlade", "Behemoth Blade"), + .name = COMPOUND_STRING("Behemoth Blade"), .description = COMPOUND_STRING( "Strikes as a sword. Deals 2x\n" "damage to Dynamaxed foes."), @@ -17599,7 +17593,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BEHEMOTH_BASH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BehemothBash", "Behemoth Bash"), + .name = COMPOUND_STRING("Behemoth Bash"), .description = COMPOUND_STRING( "Attacks as a shield. Deals 2x\n" "damage to Dynamaxed foes."), @@ -17652,7 +17646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BREAKING_SWIPE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BreakngSwipe", "Breaking Swipe"), + .name = COMPOUND_STRING("Breaking Swipe"), .description = COMPOUND_STRING( "Swings its tail to attack.\n" "Lowers the Atk of those hit."), @@ -17805,7 +17799,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_STRANGE_STEAM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("StrangeSteam", "Strange Steam"), + .name = COMPOUND_STRING("Strange Steam"), .description = COMPOUND_STRING( "Emits a strange steam to\n" "potentially confuse the foe."), @@ -17883,7 +17877,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FALSE_SURRENDER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FalsSurrendr", "False Surrender"), + .name = COMPOUND_STRING("False Surrender"), .description = COMPOUND_STRING( "Bows to stab the foe\n" "with hair. It never misses."), @@ -17906,7 +17900,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_METEOR_ASSAULT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MeteorAssalt", "Meteor Assault"), + .name = COMPOUND_STRING("Meteor Assault"), .description = COMPOUND_STRING( "Attacks with a thick leek.\n" "The user must then rest."), @@ -17981,7 +17975,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_EXPANDING_FORCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ExpandngForc", "Expanding Force"), + .name = COMPOUND_STRING("Expanding Force"), .description = COMPOUND_STRING( "Power goes up and damages\n" "all foes on Psychic Terrain."), @@ -18076,7 +18070,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SHELL_SIDE_ARM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ShellSideArm", "Shell Side Arm"), + .name = COMPOUND_STRING("Shell Side Arm"), .description = COMPOUND_STRING( "Deals better of physical and\n" "special damage. May poison."), @@ -18101,7 +18095,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MISTY_EXPLOSION] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MstyExplsion", "Misty Explosion"), + .name = COMPOUND_STRING("Misty Explosion"), .description = COMPOUND_STRING( "Hit everything and faint.\n" "Powers up on Misty Terrain."), @@ -18145,7 +18139,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_RISING_VOLTAGE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("RisngVoltage", "Rising Voltage"), + .name = COMPOUND_STRING("Rising Voltage"), .description = COMPOUND_STRING( "This move's power doubles\n" "when on Electric Terrain."), @@ -18166,7 +18160,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_TERRAIN_PULSE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TerrainPulse", "Terrain Pulse"), + .name = COMPOUND_STRING("Terrain Pulse"), .description = COMPOUND_STRING( "Type and power changes\n" "depending on the terrain."), @@ -18188,7 +18182,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SKITTER_SMACK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SkitterSmack", "Skitter Smack"), + .name = COMPOUND_STRING("Skitter Smack"), .description = COMPOUND_STRING( "User skitters behind foe to\n" "attack. Lowers foe's Sp. Atk."), @@ -18214,7 +18208,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BURNING_JEALOUSY] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BrningJelosy", "Burning Jealousy"), + .name = COMPOUND_STRING("Burning Jealousy"), .description = COMPOUND_STRING( "Foes that have stats upped\n" "during the turn get burned."), @@ -18283,7 +18277,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_CORROSIVE_GAS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CorrosiveGas", "Corrosive Gas"), + .name = COMPOUND_STRING("Corrosive Gas"), .description = COMPOUND_STRING( "Highly acidic gas melts items\n" "held by surrounding Pokémon."), @@ -18374,7 +18368,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DUAL_WINGBEAT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DualWingbeat", "Dual Wingbeat"), + .name = COMPOUND_STRING("Dual Wingbeat"), .description = COMPOUND_STRING( "User slams the target with\n" "wings and hits twice in a row."), @@ -18397,7 +18391,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SCORCHING_SANDS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ScorchngSnds", "Scorching Sands"), + .name = COMPOUND_STRING("Scorching Sands"), .description = COMPOUND_STRING( "Throws scorching sand at\n" "the target. May leave a burn."), @@ -18423,7 +18417,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_JUNGLE_HEALING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("JungleHealng", "Jungle Healing"), + .name = COMPOUND_STRING("Jungle Healing"), .description = COMPOUND_STRING( "Heals HP and status of\n" "itself and allies in battle."), @@ -18474,7 +18468,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SURGING_STRIKES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SurgngStrkes", "Surging Strikes"), + .name = COMPOUND_STRING("Surging Strikes"), .description = COMPOUND_STRING( "Mastering the Water style,\n" "strikes with 3 critical hits."), @@ -18525,7 +18519,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_DRAGON_ENERGY] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DragonEnergy", "Dragon Energy"), + .name = COMPOUND_STRING("Dragon Energy"), .description = COMPOUND_STRING( "The higher the user's HP\n" "the more damage caused."), @@ -18547,7 +18541,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_FREEZING_GLARE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FreezngGlare", "Freezing Glare"), + .name = COMPOUND_STRING("Freezing Glare"), .description = COMPOUND_STRING( "Shoots psychic power from\n" #if B_USE_FROSTBITE == TRUE @@ -18603,7 +18597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_THUNDEROUS_KICK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThnderusKick", "Thunderous Kick"), + .name = COMPOUND_STRING("Thunderous Kick"), .description = COMPOUND_STRING( "Uses a lightning-like kick\n" "to hit. Lowers foe's Defense."), @@ -18630,7 +18624,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_GLACIAL_LANCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("GlacialLance", "Glacial Lance"), + .name = COMPOUND_STRING("Glacial Lance"), .description = COMPOUND_STRING( "Strikes by hurling a blizzard-\n" "cloaked icicle lance at foes."), @@ -18652,7 +18646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_ASTRAL_BARRAGE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("AstrlBarrage", "Astral Barrage"), + .name = COMPOUND_STRING("Astral Barrage"), .description = COMPOUND_STRING( "Strikes by sending a frightful\n" "amount of ghosts at foes."), @@ -18719,7 +18713,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PSYSHIELD_BASH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PsyshieldBsh", "Psyshield Bash"), + .name = COMPOUND_STRING("Psyshield Bash"), .description = COMPOUND_STRING( "Hits a foe with psychic\n" "energy. May raise Defense."), @@ -18786,7 +18780,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SPRINGTIDE_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SprngtdeStrm", "Springtide Storm"), + .name = COMPOUND_STRING("Springtide Storm"), .description = COMPOUND_STRING( "Wraps a foe in fierce winds.\n" "Varies with the user's form."), @@ -18809,7 +18803,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MYSTICAL_POWER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MystcalPower", "Mystical Power"), + .name = COMPOUND_STRING("Mystical Power"), .description = COMPOUND_STRING( "A mysterious power strikes,\n" "raising the user's Sp. Atk."), @@ -18890,7 +18884,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MOUNTAIN_GALE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MountainGale", "Mountain Gale"), + .name = COMPOUND_STRING("Mountain Gale"), .description = COMPOUND_STRING( "Giant chunks of ice damage\n" "the foe. It may flinch."), @@ -18911,7 +18905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_VICTORY_DANCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("VictoryDance", "Victory Dance"), + .name = COMPOUND_STRING("Victory Dance"), .description = COMPOUND_STRING( "Dances to raise Attack,\n" "Defense and Speed."), @@ -18932,7 +18926,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_HEADLONG_RUSH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HeadlongRush", "Headlong Rush"), + .name = COMPOUND_STRING("Headlong Rush"), .description = COMPOUND_STRING( "Hits with a full-body tackle.\n" "Lowers the users's defenses."), @@ -19000,7 +18994,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BITTER_MALICE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BitterMalice", "Bitter Malice"), + .name = COMPOUND_STRING("Bitter Malice"), .description = COMPOUND_STRING( "A spine-chilling resentment.\n" "Lowers the foe's Attack."), @@ -19041,7 +19035,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_TRIPLE_ARROWS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TripleArrows", "Triple Arrows"), + .name = COMPOUND_STRING("Triple Arrows"), .description = COMPOUND_STRING( "High critical hit ratio.\n" "May lower Defense or flinch."), @@ -19067,7 +19061,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_INFERNAL_PARADE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("InfrnlParade", "Infernal Parade"), + .name = COMPOUND_STRING("Infernal Parade"), .description = COMPOUND_STRING( "Hurts a foe harder if it has\n" "an ailment. May leave a burn."), @@ -19089,7 +19083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_CEASELESS_EDGE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CeaslessEdge", "Ceaseless Edge"), + .name = COMPOUND_STRING("Ceaseless Edge"), .description = COMPOUND_STRING( "High critical hit ratio. Sets\n" "Splinters that hurt the foe."), @@ -19112,7 +19106,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BLEAKWIND_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BlekwndStorm", "Bleakwind Storm"), + .name = COMPOUND_STRING("Bleakwind Storm"), .description = COMPOUND_STRING( "Hits with brutal, cold winds.\n" "May lower the foe's Speed."), @@ -19134,7 +19128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_WILDBOLT_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("WildbltStorm", "Wildbolt Storm"), + .name = COMPOUND_STRING("Wildbolt Storm"), .description = COMPOUND_STRING( "Hits with a brutal tempest.\n" "May inflict paralysis."), @@ -19156,7 +19150,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SANDSEAR_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SndsearStorm", "Sandsear Storm"), + .name = COMPOUND_STRING("Sandsear Storm"), .description = COMPOUND_STRING( "Hits with brutally hot sand.\n" "May inflict a burn."), @@ -19178,7 +19172,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_LUNAR_BLESSING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("LunarBlessng", "Lunar Blessing"), + .name = COMPOUND_STRING("Lunar Blessing"), .description = COMPOUND_STRING( "The user heals and cures\n" "itself and its ally."), @@ -19283,7 +19277,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_LAST_RESPECTS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("LastRespects", "Last Respects"), + .name = COMPOUND_STRING("Last Respects"), .description = COMPOUND_STRING( "This move deals more damage\n" "for each defeated ally."), @@ -19361,7 +19355,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SPICY_EXTRACT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SpicyExtract", "Spicy Extract"), + .name = COMPOUND_STRING("Spicy Extract"), .description = COMPOUND_STRING( "Sharply ups target's Attack,\n" "harshly lowers its Defense."), @@ -19403,7 +19397,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_POPULATION_BOMB] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PoplatinBomb", "Population Bomb"), + .name = COMPOUND_STRING("Population Bomb"), .description = COMPOUND_STRING( "The user's fellows hit one\n" "to ten times in a row."), @@ -19462,7 +19456,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_REVIVAL_BLESSING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("RevivlBlesng", "Revival Blessing"), + .name = COMPOUND_STRING("Revival Blessing"), .description = COMPOUND_STRING( "Revives a fainted party {PKMN}\n" "and restores half of its HP."), @@ -19589,7 +19583,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_KOWTOW_CLEAVE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("KowtowCleave", "Kowtow Cleave"), + .name = COMPOUND_STRING("Kowtow Cleave"), .description = COMPOUND_STRING( "User slashes the foe after\n" "kowtowing. It never misses."), @@ -19736,7 +19730,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_COLLISION_COURSE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ColisinCours", "Collision Course"), + .name = COMPOUND_STRING("Collision Course"), .description = COMPOUND_STRING( "Prehistoric explosion that's\n" "stronger if super effective."), @@ -19755,7 +19749,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_ELECTRO_DRIFT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ElectroDrift", "Electro Drift"), + .name = COMPOUND_STRING("Electro Drift"), .description = COMPOUND_STRING( "Futuristic electricity. It's\n" "stronger if super effective."), @@ -19795,7 +19789,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_CHILLY_RECEPTION] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ChilReceptin", "Chilly Reception"), + .name = COMPOUND_STRING("Chilly Reception"), .description = COMPOUND_STRING( "Bad joke summons snowstorm.\n" "The user also switches out."), @@ -19904,7 +19898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_CHILLING_WATER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ChillingWatr", "Chilling Water"), + .name = COMPOUND_STRING("Chilling Water"), .description = COMPOUND_STRING( "A shower with ice-cold water\n" "lowers the target's Attack."), @@ -20051,7 +20045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_GIGATON_HAMMER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("GigatonHammr", "Gigaton Hammer"), + .name = COMPOUND_STRING("Gigaton Hammer"), .description = COMPOUND_STRING( "Swings a huge hammer. Can't\n" "be used twice in a row."), @@ -20108,7 +20102,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BLAZING_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BlazngTorque", "Blazing Torque"), + .name = COMPOUND_STRING("Blazing Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 80, @@ -20137,7 +20131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_WICKED_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("WickedTorque", "Wicked Torque"), + .name = COMPOUND_STRING("Wicked Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 80, @@ -20166,7 +20160,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_NOXIOUS_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("NoxiusTorque", "Noxious Torque"), + .name = COMPOUND_STRING("Noxious Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 100, @@ -20195,7 +20189,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_COMBAT_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CombatTorque", "Combat Torque"), + .name = COMPOUND_STRING("Combat Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 100, @@ -20224,7 +20218,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MAGICAL_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MagiclTorque", "Magical Torque"), + .name = COMPOUND_STRING("Magical Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 100, @@ -20308,7 +20302,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MATCHA_GOTCHA] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MatchaGotcha", "Matcha Gotcha"), + .name = COMPOUND_STRING("Matcha Gotcha"), .description = COMPOUND_STRING( "Absorbs half the damage\n" "inflicted. May cause a burn."), @@ -20397,7 +20391,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_TERA_STARSTORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TeraStarstrm", "Tera Starstorm"), + .name = COMPOUND_STRING("Tera Starstorm"), .description = COMPOUND_STRING( "Damages all opponents if user is\n" "Stellar form Terapagos."), @@ -20435,7 +20429,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_BURNING_BULWARK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BurnngBulwrk", "Burning Bulwark"), + .name = COMPOUND_STRING("Burning Bulwark"), .description = COMPOUND_STRING( "Evades attack, and burns\n" "the foe if struck."), @@ -20473,7 +20467,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MIGHTY_CLEAVE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MightyCleave", "Mighty Cleave"), + .name = COMPOUND_STRING("Mighty Cleave"), .description = sFeintDescription, .effect = EFFECT_HIT, .power = 95, @@ -20491,7 +20485,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_TACHYON_CUTTER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TachyonCuttr", "Tachyon Cutter"), + .name = COMPOUND_STRING("Tachyon Cutter"), .description = COMPOUND_STRING( "Launches particle blades at\n" "the target. Strikes twice."), @@ -20545,7 +20539,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_ALLURING_VOICE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("AllurngVoice", "Alluring Voice"), + .name = COMPOUND_STRING("Alluring Voice"), .description = COMPOUND_STRING( "Confuses the target if their\n" "stats were boosted this turn."), @@ -20587,7 +20581,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_SUPERCELL_SLAM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SuprcellSlam", "Supercell Slam"), + .name = COMPOUND_STRING("Supercell Slam"), .description = COMPOUND_STRING( "An electrified slam. If it\n" "misses, the user is hurt."), @@ -20605,7 +20599,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_PSYCHIC_NOISE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PsychicNoise", "Psychic Noise"), + .name = COMPOUND_STRING("Psychic Noise"), .description = COMPOUND_STRING( "Unpleasant sound waves that\n" "damage and prevent healing."), @@ -20650,7 +20644,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = [MOVE_MALIGNANT_CHAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MalignntChan", "Malignant Chain"), + .name = COMPOUND_STRING("Malignant Chain"), .description = COMPOUND_STRING( "A corrosive chain attack\n" "that may badly poison."), diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 61da487389..939f1d4635 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -60,12 +60,6 @@ #define FLIP 0 #define NO_FLIP 1 -#if POKEMON_NAME_LENGTH >= 12 -#define HANDLE_EXPANDED_SPECIES_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_SPECIES_NAME(_name, ...) _(_name) -#endif - const struct SpeciesInfo gSpeciesInfo[] = { [SPECIES_NONE] = diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 3bde875fd7..b1d1dfbbbc 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -3913,7 +3913,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), .abilities = { ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY, ABILITY_RATTLED }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Dudunsprce", "Dudunsparce"), + .speciesName = _("Dudunsparce"), .cryId = CRY_DUDUNSPARCE, .natDexNum = NATIONAL_DEX_DUDUNSPARCE, .categoryName = _("Land Snake"), @@ -3966,7 +3966,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), .abilities = { ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY, ABILITY_RATTLED }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Dudunsprce", "Dudunsparce"), + .speciesName = _("Dudunsparce"), .cryId = CRY_DUDUNSPARCE, .natDexNum = NATIONAL_DEX_DUDUNSPARCE, .categoryName = _("Land Snake"), diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index 2495cfa961..d7927e028e 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -3989,7 +3989,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), .abilities = { ABILITY_SWIFT_SWIM, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Bsculegion", "Basculegion"), + .speciesName = _("Basculegion"), .cryId = CRY_BASCULEGION, .natDexNum = NATIONAL_DEX_BASCULEGION, .categoryName = _("Big Fish"), @@ -4051,7 +4051,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), .abilities = { ABILITY_SWIFT_SWIM, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Bsculegion", "Basculegion"), + .speciesName = _("Basculegion"), .cryId = CRY_BASCULEGION, .natDexNum = NATIONAL_DEX_BASCULEGION, .categoryName = _("Big Fish"), diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index d9fdf67355..bae2833b9e 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -876,7 +876,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_GALE_WINGS }, .bodyColor = BODY_COLOR_RED, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Flechinder", "Fletchinder"), + .speciesName = _("Fletchinder"), .cryId = CRY_FLETCHINDER, .natDexNum = NATIONAL_DEX_FLETCHINDER, .categoryName = _("Ember"), diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index c16220ca62..0465def06b 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -1327,7 +1327,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_3), .abilities = { ABILITY_HYPER_CUTTER, ABILITY_IRON_FIST, ABILITY_ANGER_POINT }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Crabminabl", "Crabominable"), + .speciesName = _("Crabominable"), .cryId = CRY_CRABOMINABLE, .natDexNum = NATIONAL_DEX_CRABOMINABLE, .categoryName = _("Woolly Crab"), @@ -6778,7 +6778,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .abilities = { ABILITY_BEAST_BOOST, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Blacephaln", "Blacephalon"), + .speciesName = _("Blacephalon"), .cryId = CRY_BLACEPHALON, .natDexNum = NATIONAL_DEX_BLACEPHALON, .categoryName = _("Fireworks"), diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index 83a2c99bc8..ca1791caa0 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -938,7 +938,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_KEEN_EYE, ABILITY_UNNERVE, ABILITY_BIG_PECKS }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Corvisquir", "Corvisquire"), + .speciesName = _("Corvisquire"), .cryId = CRY_CORVISQUIRE, .natDexNum = NATIONAL_DEX_CORVISQUIRE, .categoryName = _("Raven"), @@ -1000,7 +1000,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_PRESSURE, ABILITY_UNNERVE, ABILITY_MIRROR_ARMOR }, .bodyColor = BODY_COLOR_PURPLE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Corviknigh", "Corviknight"), + .speciesName = _("Corviknight"), .cryId = CRY_CORVIKNIGHT, .natDexNum = NATIONAL_DEX_CORVIKNIGHT, .categoryName = _("Raven"), @@ -3117,7 +3117,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_PROPELLER_TAIL }, .bodyColor = BODY_COLOR_BROWN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Barraskewd", "Barraskewda"), + .speciesName = _("Barraskewda"), .cryId = CRY_BARRASKEWDA, .natDexNum = NATIONAL_DEX_BARRASKEWDA, .categoryName = _("Skewer"), @@ -3542,7 +3542,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), .abilities = { ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE, ABILITY_FLAME_BODY }, .bodyColor = BODY_COLOR_RED, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Centiskorc", "Centiskorch"), + .speciesName = _("Centiskorch"), .cryId = CRY_CENTISKORCH, .natDexNum = NATIONAL_DEX_CENTISKORCH, .categoryName = _("Radiator"), @@ -3911,7 +3911,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS), .abilities = { ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY }, .bodyColor = BODY_COLOR_PURPLE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Polteageis", "Polteageist"), + .speciesName = _("Polteageist"), .cryId = CRY_POLTEAGEIST, .natDexNum = NATIONAL_DEX_POLTEAGEIST, .categoryName = _("Black Tea"), @@ -3972,7 +3972,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS), .abilities = { ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY }, .bodyColor = BODY_COLOR_PURPLE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Polteageis", "Polteageist"), + .speciesName = _("Polteageist"), .cryId = CRY_POLTEAGEIST, .natDexNum = NATIONAL_DEX_POLTEAGEIST, .categoryName = _("Black Tea"), @@ -5007,7 +5007,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), .abilities = { ABILITY_POWER_SPOT, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Stonjourne", "Stonjourner"), + .speciesName = _("Stonjourner"), .cryId = CRY_STONJOURNER, .natDexNum = NATIONAL_DEX_STONJOURNER, .categoryName = _("Big Rock"), diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 66ae0b8dff..d17f807499 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -130,7 +130,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_GRASS), .abilities = { ABILITY_OVERGROW, ABILITY_NONE, ABILITY_PROTEAN }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Meowscarad", "Meowscarada"), + .speciesName = _("Meowscarada"), .cryId = CRY_MEOWSCARADA, .natDexNum = NATIONAL_DEX_MEOWSCARADA, .categoryName = _("Magician"), @@ -1476,7 +1476,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_GUTS }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"), + .speciesName = _("Squawkabilly"), .cryId = CRY_SQUAWKABILLY, .natDexNum = NATIONAL_DEX_SQUAWKABILLY, .categoryName = _("Parrot"), @@ -1530,7 +1530,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_GUTS }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"), + .speciesName = _("Squawkabilly"), .cryId = CRY_SQUAWKABILLY, .natDexNum = NATIONAL_DEX_SQUAWKABILLY, .categoryName = _("Parrot"), @@ -1584,7 +1584,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_SHEER_FORCE }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"), + .speciesName = _("Squawkabilly"), .cryId = CRY_SQUAWKABILLY, .natDexNum = NATIONAL_DEX_SQUAWKABILLY, .categoryName = _("Parrot"), @@ -1638,7 +1638,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_SHEER_FORCE }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"), + .speciesName = _("Squawkabilly"), .cryId = CRY_SQUAWKABILLY, .natDexNum = NATIONAL_DEX_SQUAWKABILLY, .categoryName = _("Parrot"), @@ -2179,7 +2179,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FLYING), .abilities = { ABILITY_WIND_POWER, ABILITY_VOLT_ABSORB, ABILITY_COMPETITIVE }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Kilowatrel", "Kilowattrel"), + .speciesName = _("Kilowattrel"), .cryId = CRY_KILOWATTREL, .natDexNum = NATIONAL_DEX_KILOWATTREL, .categoryName = _("Frigatebird"), @@ -2503,7 +2503,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS), .abilities = { ABILITY_WIND_RIDER, ABILITY_NONE, ABILITY_INFILTRATOR }, .bodyColor = BODY_COLOR_BROWN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Brmblghast", "Brambleghast"), + .speciesName = _("Brambleghast"), .cryId = CRY_BRAMBLEGHAST, .natDexNum = NATIONAL_DEX_BRAMBLEGHAST, .categoryName = _("Tumbleweed"), @@ -4464,7 +4464,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_PINK, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("ScreamTail", "Scream Tail"), + .speciesName = _("Scream Tail"), .cryId = CRY_SCREAM_TAIL, .natDexNum = NATIONAL_DEX_SCREAM_TAIL, .categoryName = _("Paradox"), @@ -4520,7 +4520,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("BruteBonet", "Brute Bonnet"), + .speciesName = _("Brute Bonnet"), .cryId = CRY_BRUTE_BONNET, .natDexNum = NATIONAL_DEX_BRUTE_BONNET, .categoryName = _("Paradox"), @@ -4578,7 +4578,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("FluttrMane", "Flutter Mane"), + .speciesName = _("Flutter Mane"), .cryId = CRY_FLUTTER_MANE, .natDexNum = NATIONAL_DEX_FLUTTER_MANE, .categoryName = _("Paradox"), @@ -4635,7 +4635,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("SlithrWing", "Slither Wing"), + .speciesName = _("Slither Wing"), .cryId = CRY_SLITHER_WING, .natDexNum = NATIONAL_DEX_SLITHER_WING, .categoryName = _("Paradox"), @@ -4690,7 +4690,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("SndyShocks", "Sandy Shocks"), + .speciesName = _("Sandy Shocks"), .cryId = CRY_SANDY_SHOCKS, .natDexNum = NATIONAL_DEX_SANDY_SHOCKS, .categoryName = _("Paradox"), @@ -4746,7 +4746,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronTreads", "Iron Treads"), + .speciesName = _("Iron Treads"), .cryId = CRY_IRON_TREADS, .natDexNum = NATIONAL_DEX_IRON_TREADS, .categoryName = _("Paradox"), @@ -4802,7 +4802,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_RED, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronBundle", "Iron Bundle"), + .speciesName = _("Iron Bundle"), .cryId = CRY_IRON_BUNDLE, .natDexNum = NATIONAL_DEX_IRON_BUNDLE, .categoryName = _("Paradox"), @@ -4914,7 +4914,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronJuguls", "Iron Jugulis"), + .speciesName = _("Iron Jugulis"), .cryId = CRY_IRON_JUGULIS, .natDexNum = NATIONAL_DEX_IRON_JUGULIS, .categoryName = _("Paradox"), @@ -5028,7 +5028,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronThorns", "Iron Thorns"), + .speciesName = _("Iron Thorns"), .cryId = CRY_IRON_THORNS, .natDexNum = NATIONAL_DEX_IRON_THORNS, .categoryName = _("Paradox"), @@ -5632,7 +5632,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("RoarngMoon", "Roaring Moon"), + .speciesName = _("Roaring Moon"), .cryId = CRY_ROARING_MOON, .natDexNum = NATIONAL_DEX_ROARING_MOON, .categoryName = _("Paradox"), @@ -5689,7 +5689,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronVliant", "Iron Valiant"), + .speciesName = _("Iron Valiant"), .cryId = CRY_IRON_VALIANT, .natDexNum = NATIONAL_DEX_IRON_VALIANT, .categoryName = _("Paradox"), @@ -5858,7 +5858,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("WalkngWake", "Walking Wake"), + .speciesName = _("Walking Wake"), .cryId = CRY_WALKING_WAKE, .natDexNum = NATIONAL_DEX_WALKING_WAKE, .categoryName = _("Paradox"), @@ -5913,7 +5913,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronLeaves", "Iron Leaves"), + .speciesName = _("Iron Leaves"), .cryId = CRY_IRON_LEAVES, .natDexNum = NATIONAL_DEX_IRON_LEAVES, .categoryName = _("Paradox"), @@ -5967,7 +5967,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS), .abilities = { ABILITY_HOSPITALITY, ABILITY_NONE, ABILITY_HEATPROOF }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Ptchageist", "Poltchageist"), + .speciesName = _("Poltchageist"), .cryId = CRY_POLTCHAGEIST, .natDexNum = NATIONAL_DEX_POLTCHAGEIST, .categoryName = _("Matcha"), @@ -6020,7 +6020,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS), .abilities = { ABILITY_HOSPITALITY, ABILITY_NONE, ABILITY_HEATPROOF }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Ptchageist", "Poltchageist"), + .speciesName = _("Poltchageist"), .cryId = CRY_POLTCHAGEIST, .natDexNum = NATIONAL_DEX_POLTCHAGEIST, .categoryName = _("Matcha"), @@ -6293,7 +6293,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_TOXIC_CHAIN, ABILITY_NONE, ABILITY_TECHNICIAN }, .bodyColor = BODY_COLOR_BLACK, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Fezndipiti", "Fezandipiti"), + .speciesName = _("Fezandipiti"), .cryId = CRY_FEZANDIPITI, .natDexNum = NATIONAL_DEX_FEZANDIPITI, .categoryName = _("Retainer"), @@ -6418,7 +6418,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BROWN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("GouginFire", "Gouging Fire"), + .speciesName = _("Gouging Fire"), .cryId = CRY_GOUGING_FIRE, .natDexNum = NATIONAL_DEX_GOUGING_FIRE, .categoryName = _("Paradox"), @@ -6474,7 +6474,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("RagingBolt", "Raging Bolt"), + .speciesName = _("Raging Bolt"), .cryId = CRY_RAGING_BOLT, .natDexNum = NATIONAL_DEX_RAGING_BOLT, .categoryName = _("Paradox"), @@ -6530,7 +6530,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronBouldr", "Iron Boulder"), + .speciesName = _("Iron Boulder"), .cryId = CRY_IRON_BOULDER, .natDexNum = NATIONAL_DEX_IRON_BOULDER, .categoryName = _("Paradox"), diff --git a/src/data/types_info.h b/src/data/types_info.h index df74199bdd..d14012ed5c 100644 --- a/src/data/types_info.h +++ b/src/data/types_info.h @@ -40,12 +40,6 @@ const uq4_12_t gTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] #undef ______ #undef X -#if B_EXPANDED_TYPE_NAMES == TRUE -#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(_name) -#endif - // .generic is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT. // In this array there's commented-out data such as references to type-resist berries that would otherwise would go unused. // However, we figured this information would be useful for users that want to add their own types as a reminder of @@ -84,7 +78,7 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = }, [TYPE_FIGHTING] = { - .name = HANDLE_EXPANDED_TYPE_NAME("Fight", "Fighting"), + .name = _("Fighting"), .generic = _("a FIGHTING move"), .palette = 13, .zMove = MOVE_ALL_OUT_PUMMELING, @@ -325,7 +319,7 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = }, [TYPE_ELECTRIC] = { - .name = HANDLE_EXPANDED_TYPE_NAME("Electr", "Electric"), + .name = _("Electric"), .generic = _("an ELECTRIC move"), .palette = 13, .zMove = MOVE_GIGAVOLT_HAVOC, @@ -346,7 +340,7 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = }, [TYPE_PSYCHIC] = { - .name = HANDLE_EXPANDED_TYPE_NAME("Psychc", "Psychic"), + .name = _("Psychic"), .generic = _("a PSYCHIC move"), .palette = 14, .zMove = MOVE_SHATTERED_PSYCHE, @@ -451,7 +445,7 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = }, [TYPE_STELLAR] = { - .name = HANDLE_EXPANDED_TYPE_NAME("Stellr", "Stellar"), + .name = _("Stellar"), .generic = _("a STELLAR move"), .palette = 15, .zMove = MOVE_BREAKNECK_BLITZ, From a4dd8216587f73841ba9016678c1af88cb78b62c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 31 Aug 2024 00:32:43 -0400 Subject: [PATCH 139/544] Restore review changes from dependent PR --- map_data_rules.mk | 1 + tools/mapjson/mapjson.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/map_data_rules.mk b/map_data_rules.mk index 3ec86da7dd..ed7c08edea 100755 --- a/map_data_rules.mk +++ b/map_data_rules.mk @@ -22,6 +22,7 @@ $(DATA_ASM_BUILDDIR)/maps.o: $(DATA_ASM_SUBDIR)/maps.s $(LAYOUTS_DIR)/layouts.in $(DATA_ASM_BUILDDIR)/map_events.o: $(DATA_ASM_SUBDIR)/map_events.s $(MAPS_DIR)/events.inc $(MAP_EVENTS) $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ + $(MAPS_OUTDIR)/%/header.inc $(MAPS_OUTDIR)/%/events.inc $(MAPS_OUTDIR)/%/connections.inc: $(MAPS_DIR)/%/map.json $(MAPJSON) map emerald $< $(LAYOUTS_DIR)/layouts.json $(@D) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 1632b56be6..1a10c9dab8 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -374,7 +374,7 @@ void process_map(string map_filepath, string layouts_filepath, string output_dir string generate_groups_text(Json groups_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from /map_groups.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; for (auto &key : groups_data["group_order"].array_items()) { string group = json_to_string(key); @@ -415,7 +415,7 @@ string generate_connections_text(Json groups_data, string include_path) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from /map_groups.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; for (Json map_name : map_names) text << "\t.include \"" << include_path << "/" << json_to_string(map_name) << "/connections.inc\"\n"; @@ -432,7 +432,7 @@ string generate_headers_text(Json groups_data, string include_path) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from /map_groups.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n@\n\n"; for (string map_name : map_names) text << "\t.include \"" << include_path << "/" << map_name << "/header.inc\"\n"; @@ -465,7 +465,7 @@ string generate_map_constants_text(string groups_filepath, Json groups_data) { text << "#ifndef GUARD_CONSTANTS_MAP_GROUPS_H\n" << "#define GUARD_CONSTANTS_MAP_GROUPS_H\n\n"; - text << "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from /map_groups.json\n//\n\n"; + text << "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json\n//\n\n"; int group_num = 0; @@ -530,7 +530,7 @@ void process_groups(string groups_filepath, string output_asm, string output_c) string generate_layout_headers_text(Json layouts_data) { ostringstream text; - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from layouts.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n@\n\n"; for (auto &layout : layouts_data["layouts"].array_items()) { if (layout == Json::object()) continue; From 32f05269a3c96b45464ca0e1f5c4090c2f37d75f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 31 Aug 2024 00:53:23 -0400 Subject: [PATCH 140/544] Add missing terminal newlines --- audio_rules.mk | 2 +- sound/songs/midi/midi.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/audio_rules.mk b/audio_rules.mk index fccb9fc548..0acbccec07 100644 --- a/audio_rules.mk +++ b/audio_rules.mk @@ -42,4 +42,4 @@ $(foreach line,$(shell cat $(MID_CFG_PATH) | sed "s/ /__SPACE__/g"),$(call MID_E # Warn users building without a .cfg - build will fail at link time $(MID_ASM_DIR)/%.s: $(MID_SUBDIR)/%.mid - $(warning $< does not have an associated entry in midi.cfg! It cannot be built) \ No newline at end of file + $(warning $< does not have an associated entry in midi.cfg! It cannot be built) diff --git a/sound/songs/midi/midi.cfg b/sound/songs/midi/midi.cfg index 439778e9bd..5802904b41 100644 --- a/sound/songs/midi/midi.cfg +++ b/sound/songs/midi/midi.cfg @@ -417,4 +417,4 @@ se_unlock.mid: -E -R50 -G128 -V100 -P4 se_use_item.mid: -E -R50 -G127 -V100 -P5 se_vend.mid: -E -R50 -G128 -V110 -P4 se_warp_in.mid: -E -R50 -G127 -V090 -P4 -se_warp_out.mid: -E -R50 -G127 -V090 -P4 \ No newline at end of file +se_warp_out.mid: -E -R50 -G127 -V090 -P4 From 04197b49126604a310fae1d314709334f6d2460d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 31 Aug 2024 01:54:25 -0400 Subject: [PATCH 141/544] Fix swapped cycling road entrances --- data/event_scripts.s | 2 +- data/maps/Route110/map.json | 8 ++++---- .../map.json | 8 ++++---- .../scripts.inc | 16 ++++++++++++++++ .../map.json | 8 ++++---- .../scripts.inc | 16 ---------------- data/maps/map_groups.json | 4 ++-- src/field_specials.c | 2 +- 8 files changed, 32 insertions(+), 32 deletions(-) diff --git a/data/event_scripts.s b/data/event_scripts.s index e8fb9dcbd1..55720a6add 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -563,8 +563,8 @@ gStdScripts_End:: .include "data/maps/Route110_TrickHousePuzzle6/scripts.inc" .include "data/maps/Route110_TrickHousePuzzle7/scripts.inc" .include "data/maps/Route110_TrickHousePuzzle8/scripts.inc" - .include "data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc" .include "data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc" + .include "data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc" .include "data/maps/Route113_GlassWorkshop/scripts.inc" .include "data/maps/Route123_BerryMastersHouse/scripts.inc" .include "data/maps/Route119_WeatherInstitute_1F/scripts.inc" diff --git a/data/maps/Route110/map.json b/data/maps/Route110/map.json index 2b52164113..6e4982fa22 100644 --- a/data/maps/Route110/map.json +++ b/data/maps/Route110/map.json @@ -518,28 +518,28 @@ "x": 15, "y": 16, "elevation": 0, - "dest_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE", + "dest_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE", "dest_warp_id": "0" }, { "x": 18, "y": 16, "elevation": 0, - "dest_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE", + "dest_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE", "dest_warp_id": "2" }, { "x": 16, "y": 88, "elevation": 0, - "dest_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE", + "dest_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE", "dest_warp_id": "0" }, { "x": 19, "y": 88, "elevation": 0, - "dest_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE", + "dest_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE", "dest_warp_id": "2" } ], diff --git a/data/maps/Route110_SeasideCyclingRoadNorthEntrance/map.json b/data/maps/Route110_SeasideCyclingRoadNorthEntrance/map.json index 6f3c6c75c5..88cbf1cc88 100644 --- a/data/maps/Route110_SeasideCyclingRoadNorthEntrance/map.json +++ b/data/maps/Route110_SeasideCyclingRoadNorthEntrance/map.json @@ -34,28 +34,28 @@ "y": 5, "elevation": 0, "dest_map": "MAP_ROUTE110", - "dest_warp_id": "4" + "dest_warp_id": "2" }, { "x": 2, "y": 5, "elevation": 0, "dest_map": "MAP_ROUTE110", - "dest_warp_id": "4" + "dest_warp_id": "2" }, { "x": 12, "y": 5, "elevation": 0, "dest_map": "MAP_ROUTE110", - "dest_warp_id": "5" + "dest_warp_id": "3" }, { "x": 13, "y": 5, "elevation": 0, "dest_map": "MAP_ROUTE110", - "dest_warp_id": "5" + "dest_warp_id": "3" } ], "coord_events": [ diff --git a/data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc b/data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc index 5eb1f3dea2..fb1cdc5c71 100644 --- a/data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc +++ b/data/maps/Route110_SeasideCyclingRoadNorthEntrance/scripts.inc @@ -1,6 +1,16 @@ Route110_SeasideCyclingRoadNorthEntrance_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route110_SeasideCyclingRoadNorthEntrance_OnTransition .byte 0 +Route110_SeasideCyclingRoadNorthEntrance_OnTransition: + call_if_eq VAR_CYCLING_CHALLENGE_STATE, 3, Route110_SeasideCyclingRoadNorthEntrance_EventScript_RestartChallenge + call_if_eq VAR_CYCLING_CHALLENGE_STATE, 2, Route110_SeasideCyclingRoadNorthEntrance_EventScript_RestartChallenge + end + +Route110_SeasideCyclingRoadNorthEntrance_EventScript_RestartChallenge:: + setvar VAR_CYCLING_CHALLENGE_STATE, 1 + return + Route110_SeasideCyclingRoadNorthEntrance_EventScript_Clerk:: lock faceplayer @@ -11,12 +21,17 @@ Route110_SeasideCyclingRoadNorthEntrance_EventScript_Clerk:: Route110_SeasideCyclingRoadNorthEntrance_EventScript_BikeCheck:: lockall specialvar VAR_RESULT, GetPlayerAvatarBike + call_if_eq VAR_RESULT, 2, Route110_SeasideCyclingRoadNorthEntrance_EventScript_OnMachBike goto_if_eq VAR_RESULT, 0, Route110_SeasideCyclingRoadNorthEntrance_EventScript_NoBike setflag FLAG_SYS_CYCLING_ROAD setvar VAR_TEMP_1, 1 releaseall end +Route110_SeasideCyclingRoadNorthEntrance_EventScript_OnMachBike:: + setvar VAR_CYCLING_CHALLENGE_STATE, 1 + return + Route110_SeasideCyclingRoadNorthEntrance_EventScript_NoBike:: msgbox Route110_SeasideCyclingRoadNorthEntrance_Text_TooDangerousToWalk, MSGBOX_DEFAULT closemessage @@ -31,6 +46,7 @@ Route110_SeasideCyclingRoadNorthEntrance_Movement_PushPlayerBackFromCounter: Route110_SeasideCyclingRoadNorthEntrance_EventScript_ClearCyclingRoad:: lockall + setvar VAR_CYCLING_CHALLENGE_STATE, 0 clearflag FLAG_SYS_CYCLING_ROAD setvar VAR_TEMP_1, 0 releaseall diff --git a/data/maps/Route110_SeasideCyclingRoadSouthEntrance/map.json b/data/maps/Route110_SeasideCyclingRoadSouthEntrance/map.json index 59e3e5be65..943984075d 100644 --- a/data/maps/Route110_SeasideCyclingRoadSouthEntrance/map.json +++ b/data/maps/Route110_SeasideCyclingRoadSouthEntrance/map.json @@ -34,28 +34,28 @@ "y": 5, "elevation": 0, "dest_map": "MAP_ROUTE110", - "dest_warp_id": "2" + "dest_warp_id": "4" }, { "x": 2, "y": 5, "elevation": 0, "dest_map": "MAP_ROUTE110", - "dest_warp_id": "2" + "dest_warp_id": "4" }, { "x": 12, "y": 5, "elevation": 0, "dest_map": "MAP_ROUTE110", - "dest_warp_id": "3" + "dest_warp_id": "5" }, { "x": 13, "y": 5, "elevation": 0, "dest_map": "MAP_ROUTE110", - "dest_warp_id": "3" + "dest_warp_id": "5" } ], "coord_events": [ diff --git a/data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc b/data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc index df53f55ccf..5c4dcfa219 100644 --- a/data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc +++ b/data/maps/Route110_SeasideCyclingRoadSouthEntrance/scripts.inc @@ -1,16 +1,6 @@ Route110_SeasideCyclingRoadSouthEntrance_MapScripts:: - map_script MAP_SCRIPT_ON_TRANSITION, Route110_SeasideCyclingRoadSouthEntrance_OnTransition .byte 0 -Route110_SeasideCyclingRoadSouthEntrance_OnTransition: - call_if_eq VAR_CYCLING_CHALLENGE_STATE, 3, Route110_SeasideCyclingRoadSouthEntrance_EventScript_RestartChallenge - call_if_eq VAR_CYCLING_CHALLENGE_STATE, 2, Route110_SeasideCyclingRoadSouthEntrance_EventScript_RestartChallenge - end - -Route110_SeasideCyclingRoadSouthEntrance_EventScript_RestartChallenge:: - setvar VAR_CYCLING_CHALLENGE_STATE, 1 - return - Route110_SeasideCyclingRoadSouthEntrance_EventScript_Clerk:: lock faceplayer @@ -21,17 +11,12 @@ Route110_SeasideCyclingRoadSouthEntrance_EventScript_Clerk:: Route110_SeasideCyclingRoadSouthEntrance_EventScript_BikeCheck:: lockall specialvar VAR_RESULT, GetPlayerAvatarBike - call_if_eq VAR_RESULT, 2, Route110_SeasideCyclingRoadSouthEntrance_EventScript_OnMachBike goto_if_eq VAR_RESULT, 0, Route110_SeasideCyclingRoadSouthEntrance_EventScript_NoBike setflag FLAG_SYS_CYCLING_ROAD setvar VAR_TEMP_1, 1 releaseall end -Route110_SeasideCyclingRoadSouthEntrance_EventScript_OnMachBike:: - setvar VAR_CYCLING_CHALLENGE_STATE, 1 - return - Route110_SeasideCyclingRoadSouthEntrance_EventScript_NoBike:: msgbox Route110_SeasideCyclingRoadSouthEntrance_Text_TooDangerousToWalk, MSGBOX_DEFAULT closemessage @@ -46,7 +31,6 @@ Route110_SeasideCyclingRoadSouthEntrance_Movement_PushPlayerBackFromCounter: Route110_SeasideCyclingRoadSouthEntrance_EventScript_ClearCyclingRoad:: lockall - setvar VAR_CYCLING_CHALLENGE_STATE, 0 clearflag FLAG_SYS_CYCLING_ROAD setvar VAR_TEMP_1, 0 releaseall diff --git a/data/maps/map_groups.json b/data/maps/map_groups.json index ebef431b30..8a90679c8d 100644 --- a/data/maps/map_groups.json +++ b/data/maps/map_groups.json @@ -604,8 +604,8 @@ "Route110_TrickHousePuzzle6", "Route110_TrickHousePuzzle7", "Route110_TrickHousePuzzle8", - "Route110_SeasideCyclingRoadNorthEntrance", - "Route110_SeasideCyclingRoadSouthEntrance" + "Route110_SeasideCyclingRoadSouthEntrance", + "Route110_SeasideCyclingRoadNorthEntrance" ], "gMapGroup_IndoorRoute113": [ "Route113_GlassWorkshop" diff --git a/src/field_specials.c b/src/field_specials.c index f1e5d7bb2d..f8d493493c 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -263,7 +263,7 @@ u16 GetRecordedCyclingRoadResults(void) void UpdateCyclingRoadState(void) { - if (gLastUsedWarp.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE) && gLastUsedWarp.mapGroup == MAP_GROUP(ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE)) + if (gLastUsedWarp.mapNum == MAP_NUM(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE) && gLastUsedWarp.mapGroup == MAP_GROUP(ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE)) return; if (VarGet(VAR_CYCLING_CHALLENGE_STATE) == 2 || VarGet(VAR_CYCLING_CHALLENGE_STATE) == 3) From bbcb1cd5a2175d72a7608dc67c1d2be24f752e7d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 31 Aug 2024 23:50:37 +0200 Subject: [PATCH 142/544] Adds basic trainer and smart trainer flags (#5298) --- include/constants/battle_ai.h | 4 + src/data/trainers.h | 358 +++++++++++++++++----------------- src/data/trainers.party | 358 +++++++++++++++++----------------- 3 files changed, 362 insertions(+), 358 deletions(-) diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 38d058a8cb..75802bad49 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -50,6 +50,10 @@ #define AI_FLAG_COUNT 20 +// The following options are enough to have a basic/smart trainer. Any other addtion could make the trainer worse/better depending on the flag +#define AI_FLAG_BASIC_TRAINER (AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY) +#define AI_FLAG_SMART_TRAINER (AI_FLAG_BASIC_TRAINER | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES) + // 'other' ai logic flags #define AI_FLAG_DYNAMIC_FUNC (1 << 28) // Create custom AI functions for specific battles via "setdynamicaifunc" cmd #define AI_FLAG_ROAMING (1 << 29) diff --git a/src/data/trainers.h b/src/data/trainers.h index 0ef947a14b..c1907cfee5 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -40,7 +40,7 @@ #line 90 .doubleBattle = FALSE, #line 91 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -430,7 +430,7 @@ F_TRAINER_FEMALE | #line 245 .doubleBattle = FALSE, #line 246 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -1113,7 +1113,7 @@ F_TRAINER_FEMALE | #line 515 .doubleBattle = FALSE, #line 516 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -1158,7 +1158,7 @@ F_TRAINER_FEMALE | #line 533 .doubleBattle = FALSE, #line 534 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -1235,7 +1235,7 @@ F_TRAINER_FEMALE | #line 563 .doubleBattle = FALSE, #line 564 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -1280,7 +1280,7 @@ F_TRAINER_FEMALE | #line 580 .doubleBattle = FALSE, #line 581 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -1325,7 +1325,7 @@ F_TRAINER_FEMALE | #line 598 .doubleBattle = FALSE, #line 599 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -1516,7 +1516,7 @@ F_TRAINER_FEMALE | #line 671 .doubleBattle = FALSE, #line 672 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -2990,7 +2990,7 @@ F_TRAINER_FEMALE | #line 1268 .doubleBattle = FALSE, #line 1269 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -3030,7 +3030,7 @@ F_TRAINER_FEMALE | #line 1285 .doubleBattle = FALSE, #line 1286 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -3070,7 +3070,7 @@ F_TRAINER_FEMALE | #line 1302 .doubleBattle = FALSE, #line 1303 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -3112,7 +3112,7 @@ F_TRAINER_FEMALE | #line 1319 .doubleBattle = FALSE, #line 1320 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -3151,7 +3151,7 @@ F_TRAINER_FEMALE | #line 1335 .doubleBattle = FALSE, #line 1336 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -3264,7 +3264,7 @@ F_TRAINER_FEMALE | #line 1385 .doubleBattle = FALSE, #line 1386 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -3320,7 +3320,7 @@ F_TRAINER_FEMALE | #line 1407 .doubleBattle = FALSE, #line 1408 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -3365,7 +3365,7 @@ F_TRAINER_FEMALE | #line 1425 .doubleBattle = FALSE, #line 1426 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -3421,7 +3421,7 @@ F_TRAINER_FEMALE | #line 1447 .doubleBattle = FALSE, #line 1448 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -3466,7 +3466,7 @@ F_TRAINER_FEMALE | #line 1465 .doubleBattle = FALSE, #line 1466 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -3511,7 +3511,7 @@ F_TRAINER_FEMALE | #line 1483 .doubleBattle = FALSE, #line 1484 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -3567,7 +3567,7 @@ F_TRAINER_FEMALE | #line 1505 .doubleBattle = FALSE, #line 1506 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -3634,7 +3634,7 @@ F_TRAINER_FEMALE | #line 1531 .doubleBattle = FALSE, #line 1532 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -3690,7 +3690,7 @@ F_TRAINER_FEMALE | #line 1553 .doubleBattle = FALSE, #line 1554 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -3746,7 +3746,7 @@ F_TRAINER_FEMALE | #line 1575 .doubleBattle = FALSE, #line 1576 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -3802,7 +3802,7 @@ F_TRAINER_FEMALE | #line 1597 .doubleBattle = FALSE, #line 1598 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -3858,7 +3858,7 @@ F_TRAINER_FEMALE | #line 1619 .doubleBattle = FALSE, #line 1620 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -3914,7 +3914,7 @@ F_TRAINER_FEMALE | #line 1641 .doubleBattle = FALSE, #line 1642 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -3961,7 +3961,7 @@ F_TRAINER_FEMALE | #line 1659 .doubleBattle = FALSE, #line 1660 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -4002,7 +4002,7 @@ F_TRAINER_FEMALE | #line 1675 .doubleBattle = FALSE, #line 1676 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -4211,7 +4211,7 @@ F_TRAINER_FEMALE | #line 1760 .doubleBattle = FALSE, #line 1761 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -4269,7 +4269,7 @@ F_TRAINER_FEMALE | #line 1782 .doubleBattle = FALSE, #line 1783 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -4305,7 +4305,7 @@ F_TRAINER_FEMALE | #line 1796 .doubleBattle = FALSE, #line 1797 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -4341,7 +4341,7 @@ F_TRAINER_FEMALE | #line 1810 .doubleBattle = FALSE, #line 1811 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -4377,7 +4377,7 @@ F_TRAINER_FEMALE | #line 1824 .doubleBattle = FALSE, #line 1825 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -4435,7 +4435,7 @@ F_TRAINER_FEMALE | #line 1846 .doubleBattle = FALSE, #line 1847 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -4482,7 +4482,7 @@ F_TRAINER_FEMALE | #line 1864 .doubleBattle = FALSE, #line 1865 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -4540,7 +4540,7 @@ F_TRAINER_FEMALE | #line 1886 .doubleBattle = FALSE, #line 1887 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -4598,7 +4598,7 @@ F_TRAINER_FEMALE | #line 1908 .doubleBattle = FALSE, #line 1909 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -4656,7 +4656,7 @@ F_TRAINER_FEMALE | #line 1930 .doubleBattle = FALSE, #line 1931 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -4714,7 +4714,7 @@ F_TRAINER_FEMALE | #line 1952 .doubleBattle = FALSE, #line 1953 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -11394,7 +11394,7 @@ F_TRAINER_FEMALE | #line 4594 .doubleBattle = FALSE, #line 4595 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_SETUP_FIRST_TURN, #line 4596 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PURPLE, @@ -11514,7 +11514,7 @@ F_TRAINER_FEMALE | #line 4645 .doubleBattle = FALSE, #line 4646 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, #line 4647 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_GREEN, @@ -11634,7 +11634,7 @@ F_TRAINER_FEMALE | #line 4696 .doubleBattle = FALSE, #line 4697 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, #line 4698 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PINK, @@ -11752,7 +11752,7 @@ F_TRAINER_FEMALE | #line 4747 .doubleBattle = FALSE, #line 4748 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, #line 4749 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_BLUE, @@ -11872,7 +11872,7 @@ F_TRAINER_FEMALE | #line 4798 .doubleBattle = FALSE, #line 4799 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -11951,7 +11951,7 @@ F_TRAINER_FEMALE | #line 4832 .doubleBattle = FALSE, #line 4833 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -12030,7 +12030,7 @@ F_TRAINER_FEMALE | #line 4866 .doubleBattle = FALSE, #line 4867 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -12129,7 +12129,7 @@ F_TRAINER_FEMALE | #line 4908 .doubleBattle = FALSE, #line 4909 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -12226,7 +12226,7 @@ F_TRAINER_FEMALE | #line 4950 .doubleBattle = FALSE, #line 4951 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -12325,7 +12325,7 @@ F_TRAINER_FEMALE | #line 4992 .doubleBattle = FALSE, #line 4993 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -12440,7 +12440,7 @@ F_TRAINER_FEMALE | #line 5042 .doubleBattle = TRUE, #line 5043 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -12539,7 +12539,7 @@ F_TRAINER_FEMALE | #line 5084 .doubleBattle = FALSE, #line 5085 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -14286,7 +14286,7 @@ F_TRAINER_FEMALE | #line 5766 .doubleBattle = FALSE, #line 5767 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -14318,7 +14318,7 @@ F_TRAINER_FEMALE | #line 5779 .doubleBattle = FALSE, #line 5780 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -14357,7 +14357,7 @@ F_TRAINER_FEMALE | #line 5796 .doubleBattle = FALSE, #line 5797 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -14396,7 +14396,7 @@ F_TRAINER_FEMALE | #line 5813 .doubleBattle = FALSE, #line 5814 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -14435,7 +14435,7 @@ F_TRAINER_FEMALE | #line 5830 .doubleBattle = FALSE, #line 5831 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -14476,7 +14476,7 @@ F_TRAINER_FEMALE | #line 5847 .doubleBattle = FALSE, #line 5848 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -14517,7 +14517,7 @@ F_TRAINER_FEMALE | #line 5864 .doubleBattle = FALSE, #line 5865 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -14562,7 +14562,7 @@ F_TRAINER_FEMALE | #line 5881 .doubleBattle = FALSE, #line 5882 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -14607,7 +14607,7 @@ F_TRAINER_FEMALE | #line 5898 .doubleBattle = FALSE, #line 5899 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -14652,7 +14652,7 @@ F_TRAINER_FEMALE | #line 5915 .doubleBattle = FALSE, #line 5916 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -14697,7 +14697,7 @@ F_TRAINER_FEMALE | #line 5932 .doubleBattle = FALSE, #line 5933 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -14985,7 +14985,7 @@ F_TRAINER_FEMALE | #line 6049 .doubleBattle = FALSE, #line 6050 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -15046,7 +15046,7 @@ F_TRAINER_FEMALE | #line 6075 .doubleBattle = FALSE, #line 6076 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -15481,7 +15481,7 @@ F_TRAINER_FEMALE | #line 6250 .doubleBattle = FALSE, #line 6251 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, #line 6252 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_YELLOW, @@ -22954,7 +22954,7 @@ F_TRAINER_FEMALE | #line 9191 .doubleBattle = FALSE, #line 9192 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -22986,7 +22986,7 @@ F_TRAINER_FEMALE | #line 9204 .doubleBattle = FALSE, #line 9205 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -23156,7 +23156,7 @@ F_TRAINER_FEMALE | #line 9273 .doubleBattle = FALSE, #line 9274 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -23629,7 +23629,7 @@ F_TRAINER_FEMALE | #line 9461 .doubleBattle = FALSE, #line 9462 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -23740,7 +23740,7 @@ F_TRAINER_FEMALE | #line 9510 .doubleBattle = FALSE, #line 9511 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -23772,7 +23772,7 @@ F_TRAINER_FEMALE | #line 9523 .doubleBattle = FALSE, #line 9524 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -23826,7 +23826,7 @@ F_TRAINER_FEMALE | #line 9544 .doubleBattle = FALSE, #line 9545 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -23912,7 +23912,7 @@ F_TRAINER_FEMALE | #line 9578 .doubleBattle = FALSE, #line 9579 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -23966,7 +23966,7 @@ F_TRAINER_FEMALE | #line 9599 .doubleBattle = FALSE, #line 9600 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24020,7 +24020,7 @@ F_TRAINER_FEMALE | #line 9620 .doubleBattle = FALSE, #line 9621 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -24052,7 +24052,7 @@ F_TRAINER_FEMALE | #line 9633 .doubleBattle = FALSE, #line 9634 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24106,7 +24106,7 @@ F_TRAINER_FEMALE | #line 9654 .doubleBattle = FALSE, #line 9655 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24162,7 +24162,7 @@ F_TRAINER_FEMALE | #line 9675 .doubleBattle = FALSE, #line 9676 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -24196,7 +24196,7 @@ F_TRAINER_FEMALE | #line 9688 .doubleBattle = FALSE, #line 9689 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24252,7 +24252,7 @@ F_TRAINER_FEMALE | #line 9709 .doubleBattle = FALSE, #line 9710 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24308,7 +24308,7 @@ F_TRAINER_FEMALE | #line 9730 .doubleBattle = FALSE, #line 9731 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -24342,7 +24342,7 @@ F_TRAINER_FEMALE | #line 9743 .doubleBattle = FALSE, #line 9744 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24398,7 +24398,7 @@ F_TRAINER_FEMALE | #line 9764 .doubleBattle = FALSE, #line 9765 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24454,7 +24454,7 @@ F_TRAINER_FEMALE | #line 9785 .doubleBattle = FALSE, #line 9786 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -24488,7 +24488,7 @@ F_TRAINER_FEMALE | #line 9798 .doubleBattle = FALSE, #line 9799 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24544,7 +24544,7 @@ F_TRAINER_FEMALE | #line 9819 .doubleBattle = FALSE, #line 9820 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -24717,7 +24717,7 @@ F_TRAINER_FEMALE | #line 9886 .doubleBattle = FALSE, #line 9887 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -25215,7 +25215,7 @@ F_TRAINER_FEMALE | #line 10077 .doubleBattle = FALSE, #line 10078 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -25648,7 +25648,7 @@ F_TRAINER_FEMALE | #line 10240 .doubleBattle = FALSE, #line 10241 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -25682,7 +25682,7 @@ F_TRAINER_FEMALE | #line 10254 .doubleBattle = FALSE, #line 10255 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -25738,7 +25738,7 @@ F_TRAINER_FEMALE | #line 10276 .doubleBattle = FALSE, #line 10277 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -25806,7 +25806,7 @@ F_TRAINER_FEMALE | #line 10304 .doubleBattle = FALSE, #line 10305 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -25874,7 +25874,7 @@ F_TRAINER_FEMALE | #line 10332 .doubleBattle = FALSE, #line 10333 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -26026,7 +26026,7 @@ F_TRAINER_FEMALE | #line 10390 .doubleBattle = FALSE, #line 10391 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -26120,7 +26120,7 @@ F_TRAINER_FEMALE | #line 10426 .doubleBattle = FALSE, #line 10427 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -26214,7 +26214,7 @@ F_TRAINER_FEMALE | #line 10462 .doubleBattle = FALSE, #line 10463 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -26676,7 +26676,7 @@ F_TRAINER_FEMALE | #line 10643 .doubleBattle = FALSE, #line 10644 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -27283,7 +27283,7 @@ F_TRAINER_FEMALE | #line 10885 .doubleBattle = FALSE, #line 10886 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -27405,7 +27405,7 @@ F_TRAINER_FEMALE | #line 10932 .doubleBattle = FALSE, #line 10933 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -27515,7 +27515,7 @@ F_TRAINER_FEMALE | #line 10975 .doubleBattle = FALSE, #line 10976 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -27605,7 +27605,7 @@ F_TRAINER_FEMALE | #line 11010 .doubleBattle = FALSE, #line 11011 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -27661,7 +27661,7 @@ F_TRAINER_FEMALE | #line 11032 .doubleBattle = FALSE, #line 11033 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -27841,7 +27841,7 @@ F_TRAINER_FEMALE | #line 11100 .doubleBattle = FALSE, #line 11101 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -29814,7 +29814,7 @@ F_TRAINER_FEMALE | #line 11869 .doubleBattle = FALSE, #line 11870 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -30223,7 +30223,7 @@ F_TRAINER_FEMALE | #line 12041 .doubleBattle = FALSE, #line 12042 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -30257,7 +30257,7 @@ F_TRAINER_FEMALE | #line 12055 .doubleBattle = FALSE, #line 12056 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -30370,7 +30370,7 @@ F_TRAINER_FEMALE | #line 12105 .doubleBattle = FALSE, #line 12106 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -30483,7 +30483,7 @@ F_TRAINER_FEMALE | #line 12155 .doubleBattle = FALSE, #line 12156 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -30596,7 +30596,7 @@ F_TRAINER_FEMALE | #line 12205 .doubleBattle = FALSE, #line 12206 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -30707,7 +30707,7 @@ F_TRAINER_FEMALE | #line 12254 .doubleBattle = FALSE, #line 12255 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -30772,7 +30772,7 @@ F_TRAINER_FEMALE | #line 12279 .doubleBattle = FALSE, #line 12280 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -30837,7 +30837,7 @@ F_TRAINER_FEMALE | #line 12304 .doubleBattle = FALSE, #line 12305 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -30904,7 +30904,7 @@ F_TRAINER_FEMALE | #line 12329 .doubleBattle = FALSE, #line 12330 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -30971,7 +30971,7 @@ F_TRAINER_FEMALE | #line 12354 .doubleBattle = FALSE, #line 12355 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -31038,7 +31038,7 @@ F_TRAINER_FEMALE | #line 12379 .doubleBattle = FALSE, #line 12380 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -31258,7 +31258,7 @@ F_TRAINER_FEMALE | #line 12464 .doubleBattle = FALSE, #line 12465 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -31303,7 +31303,7 @@ F_TRAINER_FEMALE | #line 12482 .doubleBattle = FALSE, #line 12483 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -31766,7 +31766,7 @@ F_TRAINER_FEMALE | #line 12672 .doubleBattle = TRUE, #line 12673 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -31823,7 +31823,7 @@ F_TRAINER_FEMALE | #line 12697 .doubleBattle = TRUE, #line 12698 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -31880,7 +31880,7 @@ F_TRAINER_FEMALE | #line 12722 .doubleBattle = TRUE, #line 12723 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -31994,7 +31994,7 @@ F_TRAINER_FEMALE | #line 12772 .doubleBattle = TRUE, #line 12773 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -33888,7 +33888,7 @@ F_TRAINER_FEMALE | #line 13518 .doubleBattle = FALSE, #line 13519 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -33931,7 +33931,7 @@ F_TRAINER_FEMALE | #line 13535 .doubleBattle = FALSE, #line 13536 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -34227,7 +34227,7 @@ F_TRAINER_FEMALE | #line 13651 .doubleBattle = FALSE, #line 13652 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -34958,7 +34958,7 @@ F_TRAINER_FEMALE | #line 13933 .doubleBattle = FALSE, #line 13934 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -35112,7 +35112,7 @@ F_TRAINER_FEMALE | #line 13994 .doubleBattle = FALSE, #line 13995 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -35418,7 +35418,7 @@ F_TRAINER_FEMALE | #line 14111 .doubleBattle = FALSE, #line 14112 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -35463,7 +35463,7 @@ F_TRAINER_FEMALE | #line 14128 .doubleBattle = FALSE, #line 14129 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -35508,7 +35508,7 @@ F_TRAINER_FEMALE | #line 14145 .doubleBattle = FALSE, #line 14146 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -35555,7 +35555,7 @@ F_TRAINER_FEMALE | #line 14163 .doubleBattle = TRUE, #line 14164 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -35656,7 +35656,7 @@ F_TRAINER_FEMALE | #line 14205 .doubleBattle = TRUE, #line 14206 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -35775,7 +35775,7 @@ F_TRAINER_FEMALE | #line 14255 .doubleBattle = TRUE, #line 14256 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -35894,7 +35894,7 @@ F_TRAINER_FEMALE | #line 14305 .doubleBattle = TRUE, #line 14306 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -36029,7 +36029,7 @@ F_TRAINER_FEMALE | #line 14363 .doubleBattle = TRUE, #line 14364 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -36128,7 +36128,7 @@ F_TRAINER_FEMALE | #line 14405 .doubleBattle = TRUE, #line 14406 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -36227,7 +36227,7 @@ F_TRAINER_FEMALE | #line 14447 .doubleBattle = TRUE, #line 14448 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -36344,7 +36344,7 @@ F_TRAINER_FEMALE | #line 14497 .doubleBattle = TRUE, #line 14498 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -36479,7 +36479,7 @@ F_TRAINER_FEMALE | #line 14555 .doubleBattle = TRUE, #line 14556 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -36578,7 +36578,7 @@ F_TRAINER_FEMALE | #line 14597 .doubleBattle = TRUE, #line 14598 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -36695,7 +36695,7 @@ F_TRAINER_FEMALE | #line 14647 .doubleBattle = TRUE, #line 14648 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -36812,7 +36812,7 @@ F_TRAINER_FEMALE | #line 14697 .doubleBattle = TRUE, #line 14698 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -36949,7 +36949,7 @@ F_TRAINER_FEMALE | #line 14755 .doubleBattle = TRUE, #line 14756 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -37052,7 +37052,7 @@ F_TRAINER_FEMALE | #line 14797 .doubleBattle = TRUE, #line 14798 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -37173,7 +37173,7 @@ F_TRAINER_FEMALE | #line 14847 .doubleBattle = TRUE, #line 14848 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -37312,7 +37312,7 @@ F_TRAINER_FEMALE | #line 14905 .doubleBattle = TRUE, #line 14906 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -37449,7 +37449,7 @@ F_TRAINER_FEMALE | #line 14963 .doubleBattle = TRUE, #line 14964 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { @@ -37548,7 +37548,7 @@ F_TRAINER_FEMALE | #line 15005 .doubleBattle = TRUE, #line 15006 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -37665,7 +37665,7 @@ F_TRAINER_FEMALE | #line 15055 .doubleBattle = TRUE, #line 15056 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -37782,7 +37782,7 @@ F_TRAINER_FEMALE | #line 15105 .doubleBattle = TRUE, #line 15106 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -37919,7 +37919,7 @@ F_TRAINER_FEMALE | #line 15163 .doubleBattle = TRUE, #line 15164 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -38038,7 +38038,7 @@ F_TRAINER_FEMALE | #line 15213 .doubleBattle = TRUE, #line 15214 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -38175,7 +38175,7 @@ F_TRAINER_FEMALE | #line 15271 .doubleBattle = TRUE, #line 15272 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -38312,7 +38312,7 @@ F_TRAINER_FEMALE | #line 15329 .doubleBattle = TRUE, #line 15330 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -38447,7 +38447,7 @@ F_TRAINER_FEMALE | #line 15387 .doubleBattle = TRUE, #line 15388 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -38566,7 +38566,7 @@ F_TRAINER_FEMALE | #line 15437 .doubleBattle = TRUE, #line 15438 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -38703,7 +38703,7 @@ F_TRAINER_FEMALE | #line 15495 .doubleBattle = TRUE, #line 15496 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -38840,7 +38840,7 @@ F_TRAINER_FEMALE | #line 15553 .doubleBattle = TRUE, #line 15554 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -38977,7 +38977,7 @@ F_TRAINER_FEMALE | #line 15611 .doubleBattle = TRUE, #line 15612 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -39094,7 +39094,7 @@ F_TRAINER_FEMALE | #line 15661 .doubleBattle = TRUE, #line 15662 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { @@ -39211,7 +39211,7 @@ F_TRAINER_FEMALE | #line 15711 .doubleBattle = TRUE, #line 15712 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -39346,7 +39346,7 @@ F_TRAINER_FEMALE | #line 15769 .doubleBattle = TRUE, #line 15770 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -39479,7 +39479,7 @@ F_TRAINER_FEMALE | #line 15826 .doubleBattle = FALSE, #line 15827 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -39534,7 +39534,7 @@ F_TRAINER_FEMALE | #line 15849 .doubleBattle = FALSE, #line 15850 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39568,7 +39568,7 @@ F_TRAINER_FEMALE | #line 15863 .doubleBattle = FALSE, #line 15864 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { @@ -39701,7 +39701,7 @@ F_TRAINER_FEMALE | #line 15920 .doubleBattle = FALSE, #line 15921 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39733,7 +39733,7 @@ F_TRAINER_FEMALE | #line 15933 .doubleBattle = FALSE, #line 15934 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39765,7 +39765,7 @@ F_TRAINER_FEMALE | #line 15946 .doubleBattle = FALSE, #line 15947 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39799,7 +39799,7 @@ F_TRAINER_FEMALE | #line 15959 .doubleBattle = FALSE, #line 15960 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39831,7 +39831,7 @@ F_TRAINER_FEMALE | #line 15972 .doubleBattle = FALSE, #line 15973 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39865,7 +39865,7 @@ F_TRAINER_FEMALE | #line 15985 .doubleBattle = FALSE, #line 15986 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39897,7 +39897,7 @@ F_TRAINER_FEMALE | #line 15998 .doubleBattle = FALSE, #line 15999 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -40764,7 +40764,7 @@ F_TRAINER_FEMALE | #line 16336 .doubleBattle = FALSE, #line 16337 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -40811,7 +40811,7 @@ F_TRAINER_FEMALE | #line 16354 .doubleBattle = FALSE, #line 16355 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -40869,7 +40869,7 @@ F_TRAINER_FEMALE | #line 16376 .doubleBattle = FALSE, #line 16377 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -40927,7 +40927,7 @@ F_TRAINER_FEMALE | #line 16398 .doubleBattle = FALSE, #line 16399 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -41197,7 +41197,7 @@ F_TRAINER_FEMALE | #line 16503 .doubleBattle = FALSE, #line 16504 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -41240,7 +41240,7 @@ F_TRAINER_FEMALE | #line 16520 .doubleBattle = FALSE, #line 16521 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -41294,7 +41294,7 @@ F_TRAINER_FEMALE | #line 16541 .doubleBattle = FALSE, #line 16542 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -41348,7 +41348,7 @@ F_TRAINER_FEMALE | #line 16562 .doubleBattle = FALSE, #line 16563 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { diff --git a/src/data/trainers.party b/src/data/trainers.party index c5d2626b3d..34a736429e 100644 --- a/src/data/trainers.party +++ b/src/data/trainers.party @@ -88,7 +88,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Geodude Level: 21 @@ -243,7 +243,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 29 @@ -513,7 +513,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Makuhita Level: 30 @@ -531,7 +531,7 @@ Gender: Male Music: Aqua Items: Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 34 @@ -561,7 +561,7 @@ Pic: Aqua Admin F Gender: Female Music: Aqua Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Carvanha Level: 28 @@ -578,7 +578,7 @@ Pic: Aqua Admin F Gender: Female Music: Aqua Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sharpedo Level: 37 @@ -596,7 +596,7 @@ Gender: Male Music: Aqua Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 41 @@ -669,7 +669,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 43 @@ -1266,7 +1266,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swellow Level: 26 @@ -1283,7 +1283,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 26 @@ -1300,7 +1300,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slakoth @ Sitrus Berry Level: 26 @@ -1317,7 +1317,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Vigoroth Level: 26 @@ -1333,7 +1333,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swellow Level: 28 @@ -1383,7 +1383,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sableye Level: 44 @@ -1405,7 +1405,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mawile Level: 46 @@ -1423,7 +1423,7 @@ Gender: Male Music: Cool Items: Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Electrike Level: 17 @@ -1445,7 +1445,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Cacturne Level: 43 @@ -1463,7 +1463,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Magneton Level: 43 @@ -1481,7 +1481,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swellow Level: 42 @@ -1503,7 +1503,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Dodrio Level: 42 @@ -1529,7 +1529,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Kecleon Level: 42 @@ -1551,7 +1551,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Electrike Level: 26 @@ -1573,7 +1573,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 29 @@ -1595,7 +1595,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 32 @@ -1617,7 +1617,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 35 @@ -1639,7 +1639,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Graveler Level: 33 @@ -1657,7 +1657,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Delcatty Level: 26 @@ -1673,7 +1673,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wigglytuff Level: 26 @@ -1758,7 +1758,7 @@ Gender: Female Music: Cool Items: Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 17 @@ -1780,7 +1780,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sableye Level: 30 @@ -1794,7 +1794,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Roselia Level: 45 @@ -1808,7 +1808,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Claydol Level: 45 @@ -1822,7 +1822,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Torkoal Level: 42 @@ -1844,7 +1844,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Skarmory Level: 43 @@ -1862,7 +1862,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sandslash Level: 42 @@ -1884,7 +1884,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 26 @@ -1906,7 +1906,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 29 @@ -1928,7 +1928,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 32 @@ -1950,7 +1950,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 34 @@ -4592,7 +4592,7 @@ Gender: Male Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability / Setup First Turn +AI: Basic Trainer / Setup First Turn Mugshot: Purple Mightyena @@ -4643,7 +4643,7 @@ Gender: Female Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mugshot: Green Dusclops @@ -4694,7 +4694,7 @@ Gender: Female Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mugshot: Pink Sealeo @@ -4745,7 +4745,7 @@ Gender: Male Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mugshot: Blue Shelgon @@ -4796,7 +4796,7 @@ Gender: Female Music: Female Items: Potion / Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Geodude Level: 12 @@ -4830,7 +4830,7 @@ Gender: Male Music: Male Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machop Level: 16 @@ -4864,7 +4864,7 @@ Gender: Male Music: Male Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Voltorb Level: 20 @@ -4906,7 +4906,7 @@ Gender: Female Music: Female Items: Hyper Potion / Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Numel Level: 24 @@ -4948,7 +4948,7 @@ Gender: Male Music: Male Items: Hyper Potion / Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 27 @@ -4990,7 +4990,7 @@ Gender: Female Music: Female Items: Hyper Potion / Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Swablu Level: 29 @@ -5040,7 +5040,7 @@ Gender: Male Music: Female Items: Hyper Potion / Hyper Potion / Hyper Potion / Hyper Potion Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Claydol Level: 41 @@ -5082,7 +5082,7 @@ Gender: Male Music: Male Items: Hyper Potion / Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Luvdisc Level: 41 @@ -5764,7 +5764,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 27 @@ -5777,7 +5777,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 33 @@ -5794,7 +5794,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 36 @@ -5811,7 +5811,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 39 @@ -5828,7 +5828,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 42 @@ -5845,7 +5845,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Meditite Level: 18 @@ -5862,7 +5862,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Meditite Level: 21 @@ -5879,7 +5879,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Meditite Level: 30 @@ -5896,7 +5896,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 33 @@ -5913,7 +5913,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 36 @@ -5930,7 +5930,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 39 @@ -6047,7 +6047,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slaking Level: 43 @@ -6073,7 +6073,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Gardevoir Level: 43 @@ -6248,7 +6248,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mugshot: Yellow Wailord @@ -9189,7 +9189,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Absol Level: 27 @@ -9202,7 +9202,7 @@ Pic: Ninja Boy Gender: Male Music: Suspicious Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Koffing Level: 31 @@ -9271,7 +9271,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 34 @@ -9459,7 +9459,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 44 @@ -9508,7 +9508,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Treecko Level: 5 @@ -9521,7 +9521,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slugma Level: 18 @@ -9542,7 +9542,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slugma Level: 29 @@ -9576,7 +9576,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 18 @@ -9597,7 +9597,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 29 @@ -9618,7 +9618,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mudkip Level: 5 @@ -9631,7 +9631,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lombre Level: 18 @@ -9652,7 +9652,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lombre Level: 29 @@ -9673,7 +9673,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Treecko Level: 5 @@ -9686,7 +9686,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 18 @@ -9707,7 +9707,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slugma Level: 29 @@ -9728,7 +9728,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Torchic Level: 5 @@ -9741,7 +9741,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 18 @@ -9762,7 +9762,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 29 @@ -9783,7 +9783,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mudkip Level: 5 @@ -9796,7 +9796,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lombre Level: 18 @@ -9817,7 +9817,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lombre Level: 29 @@ -9884,7 +9884,7 @@ Pic: Cooltrainer M Gender: Male Music: Cool Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lunatone Level: 43 @@ -10075,7 +10075,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sableye Level: 43 @@ -10238,7 +10238,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Breloom Level: 27 @@ -10252,7 +10252,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Seedot Level: 28 @@ -10274,7 +10274,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Cacturne Level: 39 @@ -10302,7 +10302,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Breloom Level: 34 @@ -10330,7 +10330,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Kecleon Level: 39 @@ -10388,7 +10388,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swablu Level: 38 @@ -10424,7 +10424,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Gloom Level: 33 @@ -10460,7 +10460,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Bellossom Level: 39 @@ -10641,7 +10641,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 32 @@ -10883,7 +10883,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swellow Level: 33 @@ -10930,7 +10930,7 @@ Pic: Magma Admin Gender: Male Music: Magma Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Numel Level: 18 @@ -10973,7 +10973,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slugma Level: 13 @@ -11008,7 +11008,7 @@ Gender: Male Music: Magma Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 37 @@ -11030,7 +11030,7 @@ Gender: Male Music: Magma Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 24 @@ -11098,7 +11098,7 @@ Pic: Lass Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Marill Level: 15 @@ -11867,7 +11867,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Kecleon Level: 23 @@ -12039,7 +12039,7 @@ Pic: Wally Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Ralts Level: 16 @@ -12053,7 +12053,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 47 @@ -12103,7 +12103,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 50 @@ -12153,7 +12153,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 53 @@ -12203,7 +12203,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 56 @@ -12252,7 +12252,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12277,7 +12277,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12302,7 +12302,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12327,7 +12327,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12352,7 +12352,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12377,7 +12377,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12462,7 +12462,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Gloom Level: 34 @@ -12480,7 +12480,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Shiftry Level: 34 @@ -12670,7 +12670,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 39 @@ -12695,7 +12695,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 43 @@ -12720,7 +12720,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 46 @@ -12770,7 +12770,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 52 @@ -13516,7 +13516,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 33 @@ -13533,7 +13533,7 @@ Pic: Magma Leader Maxie Gender: Male Music: Magma Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 42 @@ -13649,7 +13649,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 24 @@ -13931,7 +13931,7 @@ Gender: Female Music: Intense Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Roselia Level: 33 @@ -13992,7 +13992,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 30 @@ -14109,7 +14109,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Loudred Level: 29 @@ -14126,7 +14126,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lotad Level: 13 @@ -14143,7 +14143,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Torkoal Level: 13 @@ -14161,7 +14161,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Golem Level: 32 @@ -14203,7 +14203,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Omanyte Level: 37 @@ -14253,7 +14253,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Omastar Level: 42 @@ -14303,7 +14303,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Aerodactyl Level: 47 @@ -14361,7 +14361,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machamp @ Sitrus Berry Level: 33 @@ -14403,7 +14403,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machamp @ Sitrus Berry Level: 38 @@ -14445,7 +14445,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hitmonchan Level: 40 @@ -14495,7 +14495,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hitmonlee Level: 46 @@ -14553,7 +14553,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mareep Level: 36 @@ -14595,7 +14595,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pikachu Level: 39 @@ -14645,7 +14645,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Raichu Level: 44 @@ -14695,7 +14695,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Electabuzz Level: 50 @@ -14753,7 +14753,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Magcargo @ White Herb Level: 38 @@ -14795,7 +14795,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Growlithe Level: 41 @@ -14845,7 +14845,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Houndour Level: 46 @@ -14903,7 +14903,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Arcanine Level: 51 @@ -14961,7 +14961,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Chansey Level: 42 @@ -15003,7 +15003,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slaking @ Sitrus Berry Level: 47 @@ -15053,7 +15053,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slaking @ Sitrus Berry Level: 52 @@ -15103,7 +15103,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slaking @ Sitrus Berry Level: 57 @@ -15161,7 +15161,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Dratini @ Sitrus Berry Level: 40 @@ -15211,7 +15211,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Hoothoot Level: 43 @@ -15269,7 +15269,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Noctowl Level: 48 @@ -15327,7 +15327,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Noctowl Level: 53 @@ -15385,7 +15385,7 @@ Gender: Male Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slowpoke Level: 48 @@ -15435,7 +15435,7 @@ Gender: Male Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Drowzee Level: 53 @@ -15493,7 +15493,7 @@ Gender: Male Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hypno Level: 58 @@ -15551,7 +15551,7 @@ Gender: Male Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hypno Level: 63 @@ -15609,7 +15609,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Poliwag Level: 46 @@ -15659,7 +15659,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Poliwhirl Level: 50 @@ -15709,7 +15709,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lapras Level: 56 @@ -15767,7 +15767,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lapras Level: 61 @@ -15824,7 +15824,7 @@ Pic: Bug Maniac Gender: Male Music: Suspicious Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Illumise Level: 17 @@ -15847,7 +15847,7 @@ Pic: Bird Keeper Gender: Male Music: Cool Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 30 @@ -15861,7 +15861,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Skarmory Level: 77 @@ -15918,7 +15918,7 @@ Pic: Salon Maiden Anabel Gender: Female Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15931,7 +15931,7 @@ Pic: Dome Ace Tucker Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15944,7 +15944,7 @@ Pic: Palace Maven Spenser Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15957,7 +15957,7 @@ Pic: Arena Tycoon Greta Gender: Female Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15970,7 +15970,7 @@ Pic: Factory Head Noland Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15983,7 +15983,7 @@ Pic: Pike Queen Lucy Gender: Female Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15996,7 +15996,7 @@ Pic: Pyramid King Brandon Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -16334,7 +16334,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Loudred Level: 35 @@ -16352,7 +16352,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 37 @@ -16374,7 +16374,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 39 @@ -16396,7 +16396,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 41 @@ -16501,7 +16501,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Geodude Level: 26 @@ -16518,7 +16518,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machop Level: 28 @@ -16539,7 +16539,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machop Level: 30 @@ -16560,7 +16560,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machoke Level: 33 From 484acdc13898afad470698c0d18cfe53f04c5c72 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 1 Sep 2024 09:12:43 -0400 Subject: [PATCH 143/544] Convert 8 various to callnatives (#5172) * Convert 8 various to callnatives * Address review comments --- asm/macros/battle_script.inc | 77 ++++--- include/constants/battle_script_commands.h | 8 - src/battle_script_commands.c | 243 +++++++++++---------- test/battle/hold_effect/red_card.c | 2 +- 4 files changed, 168 insertions(+), 162 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 9d61889b40..7ad110ab11 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1674,14 +1674,51 @@ callnative BS_FickleBeamDamageCalculation .endm -@ various command changed to more readable macros - .macro cancelmultiturnmoves battler:req - various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES + .macro jumpifteainvulnerable battler:req, jumpInstr:req + callnative BS_TeatimeInvul + .byte \battler + .4byte \jumpInstr + .endm + + .macro jumpifteanoberry failInstr:req + callnative BS_TeatimeTargets + .4byte \failInstr + .endm + + .macro trywindriderpower battler:req, failInstr:req + callnative BS_TryWindRiderPower + .byte \battler + .4byte \failInstr + .endm + + .macro activateweatherchangeabilities battler:req + callnative BS_ActivateWeatherChangeAbilities + .byte \battler + .endm + + .macro activateterrainchangeabilities battler:req + callnative BS_ActivateTerrainChangeAbilities + .byte \battler .endm @ Stores Healing Wish effect. .macro storehealingwish battler:req - various \battler, VARIOUS_STORE_HEALING_WISH + callnative BS_StoreHealingWish + .byte \battler + .endm + + .macro hitswitchtargetfailed + callnative BS_HitSwitchTargetFailed + .endm + + .macro tryrevivalblessing, failInstr:req + callnative BS_TryRevivalBlessing + .4byte \failInstr + .endm + +@ various command changed to more readable macros + .macro cancelmultiturnmoves battler:req + various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES .endm .macro setmagiccoattarget battler:req @@ -2230,16 +2267,6 @@ .4byte \failInstr .endm - .macro jumpifteanoberry jumpInstr:req - various BS_ATTACKER, VARIOUS_TEATIME_TARGETS - .4byte \jumpInstr - .endm - - .macro jumpifteainvulnerable battler:req, jumpInstr:req - various \battler, VARIOUS_TEATIME_INVUL - .4byte \jumpInstr - .endm - .macro curecertainstatuses battler:req various \battler, VARIOUS_CURE_CERTAIN_STATUSES .endm @@ -2284,19 +2311,6 @@ .byte \stat .endm - .macro trywindriderpower battler:req, failInstr:req - various \battler, VARIOUS_TRY_WIND_RIDER_POWER - .4byte \failInstr - .endm - - .macro activateweatherchangeabilities battler:req - various \battler, VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES - .endm - - .macro activateterrainchangeabilities battler:req - various \battler, VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES - .endm - @ helpful macros .macro setstatchanger stat:req, stages:req, down:req setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 @@ -2491,15 +2505,6 @@ waitmessage B_WAIT_TIME_LONG .endm - .macro hitswitchtargetfailed - various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED - .endm - - .macro tryrevivalblessing, jumpInstr:req - various 0, VARIOUS_TRY_REVIVAL_BLESSING - .4byte \jumpInstr - .endm - @ Will jump to script pointer if the specified battler has or has not fainted. .macro jumpiffainted battler:req, value:req, ptr:req getbattlerfainted \battler diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 03173c43cf..156eeda613 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -226,14 +226,6 @@ #define VARIOUS_SET_BEAK_BLAST 134 #define VARIOUS_SWAP_SIDE_STATUSES 135 #define VARIOUS_SWAP_STATS 136 -#define VARIOUS_TEATIME_INVUL 137 -#define VARIOUS_TEATIME_TARGETS 138 -#define VARIOUS_TRY_WIND_RIDER_POWER 139 -#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 140 -#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 141 -#define VARIOUS_STORE_HEALING_WISH 142 -#define VARIOUS_HIT_SWITCH_TARGET_FAILED 143 -#define VARIOUS_TRY_REVIVAL_BLESSING 144 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 369698f3ff..103819bb45 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10863,123 +10863,6 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } - case VARIOUS_TEATIME_TARGETS: - { - VARIOUS_ARGS(const u8 *jumpInstr); - u32 count = 0; - - for (i = 0; i < gBattlersCount; i++) - { - if (IsTeatimeAffected(i)) - count++; - } - if (count == 0) - gBattlescriptCurrInstr = cmd->jumpInstr; // Teatime fails - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_TEATIME_INVUL: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (ItemId_GetPocket(gBattleMons[battler].item) == POCKET_BERRIES && !(gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->jumpInstr; - return; - } - case VARIOUS_TRY_WIND_RIDER_POWER: - { - VARIOUS_ARGS(const u8 *failInstr); - u16 ability = GetBattlerAbility(battler); - if (GetBattlerSide(battler) == GetBattlerSide(gBattlerAttacker) - && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) - { - gLastUsedAbility = ability; - RecordAbilityBattle(battler, gLastUsedAbility); - gBattlerAbility = gBattleScripting.battler = battler; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } - return; - } - case VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES: - { - VARIOUS_ARGS(); - gBattlescriptCurrInstr = cmd->nextInstr; - AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0); - return; - } - case VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES: - { - VARIOUS_ARGS(); - gBattlescriptCurrInstr = cmd->nextInstr; - AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); - return; - } - case VARIOUS_STORE_HEALING_WISH: - { - VARIOUS_ARGS(); - if (gCurrentMove == MOVE_LUNAR_DANCE) - gBattleStruct->storedLunarDance |= 1u << battler; - else - gBattleStruct->storedHealingWish |= 1u << battler; - break; - } - case VARIOUS_HIT_SWITCH_TARGET_FAILED: - { - VARIOUS_ARGS(); - gBattleStruct->hitSwitchTargetFailed = TRUE; - 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 = GetSideParty(side); - - u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; - BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HP_BATTLE, 1u << 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 (IsDoubleBattle() && - 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(gBattlerAttacker, BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); - MarkBattlerForControllerExec(gBattlerAttacker); - } - return; - } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; @@ -17197,3 +17080,129 @@ void BS_FickleBeamDamageCalculation(void) gBattlescriptCurrInstr = cmd->nextInstr; } } + +void BS_TeatimeInvul(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (ItemId_GetPocket(gBattleMons[battler].item) == POCKET_BERRIES && !(gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))) + gBattlescriptCurrInstr = cmd->nextInstr; + else + gBattlescriptCurrInstr = cmd->jumpInstr; +} + +void BS_TeatimeTargets(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u32 count = 0, i; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsTeatimeAffected(i)) + count++; + } + if (count == 0) + gBattlescriptCurrInstr = cmd->failInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryWindRiderPower(void) +{ + NATIVE_ARGS(u8 battler, const u8 *failInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + u16 ability = GetBattlerAbility(battler); + if (GetBattlerSide(battler) == GetBattlerSide(gBattlerAttacker) + && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) + { + gLastUsedAbility = ability; + RecordAbilityBattle(battler, gLastUsedAbility); + gBattlerAbility = gBattleScripting.battler = battler; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +void BS_ActivateWeatherChangeAbilities(void) +{ + NATIVE_ARGS(u8 battler); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0); +} + +void BS_ActivateTerrainChangeAbilities(void) +{ + NATIVE_ARGS(u8 battler); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); +} + +void BS_StoreHealingWish(void) +{ + NATIVE_ARGS(u8 battler); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gCurrentMove == MOVE_LUNAR_DANCE) + gBattleStruct->storedLunarDance |= 1u << battler; + else + gBattleStruct->storedHealingWish |= 1u << battler; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_HitSwitchTargetFailed(void) +{ + NATIVE_ARGS(); + gBattleStruct->hitSwitchTargetFailed = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryRevivalBlessing(void) +{ + NATIVE_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 = GetSideParty(side); + + u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; + BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HP_BATTLE, 1u << 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 (IsDoubleBattle() && + gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) + { + gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker); + gBattleCommunication[MULTIUSE_STATE] = TRUE; + } + + gSelectedMonPartyId = PARTY_SIZE; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + // Open party menu, wait to go to next instruction. + BtlController_EmitChoosePokemon(gBattlerAttacker, BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); + MarkBattlerForControllerExec(gBattlerAttacker); + } +} diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 138e3a3692..ad2f77861f 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -468,4 +468,4 @@ SINGLE_BATTLE_TEST("Red Card does not activate if holder is switched in mid-turn } } -// SINGLE_BATTLE_TEST("Red Card activates but fails if the attacker has Dynamaxed") +TO_DO_BATTLE_TEST("Red Card activates but fails if the attacker has Dynamaxed"); From de242c8a29ffebad2b9469a45e13eefd34c7a69c Mon Sep 17 00:00:00 2001 From: Erickson Russell <99516581+Flash1Lucky@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:15:39 -0400 Subject: [PATCH 144/544] EV Caps and EV Items (#5269) * EV Caps and EV Items Introduces EV caps, inspired by level caps, with configurable options for various cap implementations. Additionally, modifies EV items to interact with these caps based on a configurable setting. * EV Caps fixes Changed the EV caps to be less redundant and work better overall. * EV Caps Fix part 2 Set the items back to ItemUseOutOfBattle_Medicine, got rid of ItemUseOutOfBattle_EVItem and ItemUseCB_EVItem, and reverted CB2_ReturnToPartyMenuUsingItem to CB2_ReturnToPartyMenuUsingRareCandy * EV Caps Fixes Part 3 Fixed being able to use EV items to go over 252 limit on single stats. * Update src/ev_caps.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/config/ev_caps.h | 16 +++++++++ include/constants/global.h | 1 + include/ev_caps.h | 10 ++++++ src/ev_caps.c | 41 ++++++++++++++++++++++ src/pokemon.c | 71 ++++++++++++++++++++++---------------- 5 files changed, 110 insertions(+), 29 deletions(-) create mode 100644 include/config/ev_caps.h create mode 100644 include/ev_caps.h create mode 100644 src/ev_caps.c diff --git a/include/config/ev_caps.h b/include/config/ev_caps.h new file mode 100644 index 0000000000..0513ff086e --- /dev/null +++ b/include/config/ev_caps.h @@ -0,0 +1,16 @@ +#ifndef GUARD_CONFIG_EV_CAP_H +#define GUARD_CONFIG_EV_CAP_H + +// Constants for EV Cap Types +#define EV_CAP_NONE 0 // Regular behavior, no EV caps are applied +#define EV_CAP_FLAG_LIST 1 // EV cap is chosen according to the first unset flag in `sEVCapFlagMap` +#define EV_CAP_VARIABLE 2 // EV cap is chosen according to the contents of the event variable specified by B_EV_CAP_VARIABLE +#define EV_CAP_NO_GAIN 3 // No EVs can be gained + +// Configs for EV Cap +#define B_EV_CAP_TYPE EV_CAP_NONE // [EV_CAP_NONE, EV_CAP_FLAG_LIST, EV_CAP_VARIABLE, EV_CAP_NO_GAIN] choose the type of EV cap to apply#define B_EV_CAP_VARIABLE 12 // event variable used to derive EV cap if B_EV_CAP_TYPE is set to EV_CAP_VARIABLE +#define B_EV_CAP_VARIABLE 8 // event variable used to derive EV cap if B_EV_CAP_TYPE is set to EV_CAP_VARIABLE + +#define B_EV_ITEMS_CAP FALSE // If set to true, EV-boosting items can't be used to go over the EV cap + +#endif /*GUARD_CONFIG_EV_CAP_H*/ diff --git a/include/constants/global.h b/include/constants/global.h index 7e26bd5a0d..a4623c9d8b 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -8,6 +8,7 @@ #include "config/level_caps.h" #include "config/pokemon.h" #include "config/overworld.h" +#include "config/ev_caps.h" // Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen. // In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen. diff --git a/include/ev_caps.h b/include/ev_caps.h new file mode 100644 index 0000000000..2b2dd0b02b --- /dev/null +++ b/include/ev_caps.h @@ -0,0 +1,10 @@ +#ifndef GUARD_EV_CAP_H +#define GUARD_EV_CAP_H + +#if B_EV_CAP_TYPE != EV_CAP_NONE && B_EV_CAP_TYPE != EV_CAP_FLAG_LIST && B_EV_CAP_TYPE != EV_CAP_VARIABLE && B_EV_CAP_TYPE != EV_CAP_NO_GAIN +#error "Invalid choice for B_EV_CAP_TYPE, must be one of [EV_CAP_NONE, EV_CAP_FLAG_LIST, EV_CAP_VARIABLE, EV_CAP_NO_GAIN]" +#endif + +u32 GetCurrentEVCap(void); + +#endif /* GUARD_EV_CAP_H */ diff --git a/src/ev_caps.c b/src/ev_caps.c new file mode 100644 index 0000000000..8eb3531ca4 --- /dev/null +++ b/src/ev_caps.c @@ -0,0 +1,41 @@ +#include "global.h" +#include "battle.h" +#include "event_data.h" +#include "ev_caps.h" +#include "pokemon.h" + +u32 GetCurrentEVCap(void) +{ + + static const u16 sEvCapFlagMap[][2] = { + // Define EV caps for each milestone + {FLAG_BADGE01_GET, 30}, + {FLAG_BADGE02_GET, 90}, + {FLAG_BADGE03_GET, 150}, + {FLAG_BADGE04_GET, 210}, + {FLAG_BADGE05_GET, 270}, + {FLAG_BADGE06_GET, 330}, + {FLAG_BADGE07_GET, 390}, + {FLAG_BADGE08_GET, 450}, + {FLAG_IS_CHAMPION, MAX_TOTAL_EVS}, + }; + + if (B_EV_CAP_TYPE == EV_CAP_FLAG_LIST) + { + for (u32 evCap = 0; evCap < ARRAY_COUNT(sEvCapFlagMap); evCap++) + { + if (!FlagGet(sEvCapFlagMap[evCap][0])) + return sEvCapFlagMap[evCap][1]; + } + } + else if (B_EV_CAP_TYPE == EV_CAP_VARIABLE) + { + return VarGet(B_EV_CAP_VARIABLE); + } + else if (B_EV_CAP_TYPE == EV_CAP_NO_GAIN) + { + return 0; + } + + return MAX_TOTAL_EVS; +} diff --git a/src/pokemon.c b/src/pokemon.c index 718ce00c65..165c430d96 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -60,6 +60,7 @@ #include "constants/union_room.h" #include "constants/weather.h" #include "wild_encounter.h" +#include "ev_caps.h" #define FRIENDSHIP_EVO_THRESHOLD ((P_FRIENDSHIP_EVO_THRESHOLD >= GEN_9) ? 160 : 220) @@ -3752,6 +3753,9 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov s8 evChange; u16 evCount; + // Determine the EV cap to use + u32 maxAllowedEVs = !B_EV_ITEMS_CAP ? MAX_TOTAL_EVS : GetCurrentEVCap(); + // Get item hold effect heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); if (heldItem == ITEM_ENIGMA_BERRY_E_READER) @@ -3879,27 +3883,31 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (evChange > 0) // Increasing EV (HP or Atk) { - // Has EV increase limit already been reached? - if (evCount >= MAX_TOTAL_EVS) + // Check if the total EV limit is reached + if (evCount >= maxAllowedEVs) return TRUE; - if (itemEffect[10] & ITEM10_IS_VITAMIN) - evCap = EV_ITEM_RAISE_LIMIT; - else - evCap = MAX_PER_STAT_EVS; - + // Ensure the increase does not exceed the max EV per stat (252) + evCap = (itemEffect[10] & ITEM10_IS_VITAMIN) ? EV_ITEM_RAISE_LIMIT : MAX_PER_STAT_EVS; + + // Check if the per-stat limit is reached if (dataSigned >= evCap) - break; - - // Limit the increase + return TRUE; // Prevents item use if the per-stat cap is already reached + if (dataSigned + evChange > evCap) - temp2 = evCap - (dataSigned + evChange) + evChange; + temp2 = evCap - dataSigned; else temp2 = evChange; - if (evCount + temp2 > MAX_TOTAL_EVS) - temp2 += MAX_TOTAL_EVS - (evCount + temp2); + // Ensure the total EVs do not exceed the maximum allowed (510) + if (evCount + temp2 > maxAllowedEVs) + temp2 = maxAllowedEVs - evCount; + // Prevent item use if no EVs can be increased + if (temp2 == 0) + return TRUE; + + // Apply the EV increase dataSigned += temp2; } else if (evChange < 0) // Decreasing EV (HP or Atk) @@ -4064,27 +4072,31 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov evChange = temp2; if (evChange > 0) // Increasing EV { - // Has EV increase limit already been reached? - if (evCount >= MAX_TOTAL_EVS) + // Check if the total EV limit is reached + if (evCount >= maxAllowedEVs) return TRUE; - if (itemEffect[10] & ITEM10_IS_VITAMIN) - evCap = EV_ITEM_RAISE_LIMIT; - else - evCap = MAX_PER_STAT_EVS; - + // Ensure the increase does not exceed the max EV per stat (252) + evCap = (itemEffect[10] & ITEM10_IS_VITAMIN) ? EV_ITEM_RAISE_LIMIT : MAX_PER_STAT_EVS; + + // Check if the per-stat limit is reached if (dataSigned >= evCap) - break; - - // Limit the increase + return TRUE; // Prevents item use if the per-stat cap is already reached + if (dataSigned + evChange > evCap) - temp2 = evCap - (dataSigned + evChange) + evChange; + temp2 = evCap - dataSigned; else temp2 = evChange; - if (evCount + temp2 > MAX_TOTAL_EVS) - temp2 += MAX_TOTAL_EVS - (evCount + temp2); + // Ensure the total EVs do not exceed the maximum allowed (510) + if (evCount + temp2 > maxAllowedEVs) + temp2 = maxAllowedEVs - evCount; + // Prevent item use if no EVs can be increased + if (temp2 == 0) + return TRUE; + + // Apply the EV increase dataSigned += temp2; } else if (evChange < 0) // Decreasing EV @@ -5195,6 +5207,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) int i, multiplier; u8 stat; u8 bonus; + u32 currentEVCap = GetCurrentEVCap(); heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); if (heldItem == ITEM_ENIGMA_BERRY_E_READER) @@ -5224,7 +5237,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) for (i = 0; i < NUM_STATS; i++) { - if (totalEVs >= MAX_TOTAL_EVS) + if (totalEVs >= currentEVCap) break; if (CheckPartyHasHadPokerus(mon, 0)) @@ -5275,8 +5288,8 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) if (holdEffect == HOLD_EFFECT_MACHO_BRACE) evIncrease *= 2; - if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS) - evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease); + if (totalEVs + (s16)evIncrease > currentEVCap) + evIncrease = ((s16)evIncrease + currentEVCap) - (totalEVs + evIncrease); if (evs[i] + (s16)evIncrease > MAX_PER_STAT_EVS) { From 04b5c013a9668e3bd5ab967679962cdf036de3f8 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 3 Sep 2024 19:28:59 +0200 Subject: [PATCH 145/544] Adds config to show target of ingame partner (#5307) * Adds config to show chosen move and target of ingame partner, `#define B_SHOW_PARTNER_TARGET`, default `FALSE` --------- Co-authored-by: Hedara --- charmap.txt | 1 + gflib/characters.h | 1 + graphics/fonts/latin_normal.png | Bin 3543 -> 4661 bytes include/config/battle.h | 3 +++ src/battle_controller_player.c | 36 +++++++++++++++++++++++++++++++- src/fonts.c | 2 +- 6 files changed, 41 insertions(+), 2 deletions(-) diff --git a/charmap.txt b/charmap.txt index 4c9f2e0497..e5a901d6d9 100644 --- a/charmap.txt +++ b/charmap.txt @@ -45,6 +45,7 @@ SUPER_ER = 2C LV = 34 '=' = 35 ';' = 36 +V_D_ARROW = 38 '¿' = 51 '¡' = 52 PK = 53 diff --git a/gflib/characters.h b/gflib/characters.h index 8ed440e63a..3725cecce0 100644 --- a/gflib/characters.h +++ b/gflib/characters.h @@ -53,6 +53,7 @@ #define CHAR_EQUALS 0x35 #define CHAR_SEMICOLON 0x36 #define CHAR_BARD_WORD_DELIMIT 0x37 // Empty space to separate words in Bard's song +#define CHAR_V_D_ARROW 0x38 #define CHAR_INV_QUESTION_MARK 0x51 #define CHAR_INV_EXCL_MARK 0x52 #define CHAR_PK 0x53 diff --git a/graphics/fonts/latin_normal.png b/graphics/fonts/latin_normal.png index ade914858f4810795c03faa18e38f1263f761091..d1de69d136c6fff2a296f42ee6e46c003f6c0493 100644 GIT binary patch literal 4661 zcmc(j`8U*$_s3tam%-S_R+j8V%7iFB8D@yo+uDvSQ_5DD53(;WhDaLIyLVKUQ4(cI zlqJiIkR>8y$u^PD$PC7tF=l*vf6w`R{)O*3&vWkcp8M0|o^#K+_uh7Pw3QH55(NN2 z;?zm&GXMbowh(|6_#ND=t-5{(F!YSA6;SbM&*JYy+}Zw|4Y_m2)YNozbaZED$BQ1S z2>{X~r>rf{MdtqU7=JpWF8&v5XQ%OcsqJCeQ}+`1tX;I!xbv zCZ1dXCk|fkV>&dGF<0LJEzroL00M6w*sqA%9s)kvB(Ogm};O)k$_TMF;oLI^_V;jh4lw zxP2(LLZkuGtZ_uyoktrY3k_F_?UEOAko%_!okVB=tvC_svQfeJAKI|d=SN!&Jb8`k z-&8B~25y|*!k|E+2c7E%geBV7e^KFIg|b$spE{2UZZS*HmiE*=+x{*L?ylnn{su25 z(?7OQZuOwL12$$Qo=|ELf|e-6e`O)Lou4PwkFV2C+q`ivb$O$&wf9RDN9KX~AH5OR z>e)qgBTo;F4;*mc8E1OLt^OM#gdWL~8vgR<#UjO4gaV52S)pP_8efgTMe(tcwZmI% z*FCC+4zQ~uZViUa6h}TfL`RnYnYsKl`|azGJu+}Zd*Dkk_X{K(XxqQKp+kgXJ=Ljo zW6!4(fv@{T(6lW?*@%Z2p`lg_>Tw&>#a)Wvo#^*Pk#8otje9CANqBl*_LB>7O-2Bh zOUUEz7$!vO6ET-SuK`gJ11Ff##`t3<4$@4CO=0;2*;7iEUJHZPNECid!Jr@dRG(ce z<6LG(;{;rPtboEF1b=-TEkuNM06TAVP?ZbQM#e9L!P2yl>Pw9mrUiw3!Jt(q9oVhS z82nZ8HUnIK@OXV+VQFKFWWk15EN99RkcJS(ib}Z`E1T7vgG1Im;6ACcnpZ01+|Ih& z@Xxt{MX36@LAS9VX}NZcps6KaQeNc7%Za^ng9L2AO(F%WaqRdUFU0Udt+{>*5(U1R z)FWxs)N1j*w=efq7ruqPn2>(F2mOo3A)D}K`f{Jy9#DS@onQ(LWackr2*?;LQ60V! z5Lf5LmhZMolk@cJxNB9i`#dGaK&m6HPeV%$vX<)nOKlG8`BOy$s$yv35ZlKEO`HH2D&;%E`LO-jJbZOsO~8q zZ@Elxq&grrovt0f#kU(?>=@zcS}|@ip4GNwHgx#rOkO02frP5FJA@-d#{O5S?HuR= zd8M`cIAw

1d7y-n?s(-!TwXp4q4NJvcK)kPLgq7b5g(`%uoMPF0COB;GRRMdrrU zZmEjdhIV@xi#LSs=vX zH?4(=IEVaD_>=}{F&S5QeOlO_9A6>U*+cH@N zsbKKHa0=zYluDW;SC)OZ4R4YM>b{xoo0VIik+ju3sc3clrB#w}x5-{=9$@^;^Y?Vkj)|*z#K(YBXlfI{%vxLL;-^$x zIb&BI{aR%DG88r&!*~`(fdbG%3_K;194T;%9?sf`nUg@$m40rmb%jKUSfrYqpf$c2 zueLUk?r+f82Q-;}BW$JcLwOV!U%`tAfEm(L+`|P$(B<*|dr=7Ro@OkIT6r8t=pY^IBO4^PFsh?-YmLL^YG8t)vF=w;#CY zXci2Jp;|nrb!7V+u-(+tneS-E;17%Pcn#W-me*wY_`o3c1Eo(`CN!xQS&j+-kS!A8 z3#4VW0i~ECZFL|PEIF+S$V(o@3_0HQ(I|~|?rn6MN*XNLjdG^#rdfRALJiVcyb$*-wWlgwo zj21P!YwHYz7dKcqECTw|wCk~=qoXdnJGm}>O*T-KicXYsjoRy(d1c8YR#USj6v@k< z99IRGdcVb_8~9nu&hPq+4Iv6!x)5x4#$HO4PupJhXOG0~Ru8UFcA~Gx#om>=lEIEm zH-R<2e>B0o@R_@hEs=egGy+(;gw)Bc;pJa>I$VtM$S+sum?EfgfjPdRx9;l2kYl#0#q@AtFyu z>|qZ+uZuBWy)ma37dVIe<{YHBH|gu!%m-yTkloiG@%kR%2hGG?nTT+9RnQk=h~ix!83?!0in9H%H!=h?9yt_=s2 z#cij++E{Hs-aTu>t^VD%-HC?>`=W^N-_c??Efrf&GSGB4{8~q$hiKUK)oW4HTzzwC z{0OxdA;$>6JriJB2G<~lzQ0P2eDnbh+U+OeVwU^X8`h!ykqI2UsnT|%^hS2V_<%5R z%FW9$2-En^QS+C&UmS$7vB#|=2)mW@e*B~x*Bw%?6@7aNc|q~HWx}Mx_3LZj5N5R5dA8dAVVhv?2vf&}>->YvySa;&O;U}_N%7?gU zqr<-7994)ga>o6ln2IG@BYb_{v(PJ@=3z`QvAYIEAIU&}kaZr}q+Nc8qkEkd+fPJ1 z)S@d5Y}zqn@78LuYoFL4Jn#jA?i5z`)Z4V$S!zOK4U5YU4dgLW;I+(hD>PU`0)GgZ zJDoH;(Ws)lJ+I_I-0%g{beygIS9VB7V&dGvY;AhLkP~r=*BD)E64gaF{RhA?@p>3N zRN_es#6(knqrv}M8UA05ldbNssMu2cDznu9Y#Ryc3 zAS5|Tc|)-Rn1jKwt)m7c^kZ%%1B#4Uad;S=c0ce}bwoq|Q-_@VX!m}>Sg=C`P?#ji zFEPr@ijwP(7gH1k$^gq2;}Ht`>EXYFinr%O=EbXK94$QmIW>~Cyf-$FpUNkju?wY^ zj*TwZd#^m5C&oN_o|+@Z2cGZd98#H1LSL2y!tNk9^q*t)3cc@avOfMbrZBPGvwxV~ zZtgnIzq1ye4I8xG(vUn3-Af#pNEbDljr?Lr_;+SrLt7r*q6EGjbIhK0rMm(0jwiu3 zd5*i?R?RM_#6r-(Eqc65VA_Fj*X#icye zPTd!DKh@*IJ`)pBMM=o+4ZO{}fDKP|%7aoI-U!zv#96P!c9Y&KTc2cZr6koLEHR7C z@fSbD-QsQHpg($7R5DQPWvQxJn8w?#V{LC5^8Uf!l`?TpU%(Cg?)L1?9f|}?el*6) zw={EZ>f+&}e%+K&SKREQSiu09$@ZZyqtu+F3L>;1c2#s{MrTrO0&E8SGSGm79gBHd zBg?$S&NJR{$XqQhagJJ|{&lOI32fMIaUt|T9P^N|2k*-BgY=MI_e6K_p86%3hA*FF z(|<{Q+#xKM>KK7K7u&PHc(Wvzrzvj%NH=-P?$!+?+CqDIM~iB`G+alEH}#MywuWc%{P6QZlq|>*gym zC0;(VmzMpSXuNBBblR+D`C;gL%Y*C@vk*7>*yb(uZ8<&|Fi;&gVt3}+@7E7-%Er;U I!U~`CAJCn>nLZn1(s-!$2MT)CZ90iF+aNAgrDc^CcD=rSKKOqfuClLpv zu@X~2z{Uh5h+^J%-ptPIa!D?C75kFR1D4Dny6vv{LF`LW8*O z2b^wSh3&Lb&@qux0)G%!-C4td=}4`UfWZv_N?}~*0_@HLpdQ9`F2L@Tv}P>Sgl5rB zJR8g(2Pj0V6bw(T7u4o?wb_;1;&ZmK_y z+jqmu0m$PABEWGuVGE??foYZoOmlOhR*z?1C9Q>~SsF0S&513463_@2Xo8;rR29H> zSxJ}IwJcQl;6X7k8RCKh1y1h(-c{ z%#9#!@6A9=-0BFhQ;yrWgir}hj}-zRVW)vcfb(|TzNKG4CkCvLi!h!Bdb!9@p5-Gl z0cQD#;*whOtXhqa#Q188JDUa2L-_b)J0Adp3L~_(lK`YGThiQ|9HkU5wT{Hl2H5r; zEpt-boCef;N8;pFjwWFA?GS&Y`HTTWy9vWV+}4j*`sYXD>?#Fd+j?z3 z4!}A4HV!w0M8Ntr1=%4-JtN^I zzNII5Jd`$s_)0Yu&((i)N(_^Lp{knQ1fKv^%DlJ70IZGIf++wjG|wqqSAaTdu&Dqq zglGvaWF?#e&`t1v$Lr+A3ip8o{FTBAus;o;o8VU!fU3Pmvui~Gd|@rh=K`t;0tQ>TMMB3;CR|y*ie8mWghL2Qjw$O_+5VhVCrqe^S}gvrsoPh z`qXP?9IRym>?;5@;jm53`cjCm1;0o9GHo2_H{ zx`xsk>G~iYfOO~LeafsSlT1%7A09BAkx0L9oGIVUNYr~TP3X?3!K~&*qTeaz2IzN+ zxdG7+F?j*eZwP;R0s5U{Zh(HLm?oG19kx(Nj&w;^aYey+q8U%m>HtZ=yH~7ulR0{o z1JK=Mz%c-uIRK?)2H*%?81VeSWX=UZ=}meX-yzV8^_+k=G~MG}DyIE~0hh0oQm*Sf zcj3biq}+f^GCoo|P$lSaR&SF892W)DwhIDE0C@cKST27+{V4uh*NO;Q)o3P^c3TE_54Z*efuQ3LDeH04GkIIJq&Iw*w-kf{$0$QB+q8 z0#^331Ms2-&(bjfekPYc*bmH)_joU$_aWN*5dpxHY#eaNC$U*Y|9F2As=bL6ZhPju zeBYJ?Y?Xh_)|igRimeiITV0?g8PB||>LdZ3Ljyo!XhQ=AlYmi>0N^%i04}2aa<7F_ zoJ0GY3NTcih`w1)0&wwC)j+o$6D^K?4NxWH4cG+WR8_g;nW_Wet2kbPU0UPdAPK;G zMTB2ioi_}vJqRk}aG%!_BBg@eCZtW0KxCg_%UJvU=3+sUH5ep zl6QYW58rOUas1k0+k`)u13(+kNKaKKK3g{%e$aN`3a0|lzLH9SIG)^L>Lt~74X958 z;3E2=r2u&R$LhVFwF%lkpa!@zr<=xC#B`u;SrVZAKuZBOcCB^?d>uzQ4sZ*T0PP3P z2RyJk|KvT3*q5aJ1di=sN)zmJ>sf4J7T|y7JV0T|?2WQC;llv*{O^1587UfV-lQMU zbBKItt=9p1_{!NiU;z9CwjZZ$_SGgItpn^Sz8b~>6GJ#K)@khhbh#0}L#H zw(pV!Se*lCh86%e-SEsNW*ZUkXA^2~kqJ@ZjS^G|%O85qaQdy_+D>p?uMziE)?knZm$uGbCU z16wF8xk^U9qasbXQ9yE>>n#<&PORc1>%3faZ>xzV3209N3>&5FN;6x44Q7{EC zu+FO{OaS%*UP#!kOMXQVT8}`X)dYV}0buiTdqBtw37Bh|3$q`60D$Y0rB+o9lGe9DO?Wnln=#VCdi7I%cVh;?C%~J~0JP)Lap`zE zDS%R-?Ec8CTC~s9o(tFEH;#W_CjhWEc%QxkAb#O-22>rj(62+#iKn=Yu_jvn zS`T>faArW-dSKx`fQ3o*%rTSbp&WhB6qsXXK;faR6XyaH7XD(wRxu@pT1{6m z_ElnE=@h{6^DtE<*K=F2>M7GQdfG6jC08kqC zF0Zb65`c{U25HX|RRu#D@w^;}W(f*FAl~8^51N9@WKjTAs|L{MaHh3YK1u+p|E3&@ zH?j{@69`a04JDwa0DoQyB5l=7SOP98q%^Ph>3FRGK0SHJ?bm+k;8q0 z&`SGkm;nH@+#-K7ZIGFcdt5SV1HeTqLla=*vIeUbV2?WUjBR8-z;ab~4TeK*#$5Tl z!FK&Q+4%S$l!*-LjI6PD5z4-pE8kc)uI~c;1N`IZMTSnaZF`JTU$dF^>G}WsIs?GA z?J;GzeDAjKpSO1>PMkP#;>3v)Cr+F=apJ^@6DLlbIB|dC#EBCpPMkP#;>3v)Cr+F= zapJ^@6DLlbIB`-)KJtVpm2V2LEX1wt9DsJ)grSfn(z}2W{FZfI%Pk$(7w!pFI@RJX zWx7q_2gq0z;^8i*vupQoHvuU9(Eut`qmSwQ14^`1#aBfX4-DYeGM|e9YGnhErzrCS z^hp)pHK~6>)c>&zKs5>YLnQ%N7vd2T)A_Zs>TCtLb3lL{!Mz`K4xPM>Hm~z{j~@k` z5ZY>SlkmSiw+~bkDoFsz$0(69HtGD5)nShg7-;uF3m-?~_MvkkL5Y;;37x-VoyNJ3 zxA`dJlx7heD|RcFMdJIASXUi z!}fryfAEA80`%#pG>y?b7SLQ5Jm&CYJ+J+S?7US`V_ldUK#=HpJ>Fb-e9BfT<=17N zd9^I9bLr>{?Y3b1PnXPH(#_@?w9JePK~1nWf++)nj=QUziwvuCKl{1LP)hkbi`q9w z-d7!~6`&_U!iVU;chosenMovePositions + B_POSITION_PLAYER_RIGHT)]; + StringAppend(gStringVar1, gMovesInfo[move].name); + if (gMovesInfo[move].target == MOVE_TARGET_SELECTED) + { + if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_LEFT) + StringAppend(gStringVar1, COMPOUND_STRING(" -{UP_ARROW}")); + else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_RIGHT) + StringAppend(gStringVar1, COMPOUND_STRING(" {UP_ARROW}-")); + else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_LEFT) + StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-")); + else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_RIGHT) + StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-")); + } + else if (gMovesInfo[move].target == MOVE_TARGET_BOTH) + { + StringAppend(gStringVar1, COMPOUND_STRING(" {UP_ARROW}{UP_ARROW}")); + } + else if (gMovesInfo[move].target == MOVE_TARGET_FOES_AND_ALLY) + { + StringAppend(gStringVar1, COMPOUND_STRING(" {V_D_ARROW}{UP_ARROW}")); + } + else if (gMovesInfo[move].target == MOVE_TARGET_ALL_BATTLERS) + { + StringAppend(gStringVar1, COMPOUND_STRING(" {V_D_ARROW}{V_D_ARROW}")); + } + BattlePutTextOnWindow(gStringVar1, B_WIN_ACTION_PROMPT); + } + else + { + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); + } } static void PlayerHandleYesNoBox(u32 battler) diff --git a/src/fonts.c b/src/fonts.c index 6bd2d35e83..3f2c536985 100644 --- a/src/fonts.c +++ b/src/fonts.c @@ -149,7 +149,7 @@ ALIGNED(4) const u8 gFontNormalLatinGlyphWidths[] = { 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 7, 6, 3, - 3, 3, 3, 3, 10, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 10, 8, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 4, 8, 8, 8, 7, 8, 8, 4, 6, 6, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 6, From 28a9ad3399ac3a72f3e44cbebb6e2885305c5253 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:22:01 -0400 Subject: [PATCH 146/544] (Default Off) Item Description Headers (#4767) * add item descption headers and (default-off) config * revert test script * OW_SHOW_ITEM_DESCRIPTIONS can be 0(off), 1(first time) or 2(always), move code to overworld.c to prevent issues with users whove merged original branch. fix styling * add ow item header config value labels * Update include/config/overworld.h Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Update src/overworld.c * Update include/overworld.h * ScriptShowItemDescription remove unused var * fix ScriptShowItemDescription warning --------- Co-authored-by: ghoulslash Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- asm/macros/event.inc | 17 ++ data/maps/MtChimney/scripts.inc | 14 ++ data/maps/Route109_SeashoreHouse/scripts.inc | 5 + data/scripts/berry_tree.inc | 3 + data/scripts/obtain_item.inc | 14 ++ include/config/overworld.h | 6 + include/global.h | 5 + include/overworld.h | 8 + src/berry.c | 2 + src/overworld.c | 207 +++++++++++++++++++ src/shop.c | 1 + 11 files changed, 282 insertions(+) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 891c7fd4ed..89a6a46830 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2321,3 +2321,20 @@ .macro togglefakertc callnative Script_ToggleFakeRtc .endm + + @ ============================ @ + @ ITEM DESCRIPTION HEADER MACROS + @ Used with OW_SHOW_ITEM_DESCRIPTIONS config + .macro showitemdescription + callnative ScriptShowItemDescription + .byte 0 + .endm + + .macro showberrydescription + callnative ScriptShowItemDescription + .byte 1 + .endm + + .macro hideitemdescription + callnative ScriptHideItemDescription + .endm diff --git a/data/maps/MtChimney/scripts.inc b/data/maps/MtChimney/scripts.inc index b4becfabee..fbd0da31ae 100644 --- a/data/maps/MtChimney/scripts.inc +++ b/data/maps/MtChimney/scripts.inc @@ -111,6 +111,7 @@ MtChimney_EventScript_LavaCookieLady:: msgbox MtChimney_Text_ThankYouDear, MSGBOX_DEFAULT checkitemspace ITEM_LAVA_COOKIE call_if_eq VAR_RESULT, TRUE, MtChimney_EventScript_RemoveMoney +.if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_OFF giveitem ITEM_LAVA_COOKIE goto_if_eq VAR_RESULT, FALSE, MtChimney_EventScript_BagIsFull hidemoneybox @@ -122,6 +123,19 @@ MtChimney_EventScript_BagIsFull:: hidemoneybox release end +.else + hidemoneybox + giveitem ITEM_LAVA_COOKIE + goto_if_eq VAR_RESULT, FALSE, MtChimney_EventScript_BagIsFull + release + end + +MtChimney_EventScript_BagIsFull:: + msgbox gText_TooBadBagIsFull, MSGBOX_DEFAULT + release + end +.endif @ OW_SHOW_ITEM_DESCRIPTIONS + MtChimney_EventScript_RemoveMoney:: removemoney 200 diff --git a/data/maps/Route109_SeashoreHouse/scripts.inc b/data/maps/Route109_SeashoreHouse/scripts.inc index afb2a4aa0d..d871596b9a 100644 --- a/data/maps/Route109_SeashoreHouse/scripts.inc +++ b/data/maps/Route109_SeashoreHouse/scripts.inc @@ -52,8 +52,13 @@ Route109_SeashoreHouse_EventScript_BuySodaPop:: msgbox Route109_SeashoreHouse_Text_HereYouGo, MSGBOX_DEFAULT removemoney 300 updatemoneybox +.if OW_SHOW_ITEM_DESCRIPTIONS != OW_ITEM_DESCRIPTIONS_OFF + hidemoneybox + giveitem ITEM_SODA_POP +.else giveitem ITEM_SODA_POP hidemoneybox +.endif release end diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 4f4f723f1c..fc9abe960d 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -176,6 +176,8 @@ BerryTree_EventScript_PickBerry:: special IncrementDailyPickedBerries special ObjectEventInteractionRemoveBerryTree message BerryTree_Text_PickedTheBerry + delay 10 + showberrydescription playfanfare MUS_OBTAIN_BERRY waitmessage waitfanfare @@ -183,6 +185,7 @@ BerryTree_EventScript_PickBerry:: message BerryTree_Text_PutAwayBerry waitmessage waitbuttonpress + hideitemdescription release end diff --git a/data/scripts/obtain_item.inc b/data/scripts/obtain_item.inc index d052fa7004..c54b2f8dc5 100644 --- a/data/scripts/obtain_item.inc +++ b/data/scripts/obtain_item.inc @@ -2,6 +2,7 @@ .set AMOUNT, VAR_0x8001 Std_ObtainItem:: + copyvar VAR_0x8006, ITEMID additem ITEMID, AMOUNT copyvar VAR_0x8007, VAR_RESULT call EventScript_ObtainItemMessage @@ -58,8 +59,11 @@ EventScript_ObtainedItem:: EventScript_ObtainedItemMessage: message gText_ObtainedTheItem EventScript_ContinueObtainedItem: + delay 10 + showitemdescription waitfanfare msgbox gText_PutItemInPocket, MSGBOX_DEFAULT + hideitemdescription setvar VAR_RESULT, TRUE return @@ -103,6 +107,7 @@ Std_FindItem:: lock faceplayer waitse + copyvar VAR_0x8006, ITEMID copyvar VAR_0x8004, ITEMID copyvar VAR_0x8005, AMOUNT checkitemspace ITEMID, AMOUNT @@ -118,20 +123,25 @@ Std_FindItem:: EventScript_PickUpItem:: removeobject VAR_LAST_TALKED additem VAR_0x8004, VAR_0x8005 + copyvar VAR_0x8006 VAR_0x8004 specialvar VAR_RESULT, BufferTMHMMoveName copyvar VAR_0x8008, VAR_RESULT call_if_eq VAR_0x8008, TRUE, EventScript_FoundTMHM call_if_eq VAR_0x8008, FALSE, EventScript_FoundItem + delay 10 + showitemdescription waitfanfare waitmessage bufferitemnameplural STR_VAR_2, VAR_0x8004, VAR_0x8005 pyramid_inchallenge goto_if_eq VAR_RESULT, TRUE, EventScript_PutBattlePyramidItemInBag msgbox gText_PutItemInPocket, MSGBOX_DEFAULT + hideitemdescription return EventScript_PutBattlePyramidItemInBag:: msgbox gText_PlayerPutItemInBag, MSGBOX_DEFAULT + hideitemdescription return EventScript_FoundTMHM:: @@ -165,6 +175,7 @@ EventScript_NoRoomToPickUpItem:: EventScript_HiddenItemScript:: lockall waitse + copyvar VAR_0x8006, VAR_0x8005 additem VAR_0x8005 copyvar VAR_0x8007, VAR_RESULT bufferitemnameplural STR_VAR_2, VAR_0x8005, 1 @@ -194,11 +205,14 @@ EventScript_FoundHiddenItem:: end EventScript_PutHiddenItemInPocket:: + delay 10 + showitemdescription waitmessage waitfanfare bufferitemnameplural STR_VAR_2, VAR_0x8004, 1 copyvar VAR_0x8004, VAR_0x8008 msgbox gText_PutItemInPocket, MSGBOX_DEFAULT + hideitemdescription special TryPutTreasureInvestigatorsOnAir special SetHiddenItemFlag releaseall diff --git a/include/config/overworld.h b/include/config/overworld.h index 63479f1831..cebbe5b34b 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -10,6 +10,12 @@ #define OW_HIDE_REPEAT_MAP_POPUP FALSE // If enabled, map popups will not appear if entering a map with the same Map Section Id as the last. #define OW_FRLG_WHITEOUT FALSE // If enabled, shows an additional whiteout message and post whiteout event script with healing NPC. +// Item Obtain Description Box +#define OW_ITEM_DESCRIPTIONS_OFF 0 // never show descriptions +#define OW_ITEM_DESCRIPTIONS_FIRST_TIME 1 // show first time (** SAVE-BREAKING - see struct SaveBlock3 **) +#define OW_ITEM_DESCRIPTIONS_ALWAYS 2 // always show description +#define OW_SHOW_ITEM_DESCRIPTIONS OW_ITEM_DESCRIPTIONS_OFF // If enabled, item descriptions/images will be shown when finding items. + // These generational defines only make a distinction for Berries and the OW_PC_MOVE_ORDER #define GEN_6_XY GEN_6 #define GEN_6_ORAS GEN_LATEST + 1 diff --git a/include/global.h b/include/global.h index 783a913106..86ada60364 100644 --- a/include/global.h +++ b/include/global.h @@ -200,12 +200,17 @@ struct Time /*0x04*/ s8 seconds; }; +#include "constants/items.h" +#define ITEM_FLAGS_COUNT ((ITEMS_COUNT / 8) + ((ITEMS_COUNT % 8) ? 1 : 0)) struct SaveBlock3 { #if OW_USE_FAKE_RTC struct Time fakeRTC; #endif +#if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_FIRST_TIME + u8 itemFlags[ITEM_FLAGS_COUNT]; +#endif }; extern struct SaveBlock3 *gSaveBlock3Ptr; diff --git a/include/overworld.h b/include/overworld.h index bda2046ec7..3e9dbc30b6 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -155,4 +155,12 @@ bool32 Overworld_SendKeysToLinkIsRunning(void); bool32 IsSendingKeysOverCable(void); void ClearLinkPlayerObjectEvents(void); +// Item Description Headers +enum ItemObtainFlags +{ + FLAG_GET_ITEM_OBTAINED, + FLAG_SET_ITEM_OBTAINED, +}; +bool8 GetSetItemObtained(u16 item, enum ItemObtainFlags caseId); + #endif // GUARD_OVERWORLD_H diff --git a/src/berry.c b/src/berry.c index 1a1c3b7f1f..5c23623e3b 100644 --- a/src/berry.c +++ b/src/berry.c @@ -2144,6 +2144,8 @@ void ObjectEventInteractionGetBerryCountString(void) u8 treeId = GetObjectEventBerryTreeId(gSelectedObjectEvent); u8 berry = GetBerryTypeByBerryTreeId(treeId); u8 count = GetBerryCountByBerryTreeId(treeId); + + gSpecialVar_0x8006 = BerryTypeToItemId(berry); CopyItemNameHandlePlural(BerryTypeToItemId(berry), gStringVar1, count); berry = GetTreeMutationValue(treeId); if (berry > 0) diff --git a/src/overworld.c b/src/overworld.c index babdfad7b6..2bb49591bb 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -24,6 +24,8 @@ #include "gpu_regs.h" #include "heal_location.h" #include "io_reg.h" +#include "item.h" +#include "item_icon.h" #include "link.h" #include "link_rfu.h" #include "load_save.h" @@ -51,6 +53,7 @@ #include "secret_base.h" #include "sound.h" #include "start_menu.h" +#include "string_util.h" #include "task.h" #include "tileset_anims.h" #include "time_events.h" @@ -3290,3 +3293,207 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) sprite->data[7]++; } } + +// ---------------- +// Item Header Descriptions +// Item Description Header + +#define ITEM_ICON_X 26 +#define ITEM_ICON_Y 24 +#define ITEM_TAG 0x2722 //same as money label + +bool8 GetSetItemObtained(u16 item, enum ItemObtainFlags caseId) +{ +#if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_FIRST_TIME + u8 index = item / 8; + u8 bit = item % 8; + u8 mask = 1 << bit; + switch (caseId) + { + case FLAG_GET_ITEM_OBTAINED: + return gSaveBlock3Ptr->itemFlags[index] & mask; + case FLAG_SET_ITEM_OBTAINED: + gSaveBlock3Ptr->itemFlags[index] |= mask; + return TRUE; + } +#endif + return FALSE; +} + +#if OW_SHOW_ITEM_DESCRIPTIONS != OW_ITEM_DESCRIPTIONS_OFF + +EWRAM_DATA static u8 sHeaderBoxWindowId = 0; +EWRAM_DATA u8 sItemIconSpriteId = 0; +EWRAM_DATA u8 sItemIconSpriteId2 = 0; + +static void ShowItemIconSprite(u16 item, bool8 firstTime, bool8 flash); +static void DestroyItemIconSprite(void); + +static u8 ReformatItemDescription(u16 item, u8 *dest) +{ + u8 count = 0; + u8 numLines = 1; + u8 maxChars = 32; + u8 *desc = (u8 *)gItemsInfo[item].description; + + while (*desc != EOS) + { + if (count >= maxChars) + { + while (*desc != CHAR_SPACE && *desc != CHAR_NEWLINE) + { + *dest = *desc; //finish word + dest++; + desc++; + } + + *dest = CHAR_NEWLINE; + count = 0; + numLines++; + dest++; + desc++; + continue; + } + + *dest = *desc; + if (*desc == CHAR_NEWLINE) + { + *dest = CHAR_SPACE; + } + + dest++; + desc++; + count++; + } + + // finish string + *dest = EOS; + return numLines; +} + +void ScriptShowItemDescription(struct ScriptContext *ctx) +{ + u8 headerType = ScriptReadByte(ctx); + struct WindowTemplate template; + u16 item = gSpecialVar_0x8006; + u8 textY; + u8 *dst; + bool8 handleFlash = FALSE; + + if (GetFlashLevel() > 0 || InBattlePyramid_()) + handleFlash = TRUE; + + if (headerType == 1) // berry + dst = gStringVar3; + else + dst = gStringVar1; + + if (GetSetItemObtained(item, FLAG_GET_ITEM_OBTAINED)) + { + ShowItemIconSprite(item, FALSE, handleFlash); + return; //no box if item obtained previously + } + + SetWindowTemplateFields(&template, 0, 1, 1, 28, 3, 15, 8); + sHeaderBoxWindowId = AddWindow(&template); + FillWindowPixelBuffer(sHeaderBoxWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sHeaderBoxWindowId); + CopyWindowToVram(sHeaderBoxWindowId, 3); + SetStandardWindowBorderStyle(sHeaderBoxWindowId, FALSE); + DrawStdFrameWithCustomTileAndPalette(sHeaderBoxWindowId, FALSE, 0x214, 14); + + if (ReformatItemDescription(item, dst) == 1) + textY = 4; + else + textY = 0; + + ShowItemIconSprite(item, TRUE, handleFlash); + AddTextPrinterParameterized(sHeaderBoxWindowId, 0, dst, ITEM_ICON_X + 2, textY, 0, NULL); +} + +void ScriptHideItemDescription(struct ScriptContext *ctx) +{ + DestroyItemIconSprite(); + + if (!GetSetItemObtained(gSpecialVar_0x8006, FLAG_GET_ITEM_OBTAINED)) + { + //header box only exists if haven't seen item before + GetSetItemObtained(gSpecialVar_0x8006, FLAG_SET_ITEM_OBTAINED); + ClearStdWindowAndFrameToTransparent(sHeaderBoxWindowId, FALSE); + CopyWindowToVram(sHeaderBoxWindowId, 3); + RemoveWindow(sHeaderBoxWindowId); + } +} + +static void ShowItemIconSprite(u16 item, bool8 firstTime, bool8 flash) +{ + s16 x = 0, y = 0; + u8 iconSpriteId; + u8 spriteId2 = MAX_SPRITES; + + if (flash) + { + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuRegBits(REG_OFFSET_WINOUT, WINOUT_WINOBJ_OBJ); + } + + iconSpriteId = AddItemIconSprite(ITEM_TAG, ITEM_TAG, item); + if (flash) + spriteId2 = AddItemIconSprite(ITEM_TAG, ITEM_TAG, item); + if (iconSpriteId != MAX_SPRITES) + { + if (!firstTime) + { + //show in message box + x = 213; + y = 140; + } + else + { + // show in header box + x = ITEM_ICON_X; + y = ITEM_ICON_Y; + } + + gSprites[iconSpriteId].x2 = x; + gSprites[iconSpriteId].y2 = y; + gSprites[iconSpriteId].oam.priority = 0; + } + + if (spriteId2 != MAX_SPRITES) + { + gSprites[spriteId2].x2 = x; + gSprites[spriteId2].y2 = y; + gSprites[spriteId2].oam.priority = 0; + gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_WINDOW; + sItemIconSpriteId2 = spriteId2; + } + + sItemIconSpriteId = iconSpriteId; +} + +static void DestroyItemIconSprite(void) +{ + FreeSpriteTilesByTag(ITEM_TAG); + FreeSpritePaletteByTag(ITEM_TAG); + FreeSpriteOamMatrix(&gSprites[sItemIconSpriteId]); + DestroySprite(&gSprites[sItemIconSpriteId]); + + if ((GetFlashLevel() > 0 || InBattlePyramid_()) && sItemIconSpriteId2 != MAX_SPRITES) + { + FreeSpriteOamMatrix(&gSprites[sItemIconSpriteId2]); + DestroySprite(&gSprites[sItemIconSpriteId2]); + } +} + +#else +void ScriptShowItemDescription(struct ScriptContext *ctx) +{ + (void) ScriptReadByte(ctx); +} +void ScriptHideItemDescription(struct ScriptContext *ctx) +{ +} +#endif // OW_SHOW_ITEM_DESCRIPTIONS + + diff --git a/src/shop.c b/src/shop.c index 77f2039e3b..a343bab0d3 100644 --- a/src/shop.c +++ b/src/shop.c @@ -1127,6 +1127,7 @@ static void BuyMenuTryMakePurchase(u8 taskId) { if (AddBagItem(tItemId, tItemCount) == TRUE) { + GetSetItemObtained(tItemId, FLAG_SET_ITEM_OBTAINED); RecordItemPurchase(taskId); BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney); } From 7c7fd905bae849bc1244a66545e10677fed763dd Mon Sep 17 00:00:00 2001 From: Hiram Anderson <37224753+hjk321@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:54:03 -0600 Subject: [PATCH 147/544] RTC-based wild encounters (#5313) * Some jsonproc string utility functions Adds stringContains, stringStartsWith and stringEndsWith for use in jsonproc. * Time-based wild encounters This adds some configs that allows users to define wild encounter groups on a map that are automatically cycled through depending on the time of day. --- include/config/overworld.h | 7 +++++ include/wild_encounter.h | 1 + src/data/wild_encounters.json.txt | 2 ++ src/wild_encounter.c | 45 +++++++++++++++++++++++++++++-- tools/jsonproc/jsonproc.cpp | 21 +++++++++++++++ 5 files changed, 74 insertions(+), 2 deletions(-) diff --git a/include/config/overworld.h b/include/config/overworld.h index cebbe5b34b..8be52abfb5 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -74,6 +74,13 @@ #define OW_USE_FAKE_RTC FALSE // When TRUE, seconds on the in-game clock will only advance once every 60 playTimeVBlanks (every 60 frames). #define OW_ALTERED_TIME_RATIO GEN_LATEST // In GEN_8_PLA, the time in game moves forward 60 seconds for every second in the RTC. In GEN_9, it is 20 seconds. This has no effect if OW_USE_FAKE_RTC is FALSE. +// Time-based wild Pokemon encounters - Allows you to create additional encounter groups in wild_encounters.json (or in porymap). +// The groups are processed by base label's suffix. For example, "gRoute101" (no suffix) contains daytime encounters, and "gRoute101_Night" contains nighttime encounters. +// Not every group needs to be defined for every map - you could for example omit them inside caves and it would fall back to the unsuffixed daytime encounter group. +#define OW_TIME_BASED_WILD_ENCOUNTERS FALSE // Enables the system. If disabled, all suffixes are ignored and the first encounter group found for a map will be used for wild encounters. +#define OW_ENABLE_MORNING_WILD_ENCOUNTERS FALSE // If true, allows definition of morning encounter groups such as "gRoute101_Morning". Otherwise, morning is considered to be day for encounters. No effect if OW_TIME_BASED_WILD_ENCOUNTERS is false. +#define OW_ENABLE_EVENING_WILD_ENCOUNTERS FALSE // If true, allows definition of evening encounter groups such as "gRoute101_Evening". Otherwise, evening is considered to be night for encounters. No effect if OW_TIME_BASED_WILD_ENCOUNTERS is false. + // 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/wild_encounter.h b/include/wild_encounter.h index 63289f081c..fb0f5ab00e 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -20,6 +20,7 @@ struct WildPokemonHeader { u8 mapGroup; u8 mapNum; + u8 timeOfDay; const struct WildPokemonInfo *landMonsInfo; const struct WildPokemonInfo *waterMonsInfo; const struct WildPokemonInfo *rockSmashMonsInfo; diff --git a/src/data/wild_encounters.json.txt b/src/data/wild_encounters.json.txt index bf848249f0..55dd20cd52 100755 --- a/src/data/wild_encounters.json.txt +++ b/src/data/wild_encounters.json.txt @@ -72,6 +72,7 @@ const struct WildPokemonHeader {{ wild_encounter_group.label }}[] = { .mapGroup = {% if wild_encounter_group.for_maps %}MAP_GROUP({{ removePrefix(encounter.map, "MAP_") }}){% else %}0{% endif %}, .mapNum = {% if wild_encounter_group.for_maps %}MAP_NUM({{ removePrefix(encounter.map, "MAP_") }}){% else %}{{ loop.index1 }}{% endif %}, + .timeOfDay = {% if stringEndsWith(encounter.base_label, "_Night") or stringContains(encounter.base_label, "_Night_") %}TIME_NIGHT{% else if stringEndsWith(encounter.base_label, "_Morning") or stringContains(encounter.base_label, "_Morning_") %}TIME_MORNING{% else if stringEndsWith(encounter.base_label, "_Evening") or stringContains(encounter.base_label, "_Evening_") %}TIME_EVENING{% else %}TIME_DAY{% endif %}, .landMonsInfo = {% if existsIn(encounter, "land_mons") %}&{{ encounter.base_label }}_LandMonsInfo{% else %}NULL{% endif %}, .waterMonsInfo = {% if existsIn(encounter, "water_mons") %}&{{ encounter.base_label }}_WaterMonsInfo{% else %}NULL{% endif %}, .rockSmashMonsInfo = {% if existsIn(encounter, "rock_smash_mons") %}&{{ encounter.base_label }}_RockSmashMonsInfo{% else %}NULL{% endif %}, @@ -81,6 +82,7 @@ const struct WildPokemonHeader {{ wild_encounter_group.label }}[] = { .mapGroup = MAP_GROUP(UNDEFINED), .mapNum = MAP_NUM(UNDEFINED), + .timeOfDay = TIME_DAY, .landMonsInfo = NULL, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 033eec56da..3cfdfb1191 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -11,6 +11,7 @@ #include "pokeblock.h" #include "battle_setup.h" #include "roamer.h" +#include "rtc.h" #include "tv.h" #include "link.h" #include "script.h" @@ -354,9 +355,32 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon, u8 wildMonIn } } +static bool8 IsExactTimeOfDayMatchForWildEncounters(u8 currentTimeOfDay, u8 encounterTimeOfDay) +{ + switch (currentTimeOfDay) + { + case TIME_MORNING: + if (OW_ENABLE_MORNING_WILD_ENCOUNTERS) + return encounterTimeOfDay == TIME_MORNING; + // fallthrough + case TIME_DAY: + return encounterTimeOfDay == TIME_DAY; + case TIME_EVENING: + if (OW_ENABLE_EVENING_WILD_ENCOUNTERS) + return encounterTimeOfDay == TIME_EVENING; + // fallthrough + case TIME_NIGHT: + return encounterTimeOfDay == TIME_NIGHT; + } + return FALSE; +} + static u16 GetCurrentMapWildMonHeaderId(void) { u16 i; + u8 currentTimeOfDay = GetTimeOfDay(); + u16 dayId = HEADER_NONE; + u16 nightId = HEADER_NONE; for (i = 0; ; i++) { @@ -375,13 +399,30 @@ static u16 GetCurrentMapWildMonHeaderId(void) alteringCaveId = 0; i += alteringCaveId; + return i; // Altering cave is not affected by time-of-day encounters. } - return i; + if (OW_TIME_BASED_WILD_ENCOUNTERS) + { + if (IsExactTimeOfDayMatchForWildEncounters(currentTimeOfDay, gWildMonHeaders[i].timeOfDay)) + return i; + else if (gWildMonHeaders[i].timeOfDay == TIME_DAY && dayId == HEADER_NONE) + dayId = i; + else if (gWildMonHeaders[i].timeOfDay == TIME_NIGHT && nightId == HEADER_NONE) + nightId = i; + } + else + return i; } } - return HEADER_NONE; + if (!OW_TIME_BASED_WILD_ENCOUNTERS) + return HEADER_NONE; + + // Exact match for time of day was not found. We fall back to other encounter groups for this map + if (currentTimeOfDay == TIME_EVENING && OW_ENABLE_EVENING_WILD_ENCOUNTERS && nightId != HEADER_NONE) + return nightId; + return dayId; } u8 PickWildMonNature(void) diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp index 9ef23cd43e..5e661e40d3 100755 --- a/tools/jsonproc/jsonproc.cpp +++ b/tools/jsonproc/jsonproc.cpp @@ -118,6 +118,27 @@ int main(int argc, char *argv[]) return str; }); + env.add_callback("stringContains", 2, [](Arguments& args) { + string str = args.at(0)->get(); + string check = args.at(1)->get(); + + return str.find(check) != std::string::npos; + }); + + env.add_callback("stringStartsWith", 2, [](Arguments& args) { + string str = args.at(0)->get(); + string check = args.at(1)->get(); + + return str.find(check) == 0; + }); + + env.add_callback("stringEndsWith", 2, [](Arguments& args) { + string str = args.at(0)->get(); + string check = args.at(1)->get(); + + return str.rfind(check) == (str.length() - check.length()); + }); + try { env.write_with_json_file(templateFilepath, jsonfilepath, outputFilepath); From 720bc6464dfd6f7c5502a48729633b1151d10053 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 4 Sep 2024 05:12:55 -0400 Subject: [PATCH 148/544] AI_FLAG_SETUP_FIRST_TURN Rename and Clarifications (#5310) * Rename AI_FLAG_SETUP_FIRST_TURN * Update all AI flags with comments --- docs/ai_flags.md | 4 ++-- include/constants/battle_ai.h | 35 ++++++++++++++++++----------------- src/battle_ai_main.c | 6 +++--- src/data/trainers.h | 28 ++++++++++++++-------------- src/data/trainers.party | 28 ++++++++++++++-------------- 5 files changed, 51 insertions(+), 50 deletions(-) diff --git a/docs/ai_flags.md b/docs/ai_flags.md index bb7b1b7444..8ba2e33253 100644 --- a/docs/ai_flags.md +++ b/docs/ai_flags.md @@ -42,8 +42,8 @@ This flag is divided into two components to calculate the best available move fo This is different to `AI_FLAG_CHECK_BAD_MOVE` as it calculates how poor a move is and not whether it will fail or not. -## `AI_FLAG_SETUP_FIRST_TURN` -AI will prioritize using setup moves on the first turn. These include stat buffs, field effects, status moves, etc. +## `AI_FLAG_FORCE_SETUP_FIRST_TURN` +AI will prioritize using setup moves on the first turn at the expense of all else. These include stat buffs, field effects, status moves, etc. AI_FLAG_CHECK_VIABILITY will instead do this when the AI determines it makes sense. This is just a flat increase without any consideration of whether it makes sense to use the move or not. For better move choice quality for those moves, `AI_FLAG_CHECK_VIABILITY` should be used. diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 75802bad49..ca469cadeb 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -25,28 +25,29 @@ #define AI_EFFECTIVENESS_x0 0 // AI Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts -#define AI_FLAG_CHECK_BAD_MOVE (1 << 0) -#define AI_FLAG_TRY_TO_FAINT (1 << 1) -#define AI_FLAG_CHECK_VIABILITY (1 << 2) -#define AI_FLAG_SETUP_FIRST_TURN (1 << 3) -#define AI_FLAG_RISKY (1 << 4) -#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5) -#define AI_FLAG_PREFER_BATON_PASS (1 << 6) -#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // Automatically set for double battles, handles AI behaviour with partner -#define AI_FLAG_HP_AWARE (1 << 8) -#define AI_FLAG_POWERFUL_STATUS (1 << 9) // AI prefers moves that set up field effects or side statuses, even if the user can faint the target +// See docs/ai_flags.md for more details. +#define AI_FLAG_CHECK_BAD_MOVE (1 << 0) // AI will avoid using moves that are likely to fail or be ineffective in the current situation. +#define AI_FLAG_TRY_TO_FAINT (1 << 1) // AI will prioritize KOing the player's mon if able. +#define AI_FLAG_CHECK_VIABILITY (1 << 2) // AI damaging moves and move effects to determine the best available move in the current situation. +#define AI_FLAG_FORCE_SETUP_FIRST_TURN (1 << 3) // AI will prioritize using setup moves on the first turn at the expensve of all else. AI_FLAG_CHECK_VIABILITY will instead do this when the AI determines it makes sense. +#define AI_FLAG_RISKY (1 << 4) // AI will generally behave more recklessly, prioritizing damage over accuracy, explosions, etc. +#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5) // AI adds score bonus to any move the AI has that either OHKOs or 2HKOs the player. +#define AI_FLAG_PREFER_BATON_PASS (1 << 6) // AI prefers raising its own stats and setting for / using Baton Pass. +#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // Automatically set for double battles, handles AI behaviour with partner. +#define AI_FLAG_HP_AWARE (1 << 8) // AI will favour certain move effects based on how much remaining HP it and the player's mon have. +#define AI_FLAG_POWERFUL_STATUS (1 << 9) // AI prefers moves that set up field effects or side statuses, even if the user can faint the target. // New, Trainer Handicap Flags -#define AI_FLAG_NEGATE_UNAWARE (1 << 10) // AI is NOT aware of negating effects like wonder room, mold breaker, etc -#define AI_FLAG_WILL_SUICIDE (1 << 11) // AI will use explosion / self destruct / final gambit / etc +#define AI_FLAG_NEGATE_UNAWARE (1 << 10) // AI is NOT aware of negating effects like wonder room, mold breaker, etc. +#define AI_FLAG_WILL_SUICIDE (1 << 11) // AI will use explosion / self destruct / final gambit / etc. // New, Trainer Strategy Flags -#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves -#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished +#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves. +#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished. #define AI_FLAG_SMART_SWITCHING (1 << 14) // AI includes a lot more switching checks. Automatically includes AI_FLAG_SMART_MON_CHOICES. #define AI_FLAG_ACE_POKEMON (1 << 15) // 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 << 16) // AI has full knowledge of player moves, abilities, hold items +#define AI_FLAG_OMNISCIENT (1 << 16) // AI has full knowledge of player moves, abilities, hold items. #define AI_FLAG_SMART_MON_CHOICES (1 << 17) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING. -#define AI_FLAG_CONSERVATIVE (1 << 18) // AI assumes all moves will low roll damage -#define AI_FLAG_SEQUENCE_SWITCHING (1 << 19) // AI switches in mons in exactly party order, and never switches mid-battle +#define AI_FLAG_CONSERVATIVE (1 << 18) // AI assumes all moves will low roll damage. +#define AI_FLAG_SEQUENCE_SWITCHING (1 << 19) // AI switches in mons in exactly party order, and never switches mid-battle. #define AI_FLAG_COUNT 20 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index b622cf273a..ffaa058a08 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -46,7 +46,7 @@ EWRAM_DATA AiScoreFunc sDynamicAiFunc = NULL; static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); -static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); +static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_PreferStrongestMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); @@ -64,7 +64,7 @@ static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) = [0] = AI_CheckBadMove, // AI_FLAG_CHECK_BAD_MOVE [1] = AI_TryToFaint, // AI_FLAG_TRY_TO_FAINT [2] = AI_CheckViability, // AI_FLAG_CHECK_VIABILITY - [3] = AI_SetupFirstTurn, // AI_FLAG_SETUP_FIRST_TURN + [3] = AI_ForceSetupFirstTurn, // AI_FLAG_FORCE_SETUP_FIRST_TURN [4] = AI_Risky, // AI_FLAG_RISKY [5] = AI_PreferStrongestMove, // AI_FLAG_PREFER_STRONGEST_MOVE [6] = AI_PreferBatonPass, // AI_FLAG_PREFER_BATON_PASS @@ -4821,7 +4821,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score } // Effects that are encouraged on the first turn of battle -static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) +static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u8 i; if (IS_TARGETING_PARTNER(battlerAtk, battlerDef) diff --git a/src/data/trainers.h b/src/data/trainers.h index c1907cfee5..ebc85e9cab 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -4044,7 +4044,7 @@ F_TRAINER_FEMALE | #line 1692 .doubleBattle = FALSE, #line 1693 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -4085,7 +4085,7 @@ F_TRAINER_FEMALE | #line 1708 .doubleBattle = FALSE, #line 1709 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -4164,7 +4164,7 @@ F_TRAINER_FEMALE | #line 1742 .doubleBattle = FALSE, #line 1743 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -11394,7 +11394,7 @@ F_TRAINER_FEMALE | #line 4594 .doubleBattle = FALSE, #line 4595 - .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_FORCE_SETUP_FIRST_TURN, #line 4596 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PURPLE, @@ -23880,7 +23880,7 @@ F_TRAINER_FEMALE | #line 9565 .doubleBattle = FALSE, #line 9566 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -25772,7 +25772,7 @@ F_TRAINER_FEMALE | #line 10290 .doubleBattle = FALSE, #line 10291 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -25840,7 +25840,7 @@ F_TRAINER_FEMALE | #line 10318 .doubleBattle = FALSE, #line 10319 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -25921,7 +25921,7 @@ F_TRAINER_FEMALE | #line 10350 .doubleBattle = FALSE, #line 10351 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -25968,7 +25968,7 @@ F_TRAINER_FEMALE | #line 10368 .doubleBattle = FALSE, #line 10369 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 3, .party = (const struct TrainerMon[]) { @@ -26073,7 +26073,7 @@ F_TRAINER_FEMALE | #line 10408 .doubleBattle = FALSE, #line 10409 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -26167,7 +26167,7 @@ F_TRAINER_FEMALE | #line 10444 .doubleBattle = FALSE, #line 10445 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -27472,7 +27472,7 @@ F_TRAINER_FEMALE | #line 10958 .doubleBattle = FALSE, #line 10959 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -27560,7 +27560,7 @@ F_TRAINER_FEMALE | #line 10992 .doubleBattle = FALSE, #line 10993 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { @@ -31937,7 +31937,7 @@ F_TRAINER_FEMALE | #line 12747 .doubleBattle = TRUE, #line 12748 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { diff --git a/src/data/trainers.party b/src/data/trainers.party index 34a736429e..14304518b6 100644 --- a/src/data/trainers.party +++ b/src/data/trainers.party @@ -1690,7 +1690,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Zangoose Level: 26 @@ -1706,7 +1706,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Mawile Level: 29 @@ -1740,7 +1740,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Lairon Level: 45 @@ -4592,7 +4592,7 @@ Gender: Male Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Basic Trainer / Setup First Turn +AI: Basic Trainer / Force Setup First Turn Mugshot: Purple Mightyena @@ -9563,7 +9563,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Torchic Level: 5 @@ -10288,7 +10288,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Breloom Level: 31 @@ -10316,7 +10316,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Breloom Level: 37 @@ -10348,7 +10348,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Gloom Level: 26 @@ -10366,7 +10366,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Lotad Level: 28 @@ -10406,7 +10406,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Gloom Level: 30 @@ -10442,7 +10442,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Gloom Level: 36 @@ -10956,7 +10956,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Kecleon Level: 33 @@ -10990,7 +10990,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Wingull Level: 13 @@ -12745,7 +12745,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Medicham Level: 49 From 6e3ce9db2feca1823a57472430aa486a2e64fd82 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Wed, 4 Sep 2024 11:21:40 +0200 Subject: [PATCH 149/544] Move battle anim arrays to C (#5306) * move battle anim arrays to c * use ARRAY_COUNT instead * remove B_ANIM_STATUS_WRAPPED * move anim rename * rename battle anims status/general/special --- data/battle_anim_scripts.s | 2283 +++++++++++++++---------------- include/battle_anim_scripts.h | 1948 +++++++++++++------------- include/constants/battle_anim.h | 13 +- src/battle_anim.c | 103 +- src/battle_gfx_sfx_util.c | 2 - src/data/moves_info.h | 1872 ++++++++++++------------- src/pokemon.c | 2 +- 7 files changed, 3150 insertions(+), 3073 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index fdc7a59e4e..622dd24f18 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -14,92 +14,8 @@ .section script_data, "aw", %progbits - .align 2 -gMovesWithQuietBGM:: - .2byte MOVE_SING, MOVE_PERISH_SONG, MOVE_GRASS_WHISTLE, 0xFFFF - - .align 2 -gBattleAnims_StatusConditions:: - .4byte Status_Poison @ B_ANIM_STATUS_PSN - .4byte Status_Confusion @ B_ANIM_STATUS_CONFUSION - .4byte Status_Burn @ B_ANIM_STATUS_BRN - .4byte Status_Infatuation @ B_ANIM_STATUS_INFATUATION - .4byte Status_Sleep @ B_ANIM_STATUS_SLP - .4byte Status_Paralysis @ B_ANIM_STATUS_PRZ - .4byte Status_Freeze @ B_ANIM_STATUS_FRZ - .4byte Status_Curse @ B_ANIM_STATUS_CURSED - .4byte Status_Nightmare @ B_ANIM_STATUS_NIGHTMARE - .4byte Status_Powder - - .align 2 -gBattleAnims_General:: - .4byte General_StatsChange @ B_ANIM_STATS_CHANGE - .4byte General_SubstituteFade @ B_ANIM_SUBSTITUTE_FADE - .4byte General_SubstituteAppear @ B_ANIM_SUBSTITUTE_APPEAR - .4byte General_PokeblockThrow @ B_ANIM_POKEBLOCK_THROW - .4byte General_ItemKnockoff @ B_ANIM_ITEM_KNOCKOFF - .4byte General_TurnTrap @ B_ANIM_TURN_TRAP - .4byte General_HeldItemEffect @ B_ANIM_HELD_ITEM_EFFECT - .4byte General_SmokeballEscape @ B_ANIM_SMOKEBALL_ESCAPE - .4byte General_HangedOn @ B_ANIM_HANGED_ON - .4byte General_Rain @ B_ANIM_RAIN_CONTINUES - .4byte General_Sun @ B_ANIM_SUN_CONTINUES - .4byte General_Sandstorm @ B_ANIM_SANDSTORM_CONTINUES - .4byte General_Hail @ B_ANIM_HAIL_CONTINUES - .4byte General_LeechSeedDrain @ B_ANIM_LEECH_SEED_DRAIN - .4byte General_MonHit @ B_ANIM_MON_HIT - .4byte General_ItemSteal @ B_ANIM_ITEM_STEAL - .4byte General_SnatchMove @ B_ANIM_SNATCH_MOVE - .4byte General_FutureSightHit @ B_ANIM_FUTURE_SIGHT_HIT - .4byte General_DoomDesireHit @ B_ANIM_DOOM_DESIRE_HIT - .4byte General_FocusPunchSetUp @ B_ANIM_FOCUS_PUNCH_SETUP - .4byte General_IngrainHeal @ B_ANIM_INGRAIN_HEAL - .4byte General_WishHeal @ B_ANIM_WISH_HEAL - .4byte General_MegaEvolution @ B_ANIM_MEGA_EVOLUTION - .4byte General_IllusionOff @ B_ANIM_ILLUSION_OFF - .4byte General_FormChange @ B_ANIM_FORM_CHANGE - .4byte General_SlideOffScreen @ B_ANIM_SLIDE_OFFSCREEN - .4byte General_RestoreBg @ B_ANIM_RESTORE_BG - .4byte General_TotemFlare @ B_ANIM_TOTEM_FLARE - .4byte General_GulpMissile @ B_ANIM_GULP_MISSILE - .4byte General_StrongWinds @ B_ANIM_STRONG_WINDS - .4byte General_PrimalReversion @ B_ANIM_PRIMAL_REVERSION - .4byte General_AquaRingHeal @ B_ANIM_AQUA_RING_HEAL - .4byte General_BeakBlastSetUp @ B_ANIM_BEAK_BLAST_SETUP - .4byte General_ShellTrapSetUp @ B_ANIM_SHELL_TRAP_SETUP - .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE - .4byte General_AffectionHangedOn @ B_ANIM_AFFECTION_HANGED_ON - .4byte General_Snow @ B_ANIM_SNOW_CONTINUES - .4byte General_UltraBurst @ B_ANIM_ULTRA_BURST - .4byte General_SaltCureDamage @ B_ANIM_SALT_CURE_DAMAGE - .4byte General_DynamaxGrowth @ B_ANIM_DYNAMAX_GROWTH - .4byte General_SetWeather @ B_ANIM_MAX_SET_WEATHER - .4byte General_SyrupBombSpeedDrop @ B_ANIM_SYRUP_BOMB_SPEED_DROP - .4byte General_Rainbow @ B_ANIM_RAINBOW - .4byte General_SeaOfFire @ B_ANIM_SEA_OF_FIRE - .4byte General_Swamp @ B_ANIM_SWAMP - .4byte General_TrickRoom @ B_ANIM_TRICK_ROOM - .4byte General_WonderRoom @ B_ANIM_WONDER_ROOM - .4byte General_MagicRoom @ B_ANIM_MAGIC_ROOM - .4byte General_Tailwind @ B_ANIM_TAILLWIND - .4byte General_Fog @ B_ANIM_FOG_CONTINUES - .4byte General_TeraCharge @ B_ANIM_TERA_CHARGE - .4byte General_TeraActivate @ B_ANIM_TERA_ACTIVATE - .4byte General_SimpleHeal @ B_ANIM_SIMPLE_HEAL - - .align 2 -gBattleAnims_Special:: - .4byte Special_LevelUp @ B_ANIM_LVL_UP - .4byte Special_SwitchOutPlayerMon @ B_ANIM_SWITCH_OUT_PLAYER_MON - .4byte Special_SwitchOutOpponentMon @ B_ANIM_SWITCH_OUT_OPPONENT_MON - .4byte Special_BallThrow @ B_ANIM_BALL_THROW - .4byte Special_BallThrowWithTrainer @ B_ANIM_BALL_THROW_WITH_TRAINER - .4byte Special_SubstituteToMon @ B_ANIM_SUBSTITUTE_TO_MON - .4byte Special_MonToSubstitute @ B_ANIM_MON_TO_SUBSTITUTE - .4byte Special_CriticalCaptureBallThrow @ B_ANIM_CRITICAL_CAPTURE_THROW - @@@@@@@@@@@@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@@@@@@@@@@@@ -Move_ROOST:: +gBattleAnimMove_Roost:: loadspritegfx ANIM_TAG_WHITE_FEATHER loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATTACKER @@ -124,7 +40,7 @@ Move_ROOST:: waitforvisualfinish end -Move_GRAVITY:: +gBattleAnimMove_Gravity:: fadetobg BG_COSMIC waitbgfadein createvisualtask AnimTask_SetAnimTargetToAttackerOpposite, 1 @@ -145,7 +61,7 @@ Move_GRAVITY:: waitforvisualfinish end -Move_MIRACLE_EYE:: +gBattleAnimMove_MiracleEye:: loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_OPENING_EYE loadspritegfx ANIM_TAG_ROUND_WHITE_HALO @@ -163,7 +79,7 @@ Move_MIRACLE_EYE:: clearmonbg ANIM_DEF_PARTNER end -Move_WAKE_UP_SLAP:: +gBattleAnimMove_WakeUpSlap:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT @@ -183,7 +99,7 @@ Move_WAKE_UP_SLAP:: blendoff end -Move_HAMMER_ARM:: +gBattleAnimMove_HammerArm:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_SLAM_HIT @@ -207,7 +123,7 @@ Move_HAMMER_ARM:: blendoff end -Move_GYRO_BALL:: +gBattleAnimMove_GyroBall:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -237,7 +153,7 @@ Move_GYRO_BALL:: waitforvisualfinish end -Move_HEALING_WISH:: +gBattleAnimMove_HealingWish:: loadspritegfx ANIM_TAG_GREEN_SPARKLE setalpha 0, 16 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -257,7 +173,7 @@ Move_HEALING_WISH:: waitforvisualfinish end -Move_BRINE:: +gBattleAnimMove_Brine:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -271,7 +187,7 @@ Move_BRINE:: blendoff end -Move_NATURAL_GIFT:: +gBattleAnimMove_NaturalGift:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER @@ -300,7 +216,7 @@ Move_NATURAL_GIFT:: delay 1 end -Move_FEINT:: +gBattleAnimMove_Feint:: loadspritegfx ANIM_TAG_FEINT createsprite gFeintSwipeSpriteTemplate, ANIM_ATTACKER, 10, -32, 0, 15 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER @@ -314,7 +230,7 @@ Move_FEINT:: waitforvisualfinish end -Move_PLUCK:: +gBattleAnimMove_Pluck:: loadspritegfx ANIM_TAG_SEED_BROWN loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER @@ -340,7 +256,7 @@ Move_PLUCK:: waitforvisualfinish end -Move_TAILWIND:: +gBattleAnimMove_Tailwind:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER call SetHighSpeedBg @@ -374,7 +290,7 @@ Move_TAILWIND:: delay 1 end -General_Tailwind: +gBattleAnimGeneral_Tailwind:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER call SetHighSpeedBg @@ -403,7 +319,7 @@ General_Tailwind: delay 1 end -Move_ACUPRESSURE:: +gBattleAnimMove_Acupressure:: loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_SPARK_2 createsprite gAcupressureSpriteTemplate, ANIM_ATTACKER, 40, 0, -40, 40 @@ -411,7 +327,7 @@ Move_ACUPRESSURE:: call ElectricityEffect end -Move_METAL_BURST:: +gBattleAnimMove_MetalBurst:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loadspritegfx ANIM_TAG_RED_ORB loopsewithpan SE_M_TRI_ATTACK, -64, 18, 3 @@ -434,7 +350,7 @@ Move_METAL_BURST:: waitforvisualfinish end -Move_U_TURN:: +gBattleAnimMove_UTurn:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -463,7 +379,7 @@ UTurnVisible: createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE goto UTurnContinue -Move_CLOSE_COMBAT:: +gBattleAnimMove_CloseCombat:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET call SetHighSpeedBg @@ -499,7 +415,7 @@ Move_CLOSE_COMBAT:: delay 1 end -Move_PAYBACK:: +gBattleAnimMove_Payback:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -531,7 +447,7 @@ Move_PAYBACK:: waitbgfadein end -Move_ASSURANCE:: +gBattleAnimMove_Assurance:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE monbg ANIM_TARGET @@ -550,7 +466,7 @@ Move_ASSURANCE:: waitbgfadein end -Move_EMBARGO:: +gBattleAnimMove_Embargo:: loadspritegfx ANIM_TAG_RED_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -572,7 +488,7 @@ EmbargoOrbs1: delay 12 return -Move_FLING:: +gBattleAnimMove_Fling:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BLACK_BALL monbg ANIM_DEF_PARTNER @@ -588,7 +504,7 @@ Move_FLING:: blendoff end -Move_PSYCHO_SHIFT:: +gBattleAnimMove_PsychoShift:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @@ -614,7 +530,7 @@ Move_PSYCHO_SHIFT:: blendoff end -Move_TRUMP_CARD:: +gBattleAnimMove_TrumpCard:: loadspritegfx ANIM_TAG_TRUMP_CARD loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_TRUMP_CARD_PARTICLES @@ -658,7 +574,7 @@ Move_TRUMP_CARD:: waitforvisualfinish end -Move_HEAL_BLOCK:: +gBattleAnimMove_HealBlock:: loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_TARGET createsoundtask SoundTask_PlaySeChangingVolume, SE_M_ABSORB_2, SOUND_PAN_TARGET, 256, -16, 0, 2 @@ -682,7 +598,7 @@ Move_HEAL_BLOCK:: clearmonbg ANIM_TARGET end -Move_WRING_OUT:: +gBattleAnimMove_WringOut:: loadspritegfx ANIM_TAG_WRING_OUT monbg ANIM_TARGET setalpha 12, 8 @@ -703,7 +619,7 @@ Move_WRING_OUT:: waitforvisualfinish end -Move_POWER_TRICK:: +gBattleAnimMove_PowerTrick:: loadspritegfx ANIM_TAG_POWER_TRICK loopsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET 0xa 0x3 createvisualtask AnimTask_UproarDistortion 0x2, 0x0 @@ -715,7 +631,7 @@ Move_POWER_TRICK:: waitforvisualfinish end -Move_GASTRO_ACID:: +gBattleAnimMove_GastroAcid:: loadspritegfx ANIM_TAG_GREEN_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, FALSE @@ -747,7 +663,7 @@ Move_GASTRO_ACID:: clearmonbg ANIM_DEF_PARTNER end -Move_LUCKY_CHANT:: +gBattleAnimMove_LuckyChant:: loadspritegfx ANIM_TAG_GOLD_STARS monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -774,10 +690,10 @@ Move_LUCKY_CHANT:: unloadspritegfx ANIM_TAG_GOLD_STARS end -Move_ME_FIRST:: +gBattleAnimMove_MeFirst:: end -Move_COPYCAT:: +gBattleAnimMove_Copycat:: loadspritegfx ANIM_TAG_GRAY_ORB loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -799,7 +715,7 @@ Move_COPYCAT:: waitforvisualfinish end -Move_POWER_SWAP:: +gBattleAnimMove_PowerSwap:: loadspritegfx ANIM_TAG_COLORED_ORBS playsewithpan SE_M_DOUBLE_TEAM, 0 createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 42, -32 @@ -841,7 +757,7 @@ Move_POWER_SWAP:: waitforvisualfinish end -Move_GUARD_SWAP:: +gBattleAnimMove_GuardSwap:: loadspritegfx ANIM_TAG_COLORED_ORBS playsewithpan SE_M_DOUBLE_TEAM, 0 createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 0, 42, -32 @@ -883,7 +799,7 @@ Move_GUARD_SWAP:: waitforvisualfinish end -Move_PUNISHMENT:: +gBattleAnimMove_Punishment:: loadspritegfx ANIM_TAG_SCRATCH loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET @@ -906,7 +822,7 @@ Move_PUNISHMENT:: blendoff end -Move_LAST_RESORT:: +gBattleAnimMove_LastResort:: fadetobg BG_COSMIC waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 2, 4, 0, 128, 0, -1 @@ -944,7 +860,7 @@ Move_LAST_RESORT:: call UnsetHighSpeedBg end -Move_WORRY_SEED:: +gBattleAnimMove_WorrySeed:: loadspritegfx ANIM_TAG_WORRY_SEED loadspritegfx ANIM_TAG_SMALL_CLOUD playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER @@ -958,7 +874,7 @@ Move_WORRY_SEED:: waitforvisualfinish end -Move_SUCKER_PUNCH:: +gBattleAnimMove_SuckerPunch:: loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 @@ -971,7 +887,7 @@ Move_SUCKER_PUNCH:: createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 end -Move_TOXIC_SPIKES:: +gBattleAnimMove_ToxicSpikes:: loadspritegfx ANIM_TAG_TOXIC_SPIKES loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER @@ -991,11 +907,11 @@ Move_TOXIC_SPIKES:: clearmonbg ANIM_DEF_PARTNER end -Move_HEART_SWAP:: +gBattleAnimMove_HeartSwap:: end -Move_AQUA_RING:: -General_AquaRingHeal: +gBattleAnimMove_AquaRing:: +gBattleAnimGeneral_AquaRingHeal:: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -1043,7 +959,7 @@ General_AquaRingHeal: blendoff end -Move_MAGNET_RISE:: +gBattleAnimMove_MagnetRise:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -1080,7 +996,7 @@ Move_MAGNET_RISE:: waitforvisualfinish end -Move_FLARE_BLITZ:: +gBattleAnimMove_FlareBlitz:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER @@ -1157,7 +1073,7 @@ Move_FLARE_BLITZ:: waitbgfadein end -Move_FORCE_PALM:: +gBattleAnimMove_ForcePalm:: loadspritegfx ANIM_TAG_SHADOW_BALL loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -1175,7 +1091,7 @@ Move_FORCE_PALM:: blendoff end -Move_AURA_SPHERE:: +gBattleAnimMove_AuraSphere:: loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATK_PARTNER @@ -1200,7 +1116,7 @@ SetAuraSphereBG: fadetobg BG_AURA_SPHERE goto SetHighSpeedBgFade -Move_ROCK_POLISH:: +gBattleAnimMove_RockPolish:: loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_SPARKLE_3 setalpha 12, 8 @@ -1267,7 +1183,7 @@ Move_ROCK_POLISH:: blendoff end -Move_POISON_JAB:: +gBattleAnimMove_PoisonJab:: loadspritegfx ANIM_TAG_PURPLE_JAB loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -1321,7 +1237,7 @@ Move_POISON_JAB:: blendoff end -Move_DARK_PULSE:: +gBattleAnimMove_DarkPulse:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_TARGET fadetobg BG_DARK @@ -1349,7 +1265,7 @@ Move_DARK_PULSE:: waitbgfadein end -Move_NIGHT_SLASH:: +gBattleAnimMove_NightSlash:: loadspritegfx ANIM_TAG_SLASH createvisualtask AnimTask_BlendNightSlash, 2, ANIM_TARGET, 2, 0, 8, 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK @@ -1369,7 +1285,7 @@ Move_NIGHT_SLASH:: waitforvisualfinish end -Move_AQUA_TAIL:: +gBattleAnimMove_AquaTail:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -1423,7 +1339,7 @@ Move_AQUA_TAIL:: blendoff end -Move_SEED_BOMB:: +gBattleAnimMove_SeedBomb:: loadspritegfx ANIM_TAG_SEED loadspritegfx ANIM_TAG_EXPLOSION createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 @@ -1472,7 +1388,7 @@ Move_SEED_BOMB:: waitforvisualfinish end -Move_AIR_SLASH:: +gBattleAnimMove_AirSlash:: loadspritegfx ANIM_TAG_SLASH call SetSkyBg createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 @@ -1485,7 +1401,7 @@ Move_AIR_SLASH:: call UnsetSkyBg end -Move_X_SCISSOR:: +gBattleAnimMove_XScissor:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -1503,7 +1419,7 @@ Move_X_SCISSOR:: blendoff end -Move_BUG_BUZZ:: +gBattleAnimMove_BugBuzz:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -1530,7 +1446,7 @@ Move_BUG_BUZZ:: call UnsetBugBg end -Move_DRAGON_PULSE:: +gBattleAnimMove_DragonPulse:: loadspritegfx ANIM_TAG_DRAGON_PULSE monbg ANIM_TARGET setalpha 12, 8 @@ -1563,7 +1479,7 @@ DragonPulseParticle: delay 4 return -Move_DRAGON_RUSH:: +gBattleAnimMove_DragonRush:: loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -1592,7 +1508,7 @@ Move_DRAGON_RUSH:: blendoff end -Move_POWER_GEM:: @ Copy of Hidden Power with background blackened +gBattleAnimMove_PowerGem:: @ Copy of Hidden Power with background blackened loadspritegfx ANIM_TAG_POWER_GEM createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 1, 0, 7, RGB_BLACK waitforvisualfinish @@ -1626,7 +1542,7 @@ Move_POWER_GEM:: @ Copy of Hidden Power with background blackened waitforvisualfinish end -Move_DRAIN_PUNCH:: +gBattleAnimMove_DrainPunch:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BLUE_STAR @@ -1647,7 +1563,7 @@ Move_DRAIN_PUNCH:: blendoff end -Move_VACUUM_WAVE:: +gBattleAnimMove_VacuumWave:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_THIN_RING @@ -1663,7 +1579,7 @@ Move_VACUUM_WAVE:: blendoff end -Move_FOCUS_BLAST:: +gBattleAnimMove_FocusBlast:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK @@ -1687,7 +1603,7 @@ SetFocusBlastBG: fadetobg BG_FOCUS_BLAST goto SetHighSpeedBgFade -Move_ENERGY_BALL:: +gBattleAnimMove_EnergyBall:: loadspritegfx ANIM_TAG_ENERGY_BALL monbg ANIM_TARGET setalpha 12, 8 @@ -1705,7 +1621,7 @@ Move_ENERGY_BALL:: blendoff end -Move_BRAVE_BIRD:: +gBattleAnimMove_BraveBird:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BIRD call SetSkyBg @@ -1728,7 +1644,7 @@ Move_BRAVE_BIRD:: call UnsetSkyBg end -Move_EARTH_POWER:: +gBattleAnimMove_EarthPower:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME createvisualtask AnimTask_HorizontalShake, 3, ANIM_DEF_PARTNER, 10, 50 @@ -1757,7 +1673,7 @@ Move_EARTH_POWER:: waitforvisualfinish end -Move_SWITCHEROO:: +gBattleAnimMove_Switcheroo:: fadetobg BG_DARK waitbgfadein loadspritegfx ANIM_TAG_ITEM_BAG @@ -1789,7 +1705,7 @@ Move_SWITCHEROO:: waitbgfadein end -Move_GIGA_IMPACT:: +gBattleAnimMove_GigaImpact:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -1833,7 +1749,7 @@ GigaImpactContinuity: waitforvisualfinish end -Move_NASTY_PLOT:: +gBattleAnimMove_NastyPlot:: loadspritegfx ANIM_TAG_AMNESIA fadetobg BG_DARK waitbgfadeout @@ -1848,7 +1764,7 @@ Move_NASTY_PLOT:: call UnsetPsychicBg end -Move_BULLET_PUNCH:: +gBattleAnimMove_BulletPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -1902,7 +1818,7 @@ Move_BULLET_PUNCH:: blendoff end -Move_AVALANCHE:: +gBattleAnimMove_Avalanche:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_ICE_CHUNK monbg ANIM_DEF_PARTNER @@ -1953,7 +1869,7 @@ SnowSlide1: delay 2 return -Move_ICE_SHARD:: +gBattleAnimMove_IceShard:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 @@ -1989,7 +1905,7 @@ Move_ICE_SHARD:: blendoff end -Move_SHADOW_CLAW:: +gBattleAnimMove_ShadowClaw:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_TORN_METAL @@ -2015,7 +1931,7 @@ Move_SHADOW_CLAW:: clearmonbg ANIM_TARGET end -Move_THUNDER_FANG:: +gBattleAnimMove_ThunderFang:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_LIGHTNING loadspritegfx ANIM_TAG_SHARP_TEETH @@ -2049,7 +1965,7 @@ Move_THUNDER_FANG:: delay 1 end -Move_ICE_FANG:: +gBattleAnimMove_IceFang:: monbg ANIM_TARGET setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -2086,7 +2002,7 @@ Move_ICE_FANG:: delay 1 end -Move_FIRE_FANG:: +gBattleAnimMove_FireFang:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT @@ -2115,7 +2031,7 @@ Move_FIRE_FANG:: delay 1 end -Move_SHADOW_SNEAK:: +gBattleAnimMove_ShadowSneak:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -2153,7 +2069,7 @@ ShadowSneakMovement: delay 0x4 return -Move_MUD_BOMB:: +gBattleAnimMove_MudBomb:: loadspritegfx ANIM_TAG_MUD_SAND playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 @@ -2204,7 +2120,7 @@ Move_MUD_BOMB:: waitforvisualfinish end -Move_PSYCHO_CUT:: +gBattleAnimMove_PsychoCut:: loadspritegfx ANIM_TAG_SPIRAL loadspritegfx ANIM_TAG_PSYCHO_CUT loadspritegfx ANIM_TAG_CROSS_IMPACT @@ -2232,7 +2148,7 @@ Move_PSYCHO_CUT:: waitforvisualfinish end -Move_ZEN_HEADBUTT:: +gBattleAnimMove_ZenHeadbutt:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_ATTACKER @@ -2264,7 +2180,7 @@ Move_ZEN_HEADBUTT:: delay 1 end -Move_MIRROR_SHOT:: +gBattleAnimMove_MirrorShot:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK waitforvisualfinish @@ -2298,7 +2214,7 @@ Move_MIRROR_SHOT:: blendoff end -Move_FLASH_CANNON:: +gBattleAnimMove_FlashCannon:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRIC_ORBS @@ -2335,7 +2251,7 @@ Move_FLASH_CANNON:: clearmonbg ANIM_TARGET end -Move_ROCK_CLIMB:: +gBattleAnimMove_RockClimb:: delay 8 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 waitforvisualfinish @@ -2370,7 +2286,7 @@ Move_ROCK_CLIMB:: blendoff end -Move_DEFOG:: +gBattleAnimMove_Defog:: loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 @@ -2388,9 +2304,9 @@ Move_DEFOG:: blendoff end -Move_TRICK_ROOM:: +gBattleAnimMove_TrickRoom:: call InitRoomAnimation -General_TrickRoom: +gBattleAnimGeneral_TrickRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_TRICK_ROOM waitbgfadein @@ -2405,7 +2321,7 @@ InitRoomAnimation: return @ Credits to Skeli -Move_DRACO_METEOR:: +gBattleAnimMove_DracoMeteor:: loadspritegfx ANIM_TAG_ROCKS @Rocks loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Gray Colour loadspritegfx ANIM_TAG_WATER_GUN @Sparkles Trail @@ -2490,7 +2406,7 @@ DracoMeteor4: createsprite gDracoMeteorTailSpriteTemplate 0x83, 5, 0xffb0, 0xffc0, 0xFFF8, 0x20, 0x19 return -Move_DISCHARGE:: +gBattleAnimMove_Discharge:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -2595,7 +2511,7 @@ DischargeElectrify: createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_ATK_PARTNER return -Move_LAVA_PLUME:: +gBattleAnimMove_LavaPlume:: loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan 152, SOUND_PAN_ATTACKER, 9, 2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED @@ -2615,7 +2531,7 @@ Move_LAVA_PLUME:: waitforvisualfinish end -Move_LEAF_STORM:: +gBattleAnimMove_LeafStorm:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_LEAF @@ -2727,7 +2643,7 @@ Move_LEAF_STORM:: clearmonbg ANIM_DEF_PARTNER end -Move_POWER_WHIP:: +gBattleAnimMove_PowerWhip:: loadspritegfx ANIM_TAG_WHIP_HIT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 10 @@ -2741,7 +2657,7 @@ Move_POWER_WHIP:: waitbgfadein end -Move_ROCK_WRECKER:: +gBattleAnimMove_RockWrecker:: jumpargeq 7, 1, RockWrecker_1 fadetobg BG_ROCK_WRECKER waitbgfadeout @@ -2787,7 +2703,7 @@ RockWrecker_2: call UnsetPsychicBg end -Move_CROSS_POISON:: +gBattleAnimMove_CrossPoison:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_TARGET @@ -2803,7 +2719,7 @@ Move_CROSS_POISON:: blendoff end -Move_GUNK_SHOT:: +gBattleAnimMove_GunkShot:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_WATER_IMPACT @@ -2860,7 +2776,7 @@ SetGunkShotBG: goto SetHighSpeedBgFade -Move_IRON_HEAD:: +gBattleAnimMove_IronHead:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -2882,7 +2798,7 @@ Move_IRON_HEAD:: waitforvisualfinish end -Move_MAGNET_BOMB:: +gBattleAnimMove_MagnetBomb:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -2947,7 +2863,7 @@ Move_MAGNET_BOMB:: waitforvisualfinish end -Move_STONE_EDGE:: +gBattleAnimMove_StoneEdge:: loadspritegfx ANIM_TAG_STONE_EDGE loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET @@ -3006,7 +2922,7 @@ Move_STONE_EDGE:: blendoff end -Move_CAPTIVATE:: +gBattleAnimMove_Captivate:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_DEF_PARTNER, 0, 2, 0 @@ -3022,7 +2938,7 @@ Move_CAPTIVATE:: waitforvisualfinish end -Move_STEALTH_ROCK:: +gBattleAnimMove_StealthRock:: loadspritegfx ANIM_TAG_STEALTH_ROCK monbg ANIM_DEF_PARTNER playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -3039,7 +2955,7 @@ Move_STEALTH_ROCK:: clearmonbg ANIM_DEF_PARTNER end -Move_GRASS_KNOT:: +gBattleAnimMove_GrassKnot:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 @@ -3052,7 +2968,7 @@ Move_GRASS_KNOT:: createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 end -Move_CHATTER:: +gBattleAnimMove_Chatter:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -3092,7 +3008,7 @@ Move_CHATTER:: clearmonbg ANIM_DEF_PARTNER end -Move_JUDGMENT:: +gBattleAnimMove_Judgment:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_GREEN_SPIKE @@ -3188,7 +3104,7 @@ JudgmentInwardSpikes2: createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFDA, 0xFF94, 16 @between up and upper left return -Move_BUG_BITE:: +gBattleAnimMove_BugBite:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -3229,7 +3145,7 @@ Move_BUG_BITE:: blendoff end -Move_CHARGE_BEAM:: +gBattleAnimMove_ChargeBeam:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -3281,7 +3197,7 @@ SparkBeam: delay 1 return -Move_WOOD_HAMMER:: +gBattleAnimMove_WoodHammer:: loadspritegfx ANIM_TAG_WOOD_HAMMER loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER loadspritegfx ANIM_TAG_IMPACT @@ -3310,7 +3226,7 @@ WoodHammerImpact: createsprite gWoodHammerSmallSpriteTemplate, ANIM_TARGET, 2, -5, 0, -20, -24, 20, 2 return -Move_AQUA_JET:: +gBattleAnimMove_AquaJet:: loadspritegfx ANIM_TAG_SPARKLE_6 loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_SPLASH @@ -3343,7 +3259,7 @@ Move_AQUA_JET:: blendoff end -Move_ATTACK_ORDER:: +gBattleAnimMove_AttackOrder:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -3389,7 +3305,7 @@ Move_ATTACK_ORDER:: blendoff end -Move_DEFEND_ORDER:: +gBattleAnimMove_DefendOrder:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -3426,7 +3342,7 @@ Move_DEFEND_ORDER:: waitforvisualfinish end -Move_HEAL_ORDER:: +gBattleAnimMove_HealOrder:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -3463,7 +3379,7 @@ Move_HEAL_ORDER:: waitforvisualfinish end -Move_HEAD_SMASH:: +gBattleAnimMove_HeadSmash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS createvisualtask AnimTask_SkullBashPosition, 2, 0 @@ -3485,7 +3401,7 @@ Move_HEAD_SMASH:: waitbgfadein end -Move_DOUBLE_HIT:: +gBattleAnimMove_DoubleHit:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -3507,7 +3423,7 @@ Move_DOUBLE_HIT:: blendoff end -Move_ROAR_OF_TIME:: +gBattleAnimMove_RoarOfTime:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_WATER_GUN @@ -3548,7 +3464,7 @@ Move_ROAR_OF_TIME:: waitforvisualfinish end -Move_SPACIAL_REND:: +gBattleAnimMove_SpacialRend:: loadspritegfx ANIM_TAG_PUNISHMENT_BLADES loadspritegfx ANIM_TAG_PINK_HEART_2 @ANIM_TAG_BERRY_EATEN monbg ANIM_ATK_PARTNER @@ -3582,7 +3498,7 @@ Move_SPACIAL_REND:: blendoff end -Move_LUNAR_DANCE:: +gBattleAnimMove_LunarDance:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_HOLLOW_ORB @@ -3623,7 +3539,7 @@ Move_LUNAR_DANCE:: delay 1 end -Move_CRUSH_GRIP:: +gBattleAnimMove_CrushGrip:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE @@ -3648,7 +3564,7 @@ Move_CRUSH_GRIP:: blendoff end -Move_MAGMA_STORM:: +gBattleAnimMove_MagmaStorm:: loadspritegfx ANIM_TAG_SMALL_EMBER fadetobg BG_MAGMA_STORM @Add new bg waitbgfadeout @@ -3673,7 +3589,7 @@ Move_MAGMA_STORM:: blendoff end -Move_DARK_VOID:: +gBattleAnimMove_DarkVoid:: loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour loadspritegfx ANIM_TAG_SPARKLE_2 @Healing Stars @@ -3700,7 +3616,7 @@ Move_DARK_VOID:: visible ANIM_DEF_PARTNER end -Move_SEED_FLARE:: +gBattleAnimMove_SeedFlare:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation loadspritegfx ANIM_TAG_LEAF @green color loadspritegfx ANIM_TAG_RAZOR_LEAF @green color 2 @@ -3785,7 +3701,7 @@ Move_SEED_FLARE:: blendoff end -Move_OMINOUS_WIND:: +gBattleAnimMove_OminousWind:: loadspritegfx ANIM_TAG_SPARKLE_6 panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET 2, 0 playsewithpan 228, 0 @@ -3844,7 +3760,7 @@ OminousWindHit: waitbgfadein end -Move_SHADOW_FORCE:: +gBattleAnimMove_ShadowForce:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim ShadowForcePrep ShadowForceAttack @@ -3898,7 +3814,7 @@ ShadowForceBg: return @@@@@@@@@@@@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@@@@@@@@@@@@ -Move_HONE_CLAWS:: +gBattleAnimMove_HoneClaws:: loadspritegfx ANIM_TAG_SWIPE call HoneClawsAnim createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 6, 6, RGB_BLACK @@ -3919,7 +3835,7 @@ HoneClawsAnim: delay 10 return -Move_WIDE_GUARD:: +gBattleAnimMove_WideGuard:: loadspritegfx ANIM_TAG_ICE_SPIKES @motion from icy wind loadspritegfx ANIM_TAG_PINK_PETAL @pink color loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color @@ -3969,7 +3885,7 @@ Move_WIDE_GUARD:: blendoff end -Move_GUARD_SPLIT:: +gBattleAnimMove_GuardSplit:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3 @@ -3993,7 +3909,7 @@ GuardSplitLaunch: delay 0x5 return -Move_POWER_SPLIT:: +gBattleAnimMove_PowerSplit:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_BLUEGREEN_ORB createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @@ -4018,9 +3934,9 @@ PowerSplitLaunch: delay 5 return -Move_WONDER_ROOM:: +gBattleAnimMove_WonderRoom:: call InitRoomAnimation -General_WonderRoom: +gBattleAnimGeneral_WonderRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_WONDER_ROOM waitbgfadein @@ -4030,7 +3946,7 @@ General_WonderRoom: blendoff end -Move_PSYSHOCK:: +gBattleAnimMove_Psyshock:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_GRAY_SMOKE @@ -4107,7 +4023,7 @@ PsyshockConverge: delay 2 return -Move_VENOSHOCK:: +gBattleAnimMove_Venoshock:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_TOXIC_BUBBLE createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -24, 16, 1, 1 @@ -4135,7 +4051,7 @@ Move_VENOSHOCK:: delay 15 end -Move_AUTOTOMIZE:: +gBattleAnimMove_Autotomize:: loadspritegfx ANIM_TAG_METAL_BITS @Metal Bits setalpha 12, 8 monbg ANIM_ATK_PARTNER @@ -4160,7 +4076,7 @@ Move_AUTOTOMIZE:: blendoff end -Move_RAGE_POWDER:: +gBattleAnimMove_RagePowder:: loadspritegfx ANIM_TAG_SPORE @Powder loadspritegfx ANIM_TAG_HEART_STAMP @Red Colour monbg ANIM_DEF_PARTNER @@ -4182,7 +4098,7 @@ RagePowderSprinkle: delay 0xc return -Move_TELEKINESIS:: +gBattleAnimMove_Telekinesis:: loadspritegfx ANIM_TAG_SPARKLE_4 @detect createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0x9, 0x0 waitforvisualfinish @@ -4200,9 +4116,9 @@ Move_TELEKINESIS:: waitforvisualfinish end -Move_MAGIC_ROOM:: +gBattleAnimMove_MagicRoom:: call InitRoomAnimation -General_MagicRoom: +gBattleAnimGeneral_MagicRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_MAGIC_ROOM waitbgfadein @@ -4212,7 +4128,7 @@ General_MagicRoom: blendoff end -Move_SMACK_DOWN:: +gBattleAnimMove_SmackDown:: loadspritegfx ANIM_TAG_BLACK_BALL loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -4225,7 +4141,7 @@ Move_SMACK_DOWN:: createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 goto SeismicTossWeak -Move_STORM_THROW:: +gBattleAnimMove_StormThrow:: call StormThorwAnim call StormThorwAnim call StormThorwAnim @@ -4248,7 +4164,7 @@ StormThorwAnim: delay 8 return -Move_FLAME_BURST:: +gBattleAnimMove_FlameBurst:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_EXPLOSION playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER @@ -4281,13 +4197,13 @@ FlameBurstSpread: return -Move_SLUDGE_WAVE:: +gBattleAnimMove_SludgeWave:: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SLUDGE_WAVE waitforvisualfinish end -Move_QUIVER_DANCE:: +gBattleAnimMove_QuiverDance:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER call SetBugBg @@ -4310,7 +4226,7 @@ Move_QUIVER_DANCE:: call UnsetBugBg end -Move_HEAVY_SLAM:: +gBattleAnimMove_HeavySlam:: loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -4340,7 +4256,7 @@ Move_HEAVY_SLAM:: blendoff end -Move_SYNCHRONOISE:: +gBattleAnimMove_Synchronoise:: loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_WATER_ORB @blue color @@ -4379,7 +4295,7 @@ Move_SYNCHRONOISE:: clearmonbg ANIM_DEF_PARTNER end -Move_ELECTRO_BALL:: +gBattleAnimMove_ElectroBall:: loadspritegfx ANIM_TAG_SPARK_2 @yelow loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball @@ -4406,7 +4322,7 @@ Move_ELECTRO_BALL:: blendoff end -Move_SOAK:: +gBattleAnimMove_Soak:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_TARGET @@ -4441,7 +4357,7 @@ Move_SOAK:: blendoff end -Move_FLAME_CHARGE:: +gBattleAnimMove_FlameCharge:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -4474,7 +4390,7 @@ FlameChargeSwirl: createsprite gFlameChargeEmberTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c return -Move_COIL:: +gBattleAnimMove_Coil:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 @@ -4493,7 +4409,7 @@ Move_COIL:: waitforvisualfinish end -Move_LOW_SWEEP:: +gBattleAnimMove_LowSweep:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 @@ -4505,7 +4421,7 @@ Move_LOW_SWEEP:: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_ACID_SPRAY:: +gBattleAnimMove_AcidSpray:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, -20, FALSE @@ -4531,7 +4447,7 @@ Move_ACID_SPRAY:: clearmonbg ANIM_TARGET end -Move_FOUL_PLAY:: +gBattleAnimMove_FoulPlay:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_IMPACT @@ -4554,7 +4470,7 @@ Move_FOUL_PLAY:: blendoff end -Move_SIMPLE_BEAM:: +gBattleAnimMove_SimpleBeam:: loadspritegfx ANIM_TAG_GOLD_RING @psybeam loadspritegfx ANIM_TAG_ROCKS @brown color loadspritegfx ANIM_TAG_PINK_PETAL @pink color @@ -4600,7 +4516,7 @@ SimpleBeamWithRings: delay 0x2 return -Move_ENTRAINMENT:: +gBattleAnimMove_Entrainment:: createvisualtask AnimTask_TeeterDanceMovement, 5 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER delay 0x18 @@ -4615,7 +4531,7 @@ Move_ENTRAINMENT:: waitforvisualfinish end -Move_AFTER_YOU:: +gBattleAnimMove_AfterYou:: loadspritegfx ANIM_TAG_ANGER @rage loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color createvisualtask AnimTask_SwayMon, 5, 1, 15, 1536, 2, ANIM_ATTACKER @@ -4630,7 +4546,7 @@ Move_AFTER_YOU:: waitforvisualfinish end -Move_ROUND:: +gBattleAnimMove_Round:: loadspritegfx ANIM_TAG_MUSIC_NOTES createvisualtask AnimTask_MusicNotesRainbowBlend, 2 waitforvisualfinish @@ -4652,7 +4568,7 @@ Move_ROUND:: waitforvisualfinish end -Move_ECHOED_VOICE:: +gBattleAnimMove_EchoedVoice:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -4672,7 +4588,7 @@ MetalSoundPlayNote: delay 0x2 return -Move_CHIP_AWAY:: +gBattleAnimMove_ChipAway:: loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x7FFF waitforvisualfinish @@ -4690,7 +4606,7 @@ Move_CHIP_AWAY:: blendoff end -Move_CLEAR_SMOG:: +gBattleAnimMove_ClearSmog:: loadspritegfx ANIM_TAG_MIST_CLOUD monbg ANIM_TARGET splitbgprio_all @@ -4718,7 +4634,7 @@ ClearSmogCloud: delay 7 return -Move_STORED_POWER:: +gBattleAnimMove_StoredPower:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_IMPACT call SetPsychicBackground @@ -4748,7 +4664,7 @@ Move_STORED_POWER:: waitforvisualfinish end -Move_QUICK_GUARD:: +gBattleAnimMove_QuickGuard:: loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles setalpha 12, 8 @@ -4778,7 +4694,7 @@ Move_QUICK_GUARD:: clearmonbg ANIM_ATTACKER end -Move_ALLY_SWITCH:: +gBattleAnimMove_AllySwitch:: call SetPsychicBackground createvisualtask AnimTask_AllySwitchAttacker, 2 createvisualtask AnimTask_AllySwitchPartner, 2 @@ -4786,7 +4702,7 @@ Move_ALLY_SWITCH:: call UnsetPsychicBg end -Move_SCALD:: +gBattleAnimMove_Scald:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -4832,7 +4748,7 @@ ScaldHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 1 return -Move_SHELL_SMASH:: +gBattleAnimMove_ShellSmash:: loadspritegfx ANIM_TAG_SHELL_RIGHT loadspritegfx ANIM_TAG_SHELL_LEFT loadspritegfx ANIM_TAG_IMPACT @@ -4860,7 +4776,7 @@ Move_SHELL_SMASH:: waitforvisualfinish end -Move_HEAL_PULSE:: +gBattleAnimMove_HealPulse:: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_THIN_RING @@ -4891,7 +4807,7 @@ Move_HEAL_PULSE:: call HealingEffect2 end -Move_HEX:: +gBattleAnimMove_Hex:: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x4C4A @;Deep purple @@ -4912,7 +4828,7 @@ Move_HEX:: waitforvisualfinish end -Move_SKY_DROP:: +gBattleAnimMove_SkyDrop:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim SkyDropSetup SkyDropUnleash @@ -4945,7 +4861,7 @@ SkyDropUnleash: blendoff end -Move_SHIFT_GEAR:: +gBattleAnimMove_ShiftGear:: loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_ATTACKER playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER @@ -4955,7 +4871,7 @@ Move_SHIFT_GEAR:: clearmonbg ANIM_ATTACKER end -Move_CIRCLE_THROW:: +gBattleAnimMove_CircleThrow:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_ICE_CHUNK @@ -4982,7 +4898,7 @@ Move_CIRCLE_THROW:: blendoff end -Move_INCINERATE:: +gBattleAnimMove_Incinerate:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -5022,7 +4938,7 @@ Move_INCINERATE:: blendoff end -Move_QUASH:: +gBattleAnimMove_Quash:: loadspritegfx ANIM_TAG_ASSURANCE_HAND @hand fadetobg BG_DARK waitbgfadein @@ -5039,7 +4955,7 @@ Move_QUASH:: waitbgfadein end -Move_ACROBATICS:: +gBattleAnimMove_Acrobatics:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_IMPACT @@ -5114,7 +5030,7 @@ AcrobaticsSlashes: delay 2 return -Move_REFLECT_TYPE:: +gBattleAnimMove_ReflectType:: loadspritegfx ANIM_TAG_GUARD_RING @ring around user loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color loadspritegfx ANIM_TAG_PURPLE_FLAME @violet color @@ -5152,7 +5068,7 @@ Move_REFLECT_TYPE:: blendoff end -Move_RETALIATE:: +gBattleAnimMove_Retaliate:: loadspritegfx ANIM_TAG_CUT @Cut monbg ANIM_DEF_PARTNER setalpha 9, 8 @@ -5173,7 +5089,7 @@ Move_RETALIATE:: blendoff end -Move_FINAL_GAMBIT:: +gBattleAnimMove_FinalGambit:: loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour loadspritegfx ANIM_TAG_EXPLOSION @explosion animation @@ -5200,7 +5116,7 @@ Move_FINAL_GAMBIT:: waitforvisualfinish end -Move_BESTOW:: +gBattleAnimMove_Bestow:: monbg ANIM_TARGET splitbgprio ANIM_TARGET panse SE_M_METRONOME, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 @@ -5210,7 +5126,7 @@ Move_BESTOW:: clearmonbg ANIM_TARGET end -Move_INFERNO:: +gBattleAnimMove_Inferno:: loadspritegfx ANIM_TAG_SMALL_EMBER call SetImpactBackground loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 40, 4 @@ -5254,7 +5170,7 @@ InfernoAnim: delay 1 return -Move_WATER_PLEDGE:: +gBattleAnimMove_WaterPledge:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -5374,7 +5290,7 @@ Move_WATER_PLEDGE:: blendoff end -Move_FIRE_PLEDGE:: +gBattleAnimMove_FirePledge:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -5473,7 +5389,7 @@ Move_FIRE_PLEDGE:: blendoff end -Move_GRASS_PLEDGE:: +gBattleAnimMove_GrassPledge:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_WHIP_HIT monbg ANIM_DEF_PARTNER @@ -5580,7 +5496,7 @@ GrassPledgeMiddleFountain: delay 4 return -Move_VOLT_SWITCH:: +gBattleAnimMove_VoltSwitch:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_THIN_RING @@ -5619,7 +5535,7 @@ VoltSwitchAgainstPartner: createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, 2 goto VoltSwitchContinue -Move_STRUGGLE_BUG:: +gBattleAnimMove_StruggleBug:: loadspritegfx ANIM_TAG_MOVEMENT_WAVES loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -5645,12 +5561,12 @@ Move_STRUGGLE_BUG:: blendoff end -Move_BULLDOZE:: +gBattleAnimMove_Bulldoze:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 0x8 - goto Move_EARTHQUAKE + goto gBattleAnimMove_Earthquake -Move_FROST_BREATH:: +gBattleAnimMove_FrostBreath:: loadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME @@ -5688,7 +5604,7 @@ Move_FROST_BREATH:: call UnsetPsychicBg end -Move_DRAGON_TAIL:: +gBattleAnimMove_DragonTail:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT @@ -5724,7 +5640,7 @@ TailWhackDown: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 25, 4, 4 return -Move_WORK_UP:: +gBattleAnimMove_WorkUp:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -28, 26, 2 @@ -5758,7 +5674,7 @@ Move_WORK_UP:: waitforvisualfinish end -Move_ELECTROWEB:: +gBattleAnimMove_Electroweb:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD loadspritegfx ANIM_TAG_SPARK_2 @@ -5776,11 +5692,11 @@ Move_ELECTROWEB:: delay 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK call ElectricityEffect_OnTargets -Move_ELECTROWEB_Wait:: +gBattleAnimMove_ElectrowebWait:: waitforvisualfinish end -Move_WILD_CHARGE:: +gBattleAnimMove_WildCharge:: loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT @@ -5815,7 +5731,7 @@ ScreenFlash: createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x07FE return -Move_DRILL_RUN:: +gBattleAnimMove_DrillRun:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT setalpha 12, 8 @@ -5870,7 +5786,7 @@ Move_DRILL_RUN:: call UnsetPsychicBg end -Move_DUAL_CHOP:: +gBattleAnimMove_DualChop:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @hand loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_POISON_BUBBLE @purple @@ -5892,7 +5808,7 @@ Move_DUAL_CHOP:: blendoff end -Move_HEART_STAMP:: +gBattleAnimMove_HeartStamp:: loadspritegfx ANIM_TAG_HEART_STAMP monbg ANIM_TARGET loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3 @@ -5905,7 +5821,7 @@ Move_HEART_STAMP:: waitforvisualfinish end -Move_HORN_LEECH:: +gBattleAnimMove_HornLeech:: loadspritegfx ANIM_TAG_HORN_LEECH @Horn loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_ORBS @@ -5922,7 +5838,7 @@ Move_HORN_LEECH:: waitforvisualfinish end -Move_SACRED_SWORD:: +gBattleAnimMove_SacredSword:: loadspritegfx ANIM_TAG_CUT @Cut loadspritegfx ANIM_TAG_SWORD @Sword loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour @@ -5948,7 +5864,7 @@ Move_SACRED_SWORD:: waitforvisualfinish end -Move_RAZOR_SHELL:: +gBattleAnimMove_RazorShell:: loadspritegfx ANIM_TAG_RAZOR_SHELL loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET @@ -5962,7 +5878,7 @@ Move_RAZOR_SHELL:: waitforvisualfinish end -Move_HEAT_CRASH:: +gBattleAnimMove_HeatCrash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WARM_ROCK loadspritegfx ANIM_TAG_ROCKS @@ -5986,7 +5902,7 @@ Move_HEAT_CRASH:: blendoff end -Move_LEAF_TORNADO:: +gBattleAnimMove_LeafTornado:: loadspritegfx ANIM_TAG_GUST @Gust loadspritegfx ANIM_TAG_LEAF @Leaves monbg ANIM_DEF_PARTNER @@ -6017,7 +5933,7 @@ LeafTornadoVortex: delay 0x2 return -Move_STEAMROLLER:: +gBattleAnimMove_Steamroller:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -6043,7 +5959,7 @@ Move_STEAMROLLER:: blendoff end -Move_COTTON_GUARD:: +gBattleAnimMove_CottonGuard:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -6073,7 +5989,7 @@ CottonSporesSpiralInward: delay 0x3 return -Move_NIGHT_DAZE:: +gBattleAnimMove_NightDaze:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color loadspritegfx ANIM_TAG_RED_ORB @circles @@ -6111,7 +6027,7 @@ Move_NIGHT_DAZE:: waitforvisualfinish end -Move_PSYSTRIKE:: +gBattleAnimMove_Psystrike:: monbg ANIM_TARGET setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 @@ -6128,7 +6044,7 @@ Move_PSYSTRIKE:: blendoff end -Move_TAIL_SLAP:: +gBattleAnimMove_TailSlap:: loadspritegfx ANIM_TAG_IMPACT @Hit loadspritegfx ANIM_TAG_AIR_WAVE_2 @Aeroblast loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blades @@ -6149,7 +6065,7 @@ TailSlapLeft: createsprite gTailSlapTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x0 goto TailSlapContinue -Move_HURRICANE:: +gBattleAnimMove_Hurricane:: loadspritegfx ANIM_TAG_GUST monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -6186,7 +6102,7 @@ HurricaneGustCentered: createvisualtask AnimTask_AnimateGustTornadoPalette, 5, 1, 70 return -Move_HEAD_CHARGE:: +gBattleAnimMove_HeadCharge:: loadspritegfx ANIM_TAG_IMPACT fadetobgfromset BG_GIGA_IMPACT_OPPONENT, BG_GIGA_IMPACT_PLAYER, BG_GIGA_IMPACT_OPPONENT waitbgfadein @@ -6206,7 +6122,7 @@ Move_HEAD_CHARGE:: waitbgfadeout end -Move_GEAR_GRIND:: +gBattleAnimMove_GearGrind:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_TARGET @@ -6229,7 +6145,7 @@ Move_GEAR_GRIND:: blendoff end -Move_SEARING_SHOT:: +gBattleAnimMove_SearingShot:: loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge @@ -6315,7 +6231,7 @@ Move_SEARING_SHOT:: blendoff end -Move_TECHNO_BLAST:: +gBattleAnimMove_TechnoBlast:: createvisualtask AnimTask_TechnoBlast, 0x5 jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire jumpargeq 0x0, TYPE_WATER, TechnoBlastWater @@ -6778,7 +6694,7 @@ TechnoBlastIceChargeParticles: delay 0x4 return -Move_RELIC_SONG:: +gBattleAnimMove_RelicSong:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -6859,7 +6775,7 @@ Move_RELIC_SONG:: waitforvisualfinish end -Move_SECRET_SWORD:: +gBattleAnimMove_SecretSword:: loadspritegfx ANIM_TAG_CUT @Cut loadspritegfx ANIM_TAG_SWORD @Sword loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour @@ -6888,7 +6804,7 @@ Move_SECRET_SWORD:: waitforvisualfinish end -Move_GLACIATE:: +gBattleAnimMove_Glaciate:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour @@ -6919,7 +6835,7 @@ Move_GLACIATE:: call UnsetPsychicBg end -Move_BOLT_STRIKE:: +gBattleAnimMove_BoltStrike:: loadspritegfx ANIM_TAG_SPARK_2 @Electricity loadspritegfx ANIM_TAG_IMPACT @Hit loadspritegfx ANIM_TAG_ELECTRIC_ORBS @Electric Balls @@ -6962,7 +6878,7 @@ Move_BOLT_STRIKE:: waitforvisualfinish end -Move_BLUE_FLARE:: +gBattleAnimMove_BlueFlare:: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire loadspritegfx ANIM_TAG_METAL_BITS @Blue Flare Colour createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x0 @@ -7032,7 +6948,7 @@ BlueFlareFlameSpreadEffect: createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x70, 0xff80, 0x28 return -Move_FIERY_DANCE:: +gBattleAnimMove_FieryDance:: loadspritegfx ANIM_TAG_SMALL_EMBER createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xc, 0x14be waitforvisualfinish @@ -7052,7 +6968,7 @@ Move_FIERY_DANCE:: waitforvisualfinish end -Move_FREEZE_SHOCK:: +gBattleAnimMove_FreezeShock:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_ICE_CHUNK @Ice Ball @@ -7093,7 +7009,7 @@ FreezeShockAttack: waitforvisualfinish end -Move_ICE_BURN:: +gBattleAnimMove_IceBurn:: loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke loadspritegfx ANIM_TAG_ICE_CHUNK @white color loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice @@ -7159,7 +7075,7 @@ IceBurnUnleash: clearmonbg ANIM_TARGET end -Move_SNARL:: +gBattleAnimMove_Snarl:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_IMPACT @@ -7203,7 +7119,7 @@ Move_SNARL:: blendoff end -Move_ICICLE_CRASH:: +gBattleAnimMove_IcicleCrash:: loadspritegfx ANIM_TAG_ICICLE_SPEAR @Icicle fadetobg BG_ICE waitbgfadein @@ -7255,7 +7171,7 @@ LaunchIcicleCrashSpear: delay 0x2 return -Move_V_CREATE:: +gBattleAnimMove_VCreate:: loadspritegfx ANIM_TAG_SMALL_EMBER @fire blast flame loadspritegfx ANIM_TAG_THIN_RING @calm mind animation loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color @@ -7333,7 +7249,7 @@ VCreateFlames: delay 0x3 return -Move_FUSION_FLARE:: +gBattleAnimMove_FusionFlare:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @ball loadspritegfx ANIM_TAG_VERTICAL_HEX @ball palette @@ -7391,7 +7307,7 @@ FusionFlareBuff: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return -Move_FUSION_BOLT:: +gBattleAnimMove_FusionBolt:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -7438,7 +7354,7 @@ Move_FUSION_BOLT:: end @@@@@@@@@@@@@@@@@@@@@@@ GEN 6 @@@@@@@@@@@@@@@@@@@@@@@ -Move_FLYING_PRESS:: +gBattleAnimMove_FlyingPress:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly/bounce loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke setalpha 15, 0 @@ -7471,7 +7387,7 @@ Move_FLYING_PRESS:: blendoff end -Move_MAT_BLOCK:: +gBattleAnimMove_MatBlock:: loadspritegfx ANIM_TAG_CONVERSION loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL @green color monbg ANIM_ATK_PARTNER @@ -7501,7 +7417,7 @@ Move_MAT_BLOCK:: blendoff end -Move_BELCH:: +gBattleAnimMove_Belch:: loadspritegfx ANIM_TAG_BERRY_NORMAL loadspritegfx ANIM_TAG_EXPLOSION @Explosion monbg ANIM_TARGET @@ -7533,7 +7449,7 @@ Move_BELCH:: blendoff end -Move_ROTOTILLER:: +gBattleAnimMove_Rototiller:: loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_DIRT_MOUND loadspritegfx ANIM_TAG_GREEN_SPARKLE @@ -7552,7 +7468,7 @@ Move_ROTOTILLER:: waitforvisualfinish end -Move_STICKY_WEB:: +gBattleAnimMove_StickyWeb:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -7590,7 +7506,7 @@ Move_STICKY_WEB:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK end -Move_FELL_STINGER:: +gBattleAnimMove_FellStinger:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -7611,7 +7527,7 @@ Move_FELL_STINGER:: clearmonbg ANIM_TARGET end -Move_PHANTOM_FORCE:: +gBattleAnimMove_PhantomForce:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim PhantomForcePrep PhantomForceAttack @@ -7683,7 +7599,7 @@ PhantomForceBg: waitbgfadein return -Move_TRICK_OR_TREAT:: +gBattleAnimMove_TrickOrTreat:: loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT fadetobg BG_NIGHTMARE @@ -7707,7 +7623,7 @@ Move_TRICK_OR_TREAT:: waitbgfadein end -Move_NOBLE_ROAR:: +gBattleAnimMove_NobleRoar:: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -7728,10 +7644,10 @@ Move_NOBLE_ROAR:: delay 20 end -Move_ION_DELUGE:: +gBattleAnimMove_IonDeluge:: end -Move_PARABOLIC_CHARGE:: +gBattleAnimMove_ParabolicCharge:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK @@ -7786,7 +7702,7 @@ ParabolicChargeDouble: createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK goto ParabolicChargeHeal; -Move_FORESTS_CURSE:: +gBattleAnimMove_ForestsCurse:: loadspritegfx ANIM_TAG_ROOTS @frenzy plant loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse monbg ANIM_ATTACKER @@ -7824,7 +7740,7 @@ Move_FORESTS_CURSE:: clearmonbg ANIM_ATTACKER end -Move_PETAL_BLIZZARD:: +gBattleAnimMove_PetalBlizzard:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_FLOWER @@ -7871,7 +7787,7 @@ Move_PETAL_BLIZZARD:: blendoff end -Move_FREEZE_DRY:: +gBattleAnimMove_FreezeDry:: monbg ANIM_DEF_PARTNER setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -7907,7 +7823,7 @@ Move_FREEZE_DRY:: blendoff end -Move_DISARMING_VOICE:: +gBattleAnimMove_DisarmingVoice:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d waitforvisualfinish @@ -7923,7 +7839,7 @@ Move_DISARMING_VOICE:: waitforvisualfinish end -Move_PARTING_SHOT:: +gBattleAnimMove_PartingShot:: loadspritegfx ANIM_TAG_NOISE_LINE fadetobg BG_DARK waitbgfadein @@ -7941,7 +7857,7 @@ Move_PARTING_SHOT:: waitbgfadein end -Move_TOPSY_TURVY:: +gBattleAnimMove_TopsyTurvy:: loadspritegfx ANIM_TAG_SWEAT_DROP setalpha 12, 8 createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 0, 4, RGB_BLACK @@ -7958,7 +7874,7 @@ Move_TOPSY_TURVY:: blendoff end -Move_DRAINING_KISS:: +gBattleAnimMove_DrainingKiss:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -7988,7 +7904,7 @@ Move_DRAINING_KISS:: waitforvisualfinish end -Move_CRAFTY_SHIELD:: +gBattleAnimMove_CraftyShield:: loadspritegfx ANIM_TAG_CRAFTY_SHIELD monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -8043,7 +7959,7 @@ Move_CRAFTY_SHIELD:: blendoff end -Move_FLOWER_SHIELD:: +gBattleAnimMove_FlowerShield:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_IMPACT setalpha 12, 8 @@ -8073,7 +7989,7 @@ Move_FLOWER_SHIELD:: blendoff end -Move_GRASSY_TERRAIN:: +gBattleAnimMove_GrassyTerrain:: loadspritegfx ANIM_TAG_ORBS @Recover Ball loadspritegfx ANIM_TAG_GREEN_SPARKLE @Green Star playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -8110,7 +8026,7 @@ Move_GRASSY_TERRAIN:: waitforvisualfinish end -Move_MISTY_TERRAIN:: +gBattleAnimMove_MistyTerrain:: loadspritegfx ANIM_TAG_ORBS @Recover Ball loadspritegfx ANIM_TAG_WATER_GUN @Light Blue Colour loadspritegfx ANIM_TAG_GREEN_SPARKLE @@ -8148,7 +8064,7 @@ Move_MISTY_TERRAIN:: waitforvisualfinish end -Move_ELECTRIFY:: +gBattleAnimMove_Electrify:: loadspritegfx ANIM_TAG_GUARD_RING @ring around user loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color @@ -8211,7 +8127,7 @@ Move_ELECTRIFY:: clearmonbg ANIM_DEF_PARTNER end -Move_PLAY_ROUGH:: +gBattleAnimMove_PlayRough:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_PINK_HEART loadspritegfx ANIM_TAG_DUCK @@ -8267,7 +8183,7 @@ Move_PLAY_ROUGH:: waitforvisualfinish end -Move_FAIRY_WIND:: +gBattleAnimMove_FairyWind:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -8294,7 +8210,7 @@ Move_FAIRY_WIND:: blendoff end -Move_MOONBLAST:: +gBattleAnimMove_Moonblast:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE @@ -8317,7 +8233,7 @@ Move_MOONBLAST:: blendoff end -Move_BOOMBURST:: +gBattleAnimMove_Boomburst:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_THIN_RING createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10 @@ -8368,7 +8284,7 @@ Boomburst_Doubles: createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 goto Boomburst_Last -Move_FAIRY_LOCK:: +gBattleAnimMove_FairyLock:: loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS setalpha 8, 8 monbg ANIM_ATK_PARTNER @@ -8389,12 +8305,12 @@ Move_FAIRY_LOCK:: blendoff end -Move_KINGS_SHIELD:: +gBattleAnimMove_KingsShield:: loadspritegfx ANIM_TAG_PROTECT @protect createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0x0, 0xC, 0xC, 0x318C @Gray - goto Move_PROTECT + goto gBattleAnimMove_Protect -Move_PLAY_NICE:: +gBattleAnimMove_PlayNice:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_SANDSTORM, SOUND_PAN_ATTACKER, 0xc, 0x3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER @@ -8402,7 +8318,7 @@ Move_PLAY_NICE:: createsprite gRedHeartProjectileSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff8 end -Move_CONFIDE:: +gBattleAnimMove_Confide:: loadspritegfx ANIM_TAG_CONFIDE @Confide Bubble createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 createsprite gConfideBubbleTemplate, ANIM_ATTACKER, 11, 0x0, 0x64 @@ -8410,7 +8326,7 @@ Move_CONFIDE:: waitforvisualfinish end -Move_DIAMOND_STORM:: +gBattleAnimMove_DiamondStorm:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER @@ -8483,7 +8399,7 @@ Move_DIAMOND_STORM:: blendoff end -Move_STEAM_ERUPTION:: +gBattleAnimMove_SteamEruption:: loadspritegfx ANIM_TAG_STEAM_ERUPTION @Steam Eruption Particle createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x7, 0x043D delay 0x20 @@ -8523,7 +8439,7 @@ SteamEruptionBreath: delay 0x1 return -Move_HYPERSPACE_HOLE:: +gBattleAnimMove_HyperspaceHole:: loadspritegfx ANIM_TAG_IMPACT @Hits loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -8576,7 +8492,7 @@ HyperspaceHoleMovement: delay 0x4 return -Move_WATER_SHURIKEN:: +gBattleAnimMove_WaterShuriken:: loadspritegfx ANIM_TAG_WATER_ORB @blue color loadspritegfx ANIM_TAG_YELLOW_STAR @swift loadspritegfx ANIM_TAG_BLUE_RING_2 @rings @@ -8599,7 +8515,7 @@ Move_WATER_SHURIKEN:: clearmonbg ANIM_DEF_PARTNER end -Move_MYSTICAL_FIRE:: +gBattleAnimMove_MysticalFire:: call SetPsychicBackground loadspritegfx ANIM_TAG_FIRE setalpha 8, 8 @@ -8629,7 +8545,7 @@ Move_MYSTICAL_FIRE:: call UnsetPsychicBg end -Move_SPIKY_SHIELD:: +gBattleAnimMove_SpikyShield:: loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_GREEN_SPIKE monbg ANIM_ATK_PARTNER @@ -8664,7 +8580,7 @@ Move_SPIKY_SHIELD:: clearmonbg ANIM_ATK_PARTNER end -Move_AROMATIC_MIST:: +gBattleAnimMove_AromaticMist:: loadspritegfx ANIM_TAG_PINK_PETAL playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6E7D @@ -8681,7 +8597,7 @@ Move_AROMATIC_MIST:: waitforvisualfinish end -Move_EERIE_IMPULSE:: +gBattleAnimMove_EerieImpulse:: loadspritegfx ANIM_TAG_THIN_RING @hypervoice circle loadspritegfx ANIM_TAG_SPARK @electric particles loadspritegfx ANIM_TAG_SPARK_2 @electric particles @@ -8726,7 +8642,7 @@ Move_EERIE_IMPULSE:: clearmonbg ANIM_DEF_PARTNER end -Move_VENOM_DRENCH:: +gBattleAnimMove_VenomDrench:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xfffb, 0x1, 0xfffb, 1 @@ -8773,7 +8689,7 @@ AcidDrench: delay 0x2 return -Move_POWDER:: +gBattleAnimMove_Powder:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_SPORE @powder monbg ANIM_DEF_PARTNER @@ -8794,7 +8710,7 @@ POWDER_SPORE: delay 0xc return -Move_GEOMANCY:: +gBattleAnimMove_Geomancy:: loadspritegfx ANIM_TAG_ZYGARDE_HEXES @Hex loadspritegfx ANIM_TAG_GUARD_RING @safeguard loadspritegfx ANIM_TAG_PAW_PRINT @yellow color @@ -8924,7 +8840,7 @@ GeomancyRageBuff: delay 0x1 return -Move_MAGNETIC_FLUX:: +gBattleAnimMove_MagneticFlux:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color @@ -8956,7 +8872,7 @@ MagneticFluxSparks2: createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return -Move_HAPPY_HOUR:: +gBattleAnimMove_HappyHour:: loadspritegfx ANIM_TAG_COIN monbg ANIM_ATTACKER loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 0x8, 10 @@ -8992,7 +8908,7 @@ CoinShower: delay 0x2 return -Move_ELECTRIC_TERRAIN:: +gBattleAnimMove_ElectricTerrain:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 @@ -9028,7 +8944,7 @@ Move_ELECTRIC_TERRAIN:: waitforvisualfinish end -Move_DAZZLING_GLEAM:: +gBattleAnimMove_DazzlingGleam:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_BLUE_STAR createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0x0, 0xd, 0x7fff @@ -9047,7 +8963,7 @@ Move_DAZZLING_GLEAM:: blendoff end -Move_CELEBRATE:: +gBattleAnimMove_Celebrate:: loadspritegfx ANIM_TAG_ITEM_BAG createsprite gCelebrateBagTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -9057,7 +8973,7 @@ Move_CELEBRATE:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER 0x16 0x3 end -Move_HOLD_HANDS:: +gBattleAnimMove_HoldHands:: loadspritegfx ANIM_TAG_TAG_HAND @hand loadspritegfx ANIM_TAG_MAGENTA_HEART @charm loadspritegfx ANIM_TAG_VERTICAL_HEX @red @@ -9098,7 +9014,7 @@ Move_HOLD_HANDS:: createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATK_PARTNER, RGB_YELLOW, 12, 1, 1 end -Move_BABY_DOLL_EYES:: +gBattleAnimMove_BabyDollEyes:: loadspritegfx ANIM_TAG_LEER loadspritegfx ANIM_TAG_PINK_CLOUD loadspritegfx ANIM_TAG_OPENING_EYE @eye @@ -9120,7 +9036,7 @@ Move_BABY_DOLL_EYES:: blendoff end -Move_NUZZLE:: +gBattleAnimMove_Nuzzle:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPARK_2 @@ -9141,7 +9057,7 @@ Move_NUZZLE:: waitforvisualfinish end -Move_HOLD_BACK:: +gBattleAnimMove_HoldBack:: loadspritegfx ANIM_TAG_PAW_PRINT @ yellow/brown loadspritegfx ANIM_TAG_IMPACT @ hit loadspritegfx ANIM_TAG_PURPLE_SWIPE @ swipe @@ -9168,7 +9084,7 @@ Move_HOLD_BACK:: blendoff end -Move_INFESTATION:: +gBattleAnimMove_Infestation:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles monbg ANIM_DEF_PARTNER @@ -9201,7 +9117,7 @@ InfestationVortex: delay 0x1 return -Move_POWER_UP_PUNCH:: +gBattleAnimMove_PowerUpPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_BREATH @@ -9218,7 +9134,7 @@ Move_POWER_UP_PUNCH:: blendoff end -Move_OBLIVION_WING:: +gBattleAnimMove_OblivionWing:: loadspritegfx ANIM_TAG_HYDRO_PUMP loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_BLUE_STAR @@ -9258,7 +9174,7 @@ OblivionWingBeam: delay 0x2 return -Move_THOUSAND_ARROWS:: +gBattleAnimMove_ThousandArrows:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation loadspritegfx ANIM_TAG_ELECTRICITY @charge animation loadspritegfx ANIM_TAG_LEAF @green color @@ -9346,7 +9262,7 @@ ThousandArrowsDown: playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER return -Move_THOUSAND_WAVES:: +gBattleAnimMove_ThousandWaves:: loadspritegfx ANIM_TAG_ZYGARDE_HEXES @Hex loadspritegfx ANIM_TAG_FLYING_DIRT @heat wave animation loadspritegfx ANIM_TAG_LEAF @green color @@ -9475,7 +9391,7 @@ ThousandWavesRotatingImpact: createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0xfffa, 0x0, 0x3 return -Move_LANDS_WRATH:: +gBattleAnimMove_LandsWrath:: loadspritegfx ANIM_TAG_WATER_ORB @whirl motion loadspritegfx ANIM_TAG_SPARK_2 @yellow color monbg ANIM_ATTACKER @@ -9514,7 +9430,7 @@ LandsWrathVortex: delay 0x2 return -Move_LIGHT_OF_RUIN:: +gBattleAnimMove_LightOfRuin:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_ELECTRIC_ORBS @createvisualtask particles loadspritegfx ANIM_TAG_ORBS @beam particles @@ -9575,7 +9491,7 @@ LightOfRuinBeam: delay 0x1 return -Move_ORIGIN_PULSE:: +gBattleAnimMove_OriginPulse:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_WATER_ORB @blue color loadspritegfx ANIM_TAG_ORBS @circles @@ -9647,7 +9563,7 @@ Move_ORIGIN_PULSE:: blendoff end -Move_PRECIPICE_BLADES:: +gBattleAnimMove_PrecipiceBlades:: loadspritegfx ANIM_TAG_LARGE_SPIKE loadspritegfx ANIM_TAG_FIRE_PLUME createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LARGE_SPIKE, 0, 10, 10, 0x159F @Blood orange @@ -9703,7 +9619,7 @@ PrecipiceBladesOpponent: createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 69, ANIM_ATTACKER, 0, -17, 120, 0x0 goto PrecipiceBladesContinue -Move_DRAGON_ASCENT:: +gBattleAnimMove_DragonAscent:: loadspritegfx ANIM_TAG_DRAGON_ASCENT loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 11, 11, RGB(16, 31, 16) @@ -9743,7 +9659,7 @@ Move_DRAGON_ASCENT:: call UnsetPsychicBg end -Move_HYPERSPACE_FURY:: +gBattleAnimMove_HyperspaceFury:: loadspritegfx ANIM_TAG_HOOPA_HAND @Hoopa Hand loadspritegfx ANIM_TAG_HOOPA_RING @Hoopa Ring loadspritegfx ANIM_TAG_IMPACT @@ -9830,7 +9746,7 @@ HyperspaceFuryRandomImpact: return @@@@@@@@@@@@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@@@@@@@@@@@@ -Move_SHORE_UP:: +gBattleAnimMove_ShoreUp:: loadspritegfx ANIM_TAG_FLYING_DIRT @sandstorm loadspritegfx ANIM_TAG_BLUE_STAR @heal2 playsewithpan SE_M_SANDSTORM, 0x0 @@ -9853,7 +9769,7 @@ Move_SHORE_UP:: waitforvisualfinish end -Move_FIRST_IMPRESSION:: +gBattleAnimMove_FirstImpression:: loadspritegfx ANIM_TAG_SWEAT_BEAD @astonish loadspritegfx ANIM_TAG_IMPACT @pound hit loadspritegfx ANIM_TAG_RAZOR_LEAF @green @@ -9883,7 +9799,7 @@ Move_FIRST_IMPRESSION:: clearmonbg ANIM_TARGET end -Move_BANEFUL_BUNKER:: +gBattleAnimMove_BanefulBunker:: loadspritegfx ANIM_TAG_PROTECT @protect loadspritegfx ANIM_TAG_POISON_BUBBLE @poison monbg ANIM_ATK_PARTNER @@ -9909,7 +9825,7 @@ Move_BANEFUL_BUNKER:: clearmonbg ANIM_ATK_PARTNER end -Move_SPIRIT_SHACKLE:: +gBattleAnimMove_SpiritShackle:: loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow loadspritegfx ANIM_TAG_CHAIN_LINK @Chain monbg ANIM_DEF_PARTNER @@ -9935,7 +9851,7 @@ Move_SPIRIT_SHACKLE:: blendoff end -Move_DARKEST_LARIAT:: +gBattleAnimMove_DarkestLariat:: fadetobg BG_DARK waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x0, 0x0, 0xffff @@ -9973,7 +9889,7 @@ DarkestLariatImpact: delay 0x8 return -Move_SPARKLING_ARIA:: +gBattleAnimMove_SparklingAria:: loadspritegfx ANIM_TAG_WATER_ORB @blue color loadspritegfx ANIM_TAG_BUBBLE @circles loadspritegfx ANIM_TAG_HYDRO_PUMP @hydro pump @@ -10065,7 +9981,7 @@ SparklingAriaCharge: delay 0x4 return -Move_ICE_HAMMER:: +gBattleAnimMove_IceHammer:: loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @punch loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_ECLIPSING_ORB @gray color @@ -10096,7 +10012,7 @@ Move_ICE_HAMMER:: blendoff end -Move_FLORAL_HEALING:: +gBattleAnimMove_FloralHealing:: loadspritegfx ANIM_TAG_SPARKLE_2 @heal loadspritegfx ANIM_TAG_FLOWER @flowers loadspritegfx ANIM_TAG_LEAF @leaves @@ -10201,7 +10117,7 @@ CIRCLES_LEAVES: delay 0x2 return -Move_HIGH_HORSEPOWER:: +gBattleAnimMove_HighHorsepower:: loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @horseshoe monbg ANIM_TARGET @@ -10226,7 +10142,7 @@ Move_HIGH_HORSEPOWER:: waitbgfadein end -Move_STRENGTH_SAP:: +gBattleAnimMove_StrengthSap:: loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke loadspritegfx ANIM_TAG_TEAL_ALERT @inward loadspritegfx ANIM_TAG_RED_HEART @heart color @@ -10294,7 +10210,7 @@ Move_STRENGTH_SAP:: clearmonbg ANIM_DEF_PARTNER end -Move_SOLAR_BLADE:: +gBattleAnimMove_SolarBlade:: loadspritegfx ANIM_TAG_ORBS choosetwoturnanim SolarBeamSetUp SolarBladeUnleash SolarBladeUnleash: @@ -10332,7 +10248,7 @@ SolarBladeSunRays: delay 0x6 return -Move_LEAFAGE:: +gBattleAnimMove_Leafage:: loadspritegfx ANIM_TAG_RAZOR_LEAF @leaf loadspritegfx ANIM_TAG_IMPACT @hit monbg ANIM_DEF_PARTNER @@ -10347,7 +10263,7 @@ Move_LEAFAGE:: clearmonbg ANIM_DEF_PARTNER end -Move_SPOTLIGHT:: +gBattleAnimMove_Spotlight:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_CreateSpotlight, 0x2 @@ -10361,7 +10277,7 @@ Move_SPOTLIGHT:: createvisualtask AnimTask_RemoveSpotlight, 0x2 end -Move_TOXIC_THREAD:: +gBattleAnimMove_ToxicThread:: loadspritegfx ANIM_TAG_STRING loadspritegfx ANIM_TAG_WEB_THREAD createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRING, 0, 0xA, 0xA, 0x6038 @Purple @@ -10403,7 +10319,7 @@ Move_TOXIC_THREAD:: createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x9, 0x0, 0x0 end -Move_LASER_FOCUS:: +gBattleAnimMove_LaserFocus:: loadspritegfx ANIM_TAG_EYE_SPARKLE @red loadspritegfx ANIM_TAG_OPENING_EYE @eyes loadspritegfx ANIM_TAG_LEER @leer @@ -10420,7 +10336,7 @@ Move_LASER_FOCUS:: clearmonbg ANIM_ATTACKER end -Move_GEAR_UP:: +gBattleAnimMove_GearUp:: loadspritegfx ANIM_TAG_GEAR loadspritegfx ANIM_TAG_SPARK_2 @sparks createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x039B @@ -10473,7 +10389,7 @@ GearUpSparks: delay 0xF return -Move_THROAT_CHOP:: +gBattleAnimMove_ThroatChop:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @karate chop loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color @@ -10508,7 +10424,7 @@ Move_THROAT_CHOP:: blendoff end -Move_POLLEN_PUFF:: +gBattleAnimMove_PollenPuff:: createvisualtask AnimTask_IsTargetSameSide, 0x5 jumpargeq 0x0, 0x1, PollenPuffAlly PollenPuffOpponent: @@ -10624,7 +10540,7 @@ PollenPuffAlly: blendoff end -Move_ANCHOR_SHOT:: +gBattleAnimMove_AnchorShot:: loadspritegfx ANIM_TAG_CHAIN_LINK loadspritegfx ANIM_TAG_ANCHOR playsewithpan SE_FALL SOUND_PAN_TARGET @@ -10646,7 +10562,7 @@ Move_ANCHOR_SHOT:: clearmonbg ANIM_TARGET end -Move_PSYCHIC_TERRAIN:: +gBattleAnimMove_PsychicTerrain:: loadspritegfx ANIM_TAG_ORBS @Recover Ball loadspritegfx ANIM_TAG_GREEN_SPARKLE @Green Star loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour @@ -10684,7 +10600,7 @@ Move_PSYCHIC_TERRAIN:: waitforvisualfinish end -Move_LUNGE:: +gBattleAnimMove_Lunge:: loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_TEAL_ALERT @hit particles loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @psycho boost charge @@ -10736,7 +10652,7 @@ Move_LUNGE:: clearmonbg ANIM_DEF_PARTNER end -Move_FIRE_LASH:: +gBattleAnimMove_FireLash:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -10779,7 +10695,7 @@ Move_FIRE_LASH:: clearmonbg ANIM_DEF_PARTNER end -Move_POWER_TRIP:: +gBattleAnimMove_PowerTrip:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color @@ -10820,7 +10736,7 @@ PowerTripBuffUp: createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return -Move_BURN_UP:: +gBattleAnimMove_BurnUp:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color loadspritegfx ANIM_TAG_PINK_CLOUD @yawn @@ -10880,7 +10796,7 @@ Move_BURN_UP:: blendoff end -Move_SPEED_SWAP:: +gBattleAnimMove_SpeedSwap:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_ICE_CHUNK @blue green loadspritegfx ANIM_TAG_ORBS @circle @@ -10914,7 +10830,7 @@ Move_SPEED_SWAP:: clearmonbg ANIM_TARGET end -Move_SMART_STRIKE:: +gBattleAnimMove_SmartStrike:: loadspritegfx ANIM_TAG_POWER_GEM @gem loadspritegfx ANIM_TAG_AIR_WAVE @sonicboom loadspritegfx ANIM_TAG_IMPACT @hit @@ -10953,7 +10869,7 @@ Move_SMART_STRIKE:: waitforvisualfinish end -Move_PURIFY:: +gBattleAnimMove_Purify:: loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @Ball loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour @@ -10981,7 +10897,7 @@ Move_PURIFY:: blendoff end -Move_REVELATION_DANCE:: +gBattleAnimMove_RevelationDance:: loadspritegfx ANIM_TAG_ORBS @circles loadspritegfx ANIM_TAG_FLOWER @particles loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @another yellow @@ -11036,7 +10952,7 @@ Move_REVELATION_DANCE:: clearmonbg ANIM_TARGET end -Move_CORE_ENFORCER:: +gBattleAnimMove_CoreEnforcer:: loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_LEAF @green color loadspritegfx ANIM_TAG_RAZOR_LEAF @another green color @@ -11254,7 +11170,7 @@ Move_CORE_ENFORCER:: blendoff end -Move_TROP_KICK:: +gBattleAnimMove_TropKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @kick loadspritegfx ANIM_TAG_LEAF @leaves loadspritegfx ANIM_TAG_FLOWER @flowers @@ -11275,7 +11191,7 @@ Move_TROP_KICK:: clearmonbg ANIM_DEF_PARTNER end -Move_INSTRUCT:: +gBattleAnimMove_Instruct:: loadspritegfx ANIM_TAG_FINGER @finger loadspritegfx ANIM_TAG_SPOTLIGHT @spotlight setalpha 12, 8 @@ -11305,7 +11221,7 @@ Move_INSTRUCT:: blendoff end -General_BeakBlastSetUp: +gBattleAnimGeneral_BeakBlastSetUp:: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER delay 0x3 @@ -11313,7 +11229,7 @@ General_BeakBlastSetUp: createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 waitforvisualfinish end -Move_BEAK_BLAST:: +gBattleAnimMove_BeakBlast:: loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x1F waitforvisualfinish @@ -11335,7 +11251,7 @@ Move_BEAK_BLAST:: waitforvisualfinish end -Move_CLANGING_SCALES:: +gBattleAnimMove_ClangingScales:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES @metal sound loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color monbg ANIM_DEF_PARTNER @@ -11364,7 +11280,7 @@ ClangingScalesMetalSound: delay 0x2 return -Move_DRAGON_HAMMER:: +gBattleAnimMove_DragonHammer:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_GRAY_SMOKE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, 0x7D7F @Pinkish purple @@ -11403,7 +11319,7 @@ Move_DRAGON_HAMMER:: blendoff end -Move_BRUTAL_SWING:: +gBattleAnimMove_BrutalSwing:: loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color monbg ANIM_TARGET @@ -11438,7 +11354,7 @@ Move_BRUTAL_SWING:: clearmonbg ANIM_TARGET end -Move_AURORA_VEIL:: +gBattleAnimMove_AuroraVeil:: loadspritegfx ANIM_TAG_GUARD_RING fadetobg BG_AURORA waitbgfadeout @@ -11462,7 +11378,7 @@ Move_AURORA_VEIL:: blendoff end -General_ShellTrapSetUp: +gBattleAnimGeneral_ShellTrapSetUp:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -11479,7 +11395,7 @@ General_ShellTrapSetUp: clearmonbg ANIM_TARGET blendoff end -Move_SHELL_TRAP:: +gBattleAnimMove_ShellTrap:: ShellTrapUnleash: loadspritegfx ANIM_TAG_IMPACT @pound loadspritegfx ANIM_TAG_SMALL_RED_EYE @red @@ -11655,7 +11571,7 @@ ShellTrapFireLaunch2: delay 0x3 return -Move_FLEUR_CANNON:: +gBattleAnimMove_FleurCannon:: loadspritegfx ANIM_TAG_ORBS @beam particles loadspritegfx ANIM_TAG_ELECTRICITY @discharge loadspritegfx ANIM_TAG_PINK_PETAL @pink color @@ -11710,7 +11626,7 @@ FleurCannonBeam: delay 0x1 return -Move_PSYCHIC_FANGS:: +gBattleAnimMove_PsychicFangs:: loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth loadspritegfx ANIM_TAG_IMPACT @Hit loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @Screen @@ -11763,7 +11679,7 @@ PsychicFangsDestroyWall: delay 0x10 goto PsychicFangsEnd -Move_STOMPING_TANTRUM:: +gBattleAnimMove_StompingTantrum:: loadspritegfx ANIM_TAG_ROCKS @rock colour loadspritegfx ANIM_TAG_SMALL_ROCK @small rock loadspritegfx ANIM_TAG_IMPACT @pound hit @@ -11800,7 +11716,7 @@ StompingTantrumImpact: createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x1 return -Move_SHADOW_BONE:: +gBattleAnimMove_ShadowBone:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT fadetobg BG_NIGHTMARE @@ -11826,7 +11742,7 @@ Move_SHADOW_BONE:: blendoff end -Move_ACCELEROCK:: +gBattleAnimMove_Accelerock:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATK_PARTNER @@ -11849,7 +11765,7 @@ Move_ACCELEROCK:: waitforvisualfinish end -Move_LIQUIDATION:: +gBattleAnimMove_Liquidation:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -11868,7 +11784,7 @@ Move_LIQUIDATION:: blendoff end -Move_PRISMATIC_LASER:: +gBattleAnimMove_PrismaticLaser:: loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color loadspritegfx ANIM_TAG_SPARK_H @yellow color loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color @@ -11990,7 +11906,7 @@ PrismaticLaserRain: createsprite gPrismaticLaserGreenRainTemplate, ANIM_TARGET, 2, -23, 0x28, 4, ANIM_TARGET return -Move_SPECTRAL_THIEF:: +gBattleAnimMove_SpectralThief:: choosetwoturnanim SpectralThiefSteal SpectralThiefUnleash SpectralThiefUnleash: loadspritegfx ANIM_TAG_HANDS_AND_FEET @Black Colour @@ -12111,7 +12027,7 @@ SpectralThiefBuffUp: createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return -Move_SUNSTEEL_STRIKE:: +gBattleAnimMove_SunsteelStrike:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_AIR_WAVE_2 @black color loadspritegfx ANIM_TAG_ROCKS @rock colour @@ -12175,7 +12091,7 @@ SunsteelStrikeBeam: delay 0x1 return -Move_MOONGEIST_BEAM:: +gBattleAnimMove_MoongeistBeam:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @@ -12256,7 +12172,7 @@ MoongeistBeamOrbs: delay 0x1 return -Move_TEARFUL_LOOK:: +gBattleAnimMove_TearfulLook:: loadspritegfx ANIM_TAG_SMALL_BUBBLES @tears loadspritegfx ANIM_TAG_OPENING_EYE @eye monbg ANIM_DEF_PARTNER @@ -12282,7 +12198,7 @@ Move_TEARFUL_LOOK:: clearmonbg ANIM_DEF_PARTNER end -Move_ZING_ZAP:: +gBattleAnimMove_ZingZap:: loadspritegfx ANIM_TAG_SPARK_2 @sparks loadspritegfx ANIM_TAG_YELLOW_BALL @ball loadspritegfx ANIM_TAG_THIN_RING @ring @@ -12334,7 +12250,7 @@ ZingZapSparks2: createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return -Move_NATURES_MADNESS:: +gBattleAnimMove_NaturesMadness:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_SPARKLE_2 @stars @@ -12415,7 +12331,7 @@ Move_NATURES_MADNESS:: blendoff end -Move_MULTI_ATTACK:: +gBattleAnimMove_MultiAttack:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CUT @cut monbg ANIM_TARGET @@ -12452,7 +12368,7 @@ MultiAttackBuff: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return -Move_MIND_BLOWN:: +gBattleAnimMove_MindBlown:: loadspritegfx ANIM_TAG_PINK_HEART @pink color loadspritegfx ANIM_TAG_SMALL_BUBBLES @blue color loadspritegfx ANIM_TAG_BLACEPHALON_HEAD @head @@ -12509,7 +12425,7 @@ MindBlownPinkOrbs: createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFFDA, 0xFF94, 0x8 @between up and upper left return -Move_PLASMA_FISTS:: +gBattleAnimMove_PlasmaFists:: loadspritegfx ANIM_TAG_SHOCK_3 @charge loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect loadspritegfx ANIM_TAG_SPARK @shock wave @@ -12594,7 +12510,7 @@ PlasmaFistsImpact: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 return -Move_PHOTON_GEYSER:: +gBattleAnimMove_PhotonGeyser:: loadspritegfx ANIM_TAG_SHOCK_3 @charge loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color @@ -12704,46 +12620,46 @@ PhotonGeyserBeam: createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -77, ANIM_TARGET, 180, 2, 0 return -Move_ZIPPY_ZAP:: +gBattleAnimMove_ZippyZap:: end @to do: -Move_SPLISHY_SPLASH:: +gBattleAnimMove_SplishySplash:: end @to do: -Move_FLOATY_FALL:: +gBattleAnimMove_FloatyFall:: end @to do: -Move_PIKA_PAPOW:: +gBattleAnimMove_PikaPapow:: end @to do: -Move_BOUNCY_BUBBLE:: +gBattleAnimMove_BouncyBubble:: end @to do: -Move_BUZZY_BUZZ:: +gBattleAnimMove_BuzzyBuzz:: end @to do: -Move_SIZZLY_SLIDE:: +gBattleAnimMove_SizzlySlide:: end @to do: -Move_GLITZY_GLOW:: +gBattleAnimMove_GlitzyGlow:: end @to do: -Move_BADDY_BAD:: +gBattleAnimMove_BaddyBad:: end @to do: -Move_SAPPY_SEED:: +gBattleAnimMove_SappySeed:: end @to do: -Move_FREEZY_FROST:: +gBattleAnimMove_FreezyFrost:: end @to do: -Move_SPARKLY_SWIRL:: +gBattleAnimMove_SparklySwirl:: end @to do: -Move_VEEVEE_VOLLEY:: +gBattleAnimMove_VeeveeVolley:: end @to do: -Move_DOUBLE_IRON_BASH:: +gBattleAnimMove_DoubleIronBash:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2 @@ -12774,10 +12690,10 @@ Move_DOUBLE_IRON_BASH:: end @@@@@@@@@@@@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@@@@@@@@@@@@ -Move_DYNAMAX_CANNON:: - goto Move_HYPER_BEAM +gBattleAnimMove_DynamaxCannon:: + goto gBattleAnimMove_HyperBeam -Move_SNIPE_SHOT:: +gBattleAnimMove_SnipeShot:: loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_LEER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 16, 0 @;Black @@ -12795,7 +12711,7 @@ Move_SNIPE_SHOT:: waitforvisualfinish end -Move_JAW_LOCK:: +gBattleAnimMove_JawLock:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0B1D @Light orange @@ -12815,7 +12731,7 @@ Move_JAW_LOCK:: delay 0x1 end -Move_STUFF_CHEEKS:: +gBattleAnimMove_StuffCheeks:: loadspritegfx ANIM_TAG_BERRY_NORMAL loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_THIN_RING @@ -12853,7 +12769,7 @@ BiteOpponent: createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffDF, 0x10, 0x4, 0x0, 0xfccd, 0xa return -Move_NO_RETREAT:: +gBattleAnimMove_NoRetreat:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER 0x7 0x12 createsprite gNoRetreatFlameTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 10, 0xA0, 0 @@ -12862,7 +12778,7 @@ Move_NO_RETREAT:: waitforvisualfinish end -Move_TAR_SHOT:: +gBattleAnimMove_TarShot:: loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 15, 15, 0 @Black monbg ANIM_TARGET @@ -12886,7 +12802,7 @@ Move_TAR_SHOT:: clearmonbg ANIM_TARGET end -Move_MAGIC_POWDER:: +gBattleAnimMove_MagicPowder:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_WATER_GUN loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER 0xE 0x8 @@ -12914,7 +12830,7 @@ Move_MAGIC_POWDER:: waitforvisualfinish end -Move_DRAGON_DARTS:: +gBattleAnimMove_DragonDarts:: loadspritegfx ANIM_TAG_DREEPY_SHINY loadspritegfx ANIM_TAG_DREEPY loadspritegfx ANIM_TAG_AIR_WAVE @@ -12928,7 +12844,7 @@ Move_DRAGON_DARTS:: waitforvisualfinish end -Move_TEATIME:: +gBattleAnimMove_Teatime:: loadspritegfx ANIM_TAG_TEAPOT loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 @@ -12942,7 +12858,7 @@ Move_TEATIME:: waitforvisualfinish end -Move_OCTOLOCK:: +gBattleAnimMove_Octolock:: loadspritegfx ANIM_TAG_TENDRILS createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TENDRILS, 0, 12, 12, 0x3D98 @Pinkish Red loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET 0x6 0x4 @@ -12961,7 +12877,7 @@ Move_OCTOLOCK:: waitforvisualfinish end -Move_BOLT_BEAK:: +gBattleAnimMove_BoltBeak:: loadspritegfx ANIM_TAG_HORN_HIT loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 @@ -13014,7 +12930,7 @@ BoltBeakSparks: delay 0x4 return -Move_FISHIOUS_REND:: +gBattleAnimMove_FishiousRend:: loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth loadspritegfx ANIM_TAG_SMALL_BUBBLES createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x726A @Blue Teeth @@ -13068,10 +12984,10 @@ FishousRendBubbles: createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 return -Move_COURT_CHANGE:: - goto Move_TRICK_ROOM +gBattleAnimMove_CourtChange:: + goto gBattleAnimMove_TrickRoom -Move_CLANGOROUS_SOUL:: +gBattleAnimMove_ClangorousSoul:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_WATER_ORB @blue loadspritegfx ANIM_TAG_POISON_BUBBLE @purple @@ -13107,7 +13023,7 @@ ClangorousSoulStarBuffEffect: createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c return -Move_BODY_PRESS:: +gBattleAnimMove_BodyPress:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly and bounce animation loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 0xD, 0xD, 0x1E5D @Orange @@ -13124,10 +13040,10 @@ Move_BODY_PRESS:: waitforvisualfinish end -Move_DECORATE:: - goto Move_FLOWER_SHIELD +gBattleAnimMove_Decorate:: + goto gBattleAnimMove_FlowerShield -Move_DRUM_BEATING:: +gBattleAnimMove_DrumBeating:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE loadspritegfx ANIM_TAG_ROOTS @@ -13188,10 +13104,10 @@ Move_DRUM_BEATING:: blendoff end -Move_SNAP_TRAP:: @ placeholder - goto Move_BITE +gBattleAnimMove_SnapTrap:: @ placeholder + goto gBattleAnimMove_Bite -Move_PYRO_BALL:: +gBattleAnimMove_PyroBall:: loadspritegfx ANIM_TAG_FLAT_ROCK loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop @@ -13219,13 +13135,13 @@ Move_PYRO_BALL:: waitforvisualfinish end -Move_BEHEMOTH_BLADE:: - goto Move_SACRED_SWORD +gBattleAnimMove_BehemothBlade:: + goto gBattleAnimMove_SacredSword -Move_BEHEMOTH_BASH:: - goto Move_SUNSTEEL_STRIKE +gBattleAnimMove_BehemothBash:: + goto gBattleAnimMove_SunsteelStrike -Move_AURA_WHEEL:: +gBattleAnimMove_AuraWheel:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 @@ -13273,7 +13189,7 @@ Move_AURA_WHEEL:: blendoff end -Move_BREAKING_SWIPE:: +gBattleAnimMove_BreakingSwipe:: loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_SPARK_2 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, 0x001F @Red @@ -13303,7 +13219,7 @@ Move_BREAKING_SWIPE:: clearmonbg ANIM_TARGET end -Move_BRANCH_POKE:: +gBattleAnimMove_BranchPoke:: loadspritegfx ANIM_TAG_BRANCH loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -13315,7 +13231,7 @@ Move_BRANCH_POKE:: waitforvisualfinish end -Move_OVERDRIVE:: +gBattleAnimMove_Overdrive:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_ELECTRICITY @@ -13341,7 +13257,7 @@ OverdriveRings: createvisualtask SoundTask_WaitForCry, 0x5 return -Move_APPLE_ACID:: +gBattleAnimMove_AppleAcid:: loadspritegfx ANIM_TAG_APPLE loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, 0x061D @Orange @@ -13377,7 +13293,7 @@ Move_APPLE_ACID:: clearmonbg ANIM_TARGET end -Move_GRAV_APPLE:: +gBattleAnimMove_GravApple:: loadspritegfx ANIM_TAG_APPLE fadetobg BG_IN_AIR waitbgfadeout @@ -13428,7 +13344,7 @@ SmallAppleShower: return @ credits to Skeli -Move_SPIRIT_BREAK:: +gBattleAnimMove_SpiritBreak:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_EXPLOSION_2 @@ -13454,7 +13370,7 @@ Move_SPIRIT_BREAK:: waitforvisualfinish end -Move_STRANGE_STEAM:: +gBattleAnimMove_StrangeSteam:: loadspritegfx ANIM_TAG_PINK_CLOUD loadspritegfx ANIM_TAG_FINGER loadspritegfx ANIM_TAG_WATER_GUN @blue colour @@ -13487,7 +13403,7 @@ StrangeSteamCloud: delay 0x2 return -Move_LIFE_DEW:: +gBattleAnimMove_LifeDew:: loadspritegfx ANIM_TAG_WATER_DROPLET loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATK_PARTNER @@ -13513,7 +13429,7 @@ Move_LIFE_DEW:: clearmonbg ANIM_ATK_PARTNER end -Move_OBSTRUCT:: +gBattleAnimMove_Obstruct:: loadspritegfx ANIM_TAG_NOISE_LINE @growl loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_OBSTRUCT_CROSS @@ -13535,7 +13451,7 @@ Move_OBSTRUCT:: end @Credits to Skeli -Move_FALSE_SURRENDER:: +gBattleAnimMove_FalseSurrender:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_ATTACKER @@ -13573,7 +13489,7 @@ Move_FALSE_SURRENDER:: waitbgfadein end -Move_METEOR_ASSAULT:: +gBattleAnimMove_MeteorAssault:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_EXPLOSION @@ -13612,10 +13528,10 @@ BasicExplosion: createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, 0x1, 0x1 return -Move_ETERNABEAM:: - goto Move_HYPER_BEAM +gBattleAnimMove_Eternabeam:: + goto gBattleAnimMove_HyperBeam -Move_STEEL_BEAM:: +gBattleAnimMove_SteelBeam:: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -13676,7 +13592,7 @@ SetSteelBeamBgPlayer: fadetobg BG_STEEL_BEAM_PLAYER @Credits to Skeli -Move_EXPANDING_FORCE:: +gBattleAnimMove_ExpandingForce:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_EXPLOSION_2 createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x7DDE @@ -13787,7 +13703,7 @@ MaxKnuckleExplosionGeyser: @Credits to Skeli -Move_STEEL_ROLLER:: +gBattleAnimMove_SteelRoller:: loadspritegfx ANIM_TAG_STEAMROLLER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -13810,7 +13726,7 @@ SteelRollerRocks: return @Credits to Skeli -Move_SCALE_SHOT:: +gBattleAnimMove_ScaleShot:: loadspritegfx ANIM_TAG_SHELL_RIGHT loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x6 @@ -13827,7 +13743,7 @@ Move_SCALE_SHOT:: end @Credits to Skeli -Move_METEOR_BEAM:: +gBattleAnimMove_MeteorBeam:: loadspritegfx ANIM_TAG_ROCKS fadetobg BG_COSMIC waitbgfadeout @@ -13886,11 +13802,11 @@ MeteorBeamRockLaunch: delay 0x2 return -Move_SHELL_SIDE_ARM:: +gBattleAnimMove_ShellSideArm:: createvisualtask AnimTask_ShellSideArm, 0x5 - jumpargeq 0x0, TRUE, Move_SHELL_SIDE_ARM_PHYSICAL - jumpargeq 0x0, FALSE, Move_SHELL_SIDE_ARM_SPECIAL -Move_SHELL_SIDE_ARM_PHYSICAL:: @ Modified Body Slam, placeholder + jumpargeq 0x0, TRUE, gBattleAnimMove_ShellSideArmPhysical + jumpargeq 0x0, FALSE, gBattleAnimMove_ShellSideArmSpecial +gBattleAnimMove_ShellSideArmPhysical:: @ Modified Body Slam, placeholder loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 6, 6, RGB_MAGENTA monbg ANIM_DEF_PARTNER @@ -13916,7 +13832,7 @@ Move_SHELL_SIDE_ARM_PHYSICAL:: @ Modified Body Slam, placeholder clearmonbg ANIM_DEF_PARTNER blendoff end -Move_SHELL_SIDE_ARM_SPECIAL:: @ Modified Snipe Shot, placeholder +gBattleAnimMove_ShellSideArmSpecial:: @ Modified Snipe Shot, placeholder loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_LEER createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT_2, 0, 6, 6, RGB_MAGENTA @@ -13933,7 +13849,7 @@ Move_SHELL_SIDE_ARM_SPECIAL:: @ Modified Snipe Shot, placeholder end @Credits to Skeli -Move_MISTY_EXPLOSION:: +gBattleAnimMove_MistyExplosion:: loadspritegfx ANIM_TAG_EXPLOSION createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x8, 0x9, 0x7A5B, 0x8, 0x0, 0x8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 @@ -13950,7 +13866,7 @@ Move_MISTY_EXPLOSION:: end @Credits to Skeli -Move_GRASSY_GLIDE:: +gBattleAnimMove_GrassyGlide:: loadspritegfx ANIM_TAG_LEAF @leaves loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_WHIP_HIT @@ -13966,7 +13882,7 @@ Move_GRASSY_GLIDE:: end @Credits to Skeli -Move_RISING_VOLTAGE:: +gBattleAnimMove_RisingVoltage:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK_2 @@ -14038,7 +13954,7 @@ ANIM_RISING_VOLTAGE_STRONGER: end -Move_TERRAIN_PULSE:: +gBattleAnimMove_TerrainPulse:: loadspritegfx ANIM_TAG_DRAGON_PULSE monbg ANIM_TARGET setalpha 12, 8 @@ -14121,7 +14037,7 @@ TerrainPulseEnd: clearmonbg ANIM_TARGET end -Move_SKITTER_SMACK:: +gBattleAnimMove_SkitterSmack:: loadspritegfx ANIM_TAG_IMPACT @Hits loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -14170,7 +14086,7 @@ Move_SKITTER_SMACK:: end @Credits to Skeli -Move_BURNING_JEALOUSY:: +gBattleAnimMove_BurningJealousy:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 42, 1 @@ -14223,7 +14139,7 @@ BurningJealousyFlames: @Credits to Skeli -Move_LASH_OUT:: +gBattleAnimMove_LashOut:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_SLAM_HIT_2 @@ -14264,7 +14180,7 @@ Move_LASH_OUT:: end -Move_POLTERGEIST:: +gBattleAnimMove_Poltergeist:: loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -14303,7 +14219,7 @@ Move_POLTERGEIST:: end @Credits to Skeli -Move_CORROSIVE_GAS:: +gBattleAnimMove_CorrosiveGas:: loadspritegfx ANIM_TAG_PINK_CLOUD @Fumes createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_PINK_CLOUD, 0x0, 0xE, 0xE, 0x19EF @;Garbage green monbg ANIM_ATTACKER @@ -14329,7 +14245,7 @@ Move_CORROSIVE_GAS:: end @Credits to Skeli -Move_COACHING:: +gBattleAnimMove_Coaching:: playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 1 waitforvisualfinish @@ -14340,7 +14256,7 @@ Move_COACHING:: end @Credits to Skeli -Move_FLIP_TURN:: +gBattleAnimMove_FlipTurn:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @;Bubbles loadspritegfx ANIM_TAG_HYDRO_PUMP loadspritegfx ANIM_TAG_WATER_IMPACT @@ -14364,7 +14280,7 @@ Move_FLIP_TURN:: @Credits to Skeli -Move_TRIPLE_AXEL:: +gBattleAnimMove_TripleAxel:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -14409,7 +14325,7 @@ TripleAxelEnd: end @Credits to Skeli -Move_DUAL_WINGBEAT:: +gBattleAnimMove_DualWingbeat:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_FEATHER setalpha 12, 8 @@ -14466,7 +14382,7 @@ DualWingbeatFeatherScatterRight: return @ credits to Skeli -Move_SCORCHING_SANDS:: +gBattleAnimMove_ScorchingSands:: loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_ATK_PARTNER @@ -14491,7 +14407,7 @@ Move_SCORCHING_SANDS:: end @ credits to skeli -Move_JUNGLE_HEALING:: +gBattleAnimMove_JungleHealing:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_SPARKLE_2 @@ -14529,7 +14445,7 @@ Move_JUNGLE_HEALING:: end @ credits to ghoulslash -Move_SILK_TRAP:: +gBattleAnimMove_SilkTrap:: loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_SPIDER_WEB splitbgprio ANIM_ATTACKER @@ -14545,7 +14461,7 @@ Move_SILK_TRAP:: end @ Also used by Snow weather. Credits to Dat.H A -Move_SNOWSCAPE:: +gBattleAnimMove_Snowscape:: loadspritegfx ANIM_TAG_SNOWFLAKES playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB(11, 18, 22) @@ -14562,7 +14478,7 @@ Move_SNOWSCAPE:: end @Credits to Skeli -Move_WICKED_BLOW:: +gBattleAnimMove_WickedBlow:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -14625,7 +14541,7 @@ WickedBlowBuffEffect: @Credits to Skeli -Move_SURGING_STRIKES:: +gBattleAnimMove_SurgingStrikes:: loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_WATER_IMPACT jumpifmoveturn 1 SURGING_STRIKES_1 @@ -14672,7 +14588,7 @@ SURGING_STRIKES_2: @Credits to Skeli -Move_THUNDER_CAGE:: +gBattleAnimMove_ThunderCage:: loadspritegfx ANIM_TAG_SHOCK_3 @Thunderbolt Ball loadspritegfx ANIM_TAG_SPARK @Electric lines loadspritegfx ANIM_TAG_SPARK_H @Thunder Wave @@ -14711,7 +14627,7 @@ ThunderCageBolts: @Credits to Skeli -Move_DRAGON_ENERGY:: +gBattleAnimMove_DragonEnergy:: loadspritegfx ANIM_TAG_HYDRO_PUMP createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x2C5E @;Regidrago Reddish Reddish, Purple monbg ANIM_TARGET @@ -14770,7 +14686,7 @@ DragonEnergyShot: @Credits to Skeli -Move_FREEZING_GLARE:: +gBattleAnimMove_FreezingGlare:: loadspritegfx ANIM_TAG_SMALL_RED_EYE loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice @@ -14789,7 +14705,7 @@ Move_FREEZING_GLARE:: @Credits to Skeli -Move_FIERY_WRATH:: +gBattleAnimMove_FieryWrath:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_PURPLE_RING monbg ANIM_DEF_PARTNER @@ -14869,7 +14785,7 @@ FieryWrathGeyser: @Credits to Skeli -Move_THUNDEROUS_KICK:: +gBattleAnimMove_ThunderousKick:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SPARK_2 @@ -14906,7 +14822,7 @@ Move_THUNDEROUS_KICK:: @Credits to Skeli -Move_GLACIAL_LANCE:: +gBattleAnimMove_GlacialLance:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_ICE_CUBE loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice @@ -14931,12 +14847,12 @@ Move_GLACIAL_LANCE:: end -Move_ASTRAL_BARRAGE:: - goto Move_SHADOW_BALL +gBattleAnimMove_AstralBarrage:: + goto gBattleAnimMove_ShadowBall @Credits to Skeli -Move_EERIE_SPELL:: +gBattleAnimMove_EerieSpell:: loadspritegfx ANIM_TAG_PURPLE_FLAME call SetPsychicBackground waitforvisualfinish @@ -14979,7 +14895,7 @@ EerieSpellConvergingFlames: @@@@@@@@@@@@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@@@@@@@@@@@@ @ credits to Skeli -Move_DIRE_CLAW:: +gBattleAnimMove_DireClaw:: loadspritegfx ANIM_TAG_SLASH loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SLASH, 0x0, 0xC, 0xC, 0x6038 @;Purple @@ -15000,7 +14916,7 @@ Move_DIRE_CLAW:: @ credits to Skeli -Move_PSYSHIELD_BASH:: +gBattleAnimMove_PsyshieldBash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WATER_GUN @Blue colour call SetPsychicBackground @@ -15029,7 +14945,7 @@ Move_PSYSHIELD_BASH:: end @ credits to skeli -Move_POWER_SHIFT:: +gBattleAnimMove_PowerShift:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB loadspritegfx ANIM_TAG_RED_HEART @Red colour for orb monbg ANIM_ATK_PARTNER @@ -15045,7 +14961,7 @@ Move_POWER_SHIFT:: @ credits to skeli -Move_STONE_AXE:: +gBattleAnimMove_StoneAxe:: loadspritegfx ANIM_TAG_SLAM_HIT_2 @Cut loadspritegfx ANIM_TAG_ROCKS monbg ANIM_TARGET @@ -15075,7 +14991,7 @@ StoneAxeRockFragments: @Credits to Skeli -Move_SPRINGTIDE_STORM:: +gBattleAnimMove_SpringtideStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_RED_HEART playsewithpan SE_M_GUST, SOUND_PAN_TARGET @@ -15113,7 +15029,7 @@ SpringtideStormHeartSwirl: @Credits to Skeli -Move_MYSTICAL_POWER:: +gBattleAnimMove_MysticalPower:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue colour @@ -15168,7 +15084,7 @@ MysticalPowerFoeTwoRingsOnly: @Credits to Skeli -Move_RAGING_FURY:: +gBattleAnimMove_RagingFury:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 0x8, 0x3 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 2, 5, 3, 8, RGB_RED @@ -15185,7 +15101,7 @@ Move_RAGING_FURY:: end @Credits to Skeli -Move_WAVE_CRASH:: +gBattleAnimMove_WaveCrash:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @Bubbles on attacker @@ -15206,7 +15122,7 @@ Move_WAVE_CRASH:: @Credits to Skeli -Move_CHLOROBLAST:: +gBattleAnimMove_Chloroblast:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_HYDRO_PUMP createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_THIN_RING, 0x0, 0xA, 0xA, 0x03AC @@ -15267,7 +15183,7 @@ ChloroblastShot: return @Credits to Skeli -Move_MOUNTAIN_GALE:: +gBattleAnimMove_MountainGale:: loadspritegfx ANIM_TAG_ROCKS @Rocks loadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @White Rock Colour monbg ANIM_TARGET @@ -15300,7 +15216,7 @@ MountainGaleIceRock: @Credits to Skeli -Move_VICTORY_DANCE:: +gBattleAnimMove_VictoryDance:: loadspritegfx ANIM_TAG_HOLLOW_ORB createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 40, 6, 3, 3 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER @@ -15320,7 +15236,7 @@ Move_VICTORY_DANCE:: end @Credits to Skeli -Move_HEADLONG_RUSH:: +gBattleAnimMove_HeadlongRush:: loadspritegfx ANIM_TAG_MUD_SAND @Dig loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_EXPLOSION_2 @@ -15407,7 +15323,7 @@ MaxQuake_DirtGeyser: @Credits to Skeli -Move_BARB_BARRAGE:: +gBattleAnimMove_BarbBarrage:: loadspritegfx ANIM_TAG_SPIKES loadspritegfx ANIM_TAG_SHADOW_BALL @Spikes colour loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -15440,7 +15356,7 @@ BarbBarrageSpikeShoot: @Credits to Skeli -Move_ESPER_WING:: +gBattleAnimMove_EsperWing:: loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade loadspritegfx ANIM_TAG_WHITE_FEATHER createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_WHITE_FEATHER, 0x0, 0xA, 0xA, 0x7DDE @@ -15477,7 +15393,7 @@ WingAttackFeatherScatter: @Credits to Skeli -Move_BITTER_MALICE:: +gBattleAnimMove_BitterMalice:: loadspritegfx ANIM_TAG_PURPLE_RING loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -15511,7 +15427,7 @@ BitterMaliceSwirl: return @ credits to Skeli -Move_SHELTER:: +gBattleAnimMove_Shelter:: loadspritegfx ANIM_TAG_SHELL_LEFT loadspritegfx ANIM_TAG_SHELL_RIGHT playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -15527,7 +15443,7 @@ Move_SHELTER:: @Credits to Skeli -Move_TRIPLE_ARROWS:: +gBattleAnimMove_TripleArrows:: loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_DEF_PARTNER @@ -15561,7 +15477,7 @@ TripleArrowsOnOpponent: @Credits to Skeli -Move_INFERNAL_PARADE:: +gBattleAnimMove_InfernalParade:: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_WISP_FIRE monbg ANIM_TARGET @@ -15607,7 +15523,7 @@ InfernalFlames: @Credits to Skeli -Move_CEASELESS_EDGE:: +gBattleAnimMove_CeaselessEdge:: loadspritegfx ANIM_TAG_SLASH playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x2C, 0x0, 0x0, 0x5 @@ -15645,7 +15561,7 @@ CeaselessEdgeSlashes: @Credits to Skeli -Move_BLEAKWIND_STORM:: +gBattleAnimMove_BleakwindStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_ICE_CRYSTALS playsewithpan SE_M_GUST, SOUND_PAN_TARGET @@ -15684,7 +15600,7 @@ BleakwindStormIceSwirl: @Credits to Skeli -Move_WILDBOLT_STORM:: +gBattleAnimMove_WildboltStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_SPARK_2 fadetobg BG_MAX_LIGHTNING @@ -15729,7 +15645,7 @@ WildboltStormSparkSwirl: @Credits to Skeli -Move_SANDSEAR_STORM:: +gBattleAnimMove_SandsearStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_SMALL_EMBER createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_GUST, 0x0, 0xA, 0xA, 0x190B @@ -15770,7 +15686,7 @@ SandsearStormFireSpin: @Credits to Skeli -Move_LUNAR_BLESSING:: +gBattleAnimMove_LunarBlessing:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_GUARD_RING @@ -15805,7 +15721,7 @@ Move_LUNAR_BLESSING:: @Credits to Skeli -Move_TAKE_HEART:: +gBattleAnimMove_TakeHeart:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_GUARD_RING @@ -15834,7 +15750,7 @@ TakeHeartRings: delay 0x4 return -Move_BITTER_BLADE:: +gBattleAnimMove_BitterBlade:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -15870,7 +15786,7 @@ Move_BITTER_BLADE:: blendoff end -Move_DOUBLE_SHOCK:: +gBattleAnimMove_DoubleShock:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_LIGHTNING @@ -15902,13 +15818,13 @@ Move_DOUBLE_SHOCK:: waitforvisualfinish end -Move_SYRUP_BOMB:: +gBattleAnimMove_SyrupBomb:: createvisualtask AnimTask_SyrupBomb, 0x5 - jumpargeq 0x0, FALSE, Move_SYRUP_BOMB_RED - jumpargeq 0x0, TRUE, Move_SYRUP_BOMB_YELLOW + jumpargeq 0x0, FALSE, gBattleAnimMove_SyrupBombRed + jumpargeq 0x0, TRUE, gBattleAnimMove_SyrupBombYellow @ Credits to Dat.H A -Move_SYRUP_BOMB_RED:: +gBattleAnimMove_SyrupBombRed:: loadspritegfx ANIM_TAG_SYRUP_BLOB_RED loadspritegfx ANIM_TAG_SYRUP_SPLAT_RED loadspritegfx ANIM_TAG_SYRUP_SHELL_RED @@ -15946,7 +15862,7 @@ SyrupBombProjectileRed: delay 3 return -Move_SYRUP_BOMB_YELLOW:: +gBattleAnimMove_SyrupBombYellow:: loadspritegfx ANIM_TAG_SYRUP_BLOB_YELLOW loadspritegfx ANIM_TAG_SYRUP_SPLAT_YELLOW loadspritegfx ANIM_TAG_SYRUP_SHELL_YELLOW @@ -15984,7 +15900,7 @@ SyrupBombProjectileYellow: delay 3 return -General_SyrupBombSpeedDrop:: +gBattleAnimGeneral_SyrupBombSpeedDrop:: createvisualtask AnimTask_StickySyrup, 0x5 jumpargeq 0x0, FALSE, SyrupBombSpeedDropRed jumpargeq 0x0, TRUE, SyrupBombSpeedDropYellow @@ -16009,7 +15925,7 @@ SyrupBombSpeedDropYellow: waitforvisualfinish end -Move_CHILLY_RECEPTION:: +gBattleAnimMove_ChillyReception:: loadspritegfx ANIM_TAG_CONFETTI loadspritegfx ANIM_TAG_PINK_CLOUD loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -16080,10 +15996,10 @@ ChillyReceptionSnowballs: delay 3 return -Move_BURNING_BULWARK:: - goto Move_PROTECT +gBattleAnimMove_BurningBulwark:: + goto gBattleAnimMove_Protect -Move_ALLURING_VOICE:: +gBattleAnimMove_AlluringVoice:: loadspritegfx ANIM_TAG_THIN_RING createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d waitforvisualfinish @@ -16104,7 +16020,7 @@ Move_ALLURING_VOICE:: end @ Credits to Z-nogyroP -Move_AQUA_CUTTER:: +gBattleAnimMove_AquaCutter:: loadspritegfx ANIM_TAG_SLASH_2 loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -16143,7 +16059,7 @@ Move_AQUA_CUTTER:: end @ Credits to Z-nogyroP -Move_GIGATON_HAMMER:: +gBattleAnimMove_GigatonHammer:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER loadspritegfx ANIM_TAG_CLAW_SLASH @@ -16172,7 +16088,7 @@ GigatonHammerImpact: return @ Credits to Z-nogyroP -Move_ICE_SPINNER:: +gBattleAnimMove_IceSpinner:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN monbg ANIM_ATTACKER @@ -16215,7 +16131,7 @@ IceCrystalSpinEffect: return @ Credits to Z-nogyroP -Move_RAGING_BULL:: +gBattleAnimMove_RagingBull:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER loadspritegfx ANIM_TAG_BREATH @@ -16302,7 +16218,7 @@ RagingBullShatteredWall: end @ Credits to Z-nogyroP. Simple anim that combines Force Palm + Fake Out -Move_UPPER_HAND:: +gBattleAnimMove_UpperHand:: loadspritegfx ANIM_TAG_SHADOW_BALL loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -16328,7 +16244,7 @@ Move_UPPER_HAND:: blendoff end -Move_JET_PUNCH:: +gBattleAnimMove_JetPunch:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -16370,7 +16286,7 @@ Move_JET_PUNCH:: blendoff end -Move_PSYCHIC_NOISE:: +gBattleAnimMove_PsychicNoise:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -16400,7 +16316,7 @@ Move_PSYCHIC_NOISE:: call UnsetPsychicBg end -Move_TEMPER_FLARE:: +gBattleAnimMove_TemperFlare:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER @@ -16437,7 +16353,7 @@ Move_TEMPER_FLARE:: waitforvisualfinish end -Move_TRAILBLAZE:: +gBattleAnimMove_Trailblaze:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_FLOWER @@ -16483,7 +16399,7 @@ TrailblazeVortex: delay 0x2 return -Move_LAST_RESPECTS:: +gBattleAnimMove_LastRespects:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @@ -16529,7 +16445,7 @@ Move_LAST_RESPECTS:: waitbgfadein end -Move_TIDY_UP:: +gBattleAnimMove_TidyUp:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_ATTACKER setalpha 12, 4 @@ -16550,7 +16466,7 @@ Move_TIDY_UP:: blendoff end -Move_KOWTOW_CLEAVE:: +gBattleAnimMove_KowtowCleave:: loadspritegfx ANIM_TAG_SLASH loadspritegfx ANIM_TAG_CROSS_IMPACT loadspritegfx ANIM_TAG_LEER @@ -16581,7 +16497,7 @@ Move_KOWTOW_CLEAVE:: waitbgfadein end -Move_LUMINA_CRASH:: +gBattleAnimMove_LuminaCrash:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT @@ -16645,7 +16561,7 @@ Move_LUMINA_CRASH:: blendoff end -Move_TORCH_SONG:: +gBattleAnimMove_TorchSong:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT @@ -16704,7 +16620,7 @@ TorchSongEffect: createvisualtask SoundTask_WaitForCry, 5 return -Move_AQUA_STEP:: +gBattleAnimMove_AquaStep:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN @@ -16743,7 +16659,7 @@ Move_AQUA_STEP:: clearmonbg ANIM_ATTACKER end -Move_RAGE_FIST:: +gBattleAnimMove_RageFist:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_ANGER @@ -16781,7 +16697,7 @@ Move_RAGE_FIST:: waitbgfadein end -Move_CHILLING_WATER:: +gBattleAnimMove_ChillingWater:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET @@ -16810,7 +16726,7 @@ Move_CHILLING_WATER:: clearmonbg ANIM_TARGET end -Move_HYDRO_STEAM:: +gBattleAnimMove_HydroSteam:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1 @@ -16844,7 +16760,7 @@ Move_HYDRO_STEAM:: waitforvisualfinish end -Move_POUNCE:: +gBattleAnimMove_Pounce:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -16861,7 +16777,7 @@ Move_POUNCE:: blendoff end -Move_ELECTRO_SHOT:: +gBattleAnimMove_ElectroShot:: choosetwoturnanim ElectroShotSetUp, ElectroShotUnleash ElectroShotEnd: waitforvisualfinish @@ -16949,7 +16865,7 @@ ElectroShotUnleash: blendoff end -Move_IVY_CUDGEL:: +gBattleAnimMove_IvyCudgel:: loadspritegfx ANIM_TAG_IVY_CUDGEL_GRASS loadspritegfx ANIM_TAG_WOOD_HAMMER loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER @@ -17002,7 +16918,7 @@ IvyCudgelWater: waitforvisualfinish end -Move_SPICY_EXTRACT:: +gBattleAnimMove_SpicyExtract:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES @@ -17047,7 +16963,7 @@ Move_SPICY_EXTRACT:: waitforvisualfinish end -Move_AXE_KICK:: +gBattleAnimMove_AxeKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -17062,7 +16978,7 @@ Move_AXE_KICK:: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_SPIN_OUT:: +gBattleAnimMove_SpinOut:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -17088,7 +17004,7 @@ Move_SPIN_OUT:: clearmonbg ANIM_ATTACKER end -Move_MORTAL_SPIN:: +gBattleAnimMove_MortalSpin:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -17113,7 +17029,7 @@ Move_MORTAL_SPIN:: blendoff end -Move_FILLET_AWAY:: +gBattleAnimMove_FilletAway:: loadspritegfx ANIM_TAG_CUT createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 playsewithpan SE_M_CUT, SOUND_PAN_ATTACKER @@ -17133,7 +17049,7 @@ Move_FILLET_AWAY:: blendoff end -Move_FLOWER_TRICK:: +gBattleAnimMove_FlowerTrick:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_LEAF @leaves loadspritegfx ANIM_TAG_FLOWER @flowers @@ -17162,7 +17078,7 @@ Move_FLOWER_TRICK:: createvisualtask AnimTask_RemoveSpotlight, 2 end -Move_MAKE_IT_RAIN:: +gBattleAnimMove_MakeItRain:: loadspritegfx ANIM_TAG_COIN loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATTACKER @@ -17226,7 +17142,7 @@ MakingItRain: delay 2 return -Move_SHED_TAIL:: +gBattleAnimMove_ShedTail:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 24, 3 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 3 waitforvisualfinish @@ -17234,7 +17150,7 @@ Move_SHED_TAIL:: createvisualtask AnimTask_MonToSubstitute, 2 end -Move_HYPER_DRILL:: +gBattleAnimMove_HyperDrill:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT fadetobgfromset BG_GUILLOTINE_OPPONENT, BG_GUILLOTINE_PLAYER, BG_GUILLOTINE_CONTESTS @@ -17292,7 +17208,7 @@ Move_HYPER_DRILL:: blendoff end -Move_TWIN_BEAM:: +gBattleAnimMove_TwinBeam:: loadspritegfx ANIM_TAG_BLUE_RING loadspritegfx ANIM_TAG_GOLD_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -17317,7 +17233,7 @@ Move_TWIN_BEAM:: call UnsetPsychicBg end -Move_COMEUPPANCE:: +gBattleAnimMove_Comeuppance:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -17359,7 +17275,7 @@ Move_COMEUPPANCE:: clearmonbg ANIM_DEF_PARTNER end -Move_BLOOD_MOON:: +gBattleAnimMove_BloodMoon:: loadspritegfx ANIM_TAG_BLOOD_MOON loadspritegfx ANIM_TAG_BEAM loadspritegfx ANIM_TAG_RED_EXPLOSION @@ -17448,7 +17364,7 @@ BloodMoonOnslaughtPlayer: delay 0 return -Move_FICKLE_BEAM:: +gBattleAnimMove_FickleBeam:: createvisualtask AnimTask_IsPowerOver99, 2 waitforvisualfinish jumpreteq FALSE, FickleBeamRegular @@ -17516,7 +17432,7 @@ FickleBeamIntense: waitbgfadein end -Move_THUNDERCLAP:: +gBattleAnimMove_Thunderclap:: loadspritegfx ANIM_TAG_LIGHTNING monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -17547,7 +17463,7 @@ Move_THUNDERCLAP:: waitforvisualfinish end -Move_HARD_PRESS:: +gBattleAnimMove_HardPress:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE @@ -17572,7 +17488,7 @@ Move_HARD_PRESS:: call UnsetHighSpeedBg end -Move_DRAGON_CHEER:: +gBattleAnimMove_DragonCheer:: loadspritegfx ANIM_TAG_NOISE_LINE loadspritegfx ANIM_TAG_CONFETTI loadspritegfx ANIM_TAG_PINK_CLOUD @@ -17613,7 +17529,7 @@ Move_DRAGON_CHEER:: delay 10 end -Move_MALIGNANT_CHAIN:: +gBattleAnimMove_MalignantChain:: loadspritegfx ANIM_TAG_PURPLE_CHAIN loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2 @@ -17630,7 +17546,7 @@ Move_MALIGNANT_CHAIN:: waitforvisualfinish end -Move_POPULATION_BOMB:: +gBattleAnimMove_PopulationBomb:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -17652,34 +17568,34 @@ PopulationBombContinue: waitforvisualfinish end -Move_TERA_BLAST:: -Move_ORDER_UP:: -Move_GLAIVE_RUSH:: -Move_REVIVAL_BLESSING:: -Move_SALT_CURE:: -Move_TRIPLE_DIVE:: -Move_DOODLE:: -Move_RUINATION:: -Move_COLLISION_COURSE:: -Move_ELECTRO_DRIFT:: -Move_ARMOR_CANNON:: -Move_BLAZING_TORQUE:: -Move_WICKED_TORQUE:: -Move_NOXIOUS_TORQUE:: -Move_COMBAT_TORQUE:: -Move_MAGICAL_TORQUE:: -Move_PSYBLADE:: -Move_MATCHA_GOTCHA:: -Move_TERA_STARSTORM:: -Move_MIGHTY_CLEAVE:: -Move_TACHYON_CUTTER:: -Move_SUPERCELL_SLAM:: +gBattleAnimMove_TeraBlast:: +gBattleAnimMove_OrderUp:: +gBattleAnimMove_GlaiveRush:: +gBattleAnimMove_RevivalBlessing:: +gBattleAnimMove_SaltCure:: +gBattleAnimMove_TripleDive:: +gBattleAnimMove_Doodle:: +gBattleAnimMove_Ruination:: +gBattleAnimMove_CollisionCourse:: +gBattleAnimMove_ElectroDrift:: +gBattleAnimMove_ArmorCannon:: +gBattleAnimMove_BlazingTorque:: +gBattleAnimMove_WickedTorque:: +gBattleAnimMove_NoxiousTorque:: +gBattleAnimMove_CombatTorque:: +gBattleAnimMove_MagicalTorque:: +gBattleAnimMove_Psyblade:: +gBattleAnimMove_MatchaGotcha:: +gBattleAnimMove_TeraStarstorm:: +gBattleAnimMove_MightyCleave:: +gBattleAnimMove_TachyonCutter:: +gBattleAnimMove_SupercellSlam:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ -Move_NONE:: -Move_MIRROR_MOVE:: -Move_POUND:: +gBattleAnimMove_None:: +gBattleAnimMove_MirrorMove:: +gBattleAnimMove_Pound:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17691,7 +17607,7 @@ Move_POUND:: blendoff end -Move_DOUBLE_SLAP:: +gBattleAnimMove_DoubleSlap:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17710,7 +17626,7 @@ DoubleSlapRight: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 2 goto DoubleSlapContinue -Move_POISON_POWDER:: +gBattleAnimMove_PoisonPowder:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 @@ -17735,7 +17651,7 @@ Move_POISON_POWDER:: waitforvisualfinish end -Move_STUN_SPORE:: +gBattleAnimMove_StunSpore:: loadspritegfx ANIM_TAG_STUN_SPORE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 @@ -17759,7 +17675,7 @@ Move_STUN_SPORE:: waitforvisualfinish end -Move_SLEEP_POWDER:: +gBattleAnimMove_SleepPowder:: loadspritegfx ANIM_TAG_SLEEP_POWDER loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 @@ -17783,7 +17699,7 @@ Move_SLEEP_POWDER:: waitforvisualfinish end -Move_SWIFT:: +gBattleAnimMove_Swift:: loadspritegfx ANIM_TAG_YELLOW_STAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -17810,7 +17726,7 @@ Move_SWIFT:: blendoff end -Move_STRENGTH:: +gBattleAnimMove_Strength:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -17836,7 +17752,7 @@ Move_STRENGTH:: blendoff end -Move_TACKLE:: +gBattleAnimMove_Tackle:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17850,7 +17766,7 @@ Move_TACKLE:: blendoff end -Move_BODY_SLAM:: +gBattleAnimMove_BodySlam:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -17876,7 +17792,7 @@ Move_BODY_SLAM:: blendoff end -Move_SUPERSONIC:: +gBattleAnimMove_Supersonic:: loadspritegfx ANIM_TAG_GOLD_RING monbg ANIM_ATK_PARTNER splitbgprio_foes ANIM_ATTACKER @@ -17898,7 +17814,7 @@ SupersonicRing: delay 2 return -Move_SCREECH:: +gBattleAnimMove_Screech:: loadspritegfx ANIM_TAG_PURPLE_RING createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 2, 1 call ScreechRing @@ -17913,7 +17829,7 @@ ScreechRing: delay 2 return -Move_FLAME_WHEEL:: +gBattleAnimMove_FlameWheel:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -17955,7 +17871,7 @@ FlameWheel1: @ Unused delay 4 return -Move_PIN_MISSILE:: +gBattleAnimMove_PinMissile:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -17984,7 +17900,7 @@ Move_PIN_MISSILE:: blendoff end -Move_ICICLE_SPEAR:: +gBattleAnimMove_IcicleSpear:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18013,7 +17929,7 @@ Move_ICICLE_SPEAR:: blendoff end -Move_TAKE_DOWN:: +gBattleAnimMove_TakeDown:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -18036,7 +17952,7 @@ Move_TAKE_DOWN:: blendoff end -Move_DOUBLE_EDGE:: +gBattleAnimMove_DoubleEdge:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 @@ -18069,7 +17985,7 @@ Move_DOUBLE_EDGE:: waitforvisualfinish end -Move_POISON_STING:: +gBattleAnimMove_PoisonSting:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -18089,7 +18005,7 @@ Move_POISON_STING:: blendoff end -Move_TWINEEDLE:: +gBattleAnimMove_Twineedle:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18109,7 +18025,7 @@ Move_TWINEEDLE:: blendoff end -Move_FIRE_BLAST:: +gBattleAnimMove_FireBlast:: loadspritegfx ANIM_TAG_SMALL_EMBER createsoundtask SoundTask_FireBlast, SE_M_FLAME_WHEEL, SE_M_FLAME_WHEEL2 call FireBlastRing @@ -18157,7 +18073,7 @@ FireBlastCross: createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0, 0, 15, 2, 2 return -Move_LEECH_SEED:: +gBattleAnimMove_LeechSeed:: loadspritegfx ANIM_TAG_SEED playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER createsprite gLeechSeedSpriteTemplate, ANIM_TARGET, 2, 15, 0, 0, 24, 35, -32 @@ -18172,7 +18088,7 @@ Move_LEECH_SEED:: waitforvisualfinish end -Move_EMBER:: +gBattleAnimMove_Ember:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER, 5, 2 createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1 @@ -18211,7 +18127,7 @@ SetImpactContestsBG: changebg BG_IMPACT_CONTESTS goto SetImpactBackgroundRet -Move_MEGA_PUNCH:: +gBattleAnimMove_MegaPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18236,7 +18152,7 @@ Move_MEGA_PUNCH:: waitbgfadein end -Move_MEGA_KICK:: +gBattleAnimMove_MegaKick:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18261,7 +18177,7 @@ Move_MEGA_KICK:: waitbgfadein end -Move_COMET_PUNCH:: +gBattleAnimMove_CometPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18283,7 +18199,7 @@ CometPunchRight: createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 goto CometPunchContinue -Move_SONIC_BOOM:: +gBattleAnimMove_SonicBoom:: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -18308,7 +18224,7 @@ SonicBoomHit: delay 4 return -Move_THUNDER_SHOCK:: +gBattleAnimMove_ThunderShock:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK @@ -18329,7 +18245,7 @@ Move_THUNDER_SHOCK:: waitforvisualfinish end -Move_THUNDERBOLT:: +gBattleAnimMove_Thunderbolt:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SHOCK_3 loadspritegfx ANIM_TAG_SPARK_2 @@ -18378,7 +18294,7 @@ Move_THUNDERBOLT:: waitforvisualfinish end -Move_THUNDER_WAVE:: +gBattleAnimMove_ThunderWave:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_SPARK_H @@ -18399,7 +18315,7 @@ Move_THUNDER_WAVE:: waitforvisualfinish end -Move_BEAT_UP:: +gBattleAnimMove_BeatUp:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -18433,7 +18349,7 @@ BeatUpRight: playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET goto BeatUpContinue -Move_STOMP:: +gBattleAnimMove_Stomp:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18449,13 +18365,13 @@ Move_STOMP:: blendoff end -Move_TAIL_WHIP:: +gBattleAnimMove_TailWhip:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 24, 3 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 3 waitforvisualfinish end -Move_CUT:: +gBattleAnimMove_Cut:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -18469,7 +18385,7 @@ Move_CUT:: waitforvisualfinish end -Move_HIDDEN_POWER:: +gBattleAnimMove_HiddenPower:: loadspritegfx ANIM_TAG_RED_ORB playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 @@ -18499,7 +18415,7 @@ Move_HIDDEN_POWER:: createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 end -Move_REVERSAL:: +gBattleAnimMove_Reversal:: loadspritegfx ANIM_TAG_BLUE_ORB loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -18527,7 +18443,7 @@ Move_REVERSAL:: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 end -Move_PURSUIT:: +gBattleAnimMove_Pursuit:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -18554,7 +18470,7 @@ PursuitOnSwitchout: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 6, 1, 0 goto PursuitContinue -Move_SPIKE_CANNON:: +gBattleAnimMove_SpikeCannon:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18578,7 +18494,7 @@ Move_SPIKE_CANNON:: blendoff end -Move_SWORDS_DANCE:: +gBattleAnimMove_SwordsDance:: loadspritegfx ANIM_TAG_SWORD monbg ANIM_ATTACKER setalpha 12, 8 @@ -18593,7 +18509,7 @@ Move_SWORDS_DANCE:: delay 1 end -Move_PSYCH_UP:: +gBattleAnimMove_PsychUp:: loadspritegfx ANIM_TAG_SPIRAL monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendColorCycleExclude, 2, 1, 2, 6, 1, 11, RGB_BLACK @@ -18612,7 +18528,7 @@ Move_PSYCH_UP:: waitforvisualfinish end -Move_DIZZY_PUNCH:: +gBattleAnimMove_DizzyPunch:: loadspritegfx ANIM_TAG_DUCK loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -18649,7 +18565,7 @@ DizzyPunchLunge: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 7, 1 return -Move_FIRE_SPIN:: +gBattleAnimMove_FireSpin:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 @@ -18674,7 +18590,7 @@ FireSpinEffect: delay 2 return -Move_FURY_CUTTER:: +gBattleAnimMove_FuryCutter:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -18712,7 +18628,7 @@ FuryCutterStrongest: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 -Move_SELF_DESTRUCT:: +gBattleAnimMove_SelfDestruct:: loadspritegfx ANIM_TAG_EXPLOSION createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_RED createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 6, 0, 38, 1 @@ -18743,7 +18659,7 @@ SelfDestructExplode: delay 6 return -Move_SLAM:: +gBattleAnimMove_Slam:: loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18767,7 +18683,7 @@ Move_SLAM:: blendoff end -Move_VINE_WHIP:: +gBattleAnimMove_VineWhip:: loadspritegfx ANIM_TAG_WHIP_HIT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -18778,7 +18694,7 @@ Move_VINE_WHIP:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 6, 1 end -Move_DRILL_PECK:: +gBattleAnimMove_DrillPeck:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHIRLWIND_LINES createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -18797,7 +18713,7 @@ Move_DRILL_PECK:: waitforvisualfinish end -Move_WATERFALL:: +gBattleAnimMove_Waterfall:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -18882,7 +18798,7 @@ RisingWaterHitEffect: createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20 return -Move_EXPLOSION:: +gBattleAnimMove_Explosion:: loadspritegfx ANIM_TAG_EXPLOSION createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 @@ -18915,7 +18831,7 @@ Explosion1: delay 6 return -Move_DEFENSE_CURL:: +gBattleAnimMove_DefenseCurl:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 18, 3 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE @@ -18927,7 +18843,7 @@ Move_DEFENSE_CURL:: waitforvisualfinish end -Move_PROTECT:: +gBattleAnimMove_Protect:: loadspritegfx ANIM_TAG_PROTECT monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -18937,7 +18853,7 @@ Move_PROTECT:: clearmonbg ANIM_ATK_PARTNER end -Move_DETECT:: +gBattleAnimMove_Detect:: loadspritegfx ANIM_TAG_SPARKLE_4 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 9, RGB_BLACK waitforvisualfinish @@ -18952,7 +18868,7 @@ Move_DETECT:: waitforvisualfinish end -Move_FRUSTRATION:: +gBattleAnimMove_Frustration:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER monbg ANIM_DEF_PARTNER @@ -19057,7 +18973,7 @@ Frustration_Weak: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 goto Frustration_Continue -Move_SAFEGUARD:: +gBattleAnimMove_Safeguard:: loadspritegfx ANIM_TAG_GUARD_RING monbg ANIM_ATK_PARTNER setalpha 8, 8 @@ -19075,7 +18991,7 @@ Move_SAFEGUARD:: blendoff end -Move_PAIN_SPLIT:: +gBattleAnimMove_PainSplit:: loadspritegfx ANIM_TAG_PAIN_SPLIT createsprite gPainSplitProjectileSpriteTemplate, ANIM_ATTACKER, 2, -8, -42, ANIM_ATTACKER createsprite gPainSplitProjectileSpriteTemplate, ANIM_TARGET, 2, -8, -42, ANIM_TARGET @@ -19099,7 +19015,7 @@ Move_PAIN_SPLIT:: createvisualtask AnimTask_PainSplitMovement, 2, ANIM_TARGET, 2 end -Move_VISE_GRIP:: +gBattleAnimMove_ViseGrip:: loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -19115,7 +19031,7 @@ Move_VISE_GRIP:: blendoff end -Move_GUILLOTINE:: +gBattleAnimMove_Guillotine:: loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -19140,7 +19056,7 @@ Move_GUILLOTINE:: waitbgfadein end -Move_PAY_DAY:: +gBattleAnimMove_PayDay:: loadspritegfx ANIM_TAG_COIN loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19158,7 +19074,7 @@ Move_PAY_DAY:: blendoff end -Move_OUTRAGE:: +gBattleAnimMove_Outrage:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 8, 3 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 2, 5, 3, 8, RGB(14, 13, 0) @@ -19203,7 +19119,7 @@ OutrageFlames: createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3 return -Move_SPARK:: +gBattleAnimMove_Spark:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -19249,7 +19165,7 @@ Move_SPARK:: waitforvisualfinish end -Move_ATTRACT:: +gBattleAnimMove_Attract:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER @@ -19278,7 +19194,7 @@ Move_ATTRACT:: createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 10, RGB(31, 25, 27) end -Move_GROWTH:: +gBattleAnimMove_Growth:: call GrowthEffect waitforvisualfinish call GrowthEffect @@ -19290,7 +19206,7 @@ GrowthEffect: createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0 return -Move_WHIRLWIND:: +gBattleAnimMove_Whirlwind:: loadspritegfx ANIM_TAG_WHIRLWIND_LINES createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 2, 0, -8, ANIM_TARGET, 60, 0 createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 60, 1 @@ -19309,7 +19225,7 @@ Move_WHIRLWIND:: waitforvisualfinish end -Move_CONFUSE_RAY:: +gBattleAnimMove_ConfuseRay:: loadspritegfx ANIM_TAG_YELLOW_BALL monbg ANIM_DEF_PARTNER fadetobg BG_GHOST @@ -19329,7 +19245,7 @@ Move_CONFUSE_RAY:: waitbgfadein end -Move_LOCK_ON:: +gBattleAnimMove_LockOn:: loadspritegfx ANIM_TAG_LOCK_ON createsprite gLockOnTargetSpriteTemplate, ANIM_ATTACKER, 40 createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 1 @@ -19341,7 +19257,7 @@ Move_LOCK_ON:: waitforvisualfinish end -Move_MEAN_LOOK:: +gBattleAnimMove_MeanLook:: loadspritegfx ANIM_TAG_EYE monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -19356,7 +19272,7 @@ Move_MEAN_LOOK:: waitforvisualfinish end -Move_ROCK_THROW:: +gBattleAnimMove_RockThrow:: loadspritegfx ANIM_TAG_ROCKS createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 6, 1, 15, 1 createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, 0, 1, 0, 0 @@ -19377,7 +19293,7 @@ Move_ROCK_THROW:: waitforvisualfinish end -Move_ROCK_SLIDE:: +gBattleAnimMove_RockSlide:: loadspritegfx ANIM_TAG_ROCKS monbg ANIM_DEF_PARTNER createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 @@ -19428,7 +19344,7 @@ RockSlideRocks: delay 2 return -Move_THIEF:: +gBattleAnimMove_Thief:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET delay 1 @@ -19448,7 +19364,7 @@ Move_THIEF:: waitbgfadein end -Move_BUBBLE_BEAM:: +gBattleAnimMove_BubbleBeam:: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET @@ -19486,7 +19402,7 @@ BulbblebeamCreateBubbles: delay 3 return -Move_ICY_WIND:: +gBattleAnimMove_IcyWind:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_ICE_SPIKES monbg ANIM_DEF_PARTNER @@ -19522,7 +19438,7 @@ IcyWindSwirlingSnowballs: createsprite gSwirlingSnowballSpriteTemplate, ANIM_TARGET, 40, 0, -5, 0, -5, 72, 1 return -Move_SMOKESCREEN:: +gBattleAnimMove_Smokescreen:: loadspritegfx ANIM_TAG_BLACK_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER @@ -19546,7 +19462,7 @@ Move_SMOKESCREEN:: waitforvisualfinish end -Move_CONVERSION:: +gBattleAnimMove_Conversion:: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -19598,7 +19514,7 @@ Move_CONVERSION:: blendoff end -Move_CONVERSION_2:: +gBattleAnimMove_Conversion2:: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -19643,7 +19559,7 @@ Move_CONVERSION_2:: blendoff end -Move_ROLLING_KICK:: +gBattleAnimMove_RollingKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19665,7 +19581,7 @@ Move_ROLLING_KICK:: blendoff end -Move_HEADBUTT:: +gBattleAnimMove_Headbutt:: loadspritegfx ANIM_TAG_IMPACT createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -19681,7 +19597,7 @@ Move_HEADBUTT:: waitforvisualfinish end -Move_HORN_ATTACK:: +gBattleAnimMove_HornAttack:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -19699,7 +19615,7 @@ Move_HORN_ATTACK:: waitforvisualfinish end -Move_FURY_ATTACK:: +gBattleAnimMove_FuryAttack:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 256, ANIM_ATTACKER, 2 @@ -19723,7 +19639,7 @@ FuryAttackLeft: playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET goto FuryAttackContinue -Move_HORN_DRILL:: +gBattleAnimMove_HornDrill:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT jumpifcontest HornDrillInContest @@ -19790,7 +19706,7 @@ HornDrillInContest: createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1 goto HornDrillContinue -Move_THRASH:: +gBattleAnimMove_Thrash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET createvisualtask AnimTask_ThrashMoveMonHorizontal, 2 @@ -19808,7 +19724,7 @@ Move_THRASH:: playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET end -Move_SING:: +gBattleAnimMove_Sing:: loadspritegfx ANIM_TAG_MUSIC_NOTES monbg ANIM_DEF_PARTNER createvisualtask AnimTask_MusicNotesRainbowBlend, 2 @@ -19844,7 +19760,7 @@ Move_SING:: waitforvisualfinish end -Move_LOW_KICK:: +gBattleAnimMove_LowKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 @@ -19857,7 +19773,7 @@ Move_LOW_KICK:: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_EARTHQUAKE:: +gBattleAnimMove_Earthquake:: createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 50 createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 50 playsewithpan SE_M_EARTHQUAKE, 0 @@ -19867,7 +19783,7 @@ Move_EARTHQUAKE:: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 end -Move_FISSURE:: +gBattleAnimMove_Fissure:: loadspritegfx ANIM_TAG_MUD_SAND createvisualtask AnimTask_HorizontalShake, 3, ANIM_PLAYER_RIGHT, 10, 50 createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50 @@ -19910,7 +19826,7 @@ FissureDirtPlumeClose: playsewithpan SE_M_DIG, SOUND_PAN_TARGET return -Move_DIG:: +gBattleAnimMove_Dig:: choosetwoturnanim DigSetUp, DigUnleash DigEnd: end @@ -19958,7 +19874,7 @@ DigThrowDirt: delay 32 return -Move_MEDITATE:: +gBattleAnimMove_Meditate:: call SetPsychicBackground createvisualtask AnimTask_MeditateStretchAttacker, 2 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -19968,7 +19884,7 @@ Move_MEDITATE:: call UnsetPsychicBg end -Move_AGILITY:: +gBattleAnimMove_Agility:: monbg ANIM_ATK_PARTNER setalpha 12, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 4, 4 @@ -19989,7 +19905,7 @@ Move_AGILITY:: delay 1 end -Move_QUICK_ATTACK:: +gBattleAnimMove_QuickAttack:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -20006,7 +19922,7 @@ Move_QUICK_ATTACK:: waitforvisualfinish end -Move_RAGE:: +gBattleAnimMove_Rage:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER monbg ANIM_TARGET @@ -20027,7 +19943,7 @@ Move_RAGE:: clearmonbg ANIM_TARGET end -Move_TELEPORT:: +gBattleAnimMove_Teleport:: call SetPsychicBackground createvisualtask AnimTask_Teleport, 2 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER @@ -20062,12 +19978,12 @@ DoubleTeamAnimRet: delay 1 return -Move_DOUBLE_TEAM:: +gBattleAnimMove_DoubleTeam:: createvisualtask AnimTask_DoubleTeam, 2 call DoubleTeamAnimRet end -Move_MINIMIZE:: +gBattleAnimMove_Minimize:: setalpha 10, 8 createvisualtask AnimTask_Minimize, 2 loopsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 34, 3 @@ -20075,7 +19991,7 @@ Move_MINIMIZE:: blendoff end -Move_METRONOME:: +gBattleAnimMove_Metronome:: loadspritegfx ANIM_TAG_FINGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 @@ -20087,7 +20003,7 @@ Move_METRONOME:: waitforvisualfinish end -Move_SKULL_BASH:: +gBattleAnimMove_SkullBash:: choosetwoturnanim SkullBashSetUp, SkullBashAttack SkullBashEnd: end @@ -20120,7 +20036,7 @@ SkullBashAttack: createvisualtask AnimTask_SkullBashPosition, 2, 1 goto SkullBashEnd -Move_AMNESIA:: +gBattleAnimMove_Amnesia:: loadspritegfx ANIM_TAG_AMNESIA call SetPsychicBackground delay 8 @@ -20132,7 +20048,7 @@ Move_AMNESIA:: call UnsetPsychicBg end -Move_KINESIS:: +gBattleAnimMove_Kinesis:: loadspritegfx ANIM_TAG_ALERT loadspritegfx ANIM_TAG_BENT_SPOON playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -20151,7 +20067,7 @@ Move_KINESIS:: call UnsetPsychicBg end -Move_GLARE:: +gBattleAnimMove_Glare:: loadspritegfx ANIM_TAG_SMALL_RED_EYE loadspritegfx ANIM_TAG_EYE_SPARKLE createvisualtask AnimTask_GlareEyeDots, 5, 0 @@ -20169,7 +20085,7 @@ Move_GLARE:: createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 0, RGB_BLACK end -Move_BARRAGE:: +gBattleAnimMove_Barrage:: loadspritegfx ANIM_TAG_RED_BALL createvisualtask AnimTask_BarrageBall, 3 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -20180,7 +20096,7 @@ Move_BARRAGE:: loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 2 end -Move_SKY_ATTACK:: +gBattleAnimMove_SkyAttack:: choosetwoturnanim SkyAttackSetUp, SkyAttackUnleash SkyAttackEnd: end @@ -20246,20 +20162,20 @@ SkyAttackUnleash: call UnsetSkyBg goto SkyAttackEnd -Move_FLASH:: +gBattleAnimMove_Flash:: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createvisualtask AnimTask_Flash, 2 waitforvisualfinish end -Move_SPLASH:: +gBattleAnimMove_Splash:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 8 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 waitforvisualfinish end -Move_ACID_ARMOR:: +gBattleAnimMove_AcidArmor:: monbg ANIM_ATTACKER setalpha 15, 0 createvisualtask AnimTask_AcidArmor, 2, ANIM_ATTACKER @@ -20270,13 +20186,13 @@ Move_ACID_ARMOR:: delay 1 end -Move_SHARPEN:: +gBattleAnimMove_Sharpen:: loadspritegfx ANIM_TAG_SPHERE_TO_CUBE createsprite gSharpenSphereSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish end -Move_SUPER_FANG:: +gBattleAnimMove_SuperFang:: loadspritegfx ANIM_TAG_FANG_ATTACK createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 1, 0, 20, 1 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -20296,7 +20212,7 @@ Move_SUPER_FANG:: blendoff end -Move_SLASH:: +gBattleAnimMove_Slash:: loadspritegfx ANIM_TAG_SLASH createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET @@ -20307,7 +20223,7 @@ Move_SLASH:: waitforvisualfinish end -Move_STRUGGLE:: +gBattleAnimMove_Struggle:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_MOVEMENT_WAVES monbg ANIM_TARGET @@ -20325,7 +20241,7 @@ Move_STRUGGLE:: blendoff end -Move_SKETCH:: +gBattleAnimMove_Sketch:: loadspritegfx ANIM_TAG_PENCIL monbg ANIM_TARGET createvisualtask AnimTask_SketchDrawMon, 2 @@ -20336,7 +20252,7 @@ Move_SKETCH:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 2 end -Move_NIGHTMARE:: +gBattleAnimMove_Nightmare:: fadetobg BG_GHOST waitbgfadein jumpifcontest NightmareInContest @@ -20358,7 +20274,7 @@ NightmareInContest: waitbgfadein end -Move_FLAIL:: +gBattleAnimMove_Flail:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -20373,7 +20289,7 @@ Move_FLAIL:: blendoff end -Move_SPITE:: +gBattleAnimMove_Spite:: fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein @@ -20407,7 +20323,7 @@ UnsetHighSpeedBg: waitbgfadein return -Move_MACH_PUNCH:: +gBattleAnimMove_MachPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATK_PARTNER @@ -20427,7 +20343,7 @@ Move_MACH_PUNCH:: call UnsetHighSpeedBg end -Move_FORESIGHT:: +gBattleAnimMove_Foresight:: loadspritegfx ANIM_TAG_MAGNIFYING_GLASS monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -20446,7 +20362,7 @@ Move_FORESIGHT:: clearmonbg ANIM_DEF_PARTNER end -Move_DESTINY_BOND:: +gBattleAnimMove_DestinyBond:: loadspritegfx ANIM_TAG_WHITE_SHADOW fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -20466,7 +20382,7 @@ Move_DESTINY_BOND:: clearmonbg 5 end -Move_ENDURE:: +gBattleAnimMove_Endure:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -20491,7 +20407,7 @@ EndureEffect: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 0, 1 return -Move_CHARM:: +gBattleAnimMove_Charm:: loadspritegfx ANIM_TAG_MAGENTA_HEART createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0, 20 @@ -20505,7 +20421,7 @@ Move_CHARM:: waitforvisualfinish end -Move_ROLLOUT:: +gBattleAnimMove_Rollout:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_ROCKS @@ -20522,7 +20438,7 @@ Move_ROLLOUT:: blendoff end -Move_FALSE_SWIPE:: +gBattleAnimMove_FalseSwipe:: loadspritegfx ANIM_TAG_SLASH_2 loadspritegfx ANIM_TAG_IMPACT createsprite gFalseSwipeSliceSpriteTemplate, ANIM_TARGET, 2 @@ -20549,7 +20465,7 @@ Move_FALSE_SWIPE:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end -Move_SWAGGER:: +gBattleAnimMove_Swagger:: loadspritegfx ANIM_TAG_BREATH loadspritegfx ANIM_TAG_ANGER createvisualtask AnimTask_GrowAndShrink, 2 @@ -20567,7 +20483,7 @@ Move_SWAGGER:: waitforvisualfinish end -Move_MILK_DRINK:: +gBattleAnimMove_MilkDrink:: loadspritegfx ANIM_TAG_MILK_BOTTLE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_BLUE_STAR @@ -20588,7 +20504,7 @@ Move_MILK_DRINK:: waitforvisualfinish end -Move_MAGNITUDE:: +gBattleAnimMove_Magnitude:: createvisualtask AnimTask_IsPowerOver99, 2 waitforvisualfinish jumpreteq FALSE, MagnitudeRegular @@ -20610,7 +20526,7 @@ MagnitudeIntense: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 goto MagnitudeEnd -Move_RAPID_SPIN:: +gBattleAnimMove_RapidSpin:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN monbg ANIM_ATTACKER @@ -20629,7 +20545,7 @@ Move_RAPID_SPIN:: clearmonbg ANIM_ATTACKER end -Move_MOONLIGHT:: +gBattleAnimMove_Moonlight:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR @@ -20656,7 +20572,7 @@ Move_MOONLIGHT:: waitforvisualfinish end -Move_EXTREME_SPEED:: +gBattleAnimMove_ExtremeSpeed:: loadspritegfx ANIM_TAG_SPEED_DUST loadspritegfx ANIM_TAG_IMPACT call SetHighSpeedBg @@ -20692,7 +20608,7 @@ Move_EXTREME_SPEED:: delay 1 end -Move_UPROAR:: +gBattleAnimMove_Uproar:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -20717,7 +20633,7 @@ Move_UPROAR:: clearmonbg ANIM_DEF_PARTNER end -Move_HEAT_WAVE:: +gBattleAnimMove_HeatWave:: loadspritegfx ANIM_TAG_FLYING_DIRT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 6, 6, RGB_RED createvisualtask AnimTask_LoadSandstormBackground, 5, TRUE @@ -20742,7 +20658,7 @@ Move_HEAT_WAVE:: end @ Also used by Hail weather -Move_HAIL:: +gBattleAnimMove_Hail:: loadspritegfx ANIM_TAG_HAIL loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK @@ -20753,7 +20669,7 @@ Move_HAIL:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK end -Move_TORMENT:: +gBattleAnimMove_Torment:: loadspritegfx ANIM_TAG_ANGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createvisualtask AnimTask_TormentAttacker, 2 @@ -20766,7 +20682,7 @@ Move_TORMENT:: playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET end -Move_MEMENTO:: +gBattleAnimMove_Memento:: setalpha 0, 16 delay 1 createvisualtask AnimTask_InitMementoShadow, 2 @@ -20790,14 +20706,14 @@ Move_MEMENTO:: delay 1 end -Move_FACADE:: +gBattleAnimMove_Facade:: loadspritegfx ANIM_TAG_SWEAT_DROP createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 3 createvisualtask AnimTask_FacadeColorBlend, 2, ANIM_ATTACKER, 72 loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 24, 3 end -Move_SMELLING_SALTS:: +gBattleAnimMove_SmellingSalts:: loadspritegfx ANIM_TAG_TAG_HAND loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT createsprite gSmellingSaltsHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 2 @@ -20812,7 +20728,7 @@ Move_SMELLING_SALTS:: loopsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET, 16, 3 end -Move_FOLLOW_ME:: +gBattleAnimMove_FollowMe:: loadspritegfx ANIM_TAG_FINGER createsprite gFollowMeFingerSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -20822,7 +20738,7 @@ Move_FOLLOW_ME:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3 end -Move_CHARGE:: +gBattleAnimMove_Charge:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -20857,7 +20773,7 @@ Move_CHARGE:: blendoff end -Move_TAUNT:: +gBattleAnimMove_Taunt:: loadspritegfx ANIM_TAG_FINGER_2 loadspritegfx ANIM_TAG_THOUGHT_BUBBLE loadspritegfx ANIM_TAG_ANGER @@ -20877,7 +20793,7 @@ Move_TAUNT:: playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET end -Move_HELPING_HAND:: +gBattleAnimMove_HelpingHand:: loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_HelpingHandAttackerMovement, 5 createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0 @@ -20894,7 +20810,7 @@ Move_HELPING_HAND:: createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATK_PARTNER, RGB_YELLOW, 12, 1, 1 end -Move_ASSIST:: +gBattleAnimMove_Assist:: loadspritegfx ANIM_TAG_PAW_PRINT createsprite gAssistPawprintSpriteTemplate, ANIM_ATTACKER, 50, 112, -16, 140, 128, 36 delay 2 @@ -20911,7 +20827,7 @@ Move_ASSIST:: playsewithpan SE_M_SCRATCH, 0 end -Move_SUPERPOWER:: +gBattleAnimMove_Superpower:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK @@ -20945,7 +20861,7 @@ Move_SUPERPOWER:: delay 1 end -Move_RECYCLE:: +gBattleAnimMove_Recycle:: loadspritegfx ANIM_TAG_RECYCLE monbg ANIM_ATTACKER setalpha 0, 16 @@ -20961,7 +20877,7 @@ Move_RECYCLE:: delay 1 end -Move_BRICK_BREAK:: +gBattleAnimMove_BrickBreak:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -21025,7 +20941,7 @@ BrickBreakShatteredWall: clearmonbg ANIM_TARGET end -Move_YAWN:: +gBattleAnimMove_Yawn:: loadspritegfx ANIM_TAG_PINK_CLOUD createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER @@ -21041,7 +20957,7 @@ Move_YAWN:: playsewithpan SE_M_YAWN, SOUND_PAN_TARGET end -Move_ENDEAVOR:: +gBattleAnimMove_Endeavor:: loadspritegfx ANIM_TAG_SWEAT_DROP loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 2 @@ -21057,7 +20973,7 @@ Move_ENDEAVOR:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end -Move_ERUPTION:: +gBattleAnimMove_Eruption:: loadspritegfx ANIM_TAG_WARM_ROCK createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 2, 0, 4, RGB_RED waitforvisualfinish @@ -21082,7 +20998,7 @@ Move_ERUPTION:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED end -Move_SKILL_SWAP:: +gBattleAnimMove_SkillSwap:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB call SetPsychicBackground createvisualtask AnimTask_SkillSwap, 3, ANIM_TARGET @@ -21095,7 +21011,7 @@ Move_SKILL_SWAP:: call UnsetPsychicBg end -Move_IMPRISON:: +gBattleAnimMove_Imprison:: loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_X_SIGN call SetPsychicBackground @@ -21112,7 +21028,7 @@ Move_IMPRISON:: call UnsetPsychicBg end -Move_GRUDGE:: +gBattleAnimMove_Grudge:: loadspritegfx ANIM_TAG_PURPLE_FLAME monbg ANIM_ATTACKER splitbgprio_all @@ -21130,7 +21046,7 @@ Move_GRUDGE:: clearmonbg ANIM_ATTACKER end -Move_CAMOUFLAGE:: +gBattleAnimMove_Camouflage:: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER setalpha 16, 0 @@ -21148,7 +21064,7 @@ Move_CAMOUFLAGE:: clearmonbg ANIM_ATK_PARTNER end -Move_TAIL_GLOW:: +gBattleAnimMove_TailGlow:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 @@ -21164,7 +21080,7 @@ Move_TAIL_GLOW:: delay 1 end -Move_LUSTER_PURGE:: +gBattleAnimMove_LusterPurge:: loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT fadetobg BG_PSYCHIC @@ -21207,7 +21123,7 @@ Move_LUSTER_PURGE:: call UnsetPsychicBg end -Move_MIST_BALL:: +gBattleAnimMove_MistBall:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WHITE_FEATHER delay 0 @@ -21227,7 +21143,7 @@ Move_MIST_BALL:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE end -Move_FEATHER_DANCE:: +gBattleAnimMove_FeatherDance:: loadspritegfx ANIM_TAG_WHITE_FEATHER monbg ANIM_DEF_PARTNER splitbgprio_all @@ -21249,7 +21165,7 @@ Move_FEATHER_DANCE:: clearmonbg ANIM_DEF_PARTNER end -Move_TEETER_DANCE:: +gBattleAnimMove_TeeterDance:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_DUCK createvisualtask AnimTask_TeeterDanceMovement, 5 @@ -21269,7 +21185,7 @@ Move_TEETER_DANCE:: playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER end -Move_MUD_SPORT:: +gBattleAnimMove_MudSport:: loadspritegfx ANIM_TAG_MUD_SAND createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 6 delay 24 @@ -21316,7 +21232,7 @@ Move_MUD_SPORT:: waitplaysewithpan SE_M_BUBBLE2, 0, 10 end -Move_NEEDLE_ARM:: +gBattleAnimMove_NeedleArm:: loadspritegfx ANIM_TAG_GREEN_SPIKE loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -21359,7 +21275,7 @@ Move_NEEDLE_ARM:: createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 1, 1, -17, -17, 10 end -Move_SLACK_OFF:: +gBattleAnimMove_SlackOff:: loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_SlackOffSquish, 2, ANIM_ATTACKER playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER @@ -21368,7 +21284,7 @@ Move_SLACK_OFF:: waitforvisualfinish end -Move_CRUSH_CLAW:: +gBattleAnimMove_CrushClaw:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_TORN_METAL @@ -21389,7 +21305,7 @@ Move_CRUSH_CLAW:: clearmonbg ANIM_TARGET end -Move_AROMATHERAPY:: +gBattleAnimMove_Aromatherapy:: playsewithpan SE_M_PETAL_DANCE, 0 loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_THIN_RING @@ -21428,7 +21344,7 @@ Move_AROMATHERAPY:: waitforvisualfinish end -Move_FAKE_TEARS:: +gBattleAnimMove_FakeTears:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_THOUGHT_BUBBLE loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -21451,7 +21367,7 @@ Move_FAKE_TEARS:: waitforvisualfinish end -Move_AIR_CUTTER:: +gBattleAnimMove_AirCutter:: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT @@ -21472,7 +21388,7 @@ Move_AIR_CUTTER:: delay 0 end -Move_ODOR_SLEUTH:: +gBattleAnimMove_OdorSleuth:: monbg ANIM_TARGET createvisualtask AnimTask_OdorSleuthMovement, 5 delay 24 @@ -21488,7 +21404,7 @@ Move_ODOR_SLEUTH:: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER end -Move_GRASS_WHISTLE:: +gBattleAnimMove_GrassWhistle:: loadspritegfx ANIM_TAG_MUSIC_NOTES createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB(18, 31, 12) waitforvisualfinish @@ -21525,7 +21441,7 @@ Move_GRASS_WHISTLE:: waitforvisualfinish end -Move_TICKLE:: +gBattleAnimMove_Tickle:: loadspritegfx ANIM_TAG_EYE_SPARKLE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK waitforvisualfinish @@ -21543,7 +21459,7 @@ Move_TICKLE:: waitforvisualfinish end -Move_WATER_SPOUT:: +gBattleAnimMove_WaterSpout:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -21560,7 +21476,7 @@ Move_WATER_SPOUT:: blendoff end -Move_SHADOW_PUNCH:: +gBattleAnimMove_ShadowPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET fadetobg BG_GHOST @@ -21581,7 +21497,7 @@ Move_SHADOW_PUNCH:: waitbgfadein end -Move_EXTRASENSORY:: +gBattleAnimMove_Extrasensory:: call SetPsychicBackground monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -21602,7 +21518,7 @@ Move_EXTRASENSORY:: call UnsetPsychicBg end -Move_AERIAL_ACE:: +gBattleAnimMove_AerialAce:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -21619,20 +21535,20 @@ Move_AERIAL_ACE:: blendoff end -Move_IRON_DEFENSE:: +gBattleAnimMove_IronDefense:: loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 waitforvisualfinish end -Move_BLOCK:: +gBattleAnimMove_Block:: loadspritegfx ANIM_TAG_X_SIGN createsprite gBlockXSpriteTemplate, ANIM_TARGET, 66 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET end -Move_HOWL:: +gBattleAnimMove_Howl:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER delay 12 @@ -21642,7 +21558,7 @@ Move_HOWL:: delay 30 end -Move_BULK_UP:: +gBattleAnimMove_BulkUp:: loadspritegfx ANIM_TAG_BREATH createvisualtask AnimTask_GrowAndShrink, 2 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -21652,7 +21568,7 @@ Move_BULK_UP:: waitforvisualfinish end -Move_COVET:: +gBattleAnimMove_Covet:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 @@ -21669,7 +21585,7 @@ Move_COVET:: loopsewithpan SE_M_DIZZY_PUNCH, SOUND_PAN_TARGET, 4, 3 end -Move_VOLT_TACKLE:: +gBattleAnimMove_VoltTackle:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -21716,7 +21632,7 @@ Move_VOLT_TACKLE:: waitforvisualfinish end -Move_WATER_SPORT:: +gBattleAnimMove_WaterSport:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB createvisualtask AnimTask_WaterSport, 5 delay 8 @@ -21729,7 +21645,7 @@ Move_WATER_SPORT:: panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 end -Move_CALM_MIND:: +gBattleAnimMove_CalmMind:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, ANIM_ATTACKER, 0, 0, 16, RGB_BLACK @@ -21752,7 +21668,7 @@ Move_CALM_MIND:: clearmonbg ANIM_ATK_PARTNER end -Move_LEAF_BLADE:: +gBattleAnimMove_LeafBlade:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_CROSS_IMPACT createvisualtask AnimTask_LeafBlade, 5 @@ -21777,7 +21693,7 @@ Move_LEAF_BLADE:: blendoff end -Move_DRAGON_DANCE:: +gBattleAnimMove_DragonDance:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -21801,7 +21717,7 @@ Move_DRAGON_DANCE:: delay 1 end -Move_SHOCK_WAVE:: +gBattleAnimMove_ShockWave:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK @@ -21831,13 +21747,13 @@ Move_SHOCK_WAVE:: blendoff end -Move_HARDEN:: +gBattleAnimMove_Harden:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish end -Move_BELLY_DRUM:: +gBattleAnimMove_BellyDrum:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE createvisualtask AnimTask_MusicNotesRainbowBlend, 2 @@ -21880,7 +21796,7 @@ BellyDrumRight: createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 8, 2, 1 return -Move_MIND_READER:: +gBattleAnimMove_MindReader:: loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_OPENING_EYE loadspritegfx ANIM_TAG_ROUND_WHITE_HALO @@ -21920,7 +21836,7 @@ MindReaderEyeSpikeEffect: delay 2 return -Move_ICE_PUNCH:: +gBattleAnimMove_IcePunch:: monbg ANIM_DEF_PARTNER setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -21957,7 +21873,7 @@ Move_ICE_PUNCH:: blendoff end -Move_REST:: +gBattleAnimMove_Rest:: playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER loadspritegfx ANIM_TAG_LETTER_Z createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 @@ -21968,7 +21884,7 @@ Move_REST:: waitforvisualfinish end -Move_CONFUSION:: +gBattleAnimMove_Confusion:: monbg ANIM_DEF_PARTNER call SetPsychicBackground setalpha 8, 8 @@ -21985,7 +21901,7 @@ Move_CONFUSION:: call UnsetPsychicBg end -Move_PSYCHIC:: +gBattleAnimMove_Psychic:: monbg ANIM_DEF_PARTNER call SetPsychicBackground setalpha 8, 8 @@ -22002,7 +21918,7 @@ Move_PSYCHIC:: call UnsetPsychicBg end -Move_FUTURE_SIGHT:: +gBattleAnimMove_FutureSight:: goto FutureSight FutureSightContinue: waitforvisualfinish @@ -22022,7 +21938,7 @@ FutureSight: blendoff goto FutureSightContinue -Move_THUNDER:: +gBattleAnimMove_Thunder:: loadspritegfx ANIM_TAG_LIGHTNING fadetobg BG_THUNDER waitbgfadeout @@ -22080,7 +21996,7 @@ Move_THUNDER:: waitbgfadein end -Move_THUNDER_PUNCH:: +gBattleAnimMove_ThunderPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_LIGHTNING @@ -22113,7 +22029,7 @@ Move_THUNDER_PUNCH:: blendoff end -Move_SACRED_FIRE:: +gBattleAnimMove_SacredFire:: loadspritegfx ANIM_TAG_FIRE loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER, 7, 5 @@ -22170,7 +22086,7 @@ Move_SACRED_FIRE:: waitforvisualfinish end -Move_SCRATCH:: +gBattleAnimMove_Scratch:: loadspritegfx ANIM_TAG_SCRATCH monbg ANIM_TARGET setalpha 12, 8 @@ -22183,7 +22099,7 @@ Move_SCRATCH:: waitforvisualfinish end -Move_DRAGON_BREATH:: +gBattleAnimMove_DragonBreath:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -22217,7 +22133,7 @@ Move_DRAGON_BREATH:: clearmonbg ANIM_DEF_PARTNER end -Move_ROAR:: +gBattleAnimMove_Roar:: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -22245,7 +22161,7 @@ RoarEffect: createsprite gRoarNoiseLineSpriteTemplate, ANIM_ATTACKER, 2, 24, 8, 1 return -Move_GROWL:: +gBattleAnimMove_Growl:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL call RoarEffect @@ -22257,7 +22173,7 @@ Move_GROWL:: waitforvisualfinish end -Move_SNORE:: +gBattleAnimMove_Snore:: loadspritegfx ANIM_TAG_SNORE_Z monbg ANIM_ATK_PARTNER setalpha 8, 8 @@ -22278,7 +22194,7 @@ SnoreEffect: createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 42, -38, 24, 0, 0 return -Move_LIGHT_SCREEN:: +gBattleAnimMove_LightScreen:: loadspritegfx ANIM_TAG_SPARKLE_3 loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL setalpha 0, 16 @@ -22305,7 +22221,7 @@ SpecialScreenSparkle: createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, TRUE return -Move_MIRROR_COAT:: +gBattleAnimMove_MirrorCoat:: loadspritegfx ANIM_TAG_SPARKLE_3 loadspritegfx ANIM_TAG_RED_LIGHT_WALL setalpha 0, 16 @@ -22318,7 +22234,7 @@ Move_MIRROR_COAT:: blendoff end -Move_REFLECT:: +gBattleAnimMove_Reflect:: loadspritegfx ANIM_TAG_SPARKLE_4 loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL setalpha 0, 16 @@ -22335,7 +22251,7 @@ Move_REFLECT:: blendoff end -Move_BARRIER:: +gBattleAnimMove_Barrier:: loadspritegfx ANIM_TAG_GRAY_LIGHT_WALL setalpha 0, 16 waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15 @@ -22345,7 +22261,7 @@ Move_BARRIER:: blendoff end -Move_BUBBLE:: +gBattleAnimMove_Bubble:: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET @@ -22381,7 +22297,7 @@ Move_BUBBLE:: blendoff end -Move_SMOG:: +gBattleAnimMove_Smog:: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD monbg ANIM_DEF_PARTNER splitbgprio_all @@ -22408,7 +22324,7 @@ SmogCloud: delay 7 return -Move_FEINT_ATTACK:: +gBattleAnimMove_FeintAttack:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATTACKER fadetobg BG_DARK @@ -22444,7 +22360,7 @@ Move_FEINT_ATTACK:: waitbgfadein end -Move_SAND_ATTACK:: +gBattleAnimMove_SandAttack:: loadspritegfx ANIM_TAG_MUD_SAND monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -22472,7 +22388,7 @@ SandAttackDirt: delay 2 return -Move_MUD_SLAP:: +gBattleAnimMove_MudSlap:: loadspritegfx ANIM_TAG_MUD_SAND playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 0, 0, 3 @@ -22495,7 +22411,7 @@ MudSlapMud: delay 2 return -Move_DRAGON_RAGE:: +gBattleAnimMove_DragonRage:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -22527,7 +22443,7 @@ Move_DRAGON_RAGE:: waitforvisualfinish end -Move_RAIN_DANCE:: +gBattleAnimMove_RainDance:: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_BLACK @@ -22541,7 +22457,7 @@ Move_RAIN_DANCE:: waitforvisualfinish end -Move_BITE:: +gBattleAnimMove_Bite:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22558,7 +22474,7 @@ Move_BITE:: delay 1 end -Move_CRUNCH:: +gBattleAnimMove_Crunch:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22586,7 +22502,7 @@ Move_CRUNCH:: waitbgfadein end -Move_CLAMP:: +gBattleAnimMove_Clamp:: loadspritegfx ANIM_TAG_CLAMP loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -22603,7 +22519,7 @@ Move_CLAMP:: waitforvisualfinish end -Move_ICE_BEAM:: +gBattleAnimMove_IceBeam:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 @@ -22647,13 +22563,13 @@ IceBeamCreateCrystals: delay 1 return -Move_WITHDRAW:: +gBattleAnimMove_Withdraw:: playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER createvisualtask AnimTask_Withdraw, 5 waitforvisualfinish end -Move_AURORA_BEAM:: +gBattleAnimMove_AuroraBeam:: loadspritegfx ANIM_TAG_RAINBOW_RINGS fadetobg BG_AURORA waitbgfadein @@ -22689,7 +22605,7 @@ AuroraBeamCreateRings: delay 1 return -Move_SOLAR_BEAM:: +gBattleAnimMove_SolarBeam:: loadspritegfx ANIM_TAG_ORBS choosetwoturnanim SolarBeamSetUp, SolarBeamUnleash SolarBeamEnd: @@ -22778,7 +22694,7 @@ SolarBeamUnleash1: delay 4 return -Move_BLIZZARD:: +gBattleAnimMove_Blizzard:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER call SetHighSpeedBg @@ -22818,7 +22734,7 @@ BlizzardIceCrystals: delay 3 return -Move_POWDER_SNOW:: +gBattleAnimMove_PowderSnow:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 0, 3, RGB_BLACK @@ -22852,7 +22768,7 @@ PowderSnowSnowballs: delay 3 return -Move_HYDRO_PUMP:: +gBattleAnimMove_HydroPump:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -22899,7 +22815,7 @@ HydroPumpHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, -15, ANIM_TARGET, 1 return -Move_SIGNAL_BEAM:: +gBattleAnimMove_SignalBeam:: loadspritegfx ANIM_TAG_GLOWY_RED_ORB loadspritegfx ANIM_TAG_GLOWY_GREEN_ORB loadspritegfx ANIM_TAG_DUCK @@ -22940,7 +22856,7 @@ SignalBeamOrbs: delay 1 return -Move_ABSORB:: +gBattleAnimMove_Absorb:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -22993,7 +22909,7 @@ AbsorbEffect: delay 4 return -Move_MEGA_DRAIN:: +gBattleAnimMove_MegaDrain:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -23054,7 +22970,7 @@ MegaDrainAbsorbEffect: delay 4 return -Move_GIGA_DRAIN:: +gBattleAnimMove_GigaDrain:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -23123,7 +23039,7 @@ GigaDrainAbsorbEffect: delay 4 return -Move_LEECH_LIFE:: +gBattleAnimMove_LeechLife:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_ORBS delay 1 @@ -23153,7 +23069,7 @@ Move_LEECH_LIFE:: blendoff end -Move_SYNTHESIS:: +gBattleAnimMove_Synthesis:: loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 16, RGB(27, 31, 18) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -23166,7 +23082,7 @@ Move_SYNTHESIS:: waitforvisualfinish end -Move_TOXIC:: +gBattleAnimMove_Toxic:: loadspritegfx ANIM_TAG_TOXIC_BUBBLE loadspritegfx ANIM_TAG_POISON_BUBBLE call ToxicBubbles @@ -23191,7 +23107,7 @@ ToxicBubbles: delay 15 return -Move_SLUDGE:: +gBattleAnimMove_Sludge:: loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 @@ -23202,7 +23118,7 @@ Move_SLUDGE:: waitforvisualfinish end -Move_SLUDGE_BOMB:: +gBattleAnimMove_SludgeBomb:: loadspritegfx ANIM_TAG_POISON_BUBBLE call SludgeBombProjectile call SludgeBombProjectile @@ -23245,7 +23161,7 @@ SludgeBombProjectile: delay 3 return -Move_ACID:: +gBattleAnimMove_Acid:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, TRUE @@ -23278,7 +23194,7 @@ Move_ACID:: clearmonbg ANIM_DEF_PARTNER end -Move_BONEMERANG:: +gBattleAnimMove_Bonemerang:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23298,7 +23214,7 @@ Move_BONEMERANG:: blendoff end -Move_BONE_CLUB:: +gBattleAnimMove_BoneClub:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23316,7 +23232,7 @@ Move_BONE_CLUB:: blendoff end -Move_BONE_RUSH:: +gBattleAnimMove_BoneRush:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23332,7 +23248,7 @@ Move_BONE_RUSH:: blendoff end -Move_SPIKES:: +gBattleAnimMove_Spikes:: loadspritegfx ANIM_TAG_SPIKES monbg ANIM_DEF_PARTNER playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -23349,7 +23265,7 @@ Move_SPIKES:: clearmonbg ANIM_DEF_PARTNER end -Move_MEGAHORN:: +gBattleAnimMove_Megahorn:: loadspritegfx ANIM_TAG_HORN_HIT_2 loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23392,7 +23308,7 @@ MegahornInContest: createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1 goto MegahornContinue -Move_GUST:: +gBattleAnimMove_Gust:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23410,7 +23326,7 @@ Move_GUST:: blendoff end -Move_WING_ATTACK:: +gBattleAnimMove_WingAttack:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23434,7 +23350,7 @@ Move_WING_ATTACK:: blendoff end -Move_PECK:: +gBattleAnimMove_Peck:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_RotateMonToSideAndRestore, 2, 3, -768, ANIM_TARGET, 2 @@ -23442,7 +23358,7 @@ Move_PECK:: waitforvisualfinish end -Move_AEROBLAST:: +gBattleAnimMove_Aeroblast:: loadspritegfx ANIM_TAG_AIR_WAVE_2 loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23483,7 +23399,7 @@ AeroblastBeam: delay 3 return -Move_WATER_GUN:: +gBattleAnimMove_WaterGun:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -23507,7 +23423,7 @@ Move_WATER_GUN:: blendoff end -Move_CRABHAMMER:: +gBattleAnimMove_Crabhammer:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -23544,14 +23460,14 @@ Move_CRABHAMMER:: blendoff end -Move_SURF:: +gBattleAnimMove_Surf:: createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF delay 24 panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 waitforvisualfinish end -Move_FLAMETHROWER:: +gBattleAnimMove_Flamethrower:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -23585,7 +23501,7 @@ FlamethrowerCreateFlames: return @ Also used by Sandstorm weather -Move_SANDSTORM:: +gBattleAnimMove_Sandstorm:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_SANDSTORM, 0 createvisualtask AnimTask_LoadSandstormBackground, 5, FALSE @@ -23605,7 +23521,7 @@ Move_SANDSTORM:: createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0 end -Move_WHIRLPOOL:: +gBattleAnimMove_Whirlpool:: loadspritegfx ANIM_TAG_WATER_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -23638,7 +23554,7 @@ WhirlpoolEffect: delay 2 return -Move_FLY:: +gBattleAnimMove_Fly:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim FlySetUp, FlyUnleash @@ -23665,7 +23581,7 @@ FlyUnleash: blendoff goto FlyEnd -Move_BOUNCE:: +gBattleAnimMove_Bounce:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim BounceSetUp, BounceUnleash @@ -23691,7 +23607,7 @@ BounceUnleash: blendoff goto BounceEnd -Move_KARATE_CHOP:: +gBattleAnimMove_KarateChop:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23708,7 +23624,7 @@ Move_KARATE_CHOP:: blendoff end -Move_CROSS_CHOP:: +gBattleAnimMove_CrossChop:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_DEF_PARTNER @@ -23726,7 +23642,7 @@ Move_CROSS_CHOP:: blendoff end -Move_JUMP_KICK:: +gBattleAnimMove_JumpKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23744,7 +23660,7 @@ Move_JUMP_KICK:: blendoff end -Move_HIGH_JUMP_KICK:: +gBattleAnimMove_HighJumpKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23770,7 +23686,7 @@ Move_HIGH_JUMP_KICK:: blendoff end -Move_DOUBLE_KICK:: +gBattleAnimMove_DoubleKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23783,7 +23699,7 @@ Move_DOUBLE_KICK:: blendoff end -Move_TRIPLE_KICK:: +gBattleAnimMove_TripleKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23816,7 +23732,7 @@ TripleKickCenter: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 goto TripleKickContinue -Move_DYNAMIC_PUNCH:: +gBattleAnimMove_DynamicPunch:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_EXPLOSION @@ -23850,7 +23766,7 @@ Move_DYNAMIC_PUNCH:: blendoff end -Move_COUNTER:: +gBattleAnimMove_Counter:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_DEF_PARTNER @@ -23882,7 +23798,7 @@ Move_COUNTER:: blendoff end -Move_VITAL_THROW:: +gBattleAnimMove_VitalThrow:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -23905,7 +23821,7 @@ Move_VITAL_THROW:: blendoff end -Move_ROCK_SMASH:: +gBattleAnimMove_RockSmash:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -23932,7 +23848,7 @@ Move_ROCK_SMASH:: blendoff end -Move_SUBMISSION:: +gBattleAnimMove_Submission:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -23966,7 +23882,7 @@ SubmissionHit: return @ Also used by Sunny weather -Move_SUNNY_DAY:: +gBattleAnimMove_SunnyDay:: loadspritegfx ANIM_TAG_SUNLIGHT monbg ANIM_ATK_PARTNER setalpha 13, 3 @@ -23989,7 +23905,7 @@ SunnyDayLightRay: delay 6 return -Move_COTTON_SPORE:: +gBattleAnimMove_CottonSpore:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -24010,7 +23926,7 @@ CreateCottonSpores: delay 12 return -Move_SPORE:: +gBattleAnimMove_Spore:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -24034,7 +23950,7 @@ CreateSpore: delay 12 return -Move_PETAL_DANCE:: +gBattleAnimMove_PetalDance:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24072,7 +23988,7 @@ Move_PETAL_DANCE:: blendoff end -Move_RAZOR_LEAF:: +gBattleAnimMove_RazorLeaf:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT @@ -24112,10 +24028,10 @@ Move_RAZOR_LEAF:: blendoff end -Move_NATURE_POWER:: +gBattleAnimMove_NaturePower:: @ No actual animation, uses the animation of a move from sNaturePowerMoves instead -Move_ANCIENT_POWER:: +gBattleAnimMove_AncientPower:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -24148,7 +24064,7 @@ Move_ANCIENT_POWER:: blendoff end -Move_OCTAZOOKA:: +gBattleAnimMove_Octazooka:: loadspritegfx ANIM_TAG_GRAY_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_ATTACKER @@ -24165,7 +24081,7 @@ Move_OCTAZOOKA:: waitforvisualfinish end -Move_MIST:: +gBattleAnimMove_Mist:: loadspritegfx ANIM_TAG_MIST_CLOUD monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -24189,7 +24105,7 @@ MistCloud: delay 7 return -Move_HAZE:: +gBattleAnimMove_Haze:: waitforvisualfinish playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_HazeScrollingFog, 5 @@ -24199,7 +24115,7 @@ Move_HAZE:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK end -Move_FIRE_PUNCH:: +gBattleAnimMove_FirePunch:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT @@ -24235,7 +24151,7 @@ FireSpreadEffect: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 return -Move_LEER:: +gBattleAnimMove_Leer:: loadspritegfx ANIM_TAG_LEER monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -24254,7 +24170,7 @@ Move_LEER:: waitforvisualfinish end -Move_DREAM_EATER:: +gBattleAnimMove_DreamEater:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER @@ -24321,7 +24237,7 @@ DreamEaterAbsorb: delay 4 return -Move_POISON_GAS:: +gBattleAnimMove_PoisonGas:: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD loadspritegfx ANIM_TAG_POISON_BUBBLE delay 0 @@ -24359,7 +24275,7 @@ Move_POISON_GAS:: delay 0 end -Move_BIND:: +gBattleAnimMove_Bind:: createvisualtask AnimTask_SwayMon, 5, 0, 6, 3328, 4, ANIM_ATTACKER goto BindWrap @@ -24374,11 +24290,11 @@ BindWrapSqueezeTarget: delay 16 return -Move_WRAP:: +gBattleAnimMove_Wrap:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 6, 4, 2, 4 goto BindWrap -Move_PSYBEAM:: +gBattleAnimMove_Psybeam:: loadspritegfx ANIM_TAG_GOLD_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground @@ -24405,7 +24321,7 @@ PsybeamRings: delay 4 return -Move_HYPNOSIS:: +gBattleAnimMove_Hypnosis:: loadspritegfx ANIM_TAG_GOLD_RING call SetPsychicBackground call HypnosisRings @@ -24423,7 +24339,7 @@ HypnosisRings: delay 6 return -Move_PSYWAVE:: +gBattleAnimMove_Psywave:: loadspritegfx ANIM_TAG_BLUE_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground @@ -24447,7 +24363,7 @@ PsywaveRings: delay 4 return -Move_ZAP_CANNON:: +gBattleAnimMove_ZapCannon:: loadspritegfx ANIM_TAG_BLACK_BALL_2 loadspritegfx ANIM_TAG_SPARK_2 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER @@ -24468,7 +24384,7 @@ Move_ZAP_CANNON:: waitforvisualfinish end -Move_STEEL_WING:: +gBattleAnimMove_SteelWing:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -24495,7 +24411,7 @@ Move_STEEL_WING:: blendoff end -Move_IRON_TAIL:: +gBattleAnimMove_IronTail:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK @@ -24514,7 +24430,7 @@ Move_IRON_TAIL:: waitforvisualfinish end -Move_POISON_TAIL:: +gBattleAnimMove_PoisonTail:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -24535,7 +24451,7 @@ Move_POISON_TAIL:: waitforvisualfinish end -Move_METAL_CLAW:: +gBattleAnimMove_MetalClaw:: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -24556,7 +24472,7 @@ Move_METAL_CLAW:: waitforvisualfinish end -Move_NIGHT_SHADE:: +gBattleAnimMove_NightShade:: monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -24575,7 +24491,7 @@ Move_NIGHT_SHADE:: waitbgfadein end -Move_EGG_BOMB:: +gBattleAnimMove_EggBomb:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_LARGE_FRESH_EGG playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -24600,7 +24516,7 @@ Move_EGG_BOMB:: waitforvisualfinish end -Move_SHADOW_BALL:: +gBattleAnimMove_ShadowBall:: loadspritegfx ANIM_TAG_SHADOW_BALL fadetobg BG_GHOST waitbgfadein @@ -24615,7 +24531,7 @@ Move_SHADOW_BALL:: waitbgfadein end -Move_LICK:: +gBattleAnimMove_Lick:: loadspritegfx ANIM_TAG_LICK delay 15 playsewithpan SE_M_LICK, SOUND_PAN_TARGET @@ -24624,7 +24540,7 @@ Move_LICK:: waitforvisualfinish end -Move_FOCUS_ENERGY:: +gBattleAnimMove_FocusEnergy:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -24637,7 +24553,7 @@ Move_FOCUS_ENERGY:: waitforvisualfinish end -Move_BIDE:: +gBattleAnimMove_Bide:: choosetwoturnanim BideSetUp, BideUnleash end BideSetUp: @@ -24677,7 +24593,7 @@ BideUnleash: blendoff end -Move_STRING_SHOT:: +gBattleAnimMove_StringShot:: loadspritegfx ANIM_TAG_STRING loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -24722,7 +24638,7 @@ StringShotThread: delay 1 return -Move_SPIDER_WEB:: +gBattleAnimMove_SpiderWeb:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -24759,7 +24675,7 @@ SpiderWebThread: delay 1 return -Move_RAZOR_WIND:: +gBattleAnimMove_RazorWind:: choosetwoturnanim RazorWindSetUp, RazorWindUnleash RazorWindEnd: waitforvisualfinish @@ -24797,7 +24713,7 @@ RazorWindUnleash: blendoff goto RazorWindEnd -Move_DISABLE:: +gBattleAnimMove_Disable:: loadspritegfx ANIM_TAG_SPARKLE_4 monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -24813,7 +24729,7 @@ Move_DISABLE:: blendoff end -Move_RECOVER:: +gBattleAnimMove_Recover:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATK_PARTNER @@ -24848,7 +24764,7 @@ RecoverAbsorbEffect: delay 3 return -Move_MIMIC:: +gBattleAnimMove_Mimic:: loadspritegfx ANIM_TAG_ORBS setalpha 11, 5 monbg_static ANIM_DEF_PARTNER @@ -24867,7 +24783,7 @@ Move_MIMIC:: blendoff end -Move_CONSTRICT:: +gBattleAnimMove_Constrict:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 2 @@ -24884,7 +24800,7 @@ Move_CONSTRICT:: waitforvisualfinish end -Move_CURSE:: +gBattleAnimMove_Curse:: choosetwoturnanim CurseGhost, CurseStats CurseGhost: loadspritegfx ANIM_TAG_NAIL @@ -24929,7 +24845,7 @@ CurseStats1: createvisualtask AnimTask_BlendColorCycle, 5, F_PAL_ATTACKER, 4, 2, 0, 10, RGB_RED return -Move_SOFT_BOILED:: +gBattleAnimMove_SoftBoiled:: loadspritegfx ANIM_TAG_BREAKING_EGG loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_BLUE_STAR @@ -24952,7 +24868,7 @@ Move_SOFT_BOILED:: call HealingEffect2 end -Move_HEAL_BELL:: +gBattleAnimMove_HealBell:: loadspritegfx ANIM_TAG_BELL loadspritegfx ANIM_TAG_MUSIC_NOTES_2 loadspritegfx ANIM_TAG_THIN_RING @@ -25004,7 +24920,7 @@ HealBellRing: playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER return -Move_FAKE_OUT:: +gBattleAnimMove_FakeOut:: playsewithpan SE_M_FLATTER, 0 createvisualtask AnimTask_FakeOut, 5 waitforvisualfinish @@ -25015,7 +24931,7 @@ Move_FAKE_OUT:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE end -Move_SCARY_FACE:: +gBattleAnimMove_ScaryFace:: loadspritegfx ANIM_TAG_EYE_SPARKLE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), 3, 0, 16, RGB_BLACK playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -25033,7 +24949,7 @@ Move_SCARY_FACE:: waitforvisualfinish end -Move_SWEET_KISS:: +gBattleAnimMove_SweetKiss:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_ANGEL createsprite gAngelSpriteTemplate, ANIM_TARGET, 2, 16, -48 @@ -25052,7 +24968,7 @@ Move_SWEET_KISS:: createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 end -Move_LOVELY_KISS:: +gBattleAnimMove_LovelyKiss:: loadspritegfx ANIM_TAG_PINK_HEART loadspritegfx ANIM_TAG_DEVIL createsprite gDevilSpriteTemplate, ANIM_TARGET, 2, 0, -24 @@ -25065,7 +24981,7 @@ Move_LOVELY_KISS:: createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, -128, -22 end -Move_FURY_SWIPES:: +gBattleAnimMove_FurySwipes:: loadspritegfx ANIM_TAG_SWIPE createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 5, 5 delay 4 @@ -25080,7 +24996,7 @@ Move_FURY_SWIPES:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 7, 1 end -Move_INGRAIN:: +gBattleAnimMove_Ingrain:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_ORBS createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 16, 26, -1, 2, 150 @@ -25110,7 +25026,7 @@ Move_INGRAIN:: waitforvisualfinish end -Move_PRESENT:: +gBattleAnimMove_Present:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_IsHealingMove, 2 createsprite gPresentSpriteTemplate, ANIM_TARGET, 2, 0, -5, 10, 2, -1 @@ -25170,14 +25086,14 @@ PresentHeal: call HealingEffect2 end -Move_BATON_PASS:: +gBattleAnimMove_BatonPass:: loadspritegfx ANIM_TAG_POKEBALL playsewithpan SE_M_BATON_PASS, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 1, 2, 0, 11, RGB(31, 22, 30) createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2 end -Move_PERISH_SONG:: +gBattleAnimMove_PerishSong:: loadspritegfx ANIM_TAG_MUSIC_NOTES_2 createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 0 createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 1, 1, 16 @@ -25213,7 +25129,7 @@ Move_PERISH_SONG:: waitforvisualfinish end -Move_SLEEP_TALK:: +gBattleAnimMove_SleepTalk:: loadspritegfx ANIM_TAG_LETTER_Z createvisualtask AnimTask_SwayMon, 5, 0, 4, 4096, 2, ANIM_ATTACKER delay 20 @@ -25240,7 +25156,7 @@ Move_SLEEP_TALK:: waitforvisualfinish end -Move_HYPER_FANG:: +gBattleAnimMove_HyperFang:: loadspritegfx ANIM_TAG_FANG_ATTACK playsewithpan SE_M_BITE, SOUND_PAN_TARGET delay 1 @@ -25271,7 +25187,7 @@ HyperFangInContest: fadetobg BG_IMPACT_CONTESTS goto HyperFangContinue -Move_TRI_ATTACK:: +gBattleAnimMove_TriAttack:: loadspritegfx ANIM_TAG_TRI_ATTACK_TRIANGLE createsprite gTriAttackTriangleSpriteTemplate, ANIM_TARGET, 2, 16, 0 playsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER @@ -25320,7 +25236,7 @@ Move_TRI_ATTACK:: waitforvisualfinish end -Move_WILL_O_WISP:: +gBattleAnimMove_WillOWisp:: loadspritegfx ANIM_TAG_WISP_FIRE loadspritegfx ANIM_TAG_WISP_ORB monbg ANIM_DEF_PARTNER @@ -25351,7 +25267,7 @@ Move_WILL_O_WISP:: clearmonbg ANIM_DEF_PARTNER end -Move_ENCORE:: +gBattleAnimMove_Encore:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_CreateSpotlight, 2 @@ -25371,7 +25287,7 @@ Move_ENCORE:: createvisualtask AnimTask_RemoveSpotlight, 2 end -Move_TRICK:: +gBattleAnimMove_Trick:: loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPEED_DUST createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -40, 80 @@ -25399,7 +25315,7 @@ Move_TRICK:: waitforvisualfinish end -Move_WISH:: +gBattleAnimMove_Wish:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_SPARKLE_2 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK @@ -25415,7 +25331,7 @@ Move_WISH:: waitforvisualfinish end -Move_STOCKPILE:: +gBattleAnimMove_Stockpile:: loadspritegfx ANIM_TAG_GRAY_ORB playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 8, 1, 0, 12, RGB_WHITE @@ -25444,7 +25360,7 @@ StockpileAbsorb: delay 1 return -Move_SPIT_UP:: +gBattleAnimMove_SpitUp:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -25491,7 +25407,7 @@ SpitUpStrongest: createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 240 goto SpitUpContinue -Move_SWALLOW:: +gBattleAnimMove_Swallow:: loadspritegfx ANIM_TAG_BLUE_ORB loadspritegfx ANIM_TAG_BLUE_STAR playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -25527,7 +25443,7 @@ SwallowBest: call SwallowEffect goto SwallowContinue -Move_TRANSFORM:: +gBattleAnimMove_Transform:: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 @@ -25536,7 +25452,7 @@ Move_TRANSFORM:: clearmonbg ANIM_ATTACKER end -Move_MORNING_SUN:: +gBattleAnimMove_MorningSun:: loadspritegfx ANIM_TAG_GREEN_STAR loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_MorningSunLightBeam, 5 @@ -25568,7 +25484,7 @@ MorningSunStar: delay 5 return -Move_SWEET_SCENT:: +gBattleAnimMove_SweetScent:: loadspritegfx ANIM_TAG_PINK_PETAL playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 100, 0, 100 @@ -25606,7 +25522,7 @@ SweetScentEffect: delay 2 return -Move_HYPER_BEAM:: +gBattleAnimMove_HyperBeam:: loadspritegfx ANIM_TAG_ORBS createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 0, 16, RGB_BLACK waitforvisualfinish @@ -25656,7 +25572,7 @@ HyperBeamOrbs: delay 1 return -Move_FLATTER:: +gBattleAnimMove_Flatter:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_CONFETTI createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET @@ -25701,7 +25617,7 @@ CreateFlatterConfetti: createsprite gFlatterConfettiSpriteTemplate, ANIM_ATTACKER, 40, ANIM_TARGET return -Move_ROLE_PLAY:: +gBattleAnimMove_RolePlay:: monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_WHITE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 10, RGB_BLACK @@ -25716,7 +25632,7 @@ Move_ROLE_PLAY:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 10, 0, RGB_BLACK end -Move_REFRESH:: +gBattleAnimMove_Refresh:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER @@ -25730,7 +25646,7 @@ Move_REFRESH:: createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 end -Move_BLAZE_KICK:: +gBattleAnimMove_BlazeKick:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER @@ -25751,7 +25667,7 @@ Move_BLAZE_KICK:: blendoff end -Move_HYPER_VOICE:: +gBattleAnimMove_HyperVoice:: loadspritegfx ANIM_TAG_THIN_RING createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE call HyperVoiceEffect @@ -25772,7 +25688,7 @@ HyperVoiceEffect: createvisualtask SoundTask_WaitForCry, 5 return -Move_SAND_TOMB:: +gBattleAnimMove_SandTomb:: loadspritegfx ANIM_TAG_MUD_SAND createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 43, 1 @@ -25800,7 +25716,7 @@ SandTombSwirlingDirt: delay 2 return -Move_SHEER_COLD:: +gBattleAnimMove_SheerCold:: fadetobg BG_ICE waitbgfadeout playsewithpan SE_M_ICY_WIND, 0 @@ -25818,7 +25734,7 @@ Move_SHEER_COLD:: waitbgfadein end -Move_ARM_THRUST:: +gBattleAnimMove_ArmThrust:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT splitbgprio ANIM_TARGET @@ -25845,13 +25761,13 @@ ArmThrustLeft: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 goto ArmThrustContinue -Move_MUDDY_WATER:: +gBattleAnimMove_MuddyWater:: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_MUDDY_WATER waitforvisualfinish end -Move_BULLET_SEED:: +gBattleAnimMove_BulletSeed:: loadspritegfx ANIM_TAG_SEED createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 delay 5 @@ -25876,7 +25792,7 @@ Move_BULLET_SEED:: waitforvisualfinish end -Move_DRAGON_CLAW:: +gBattleAnimMove_DragonClaw:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_CLAW_SLASH playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER @@ -25936,7 +25852,7 @@ DragonClawFireSpiral: return end -Move_MUD_SHOT:: +gBattleAnimMove_MudShot:: loadspritegfx ANIM_TAG_BROWN_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -25968,7 +25884,7 @@ MudShotOrbs: delay 2 return -Move_METEOR_MASH:: +gBattleAnimMove_MeteorMash:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -25993,7 +25909,7 @@ Move_METEOR_MASH:: waitforvisualfinish end -Move_REVENGE:: +gBattleAnimMove_Revenge:: loadspritegfx ANIM_TAG_PURPLE_SCRATCH monbg ANIM_TARGET setalpha 12, 8 @@ -26022,7 +25938,7 @@ Move_REVENGE:: blendoff end -Move_POISON_FANG:: +gBattleAnimMove_PoisonFang:: loadspritegfx ANIM_TAG_FANG_ATTACK loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_BITE, SOUND_PAN_TARGET @@ -26035,12 +25951,12 @@ Move_POISON_FANG:: waitforvisualfinish end -Move_SUBSTITUTE:: +gBattleAnimMove_Substitute:: playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER createvisualtask AnimTask_MonToSubstitute, 2 end -Move_FRENZY_PLANT:: +gBattleAnimMove_FrenzyPlant:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -26100,7 +26016,7 @@ Move_FRENZY_PLANT:: blendoff end -Move_METAL_SOUND:: +gBattleAnimMove_MetalSound:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -26120,7 +26036,7 @@ MetalSoundRings: delay 2 return -Move_FOCUS_PUNCH:: +gBattleAnimMove_FocusPunch:: goto FocusPunch FocusPunchEnd: waitforvisualfinish @@ -26168,7 +26084,7 @@ FocusPunchInContest: fadetobg BG_IMPACT_CONTESTS goto FocusPunchContinue -Move_RETURN:: +gBattleAnimMove_Return:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -26305,7 +26221,7 @@ ReturnStrongestHit: waitforvisualfinish return -Move_COSMIC_POWER:: +gBattleAnimMove_CosmicPower:: loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_COSMIC_POWER, 0 playsewithpan SE_M_COSMIC_POWER, 0 @@ -26330,7 +26246,7 @@ Move_COSMIC_POWER:: waitforvisualfinish end -Move_BLAST_BURN:: +gBattleAnimMove_BlastBurn:: loadspritegfx ANIM_TAG_FIRE_PLUME loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -26375,7 +26291,7 @@ Move_BLAST_BURN:: blendoff end -Move_ROCK_TOMB:: +gBattleAnimMove_RockTomb:: loadspritegfx ANIM_TAG_X_SIGN loadspritegfx ANIM_TAG_ROCKS createvisualtask AnimTask_ShakeBattleTerrain, 2, 2, 0, 10, 1 @@ -26433,7 +26349,7 @@ UnsetBugBg: waitbgfadein return -Move_SILVER_WIND:: +gBattleAnimMove_SilverWind:: loadspritegfx ANIM_TAG_SPARKLE_6 panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 playsewithpan SE_M_MORNING_SUN, 0 @@ -26472,12 +26388,12 @@ Move_SILVER_WIND:: call UnsetBugBg end -Move_SNATCH:: +gBattleAnimMove_Snatch:: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -12, 4, 10, 10, 12, 6 end -Move_DIVE:: +gBattleAnimMove_Dive:: loadspritegfx ANIM_TAG_SPLASH loadspritegfx ANIM_TAG_SWEAT_BEAD choosetwoturnanim DiveSetUp, DiveAttack @@ -26522,7 +26438,7 @@ DiveAttackWaterDroplets: createsprite gSprayWaterDropletSpriteTemplate, ANIM_TARGET, 5, 1, 1 return -Move_ROCK_BLAST:: +gBattleAnimMove_RockBlast:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26540,7 +26456,7 @@ Move_ROCK_BLAST:: waitforvisualfinish end -Move_OVERHEAT:: +gBattleAnimMove_Overheat:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -26621,7 +26537,7 @@ Move_OVERHEAT:: waitforvisualfinish end -Move_HYDRO_CANNON:: +gBattleAnimMove_HydroCannon:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -26663,7 +26579,7 @@ HydroCannonBeam: createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 return -Move_ASTONISH:: +gBattleAnimMove_Astonish:: loadspritegfx ANIM_TAG_SWEAT_BEAD playsewithpan SE_M_ENCORE, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26676,7 +26592,7 @@ Move_ASTONISH:: waitforvisualfinish end -Move_SEISMIC_TOSS:: +gBattleAnimMove_SeismicToss:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS setarg 7, 0 @@ -26743,7 +26659,7 @@ SeismicTossRockScatter2: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3 return -Move_MAGIC_COAT:: +gBattleAnimMove_MagicCoat:: loadspritegfx ANIM_TAG_ORANGE_LIGHT_WALL setalpha 0, 16 waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15 @@ -26753,7 +26669,7 @@ Move_MAGIC_COAT:: blendoff end -Move_WATER_PULSE:: +gBattleAnimMove_WaterPulse:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_BLUE_RING_2 monbg ANIM_TARGET @@ -26784,7 +26700,7 @@ Move_WATER_PULSE:: clearmonbg ANIM_DEF_PARTNER end -Move_PSYCHO_BOOST:: +gBattleAnimMove_PsychoBoost:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATK_PARTNER fadetobg BG_PSYCHIC @@ -26811,7 +26727,7 @@ Move_PSYCHO_BOOST:: call UnsetPsychicBg end -Move_KNOCK_OFF:: +gBattleAnimMove_KnockOff:: loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26832,7 +26748,7 @@ Move_KNOCK_OFF:: waitforvisualfinish end -Move_DOOM_DESIRE:: +gBattleAnimMove_DoomDesire:: createvisualtask GetIsDoomDesireHitTurn, 2 delay 1 monbg ANIM_ATK_PARTNER @@ -26851,7 +26767,7 @@ Move_DOOM_DESIRE:: blendoff end -Move_SKY_UPPERCUT:: +gBattleAnimMove_SkyUppercut:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -26895,52 +26811,52 @@ Move_SKY_UPPERCUT:: waitbgfadein end -Move_SECRET_POWER:: +gBattleAnimMove_SecretPower:: createvisualtask AnimTask_GetFieldTerrain, 5 - jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, Move_FAIRY_WIND - jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, Move_NEEDLE_ARM - jumpargeq 0, STATUS_FIELD_ELECTRIC_TERRAIN, Move_THUNDER_SHOCK - jumpargeq 0, STATUS_FIELD_PSYCHIC_TERRAIN, Move_CONFUSION + jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, gBattleAnimMove_FairyWind + jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, gBattleAnimMove_NeedleArm + jumpargeq 0, STATUS_FIELD_ELECTRIC_TERRAIN, gBattleAnimMove_ThunderShock + jumpargeq 0, STATUS_FIELD_PSYCHIC_TERRAIN, gBattleAnimMove_Confusion createvisualtask AnimTask_GetBattleTerrain, 5 - jumpargeq 0, BATTLE_TERRAIN_GRASS, Move_NEEDLE_ARM - jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, Move_MAGICAL_LEAF - jumpargeq 0, BATTLE_TERRAIN_SAND, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, Move_WATERFALL - jumpargeq 0, BATTLE_TERRAIN_WATER, Move_SURF - jumpargeq 0, BATTLE_TERRAIN_POND, Move_BUBBLE_BEAM - jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, Move_ROCK_THROW - jumpargeq 0, BATTLE_TERRAIN_CAVE, Move_BITE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH - jumpargeq 0, BATTLE_TERRAIN_SOARING, Move_GUST - jumpargeq 0, BATTLE_TERRAIN_SKY_PILLAR, Move_GUST - jumpargeq 0, BATTLE_TERRAIN_BURIAL_GROUND, Move_SHADOW_SNEAK - jumpargeq 0, BATTLE_TERRAIN_PUDDLE, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_MARSH, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_SWAMP, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_ICE, Move_ICE_SHARD - jumpargeq 0, BATTLE_TERRAIN_VOLCANO, Move_INCINERATE - jumpargeq 0, BATTLE_TERRAIN_DISTORTION_WORLD, Move_POUND - jumpargeq 0, BATTLE_TERRAIN_SPACE, Move_SWIFT - jumpargeq 0, BATTLE_TERRAIN_ULTRA_SPACE, Move_PSYWAVE + jumpargeq 0, BATTLE_TERRAIN_GRASS, gBattleAnimMove_NeedleArm + jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, gBattleAnimMove_MagicalLeaf + jumpargeq 0, BATTLE_TERRAIN_SAND, gBattleAnimMove_MudShot + jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, gBattleAnimMove_Waterfall + jumpargeq 0, BATTLE_TERRAIN_WATER, gBattleAnimMove_Surf + jumpargeq 0, BATTLE_TERRAIN_POND, gBattleAnimMove_BubbleBeam + jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, gBattleAnimMove_RockThrow + jumpargeq 0, BATTLE_TERRAIN_CAVE, gBattleAnimMove_Bite + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_Strength + jumpargeq 0, BATTLE_TERRAIN_SOARING, gBattleAnimMove_Gust + jumpargeq 0, BATTLE_TERRAIN_SKY_PILLAR, gBattleAnimMove_Gust + jumpargeq 0, BATTLE_TERRAIN_BURIAL_GROUND, gBattleAnimMove_ShadowSneak + jumpargeq 0, BATTLE_TERRAIN_PUDDLE, gBattleAnimMove_MudShot + jumpargeq 0, BATTLE_TERRAIN_MARSH, gBattleAnimMove_MudShot + jumpargeq 0, BATTLE_TERRAIN_SWAMP, gBattleAnimMove_MudShot + jumpargeq 0, BATTLE_TERRAIN_ICE, gBattleAnimMove_IceShard + jumpargeq 0, BATTLE_TERRAIN_VOLCANO, gBattleAnimMove_Incinerate + jumpargeq 0, BATTLE_TERRAIN_DISTORTION_WORLD, gBattleAnimMove_Pound + jumpargeq 0, BATTLE_TERRAIN_SPACE, gBattleAnimMove_Swift + jumpargeq 0, BATTLE_TERRAIN_ULTRA_SPACE, gBattleAnimMove_Psywave .if B_SECRET_POWER_ANIMATION >= GEN_7 - jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_ICE_SHARD - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_SPIT_UP - goto Move_SPIT_UP + jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_IceShard + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_SpitUp + goto gBattleAnimMove_SpitUp .elseif B_SECRET_POWER_ANIMATION >= GEN_6 - jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM - goto Move_BODY_SLAM + jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_BodySlam + goto gBattleAnimMove_BodySlam .elseif B_SECRET_POWER_ANIMATION >= GEN_4 - jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM - goto Move_MUD_SLAP + jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_BodySlam + goto gBattleAnimMove_MudSlap .else - jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH - goto Move_SLAM + jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_Strength + goto gBattleAnimMove_Slam .endif -Move_TWISTER:: +gBattleAnimMove_Twister:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -26986,7 +26902,7 @@ Move_TWISTER:: blendoff end -Move_MAGICAL_LEAF:: +gBattleAnimMove_MagicalLeaf:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT @@ -27030,7 +26946,7 @@ Move_MAGICAL_LEAF:: blendoff end -Move_ICE_BALL:: +gBattleAnimMove_IceBall:: loadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_GetIceBallCounter, 5, 0 @@ -27120,7 +27036,7 @@ IceBallImpactShard: createsprite gIceBallImpactShardSpriteTemplate, ANIM_TARGET, 4, -12, -16 return -Move_WEATHER_BALL:: +gBattleAnimMove_WeatherBall:: loadspritegfx ANIM_TAG_WEATHER_BALL createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, ANIM_ATTACKER delay 8 @@ -27216,7 +27132,7 @@ WeatherBallIce: waitforvisualfinish end -Move_COUNT:: +gBattleAnimMove_Count:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -27530,18 +27446,18 @@ UnsetSolarBeamBg: waitbgfadein return -Status_Poison: +gBattleAnimStatus_Poison:: loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 18, 2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 12, RGB(30, 0, 31) end -Status_Confusion: +gBattleAnimStatus_Confusion:: loadspritegfx ANIM_TAG_DUCK call ConfusionEffect end -Status_Burn: +gBattleAnimStatus_Burn:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET call BurnFlame @@ -27554,7 +27470,7 @@ BurnFlame: delay 4 return -Status_Infatuation: +gBattleAnimStatus_Infatuation:: loadspritegfx ANIM_TAG_MAGENTA_HEART playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0, 20 @@ -27566,7 +27482,7 @@ Status_Infatuation: createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 20, 20 end -Status_Sleep: +gBattleAnimStatus_Sleep:: loadspritegfx ANIM_TAG_LETTER_Z playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 @@ -27574,13 +27490,13 @@ Status_Sleep: createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 end -Status_Paralysis: +gBattleAnimStatus_Paralysis:: loadspritegfx ANIM_TAG_SPARK_2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 call ElectricityEffect end -Status_Freeze: +gBattleAnimStatus_Freeze:: playsewithpan SE_M_ICY_WIND, 0 loadspritegfx ANIM_TAG_ICE_CUBE monbg ANIM_DEF_PARTNER @@ -27591,7 +27507,7 @@ Status_Freeze: clearmonbg ANIM_DEF_PARTNER end -Status_Curse: +gBattleAnimStatus_Curse:: loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT monbg ANIM_DEF_PARTNER playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET @@ -27601,7 +27517,7 @@ Status_Curse: clearmonbg ANIM_DEF_PARTNER end -Status_Nightmare: +gBattleAnimStatus_Nightmare:: loadspritegfx ANIM_TAG_DEVIL monbg ANIM_DEF_PARTNER playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET @@ -27611,15 +27527,12 @@ Status_Nightmare: clearmonbg ANIM_DEF_PARTNER end -Status_Powder: - end - -General_StatsChange: +gBattleAnimGeneral_StatsChange:: createvisualtask AnimTask_StatsChange, 5 waitforvisualfinish end -General_SubstituteFade: +gBattleAnimGeneral_SubstituteFade:: monbg ANIM_ATTACKER createvisualtask AnimTask_SubstituteFadeToInvisible, 5 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE @@ -27632,11 +27545,11 @@ General_SubstituteFade: createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, TRUE end -General_SubstituteAppear: +gBattleAnimGeneral_SubstituteAppear:: createvisualtask AnimTask_MonToSubstitute, 2 end -General_PokeblockThrow: +gBattleAnimGeneral_PokeblockThrow:: createvisualtask AnimTask_SetAttackerTargetLeftPos, 2, 0 createvisualtask AnimTask_LoadPokeblockGfx, 2 delay 0 @@ -27649,12 +27562,12 @@ General_PokeblockThrow: createvisualtask AnimTask_FreePokeblockGfx, 2 end -General_ItemKnockoff: +gBattleAnimGeneral_ItemKnockoff:: loadspritegfx ANIM_TAG_ITEM_BAG createsprite gKnockOffItemSpriteTemplate, ANIM_TARGET, 2 end -General_TurnTrap: +gBattleAnimGeneral_TurnTrap:: createvisualtask AnimTask_GetTrappedMoveAnimId, 5 jumpargeq 0, TRAP_ANIM_FIRE_SPIN, Status_FireSpin jumpargeq 0, TRAP_ANIM_WHIRLPOOL, Status_Whirlpool @@ -27752,10 +27665,10 @@ Status_Clamp: Status_Thunder_Cage: @ TODO - goto Move_THUNDER_CAGE + goto gBattleAnimMove_ThunderCage Status_Snap_Trap: @ placeholder - goto Move_BITE + goto gBattleAnimMove_Bite Status_SandTomb: loadspritegfx ANIM_TAG_MUD_SAND @@ -27786,7 +27699,7 @@ Status_Infestation: clearmonbg ANIM_DEF_PARTNER end -General_HeldItemEffect: +gBattleAnimGeneral_HeldItemEffect:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 delay 0 @@ -27808,7 +27721,7 @@ General_HeldItemEffect: waitforvisualfinish end -General_SmokeballEscape: +gBattleAnimGeneral_SmokeballEscape:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_ATTACKER setalpha 12, 4 @@ -27846,7 +27759,7 @@ General_SmokeballEscape: blendoff end -General_HangedOn: +gBattleAnimGeneral_HangedOn:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 7, 0, 9, RGB_RED playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_SlideMonForFocusBand, 5, 30, 128, 0, 1, 2, 0, 1 @@ -27857,7 +27770,7 @@ General_HangedOn: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 0, 0, 0, 15 end -General_Rain: +gBattleAnimGeneral_Rain:: call RainDrops end @@ -27874,27 +27787,27 @@ RainDrops: waitforvisualfinish return -General_Sun: - goto Move_SUNNY_DAY +gBattleAnimGeneral_Sun:: + goto gBattleAnimMove_SunnyDay -General_Sandstorm: - goto Move_SANDSTORM +gBattleAnimGeneral_Sandstorm:: + goto gBattleAnimMove_Sandstorm -General_Hail: - goto Move_HAIL +gBattleAnimGeneral_Hail:: + goto gBattleAnimMove_Hail -General_Snow: - goto Move_SNOWSCAPE +gBattleAnimGeneral_Snow:: + goto gBattleAnimMove_Snowscape -General_Fog: - goto Move_HAZE +gBattleAnimGeneral_Fog:: + goto gBattleAnimMove_Haze -General_LeechSeedDrain: +gBattleAnimGeneral_LeechSeedDrain:: createvisualtask AnimTask_GetBattlersFromArg, 5 delay 0 - goto Move_ABSORB + goto gBattleAnimMove_Absorb -General_MonHit: +gBattleAnimGeneral_MonHit:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -27906,7 +27819,7 @@ General_MonHit: blendoff end -General_ItemSteal: +gBattleAnimGeneral_ItemSteal:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_SetAnimAttackerAndTargetForEffectAtk, 2 createvisualtask AnimTask_SetTargetToEffectBattler, 2 @ Redundant with above @@ -27914,7 +27827,7 @@ General_ItemSteal: createsprite gItemStealSpriteTemplate, ANIM_ATTACKER, 2, 0, -5, 10, 2, -1 end -General_SnatchMove: +gBattleAnimGeneral_SnatchMove:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_SetAnimAttackerAndTargetForEffectTgt, 2 call SnatchMoveTrySwapFromSubstitute @@ -27937,7 +27850,7 @@ SnatchPartnerMonMove: createvisualtask AnimTask_SnatchPartnerMove, 2 goto SnatchMoveContinue -General_FutureSightHit: +gBattleAnimGeneral_FutureSightHit:: createvisualtask AnimTask_SetAnimTargetToBattlerTarget, 2 monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -27957,7 +27870,7 @@ General_FutureSightHit: call UnsetPsychicBg end -General_DoomDesireHit: +gBattleAnimGeneral_DoomDesireHit:: createvisualtask AnimTask_SetAnimTargetToBattlerTarget, 2 loadspritegfx ANIM_TAG_EXPLOSION createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_WHITE @@ -27991,7 +27904,7 @@ General_DoomDesireHit: waitforvisualfinish end -General_FocusPunchSetUp: +gBattleAnimGeneral_FocusPunchSetUp:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -28004,7 +27917,7 @@ General_FocusPunchSetUp: waitforvisualfinish end -General_IngrainHeal: +gBattleAnimGeneral_IngrainHeal:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER @@ -28023,7 +27936,7 @@ General_IngrainHeal: blendoff end -General_WishHeal: +gBattleAnimGeneral_WishHeal:: loadspritegfx ANIM_TAG_SPARKLE_2 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK waitforvisualfinish @@ -28037,34 +27950,34 @@ General_WishHeal: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK end -General_SimpleHeal: +gBattleAnimGeneral_SimpleHeal:: loadspritegfx ANIM_TAG_BLUE_STAR call HealingEffect waitforvisualfinish end -General_IllusionOff: +gBattleAnimGeneral_IllusionOff:: monbg ANIM_TARGET createvisualtask AnimTask_TransformMon, 2, 1, 0 waitforvisualfinish clearmonbg ANIM_TARGET end -General_FormChange: +gBattleAnimGeneral_FormChange:: monbg ANIM_ATTACKER createvisualtask AnimTask_TransformMon, 2, 1, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER end -General_SlideOffScreen: +gBattleAnimGeneral_SlideOffScreen:: createvisualtask AnimTask_SlideOffScreen, 5, ANIM_TARGET, 3 waitforvisualfinish createvisualtask AnimTask_SetInvisible, 1, ANIM_TARGET, TRUE waitforvisualfinish end -General_MegaEvolution: +gBattleAnimGeneral_MegaEvolution:: loadspritegfx ANIM_TAG_MEGA_STONE loadspritegfx ANIM_TAG_MEGA_PARTICLES loadspritegfx ANIM_TAG_MEGA_SYMBOL @@ -28109,7 +28022,7 @@ MegaEvolutionParticles: delay 3 return -General_TeraCharge: +gBattleAnimGeneral_TeraCharge:: loadspritegfx ANIM_TAG_TERA_CRYSTAL loadspritegfx ANIM_TAG_TERA_SHATTER loadspritegfx ANIM_TAG_FOCUS_ENERGY @@ -28147,7 +28060,7 @@ TeraChargeParticles: createsprite gTeraCrystalSpreadSpriteTemplate, ANIM_TARGET, 0, 0, 10, 0 return -General_TeraActivate: +gBattleAnimGeneral_TeraActivate:: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 waitforvisualfinish @@ -28156,12 +28069,12 @@ General_TeraActivate: blendoff end -General_RestoreBg: +gBattleAnimGeneral_RestoreBg:: restorebg waitbgfadein end -General_ZMoveActivate: +gBattleAnimGeneral_ZMoveActivate:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_Z_MOVE_SYMBOL @Z-Move Symbol loadspritegfx ANIM_TAG_WHIP_HIT @green color @@ -28196,7 +28109,7 @@ ZMoveBuffEffect: delay 0x3 return -General_TotemFlare:: +gBattleAnimGeneral_TotemFlare:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_WHIP_HIT @green color loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color @@ -28226,7 +28139,7 @@ RainbowEndureEffect: delay 0x3 return -General_GulpMissile: @ Tackle anim (placeholder) +gBattleAnimGeneral_GulpMissile:: @ Tackle anim (placeholder) loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATTACKER setalpha 12, 8 @@ -28240,7 +28153,7 @@ General_GulpMissile: @ Tackle anim (placeholder) blendoff end -General_StrongWinds:: +gBattleAnimGeneral_StrongWinds:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_GUST, 0 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 12, 12, RGB(20, 20, 20) @@ -28251,7 +28164,7 @@ General_StrongWinds:: stopsound end -General_PrimalReversion:: +gBattleAnimGeneral_PrimalReversion:: createvisualtask AnimTask_PrimalReversion, 0x5 jumpargeq 0x0, ITEM_RED_ORB, General_PrimalReversion_Omega jumpargeq 0x0, ITEM_BLUE_ORB, General_PrimalReversion_Alpha @@ -28310,7 +28223,7 @@ General_PrimalReversion_Omega: blendoff end -General_UltraBurst:: +gBattleAnimGeneral_UltraBurst:: loadspritegfx ANIM_TAG_ULTRA_BURST_SYMBOL loadspritegfx ANIM_TAG_SPARK_2 @spark loadspritegfx ANIM_TAG_LEAF @green @@ -28347,7 +28260,7 @@ General_UltraBurst:: blendoff end -General_AffectionHangedOn:: +gBattleAnimGeneral_AffectionHangedOn:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER @@ -28368,10 +28281,10 @@ General_AffectionHangedOn_3Hearts: waitforvisualfinish end -General_SaltCureDamage:: - goto Status_Freeze +gBattleAnimGeneral_SaltCureDamage:: + goto gBattleAnimStatus_Freeze -General_Rainbow:: +gBattleAnimGeneral_Rainbow:: call RainDrops delay 30 loadspritegfx ANIM_TAG_SUNLIGHT @@ -28394,7 +28307,7 @@ General_Rainbow:: clearmonbg ANIM_ATK_PARTNER end -General_SeaOfFire:: +gBattleAnimGeneral_SeaOfFire:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -28437,8 +28350,8 @@ SeaOfFireTwisterTres: delay 2 return -General_Swamp:: @ To do - goto Move_HAZE +gBattleAnimGeneral_Swamp:: @ To do + goto gBattleAnimMove_Haze SnatchMoveTrySwapFromSubstitute: createvisualtask AnimTask_IsAttackerBehindSubstitute, 2 @@ -28463,7 +28376,7 @@ SnatchMoveSwapMonForSubstitute: goto SnatchMoveTrySwapToSubstituteEnd @ Healthbox blue flash effect on level up -Special_LevelUp: +gBattleAnimSpecial_LevelUp:: playsewithpan SE_EXP_MAX, 0 createvisualtask AnimTask_LoadHealthboxPalsForLevelUp, 2 delay 0 @@ -28472,19 +28385,19 @@ Special_LevelUp: createvisualtask AnimTask_FreeHealthboxPalsForLevelUp, 2 end -Special_SwitchOutPlayerMon: +gBattleAnimSpecial_SwitchOutPlayerMon:: createvisualtask AnimTask_SwitchOutBallEffect, 2 delay 10 createvisualtask AnimTask_SwitchOutShrinkMon, 2 end -Special_SwitchOutOpponentMon: +gBattleAnimSpecial_SwitchOutOpponentMon:: createvisualtask AnimTask_SwitchOutBallEffect, 2 delay 10 createvisualtask AnimTask_SwitchOutShrinkMon, 2 end -Special_BallThrow: +gBattleAnimSpecial_BallThrow:: createvisualtask AnimTask_LoadBallGfx, 2 delay 0 playsewithpan SE_BALL_THROW, 0 @@ -28508,7 +28421,7 @@ BallThrowTrainerBlock: blendoff goto BallThrowEnd -Special_BallThrowWithTrainer: +gBattleAnimSpecial_BallThrowWithTrainer:: createvisualtask AnimTask_LoadBallGfx, 2 delay 0 createvisualtask AnimTask_ThrowBall_StandingTrainer, 2 @@ -28516,15 +28429,15 @@ Special_BallThrowWithTrainer: createvisualtask AnimTask_FreeBallGfx, 2 end -Special_SubstituteToMon: +gBattleAnimSpecial_SubstituteToMon:: createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, TRUE end -Special_MonToSubstitute: +gBattleAnimSpecial_MonToSubstitute:: createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, FALSE end -Special_CriticalCaptureBallThrow: +gBattleAnimSpecial_CriticalCaptureBallThrow:: createvisualtask AnimTask_LoadBallGfx, 2 delay 0 playsewithpan SE_FALL, 0 @@ -28534,7 +28447,7 @@ Special_CriticalCaptureBallThrow: goto BallThrowEnd @@@@@@@@@@ Z MOVES @@@@@@@@@@ -Move_BREAKNECK_BLITZ:: +gBattleAnimMove_BreakneckBlitz:: loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -28615,7 +28528,7 @@ Move_BREAKNECK_BLITZ:: end -Move_ALL_OUT_PUMMELING:: +gBattleAnimMove_AllOutPummeling:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_METEOR @@ -28705,7 +28618,7 @@ Move_ALL_OUT_PUMMELING:: end -Move_SUPERSONIC_SKYSTRIKE:: +gBattleAnimMove_SupersonicSkystrike:: loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly loadspritegfx ANIM_TAG_MUD_SAND @ dig loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy @@ -28778,7 +28691,7 @@ FinishSupersonicSkystrike: end -Move_ACID_DOWNPOUR:: +gBattleAnimMove_AcidDownpour:: loadspritegfx ANIM_TAG_BLUE_ORB @ reversal loadspritegfx ANIM_TAG_POISON_JAB @ poison jab loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles @@ -28864,7 +28777,7 @@ AcidDownpourFlareOnAttacker: return -Move_TECTONIC_RAGE:: +gBattleAnimMove_TectonicRage:: loadspritegfx ANIM_TAG_DIRT_MOUND @ dig loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks loadspritegfx ANIM_TAG_ROCKS @ rollout @@ -28981,7 +28894,7 @@ TectonicRageExplosion: return -Move_CONTINENTAL_CRUSH:: +gBattleAnimMove_ContinentalCrush:: loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly loadspritegfx ANIM_TAG_MUD_SAND @ dig loadspritegfx ANIM_TAG_ROCKS @ rocks @@ -29129,7 +29042,7 @@ ContinentalCrushStockpileRocks: return -Move_SAVAGE_SPIN_OUT:: +gBattleAnimMove_SavageSpinOut:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_RAZOR_LEAF @green color loadspritegfx ANIM_TAG_STRING @string shot @@ -29282,7 +29195,7 @@ SlowSavageSpinOutBackgroundSpeed: return -Move_NEVER_ENDING_NIGHTMARE:: +gBattleAnimMove_NeverEndingNightmare:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple hand @@ -29466,7 +29379,7 @@ NeverendingNightmareGeyser: return -Move_CORKSCREW_CRASH:: +gBattleAnimMove_CorkscrewCrash:: loadspritegfx ANIM_TAG_SPIKES @metal bits loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_CORKSCREW @drill @@ -29593,7 +29506,7 @@ CorkscrewCrashSprayRocks: return -Move_INFERNO_OVERDRIVE:: +gBattleAnimMove_InfernoOverdrive:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_SMALL_EMBER @fire createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F @@ -29703,7 +29616,7 @@ InfernoOverdriveExplosion: return -Move_HYDRO_VORTEX:: +gBattleAnimMove_HydroVortex:: loadspritegfx ANIM_TAG_SPLASH @dive loadspritegfx ANIM_TAG_SWEAT_BEAD @dive loadspritegfx ANIM_TAG_ICE_CRYSTALS @crabhammer bubbles @@ -29817,7 +29730,7 @@ HydroVortexWhirlpoolHurricane: return -Move_BLOOM_DOOM:: +gBattleAnimMove_BloomDoom:: loadspritegfx ANIM_TAG_FLOWER @petal loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_RAZOR_LEAF @green @@ -30011,7 +29924,7 @@ ResetFromGreenScreen: return -Move_GIGAVOLT_HAVOC:: +gBattleAnimMove_GigavoltHavoc:: loadspritegfx ANIM_TAG_HAVOC_SPEAR loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRIC_ORBS @@ -30185,7 +30098,7 @@ HavocSpearSparkTarget: return -Move_SHATTERED_PSYCHE:: +gBattleAnimMove_ShatteredPsyche:: loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @reflect loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge @@ -30346,7 +30259,7 @@ ShatteredPsycheFlingPlayer: return -Move_SUBZERO_SLAMMER:: +gBattleAnimMove_SubzeroSlammer:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_ICE_CUBE @glacier loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion @@ -30497,7 +30410,7 @@ SubzeroSlammerIceSwirl: return -Move_DEVASTATING_DRAKE:: +gBattleAnimMove_DevastatingDrake:: loadspritegfx ANIM_TAG_PURPLE_DRAKE loadspritegfx ANIM_TAG_POISON_BUBBLE @ purple loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy @@ -30717,7 +30630,7 @@ DevastatingDrakeExplosion: return -Move_BLACK_HOLE_ECLIPSE:: +gBattleAnimMove_BlackHoleEclipse:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball @@ -30859,7 +30772,7 @@ ResetFromWhiteScreen: return -Move_TWINKLE_TACKLE:: +gBattleAnimMove_TwinkleTackle:: loadspritegfx ANIM_TAG_SPARKLE_2 @star loadspritegfx ANIM_TAG_PINK_PETAL @pink loadspritegfx ANIM_TAG_THIN_RING @ring @@ -31017,7 +30930,7 @@ TwinkleTackleStarsTarget: return @ signature z moves -Move_CATASTROPIKA:: +gBattleAnimMove_Catastropika:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_ROUND_SHADOW @fly invisible ANIM_TARGET @@ -31191,7 +31104,7 @@ CatastropikaThundering: return -Move_10000000_VOLT_THUNDERBOLT:: +gBattleAnimMove_10000000VoltThunderbolt:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_ROUND_SHADOW @fly @@ -31455,7 +31368,7 @@ TenMillionVoltThunderboltSparkGeyser: return -Move_STOKED_SPARKSURFER:: +gBattleAnimMove_StokedSparksurfer:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_SPARK_2 @spark invisible ANIM_TARGET @@ -31590,7 +31503,7 @@ StokedSparksurferSparkGeyser: return -Move_EXTREME_EVOBOOST:: +gBattleAnimMove_ExtremeEvoboost:: loadspritegfx ANIM_TAG_LEER @leer createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x0, 0x10, 0x0000 waitforvisualfinish @@ -31728,7 +31641,7 @@ ExtremeEvoboostColorCharge: return -Move_PULVERIZING_PANCAKE:: +gBattleAnimMove_PulverizingPancake:: loadspritegfx ANIM_TAG_SPARKLE_4 @detect loadspritegfx ANIM_TAG_VERTICAL_HEX @red loadspritegfx ANIM_TAG_MUD_SAND @dig @@ -31842,7 +31755,7 @@ PulverizingPancakeExplosion: return -Move_GENESIS_SUPERNOVA:: +gBattleAnimMove_GenesisSupernova:: loadspritegfx ANIM_TAG_BLUE_ORB @reversal loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble loadspritegfx ANIM_TAG_POISON_JAB @purple @@ -32029,7 +31942,7 @@ GenesisSupernovaBuffOpponent_2: return -Move_SINISTER_ARROW_RAID:: +gBattleAnimMove_SinisterArrowRaid:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_SPIRIT_ARROW @arrow loadspritegfx ANIM_TAG_LEAF @green @@ -32337,7 +32250,7 @@ SinisterArrowRaidFinalExplosion: return -Move_MALICIOUS_MOONSAULT:: +gBattleAnimMove_MaliciousMoonsault:: loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_VERTICAL_HEX @red @@ -32457,7 +32370,7 @@ MaliciousMoonsaultExplosion: return -Move_OCEANIC_OPERETTA:: +gBattleAnimMove_OceanicOperetta:: createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish loadspritegfx ANIM_TAG_SPOTLIGHT @@ -32643,7 +32556,7 @@ OceanicOperettaExplosion: return -Move_SPLINTERED_STORMSHARDS:: +gBattleAnimMove_SplinteredStormshards:: loadspritegfx ANIM_TAG_ROCKS @rock loadspritegfx ANIM_TAG_ICICLE_SPEAR @spear createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA @@ -32902,7 +32815,7 @@ SplinteredStormshardsFinishFadeReturn: return -Move_LETS_SNUGGLE_FOREVER:: +gBattleAnimMove_LetsSnuggleForever:: loadspritegfx ANIM_TAG_MAGENTA_HEART @sharm loadspritegfx ANIM_TAG_MUSIC_NOTES @music note loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears @@ -33030,7 +32943,7 @@ LetsSnuggleForeverStars_2: return -Move_CLANGOROUS_SOULBLAZE:: +gBattleAnimMove_ClangorousSoulblaze:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_WATER_ORB @blue loadspritegfx ANIM_TAG_POISON_BUBBLE @purple @@ -33314,7 +33227,7 @@ ClangorousSoulblazePulse_5: return -Move_GUARDIAN_OF_ALOLA:: +gBattleAnimMove_GuardianOfAlola:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_MUD_SAND @dig loadspritegfx ANIM_TAG_SPEED_DUST @extremespeed @@ -33412,7 +33325,7 @@ GuardianOfAlolaRockGeyser: return -Move_SEARING_SUNRAZE_SMASH:: +gBattleAnimMove_SearingSunrazeSmash:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles invisible ANIM_TARGET @@ -33641,7 +33554,7 @@ ResetFromRedScreen: return -Move_MENACING_MOONRAZE_MAELSTROM:: +gBattleAnimMove_MenacingMoonrazeMaelstrom:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles loadspritegfx ANIM_TAG_WATER_ORB @blue @@ -33832,7 +33745,7 @@ MenacingMoonrazeMaelstromBeam: return -Move_LIGHT_THAT_BURNS_THE_SKY:: +gBattleAnimMove_LightThatBurnsTheSky:: loadspritegfx ANIM_TAG_SPARK_2 @spark loadspritegfx ANIM_TAG_LEAF @green loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge particles @@ -33990,7 +33903,7 @@ LightThatBurnsTheSkyGreenSparks: return -Move_SOUL_STEALING_7_STAR_STRIKE:: +gBattleAnimMove_SoulStealing7StarStrike:: loadspritegfx ANIM_TAG_ROUND_SHADOW @bounce loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice blue loadspritegfx ANIM_TAG_WISP_FIRE @will o wisp @@ -34164,178 +34077,178 @@ SoulStealingSevenStarStrikeExplosion: return @@@@@@@@@@ MAX MOVES @@@@@@@@@@ -General_SetWeather:: +gBattleAnimGeneral_SetWeather:: createvisualtask AnimTask_GetWeatherToSet, 2 - jumpreteq 1, General_Sun - jumpreteq 2, General_Rain - jumpreteq 3, General_Sandstorm - jumpreteq 4, General_Hail + jumpreteq 1, gBattleAnimGeneral_Sun + jumpreteq 2, gBattleAnimGeneral_Rain + jumpreteq 3, gBattleAnimGeneral_Sandstorm + jumpreteq 4, gBattleAnimGeneral_Hail end -Move_MAX_GUARD:: +gBattleAnimMove_MaxGuard:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PROTECT + goto gBattleAnimMove_Protect end -Move_MAX_STRIKE:: -Move_G_MAX_REPLENISH:: +gBattleAnimMove_MaxStrike:: +gBattleAnimMove_GMaxReplenish:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_GIGA_IMPACT + goto gBattleAnimMove_GigaImpact end -Move_MAX_AIRSTREAM:: -Move_G_MAX_WIND_RAGE:: +gBattleAnimMove_MaxAirstream:: +gBattleAnimMove_GMaxWindRage:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_AEROBLAST + goto gBattleAnimMove_Aeroblast end -Move_MAX_OOZE:: -Move_G_MAX_MALODOR:: +gBattleAnimMove_MaxOoze:: +gBattleAnimMove_GMaxMalodor:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_GUNK_SHOT + goto gBattleAnimMove_GunkShot end -Move_G_MAX_WILDFIRE:: -Move_G_MAX_FIREBALL:: -Move_G_MAX_CENTIFERNO:: -Move_MAX_FLARE:: +gBattleAnimMove_GMaxWildfire:: +gBattleAnimMove_GMaxFireball:: +gBattleAnimMove_GMaxCentiferno:: +gBattleAnimMove_MaxFlare:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_BLAST_BURN + goto gBattleAnimMove_BlastBurn end -Move_G_MAX_CANNONADE:: -Move_G_MAX_HYDROSNIPE:: -Move_G_MAX_FOAM_BURST:: -Move_MAX_GEYSER:: +gBattleAnimMove_GMaxCannonade:: +gBattleAnimMove_GMaxHydrosnipe:: +gBattleAnimMove_GMaxFoamBurst:: +gBattleAnimMove_MaxGeyser:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_HYDRO_CANNON + goto gBattleAnimMove_HydroCannon end -Move_G_MAX_VINE_LASH:: -Move_G_MAX_DRUM_SOLO:: -Move_G_MAX_TARTNESS:: -Move_G_MAX_SWEETNESS:: -Move_MAX_OVERGROWTH:: +gBattleAnimMove_GMaxVineLash:: +gBattleAnimMove_GMaxDrumSolo:: +gBattleAnimMove_GMaxTartness:: +gBattleAnimMove_GMaxSweetness:: +gBattleAnimMove_MaxOvergrowth:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_FRENZY_PLANT + goto gBattleAnimMove_FrenzyPlant end -Move_MAX_LIGHTNING:: -Move_G_MAX_STUN_SHOCK:: +gBattleAnimMove_MaxLightning:: +gBattleAnimMove_GMaxStunShock:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_ZAP_CANNON + goto gBattleAnimMove_ZapCannon end -Move_G_MAX_CHI_STRIKE:: -Move_G_MAX_ONE_BLOW:: -Move_G_MAX_RAPID_FLOW:: -Move_MAX_KNUCKLE:: +gBattleAnimMove_GMaxChiStrike:: +gBattleAnimMove_GMaxOneBlow:: +gBattleAnimMove_GMaxRapidFlow:: +gBattleAnimMove_MaxKnuckle:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_CLOSE_COMBAT + goto gBattleAnimMove_CloseCombat end -Move_G_MAX_RESONANCE:: -Move_MAX_HAILSTORM:: +gBattleAnimMove_GMaxResonance:: +gBattleAnimMove_MaxHailstorm:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_SHEER_COLD + goto gBattleAnimMove_SheerCold end -Move_G_MAX_SANDBLAST:: -Move_MAX_QUAKE:: +gBattleAnimMove_GMaxSandblast:: +gBattleAnimMove_MaxQuake:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_FISSURE + goto gBattleAnimMove_Fissure end -Move_G_MAX_BEFUDDLE:: -Move_MAX_FLUTTERBY:: +gBattleAnimMove_GMaxBefuddle:: +gBattleAnimMove_MaxFlutterby:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_BUG_BUZZ + goto gBattleAnimMove_BugBuzz end -Move_G_MAX_STEELSURGE:: -Move_G_MAX_MELTDOWN:: -Move_MAX_STEELSPIKE:: +gBattleAnimMove_GMaxSteelsurge:: +gBattleAnimMove_GMaxMeltdown:: +gBattleAnimMove_MaxSteelspike:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_HEAVY_SLAM + goto gBattleAnimMove_HeavySlam end -Move_G_MAX_TERROR:: -Move_MAX_PHANTASM:: +gBattleAnimMove_GMaxTerror:: +gBattleAnimMove_MaxPhantasm:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PHANTOM_FORCE + goto gBattleAnimMove_PhantomForce end -Move_G_MAX_GRAVITAS:: -Move_MAX_MINDSTORM:: +gBattleAnimMove_GMaxGravitas:: +gBattleAnimMove_MaxMindstorm:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PSYCHO_BOOST + goto gBattleAnimMove_PsychoBoost end -Move_G_MAX_SMITE:: -Move_G_MAX_FINALE:: -Move_MAX_STARFALL:: +gBattleAnimMove_GMaxSmite:: +gBattleAnimMove_GMaxFinale:: +gBattleAnimMove_MaxStarfall:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_MOONBLAST + goto gBattleAnimMove_Moonblast end -Move_G_MAX_STONESURGE:: -Move_G_MAX_VOLCALITH:: -Move_MAX_ROCKFALL:: +gBattleAnimMove_GMaxStonesurge:: +gBattleAnimMove_GMaxVolcalith:: +gBattleAnimMove_MaxRockfall:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_ROCK_WRECKER + goto gBattleAnimMove_RockWrecker end -Move_G_MAX_DEPLETION:: -Move_MAX_WYRMWIND:: +gBattleAnimMove_GMaxDepletion:: +gBattleAnimMove_MaxWyrmwind:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_SPACIAL_REND + goto gBattleAnimMove_SpacialRend end -Move_G_MAX_SNOOZE:: -Move_MAX_DARKNESS:: +gBattleAnimMove_GMaxSnooze:: +gBattleAnimMove_MaxDarkness:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_DARK_PULSE + goto gBattleAnimMove_DarkPulse end -Move_G_MAX_CUDDLE:: +gBattleAnimMove_GMaxCuddle:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_COVET + goto gBattleAnimMove_Covet end -Move_G_MAX_VOLT_CRASH:: +gBattleAnimMove_GMaxVoltCrash:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_VOLT_TACKLE + goto gBattleAnimMove_VoltTackle end -Move_G_MAX_GOLD_RUSH:: +gBattleAnimMove_GMaxGoldRush:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PAY_DAY + goto gBattleAnimMove_PayDay end @@@ DYNAMAX AND MAX RAIDS -General_DynamaxGrowth:: @ PORTED FROM CFRU +gBattleAnimGeneral_DynamaxGrowth:: @ PORTED FROM CFRU createvisualtask SoundTask_PlayCryWithEcho, 2, ANIM_ATTACKER, 2 delay 8 createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x0 diff --git a/include/battle_anim_scripts.h b/include/battle_anim_scripts.h index d97aaa421d..6c49788975 100644 --- a/include/battle_anim_scripts.h +++ b/include/battle_anim_scripts.h @@ -1,940 +1,1018 @@ #ifndef GUARD_BATTLE_ANIM_SCRIPTS_H #define GUARD_BATTLE_ANIM_SCRIPTS_H -extern const u8 Move_NONE[]; -extern const u8 Move_POUND[]; -extern const u8 Move_KARATE_CHOP[]; -extern const u8 Move_DOUBLE_SLAP[]; -extern const u8 Move_COMET_PUNCH[]; -extern const u8 Move_MEGA_PUNCH[]; -extern const u8 Move_PAY_DAY[]; -extern const u8 Move_FIRE_PUNCH[]; -extern const u8 Move_ICE_PUNCH[]; -extern const u8 Move_THUNDER_PUNCH[]; -extern const u8 Move_SCRATCH[]; -extern const u8 Move_VISE_GRIP[]; -extern const u8 Move_GUILLOTINE[]; -extern const u8 Move_RAZOR_WIND[]; -extern const u8 Move_SWORDS_DANCE[]; -extern const u8 Move_CUT[]; -extern const u8 Move_GUST[]; -extern const u8 Move_WING_ATTACK[]; -extern const u8 Move_WHIRLWIND[]; -extern const u8 Move_FLY[]; -extern const u8 Move_BIND[]; -extern const u8 Move_SLAM[]; -extern const u8 Move_VINE_WHIP[]; -extern const u8 Move_STOMP[]; -extern const u8 Move_DOUBLE_KICK[]; -extern const u8 Move_MEGA_KICK[]; -extern const u8 Move_JUMP_KICK[]; -extern const u8 Move_ROLLING_KICK[]; -extern const u8 Move_SAND_ATTACK[]; -extern const u8 Move_HEADBUTT[]; -extern const u8 Move_HORN_ATTACK[]; -extern const u8 Move_FURY_ATTACK[]; -extern const u8 Move_HORN_DRILL[]; -extern const u8 Move_TACKLE[]; -extern const u8 Move_BODY_SLAM[]; -extern const u8 Move_WRAP[]; -extern const u8 Move_TAKE_DOWN[]; -extern const u8 Move_THRASH[]; -extern const u8 Move_DOUBLE_EDGE[]; -extern const u8 Move_TAIL_WHIP[]; -extern const u8 Move_POISON_STING[]; -extern const u8 Move_TWINEEDLE[]; -extern const u8 Move_PIN_MISSILE[]; -extern const u8 Move_LEER[]; -extern const u8 Move_BITE[]; -extern const u8 Move_GROWL[]; -extern const u8 Move_ROAR[]; -extern const u8 Move_SING[]; -extern const u8 Move_SUPERSONIC[]; -extern const u8 Move_SONIC_BOOM[]; -extern const u8 Move_DISABLE[]; -extern const u8 Move_ACID[]; -extern const u8 Move_EMBER[]; -extern const u8 Move_FLAMETHROWER[]; -extern const u8 Move_MIST[]; -extern const u8 Move_WATER_GUN[]; -extern const u8 Move_HYDRO_PUMP[]; -extern const u8 Move_SURF[]; -extern const u8 Move_ICE_BEAM[]; -extern const u8 Move_BLIZZARD[]; -extern const u8 Move_PSYBEAM[]; -extern const u8 Move_BUBBLE_BEAM[]; -extern const u8 Move_AURORA_BEAM[]; -extern const u8 Move_HYPER_BEAM[]; -extern const u8 Move_PECK[]; -extern const u8 Move_DRILL_PECK[]; -extern const u8 Move_SUBMISSION[]; -extern const u8 Move_LOW_KICK[]; -extern const u8 Move_COUNTER[]; -extern const u8 Move_SEISMIC_TOSS[]; -extern const u8 Move_STRENGTH[]; -extern const u8 Move_ABSORB[]; -extern const u8 Move_MEGA_DRAIN[]; -extern const u8 Move_LEECH_SEED[]; -extern const u8 Move_GROWTH[]; -extern const u8 Move_RAZOR_LEAF[]; -extern const u8 Move_SOLAR_BEAM[]; -extern const u8 Move_POISON_POWDER[]; -extern const u8 Move_STUN_SPORE[]; -extern const u8 Move_SLEEP_POWDER[]; -extern const u8 Move_PETAL_DANCE[]; -extern const u8 Move_STRING_SHOT[]; -extern const u8 Move_DRAGON_RAGE[]; -extern const u8 Move_FIRE_SPIN[]; -extern const u8 Move_THUNDER_SHOCK[]; -extern const u8 Move_THUNDERBOLT[]; -extern const u8 Move_THUNDER_WAVE[]; -extern const u8 Move_THUNDER[]; -extern const u8 Move_ROCK_THROW[]; -extern const u8 Move_EARTHQUAKE[]; -extern const u8 Move_FISSURE[]; -extern const u8 Move_DIG[]; -extern const u8 Move_TOXIC[]; -extern const u8 Move_CONFUSION[]; -extern const u8 Move_PSYCHIC[]; -extern const u8 Move_HYPNOSIS[]; -extern const u8 Move_MEDITATE[]; -extern const u8 Move_AGILITY[]; -extern const u8 Move_QUICK_ATTACK[]; -extern const u8 Move_RAGE[]; -extern const u8 Move_TELEPORT[]; -extern const u8 Move_NIGHT_SHADE[]; -extern const u8 Move_MIMIC[]; -extern const u8 Move_SCREECH[]; -extern const u8 Move_DOUBLE_TEAM[]; -extern const u8 Move_RECOVER[]; -extern const u8 Move_HARDEN[]; -extern const u8 Move_MINIMIZE[]; -extern const u8 Move_SMOKESCREEN[]; -extern const u8 Move_CONFUSE_RAY[]; -extern const u8 Move_WITHDRAW[]; -extern const u8 Move_DEFENSE_CURL[]; -extern const u8 Move_BARRIER[]; -extern const u8 Move_LIGHT_SCREEN[]; -extern const u8 Move_HAZE[]; -extern const u8 Move_REFLECT[]; -extern const u8 Move_FOCUS_ENERGY[]; -extern const u8 Move_BIDE[]; -extern const u8 Move_METRONOME[]; -extern const u8 Move_MIRROR_MOVE[]; -extern const u8 Move_SELF_DESTRUCT[]; -extern const u8 Move_EGG_BOMB[]; -extern const u8 Move_LICK[]; -extern const u8 Move_SMOG[]; -extern const u8 Move_SLUDGE[]; -extern const u8 Move_BONE_CLUB[]; -extern const u8 Move_FIRE_BLAST[]; -extern const u8 Move_WATERFALL[]; -extern const u8 Move_CLAMP[]; -extern const u8 Move_SWIFT[]; -extern const u8 Move_SKULL_BASH[]; -extern const u8 Move_SPIKE_CANNON[]; -extern const u8 Move_CONSTRICT[]; -extern const u8 Move_AMNESIA[]; -extern const u8 Move_KINESIS[]; -extern const u8 Move_SOFT_BOILED[]; -extern const u8 Move_HIGH_JUMP_KICK[]; -extern const u8 Move_GLARE[]; -extern const u8 Move_DREAM_EATER[]; -extern const u8 Move_POISON_GAS[]; -extern const u8 Move_BARRAGE[]; -extern const u8 Move_LEECH_LIFE[]; -extern const u8 Move_LOVELY_KISS[]; -extern const u8 Move_SKY_ATTACK[]; -extern const u8 Move_TRANSFORM[]; -extern const u8 Move_BUBBLE[]; -extern const u8 Move_DIZZY_PUNCH[]; -extern const u8 Move_SPORE[]; -extern const u8 Move_FLASH[]; -extern const u8 Move_PSYWAVE[]; -extern const u8 Move_SPLASH[]; -extern const u8 Move_ACID_ARMOR[]; -extern const u8 Move_CRABHAMMER[]; -extern const u8 Move_EXPLOSION[]; -extern const u8 Move_FURY_SWIPES[]; -extern const u8 Move_BONEMERANG[]; -extern const u8 Move_REST[]; -extern const u8 Move_ROCK_SLIDE[]; -extern const u8 Move_HYPER_FANG[]; -extern const u8 Move_SHARPEN[]; -extern const u8 Move_CONVERSION[]; -extern const u8 Move_TRI_ATTACK[]; -extern const u8 Move_SUPER_FANG[]; -extern const u8 Move_SLASH[]; -extern const u8 Move_SUBSTITUTE[]; -extern const u8 Move_STRUGGLE[]; -extern const u8 Move_SKETCH[]; -extern const u8 Move_TRIPLE_KICK[]; -extern const u8 Move_THIEF[]; -extern const u8 Move_SPIDER_WEB[]; -extern const u8 Move_MIND_READER[]; -extern const u8 Move_NIGHTMARE[]; -extern const u8 Move_FLAME_WHEEL[]; -extern const u8 Move_SNORE[]; -extern const u8 Move_CURSE[]; -extern const u8 Move_FLAIL[]; -extern const u8 Move_CONVERSION_2[]; -extern const u8 Move_AEROBLAST[]; -extern const u8 Move_COTTON_SPORE[]; -extern const u8 Move_REVERSAL[]; -extern const u8 Move_SPITE[]; -extern const u8 Move_POWDER_SNOW[]; -extern const u8 Move_PROTECT[]; -extern const u8 Move_MACH_PUNCH[]; -extern const u8 Move_SCARY_FACE[]; -extern const u8 Move_FEINT_ATTACK[]; -extern const u8 Move_SWEET_KISS[]; -extern const u8 Move_BELLY_DRUM[]; -extern const u8 Move_SLUDGE_BOMB[]; -extern const u8 Move_MUD_SLAP[]; -extern const u8 Move_OCTAZOOKA[]; -extern const u8 Move_SPIKES[]; -extern const u8 Move_ZAP_CANNON[]; -extern const u8 Move_FORESIGHT[]; -extern const u8 Move_DESTINY_BOND[]; -extern const u8 Move_PERISH_SONG[]; -extern const u8 Move_ICY_WIND[]; -extern const u8 Move_DETECT[]; -extern const u8 Move_BONE_RUSH[]; -extern const u8 Move_LOCK_ON[]; -extern const u8 Move_OUTRAGE[]; -extern const u8 Move_SANDSTORM[]; -extern const u8 Move_GIGA_DRAIN[]; -extern const u8 Move_ENDURE[]; -extern const u8 Move_CHARM[]; -extern const u8 Move_ROLLOUT[]; -extern const u8 Move_FALSE_SWIPE[]; -extern const u8 Move_SWAGGER[]; -extern const u8 Move_MILK_DRINK[]; -extern const u8 Move_SPARK[]; -extern const u8 Move_FURY_CUTTER[]; -extern const u8 Move_STEEL_WING[]; -extern const u8 Move_MEAN_LOOK[]; -extern const u8 Move_ATTRACT[]; -extern const u8 Move_SLEEP_TALK[]; -extern const u8 Move_HEAL_BELL[]; -extern const u8 Move_RETURN[]; -extern const u8 Move_PRESENT[]; -extern const u8 Move_FRUSTRATION[]; -extern const u8 Move_SAFEGUARD[]; -extern const u8 Move_PAIN_SPLIT[]; -extern const u8 Move_SACRED_FIRE[]; -extern const u8 Move_MAGNITUDE[]; -extern const u8 Move_DYNAMIC_PUNCH[]; -extern const u8 Move_MEGAHORN[]; -extern const u8 Move_DRAGON_BREATH[]; -extern const u8 Move_BATON_PASS[]; -extern const u8 Move_ENCORE[]; -extern const u8 Move_PURSUIT[]; -extern const u8 Move_RAPID_SPIN[]; -extern const u8 Move_SWEET_SCENT[]; -extern const u8 Move_IRON_TAIL[]; -extern const u8 Move_METAL_CLAW[]; -extern const u8 Move_VITAL_THROW[]; -extern const u8 Move_MORNING_SUN[]; -extern const u8 Move_SYNTHESIS[]; -extern const u8 Move_MOONLIGHT[]; -extern const u8 Move_HIDDEN_POWER[]; -extern const u8 Move_CROSS_CHOP[]; -extern const u8 Move_TWISTER[]; -extern const u8 Move_RAIN_DANCE[]; -extern const u8 Move_SUNNY_DAY[]; -extern const u8 Move_CRUNCH[]; -extern const u8 Move_MIRROR_COAT[]; -extern const u8 Move_PSYCH_UP[]; -extern const u8 Move_EXTREME_SPEED[]; -extern const u8 Move_ANCIENT_POWER[]; -extern const u8 Move_SHADOW_BALL[]; -extern const u8 Move_FUTURE_SIGHT[]; -extern const u8 Move_ROCK_SMASH[]; -extern const u8 Move_WHIRLPOOL[]; -extern const u8 Move_BEAT_UP[]; -extern const u8 Move_FAKE_OUT[]; -extern const u8 Move_UPROAR[]; -extern const u8 Move_STOCKPILE[]; -extern const u8 Move_SPIT_UP[]; -extern const u8 Move_SWALLOW[]; -extern const u8 Move_HEAT_WAVE[]; -extern const u8 Move_HAIL[]; -extern const u8 Move_TORMENT[]; -extern const u8 Move_FLATTER[]; -extern const u8 Move_WILL_O_WISP[]; -extern const u8 Move_MEMENTO[]; -extern const u8 Move_FACADE[]; -extern const u8 Move_FOCUS_PUNCH[]; -extern const u8 Move_SMELLING_SALTS[]; -extern const u8 Move_FOLLOW_ME[]; -extern const u8 Move_NATURE_POWER[]; -extern const u8 Move_CHARGE[]; -extern const u8 Move_TAUNT[]; -extern const u8 Move_HELPING_HAND[]; -extern const u8 Move_TRICK[]; -extern const u8 Move_ROLE_PLAY[]; -extern const u8 Move_WISH[]; -extern const u8 Move_ASSIST[]; -extern const u8 Move_INGRAIN[]; -extern const u8 Move_SUPERPOWER[]; -extern const u8 Move_MAGIC_COAT[]; -extern const u8 Move_RECYCLE[]; -extern const u8 Move_REVENGE[]; -extern const u8 Move_BRICK_BREAK[]; -extern const u8 Move_YAWN[]; -extern const u8 Move_KNOCK_OFF[]; -extern const u8 Move_ENDEAVOR[]; -extern const u8 Move_ERUPTION[]; -extern const u8 Move_SKILL_SWAP[]; -extern const u8 Move_IMPRISON[]; -extern const u8 Move_REFRESH[]; -extern const u8 Move_GRUDGE[]; -extern const u8 Move_SNATCH[]; -extern const u8 Move_SECRET_POWER[]; -extern const u8 Move_DIVE[]; -extern const u8 Move_ARM_THRUST[]; -extern const u8 Move_CAMOUFLAGE[]; -extern const u8 Move_TAIL_GLOW[]; -extern const u8 Move_LUSTER_PURGE[]; -extern const u8 Move_MIST_BALL[]; -extern const u8 Move_FEATHER_DANCE[]; -extern const u8 Move_TEETER_DANCE[]; -extern const u8 Move_BLAZE_KICK[]; -extern const u8 Move_MUD_SPORT[]; -extern const u8 Move_ICE_BALL[]; -extern const u8 Move_NEEDLE_ARM[]; -extern const u8 Move_SLACK_OFF[]; -extern const u8 Move_HYPER_VOICE[]; -extern const u8 Move_POISON_FANG[]; -extern const u8 Move_CRUSH_CLAW[]; -extern const u8 Move_BLAST_BURN[]; -extern const u8 Move_HYDRO_CANNON[]; -extern const u8 Move_METEOR_MASH[]; -extern const u8 Move_ASTONISH[]; -extern const u8 Move_WEATHER_BALL[]; -extern const u8 Move_AROMATHERAPY[]; -extern const u8 Move_FAKE_TEARS[]; -extern const u8 Move_AIR_CUTTER[]; -extern const u8 Move_OVERHEAT[]; -extern const u8 Move_ODOR_SLEUTH[]; -extern const u8 Move_ROCK_TOMB[]; -extern const u8 Move_SILVER_WIND[]; -extern const u8 Move_METAL_SOUND[]; -extern const u8 Move_GRASS_WHISTLE[]; -extern const u8 Move_TICKLE[]; -extern const u8 Move_COSMIC_POWER[]; -extern const u8 Move_WATER_SPOUT[]; -extern const u8 Move_SIGNAL_BEAM[]; -extern const u8 Move_SHADOW_PUNCH[]; -extern const u8 Move_EXTRASENSORY[]; -extern const u8 Move_SKY_UPPERCUT[]; -extern const u8 Move_SAND_TOMB[]; -extern const u8 Move_SHEER_COLD[]; -extern const u8 Move_MUDDY_WATER[]; -extern const u8 Move_BULLET_SEED[]; -extern const u8 Move_AERIAL_ACE[]; -extern const u8 Move_ICICLE_SPEAR[]; -extern const u8 Move_IRON_DEFENSE[]; -extern const u8 Move_BLOCK[]; -extern const u8 Move_HOWL[]; -extern const u8 Move_DRAGON_CLAW[]; -extern const u8 Move_FRENZY_PLANT[]; -extern const u8 Move_BULK_UP[]; -extern const u8 Move_BOUNCE[]; -extern const u8 Move_MUD_SHOT[]; -extern const u8 Move_POISON_TAIL[]; -extern const u8 Move_COVET[]; -extern const u8 Move_VOLT_TACKLE[]; -extern const u8 Move_MAGICAL_LEAF[]; -extern const u8 Move_WATER_SPORT[]; -extern const u8 Move_CALM_MIND[]; -extern const u8 Move_LEAF_BLADE[]; -extern const u8 Move_DRAGON_DANCE[]; -extern const u8 Move_ROCK_BLAST[]; -extern const u8 Move_SHOCK_WAVE[]; -extern const u8 Move_WATER_PULSE[]; -extern const u8 Move_DOOM_DESIRE[]; -extern const u8 Move_PSYCHO_BOOST[]; -extern const u8 Move_ROOST[]; -extern const u8 Move_GRAVITY[]; -extern const u8 Move_MIRACLE_EYE[]; -extern const u8 Move_WAKE_UP_SLAP[]; -extern const u8 Move_HAMMER_ARM[]; -extern const u8 Move_GYRO_BALL[]; -extern const u8 Move_HEALING_WISH[]; -extern const u8 Move_BRINE[]; -extern const u8 Move_NATURAL_GIFT[]; -extern const u8 Move_FEINT[]; -extern const u8 Move_PLUCK[]; -extern const u8 Move_TAILWIND[]; -extern const u8 Move_ACUPRESSURE[]; -extern const u8 Move_METAL_BURST[]; -extern const u8 Move_U_TURN[]; -extern const u8 Move_CLOSE_COMBAT[]; -extern const u8 Move_PAYBACK[]; -extern const u8 Move_ASSURANCE[]; -extern const u8 Move_EMBARGO[]; -extern const u8 Move_FLING[]; -extern const u8 Move_PSYCHO_SHIFT[]; -extern const u8 Move_TRUMP_CARD[]; -extern const u8 Move_HEAL_BLOCK[]; -extern const u8 Move_WRING_OUT[]; -extern const u8 Move_POWER_TRICK[]; -extern const u8 Move_GASTRO_ACID[]; -extern const u8 Move_LUCKY_CHANT[]; -extern const u8 Move_ME_FIRST[]; -extern const u8 Move_COPYCAT[]; -extern const u8 Move_POWER_SWAP[]; -extern const u8 Move_GUARD_SWAP[]; -extern const u8 Move_PUNISHMENT[]; -extern const u8 Move_LAST_RESORT[]; -extern const u8 Move_WORRY_SEED[]; -extern const u8 Move_SUCKER_PUNCH[]; -extern const u8 Move_TOXIC_SPIKES[]; -extern const u8 Move_HEART_SWAP[]; -extern const u8 Move_AQUA_RING[]; -extern const u8 Move_MAGNET_RISE[]; -extern const u8 Move_FLARE_BLITZ[]; -extern const u8 Move_FORCE_PALM[]; -extern const u8 Move_AURA_SPHERE[]; -extern const u8 Move_ROCK_POLISH[]; -extern const u8 Move_POISON_JAB[]; -extern const u8 Move_DARK_PULSE[]; -extern const u8 Move_NIGHT_SLASH[]; -extern const u8 Move_AQUA_TAIL[]; -extern const u8 Move_SEED_BOMB[]; -extern const u8 Move_AIR_SLASH[]; -extern const u8 Move_X_SCISSOR[]; -extern const u8 Move_BUG_BUZZ[]; -extern const u8 Move_DRAGON_PULSE[]; -extern const u8 Move_DRAGON_RUSH[]; -extern const u8 Move_POWER_GEM[]; -extern const u8 Move_DRAIN_PUNCH[]; -extern const u8 Move_VACUUM_WAVE[]; -extern const u8 Move_FOCUS_BLAST[]; -extern const u8 Move_ENERGY_BALL[]; -extern const u8 Move_BRAVE_BIRD[]; -extern const u8 Move_EARTH_POWER[]; -extern const u8 Move_SWITCHEROO[]; -extern const u8 Move_GIGA_IMPACT[]; -extern const u8 Move_NASTY_PLOT[]; -extern const u8 Move_BULLET_PUNCH[]; -extern const u8 Move_AVALANCHE[]; -extern const u8 Move_ICE_SHARD[]; -extern const u8 Move_SHADOW_CLAW[]; -extern const u8 Move_THUNDER_FANG[]; -extern const u8 Move_ICE_FANG[]; -extern const u8 Move_FIRE_FANG[]; -extern const u8 Move_SHADOW_SNEAK[]; -extern const u8 Move_MUD_BOMB[]; -extern const u8 Move_PSYCHO_CUT[]; -extern const u8 Move_ZEN_HEADBUTT[]; -extern const u8 Move_MIRROR_SHOT[]; -extern const u8 Move_FLASH_CANNON[]; -extern const u8 Move_ROCK_CLIMB[]; -extern const u8 Move_DEFOG[]; -extern const u8 Move_TRICK_ROOM[]; -extern const u8 Move_DRACO_METEOR[]; -extern const u8 Move_DISCHARGE[]; -extern const u8 Move_LAVA_PLUME[]; -extern const u8 Move_LEAF_STORM[]; -extern const u8 Move_POWER_WHIP[]; -extern const u8 Move_ROCK_WRECKER[]; -extern const u8 Move_CROSS_POISON[]; -extern const u8 Move_GUNK_SHOT[]; -extern const u8 Move_IRON_HEAD[]; -extern const u8 Move_MAGNET_BOMB[]; -extern const u8 Move_STONE_EDGE[]; -extern const u8 Move_CAPTIVATE[]; -extern const u8 Move_STEALTH_ROCK[]; -extern const u8 Move_GRASS_KNOT[]; -extern const u8 Move_CHATTER[]; -extern const u8 Move_JUDGMENT[]; -extern const u8 Move_BUG_BITE[]; -extern const u8 Move_CHARGE_BEAM[]; -extern const u8 Move_WOOD_HAMMER[]; -extern const u8 Move_AQUA_JET[]; -extern const u8 Move_ATTACK_ORDER[]; -extern const u8 Move_DEFEND_ORDER[]; -extern const u8 Move_HEAL_ORDER[]; -extern const u8 Move_HEAD_SMASH[]; -extern const u8 Move_DOUBLE_HIT[]; -extern const u8 Move_ROAR_OF_TIME[]; -extern const u8 Move_SPACIAL_REND[]; -extern const u8 Move_LUNAR_DANCE[]; -extern const u8 Move_CRUSH_GRIP[]; -extern const u8 Move_MAGMA_STORM[]; -extern const u8 Move_DARK_VOID[]; -extern const u8 Move_SEED_FLARE[]; -extern const u8 Move_OMINOUS_WIND[]; -extern const u8 Move_SHADOW_FORCE[]; -extern const u8 Move_HONE_CLAWS[]; -extern const u8 Move_WIDE_GUARD[]; -extern const u8 Move_GUARD_SPLIT[]; -extern const u8 Move_POWER_SPLIT[]; -extern const u8 Move_WONDER_ROOM[]; -extern const u8 Move_PSYSHOCK[]; -extern const u8 Move_VENOSHOCK[]; -extern const u8 Move_AUTOTOMIZE[]; -extern const u8 Move_RAGE_POWDER[]; -extern const u8 Move_TELEKINESIS[]; -extern const u8 Move_MAGIC_ROOM[]; -extern const u8 Move_SMACK_DOWN[]; -extern const u8 Move_STORM_THROW[]; -extern const u8 Move_FLAME_BURST[]; -extern const u8 Move_SLUDGE_WAVE[]; -extern const u8 Move_QUIVER_DANCE[]; -extern const u8 Move_HEAVY_SLAM[]; -extern const u8 Move_SYNCHRONOISE[]; -extern const u8 Move_ELECTRO_BALL[]; -extern const u8 Move_SOAK[]; -extern const u8 Move_FLAME_CHARGE[]; -extern const u8 Move_COIL[]; -extern const u8 Move_LOW_SWEEP[]; -extern const u8 Move_ACID_SPRAY[]; -extern const u8 Move_FOUL_PLAY[]; -extern const u8 Move_SIMPLE_BEAM[]; -extern const u8 Move_ENTRAINMENT[]; -extern const u8 Move_AFTER_YOU[]; -extern const u8 Move_ROUND[]; -extern const u8 Move_ECHOED_VOICE[]; -extern const u8 Move_CHIP_AWAY[]; -extern const u8 Move_CLEAR_SMOG[]; -extern const u8 Move_STORED_POWER[]; -extern const u8 Move_QUICK_GUARD[]; -extern const u8 Move_ALLY_SWITCH[]; -extern const u8 Move_SCALD[]; -extern const u8 Move_SHELL_SMASH[]; -extern const u8 Move_HEAL_PULSE[]; -extern const u8 Move_HEX[]; -extern const u8 Move_SKY_DROP[]; -extern const u8 Move_SHIFT_GEAR[]; -extern const u8 Move_CIRCLE_THROW[]; -extern const u8 Move_INCINERATE[]; -extern const u8 Move_QUASH[]; -extern const u8 Move_ACROBATICS[]; -extern const u8 Move_REFLECT_TYPE[]; -extern const u8 Move_RETALIATE[]; -extern const u8 Move_FINAL_GAMBIT[]; -extern const u8 Move_BESTOW[]; -extern const u8 Move_INFERNO[]; -extern const u8 Move_WATER_PLEDGE[]; -extern const u8 Move_FIRE_PLEDGE[]; -extern const u8 Move_GRASS_PLEDGE[]; -extern const u8 Move_VOLT_SWITCH[]; -extern const u8 Move_STRUGGLE_BUG[]; -extern const u8 Move_BULLDOZE[]; -extern const u8 Move_FROST_BREATH[]; -extern const u8 Move_DRAGON_TAIL[]; -extern const u8 Move_WORK_UP[]; -extern const u8 Move_ELECTROWEB[]; -extern const u8 Move_WILD_CHARGE[]; -extern const u8 Move_DRILL_RUN[]; -extern const u8 Move_DUAL_CHOP[]; -extern const u8 Move_HEART_STAMP[]; -extern const u8 Move_HORN_LEECH[]; -extern const u8 Move_SACRED_SWORD[]; -extern const u8 Move_RAZOR_SHELL[]; -extern const u8 Move_HEAT_CRASH[]; -extern const u8 Move_LEAF_TORNADO[]; -extern const u8 Move_STEAMROLLER[]; -extern const u8 Move_COTTON_GUARD[]; -extern const u8 Move_NIGHT_DAZE[]; -extern const u8 Move_PSYSTRIKE[]; -extern const u8 Move_TAIL_SLAP[]; -extern const u8 Move_HURRICANE[]; -extern const u8 Move_HEAD_CHARGE[]; -extern const u8 Move_GEAR_GRIND[]; -extern const u8 Move_SEARING_SHOT[]; -extern const u8 Move_TECHNO_BLAST[]; -extern const u8 Move_RELIC_SONG[]; -extern const u8 Move_SECRET_SWORD[]; -extern const u8 Move_GLACIATE[]; -extern const u8 Move_BOLT_STRIKE[]; -extern const u8 Move_BLUE_FLARE[]; -extern const u8 Move_FIERY_DANCE[]; -extern const u8 Move_FREEZE_SHOCK[]; -extern const u8 Move_ICE_BURN[]; -extern const u8 Move_SNARL[]; -extern const u8 Move_ICICLE_CRASH[]; -extern const u8 Move_V_CREATE[]; -extern const u8 Move_FUSION_FLARE[]; -extern const u8 Move_FUSION_BOLT[]; -extern const u8 Move_FLYING_PRESS[]; -extern const u8 Move_MAT_BLOCK[]; -extern const u8 Move_BELCH[]; -extern const u8 Move_ROTOTILLER[]; -extern const u8 Move_STICKY_WEB[]; -extern const u8 Move_FELL_STINGER[]; -extern const u8 Move_PHANTOM_FORCE[]; -extern const u8 Move_TRICK_OR_TREAT[]; -extern const u8 Move_NOBLE_ROAR[]; -extern const u8 Move_ION_DELUGE[]; -extern const u8 Move_PARABOLIC_CHARGE[]; -extern const u8 Move_FORESTS_CURSE[]; -extern const u8 Move_PETAL_BLIZZARD[]; -extern const u8 Move_FREEZE_DRY[]; -extern const u8 Move_DISARMING_VOICE[]; -extern const u8 Move_PARTING_SHOT[]; -extern const u8 Move_TOPSY_TURVY[]; -extern const u8 Move_DRAINING_KISS[]; -extern const u8 Move_CRAFTY_SHIELD[]; -extern const u8 Move_FLOWER_SHIELD[]; -extern const u8 Move_GRASSY_TERRAIN[]; -extern const u8 Move_MISTY_TERRAIN[]; -extern const u8 Move_ELECTRIFY[]; -extern const u8 Move_PLAY_ROUGH[]; -extern const u8 Move_FAIRY_WIND[]; -extern const u8 Move_MOONBLAST[]; -extern const u8 Move_BOOMBURST[]; -extern const u8 Move_FAIRY_LOCK[]; -extern const u8 Move_KINGS_SHIELD[]; -extern const u8 Move_PLAY_NICE[]; -extern const u8 Move_CONFIDE[]; -extern const u8 Move_DIAMOND_STORM[]; -extern const u8 Move_STEAM_ERUPTION[]; -extern const u8 Move_HYPERSPACE_HOLE[]; -extern const u8 Move_WATER_SHURIKEN[]; -extern const u8 Move_MYSTICAL_FIRE[]; -extern const u8 Move_SPIKY_SHIELD[]; -extern const u8 Move_AROMATIC_MIST[]; -extern const u8 Move_EERIE_IMPULSE[]; -extern const u8 Move_VENOM_DRENCH[]; -extern const u8 Move_POWDER[]; -extern const u8 Move_GEOMANCY[]; -extern const u8 Move_MAGNETIC_FLUX[]; -extern const u8 Move_HAPPY_HOUR[]; -extern const u8 Move_ELECTRIC_TERRAIN[]; -extern const u8 Move_DAZZLING_GLEAM[]; -extern const u8 Move_CELEBRATE[]; -extern const u8 Move_HOLD_HANDS[]; -extern const u8 Move_BABY_DOLL_EYES[]; -extern const u8 Move_NUZZLE[]; -extern const u8 Move_HOLD_BACK[]; -extern const u8 Move_INFESTATION[]; -extern const u8 Move_POWER_UP_PUNCH[]; -extern const u8 Move_OBLIVION_WING[]; -extern const u8 Move_THOUSAND_ARROWS[]; -extern const u8 Move_THOUSAND_WAVES[]; -extern const u8 Move_LANDS_WRATH[]; -extern const u8 Move_LIGHT_OF_RUIN[]; -extern const u8 Move_ORIGIN_PULSE[]; -extern const u8 Move_PRECIPICE_BLADES[]; -extern const u8 Move_DRAGON_ASCENT[]; -extern const u8 Move_HYPERSPACE_FURY[]; -extern const u8 Move_SHORE_UP[]; -extern const u8 Move_FIRST_IMPRESSION[]; -extern const u8 Move_BANEFUL_BUNKER[]; -extern const u8 Move_SPIRIT_SHACKLE[]; -extern const u8 Move_DARKEST_LARIAT[]; -extern const u8 Move_SPARKLING_ARIA[]; -extern const u8 Move_ICE_HAMMER[]; -extern const u8 Move_FLORAL_HEALING[]; -extern const u8 Move_HIGH_HORSEPOWER[]; -extern const u8 Move_STRENGTH_SAP[]; -extern const u8 Move_SOLAR_BLADE[]; -extern const u8 Move_LEAFAGE[]; -extern const u8 Move_SPOTLIGHT[]; -extern const u8 Move_TOXIC_THREAD[]; -extern const u8 Move_LASER_FOCUS[]; -extern const u8 Move_GEAR_UP[]; -extern const u8 Move_THROAT_CHOP[]; -extern const u8 Move_POLLEN_PUFF[]; -extern const u8 Move_ANCHOR_SHOT[]; -extern const u8 Move_PSYCHIC_TERRAIN[]; -extern const u8 Move_LUNGE[]; -extern const u8 Move_FIRE_LASH[]; -extern const u8 Move_POWER_TRIP[]; -extern const u8 Move_BURN_UP[]; -extern const u8 Move_SPEED_SWAP[]; -extern const u8 Move_SMART_STRIKE[]; -extern const u8 Move_PURIFY[]; -extern const u8 Move_REVELATION_DANCE[]; -extern const u8 Move_CORE_ENFORCER[]; -extern const u8 Move_TROP_KICK[]; -extern const u8 Move_INSTRUCT[]; -extern const u8 Move_BEAK_BLAST[]; -extern const u8 Move_CLANGING_SCALES[]; -extern const u8 Move_DRAGON_HAMMER[]; -extern const u8 Move_BRUTAL_SWING[]; -extern const u8 Move_AURORA_VEIL[]; -extern const u8 Move_SHELL_TRAP[]; -extern const u8 Move_FLEUR_CANNON[]; -extern const u8 Move_PSYCHIC_FANGS[]; -extern const u8 Move_STOMPING_TANTRUM[]; -extern const u8 Move_SHADOW_BONE[]; -extern const u8 Move_ACCELEROCK[]; -extern const u8 Move_LIQUIDATION[]; -extern const u8 Move_PRISMATIC_LASER[]; -extern const u8 Move_SPECTRAL_THIEF[]; -extern const u8 Move_SUNSTEEL_STRIKE[]; -extern const u8 Move_MOONGEIST_BEAM[]; -extern const u8 Move_TEARFUL_LOOK[]; -extern const u8 Move_ZING_ZAP[]; -extern const u8 Move_NATURES_MADNESS[]; -extern const u8 Move_MULTI_ATTACK[]; -extern const u8 Move_MIND_BLOWN[]; -extern const u8 Move_PLASMA_FISTS[]; -extern const u8 Move_PHOTON_GEYSER[]; -extern const u8 Move_ZIPPY_ZAP[]; -extern const u8 Move_SPLISHY_SPLASH[]; -extern const u8 Move_FLOATY_FALL[]; -extern const u8 Move_PIKA_PAPOW[]; -extern const u8 Move_BOUNCY_BUBBLE[]; -extern const u8 Move_BUZZY_BUZZ[]; -extern const u8 Move_SIZZLY_SLIDE[]; -extern const u8 Move_GLITZY_GLOW[]; -extern const u8 Move_BADDY_BAD[]; -extern const u8 Move_SAPPY_SEED[]; -extern const u8 Move_FREEZY_FROST[]; -extern const u8 Move_SPARKLY_SWIRL[]; -extern const u8 Move_VEEVEE_VOLLEY[]; -extern const u8 Move_DOUBLE_IRON_BASH[]; -extern const u8 Move_DYNAMAX_CANNON[]; -extern const u8 Move_SNIPE_SHOT[]; -extern const u8 Move_JAW_LOCK[]; -extern const u8 Move_STUFF_CHEEKS[]; -extern const u8 Move_NO_RETREAT[]; -extern const u8 Move_TAR_SHOT[]; -extern const u8 Move_MAGIC_POWDER[]; -extern const u8 Move_DRAGON_DARTS[]; -extern const u8 Move_TEATIME[]; -extern const u8 Move_OCTOLOCK[]; -extern const u8 Move_BOLT_BEAK[]; -extern const u8 Move_FISHIOUS_REND[]; -extern const u8 Move_COURT_CHANGE[]; -extern const u8 Move_CLANGOROUS_SOUL[]; -extern const u8 Move_BODY_PRESS[]; -extern const u8 Move_DECORATE[]; -extern const u8 Move_DRUM_BEATING[]; -extern const u8 Move_SNAP_TRAP[]; -extern const u8 Move_PYRO_BALL[]; -extern const u8 Move_BEHEMOTH_BLADE[]; -extern const u8 Move_BEHEMOTH_BASH[]; -extern const u8 Move_AURA_WHEEL[]; -extern const u8 Move_BREAKING_SWIPE[]; -extern const u8 Move_BRANCH_POKE[]; -extern const u8 Move_OVERDRIVE[]; -extern const u8 Move_APPLE_ACID[]; -extern const u8 Move_GRAV_APPLE[]; -extern const u8 Move_SPIRIT_BREAK[]; -extern const u8 Move_STRANGE_STEAM[]; -extern const u8 Move_LIFE_DEW[]; -extern const u8 Move_OBSTRUCT[]; -extern const u8 Move_FALSE_SURRENDER[]; -extern const u8 Move_METEOR_ASSAULT[]; -extern const u8 Move_ETERNABEAM[]; -extern const u8 Move_STEEL_BEAM[]; -extern const u8 Move_EXPANDING_FORCE[]; -extern const u8 Move_STEEL_ROLLER[]; -extern const u8 Move_SCALE_SHOT[]; -extern const u8 Move_METEOR_BEAM[]; -extern const u8 Move_SHELL_SIDE_ARM[]; -extern const u8 Move_MISTY_EXPLOSION[]; -extern const u8 Move_GRASSY_GLIDE[]; -extern const u8 Move_RISING_VOLTAGE[]; -extern const u8 Move_TERRAIN_PULSE[]; -extern const u8 Move_SKITTER_SMACK[]; -extern const u8 Move_BURNING_JEALOUSY[]; -extern const u8 Move_LASH_OUT[]; -extern const u8 Move_POLTERGEIST[]; -extern const u8 Move_CORROSIVE_GAS[]; -extern const u8 Move_COACHING[]; -extern const u8 Move_FLIP_TURN[]; -extern const u8 Move_TRIPLE_AXEL[]; -extern const u8 Move_DUAL_WINGBEAT[]; -extern const u8 Move_SCORCHING_SANDS[]; -extern const u8 Move_JUNGLE_HEALING[]; -extern const u8 Move_WICKED_BLOW[]; -extern const u8 Move_SURGING_STRIKES[]; -extern const u8 Move_THUNDER_CAGE[]; -extern const u8 Move_DRAGON_ENERGY[]; -extern const u8 Move_FREEZING_GLARE[]; -extern const u8 Move_FIERY_WRATH[]; -extern const u8 Move_THUNDEROUS_KICK[]; -extern const u8 Move_GLACIAL_LANCE[]; -extern const u8 Move_ASTRAL_BARRAGE[]; -extern const u8 Move_EERIE_SPELL[]; -extern const u8 Move_DIRE_CLAW[]; -extern const u8 Move_PSYSHIELD_BASH[]; -extern const u8 Move_POWER_SHIFT[]; -extern const u8 Move_STONE_AXE[]; -extern const u8 Move_SPRINGTIDE_STORM[]; -extern const u8 Move_MYSTICAL_POWER[]; -extern const u8 Move_RAGING_FURY[]; -extern const u8 Move_WAVE_CRASH[]; -extern const u8 Move_CHLOROBLAST[]; -extern const u8 Move_MOUNTAIN_GALE[]; -extern const u8 Move_VICTORY_DANCE[]; -extern const u8 Move_HEADLONG_RUSH[]; -extern const u8 Move_BARB_BARRAGE[]; -extern const u8 Move_ESPER_WING[]; -extern const u8 Move_BITTER_MALICE[]; -extern const u8 Move_SHELTER[]; -extern const u8 Move_TRIPLE_ARROWS[]; -extern const u8 Move_INFERNAL_PARADE[]; -extern const u8 Move_CEASELESS_EDGE[]; -extern const u8 Move_BLEAKWIND_STORM[]; -extern const u8 Move_WILDBOLT_STORM[]; -extern const u8 Move_SANDSEAR_STORM[]; -extern const u8 Move_LUNAR_BLESSING[]; -extern const u8 Move_TAKE_HEART[]; -extern const u8 Move_TERA_BLAST[]; -extern const u8 Move_SILK_TRAP[]; -extern const u8 Move_AXE_KICK[]; -extern const u8 Move_LAST_RESPECTS[]; -extern const u8 Move_LUMINA_CRASH[]; -extern const u8 Move_ORDER_UP[]; -extern const u8 Move_JET_PUNCH[]; -extern const u8 Move_SPICY_EXTRACT[]; -extern const u8 Move_SPIN_OUT[]; -extern const u8 Move_POPULATION_BOMB[]; -extern const u8 Move_ICE_SPINNER[]; -extern const u8 Move_GLAIVE_RUSH[]; -extern const u8 Move_REVIVAL_BLESSING[]; -extern const u8 Move_SALT_CURE[]; -extern const u8 Move_TRIPLE_DIVE[]; -extern const u8 Move_MORTAL_SPIN[]; -extern const u8 Move_DOODLE[]; -extern const u8 Move_FILLET_AWAY[]; -extern const u8 Move_KOWTOW_CLEAVE[]; -extern const u8 Move_FLOWER_TRICK[]; -extern const u8 Move_TORCH_SONG[]; -extern const u8 Move_AQUA_STEP[]; -extern const u8 Move_RAGING_BULL[]; -extern const u8 Move_MAKE_IT_RAIN[]; -extern const u8 Move_RUINATION[]; -extern const u8 Move_COLLISION_COURSE[]; -extern const u8 Move_ELECTRO_DRIFT[]; -extern const u8 Move_SHED_TAIL[]; -extern const u8 Move_CHILLY_RECEPTION[]; -extern const u8 Move_TIDY_UP[]; -extern const u8 Move_SNOWSCAPE[]; -extern const u8 Move_POUNCE[]; -extern const u8 Move_TRAILBLAZE[]; -extern const u8 Move_CHILLING_WATER[]; -extern const u8 Move_HYPER_DRILL[]; -extern const u8 Move_TWIN_BEAM[]; -extern const u8 Move_RAGE_FIST[]; -extern const u8 Move_ARMOR_CANNON[]; -extern const u8 Move_BITTER_BLADE[]; -extern const u8 Move_DOUBLE_SHOCK[]; -extern const u8 Move_GIGATON_HAMMER[]; -extern const u8 Move_COMEUPPANCE[]; -extern const u8 Move_AQUA_CUTTER[]; -extern const u8 Move_BLAZING_TORQUE[]; -extern const u8 Move_WICKED_TORQUE[]; -extern const u8 Move_NOXIOUS_TORQUE[]; -extern const u8 Move_COMBAT_TORQUE[]; -extern const u8 Move_MAGICAL_TORQUE[]; -extern const u8 Move_PSYBLADE[]; -extern const u8 Move_HYDRO_STEAM[]; -extern const u8 Move_BLOOD_MOON[]; -extern const u8 Move_MATCHA_GOTCHA[]; -extern const u8 Move_SYRUP_BOMB[]; -extern const u8 Move_IVY_CUDGEL[]; -extern const u8 Move_ELECTRO_SHOT[]; -extern const u8 Move_TERA_STARSTORM[]; -extern const u8 Move_FICKLE_BEAM[]; -extern const u8 Move_BURNING_BULWARK[]; -extern const u8 Move_THUNDERCLAP[]; -extern const u8 Move_MIGHTY_CLEAVE[]; -extern const u8 Move_TACHYON_CUTTER[]; -extern const u8 Move_HARD_PRESS[]; -extern const u8 Move_DRAGON_CHEER[]; -extern const u8 Move_ALLURING_VOICE[]; -extern const u8 Move_TEMPER_FLARE[]; -extern const u8 Move_SUPERCELL_SLAM[]; -extern const u8 Move_PSYCHIC_NOISE[]; -extern const u8 Move_UPPER_HAND[]; -extern const u8 Move_MALIGNANT_CHAIN[]; -extern const u8 Move_BREAKNECK_BLITZ[]; -extern const u8 Move_ALL_OUT_PUMMELING[]; -extern const u8 Move_SUPERSONIC_SKYSTRIKE[]; -extern const u8 Move_ACID_DOWNPOUR[]; -extern const u8 Move_TECTONIC_RAGE[]; -extern const u8 Move_CONTINENTAL_CRUSH[]; -extern const u8 Move_SAVAGE_SPIN_OUT[]; -extern const u8 Move_NEVER_ENDING_NIGHTMARE[]; -extern const u8 Move_CORKSCREW_CRASH[]; -extern const u8 Move_INFERNO_OVERDRIVE[]; -extern const u8 Move_HYDRO_VORTEX[]; -extern const u8 Move_BLOOM_DOOM[]; -extern const u8 Move_GIGAVOLT_HAVOC[]; -extern const u8 Move_SHATTERED_PSYCHE[]; -extern const u8 Move_SUBZERO_SLAMMER[]; -extern const u8 Move_DEVASTATING_DRAKE[]; -extern const u8 Move_BLACK_HOLE_ECLIPSE[]; -extern const u8 Move_TWINKLE_TACKLE[]; -extern const u8 Move_CATASTROPIKA[]; -extern const u8 Move_10000000_VOLT_THUNDERBOLT[]; -extern const u8 Move_STOKED_SPARKSURFER[]; -extern const u8 Move_EXTREME_EVOBOOST[]; -extern const u8 Move_PULVERIZING_PANCAKE[]; -extern const u8 Move_GENESIS_SUPERNOVA[]; -extern const u8 Move_SINISTER_ARROW_RAID[]; -extern const u8 Move_MALICIOUS_MOONSAULT[]; -extern const u8 Move_OCEANIC_OPERETTA[]; -extern const u8 Move_SPLINTERED_STORMSHARDS[]; -extern const u8 Move_LETS_SNUGGLE_FOREVER[]; -extern const u8 Move_CLANGOROUS_SOULBLAZE[]; -extern const u8 Move_GUARDIAN_OF_ALOLA[]; -extern const u8 Move_SEARING_SUNRAZE_SMASH[]; -extern const u8 Move_MENACING_MOONRAZE_MAELSTROM[]; -extern const u8 Move_LIGHT_THAT_BURNS_THE_SKY[]; -extern const u8 Move_SOUL_STEALING_7_STAR_STRIKE[]; -extern const u8 Move_MAX_GUARD[]; -extern const u8 Move_MAX_FLARE[]; -extern const u8 Move_MAX_FLUTTERBY[]; -extern const u8 Move_MAX_LIGHTNING[]; -extern const u8 Move_MAX_STRIKE[]; -extern const u8 Move_MAX_KNUCKLE[]; -extern const u8 Move_MAX_PHANTASM[]; -extern const u8 Move_MAX_HAILSTORM[]; -extern const u8 Move_MAX_OOZE[]; -extern const u8 Move_MAX_GEYSER[]; -extern const u8 Move_MAX_AIRSTREAM[]; -extern const u8 Move_MAX_STARFALL[]; -extern const u8 Move_MAX_WYRMWIND[]; -extern const u8 Move_MAX_MINDSTORM[]; -extern const u8 Move_MAX_ROCKFALL[]; -extern const u8 Move_MAX_QUAKE[]; -extern const u8 Move_MAX_DARKNESS[]; -extern const u8 Move_MAX_OVERGROWTH[]; -extern const u8 Move_MAX_STEELSPIKE[]; -extern const u8 Move_G_MAX_VINE_LASH[]; -extern const u8 Move_G_MAX_WILDFIRE[]; -extern const u8 Move_G_MAX_CANNONADE[]; -extern const u8 Move_G_MAX_BEFUDDLE[]; -extern const u8 Move_G_MAX_VOLT_CRASH[]; -extern const u8 Move_G_MAX_GOLD_RUSH[]; -extern const u8 Move_G_MAX_CHI_STRIKE[]; -extern const u8 Move_G_MAX_TERROR[]; -extern const u8 Move_G_MAX_FOAM_BURST[]; -extern const u8 Move_G_MAX_RESONANCE[]; -extern const u8 Move_G_MAX_CUDDLE[]; -extern const u8 Move_G_MAX_REPLENISH[]; -extern const u8 Move_G_MAX_MALODOR[]; -extern const u8 Move_G_MAX_MELTDOWN[]; -extern const u8 Move_G_MAX_DRUM_SOLO[]; -extern const u8 Move_G_MAX_FIREBALL[]; -extern const u8 Move_G_MAX_HYDROSNIPE[]; -extern const u8 Move_G_MAX_WIND_RAGE[]; -extern const u8 Move_G_MAX_GRAVITAS[]; -extern const u8 Move_G_MAX_STONESURGE[]; -extern const u8 Move_G_MAX_VOLCALITH[]; -extern const u8 Move_G_MAX_TARTNESS[]; -extern const u8 Move_G_MAX_SWEETNESS[]; -extern const u8 Move_G_MAX_SANDBLAST[]; -extern const u8 Move_G_MAX_STUN_SHOCK[]; -extern const u8 Move_G_MAX_CENTIFERNO[]; -extern const u8 Move_G_MAX_SMITE[]; -extern const u8 Move_G_MAX_SNOOZE[]; -extern const u8 Move_G_MAX_FINALE[]; -extern const u8 Move_G_MAX_STEELSURGE[]; -extern const u8 Move_G_MAX_DEPLETION[]; -extern const u8 Move_G_MAX_ONE_BLOW[]; -extern const u8 Move_G_MAX_RAPID_FLOW[]; +// move animations +extern const u8 gBattleAnimMove_None[]; +extern const u8 gBattleAnimMove_Pound[]; +extern const u8 gBattleAnimMove_KarateChop[]; +extern const u8 gBattleAnimMove_DoubleSlap[]; +extern const u8 gBattleAnimMove_CometPunch[]; +extern const u8 gBattleAnimMove_MegaPunch[]; +extern const u8 gBattleAnimMove_PayDay[]; +extern const u8 gBattleAnimMove_FirePunch[]; +extern const u8 gBattleAnimMove_IcePunch[]; +extern const u8 gBattleAnimMove_ThunderPunch[]; +extern const u8 gBattleAnimMove_Scratch[]; +extern const u8 gBattleAnimMove_ViseGrip[]; +extern const u8 gBattleAnimMove_Guillotine[]; +extern const u8 gBattleAnimMove_RazorWind[]; +extern const u8 gBattleAnimMove_SwordsDance[]; +extern const u8 gBattleAnimMove_Cut[]; +extern const u8 gBattleAnimMove_Gust[]; +extern const u8 gBattleAnimMove_WingAttack[]; +extern const u8 gBattleAnimMove_Whirlwind[]; +extern const u8 gBattleAnimMove_Fly[]; +extern const u8 gBattleAnimMove_Bind[]; +extern const u8 gBattleAnimMove_Slam[]; +extern const u8 gBattleAnimMove_VineWhip[]; +extern const u8 gBattleAnimMove_Stomp[]; +extern const u8 gBattleAnimMove_DoubleKick[]; +extern const u8 gBattleAnimMove_MegaKick[]; +extern const u8 gBattleAnimMove_JumpKick[]; +extern const u8 gBattleAnimMove_RollingKick[]; +extern const u8 gBattleAnimMove_SandAttack[]; +extern const u8 gBattleAnimMove_Headbutt[]; +extern const u8 gBattleAnimMove_HornAttack[]; +extern const u8 gBattleAnimMove_FuryAttack[]; +extern const u8 gBattleAnimMove_HornDrill[]; +extern const u8 gBattleAnimMove_Tackle[]; +extern const u8 gBattleAnimMove_BodySlam[]; +extern const u8 gBattleAnimMove_Wrap[]; +extern const u8 gBattleAnimMove_TakeDown[]; +extern const u8 gBattleAnimMove_Thrash[]; +extern const u8 gBattleAnimMove_DoubleEdge[]; +extern const u8 gBattleAnimMove_TailWhip[]; +extern const u8 gBattleAnimMove_PoisonSting[]; +extern const u8 gBattleAnimMove_Twineedle[]; +extern const u8 gBattleAnimMove_PinMissile[]; +extern const u8 gBattleAnimMove_Leer[]; +extern const u8 gBattleAnimMove_Bite[]; +extern const u8 gBattleAnimMove_Growl[]; +extern const u8 gBattleAnimMove_Roar[]; +extern const u8 gBattleAnimMove_Sing[]; +extern const u8 gBattleAnimMove_Supersonic[]; +extern const u8 gBattleAnimMove_SonicBoom[]; +extern const u8 gBattleAnimMove_Disable[]; +extern const u8 gBattleAnimMove_Acid[]; +extern const u8 gBattleAnimMove_Ember[]; +extern const u8 gBattleAnimMove_Flamethrower[]; +extern const u8 gBattleAnimMove_Mist[]; +extern const u8 gBattleAnimMove_WaterGun[]; +extern const u8 gBattleAnimMove_HydroPump[]; +extern const u8 gBattleAnimMove_Surf[]; +extern const u8 gBattleAnimMove_IceBeam[]; +extern const u8 gBattleAnimMove_Blizzard[]; +extern const u8 gBattleAnimMove_Psybeam[]; +extern const u8 gBattleAnimMove_BubbleBeam[]; +extern const u8 gBattleAnimMove_AuroraBeam[]; +extern const u8 gBattleAnimMove_HyperBeam[]; +extern const u8 gBattleAnimMove_Peck[]; +extern const u8 gBattleAnimMove_DrillPeck[]; +extern const u8 gBattleAnimMove_Submission[]; +extern const u8 gBattleAnimMove_LowKick[]; +extern const u8 gBattleAnimMove_Counter[]; +extern const u8 gBattleAnimMove_SeismicToss[]; +extern const u8 gBattleAnimMove_Strength[]; +extern const u8 gBattleAnimMove_Absorb[]; +extern const u8 gBattleAnimMove_MegaDrain[]; +extern const u8 gBattleAnimMove_LeechSeed[]; +extern const u8 gBattleAnimMove_Growth[]; +extern const u8 gBattleAnimMove_RazorLeaf[]; +extern const u8 gBattleAnimMove_SolarBeam[]; +extern const u8 gBattleAnimMove_PoisonPowder[]; +extern const u8 gBattleAnimMove_StunSpore[]; +extern const u8 gBattleAnimMove_SleepPowder[]; +extern const u8 gBattleAnimMove_PetalDance[]; +extern const u8 gBattleAnimMove_StringShot[]; +extern const u8 gBattleAnimMove_DragonRage[]; +extern const u8 gBattleAnimMove_FireSpin[]; +extern const u8 gBattleAnimMove_ThunderShock[]; +extern const u8 gBattleAnimMove_Thunderbolt[]; +extern const u8 gBattleAnimMove_ThunderWave[]; +extern const u8 gBattleAnimMove_Thunder[]; +extern const u8 gBattleAnimMove_RockThrow[]; +extern const u8 gBattleAnimMove_Earthquake[]; +extern const u8 gBattleAnimMove_Fissure[]; +extern const u8 gBattleAnimMove_Dig[]; +extern const u8 gBattleAnimMove_Toxic[]; +extern const u8 gBattleAnimMove_Confusion[]; +extern const u8 gBattleAnimMove_Psychic[]; +extern const u8 gBattleAnimMove_Hypnosis[]; +extern const u8 gBattleAnimMove_Meditate[]; +extern const u8 gBattleAnimMove_Agility[]; +extern const u8 gBattleAnimMove_QuickAttack[]; +extern const u8 gBattleAnimMove_Rage[]; +extern const u8 gBattleAnimMove_Teleport[]; +extern const u8 gBattleAnimMove_NightShade[]; +extern const u8 gBattleAnimMove_Mimic[]; +extern const u8 gBattleAnimMove_Screech[]; +extern const u8 gBattleAnimMove_DoubleTeam[]; +extern const u8 gBattleAnimMove_Recover[]; +extern const u8 gBattleAnimMove_Harden[]; +extern const u8 gBattleAnimMove_Minimize[]; +extern const u8 gBattleAnimMove_Smokescreen[]; +extern const u8 gBattleAnimMove_ConfuseRay[]; +extern const u8 gBattleAnimMove_Withdraw[]; +extern const u8 gBattleAnimMove_DefenseCurl[]; +extern const u8 gBattleAnimMove_Barrier[]; +extern const u8 gBattleAnimMove_LightScreen[]; +extern const u8 gBattleAnimMove_Haze[]; +extern const u8 gBattleAnimMove_Reflect[]; +extern const u8 gBattleAnimMove_FocusEnergy[]; +extern const u8 gBattleAnimMove_Bide[]; +extern const u8 gBattleAnimMove_Metronome[]; +extern const u8 gBattleAnimMove_MirrorMove[]; +extern const u8 gBattleAnimMove_SelfDestruct[]; +extern const u8 gBattleAnimMove_EggBomb[]; +extern const u8 gBattleAnimMove_Lick[]; +extern const u8 gBattleAnimMove_Smog[]; +extern const u8 gBattleAnimMove_Sludge[]; +extern const u8 gBattleAnimMove_BoneClub[]; +extern const u8 gBattleAnimMove_FireBlast[]; +extern const u8 gBattleAnimMove_Waterfall[]; +extern const u8 gBattleAnimMove_Clamp[]; +extern const u8 gBattleAnimMove_Swift[]; +extern const u8 gBattleAnimMove_SkullBash[]; +extern const u8 gBattleAnimMove_SpikeCannon[]; +extern const u8 gBattleAnimMove_Constrict[]; +extern const u8 gBattleAnimMove_Amnesia[]; +extern const u8 gBattleAnimMove_Kinesis[]; +extern const u8 gBattleAnimMove_SoftBoiled[]; +extern const u8 gBattleAnimMove_HighJumpKick[]; +extern const u8 gBattleAnimMove_Glare[]; +extern const u8 gBattleAnimMove_DreamEater[]; +extern const u8 gBattleAnimMove_PoisonGas[]; +extern const u8 gBattleAnimMove_Barrage[]; +extern const u8 gBattleAnimMove_LeechLife[]; +extern const u8 gBattleAnimMove_LovelyKiss[]; +extern const u8 gBattleAnimMove_SkyAttack[]; +extern const u8 gBattleAnimMove_Transform[]; +extern const u8 gBattleAnimMove_Bubble[]; +extern const u8 gBattleAnimMove_DizzyPunch[]; +extern const u8 gBattleAnimMove_Spore[]; +extern const u8 gBattleAnimMove_Flash[]; +extern const u8 gBattleAnimMove_Psywave[]; +extern const u8 gBattleAnimMove_Splash[]; +extern const u8 gBattleAnimMove_AcidArmor[]; +extern const u8 gBattleAnimMove_Crabhammer[]; +extern const u8 gBattleAnimMove_Explosion[]; +extern const u8 gBattleAnimMove_FurySwipes[]; +extern const u8 gBattleAnimMove_Bonemerang[]; +extern const u8 gBattleAnimMove_Rest[]; +extern const u8 gBattleAnimMove_RockSlide[]; +extern const u8 gBattleAnimMove_HyperFang[]; +extern const u8 gBattleAnimMove_Sharpen[]; +extern const u8 gBattleAnimMove_Conversion[]; +extern const u8 gBattleAnimMove_TriAttack[]; +extern const u8 gBattleAnimMove_SuperFang[]; +extern const u8 gBattleAnimMove_Slash[]; +extern const u8 gBattleAnimMove_Substitute[]; +extern const u8 gBattleAnimMove_Struggle[]; +extern const u8 gBattleAnimMove_Sketch[]; +extern const u8 gBattleAnimMove_TripleKick[]; +extern const u8 gBattleAnimMove_Thief[]; +extern const u8 gBattleAnimMove_SpiderWeb[]; +extern const u8 gBattleAnimMove_MindReader[]; +extern const u8 gBattleAnimMove_Nightmare[]; +extern const u8 gBattleAnimMove_FlameWheel[]; +extern const u8 gBattleAnimMove_Snore[]; +extern const u8 gBattleAnimMove_Curse[]; +extern const u8 gBattleAnimMove_Flail[]; +extern const u8 gBattleAnimMove_Conversion2[]; +extern const u8 gBattleAnimMove_Aeroblast[]; +extern const u8 gBattleAnimMove_CottonSpore[]; +extern const u8 gBattleAnimMove_Reversal[]; +extern const u8 gBattleAnimMove_Spite[]; +extern const u8 gBattleAnimMove_PowderSnow[]; +extern const u8 gBattleAnimMove_Protect[]; +extern const u8 gBattleAnimMove_MachPunch[]; +extern const u8 gBattleAnimMove_ScaryFace[]; +extern const u8 gBattleAnimMove_FeintAttack[]; +extern const u8 gBattleAnimMove_SweetKiss[]; +extern const u8 gBattleAnimMove_BellyDrum[]; +extern const u8 gBattleAnimMove_SludgeBomb[]; +extern const u8 gBattleAnimMove_MudSlap[]; +extern const u8 gBattleAnimMove_Octazooka[]; +extern const u8 gBattleAnimMove_Spikes[]; +extern const u8 gBattleAnimMove_ZapCannon[]; +extern const u8 gBattleAnimMove_Foresight[]; +extern const u8 gBattleAnimMove_DestinyBond[]; +extern const u8 gBattleAnimMove_PerishSong[]; +extern const u8 gBattleAnimMove_IcyWind[]; +extern const u8 gBattleAnimMove_Detect[]; +extern const u8 gBattleAnimMove_BoneRush[]; +extern const u8 gBattleAnimMove_LockOn[]; +extern const u8 gBattleAnimMove_Outrage[]; +extern const u8 gBattleAnimMove_Sandstorm[]; +extern const u8 gBattleAnimMove_GigaDrain[]; +extern const u8 gBattleAnimMove_Endure[]; +extern const u8 gBattleAnimMove_Charm[]; +extern const u8 gBattleAnimMove_Rollout[]; +extern const u8 gBattleAnimMove_FalseSwipe[]; +extern const u8 gBattleAnimMove_Swagger[]; +extern const u8 gBattleAnimMove_MilkDrink[]; +extern const u8 gBattleAnimMove_Spark[]; +extern const u8 gBattleAnimMove_FuryCutter[]; +extern const u8 gBattleAnimMove_SteelWing[]; +extern const u8 gBattleAnimMove_MeanLook[]; +extern const u8 gBattleAnimMove_Attract[]; +extern const u8 gBattleAnimMove_SleepTalk[]; +extern const u8 gBattleAnimMove_HealBell[]; +extern const u8 gBattleAnimMove_Return[]; +extern const u8 gBattleAnimMove_Present[]; +extern const u8 gBattleAnimMove_Frustration[]; +extern const u8 gBattleAnimMove_Safeguard[]; +extern const u8 gBattleAnimMove_PainSplit[]; +extern const u8 gBattleAnimMove_SacredFire[]; +extern const u8 gBattleAnimMove_Magnitude[]; +extern const u8 gBattleAnimMove_DynamicPunch[]; +extern const u8 gBattleAnimMove_Megahorn[]; +extern const u8 gBattleAnimMove_DragonBreath[]; +extern const u8 gBattleAnimMove_BatonPass[]; +extern const u8 gBattleAnimMove_Encore[]; +extern const u8 gBattleAnimMove_Pursuit[]; +extern const u8 gBattleAnimMove_RapidSpin[]; +extern const u8 gBattleAnimMove_SweetScent[]; +extern const u8 gBattleAnimMove_IronTail[]; +extern const u8 gBattleAnimMove_MetalClaw[]; +extern const u8 gBattleAnimMove_VitalThrow[]; +extern const u8 gBattleAnimMove_MorningSun[]; +extern const u8 gBattleAnimMove_Synthesis[]; +extern const u8 gBattleAnimMove_Moonlight[]; +extern const u8 gBattleAnimMove_HiddenPower[]; +extern const u8 gBattleAnimMove_CrossChop[]; +extern const u8 gBattleAnimMove_Twister[]; +extern const u8 gBattleAnimMove_RainDance[]; +extern const u8 gBattleAnimMove_SunnyDay[]; +extern const u8 gBattleAnimMove_Crunch[]; +extern const u8 gBattleAnimMove_MirrorCoat[]; +extern const u8 gBattleAnimMove_PsychUp[]; +extern const u8 gBattleAnimMove_ExtremeSpeed[]; +extern const u8 gBattleAnimMove_AncientPower[]; +extern const u8 gBattleAnimMove_ShadowBall[]; +extern const u8 gBattleAnimMove_FutureSight[]; +extern const u8 gBattleAnimMove_RockSmash[]; +extern const u8 gBattleAnimMove_Whirlpool[]; +extern const u8 gBattleAnimMove_BeatUp[]; +extern const u8 gBattleAnimMove_FakeOut[]; +extern const u8 gBattleAnimMove_Uproar[]; +extern const u8 gBattleAnimMove_Stockpile[]; +extern const u8 gBattleAnimMove_SpitUp[]; +extern const u8 gBattleAnimMove_Swallow[]; +extern const u8 gBattleAnimMove_HeatWave[]; +extern const u8 gBattleAnimMove_Hail[]; +extern const u8 gBattleAnimMove_Torment[]; +extern const u8 gBattleAnimMove_Flatter[]; +extern const u8 gBattleAnimMove_WillOWisp[]; +extern const u8 gBattleAnimMove_Memento[]; +extern const u8 gBattleAnimMove_Facade[]; +extern const u8 gBattleAnimMove_FocusPunch[]; +extern const u8 gBattleAnimMove_SmellingSalts[]; +extern const u8 gBattleAnimMove_FollowMe[]; +extern const u8 gBattleAnimMove_NaturePower[]; +extern const u8 gBattleAnimMove_Charge[]; +extern const u8 gBattleAnimMove_Taunt[]; +extern const u8 gBattleAnimMove_HelpingHand[]; +extern const u8 gBattleAnimMove_Trick[]; +extern const u8 gBattleAnimMove_RolePlay[]; +extern const u8 gBattleAnimMove_Wish[]; +extern const u8 gBattleAnimMove_Assist[]; +extern const u8 gBattleAnimMove_Ingrain[]; +extern const u8 gBattleAnimMove_Superpower[]; +extern const u8 gBattleAnimMove_MagicCoat[]; +extern const u8 gBattleAnimMove_Recycle[]; +extern const u8 gBattleAnimMove_Revenge[]; +extern const u8 gBattleAnimMove_BrickBreak[]; +extern const u8 gBattleAnimMove_Yawn[]; +extern const u8 gBattleAnimMove_KnockOff[]; +extern const u8 gBattleAnimMove_Endeavor[]; +extern const u8 gBattleAnimMove_Eruption[]; +extern const u8 gBattleAnimMove_SkillSwap[]; +extern const u8 gBattleAnimMove_Imprison[]; +extern const u8 gBattleAnimMove_Refresh[]; +extern const u8 gBattleAnimMove_Grudge[]; +extern const u8 gBattleAnimMove_Snatch[]; +extern const u8 gBattleAnimMove_SecretPower[]; +extern const u8 gBattleAnimMove_Dive[]; +extern const u8 gBattleAnimMove_ArmThrust[]; +extern const u8 gBattleAnimMove_Camouflage[]; +extern const u8 gBattleAnimMove_TailGlow[]; +extern const u8 gBattleAnimMove_LusterPurge[]; +extern const u8 gBattleAnimMove_MistBall[]; +extern const u8 gBattleAnimMove_FeatherDance[]; +extern const u8 gBattleAnimMove_TeeterDance[]; +extern const u8 gBattleAnimMove_BlazeKick[]; +extern const u8 gBattleAnimMove_MudSport[]; +extern const u8 gBattleAnimMove_IceBall[]; +extern const u8 gBattleAnimMove_NeedleArm[]; +extern const u8 gBattleAnimMove_SlackOff[]; +extern const u8 gBattleAnimMove_HyperVoice[]; +extern const u8 gBattleAnimMove_PoisonFang[]; +extern const u8 gBattleAnimMove_CrushClaw[]; +extern const u8 gBattleAnimMove_BlastBurn[]; +extern const u8 gBattleAnimMove_HydroCannon[]; +extern const u8 gBattleAnimMove_MeteorMash[]; +extern const u8 gBattleAnimMove_Astonish[]; +extern const u8 gBattleAnimMove_WeatherBall[]; +extern const u8 gBattleAnimMove_Aromatherapy[]; +extern const u8 gBattleAnimMove_FakeTears[]; +extern const u8 gBattleAnimMove_AirCutter[]; +extern const u8 gBattleAnimMove_Overheat[]; +extern const u8 gBattleAnimMove_OdorSleuth[]; +extern const u8 gBattleAnimMove_RockTomb[]; +extern const u8 gBattleAnimMove_SilverWind[]; +extern const u8 gBattleAnimMove_MetalSound[]; +extern const u8 gBattleAnimMove_GrassWhistle[]; +extern const u8 gBattleAnimMove_Tickle[]; +extern const u8 gBattleAnimMove_CosmicPower[]; +extern const u8 gBattleAnimMove_WaterSpout[]; +extern const u8 gBattleAnimMove_SignalBeam[]; +extern const u8 gBattleAnimMove_ShadowPunch[]; +extern const u8 gBattleAnimMove_Extrasensory[]; +extern const u8 gBattleAnimMove_SkyUppercut[]; +extern const u8 gBattleAnimMove_SandTomb[]; +extern const u8 gBattleAnimMove_SheerCold[]; +extern const u8 gBattleAnimMove_MuddyWater[]; +extern const u8 gBattleAnimMove_BulletSeed[]; +extern const u8 gBattleAnimMove_AerialAce[]; +extern const u8 gBattleAnimMove_IcicleSpear[]; +extern const u8 gBattleAnimMove_IronDefense[]; +extern const u8 gBattleAnimMove_Block[]; +extern const u8 gBattleAnimMove_Howl[]; +extern const u8 gBattleAnimMove_DragonClaw[]; +extern const u8 gBattleAnimMove_FrenzyPlant[]; +extern const u8 gBattleAnimMove_BulkUp[]; +extern const u8 gBattleAnimMove_Bounce[]; +extern const u8 gBattleAnimMove_MudShot[]; +extern const u8 gBattleAnimMove_PoisonTail[]; +extern const u8 gBattleAnimMove_Covet[]; +extern const u8 gBattleAnimMove_VoltTackle[]; +extern const u8 gBattleAnimMove_MagicalLeaf[]; +extern const u8 gBattleAnimMove_WaterSport[]; +extern const u8 gBattleAnimMove_CalmMind[]; +extern const u8 gBattleAnimMove_LeafBlade[]; +extern const u8 gBattleAnimMove_DragonDance[]; +extern const u8 gBattleAnimMove_RockBlast[]; +extern const u8 gBattleAnimMove_ShockWave[]; +extern const u8 gBattleAnimMove_WaterPulse[]; +extern const u8 gBattleAnimMove_DoomDesire[]; +extern const u8 gBattleAnimMove_PsychoBoost[]; +extern const u8 gBattleAnimMove_Roost[]; +extern const u8 gBattleAnimMove_Gravity[]; +extern const u8 gBattleAnimMove_MiracleEye[]; +extern const u8 gBattleAnimMove_WakeUpSlap[]; +extern const u8 gBattleAnimMove_HammerArm[]; +extern const u8 gBattleAnimMove_GyroBall[]; +extern const u8 gBattleAnimMove_HealingWish[]; +extern const u8 gBattleAnimMove_Brine[]; +extern const u8 gBattleAnimMove_NaturalGift[]; +extern const u8 gBattleAnimMove_Feint[]; +extern const u8 gBattleAnimMove_Pluck[]; +extern const u8 gBattleAnimMove_Tailwind[]; +extern const u8 gBattleAnimMove_Acupressure[]; +extern const u8 gBattleAnimMove_MetalBurst[]; +extern const u8 gBattleAnimMove_UTurn[]; +extern const u8 gBattleAnimMove_CloseCombat[]; +extern const u8 gBattleAnimMove_Payback[]; +extern const u8 gBattleAnimMove_Assurance[]; +extern const u8 gBattleAnimMove_Embargo[]; +extern const u8 gBattleAnimMove_Fling[]; +extern const u8 gBattleAnimMove_PsychoShift[]; +extern const u8 gBattleAnimMove_TrumpCard[]; +extern const u8 gBattleAnimMove_HealBlock[]; +extern const u8 gBattleAnimMove_WringOut[]; +extern const u8 gBattleAnimMove_PowerTrick[]; +extern const u8 gBattleAnimMove_GastroAcid[]; +extern const u8 gBattleAnimMove_LuckyChant[]; +extern const u8 gBattleAnimMove_MeFirst[]; +extern const u8 gBattleAnimMove_Copycat[]; +extern const u8 gBattleAnimMove_PowerSwap[]; +extern const u8 gBattleAnimMove_GuardSwap[]; +extern const u8 gBattleAnimMove_Punishment[]; +extern const u8 gBattleAnimMove_LastResort[]; +extern const u8 gBattleAnimMove_WorrySeed[]; +extern const u8 gBattleAnimMove_SuckerPunch[]; +extern const u8 gBattleAnimMove_ToxicSpikes[]; +extern const u8 gBattleAnimMove_HeartSwap[]; +extern const u8 gBattleAnimMove_AquaRing[]; +extern const u8 gBattleAnimMove_MagnetRise[]; +extern const u8 gBattleAnimMove_FlareBlitz[]; +extern const u8 gBattleAnimMove_ForcePalm[]; +extern const u8 gBattleAnimMove_AuraSphere[]; +extern const u8 gBattleAnimMove_RockPolish[]; +extern const u8 gBattleAnimMove_PoisonJab[]; +extern const u8 gBattleAnimMove_DarkPulse[]; +extern const u8 gBattleAnimMove_NightSlash[]; +extern const u8 gBattleAnimMove_AquaTail[]; +extern const u8 gBattleAnimMove_SeedBomb[]; +extern const u8 gBattleAnimMove_AirSlash[]; +extern const u8 gBattleAnimMove_XScissor[]; +extern const u8 gBattleAnimMove_BugBuzz[]; +extern const u8 gBattleAnimMove_DragonPulse[]; +extern const u8 gBattleAnimMove_DragonRush[]; +extern const u8 gBattleAnimMove_PowerGem[]; +extern const u8 gBattleAnimMove_DrainPunch[]; +extern const u8 gBattleAnimMove_VacuumWave[]; +extern const u8 gBattleAnimMove_FocusBlast[]; +extern const u8 gBattleAnimMove_EnergyBall[]; +extern const u8 gBattleAnimMove_BraveBird[]; +extern const u8 gBattleAnimMove_EarthPower[]; +extern const u8 gBattleAnimMove_Switcheroo[]; +extern const u8 gBattleAnimMove_GigaImpact[]; +extern const u8 gBattleAnimMove_NastyPlot[]; +extern const u8 gBattleAnimMove_BulletPunch[]; +extern const u8 gBattleAnimMove_Avalanche[]; +extern const u8 gBattleAnimMove_IceShard[]; +extern const u8 gBattleAnimMove_ShadowClaw[]; +extern const u8 gBattleAnimMove_ThunderFang[]; +extern const u8 gBattleAnimMove_IceFang[]; +extern const u8 gBattleAnimMove_FireFang[]; +extern const u8 gBattleAnimMove_ShadowSneak[]; +extern const u8 gBattleAnimMove_MudBomb[]; +extern const u8 gBattleAnimMove_PsychoCut[]; +extern const u8 gBattleAnimMove_ZenHeadbutt[]; +extern const u8 gBattleAnimMove_MirrorShot[]; +extern const u8 gBattleAnimMove_FlashCannon[]; +extern const u8 gBattleAnimMove_RockClimb[]; +extern const u8 gBattleAnimMove_Defog[]; +extern const u8 gBattleAnimMove_TrickRoom[]; +extern const u8 gBattleAnimMove_DracoMeteor[]; +extern const u8 gBattleAnimMove_Discharge[]; +extern const u8 gBattleAnimMove_LavaPlume[]; +extern const u8 gBattleAnimMove_LeafStorm[]; +extern const u8 gBattleAnimMove_PowerWhip[]; +extern const u8 gBattleAnimMove_RockWrecker[]; +extern const u8 gBattleAnimMove_CrossPoison[]; +extern const u8 gBattleAnimMove_GunkShot[]; +extern const u8 gBattleAnimMove_IronHead[]; +extern const u8 gBattleAnimMove_MagnetBomb[]; +extern const u8 gBattleAnimMove_StoneEdge[]; +extern const u8 gBattleAnimMove_Captivate[]; +extern const u8 gBattleAnimMove_StealthRock[]; +extern const u8 gBattleAnimMove_GrassKnot[]; +extern const u8 gBattleAnimMove_Chatter[]; +extern const u8 gBattleAnimMove_Judgment[]; +extern const u8 gBattleAnimMove_BugBite[]; +extern const u8 gBattleAnimMove_ChargeBeam[]; +extern const u8 gBattleAnimMove_WoodHammer[]; +extern const u8 gBattleAnimMove_AquaJet[]; +extern const u8 gBattleAnimMove_AttackOrder[]; +extern const u8 gBattleAnimMove_DefendOrder[]; +extern const u8 gBattleAnimMove_HealOrder[]; +extern const u8 gBattleAnimMove_HeadSmash[]; +extern const u8 gBattleAnimMove_DoubleHit[]; +extern const u8 gBattleAnimMove_RoarOfTime[]; +extern const u8 gBattleAnimMove_SpacialRend[]; +extern const u8 gBattleAnimMove_LunarDance[]; +extern const u8 gBattleAnimMove_CrushGrip[]; +extern const u8 gBattleAnimMove_MagmaStorm[]; +extern const u8 gBattleAnimMove_DarkVoid[]; +extern const u8 gBattleAnimMove_SeedFlare[]; +extern const u8 gBattleAnimMove_OminousWind[]; +extern const u8 gBattleAnimMove_ShadowForce[]; +extern const u8 gBattleAnimMove_HoneClaws[]; +extern const u8 gBattleAnimMove_WideGuard[]; +extern const u8 gBattleAnimMove_GuardSplit[]; +extern const u8 gBattleAnimMove_PowerSplit[]; +extern const u8 gBattleAnimMove_WonderRoom[]; +extern const u8 gBattleAnimMove_Psyshock[]; +extern const u8 gBattleAnimMove_Venoshock[]; +extern const u8 gBattleAnimMove_Autotomize[]; +extern const u8 gBattleAnimMove_RagePowder[]; +extern const u8 gBattleAnimMove_Telekinesis[]; +extern const u8 gBattleAnimMove_MagicRoom[]; +extern const u8 gBattleAnimMove_SmackDown[]; +extern const u8 gBattleAnimMove_StormThrow[]; +extern const u8 gBattleAnimMove_FlameBurst[]; +extern const u8 gBattleAnimMove_SludgeWave[]; +extern const u8 gBattleAnimMove_QuiverDance[]; +extern const u8 gBattleAnimMove_HeavySlam[]; +extern const u8 gBattleAnimMove_Synchronoise[]; +extern const u8 gBattleAnimMove_ElectroBall[]; +extern const u8 gBattleAnimMove_Soak[]; +extern const u8 gBattleAnimMove_FlameCharge[]; +extern const u8 gBattleAnimMove_Coil[]; +extern const u8 gBattleAnimMove_LowSweep[]; +extern const u8 gBattleAnimMove_AcidSpray[]; +extern const u8 gBattleAnimMove_FoulPlay[]; +extern const u8 gBattleAnimMove_SimpleBeam[]; +extern const u8 gBattleAnimMove_Entrainment[]; +extern const u8 gBattleAnimMove_AfterYou[]; +extern const u8 gBattleAnimMove_Round[]; +extern const u8 gBattleAnimMove_EchoedVoice[]; +extern const u8 gBattleAnimMove_ChipAway[]; +extern const u8 gBattleAnimMove_ClearSmog[]; +extern const u8 gBattleAnimMove_StoredPower[]; +extern const u8 gBattleAnimMove_QuickGuard[]; +extern const u8 gBattleAnimMove_AllySwitch[]; +extern const u8 gBattleAnimMove_Scald[]; +extern const u8 gBattleAnimMove_ShellSmash[]; +extern const u8 gBattleAnimMove_HealPulse[]; +extern const u8 gBattleAnimMove_Hex[]; +extern const u8 gBattleAnimMove_SkyDrop[]; +extern const u8 gBattleAnimMove_ShiftGear[]; +extern const u8 gBattleAnimMove_CircleThrow[]; +extern const u8 gBattleAnimMove_Incinerate[]; +extern const u8 gBattleAnimMove_Quash[]; +extern const u8 gBattleAnimMove_Acrobatics[]; +extern const u8 gBattleAnimMove_ReflectType[]; +extern const u8 gBattleAnimMove_Retaliate[]; +extern const u8 gBattleAnimMove_FinalGambit[]; +extern const u8 gBattleAnimMove_Bestow[]; +extern const u8 gBattleAnimMove_Inferno[]; +extern const u8 gBattleAnimMove_WaterPledge[]; +extern const u8 gBattleAnimMove_FirePledge[]; +extern const u8 gBattleAnimMove_GrassPledge[]; +extern const u8 gBattleAnimMove_VoltSwitch[]; +extern const u8 gBattleAnimMove_StruggleBug[]; +extern const u8 gBattleAnimMove_Bulldoze[]; +extern const u8 gBattleAnimMove_FrostBreath[]; +extern const u8 gBattleAnimMove_DragonTail[]; +extern const u8 gBattleAnimMove_WorkUp[]; +extern const u8 gBattleAnimMove_Electroweb[]; +extern const u8 gBattleAnimMove_WildCharge[]; +extern const u8 gBattleAnimMove_DrillRun[]; +extern const u8 gBattleAnimMove_DualChop[]; +extern const u8 gBattleAnimMove_HeartStamp[]; +extern const u8 gBattleAnimMove_HornLeech[]; +extern const u8 gBattleAnimMove_SacredSword[]; +extern const u8 gBattleAnimMove_RazorShell[]; +extern const u8 gBattleAnimMove_HeatCrash[]; +extern const u8 gBattleAnimMove_LeafTornado[]; +extern const u8 gBattleAnimMove_Steamroller[]; +extern const u8 gBattleAnimMove_CottonGuard[]; +extern const u8 gBattleAnimMove_NightDaze[]; +extern const u8 gBattleAnimMove_Psystrike[]; +extern const u8 gBattleAnimMove_TailSlap[]; +extern const u8 gBattleAnimMove_Hurricane[]; +extern const u8 gBattleAnimMove_HeadCharge[]; +extern const u8 gBattleAnimMove_GearGrind[]; +extern const u8 gBattleAnimMove_SearingShot[]; +extern const u8 gBattleAnimMove_TechnoBlast[]; +extern const u8 gBattleAnimMove_RelicSong[]; +extern const u8 gBattleAnimMove_SecretSword[]; +extern const u8 gBattleAnimMove_Glaciate[]; +extern const u8 gBattleAnimMove_BoltStrike[]; +extern const u8 gBattleAnimMove_BlueFlare[]; +extern const u8 gBattleAnimMove_FieryDance[]; +extern const u8 gBattleAnimMove_FreezeShock[]; +extern const u8 gBattleAnimMove_IceBurn[]; +extern const u8 gBattleAnimMove_Snarl[]; +extern const u8 gBattleAnimMove_IcicleCrash[]; +extern const u8 gBattleAnimMove_VCreate[]; +extern const u8 gBattleAnimMove_FusionFlare[]; +extern const u8 gBattleAnimMove_FusionBolt[]; +extern const u8 gBattleAnimMove_FlyingPress[]; +extern const u8 gBattleAnimMove_MatBlock[]; +extern const u8 gBattleAnimMove_Belch[]; +extern const u8 gBattleAnimMove_Rototiller[]; +extern const u8 gBattleAnimMove_StickyWeb[]; +extern const u8 gBattleAnimMove_FellStinger[]; +extern const u8 gBattleAnimMove_PhantomForce[]; +extern const u8 gBattleAnimMove_TrickOrTreat[]; +extern const u8 gBattleAnimMove_NobleRoar[]; +extern const u8 gBattleAnimMove_IonDeluge[]; +extern const u8 gBattleAnimMove_ParabolicCharge[]; +extern const u8 gBattleAnimMove_ForestsCurse[]; +extern const u8 gBattleAnimMove_PetalBlizzard[]; +extern const u8 gBattleAnimMove_FreezeDry[]; +extern const u8 gBattleAnimMove_DisarmingVoice[]; +extern const u8 gBattleAnimMove_PartingShot[]; +extern const u8 gBattleAnimMove_TopsyTurvy[]; +extern const u8 gBattleAnimMove_DrainingKiss[]; +extern const u8 gBattleAnimMove_CraftyShield[]; +extern const u8 gBattleAnimMove_FlowerShield[]; +extern const u8 gBattleAnimMove_GrassyTerrain[]; +extern const u8 gBattleAnimMove_MistyTerrain[]; +extern const u8 gBattleAnimMove_Electrify[]; +extern const u8 gBattleAnimMove_PlayRough[]; +extern const u8 gBattleAnimMove_FairyWind[]; +extern const u8 gBattleAnimMove_Moonblast[]; +extern const u8 gBattleAnimMove_Boomburst[]; +extern const u8 gBattleAnimMove_FairyLock[]; +extern const u8 gBattleAnimMove_KingsShield[]; +extern const u8 gBattleAnimMove_PlayNice[]; +extern const u8 gBattleAnimMove_Confide[]; +extern const u8 gBattleAnimMove_DiamondStorm[]; +extern const u8 gBattleAnimMove_SteamEruption[]; +extern const u8 gBattleAnimMove_HyperspaceHole[]; +extern const u8 gBattleAnimMove_WaterShuriken[]; +extern const u8 gBattleAnimMove_MysticalFire[]; +extern const u8 gBattleAnimMove_SpikyShield[]; +extern const u8 gBattleAnimMove_AromaticMist[]; +extern const u8 gBattleAnimMove_EerieImpulse[]; +extern const u8 gBattleAnimMove_VenomDrench[]; +extern const u8 gBattleAnimMove_Powder[]; +extern const u8 gBattleAnimMove_Geomancy[]; +extern const u8 gBattleAnimMove_MagneticFlux[]; +extern const u8 gBattleAnimMove_HappyHour[]; +extern const u8 gBattleAnimMove_ElectricTerrain[]; +extern const u8 gBattleAnimMove_DazzlingGleam[]; +extern const u8 gBattleAnimMove_Celebrate[]; +extern const u8 gBattleAnimMove_HoldHands[]; +extern const u8 gBattleAnimMove_BabyDollEyes[]; +extern const u8 gBattleAnimMove_Nuzzle[]; +extern const u8 gBattleAnimMove_HoldBack[]; +extern const u8 gBattleAnimMove_Infestation[]; +extern const u8 gBattleAnimMove_PowerUpPunch[]; +extern const u8 gBattleAnimMove_OblivionWing[]; +extern const u8 gBattleAnimMove_ThousandArrows[]; +extern const u8 gBattleAnimMove_ThousandWaves[]; +extern const u8 gBattleAnimMove_LandsWrath[]; +extern const u8 gBattleAnimMove_LightOfRuin[]; +extern const u8 gBattleAnimMove_OriginPulse[]; +extern const u8 gBattleAnimMove_PrecipiceBlades[]; +extern const u8 gBattleAnimMove_DragonAscent[]; +extern const u8 gBattleAnimMove_HyperspaceFury[]; +extern const u8 gBattleAnimMove_ShoreUp[]; +extern const u8 gBattleAnimMove_FirstImpression[]; +extern const u8 gBattleAnimMove_BanefulBunker[]; +extern const u8 gBattleAnimMove_SpiritShackle[]; +extern const u8 gBattleAnimMove_DarkestLariat[]; +extern const u8 gBattleAnimMove_SparklingAria[]; +extern const u8 gBattleAnimMove_IceHammer[]; +extern const u8 gBattleAnimMove_FloralHealing[]; +extern const u8 gBattleAnimMove_HighHorsepower[]; +extern const u8 gBattleAnimMove_StrengthSap[]; +extern const u8 gBattleAnimMove_SolarBlade[]; +extern const u8 gBattleAnimMove_Leafage[]; +extern const u8 gBattleAnimMove_Spotlight[]; +extern const u8 gBattleAnimMove_ToxicThread[]; +extern const u8 gBattleAnimMove_LaserFocus[]; +extern const u8 gBattleAnimMove_GearUp[]; +extern const u8 gBattleAnimMove_ThroatChop[]; +extern const u8 gBattleAnimMove_PollenPuff[]; +extern const u8 gBattleAnimMove_AnchorShot[]; +extern const u8 gBattleAnimMove_PsychicTerrain[]; +extern const u8 gBattleAnimMove_Lunge[]; +extern const u8 gBattleAnimMove_FireLash[]; +extern const u8 gBattleAnimMove_PowerTrip[]; +extern const u8 gBattleAnimMove_BurnUp[]; +extern const u8 gBattleAnimMove_SpeedSwap[]; +extern const u8 gBattleAnimMove_SmartStrike[]; +extern const u8 gBattleAnimMove_Purify[]; +extern const u8 gBattleAnimMove_RevelationDance[]; +extern const u8 gBattleAnimMove_CoreEnforcer[]; +extern const u8 gBattleAnimMove_TropKick[]; +extern const u8 gBattleAnimMove_Instruct[]; +extern const u8 gBattleAnimMove_BeakBlast[]; +extern const u8 gBattleAnimMove_ClangingScales[]; +extern const u8 gBattleAnimMove_DragonHammer[]; +extern const u8 gBattleAnimMove_BrutalSwing[]; +extern const u8 gBattleAnimMove_AuroraVeil[]; +extern const u8 gBattleAnimMove_ShellTrap[]; +extern const u8 gBattleAnimMove_FleurCannon[]; +extern const u8 gBattleAnimMove_PsychicFangs[]; +extern const u8 gBattleAnimMove_StompingTantrum[]; +extern const u8 gBattleAnimMove_ShadowBone[]; +extern const u8 gBattleAnimMove_Accelerock[]; +extern const u8 gBattleAnimMove_Liquidation[]; +extern const u8 gBattleAnimMove_PrismaticLaser[]; +extern const u8 gBattleAnimMove_SpectralThief[]; +extern const u8 gBattleAnimMove_SunsteelStrike[]; +extern const u8 gBattleAnimMove_MoongeistBeam[]; +extern const u8 gBattleAnimMove_TearfulLook[]; +extern const u8 gBattleAnimMove_ZingZap[]; +extern const u8 gBattleAnimMove_NaturesMadness[]; +extern const u8 gBattleAnimMove_MultiAttack[]; +extern const u8 gBattleAnimMove_MindBlown[]; +extern const u8 gBattleAnimMove_PlasmaFists[]; +extern const u8 gBattleAnimMove_PhotonGeyser[]; +extern const u8 gBattleAnimMove_ZippyZap[]; +extern const u8 gBattleAnimMove_SplishySplash[]; +extern const u8 gBattleAnimMove_FloatyFall[]; +extern const u8 gBattleAnimMove_PikaPapow[]; +extern const u8 gBattleAnimMove_BouncyBubble[]; +extern const u8 gBattleAnimMove_BuzzyBuzz[]; +extern const u8 gBattleAnimMove_SizzlySlide[]; +extern const u8 gBattleAnimMove_GlitzyGlow[]; +extern const u8 gBattleAnimMove_BaddyBad[]; +extern const u8 gBattleAnimMove_SappySeed[]; +extern const u8 gBattleAnimMove_FreezyFrost[]; +extern const u8 gBattleAnimMove_SparklySwirl[]; +extern const u8 gBattleAnimMove_VeeveeVolley[]; +extern const u8 gBattleAnimMove_DoubleIronBash[]; +extern const u8 gBattleAnimMove_DynamaxCannon[]; +extern const u8 gBattleAnimMove_SnipeShot[]; +extern const u8 gBattleAnimMove_JawLock[]; +extern const u8 gBattleAnimMove_StuffCheeks[]; +extern const u8 gBattleAnimMove_NoRetreat[]; +extern const u8 gBattleAnimMove_TarShot[]; +extern const u8 gBattleAnimMove_MagicPowder[]; +extern const u8 gBattleAnimMove_DragonDarts[]; +extern const u8 gBattleAnimMove_Teatime[]; +extern const u8 gBattleAnimMove_Octolock[]; +extern const u8 gBattleAnimMove_BoltBeak[]; +extern const u8 gBattleAnimMove_FishiousRend[]; +extern const u8 gBattleAnimMove_CourtChange[]; +extern const u8 gBattleAnimMove_ClangorousSoul[]; +extern const u8 gBattleAnimMove_BodyPress[]; +extern const u8 gBattleAnimMove_Decorate[]; +extern const u8 gBattleAnimMove_DrumBeating[]; +extern const u8 gBattleAnimMove_SnapTrap[]; +extern const u8 gBattleAnimMove_PyroBall[]; +extern const u8 gBattleAnimMove_BehemothBlade[]; +extern const u8 gBattleAnimMove_BehemothBash[]; +extern const u8 gBattleAnimMove_AuraWheel[]; +extern const u8 gBattleAnimMove_BreakingSwipe[]; +extern const u8 gBattleAnimMove_BranchPoke[]; +extern const u8 gBattleAnimMove_Overdrive[]; +extern const u8 gBattleAnimMove_AppleAcid[]; +extern const u8 gBattleAnimMove_GravApple[]; +extern const u8 gBattleAnimMove_SpiritBreak[]; +extern const u8 gBattleAnimMove_StrangeSteam[]; +extern const u8 gBattleAnimMove_LifeDew[]; +extern const u8 gBattleAnimMove_Obstruct[]; +extern const u8 gBattleAnimMove_FalseSurrender[]; +extern const u8 gBattleAnimMove_MeteorAssault[]; +extern const u8 gBattleAnimMove_Eternabeam[]; +extern const u8 gBattleAnimMove_SteelBeam[]; +extern const u8 gBattleAnimMove_ExpandingForce[]; +extern const u8 gBattleAnimMove_SteelRoller[]; +extern const u8 gBattleAnimMove_ScaleShot[]; +extern const u8 gBattleAnimMove_MeteorBeam[]; +extern const u8 gBattleAnimMove_ShellSideArm[]; +extern const u8 gBattleAnimMove_MistyExplosion[]; +extern const u8 gBattleAnimMove_GrassyGlide[]; +extern const u8 gBattleAnimMove_RisingVoltage[]; +extern const u8 gBattleAnimMove_TerrainPulse[]; +extern const u8 gBattleAnimMove_SkitterSmack[]; +extern const u8 gBattleAnimMove_BurningJealousy[]; +extern const u8 gBattleAnimMove_LashOut[]; +extern const u8 gBattleAnimMove_Poltergeist[]; +extern const u8 gBattleAnimMove_CorrosiveGas[]; +extern const u8 gBattleAnimMove_Coaching[]; +extern const u8 gBattleAnimMove_FlipTurn[]; +extern const u8 gBattleAnimMove_TripleAxel[]; +extern const u8 gBattleAnimMove_DualWingbeat[]; +extern const u8 gBattleAnimMove_ScorchingSands[]; +extern const u8 gBattleAnimMove_JungleHealing[]; +extern const u8 gBattleAnimMove_WickedBlow[]; +extern const u8 gBattleAnimMove_SurgingStrikes[]; +extern const u8 gBattleAnimMove_ThunderCage[]; +extern const u8 gBattleAnimMove_DragonEnergy[]; +extern const u8 gBattleAnimMove_FreezingGlare[]; +extern const u8 gBattleAnimMove_FieryWrath[]; +extern const u8 gBattleAnimMove_ThunderousKick[]; +extern const u8 gBattleAnimMove_GlacialLance[]; +extern const u8 gBattleAnimMove_AstralBarrage[]; +extern const u8 gBattleAnimMove_EerieSpell[]; +extern const u8 gBattleAnimMove_DireClaw[]; +extern const u8 gBattleAnimMove_PsyshieldBash[]; +extern const u8 gBattleAnimMove_PowerShift[]; +extern const u8 gBattleAnimMove_StoneAxe[]; +extern const u8 gBattleAnimMove_SpringtideStorm[]; +extern const u8 gBattleAnimMove_MysticalPower[]; +extern const u8 gBattleAnimMove_RagingFury[]; +extern const u8 gBattleAnimMove_WaveCrash[]; +extern const u8 gBattleAnimMove_Chloroblast[]; +extern const u8 gBattleAnimMove_MountainGale[]; +extern const u8 gBattleAnimMove_VictoryDance[]; +extern const u8 gBattleAnimMove_HeadlongRush[]; +extern const u8 gBattleAnimMove_BarbBarrage[]; +extern const u8 gBattleAnimMove_EsperWing[]; +extern const u8 gBattleAnimMove_BitterMalice[]; +extern const u8 gBattleAnimMove_Shelter[]; +extern const u8 gBattleAnimMove_TripleArrows[]; +extern const u8 gBattleAnimMove_InfernalParade[]; +extern const u8 gBattleAnimMove_CeaselessEdge[]; +extern const u8 gBattleAnimMove_BleakwindStorm[]; +extern const u8 gBattleAnimMove_WildboltStorm[]; +extern const u8 gBattleAnimMove_SandsearStorm[]; +extern const u8 gBattleAnimMove_LunarBlessing[]; +extern const u8 gBattleAnimMove_TakeHeart[]; +extern const u8 gBattleAnimMove_TeraBlast[]; +extern const u8 gBattleAnimMove_SilkTrap[]; +extern const u8 gBattleAnimMove_AxeKick[]; +extern const u8 gBattleAnimMove_LastRespects[]; +extern const u8 gBattleAnimMove_LuminaCrash[]; +extern const u8 gBattleAnimMove_OrderUp[]; +extern const u8 gBattleAnimMove_JetPunch[]; +extern const u8 gBattleAnimMove_SpicyExtract[]; +extern const u8 gBattleAnimMove_SpinOut[]; +extern const u8 gBattleAnimMove_PopulationBomb[]; +extern const u8 gBattleAnimMove_IceSpinner[]; +extern const u8 gBattleAnimMove_GlaiveRush[]; +extern const u8 gBattleAnimMove_RevivalBlessing[]; +extern const u8 gBattleAnimMove_SaltCure[]; +extern const u8 gBattleAnimMove_TripleDive[]; +extern const u8 gBattleAnimMove_MortalSpin[]; +extern const u8 gBattleAnimMove_Doodle[]; +extern const u8 gBattleAnimMove_FilletAway[]; +extern const u8 gBattleAnimMove_KowtowCleave[]; +extern const u8 gBattleAnimMove_FlowerTrick[]; +extern const u8 gBattleAnimMove_TorchSong[]; +extern const u8 gBattleAnimMove_AquaStep[]; +extern const u8 gBattleAnimMove_RagingBull[]; +extern const u8 gBattleAnimMove_MakeItRain[]; +extern const u8 gBattleAnimMove_Ruination[]; +extern const u8 gBattleAnimMove_CollisionCourse[]; +extern const u8 gBattleAnimMove_ElectroDrift[]; +extern const u8 gBattleAnimMove_ShedTail[]; +extern const u8 gBattleAnimMove_ChillyReception[]; +extern const u8 gBattleAnimMove_TidyUp[]; +extern const u8 gBattleAnimMove_Snowscape[]; +extern const u8 gBattleAnimMove_Pounce[]; +extern const u8 gBattleAnimMove_Trailblaze[]; +extern const u8 gBattleAnimMove_ChillingWater[]; +extern const u8 gBattleAnimMove_HyperDrill[]; +extern const u8 gBattleAnimMove_TwinBeam[]; +extern const u8 gBattleAnimMove_RageFist[]; +extern const u8 gBattleAnimMove_ArmorCannon[]; +extern const u8 gBattleAnimMove_BitterBlade[]; +extern const u8 gBattleAnimMove_DoubleShock[]; +extern const u8 gBattleAnimMove_GigatonHammer[]; +extern const u8 gBattleAnimMove_Comeuppance[]; +extern const u8 gBattleAnimMove_AquaCutter[]; +extern const u8 gBattleAnimMove_BlazingTorque[]; +extern const u8 gBattleAnimMove_WickedTorque[]; +extern const u8 gBattleAnimMove_NoxiousTorque[]; +extern const u8 gBattleAnimMove_CombatTorque[]; +extern const u8 gBattleAnimMove_MagicalTorque[]; +extern const u8 gBattleAnimMove_Psyblade[]; +extern const u8 gBattleAnimMove_HydroSteam[]; +extern const u8 gBattleAnimMove_BloodMoon[]; +extern const u8 gBattleAnimMove_MatchaGotcha[]; +extern const u8 gBattleAnimMove_SyrupBomb[]; +extern const u8 gBattleAnimMove_IvyCudgel[]; +extern const u8 gBattleAnimMove_ElectroShot[]; +extern const u8 gBattleAnimMove_TeraStarstorm[]; +extern const u8 gBattleAnimMove_FickleBeam[]; +extern const u8 gBattleAnimMove_BurningBulwark[]; +extern const u8 gBattleAnimMove_Thunderclap[]; +extern const u8 gBattleAnimMove_MightyCleave[]; +extern const u8 gBattleAnimMove_TachyonCutter[]; +extern const u8 gBattleAnimMove_HardPress[]; +extern const u8 gBattleAnimMove_DragonCheer[]; +extern const u8 gBattleAnimMove_AlluringVoice[]; +extern const u8 gBattleAnimMove_TemperFlare[]; +extern const u8 gBattleAnimMove_SupercellSlam[]; +extern const u8 gBattleAnimMove_PsychicNoise[]; +extern const u8 gBattleAnimMove_UpperHand[]; +extern const u8 gBattleAnimMove_MalignantChain[]; +extern const u8 gBattleAnimMove_BreakneckBlitz[]; +extern const u8 gBattleAnimMove_AllOutPummeling[]; +extern const u8 gBattleAnimMove_SupersonicSkystrike[]; +extern const u8 gBattleAnimMove_AcidDownpour[]; +extern const u8 gBattleAnimMove_TectonicRage[]; +extern const u8 gBattleAnimMove_ContinentalCrush[]; +extern const u8 gBattleAnimMove_SavageSpinOut[]; +extern const u8 gBattleAnimMove_NeverEndingNightmare[]; +extern const u8 gBattleAnimMove_CorkscrewCrash[]; +extern const u8 gBattleAnimMove_InfernoOverdrive[]; +extern const u8 gBattleAnimMove_HydroVortex[]; +extern const u8 gBattleAnimMove_BloomDoom[]; +extern const u8 gBattleAnimMove_GigavoltHavoc[]; +extern const u8 gBattleAnimMove_ShatteredPsyche[]; +extern const u8 gBattleAnimMove_SubzeroSlammer[]; +extern const u8 gBattleAnimMove_DevastatingDrake[]; +extern const u8 gBattleAnimMove_BlackHoleEclipse[]; +extern const u8 gBattleAnimMove_TwinkleTackle[]; +extern const u8 gBattleAnimMove_Catastropika[]; +extern const u8 gBattleAnimMove_10000000VoltThunderbolt[]; +extern const u8 gBattleAnimMove_StokedSparksurfer[]; +extern const u8 gBattleAnimMove_ExtremeEvoboost[]; +extern const u8 gBattleAnimMove_PulverizingPancake[]; +extern const u8 gBattleAnimMove_GenesisSupernova[]; +extern const u8 gBattleAnimMove_SinisterArrowRaid[]; +extern const u8 gBattleAnimMove_MaliciousMoonsault[]; +extern const u8 gBattleAnimMove_OceanicOperetta[]; +extern const u8 gBattleAnimMove_SplinteredStormshards[]; +extern const u8 gBattleAnimMove_LetsSnuggleForever[]; +extern const u8 gBattleAnimMove_ClangorousSoulblaze[]; +extern const u8 gBattleAnimMove_GuardianOfAlola[]; +extern const u8 gBattleAnimMove_SearingSunrazeSmash[]; +extern const u8 gBattleAnimMove_MenacingMoonrazeMaelstrom[]; +extern const u8 gBattleAnimMove_LightThatBurnsTheSky[]; +extern const u8 gBattleAnimMove_SoulStealing7StarStrike[]; +extern const u8 gBattleAnimMove_MaxGuard[]; +extern const u8 gBattleAnimMove_MaxFlare[]; +extern const u8 gBattleAnimMove_MaxFlutterby[]; +extern const u8 gBattleAnimMove_MaxLightning[]; +extern const u8 gBattleAnimMove_MaxStrike[]; +extern const u8 gBattleAnimMove_MaxKnuckle[]; +extern const u8 gBattleAnimMove_MaxPhantasm[]; +extern const u8 gBattleAnimMove_MaxHailstorm[]; +extern const u8 gBattleAnimMove_MaxOoze[]; +extern const u8 gBattleAnimMove_MaxGeyser[]; +extern const u8 gBattleAnimMove_MaxAirstream[]; +extern const u8 gBattleAnimMove_MaxStarfall[]; +extern const u8 gBattleAnimMove_MaxWyrmwind[]; +extern const u8 gBattleAnimMove_MaxMindstorm[]; +extern const u8 gBattleAnimMove_MaxRockfall[]; +extern const u8 gBattleAnimMove_MaxQuake[]; +extern const u8 gBattleAnimMove_MaxDarkness[]; +extern const u8 gBattleAnimMove_MaxOvergrowth[]; +extern const u8 gBattleAnimMove_MaxSteelspike[]; +extern const u8 gBattleAnimMove_GMaxVineLash[]; +extern const u8 gBattleAnimMove_GMaxWildfire[]; +extern const u8 gBattleAnimMove_GMaxCannonade[]; +extern const u8 gBattleAnimMove_GMaxBefuddle[]; +extern const u8 gBattleAnimMove_GMaxVoltCrash[]; +extern const u8 gBattleAnimMove_GMaxGoldRush[]; +extern const u8 gBattleAnimMove_GMaxChiStrike[]; +extern const u8 gBattleAnimMove_GMaxTerror[]; +extern const u8 gBattleAnimMove_GMaxFoamBurst[]; +extern const u8 gBattleAnimMove_GMaxResonance[]; +extern const u8 gBattleAnimMove_GMaxCuddle[]; +extern const u8 gBattleAnimMove_GMaxReplenish[]; +extern const u8 gBattleAnimMove_GMaxMalodor[]; +extern const u8 gBattleAnimMove_GMaxMeltdown[]; +extern const u8 gBattleAnimMove_GMaxDrumSolo[]; +extern const u8 gBattleAnimMove_GMaxFireball[]; +extern const u8 gBattleAnimMove_GMaxHydrosnipe[]; +extern const u8 gBattleAnimMove_GMaxWindRage[]; +extern const u8 gBattleAnimMove_GMaxGravitas[]; +extern const u8 gBattleAnimMove_GMaxStonesurge[]; +extern const u8 gBattleAnimMove_GMaxVolcalith[]; +extern const u8 gBattleAnimMove_GMaxTartness[]; +extern const u8 gBattleAnimMove_GMaxSweetness[]; +extern const u8 gBattleAnimMove_GMaxSandblast[]; +extern const u8 gBattleAnimMove_GMaxStunShock[]; +extern const u8 gBattleAnimMove_GMaxCentiferno[]; +extern const u8 gBattleAnimMove_GMaxSmite[]; +extern const u8 gBattleAnimMove_GMaxSnooze[]; +extern const u8 gBattleAnimMove_GMaxFinale[]; +extern const u8 gBattleAnimMove_GMaxSteelsurge[]; +extern const u8 gBattleAnimMove_GMaxDepletion[]; +extern const u8 gBattleAnimMove_GMaxOneBlow[]; +extern const u8 gBattleAnimMove_GMaxRapidFlow[]; + +// status animations +extern const u8 gBattleAnimStatus_Poison[]; +extern const u8 gBattleAnimStatus_Confusion[]; +extern const u8 gBattleAnimStatus_Burn[]; +extern const u8 gBattleAnimStatus_Infatuation[]; +extern const u8 gBattleAnimStatus_Sleep[]; +extern const u8 gBattleAnimStatus_Paralysis[]; +extern const u8 gBattleAnimStatus_Freeze[]; +extern const u8 gBattleAnimStatus_Curse[]; +extern const u8 gBattleAnimStatus_Nightmare[]; + +// general animations +extern const u8 gBattleAnimGeneral_StatsChange[]; +extern const u8 gBattleAnimGeneral_SubstituteFade[]; +extern const u8 gBattleAnimGeneral_SubstituteAppear[]; +extern const u8 gBattleAnimGeneral_PokeblockThrow[]; +extern const u8 gBattleAnimGeneral_ItemKnockoff[]; +extern const u8 gBattleAnimGeneral_TurnTrap[]; +extern const u8 gBattleAnimGeneral_HeldItemEffect[]; +extern const u8 gBattleAnimGeneral_SmokeballEscape[]; +extern const u8 gBattleAnimGeneral_HangedOn[]; +extern const u8 gBattleAnimGeneral_Rain[]; +extern const u8 gBattleAnimGeneral_Sun[]; +extern const u8 gBattleAnimGeneral_Sandstorm[]; +extern const u8 gBattleAnimGeneral_Hail[]; +extern const u8 gBattleAnimGeneral_LeechSeedDrain[]; +extern const u8 gBattleAnimGeneral_MonHit[]; +extern const u8 gBattleAnimGeneral_ItemSteal[]; +extern const u8 gBattleAnimGeneral_SnatchMove[]; +extern const u8 gBattleAnimGeneral_FutureSightHit[]; +extern const u8 gBattleAnimGeneral_DoomDesireHit[]; +extern const u8 gBattleAnimGeneral_FocusPunchSetUp[]; +extern const u8 gBattleAnimGeneral_IngrainHeal[]; +extern const u8 gBattleAnimGeneral_WishHeal[]; +extern const u8 gBattleAnimGeneral_MegaEvolution[]; +extern const u8 gBattleAnimGeneral_IllusionOff[]; +extern const u8 gBattleAnimGeneral_FormChange[]; +extern const u8 gBattleAnimGeneral_SlideOffScreen[]; +extern const u8 gBattleAnimGeneral_RestoreBg[]; +extern const u8 gBattleAnimGeneral_TotemFlare[]; +extern const u8 gBattleAnimGeneral_GulpMissile[]; +extern const u8 gBattleAnimGeneral_StrongWinds[]; +extern const u8 gBattleAnimGeneral_PrimalReversion[]; +extern const u8 gBattleAnimGeneral_AquaRingHeal[]; +extern const u8 gBattleAnimGeneral_BeakBlastSetUp[]; +extern const u8 gBattleAnimGeneral_ShellTrapSetUp[]; +extern const u8 gBattleAnimGeneral_ZMoveActivate[]; +extern const u8 gBattleAnimGeneral_AffectionHangedOn[]; +extern const u8 gBattleAnimGeneral_Snow[]; +extern const u8 gBattleAnimGeneral_UltraBurst[]; +extern const u8 gBattleAnimGeneral_SaltCureDamage[]; +extern const u8 gBattleAnimGeneral_DynamaxGrowth[]; +extern const u8 gBattleAnimGeneral_SetWeather[]; +extern const u8 gBattleAnimGeneral_SyrupBombSpeedDrop[]; +extern const u8 gBattleAnimGeneral_Rainbow[]; +extern const u8 gBattleAnimGeneral_SeaOfFire[]; +extern const u8 gBattleAnimGeneral_Swamp[]; +extern const u8 gBattleAnimGeneral_TrickRoom[]; +extern const u8 gBattleAnimGeneral_WonderRoom[]; +extern const u8 gBattleAnimGeneral_MagicRoom[]; +extern const u8 gBattleAnimGeneral_Tailwind[]; +extern const u8 gBattleAnimGeneral_Fog[]; +extern const u8 gBattleAnimGeneral_TeraCharge[]; +extern const u8 gBattleAnimGeneral_TeraActivate[]; +extern const u8 gBattleAnimGeneral_SimpleHeal[]; + +// special animations +extern const u8 gBattleAnimSpecial_LevelUp[]; +extern const u8 gBattleAnimSpecial_SwitchOutPlayerMon[]; +extern const u8 gBattleAnimSpecial_SwitchOutOpponentMon[]; +extern const u8 gBattleAnimSpecial_BallThrow[]; +extern const u8 gBattleAnimSpecial_BallThrowWithTrainer[]; +extern const u8 gBattleAnimSpecial_SubstituteToMon[]; +extern const u8 gBattleAnimSpecial_MonToSubstitute[]; +extern const u8 gBattleAnimSpecial_CriticalCaptureBallThrow[]; + #endif // GUARD_BATTLE_ANIM_SCRIPTS_H diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 54573a4868..986a95fb6d 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -528,7 +528,7 @@ #define BG_CHLOROBLAST 80 #define BG_RAINBOW 81 -// table ids for general animations (gBattleAnims_General) +// table ids for general animations (sBattleAnims_General) #define B_ANIM_STATS_CHANGE 0 #define B_ANIM_SUBSTITUTE_FADE 1 #define B_ANIM_SUBSTITUTE_APPEAR 2 @@ -583,7 +583,9 @@ #define B_ANIM_TERA_ACTIVATE 51 #define B_ANIM_SIMPLE_HEAL 52 -// special animations table (gBattleAnims_Special) +#define NUM_B_ANIMS_GENERAL 53 + +// special animations table (sBattleAnims_Special) #define B_ANIM_LVL_UP 0 #define B_ANIM_SWITCH_OUT_PLAYER_MON 1 #define B_ANIM_SWITCH_OUT_OPPONENT_MON 2 @@ -593,7 +595,9 @@ #define B_ANIM_MON_TO_SUBSTITUTE 6 #define B_ANIM_CRITICAL_CAPTURE_THROW 7 -// status animation table (gBattleAnims_StatusConditions) +#define NUM_B_ANIMS_SPECIAL 8 + +// status animation table (sBattleAnims_StatusConditions) #define B_ANIM_STATUS_PSN 0 #define B_ANIM_STATUS_CONFUSION 1 #define B_ANIM_STATUS_BRN 2 @@ -603,7 +607,8 @@ #define B_ANIM_STATUS_FRZ 6 #define B_ANIM_STATUS_CURSED 7 #define B_ANIM_STATUS_NIGHTMARE 8 -#define B_ANIM_STATUS_WRAPPED 9 // does not actually exist + +#define NUM_B_ANIMS_STATUS 9 // Tasks with return values often assign them to gBattleAnimArgs[7]. #define ARG_RET_ID 7 diff --git a/src/battle_anim.c b/src/battle_anim.c index 9f6648220e..b036f83cbf 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "battle_anim_scripts.h" #include "battle_controllers.h" #include "battle_interface.h" #include "battle_util.h" @@ -29,11 +30,6 @@ #define ANIM_SPRITE_INDEX_COUNT 8 -extern const u16 gMovesWithQuietBGM[]; -extern const u8 *const gBattleAnims_General[]; -extern const u8 *const gBattleAnims_Special[]; -extern const u8 *const gBattleAnims_StatusConditions[]; - static void Cmd_loadspritegfx(void); static void Cmd_unloadspritegfx(void); static void Cmd_createsprite(void); @@ -182,6 +178,93 @@ static void (* const sScriptCmdTable[])(void) = Cmd_createdragondartsprite, // 0x34 }; +static const u16 sMovesWithQuietBGM[] = +{ + MOVE_SING, MOVE_PERISH_SONG, MOVE_GRASS_WHISTLE +}; + +static const u8* const sBattleAnims_StatusConditions[NUM_B_ANIMS_STATUS] = +{ + [B_ANIM_STATUS_PSN] = gBattleAnimStatus_Poison, + [B_ANIM_STATUS_CONFUSION] = gBattleAnimStatus_Confusion, + [B_ANIM_STATUS_BRN] = gBattleAnimStatus_Burn, + [B_ANIM_STATUS_INFATUATION] = gBattleAnimStatus_Infatuation, + [B_ANIM_STATUS_SLP] = gBattleAnimStatus_Sleep, + [B_ANIM_STATUS_PRZ] = gBattleAnimStatus_Paralysis, + [B_ANIM_STATUS_FRZ] = gBattleAnimStatus_Freeze, + [B_ANIM_STATUS_CURSED] = gBattleAnimStatus_Curse, + [B_ANIM_STATUS_NIGHTMARE] = gBattleAnimStatus_Nightmare, +}; + +static const u8* const sBattleAnims_General[NUM_B_ANIMS_GENERAL] = +{ + [B_ANIM_STATS_CHANGE] = gBattleAnimGeneral_StatsChange, + [B_ANIM_SUBSTITUTE_FADE] = gBattleAnimGeneral_SubstituteFade, + [B_ANIM_SUBSTITUTE_APPEAR] = gBattleAnimGeneral_SubstituteAppear, + [B_ANIM_POKEBLOCK_THROW] = gBattleAnimGeneral_PokeblockThrow, + [B_ANIM_ITEM_KNOCKOFF] = gBattleAnimGeneral_ItemKnockoff, + [B_ANIM_TURN_TRAP] = gBattleAnimGeneral_TurnTrap, + [B_ANIM_HELD_ITEM_EFFECT] = gBattleAnimGeneral_HeldItemEffect, + [B_ANIM_SMOKEBALL_ESCAPE] = gBattleAnimGeneral_SmokeballEscape, + [B_ANIM_HANGED_ON] = gBattleAnimGeneral_HangedOn, + [B_ANIM_RAIN_CONTINUES] = gBattleAnimGeneral_Rain, + [B_ANIM_SUN_CONTINUES] = gBattleAnimGeneral_Sun, + [B_ANIM_SANDSTORM_CONTINUES] = gBattleAnimGeneral_Sandstorm, + [B_ANIM_HAIL_CONTINUES] = gBattleAnimGeneral_Hail, + [B_ANIM_LEECH_SEED_DRAIN] = gBattleAnimGeneral_LeechSeedDrain, + [B_ANIM_MON_HIT] = gBattleAnimGeneral_MonHit, + [B_ANIM_ITEM_STEAL] = gBattleAnimGeneral_ItemSteal, + [B_ANIM_SNATCH_MOVE] = gBattleAnimGeneral_SnatchMove, + [B_ANIM_FUTURE_SIGHT_HIT] = gBattleAnimGeneral_FutureSightHit, + [B_ANIM_DOOM_DESIRE_HIT] = gBattleAnimGeneral_DoomDesireHit, + [B_ANIM_FOCUS_PUNCH_SETUP] = gBattleAnimGeneral_FocusPunchSetUp, + [B_ANIM_INGRAIN_HEAL] = gBattleAnimGeneral_IngrainHeal, + [B_ANIM_WISH_HEAL] = gBattleAnimGeneral_WishHeal, + [B_ANIM_MEGA_EVOLUTION] = gBattleAnimGeneral_MegaEvolution, + [B_ANIM_ILLUSION_OFF] = gBattleAnimGeneral_IllusionOff, + [B_ANIM_FORM_CHANGE] = gBattleAnimGeneral_FormChange, + [B_ANIM_SLIDE_OFFSCREEN] = gBattleAnimGeneral_SlideOffScreen, + [B_ANIM_RESTORE_BG] = gBattleAnimGeneral_RestoreBg, + [B_ANIM_TOTEM_FLARE] = gBattleAnimGeneral_TotemFlare, + [B_ANIM_GULP_MISSILE] = gBattleAnimGeneral_GulpMissile, + [B_ANIM_STRONG_WINDS] = gBattleAnimGeneral_StrongWinds, + [B_ANIM_PRIMAL_REVERSION] = gBattleAnimGeneral_PrimalReversion, + [B_ANIM_AQUA_RING_HEAL] = gBattleAnimGeneral_AquaRingHeal, + [B_ANIM_BEAK_BLAST_SETUP] = gBattleAnimGeneral_BeakBlastSetUp, + [B_ANIM_SHELL_TRAP_SETUP] = gBattleAnimGeneral_ShellTrapSetUp, + [B_ANIM_ZMOVE_ACTIVATE] = gBattleAnimGeneral_ZMoveActivate, + [B_ANIM_AFFECTION_HANGED_ON] = gBattleAnimGeneral_AffectionHangedOn, + [B_ANIM_SNOW_CONTINUES] = gBattleAnimGeneral_Snow, + [B_ANIM_ULTRA_BURST] = gBattleAnimGeneral_UltraBurst, + [B_ANIM_SALT_CURE_DAMAGE] = gBattleAnimGeneral_SaltCureDamage, + [B_ANIM_DYNAMAX_GROWTH] = gBattleAnimGeneral_DynamaxGrowth, + [B_ANIM_MAX_SET_WEATHER] = gBattleAnimGeneral_SetWeather, + [B_ANIM_SYRUP_BOMB_SPEED_DROP] = gBattleAnimGeneral_SyrupBombSpeedDrop, + [B_ANIM_RAINBOW] = gBattleAnimGeneral_Rainbow, + [B_ANIM_SEA_OF_FIRE] = gBattleAnimGeneral_SeaOfFire, + [B_ANIM_SWAMP] = gBattleAnimGeneral_Swamp, + [B_ANIM_TRICK_ROOM] = gBattleAnimGeneral_TrickRoom, + [B_ANIM_WONDER_ROOM] = gBattleAnimGeneral_WonderRoom, + [B_ANIM_MAGIC_ROOM] = gBattleAnimGeneral_MagicRoom, + [B_ANIM_TAILWIND] = gBattleAnimGeneral_Tailwind, + [B_ANIM_FOG_CONTINUES] = gBattleAnimGeneral_Fog, + [B_ANIM_TERA_CHARGE] = gBattleAnimGeneral_TeraCharge, + [B_ANIM_TERA_ACTIVATE] = gBattleAnimGeneral_TeraActivate, + [B_ANIM_SIMPLE_HEAL] = gBattleAnimGeneral_SimpleHeal, +}; + +static const u8* const sBattleAnims_Special[NUM_B_ANIMS_SPECIAL] = +{ + [B_ANIM_LVL_UP] = gBattleAnimSpecial_LevelUp, + [B_ANIM_SWITCH_OUT_PLAYER_MON] = gBattleAnimSpecial_SwitchOutPlayerMon, + [B_ANIM_SWITCH_OUT_OPPONENT_MON] = gBattleAnimSpecial_SwitchOutOpponentMon, + [B_ANIM_BALL_THROW] = gBattleAnimSpecial_BallThrow, + [B_ANIM_BALL_THROW_WITH_TRAINER] = gBattleAnimSpecial_BallThrowWithTrainer, + [B_ANIM_SUBSTITUTE_TO_MON] = gBattleAnimSpecial_SubstituteToMon, + [B_ANIM_MON_TO_SUBSTITUTE] = gBattleAnimSpecial_MonToSubstitute, + [B_ANIM_CRITICAL_CAPTURE_THROW] = gBattleAnimSpecial_CriticalCaptureBallThrow, +}; + void ClearBattleAnimationVars(void) { s32 i; @@ -314,16 +397,16 @@ void LaunchBattleAnimation(u32 animType, u32 animId) { case ANIM_TYPE_GENERAL: default: - sBattleAnimScriptPtr = gBattleAnims_General[animId]; + sBattleAnimScriptPtr = sBattleAnims_General[animId]; break; case ANIM_TYPE_MOVE: sBattleAnimScriptPtr = GetMoveAnimationScript(animId); break; case ANIM_TYPE_STATUS: - sBattleAnimScriptPtr = gBattleAnims_StatusConditions[animId]; + sBattleAnimScriptPtr = sBattleAnims_StatusConditions[animId]; break; case ANIM_TYPE_SPECIAL: - sBattleAnimScriptPtr = gBattleAnims_Special[animId]; + sBattleAnimScriptPtr = sBattleAnims_Special[animId]; break; } gAnimScriptActive = TRUE; @@ -335,9 +418,9 @@ void LaunchBattleAnimation(u32 animType, u32 animId) if (animType == ANIM_TYPE_MOVE) { - for (i = 0; gMovesWithQuietBGM[i] != 0xFFFF; i++) + for (i = 0; i < ARRAY_COUNT(sMovesWithQuietBGM); i++) { - if (animId == gMovesWithQuietBGM[i]) + if (animId == sMovesWithQuietBGM[i]) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 128); break; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 22736b7c2b..aa16003694 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -436,8 +436,6 @@ void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isStatus2, u32 statu LaunchStatusAnimation(battler, B_ANIM_STATUS_CURSED); else if (status & STATUS2_NIGHTMARE) LaunchStatusAnimation(battler, B_ANIM_STATUS_NIGHTMARE); - else if (status & STATUS2_WRAPPED) - LaunchStatusAnimation(battler, B_ANIM_STATUS_WRAPPED); // this animation doesn't actually exist else // no animation gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive = 0; } diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 0213161f0d..6dac60de27 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -128,7 +128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = TRUE, .sketchBanned = TRUE, .assistBanned = TRUE, - .battleAnimScript = Move_NONE, + .battleAnimScript = gBattleAnimMove_None, }, [MOVE_POUND] = @@ -151,7 +151,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_POUND, .contestComboMoves = {0}, - .battleAnimScript = Move_POUND, + .battleAnimScript = gBattleAnimMove_Pound, }, [MOVE_KARATE_CHOP] = @@ -174,7 +174,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_KARATE_CHOP, + .battleAnimScript = gBattleAnimMove_KarateChop, }, [MOVE_DOUBLE_SLAP] = @@ -196,7 +196,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, - .battleAnimScript = Move_DOUBLE_SLAP, + .battleAnimScript = gBattleAnimMove_DoubleSlap, }, [MOVE_COMET_PUNCH] = @@ -219,7 +219,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COMET_PUNCH, + .battleAnimScript = gBattleAnimMove_CometPunch, }, [MOVE_MEGA_PUNCH] = @@ -242,7 +242,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_MEGA_PUNCH, + .battleAnimScript = gBattleAnimMove_MegaPunch, }, [MOVE_PAY_DAY] = @@ -266,7 +266,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PAY_DAY, + .battleAnimScript = gBattleAnimMove_PayDay, }, [MOVE_FIRE_PUNCH] = @@ -293,7 +293,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_FIRE_PUNCH, .contestComboMoves = {COMBO_STARTER_ICE_PUNCH, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH}, - .battleAnimScript = Move_FIRE_PUNCH, + .battleAnimScript = gBattleAnimMove_FirePunch, }, [MOVE_ICE_PUNCH] = @@ -324,7 +324,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_ICE_PUNCH, .contestComboMoves = {COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_THUNDER_PUNCH}, - .battleAnimScript = Move_ICE_PUNCH, + .battleAnimScript = gBattleAnimMove_IcePunch, }, [MOVE_THUNDER_PUNCH] = @@ -351,7 +351,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_THUNDER_PUNCH, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_ICE_PUNCH}, - .battleAnimScript = Move_THUNDER_PUNCH, + .battleAnimScript = gBattleAnimMove_ThunderPunch, }, [MOVE_SCRATCH] = @@ -373,7 +373,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCRATCH, .contestComboMoves = {COMBO_STARTER_LEER}, - .battleAnimScript = Move_SCRATCH, + .battleAnimScript = gBattleAnimMove_Scratch, }, [MOVE_VISE_GRIP] = @@ -395,7 +395,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_VICE_GRIP, .contestComboMoves = {0}, - .battleAnimScript = Move_VISE_GRIP, + .battleAnimScript = gBattleAnimMove_ViseGrip, }, [MOVE_GUILLOTINE] = @@ -417,7 +417,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, - .battleAnimScript = Move_GUILLOTINE, + .battleAnimScript = gBattleAnimMove_Guillotine, }, [MOVE_RAZOR_WIND] = @@ -443,7 +443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RAZOR_WIND, + .battleAnimScript = gBattleAnimMove_RazorWind, }, [MOVE_SWORDS_DANCE] = @@ -467,7 +467,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SWORDS_DANCE, .contestComboMoves = {0}, - .battleAnimScript = Move_SWORDS_DANCE, + .battleAnimScript = gBattleAnimMove_SwordsDance, }, [MOVE_CUT] = @@ -490,7 +490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_CUT, + .battleAnimScript = gBattleAnimMove_Cut, }, [MOVE_GUST] = @@ -514,7 +514,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GUST, + .battleAnimScript = gBattleAnimMove_Gust, }, [MOVE_WING_ATTACK] = @@ -536,7 +536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WING_ATTACK, + .battleAnimScript = gBattleAnimMove_WingAttack, }, [MOVE_WHIRLWIND] = @@ -564,7 +564,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WHIRLWIND, + .battleAnimScript = gBattleAnimMove_Whirlwind, }, [MOVE_FLY] = @@ -591,7 +591,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLY, + .battleAnimScript = gBattleAnimMove_Fly, }, [MOVE_BIND] = @@ -617,7 +617,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, - .battleAnimScript = Move_BIND, + .battleAnimScript = gBattleAnimMove_Bind, }, [MOVE_SLAM] = @@ -640,7 +640,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, - .battleAnimScript = Move_SLAM, + .battleAnimScript = gBattleAnimMove_Slam, }, [MOVE_VINE_WHIP] = @@ -668,7 +668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_VINE_WHIP, + .battleAnimScript = gBattleAnimMove_VineWhip, }, [MOVE_STOMP] = @@ -696,7 +696,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, - .battleAnimScript = Move_STOMP, + .battleAnimScript = gBattleAnimMove_Stomp, }, [MOVE_DOUBLE_KICK] = @@ -719,7 +719,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DOUBLE_KICK, + .battleAnimScript = gBattleAnimMove_DoubleKick, }, [MOVE_MEGA_KICK] = @@ -741,7 +741,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_MEGA_KICK, + .battleAnimScript = gBattleAnimMove_MegaKick, }, [MOVE_JUMP_KICK] = @@ -770,7 +770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_JUMP_KICK, + .battleAnimScript = gBattleAnimMove_JumpKick, }, [MOVE_ROLLING_KICK] = @@ -797,7 +797,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROLLING_KICK, + .battleAnimScript = gBattleAnimMove_RollingKick, }, [MOVE_SAND_ATTACK] = @@ -820,7 +820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SAND_ATTACK, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_SAND_ATTACK, + .battleAnimScript = gBattleAnimMove_SandAttack, }, [MOVE_HEADBUTT] = @@ -846,7 +846,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_HEADBUTT, + .battleAnimScript = gBattleAnimMove_Headbutt, }, [MOVE_HORN_ATTACK] = @@ -868,7 +868,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_HORN_ATTACK, .contestComboMoves = {COMBO_STARTER_LEER}, - .battleAnimScript = Move_HORN_ATTACK, + .battleAnimScript = gBattleAnimMove_HornAttack, }, [MOVE_FURY_ATTACK] = @@ -890,7 +890,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK, COMBO_STARTER_PECK}, - .battleAnimScript = Move_FURY_ATTACK, + .battleAnimScript = gBattleAnimMove_FuryAttack, }, [MOVE_HORN_DRILL] = @@ -912,7 +912,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK}, - .battleAnimScript = Move_HORN_DRILL, + .battleAnimScript = gBattleAnimMove_HornDrill, }, [MOVE_TACKLE] = @@ -940,7 +940,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN, COMBO_STARTER_LEER}, - .battleAnimScript = Move_TACKLE, + .battleAnimScript = gBattleAnimMove_Tackle, }, [MOVE_BODY_SLAM] = @@ -968,7 +968,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BODY_SLAM, + .battleAnimScript = gBattleAnimMove_BodySlam, }, [MOVE_WRAP] = @@ -993,7 +993,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WRAP, + .battleAnimScript = gBattleAnimMove_Wrap, }, [MOVE_TAKE_DOWN] = @@ -1016,7 +1016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, - .battleAnimScript = Move_TAKE_DOWN, + .battleAnimScript = gBattleAnimMove_TakeDown, }, [MOVE_THRASH] = @@ -1043,7 +1043,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAGE}, - .battleAnimScript = Move_THRASH, + .battleAnimScript = gBattleAnimMove_Thrash, }, [MOVE_DOUBLE_EDGE] = @@ -1066,7 +1066,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, - .battleAnimScript = Move_DOUBLE_EDGE, + .battleAnimScript = gBattleAnimMove_DoubleEdge, }, [MOVE_TAIL_WHIP] = @@ -1089,7 +1089,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_TAIL_WHIP, + .battleAnimScript = gBattleAnimMove_TailWhip, }, [MOVE_POISON_STING] = @@ -1114,7 +1114,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_STING, + .battleAnimScript = gBattleAnimMove_PoisonSting, }, [MOVE_TWINEEDLE] = @@ -1141,7 +1141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TWINEEDLE, + .battleAnimScript = gBattleAnimMove_Twineedle, }, [MOVE_PIN_MISSILE] = @@ -1162,7 +1162,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PIN_MISSILE, + .battleAnimScript = gBattleAnimMove_PinMissile, }, [MOVE_LEER] = @@ -1185,7 +1185,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_LEER, .contestComboMoves = {COMBO_STARTER_RAGE, COMBO_STARTER_SCARY_FACE}, - .battleAnimScript = Move_LEER, + .battleAnimScript = gBattleAnimMove_Leer, }, [MOVE_BITE] = @@ -1212,7 +1212,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_SCARY_FACE}, - .battleAnimScript = Move_BITE, + .battleAnimScript = gBattleAnimMove_Bite, }, [MOVE_GROWL] = @@ -1237,7 +1237,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_GROWL, + .battleAnimScript = gBattleAnimMove_Growl, }, [MOVE_ROAR] = @@ -1265,7 +1265,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROAR, + .battleAnimScript = gBattleAnimMove_Roar, }, [MOVE_SING] = @@ -1290,7 +1290,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SING, .contestComboMoves = {0}, - .battleAnimScript = Move_SING, + .battleAnimScript = gBattleAnimMove_Sing, }, [MOVE_SUPERSONIC] = @@ -1315,7 +1315,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SUPERSONIC, + .battleAnimScript = gBattleAnimMove_Supersonic, }, [MOVE_SONIC_BOOM] = @@ -1337,7 +1337,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SONIC_BOOM, + .battleAnimScript = gBattleAnimMove_SonicBoom, }, [MOVE_DISABLE] = @@ -1367,7 +1367,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DISABLE, + .battleAnimScript = gBattleAnimMove_Disable, }, [MOVE_ACID] = @@ -1396,7 +1396,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACID, + .battleAnimScript = gBattleAnimMove_Acid, }, [MOVE_EMBER] = @@ -1421,7 +1421,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_EMBER, + .battleAnimScript = gBattleAnimMove_Ember, }, [MOVE_FLAMETHROWER] = @@ -1446,7 +1446,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FLAMETHROWER, + .battleAnimScript = gBattleAnimMove_Flamethrower, }, [MOVE_MIST] = @@ -1471,7 +1471,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIST, + .battleAnimScript = gBattleAnimMove_Mist, }, [MOVE_WATER_GUN] = @@ -1492,7 +1492,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_WATER_SPORT}, - .battleAnimScript = Move_WATER_GUN, + .battleAnimScript = gBattleAnimMove_WaterGun, }, [MOVE_HYDRO_PUMP] = @@ -1513,7 +1513,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_HYDRO_PUMP, + .battleAnimScript = gBattleAnimMove_HydroPump, }, [MOVE_SURF] = @@ -1536,7 +1536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SURF, .contestComboMoves = {COMBO_STARTER_DIVE, COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_SURF, + .battleAnimScript = gBattleAnimMove_Surf, }, [MOVE_ICE_BEAM] = @@ -1558,7 +1558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .additionalEffects = ADDITIONAL_EFFECTS({ - // The following effect is also relevant in battle_pike.c + // The following effect is also relevant in battle_Pike.c // If you cherry-pick this to use something other than the config, make sure to update it there too .moveEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE, .chance = 10, @@ -1567,7 +1567,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_ICE_BEAM, + .battleAnimScript = gBattleAnimMove_IceBeam, }, [MOVE_BLIZZARD] = @@ -1597,7 +1597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_POWDER_SNOW}, - .battleAnimScript = Move_BLIZZARD, + .battleAnimScript = gBattleAnimMove_Blizzard, }, [MOVE_PSYBEAM] = @@ -1622,7 +1622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_PSYBEAM, + .battleAnimScript = gBattleAnimMove_Psybeam, }, [MOVE_BUBBLE_BEAM] = @@ -1647,7 +1647,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_BUBBLE_BEAM, + .battleAnimScript = gBattleAnimMove_BubbleBeam, }, [MOVE_AURORA_BEAM] = @@ -1672,7 +1672,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_AURORA_BEAM, + .battleAnimScript = gBattleAnimMove_AuroraBeam, }, [MOVE_HYPER_BEAM] = @@ -1696,7 +1696,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HYPER_BEAM, + .battleAnimScript = gBattleAnimMove_HyperBeam, }, [MOVE_PECK] = @@ -1718,7 +1718,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_PECK, .contestComboMoves = {0}, - .battleAnimScript = Move_PECK, + .battleAnimScript = gBattleAnimMove_Peck, }, [MOVE_DRILL_PECK] = @@ -1740,7 +1740,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PECK}, - .battleAnimScript = Move_DRILL_PECK, + .battleAnimScript = gBattleAnimMove_DrillPeck, }, [MOVE_SUBMISSION] = @@ -1763,7 +1763,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_SUBMISSION, + .battleAnimScript = gBattleAnimMove_Submission, }, [MOVE_LOW_KICK] = @@ -1785,7 +1785,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LOW_KICK, + .battleAnimScript = gBattleAnimMove_LowKick, }, [MOVE_COUNTER] = @@ -1812,7 +1812,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, - .battleAnimScript = Move_COUNTER, + .battleAnimScript = gBattleAnimMove_Counter, }, [MOVE_SEISMIC_TOSS] = @@ -1835,7 +1835,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, - .battleAnimScript = Move_SEISMIC_TOSS, + .battleAnimScript = gBattleAnimMove_SeismicToss, }, [MOVE_STRENGTH] = @@ -1857,7 +1857,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STRENGTH, + .battleAnimScript = gBattleAnimMove_Strength, }, [MOVE_ABSORB] = @@ -1880,7 +1880,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_ABSORB, + .battleAnimScript = gBattleAnimMove_Absorb, }, [MOVE_MEGA_DRAIN] = @@ -1902,7 +1902,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_MEGA_DRAIN, + .battleAnimScript = gBattleAnimMove_MegaDrain, }, [MOVE_LEECH_SEED] = @@ -1925,7 +1925,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_LEECH_SEED, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_WORRY_SEED}, - .battleAnimScript = Move_LEECH_SEED, + .battleAnimScript = gBattleAnimMove_LeechSeed, }, [MOVE_GROWTH] = @@ -1950,7 +1950,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_GROWTH, .contestComboMoves = {0}, - .battleAnimScript = Move_GROWTH, + .battleAnimScript = gBattleAnimMove_Growth, }, [MOVE_RAZOR_LEAF] = @@ -1973,7 +1973,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_RAZOR_LEAF, + .battleAnimScript = gBattleAnimMove_RazorLeaf, }, [MOVE_SOLAR_BEAM] = @@ -1997,7 +1997,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_SOLAR_BEAM, + .battleAnimScript = gBattleAnimMove_SolarBeam, }, [MOVE_POISON_POWDER] = @@ -2021,7 +2021,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, - .battleAnimScript = Move_POISON_POWDER, + .battleAnimScript = gBattleAnimMove_PoisonPowder, }, [MOVE_STUN_SPORE] = @@ -2045,7 +2045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, - .battleAnimScript = Move_STUN_SPORE, + .battleAnimScript = gBattleAnimMove_StunSpore, }, [MOVE_SLEEP_POWDER] = @@ -2069,7 +2069,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, - .battleAnimScript = Move_SLEEP_POWDER, + .battleAnimScript = gBattleAnimMove_SleepPowder, }, [MOVE_PETAL_DANCE] = @@ -2103,7 +2103,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_PETAL_DANCE, + .battleAnimScript = gBattleAnimMove_PetalDance, }, [MOVE_STRING_SHOT] = @@ -2126,7 +2126,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_STRING_SHOT, .contestComboMoves = {0}, - .battleAnimScript = Move_STRING_SHOT, + .battleAnimScript = gBattleAnimMove_StringShot, }, [MOVE_DRAGON_RAGE] = @@ -2149,7 +2149,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_RAGE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_RAGE, + .battleAnimScript = gBattleAnimMove_DragonRage, }, [MOVE_FIRE_SPIN] = @@ -2174,7 +2174,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FIRE_SPIN, + .battleAnimScript = gBattleAnimMove_FireSpin, }, [MOVE_THUNDER_SHOCK] = @@ -2199,7 +2199,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_THUNDER_SHOCK, + .battleAnimScript = gBattleAnimMove_ThunderShock, }, [MOVE_THUNDERBOLT] = @@ -2224,7 +2224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_THUNDERBOLT, + .battleAnimScript = gBattleAnimMove_Thunderbolt, }, [MOVE_THUNDER_WAVE] = @@ -2247,7 +2247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_THUNDER_WAVE, + .battleAnimScript = gBattleAnimMove_ThunderWave, }, [MOVE_THUNDER] = @@ -2273,7 +2273,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_THUNDER, + .battleAnimScript = gBattleAnimMove_Thunder, }, [MOVE_ROCK_THROW] = @@ -2294,7 +2294,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_ROCK_THROW, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_THROW, + .battleAnimScript = gBattleAnimMove_RockThrow, }, [MOVE_EARTHQUAKE] = @@ -2318,7 +2318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_EARTHQUAKE, .contestComboMoves = {0}, - .battleAnimScript = Move_EARTHQUAKE, + .battleAnimScript = gBattleAnimMove_Earthquake, }, [MOVE_FISSURE] = @@ -2341,7 +2341,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE}, - .battleAnimScript = Move_FISSURE, + .battleAnimScript = gBattleAnimMove_Fissure, }, [MOVE_DIG] = @@ -2368,7 +2368,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DIG, + .battleAnimScript = gBattleAnimMove_Dig, }, [MOVE_TOXIC] = @@ -2391,7 +2391,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_TOXIC, .contestComboMoves = {0}, - .battleAnimScript = Move_TOXIC, + .battleAnimScript = gBattleAnimMove_Toxic, }, [MOVE_CONFUSION] = @@ -2416,7 +2416,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CONFUSION, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, - .battleAnimScript = Move_CONFUSION, + .battleAnimScript = gBattleAnimMove_Confusion, }, [MOVE_PSYCHIC] = @@ -2441,7 +2441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_PSYCHIC, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS}, - .battleAnimScript = Move_PSYCHIC, + .battleAnimScript = gBattleAnimMove_Psychic, }, [MOVE_HYPNOSIS] = @@ -2464,7 +2464,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HYPNOSIS, .contestComboMoves = {0}, - .battleAnimScript = Move_HYPNOSIS, + .battleAnimScript = gBattleAnimMove_Hypnosis, }, [MOVE_MEDITATE] = @@ -2489,7 +2489,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_MEDITATE, + .battleAnimScript = gBattleAnimMove_Meditate, }, [MOVE_AGILITY] = @@ -2514,7 +2514,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, - .battleAnimScript = Move_AGILITY, + .battleAnimScript = gBattleAnimMove_Agility, }, [MOVE_QUICK_ATTACK] = @@ -2536,7 +2536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, - .battleAnimScript = Move_QUICK_ATTACK, + .battleAnimScript = gBattleAnimMove_QuickAttack, }, [MOVE_RAGE] = @@ -2558,7 +2558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_RAGE, .contestComboMoves = {0}, - .battleAnimScript = Move_RAGE, + .battleAnimScript = gBattleAnimMove_Rage, }, [MOVE_TELEPORT] = @@ -2582,7 +2582,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_DOUBLE_TEAM, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, - .battleAnimScript = Move_TELEPORT, + .battleAnimScript = gBattleAnimMove_Teleport, }, [MOVE_NIGHT_SHADE] = @@ -2603,7 +2603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NIGHT_SHADE, + .battleAnimScript = gBattleAnimMove_NightShade, }, [MOVE_MIMIC] = @@ -2633,7 +2633,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIMIC, + .battleAnimScript = gBattleAnimMove_Mimic, }, [MOVE_SCREECH] = @@ -2658,7 +2658,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SCREECH, + .battleAnimScript = gBattleAnimMove_Screech, }, [MOVE_DOUBLE_TEAM] = @@ -2683,7 +2683,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DOUBLE_TEAM, .contestComboMoves = {0}, - .battleAnimScript = Move_DOUBLE_TEAM, + .battleAnimScript = gBattleAnimMove_DoubleTeam, }, [MOVE_RECOVER] = @@ -2715,7 +2715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RECOVER, + .battleAnimScript = gBattleAnimMove_Recover, }, [MOVE_HARDEN] = @@ -2740,7 +2740,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_HARDEN, .contestComboMoves = {0}, - .battleAnimScript = Move_HARDEN, + .battleAnimScript = gBattleAnimMove_Harden, }, [MOVE_MINIMIZE] = @@ -2765,7 +2765,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MINIMIZE, + .battleAnimScript = gBattleAnimMove_Minimize, }, [MOVE_SMOKESCREEN] = @@ -2788,7 +2788,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SMOG}, - .battleAnimScript = Move_SMOKESCREEN, + .battleAnimScript = gBattleAnimMove_Smokescreen, }, [MOVE_CONFUSE_RAY] = @@ -2811,7 +2811,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONFUSE_RAY, + .battleAnimScript = gBattleAnimMove_ConfuseRay, }, [MOVE_WITHDRAW] = @@ -2836,7 +2836,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WITHDRAW, + .battleAnimScript = gBattleAnimMove_Withdraw, }, [MOVE_DEFENSE_CURL] = @@ -2861,7 +2861,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_DEFENSE_CURL, .contestComboMoves = {0}, - .battleAnimScript = Move_DEFENSE_CURL, + .battleAnimScript = gBattleAnimMove_DefenseCurl, }, [MOVE_BARRIER] = @@ -2886,7 +2886,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BARRIER, + .battleAnimScript = gBattleAnimMove_Barrier, }, [MOVE_LIGHT_SCREEN] = @@ -2911,7 +2911,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_LIGHT_SCREEN, + .battleAnimScript = gBattleAnimMove_LightScreen, }, [MOVE_HAZE] = @@ -2936,7 +2936,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_HAZE, + .battleAnimScript = gBattleAnimMove_Haze, }, [MOVE_REFLECT] = @@ -2961,7 +2961,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_REFLECT, + .battleAnimScript = gBattleAnimMove_Reflect, }, [MOVE_FOCUS_ENERGY] = @@ -2987,7 +2987,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_FOCUS_ENERGY, .contestComboMoves = {0}, - .battleAnimScript = Move_FOCUS_ENERGY, + .battleAnimScript = gBattleAnimMove_FocusEnergy, }, [MOVE_BIDE] = @@ -3012,7 +3012,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BIDE, + .battleAnimScript = gBattleAnimMove_Bide, }, [MOVE_METRONOME] = @@ -3042,7 +3042,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_METRONOME, + .battleAnimScript = gBattleAnimMove_Metronome, }, [MOVE_MIRROR_MOVE] = @@ -3071,7 +3071,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIRROR_MOVE, + .battleAnimScript = gBattleAnimMove_MirrorMove, }, [MOVE_SELF_DESTRUCT] = @@ -3093,7 +3093,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SELF_DESTRUCT, + .battleAnimScript = gBattleAnimMove_SelfDestruct, }, [MOVE_EGG_BOMB] = @@ -3115,7 +3115,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SOFT_BOILED}, - .battleAnimScript = Move_EGG_BOMB, + .battleAnimScript = gBattleAnimMove_EggBomb, }, [MOVE_LICK] = @@ -3141,7 +3141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LICK, + .battleAnimScript = gBattleAnimMove_Lick, }, [MOVE_SMOG] = @@ -3166,7 +3166,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SMOG, .contestComboMoves = {0}, - .battleAnimScript = Move_SMOG, + .battleAnimScript = gBattleAnimMove_Smog, }, [MOVE_SLUDGE] = @@ -3191,7 +3191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SLUDGE, .contestComboMoves = {COMBO_STARTER_SLUDGE_BOMB}, - .battleAnimScript = Move_SLUDGE, + .battleAnimScript = gBattleAnimMove_Sludge, }, [MOVE_BONE_CLUB] = @@ -3216,7 +3216,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONE_CLUB, .contestComboMoves = {COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, - .battleAnimScript = Move_BONE_CLUB, + .battleAnimScript = gBattleAnimMove_BoneClub, }, [MOVE_FIRE_BLAST] = @@ -3241,7 +3241,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FIRE_BLAST, + .battleAnimScript = gBattleAnimMove_FireBlast, }, [MOVE_WATERFALL] = @@ -3269,7 +3269,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WATERFALL, + .battleAnimScript = gBattleAnimMove_Waterfall, }, [MOVE_CLAMP] = @@ -3295,7 +3295,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_CLAMP, + .battleAnimScript = gBattleAnimMove_Clamp, }, [MOVE_SWIFT] = @@ -3316,7 +3316,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SWIFT, + .battleAnimScript = gBattleAnimMove_Swift, }, [MOVE_SKULL_BASH] = @@ -3346,7 +3346,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKULL_BASH, + .battleAnimScript = gBattleAnimMove_SkullBash, }, [MOVE_SPIKE_CANNON] = @@ -3367,7 +3367,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIKE_CANNON, + .battleAnimScript = gBattleAnimMove_SpikeCannon, }, [MOVE_CONSTRICT] = @@ -3393,7 +3393,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONSTRICT, + .battleAnimScript = gBattleAnimMove_Constrict, }, [MOVE_AMNESIA] = @@ -3418,7 +3418,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AMNESIA, + .battleAnimScript = gBattleAnimMove_Amnesia, }, [MOVE_KINESIS] = @@ -3441,7 +3441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_KINESIS, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_PSYCHIC}, - .battleAnimScript = Move_KINESIS, + .battleAnimScript = gBattleAnimMove_Kinesis, }, [MOVE_SOFT_BOILED] = @@ -3467,7 +3467,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SOFT_BOILED, .contestComboMoves = {0}, - .battleAnimScript = Move_SOFT_BOILED, + .battleAnimScript = gBattleAnimMove_SoftBoiled, }, [MOVE_HIGH_JUMP_KICK] = @@ -3496,7 +3496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_HIGH_JUMP_KICK, + .battleAnimScript = gBattleAnimMove_HighJumpKick, }, [MOVE_GLARE] = @@ -3525,7 +3525,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, - .battleAnimScript = Move_GLARE, + .battleAnimScript = gBattleAnimMove_Glare, }, [MOVE_DREAM_EATER] = @@ -3547,7 +3547,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_HYPNOSIS}, - .battleAnimScript = Move_DREAM_EATER, + .battleAnimScript = gBattleAnimMove_DreamEater, }, [MOVE_POISON_GAS] = @@ -3576,7 +3576,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_GAS, + .battleAnimScript = gBattleAnimMove_PoisonGas, }, [MOVE_BARRAGE] = @@ -3598,7 +3598,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BARRAGE, + .battleAnimScript = gBattleAnimMove_Barrage, }, [MOVE_LEECH_LIFE] = @@ -3622,7 +3622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LEECH_LIFE, + .battleAnimScript = gBattleAnimMove_LeechLife, }, [MOVE_LOVELY_KISS] = @@ -3645,7 +3645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LOVELY_KISS, + .battleAnimScript = gBattleAnimMove_LovelyKiss, }, [MOVE_SKY_ATTACK] = @@ -3676,7 +3676,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKY_ATTACK, + .battleAnimScript = gBattleAnimMove_SkyAttack, }, [MOVE_TRANSFORM] = @@ -3706,7 +3706,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRANSFORM, + .battleAnimScript = gBattleAnimMove_Transform, }, [MOVE_BUBBLE] = @@ -3731,7 +3731,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_BUBBLE, + .battleAnimScript = gBattleAnimMove_Bubble, }, [MOVE_DIZZY_PUNCH] = @@ -3758,7 +3758,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DIZZY_PUNCH, + .battleAnimScript = gBattleAnimMove_DizzyPunch, }, [MOVE_SPORE] = @@ -3782,7 +3782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPORE, + .battleAnimScript = gBattleAnimMove_Spore, }, [MOVE_FLASH] = @@ -3805,7 +3805,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLASH, + .battleAnimScript = gBattleAnimMove_Flash, }, [MOVE_PSYWAVE] = @@ -3826,7 +3826,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_PSYWAVE, + .battleAnimScript = gBattleAnimMove_Psywave, }, [MOVE_SPLASH] = @@ -3851,7 +3851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPLASH, + .battleAnimScript = gBattleAnimMove_Splash, }, [MOVE_ACID_ARMOR] = @@ -3876,7 +3876,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACID_ARMOR, + .battleAnimScript = gBattleAnimMove_AcidArmor, }, [MOVE_CRABHAMMER] = @@ -3899,7 +3899,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_CRABHAMMER, + .battleAnimScript = gBattleAnimMove_Crabhammer, }, [MOVE_EXPLOSION] = @@ -3921,7 +3921,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EXPLOSION, + .battleAnimScript = gBattleAnimMove_Explosion, }, [MOVE_FURY_SWIPES] = @@ -3943,7 +3943,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH}, - .battleAnimScript = Move_FURY_SWIPES, + .battleAnimScript = gBattleAnimMove_FurySwipes, }, [MOVE_BONEMERANG] = @@ -3965,7 +3965,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONEMERANG, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, - .battleAnimScript = Move_BONEMERANG, + .battleAnimScript = gBattleAnimMove_Bonemerang, }, [MOVE_REST] = @@ -3991,7 +3991,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_REST, .contestComboMoves = {COMBO_STARTER_BELLY_DRUM, COMBO_STARTER_CHARM, COMBO_STARTER_YAWN}, - .battleAnimScript = Move_REST, + .battleAnimScript = gBattleAnimMove_Rest, }, [MOVE_ROCK_SLIDE] = @@ -4016,7 +4016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, - .battleAnimScript = Move_ROCK_SLIDE, + .battleAnimScript = gBattleAnimMove_RockSlide, }, [MOVE_HYPER_FANG] = @@ -4043,7 +4043,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HYPER_FANG, + .battleAnimScript = gBattleAnimMove_HyperFang, }, [MOVE_SHARPEN] = @@ -4068,7 +4068,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHARPEN, + .battleAnimScript = gBattleAnimMove_Sharpen, }, [MOVE_CONVERSION] = @@ -4093,7 +4093,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONVERSION, + .battleAnimScript = gBattleAnimMove_Conversion, }, [MOVE_TRI_ATTACK] = @@ -4118,7 +4118,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON}, - .battleAnimScript = Move_TRI_ATTACK, + .battleAnimScript = gBattleAnimMove_TriAttack, }, [MOVE_SUPER_FANG] = @@ -4141,7 +4141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, - .battleAnimScript = Move_SUPER_FANG, + .battleAnimScript = gBattleAnimMove_SuperFang, }, [MOVE_SLASH] = @@ -4165,7 +4165,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH, COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_SLASH, + .battleAnimScript = gBattleAnimMove_Slash, }, [MOVE_SUBSTITUTE] = @@ -4191,7 +4191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SUBSTITUTE, + .battleAnimScript = gBattleAnimMove_Substitute, }, [MOVE_STRUGGLE] = @@ -4229,7 +4229,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .encoreBanned = TRUE, .assistBanned = TRUE, .sketchBanned = TRUE, - .battleAnimScript = Move_STRUGGLE, + .battleAnimScript = gBattleAnimMove_Struggle, }, [MOVE_SKETCH] = @@ -4262,7 +4262,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKETCH, + .battleAnimScript = gBattleAnimMove_Sketch, }, [MOVE_TRIPLE_KICK] = @@ -4285,7 +4285,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_TRIPLE_KICK, + .battleAnimScript = gBattleAnimMove_TripleKick, }, [MOVE_THIEF] = @@ -4315,7 +4315,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_THIEF, + .battleAnimScript = gBattleAnimMove_Thief, }, [MOVE_SPIDER_WEB] = @@ -4339,7 +4339,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STRING_SHOT}, - .battleAnimScript = Move_SPIDER_WEB, + .battleAnimScript = gBattleAnimMove_SpiderWeb, }, [MOVE_MIND_READER] = @@ -4361,7 +4361,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_MIND_READER, .contestComboMoves = {0}, - .battleAnimScript = Move_MIND_READER, + .battleAnimScript = gBattleAnimMove_MindReader, }, [MOVE_NIGHTMARE] = @@ -4384,7 +4384,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NIGHTMARE, + .battleAnimScript = gBattleAnimMove_Nightmare, }, [MOVE_FLAME_WHEEL] = @@ -4411,7 +4411,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FLAME_WHEEL, + .battleAnimScript = gBattleAnimMove_FlameWheel, }, [MOVE_SNORE] = @@ -4439,7 +4439,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, - .battleAnimScript = Move_SNORE, + .battleAnimScript = gBattleAnimMove_Snore, }, [MOVE_CURSE] = @@ -4464,7 +4464,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_CURSE, .contestComboMoves = {0}, - .battleAnimScript = Move_CURSE, + .battleAnimScript = gBattleAnimMove_Curse, }, [MOVE_FLAIL] = @@ -4486,7 +4486,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, - .battleAnimScript = Move_FLAIL, + .battleAnimScript = gBattleAnimMove_Flail, }, [MOVE_CONVERSION_2] = @@ -4511,7 +4511,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONVERSION_2, + .battleAnimScript = gBattleAnimMove_Conversion2, }, [MOVE_AEROBLAST] = @@ -4534,7 +4534,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AEROBLAST, + .battleAnimScript = gBattleAnimMove_Aeroblast, }, [MOVE_COTTON_SPORE] = @@ -4558,7 +4558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COTTON_SPORE, + .battleAnimScript = gBattleAnimMove_CottonSpore, }, [MOVE_REVERSAL] = @@ -4580,7 +4580,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, - .battleAnimScript = Move_REVERSAL, + .battleAnimScript = gBattleAnimMove_Reversal, }, [MOVE_SPITE] = @@ -4604,7 +4604,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, - .battleAnimScript = Move_SPITE, + .battleAnimScript = gBattleAnimMove_Spite, }, [MOVE_POWDER_SNOW] = @@ -4633,7 +4633,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_POWDER_SNOW, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_POWDER_SNOW, + .battleAnimScript = gBattleAnimMove_PowderSnow, }, [MOVE_PROTECT] = @@ -4658,7 +4658,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HARDEN}, - .battleAnimScript = Move_PROTECT, + .battleAnimScript = gBattleAnimMove_Protect, }, [MOVE_MACH_PUNCH] = @@ -4681,7 +4681,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MACH_PUNCH, + .battleAnimScript = gBattleAnimMove_MachPunch, }, [MOVE_SCARY_FACE] = @@ -4704,7 +4704,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCARY_FACE, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_RAGE}, - .battleAnimScript = Move_SCARY_FACE, + .battleAnimScript = gBattleAnimMove_ScaryFace, }, [MOVE_FEINT_ATTACK] = @@ -4726,7 +4726,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_LEER, COMBO_STARTER_POUND}, - .battleAnimScript = Move_FEINT_ATTACK, + .battleAnimScript = gBattleAnimMove_FeintAttack, }, [MOVE_SWEET_KISS] = @@ -4749,7 +4749,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_SWEET_KISS, + .battleAnimScript = gBattleAnimMove_SweetKiss, }, [MOVE_BELLY_DRUM] = @@ -4774,7 +4774,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_BELLY_DRUM, .contestComboMoves = {0}, - .battleAnimScript = Move_BELLY_DRUM, + .battleAnimScript = gBattleAnimMove_BellyDrum, }, [MOVE_SLUDGE_BOMB] = @@ -4800,7 +4800,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SLUDGE_BOMB, .contestComboMoves = {COMBO_STARTER_SLUDGE}, - .battleAnimScript = Move_SLUDGE_BOMB, + .battleAnimScript = gBattleAnimMove_SludgeBomb, }, [MOVE_MUD_SLAP] = @@ -4825,7 +4825,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MUD_SLAP, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_MUD_SLAP, + .battleAnimScript = gBattleAnimMove_MudSlap, }, [MOVE_OCTAZOOKA] = @@ -4851,7 +4851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_OCTAZOOKA, + .battleAnimScript = gBattleAnimMove_Octazooka, }, [MOVE_SPIKES] = @@ -4878,7 +4878,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIKES, + .battleAnimScript = gBattleAnimMove_Spikes, }, [MOVE_ZAP_CANNON] = @@ -4904,7 +4904,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON}, - .battleAnimScript = Move_ZAP_CANNON, + .battleAnimScript = gBattleAnimMove_ZapCannon, }, [MOVE_FORESIGHT] = @@ -4928,7 +4928,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FORESIGHT, + .battleAnimScript = gBattleAnimMove_Foresight, }, [MOVE_DESTINY_BOND] = @@ -4956,7 +4956,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE, COMBO_STARTER_MEAN_LOOK}, - .battleAnimScript = Move_DESTINY_BOND, + .battleAnimScript = gBattleAnimMove_DestinyBond, }, [MOVE_PERISH_SONG] = @@ -4982,7 +4982,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MEAN_LOOK, COMBO_STARTER_SING}, - .battleAnimScript = Move_PERISH_SONG, + .battleAnimScript = gBattleAnimMove_PerishSong, }, [MOVE_ICY_WIND] = @@ -5008,7 +5008,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_ICY_WIND, + .battleAnimScript = gBattleAnimMove_IcyWind, }, [MOVE_DETECT] = @@ -5035,7 +5035,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, - .battleAnimScript = Move_DETECT, + .battleAnimScript = gBattleAnimMove_Detect, }, [MOVE_BONE_RUSH] = @@ -5056,7 +5056,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONE_RUSH, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_SHADOW_BONE}, - .battleAnimScript = Move_BONE_RUSH, + .battleAnimScript = gBattleAnimMove_BoneRush, }, [MOVE_LOCK_ON] = @@ -5078,7 +5078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_LOCK_ON, .contestComboMoves = {0}, - .battleAnimScript = Move_LOCK_ON, + .battleAnimScript = gBattleAnimMove_LockOn, }, [MOVE_OUTRAGE] = @@ -5105,7 +5105,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OUTRAGE, + .battleAnimScript = gBattleAnimMove_Outrage, }, [MOVE_SANDSTORM] = @@ -5130,7 +5130,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SANDSTORM, .contestComboMoves = {0}, - .battleAnimScript = Move_SANDSTORM, + .battleAnimScript = gBattleAnimMove_Sandstorm, }, [MOVE_GIGA_DRAIN] = @@ -5153,7 +5153,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_GIGA_DRAIN, + .battleAnimScript = gBattleAnimMove_GigaDrain, }, [MOVE_ENDURE] = @@ -5180,7 +5180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_ENDURE, .contestComboMoves = {0}, - .battleAnimScript = Move_ENDURE, + .battleAnimScript = gBattleAnimMove_Endure, }, [MOVE_CHARM] = @@ -5203,7 +5203,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_CHARM, .contestComboMoves = {0}, - .battleAnimScript = Move_CHARM, + .battleAnimScript = gBattleAnimMove_Charm, }, [MOVE_ROLLOUT] = @@ -5227,7 +5227,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN}, - .battleAnimScript = Move_ROLLOUT, + .battleAnimScript = gBattleAnimMove_Rollout, }, [MOVE_FALSE_SWIPE] = @@ -5247,7 +5247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_FALSE_SWIPE, + .battleAnimScript = gBattleAnimMove_FalseSwipe, }, [MOVE_SWAGGER] = @@ -5270,7 +5270,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SWAGGER, + .battleAnimScript = gBattleAnimMove_Swagger, }, [MOVE_MILK_DRINK] = @@ -5296,7 +5296,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MILK_DRINK, + .battleAnimScript = gBattleAnimMove_MilkDrink, }, [MOVE_SPARK] = @@ -5322,7 +5322,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_SPARK, + .battleAnimScript = gBattleAnimMove_Spark, }, [MOVE_FURY_CUTTER] = @@ -5351,7 +5351,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_FURY_CUTTER, + .battleAnimScript = gBattleAnimMove_FuryCutter, }, [MOVE_STEEL_WING] = @@ -5378,7 +5378,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEEL_WING, + .battleAnimScript = gBattleAnimMove_SteelWing, }, [MOVE_MEAN_LOOK] = @@ -5402,7 +5402,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_MEAN_LOOK, .contestComboMoves = {COMBO_STARTER_CURSE}, - .battleAnimScript = Move_MEAN_LOOK, + .battleAnimScript = gBattleAnimMove_MeanLook, }, [MOVE_ATTRACT] = @@ -5426,7 +5426,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ATTRACT, + .battleAnimScript = gBattleAnimMove_Attract, }, [MOVE_SLEEP_TALK] = @@ -5457,7 +5457,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, - .battleAnimScript = Move_SLEEP_TALK, + .battleAnimScript = gBattleAnimMove_SleepTalk, }, [MOVE_HEAL_BELL] = @@ -5484,7 +5484,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HEAL_BELL, .contestComboMoves = {COMBO_STARTER_LUCKY_CHANT}, - .battleAnimScript = Move_HEAL_BELL, + .battleAnimScript = gBattleAnimMove_HealBell, }, [MOVE_RETURN] = @@ -5506,7 +5506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RETURN, + .battleAnimScript = gBattleAnimMove_Return, }, [MOVE_PRESENT] = @@ -5528,7 +5528,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PRESENT, + .battleAnimScript = gBattleAnimMove_Present, }, [MOVE_FRUSTRATION] = @@ -5550,7 +5550,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FRUSTRATION, + .battleAnimScript = gBattleAnimMove_Frustration, }, [MOVE_SAFEGUARD] = @@ -5575,7 +5575,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SAFEGUARD, + .battleAnimScript = gBattleAnimMove_Safeguard, }, [MOVE_PAIN_SPLIT] = @@ -5597,7 +5597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, - .battleAnimScript = Move_PAIN_SPLIT, + .battleAnimScript = gBattleAnimMove_PainSplit, }, [MOVE_SACRED_FIRE] = @@ -5623,7 +5623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_SACRED_FIRE, + .battleAnimScript = gBattleAnimMove_SacredFire, }, [MOVE_MAGNITUDE] = @@ -5646,7 +5646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGNITUDE, + .battleAnimScript = gBattleAnimMove_Magnitude, }, [MOVE_DYNAMIC_PUNCH] = @@ -5673,7 +5673,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_DYNAMIC_PUNCH, + .battleAnimScript = gBattleAnimMove_DynamicPunch, }, [MOVE_MEGAHORN] = @@ -5695,7 +5695,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MEGAHORN, + .battleAnimScript = gBattleAnimMove_Megahorn, }, [MOVE_DRAGON_BREATH] = @@ -5721,7 +5721,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_BREATH, .contestComboMoves = {COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_BREATH, + .battleAnimScript = gBattleAnimMove_DragonBreath, }, [MOVE_BATON_PASS] = @@ -5745,7 +5745,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BATON_PASS, + .battleAnimScript = gBattleAnimMove_BatonPass, }, [MOVE_ENCORE] = @@ -5770,7 +5770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ENCORE, + .battleAnimScript = gBattleAnimMove_Encore, }, [MOVE_PURSUIT] = @@ -5793,7 +5793,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PURSUIT, + .battleAnimScript = gBattleAnimMove_Pursuit, }, [MOVE_RAPID_SPIN] = @@ -5827,7 +5827,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RAPID_SPIN, + .battleAnimScript = gBattleAnimMove_RapidSpin, }, [MOVE_SWEET_SCENT] = @@ -5850,7 +5850,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SWEET_SCENT, .contestComboMoves = {0}, - .battleAnimScript = Move_SWEET_SCENT, + .battleAnimScript = gBattleAnimMove_SweetScent, }, [MOVE_IRON_TAIL] = @@ -5876,7 +5876,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_IRON_TAIL, + .battleAnimScript = gBattleAnimMove_IronTail, }, [MOVE_METAL_CLAW] = @@ -5903,7 +5903,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, - .battleAnimScript = Move_METAL_CLAW, + .battleAnimScript = gBattleAnimMove_MetalClaw, }, [MOVE_VITAL_THROW] = @@ -5925,7 +5925,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, - .battleAnimScript = Move_VITAL_THROW, + .battleAnimScript = gBattleAnimMove_VitalThrow, }, [MOVE_MORNING_SUN] = @@ -5951,7 +5951,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_MORNING_SUN, + .battleAnimScript = gBattleAnimMove_MorningSun, }, [MOVE_SYNTHESIS] = @@ -5977,7 +5977,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_SYNTHESIS, + .battleAnimScript = gBattleAnimMove_Synthesis, }, [MOVE_MOONLIGHT] = @@ -6003,7 +6003,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_MOONLIGHT, + .battleAnimScript = gBattleAnimMove_Moonlight, }, [MOVE_HIDDEN_POWER] = @@ -6024,7 +6024,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HIDDEN_POWER, + .battleAnimScript = gBattleAnimMove_HiddenPower, }, [MOVE_CROSS_CHOP] = @@ -6047,7 +6047,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_CROSS_CHOP, + .battleAnimScript = gBattleAnimMove_CrossChop, }, [MOVE_TWISTER] = @@ -6074,7 +6074,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TWISTER, + .battleAnimScript = gBattleAnimMove_Twister, }, [MOVE_RAIN_DANCE] = @@ -6098,7 +6098,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_RAIN_DANCE, .contestComboMoves = {0}, - .battleAnimScript = Move_RAIN_DANCE, + .battleAnimScript = gBattleAnimMove_RainDance, }, [MOVE_SUNNY_DAY] = @@ -6122,7 +6122,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SUNNY_DAY, .contestComboMoves = {0}, - .battleAnimScript = Move_SUNNY_DAY, + .battleAnimScript = gBattleAnimMove_SunnyDay, }, [MOVE_CRUNCH] = @@ -6157,7 +6157,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, - .battleAnimScript = Move_CRUNCH, + .battleAnimScript = gBattleAnimMove_Crunch, }, [MOVE_MIRROR_COAT] = @@ -6182,7 +6182,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, - .battleAnimScript = Move_MIRROR_COAT, + .battleAnimScript = gBattleAnimMove_MirrorCoat, }, [MOVE_PSYCH_UP] = @@ -6208,7 +6208,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCH_UP, + .battleAnimScript = gBattleAnimMove_PsychUp, }, [MOVE_EXTREME_SPEED] = @@ -6230,7 +6230,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EXTREME_SPEED, + .battleAnimScript = gBattleAnimMove_ExtremeSpeed, }, [MOVE_ANCIENT_POWER] = @@ -6257,7 +6257,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ANCIENT_POWER, + .battleAnimScript = gBattleAnimMove_AncientPower, }, [MOVE_SHADOW_BALL] = @@ -6283,7 +6283,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_BALL, + .battleAnimScript = gBattleAnimMove_ShadowBall, }, [MOVE_FUTURE_SIGHT] = @@ -6312,7 +6312,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, - .battleAnimScript = Move_FUTURE_SIGHT, + .battleAnimScript = gBattleAnimMove_FutureSight, }, [MOVE_ROCK_SMASH] = @@ -6338,7 +6338,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_SMASH, + .battleAnimScript = gBattleAnimMove_RockSmash, }, [MOVE_WHIRLPOOL] = @@ -6363,7 +6363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WHIRLPOOL, + .battleAnimScript = gBattleAnimMove_Whirlpool, }, [MOVE_BEAT_UP] = @@ -6384,7 +6384,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BEAT_UP, + .battleAnimScript = gBattleAnimMove_BeatUp, }, [MOVE_FAKE_OUT] = @@ -6410,7 +6410,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_FAKE_OUT, .contestComboMoves = {0}, - .battleAnimScript = Move_FAKE_OUT, + .battleAnimScript = gBattleAnimMove_FakeOut, }, [MOVE_UPROAR] = @@ -6443,7 +6443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_UPROAR, + .battleAnimScript = gBattleAnimMove_Uproar, }, [MOVE_STOCKPILE] = @@ -6468,7 +6468,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_STOCKPILE, .contestComboMoves = {0}, - .battleAnimScript = Move_STOCKPILE, + .battleAnimScript = gBattleAnimMove_Stockpile, }, [MOVE_SPIT_UP] = @@ -6490,7 +6490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, - .battleAnimScript = Move_SPIT_UP, + .battleAnimScript = gBattleAnimMove_SpitUp, }, [MOVE_SWALLOW] = @@ -6516,7 +6516,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, - .battleAnimScript = Move_SWALLOW, + .battleAnimScript = gBattleAnimMove_Swallow, }, [MOVE_HEAT_WAVE] = @@ -6542,7 +6542,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_HEAT_WAVE, + .battleAnimScript = gBattleAnimMove_HeatWave, }, [MOVE_HAIL] = @@ -6566,7 +6566,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HAIL, .contestComboMoves = {0}, - .battleAnimScript = Move_HAIL, + .battleAnimScript = gBattleAnimMove_Hail, }, [MOVE_TORMENT] = @@ -6589,7 +6589,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TORMENT, + .battleAnimScript = gBattleAnimMove_Torment, }, [MOVE_FLATTER] = @@ -6612,7 +6612,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_FLATTER, + .battleAnimScript = gBattleAnimMove_Flatter, }, [MOVE_WILL_O_WISP] = @@ -6635,7 +6635,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_WILL_O_WISP, + .battleAnimScript = gBattleAnimMove_WillOWisp, }, [MOVE_MEMENTO] = @@ -6657,7 +6657,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MEMENTO, + .battleAnimScript = gBattleAnimMove_Memento, }, [MOVE_FACADE] = @@ -6679,7 +6679,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FACADE, + .battleAnimScript = gBattleAnimMove_Facade, }, [MOVE_FOCUS_PUNCH] = @@ -6709,7 +6709,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_FOCUS_PUNCH, + .battleAnimScript = gBattleAnimMove_FocusPunch, }, [MOVE_SMELLING_SALTS] = @@ -6735,7 +6735,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SMELLING_SALTS, + .battleAnimScript = gBattleAnimMove_SmellingSalts, }, [MOVE_FOLLOW_ME] = @@ -6762,7 +6762,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FOLLOW_ME, + .battleAnimScript = gBattleAnimMove_FollowMe, }, [MOVE_NATURE_POWER] = @@ -6790,7 +6790,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NATURE_POWER, + .battleAnimScript = gBattleAnimMove_NaturePower, }, [MOVE_CHARGE] = @@ -6815,7 +6815,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CHARGE, .contestComboMoves = {0}, - .battleAnimScript = Move_CHARGE, + .battleAnimScript = gBattleAnimMove_Charge, }, [MOVE_TAUNT] = @@ -6839,7 +6839,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_TAUNT, .contestComboMoves = {0}, - .battleAnimScript = Move_TAUNT, + .battleAnimScript = gBattleAnimMove_Taunt, }, [MOVE_HELPING_HAND] = @@ -6867,7 +6867,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HELPING_HAND, + .battleAnimScript = gBattleAnimMove_HelpingHand, }, [MOVE_TRICK] = @@ -6892,7 +6892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRICK, + .battleAnimScript = gBattleAnimMove_Trick, }, [MOVE_ROLE_PLAY] = @@ -6917,7 +6917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROLE_PLAY, + .battleAnimScript = gBattleAnimMove_RolePlay, }, [MOVE_WISH] = @@ -6943,7 +6943,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WISH, + .battleAnimScript = gBattleAnimMove_Wish, }, [MOVE_ASSIST] = @@ -6973,7 +6973,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ASSIST, + .battleAnimScript = gBattleAnimMove_Assist, }, [MOVE_INGRAIN] = @@ -6999,7 +6999,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INGRAIN, + .battleAnimScript = gBattleAnimMove_Ingrain, }, [MOVE_SUPERPOWER] = @@ -7025,7 +7025,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_SUPERPOWER, + .battleAnimScript = gBattleAnimMove_Superpower, }, [MOVE_MAGIC_COAT] = @@ -7049,7 +7049,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGIC_COAT, + .battleAnimScript = gBattleAnimMove_MagicCoat, }, [MOVE_RECYCLE] = @@ -7074,7 +7074,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RECYCLE, + .battleAnimScript = gBattleAnimMove_Recycle, }, [MOVE_REVENGE] = @@ -7094,7 +7094,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_REVENGE, .contestComboMoves = {COMBO_STARTER_PAYBACK}, - .battleAnimScript = Move_REVENGE, + .battleAnimScript = gBattleAnimMove_Revenge, }, [MOVE_BRICK_BREAK] = @@ -7116,7 +7116,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_BRICK_BREAK, + .battleAnimScript = gBattleAnimMove_BrickBreak, }, [MOVE_YAWN] = @@ -7139,7 +7139,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_YAWN, .contestComboMoves = {0}, - .battleAnimScript = Move_YAWN, + .battleAnimScript = gBattleAnimMove_Yawn, }, [MOVE_KNOCK_OFF] = @@ -7164,7 +7164,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, - .battleAnimScript = Move_KNOCK_OFF, + .battleAnimScript = gBattleAnimMove_KnockOff, }, [MOVE_ENDEAVOR] = @@ -7187,7 +7187,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, - .battleAnimScript = Move_ENDEAVOR, + .battleAnimScript = gBattleAnimMove_Endeavor, }, [MOVE_ERUPTION] = @@ -7208,7 +7208,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_ENDURE, COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_ERUPTION, + .battleAnimScript = gBattleAnimMove_Eruption, }, [MOVE_SKILL_SWAP] = @@ -7231,7 +7231,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKILL_SWAP, + .battleAnimScript = gBattleAnimMove_SkillSwap, }, [MOVE_IMPRISON] = @@ -7258,7 +7258,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_IMPRISON, + .battleAnimScript = gBattleAnimMove_Imprison, }, [MOVE_REFRESH] = @@ -7283,7 +7283,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SING, COMBO_STARTER_WATER_SPORT}, - .battleAnimScript = Move_REFRESH, + .battleAnimScript = gBattleAnimMove_Refresh, }, [MOVE_GRUDGE] = @@ -7308,7 +7308,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, - .battleAnimScript = Move_GRUDGE, + .battleAnimScript = gBattleAnimMove_Grudge, }, [MOVE_SNATCH] = @@ -7335,7 +7335,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SNATCH, + .battleAnimScript = gBattleAnimMove_Snatch, }, [MOVE_SECRET_POWER] = @@ -7360,7 +7360,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SECRET_POWER, + .battleAnimScript = gBattleAnimMove_SecretPower, }, [MOVE_DIVE] = @@ -7387,7 +7387,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_DIVE, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SURF}, - .battleAnimScript = Move_DIVE, + .battleAnimScript = gBattleAnimMove_Dive, }, [MOVE_ARM_THRUST] = @@ -7409,7 +7409,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_ARM_THRUST, + .battleAnimScript = gBattleAnimMove_ArmThrust, }, [MOVE_CAMOUFLAGE] = @@ -7434,7 +7434,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CAMOUFLAGE, + .battleAnimScript = gBattleAnimMove_Camouflage, }, [MOVE_TAIL_GLOW] = @@ -7459,7 +7459,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TAIL_GLOW, + .battleAnimScript = gBattleAnimMove_TailGlow, }, [MOVE_LUSTER_PURGE] = @@ -7484,7 +7484,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_LUSTER_PURGE, + .battleAnimScript = gBattleAnimMove_LusterPurge, }, [MOVE_MIST_BALL] = @@ -7510,7 +7510,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_MIST_BALL, + .battleAnimScript = gBattleAnimMove_MistBall, }, [MOVE_FEATHER_DANCE] = @@ -7534,7 +7534,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FEATHER_DANCE, + .battleAnimScript = gBattleAnimMove_FeatherDance, }, [MOVE_TEETER_DANCE] = @@ -7558,7 +7558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TEETER_DANCE, + .battleAnimScript = gBattleAnimMove_TeeterDance, }, [MOVE_BLAZE_KICK] = @@ -7585,7 +7585,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_BLAZE_KICK, + .battleAnimScript = gBattleAnimMove_BlazeKick, }, [MOVE_MUD_SPORT] = @@ -7610,7 +7610,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MUD_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM, COMBO_STARTER_WATER_SPORT}, - .battleAnimScript = Move_MUD_SPORT, + .battleAnimScript = gBattleAnimMove_MudSport, }, [MOVE_ICE_BALL] = @@ -7635,7 +7635,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_ICE_BALL, + .battleAnimScript = gBattleAnimMove_IceBall, }, [MOVE_NEEDLE_ARM] = @@ -7662,7 +7662,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NEEDLE_ARM, + .battleAnimScript = gBattleAnimMove_NeedleArm, }, [MOVE_SLACK_OFF] = @@ -7688,7 +7688,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SLACK_OFF, + .battleAnimScript = gBattleAnimMove_SlackOff, }, [MOVE_HYPER_VOICE] = @@ -7711,7 +7711,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HYPER_VOICE, + .battleAnimScript = gBattleAnimMove_HyperVoice, }, [MOVE_POISON_FANG] = @@ -7738,7 +7738,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_FANG, + .battleAnimScript = gBattleAnimMove_PoisonFang, }, [MOVE_CRUSH_CLAW] = @@ -7764,7 +7764,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_CRUSH_CLAW, + .battleAnimScript = gBattleAnimMove_CrushClaw, }, [MOVE_BLAST_BURN] = @@ -7789,7 +7789,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_BLAST_BURN, + .battleAnimScript = gBattleAnimMove_BlastBurn, }, [MOVE_HYDRO_CANNON] = @@ -7814,7 +7814,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_HYDRO_CANNON, + .battleAnimScript = gBattleAnimMove_HydroCannon, }, [MOVE_METEOR_MASH] = @@ -7842,7 +7842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_METEOR_MASH, + .battleAnimScript = gBattleAnimMove_MeteorMash, }, [MOVE_ASTONISH] = @@ -7869,7 +7869,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ASTONISH, + .battleAnimScript = gBattleAnimMove_Astonish, }, [MOVE_WEATHER_BALL] = @@ -7892,7 +7892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SANDSTORM, COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_WEATHER_BALL, + .battleAnimScript = gBattleAnimMove_WeatherBall, }, [MOVE_AROMATHERAPY] = @@ -7917,7 +7917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AROMATHERAPY, + .battleAnimScript = gBattleAnimMove_Aromatherapy, }, [MOVE_FAKE_TEARS] = @@ -7940,7 +7940,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FAKE_TEARS, + .battleAnimScript = gBattleAnimMove_FakeTears, }, [MOVE_AIR_CUTTER] = @@ -7964,7 +7964,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AIR_CUTTER, + .battleAnimScript = gBattleAnimMove_AirCutter, }, [MOVE_OVERHEAT] = @@ -7990,7 +7990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_OVERHEAT, + .battleAnimScript = gBattleAnimMove_Overheat, }, [MOVE_ODOR_SLEUTH] = @@ -8014,7 +8014,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ODOR_SLEUTH, + .battleAnimScript = gBattleAnimMove_OdorSleuth, }, [MOVE_ROCK_TOMB] = @@ -8039,7 +8039,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, - .battleAnimScript = Move_ROCK_TOMB, + .battleAnimScript = gBattleAnimMove_RockTomb, }, [MOVE_SILVER_WIND] = @@ -8066,7 +8066,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SILVER_WIND, + .battleAnimScript = gBattleAnimMove_SilverWind, }, [MOVE_METAL_SOUND] = @@ -8091,7 +8091,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_METAL_SOUND, .contestComboMoves = {0}, - .battleAnimScript = Move_METAL_SOUND, + .battleAnimScript = gBattleAnimMove_MetalSound, }, [MOVE_GRASS_WHISTLE] = @@ -8116,7 +8116,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRASS_WHISTLE, + .battleAnimScript = gBattleAnimMove_GrassWhistle, }, [MOVE_TICKLE] = @@ -8139,7 +8139,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TICKLE, + .battleAnimScript = gBattleAnimMove_Tickle, }, [MOVE_COSMIC_POWER] = @@ -8164,7 +8164,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COSMIC_POWER, + .battleAnimScript = gBattleAnimMove_CosmicPower, }, [MOVE_WATER_SPOUT] = @@ -8185,7 +8185,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WATER_SPOUT, + .battleAnimScript = gBattleAnimMove_WaterSpout, }, [MOVE_SIGNAL_BEAM] = @@ -8210,7 +8210,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SIGNAL_BEAM, + .battleAnimScript = gBattleAnimMove_SignalBeam, }, [MOVE_SHADOW_PUNCH] = @@ -8233,7 +8233,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_PUNCH, + .battleAnimScript = gBattleAnimMove_ShadowPunch, }, [MOVE_EXTRASENSORY] = @@ -8259,7 +8259,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EXTRASENSORY, + .battleAnimScript = gBattleAnimMove_Extrasensory, }, [MOVE_SKY_UPPERCUT] = @@ -8283,7 +8283,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_SKY_UPPERCUT, + .battleAnimScript = gBattleAnimMove_SkyUppercut, }, [MOVE_SAND_TOMB] = @@ -8307,7 +8307,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_SAND_TOMB, + .battleAnimScript = gBattleAnimMove_SandTomb, }, [MOVE_SHEER_COLD] = @@ -8328,7 +8328,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_SHEER_COLD, + .battleAnimScript = gBattleAnimMove_SheerCold, }, [MOVE_MUDDY_WATER] = @@ -8354,7 +8354,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_MUDDY_WATER, + .battleAnimScript = gBattleAnimMove_MuddyWater, }, [MOVE_BULLET_SEED] = @@ -8376,7 +8376,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_BULLET_SEED, + .battleAnimScript = gBattleAnimMove_BulletSeed, }, [MOVE_AERIAL_ACE] = @@ -8399,7 +8399,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AERIAL_ACE, + .battleAnimScript = gBattleAnimMove_AerialAce, }, [MOVE_ICICLE_SPEAR] = @@ -8420,7 +8420,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ICICLE_SPEAR, + .battleAnimScript = gBattleAnimMove_IcicleSpear, }, [MOVE_IRON_DEFENSE] = @@ -8445,7 +8445,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_IRON_DEFENSE, + .battleAnimScript = gBattleAnimMove_IronDefense, }, [MOVE_BLOCK] = @@ -8469,7 +8469,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BLOCK, + .battleAnimScript = gBattleAnimMove_Block, }, [MOVE_HOWL] = @@ -8495,7 +8495,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HOWL, + .battleAnimScript = gBattleAnimMove_Howl, }, [MOVE_DRAGON_CLAW] = @@ -8517,7 +8517,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_CLAW, + .battleAnimScript = gBattleAnimMove_DragonClaw, }, [MOVE_FRENZY_PLANT] = @@ -8543,7 +8543,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_FRENZY_PLANT, + .battleAnimScript = gBattleAnimMove_FrenzyPlant, }, [MOVE_BULK_UP] = @@ -8568,7 +8568,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BULK_UP, + .battleAnimScript = gBattleAnimMove_BulkUp, }, [MOVE_BOUNCE] = @@ -8599,7 +8599,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BOUNCE, + .battleAnimScript = gBattleAnimMove_Bounce, }, [MOVE_MUD_SHOT] = @@ -8624,7 +8624,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_MUD_SHOT, + .battleAnimScript = gBattleAnimMove_MudShot, }, [MOVE_POISON_TAIL] = @@ -8651,7 +8651,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_TAIL, + .battleAnimScript = gBattleAnimMove_PoisonTail, }, [MOVE_COVET] = @@ -8680,7 +8680,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COVET, + .battleAnimScript = gBattleAnimMove_Covet, }, [MOVE_VOLT_TACKLE] = @@ -8709,7 +8709,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_VOLT_TACKLE, + .battleAnimScript = gBattleAnimMove_VoltTackle, }, [MOVE_MAGICAL_LEAF] = @@ -8730,7 +8730,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_MAGICAL_LEAF, + .battleAnimScript = gBattleAnimMove_MagicalLeaf, }, [MOVE_WATER_SPORT] = @@ -8755,7 +8755,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_WATER_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WATER_SPORT, + .battleAnimScript = gBattleAnimMove_WaterSport, }, [MOVE_CALM_MIND] = @@ -8780,7 +8780,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CALM_MIND, .contestComboMoves = {0}, - .battleAnimScript = Move_CALM_MIND, + .battleAnimScript = gBattleAnimMove_CalmMind, }, [MOVE_LEAF_BLADE] = @@ -8804,7 +8804,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LEAF_BLADE, + .battleAnimScript = gBattleAnimMove_LeafBlade, }, [MOVE_DRAGON_DANCE] = @@ -8830,7 +8830,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_DANCE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_DANCE, + .battleAnimScript = gBattleAnimMove_DragonDance, }, [MOVE_ROCK_BLAST] = @@ -8852,7 +8852,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_BLAST, + .battleAnimScript = gBattleAnimMove_RockBlast, }, [MOVE_SHOCK_WAVE] = @@ -8873,7 +8873,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_SHOCK_WAVE, + .battleAnimScript = gBattleAnimMove_ShockWave, }, [MOVE_WATER_PULSE] = @@ -8899,7 +8899,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WATER_PULSE, + .battleAnimScript = gBattleAnimMove_WaterPulse, }, [MOVE_DOOM_DESIRE] = @@ -8922,7 +8922,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DOOM_DESIRE, + .battleAnimScript = gBattleAnimMove_DoomDesire, }, [MOVE_PSYCHO_BOOST] = @@ -8947,7 +8947,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_PSYCHO_BOOST, + .battleAnimScript = gBattleAnimMove_PsychoBoost, }, [MOVE_ROOST] = @@ -8973,7 +8973,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_BRAVE_BIRD}, - .battleAnimScript = Move_ROOST, + .battleAnimScript = gBattleAnimMove_Roost, }, [MOVE_GRAVITY] = @@ -8998,7 +8998,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRAVITY, + .battleAnimScript = gBattleAnimMove_Gravity, }, [MOVE_MIRACLE_EYE] = @@ -9022,7 +9022,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIRACLE_EYE, + .battleAnimScript = gBattleAnimMove_MiracleEye, }, [MOVE_WAKE_UP_SLAP] = @@ -9048,7 +9048,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WAKE_UP_SLAP, + .battleAnimScript = gBattleAnimMove_WakeUpSlap, }, [MOVE_HAMMER_ARM] = @@ -9075,7 +9075,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_HAMMER_ARM, + .battleAnimScript = gBattleAnimMove_HammerArm, }, [MOVE_GYRO_BALL] = @@ -9098,7 +9098,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GYRO_BALL, + .battleAnimScript = gBattleAnimMove_GyroBall, }, [MOVE_HEALING_WISH] = @@ -9121,7 +9121,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEALING_WISH, + .battleAnimScript = gBattleAnimMove_HealingWish, }, [MOVE_BRINE] = @@ -9142,7 +9142,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_BRINE, + .battleAnimScript = gBattleAnimMove_Brine, }, [MOVE_NATURAL_GIFT] = @@ -9163,7 +9163,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NATURAL_GIFT, + .battleAnimScript = gBattleAnimMove_NaturalGift, }, [MOVE_FEINT] = @@ -9190,7 +9190,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FEINT, + .battleAnimScript = gBattleAnimMove_Feint, }, [MOVE_PLUCK] = @@ -9213,7 +9213,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PLUCK, + .battleAnimScript = gBattleAnimMove_Pluck, }, [MOVE_TAILWIND] = @@ -9239,7 +9239,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TAILWIND, + .battleAnimScript = gBattleAnimMove_Tailwind, }, [MOVE_ACUPRESSURE] = @@ -9264,7 +9264,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACUPRESSURE, + .battleAnimScript = gBattleAnimMove_Acupressure, }, [MOVE_METAL_BURST] = @@ -9286,7 +9286,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, - .battleAnimScript = Move_METAL_BURST, + .battleAnimScript = gBattleAnimMove_MetalBurst, }, [MOVE_U_TURN] = @@ -9306,7 +9306,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_U_TURN, + .battleAnimScript = gBattleAnimMove_UTurn, }, [MOVE_CLOSE_COMBAT] = @@ -9330,7 +9330,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_CLOSE_COMBAT, + .battleAnimScript = gBattleAnimMove_CloseCombat, }, [MOVE_PAYBACK] = @@ -9352,7 +9352,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_PAYBACK, .contestComboMoves = {COMBO_STARTER_REVENGE}, - .battleAnimScript = Move_PAYBACK, + .battleAnimScript = gBattleAnimMove_Payback, }, [MOVE_ASSURANCE] = @@ -9374,7 +9374,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PAYBACK, COMBO_STARTER_REVENGE}, - .battleAnimScript = Move_ASSURANCE, + .battleAnimScript = gBattleAnimMove_Assurance, }, [MOVE_EMBARGO] = @@ -9397,7 +9397,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EMBARGO, + .battleAnimScript = gBattleAnimMove_Embargo, }, [MOVE_FLING] = @@ -9419,7 +9419,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLING, + .battleAnimScript = gBattleAnimMove_Fling, }, [MOVE_PSYCHO_SHIFT] = @@ -9441,7 +9441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCHO_SHIFT, + .battleAnimScript = gBattleAnimMove_PsychoShift, }, [MOVE_TRUMP_CARD] = @@ -9463,7 +9463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRUMP_CARD, + .battleAnimScript = gBattleAnimMove_TrumpCard, }, [MOVE_HEAL_BLOCK] = @@ -9486,7 +9486,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAL_BLOCK, + .battleAnimScript = gBattleAnimMove_HealBlock, }, [MOVE_WRING_OUT] = @@ -9507,7 +9507,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WRING_OUT, + .battleAnimScript = gBattleAnimMove_WringOut, }, [MOVE_POWER_TRICK] = @@ -9532,7 +9532,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_TRICK, + .battleAnimScript = gBattleAnimMove_PowerTrick, }, [MOVE_GASTRO_ACID] = @@ -9555,7 +9555,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GASTRO_ACID, + .battleAnimScript = gBattleAnimMove_GastroAcid, }, [MOVE_LUCKY_CHANT] = @@ -9580,7 +9580,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_LUCKY_CHANT, .contestComboMoves = {COMBO_STARTER_HEAL_BELL}, - .battleAnimScript = Move_LUCKY_CHANT, + .battleAnimScript = gBattleAnimMove_LuckyChant, }, [MOVE_ME_FIRST] = @@ -9612,7 +9612,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ME_FIRST, + .battleAnimScript = gBattleAnimMove_MeFirst, }, [MOVE_COPYCAT] = @@ -9643,7 +9643,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COPYCAT, + .battleAnimScript = gBattleAnimMove_Copycat, }, [MOVE_POWER_SWAP] = @@ -9666,7 +9666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_SWAP, + .battleAnimScript = gBattleAnimMove_PowerSwap, }, [MOVE_GUARD_SWAP] = @@ -9689,7 +9689,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GUARD_SWAP, + .battleAnimScript = gBattleAnimMove_GuardSwap, }, [MOVE_PUNISHMENT] = @@ -9711,7 +9711,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PUNISHMENT, + .battleAnimScript = gBattleAnimMove_Punishment, }, [MOVE_LAST_RESORT] = @@ -9733,7 +9733,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LAST_RESORT, + .battleAnimScript = gBattleAnimMove_LastResort, }, [MOVE_WORRY_SEED] = @@ -9756,7 +9756,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_WORRY_SEED, .contestComboMoves = {COMBO_STARTER_LEECH_SEED}, - .battleAnimScript = Move_WORRY_SEED, + .battleAnimScript = gBattleAnimMove_WorrySeed, }, [MOVE_SUCKER_PUNCH] = @@ -9776,7 +9776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SUCKER_PUNCH, + .battleAnimScript = gBattleAnimMove_SuckerPunch, }, [MOVE_TOXIC_SPIKES] = @@ -9803,7 +9803,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TOXIC_SPIKES, + .battleAnimScript = gBattleAnimMove_ToxicSpikes, }, [MOVE_HEART_SWAP] = @@ -9826,7 +9826,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEART_SWAP, + .battleAnimScript = gBattleAnimMove_HeartSwap, }, [MOVE_AQUA_RING] = @@ -9851,7 +9851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AQUA_RING, + .battleAnimScript = gBattleAnimMove_AquaRing, }, [MOVE_MAGNET_RISE] = @@ -9877,7 +9877,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGNET_RISE, + .battleAnimScript = gBattleAnimMove_MagnetRise, }, [MOVE_FLARE_BLITZ] = @@ -9905,7 +9905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FLARE_BLITZ, + .battleAnimScript = gBattleAnimMove_FlareBlitz, }, [MOVE_FORCE_PALM] = @@ -9931,7 +9931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FORCE_PALM, + .battleAnimScript = gBattleAnimMove_ForcePalm, }, [MOVE_AURA_SPHERE] = @@ -9954,7 +9954,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AURA_SPHERE, + .battleAnimScript = gBattleAnimMove_AuraSphere, }, [MOVE_ROCK_POLISH] = @@ -9979,7 +9979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_POLISH, + .battleAnimScript = gBattleAnimMove_RockPolish, }, [MOVE_POISON_JAB] = @@ -10005,7 +10005,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_JAB, + .battleAnimScript = gBattleAnimMove_PoisonJab, }, [MOVE_DARK_PULSE] = @@ -10031,7 +10031,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DARK_PULSE, + .battleAnimScript = gBattleAnimMove_DarkPulse, }, [MOVE_NIGHT_SLASH] = @@ -10055,7 +10055,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NIGHT_SLASH, + .battleAnimScript = gBattleAnimMove_NightSlash, }, [MOVE_AQUA_TAIL] = @@ -10077,7 +10077,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_AQUA_TAIL, + .battleAnimScript = gBattleAnimMove_AquaTail, }, [MOVE_SEED_BOMB] = @@ -10099,7 +10099,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SEED_BOMB, + .battleAnimScript = gBattleAnimMove_SeedBomb, }, [MOVE_AIR_SLASH] = @@ -10125,7 +10125,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AIR_SLASH, + .battleAnimScript = gBattleAnimMove_AirSlash, }, [MOVE_X_SCISSOR] = @@ -10148,7 +10148,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_X_SCISSOR, + .battleAnimScript = gBattleAnimMove_XScissor, }, [MOVE_BUG_BUZZ] = @@ -10175,7 +10175,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BUG_BUZZ, + .battleAnimScript = gBattleAnimMove_BugBuzz, }, [MOVE_DRAGON_PULSE] = @@ -10197,7 +10197,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAGON_PULSE, + .battleAnimScript = gBattleAnimMove_DragonPulse, }, [MOVE_DRAGON_RUSH] = @@ -10224,7 +10224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_RUSH, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_RUSH, + .battleAnimScript = gBattleAnimMove_DragonRush, }, [MOVE_POWER_GEM] = @@ -10245,7 +10245,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_GEM, + .battleAnimScript = gBattleAnimMove_PowerGem, }, [MOVE_DRAIN_PUNCH] = @@ -10267,7 +10267,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_DRAIN_PUNCH, + .battleAnimScript = gBattleAnimMove_DrainPunch, }, [MOVE_VACUUM_WAVE] = @@ -10288,7 +10288,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_VACUUM_WAVE, + .battleAnimScript = gBattleAnimMove_VacuumWave, }, [MOVE_FOCUS_BLAST] = @@ -10314,7 +10314,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_FOCUS_BLAST, + .battleAnimScript = gBattleAnimMove_FocusBlast, }, [MOVE_ENERGY_BALL] = @@ -10340,7 +10340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_ENERGY_BALL, + .battleAnimScript = gBattleAnimMove_EnergyBall, }, [MOVE_BRAVE_BIRD] = @@ -10363,7 +10363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_BRAVE_BIRD, .contestComboMoves = {0}, - .battleAnimScript = Move_BRAVE_BIRD, + .battleAnimScript = gBattleAnimMove_BraveBird, }, [MOVE_EARTH_POWER] = @@ -10389,7 +10389,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EARTH_POWER, + .battleAnimScript = gBattleAnimMove_EarthPower, }, [MOVE_SWITCHEROO] = @@ -10414,7 +10414,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SWITCHEROO, + .battleAnimScript = gBattleAnimMove_Switcheroo, }, [MOVE_GIGA_IMPACT] = @@ -10438,7 +10438,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GIGA_IMPACT, + .battleAnimScript = gBattleAnimMove_GigaImpact, }, [MOVE_NASTY_PLOT] = @@ -10463,7 +10463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NASTY_PLOT, + .battleAnimScript = gBattleAnimMove_NastyPlot, }, [MOVE_BULLET_PUNCH] = @@ -10486,7 +10486,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BULLET_PUNCH, + .battleAnimScript = gBattleAnimMove_BulletPunch, }, [MOVE_AVALANCHE] = @@ -10506,7 +10506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AVALANCHE, + .battleAnimScript = gBattleAnimMove_Avalanche, }, [MOVE_ICE_SHARD] = @@ -10527,7 +10527,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ICE_SHARD, + .battleAnimScript = gBattleAnimMove_IceShard, }, [MOVE_SHADOW_CLAW] = @@ -10550,7 +10550,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_CLAW, + .battleAnimScript = gBattleAnimMove_ShadowClaw, }, [MOVE_THUNDER_FANG] = @@ -10581,7 +10581,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_THUNDER_FANG, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_FANG, COMBO_STARTER_ICE_FANG}, - .battleAnimScript = Move_THUNDER_FANG, + .battleAnimScript = gBattleAnimMove_ThunderFang, }, [MOVE_ICE_FANG] = @@ -10616,7 +10616,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_ICE_FANG, .contestComboMoves = {COMBO_STARTER_FIRE_FANG, COMBO_STARTER_THUNDER_FANG}, - .battleAnimScript = Move_ICE_FANG, + .battleAnimScript = gBattleAnimMove_IceFang, }, [MOVE_FIRE_FANG] = @@ -10647,7 +10647,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_FIRE_FANG, .contestComboMoves = {COMBO_STARTER_ICE_FANG, COMBO_STARTER_THUNDER_FANG}, - .battleAnimScript = Move_FIRE_FANG, + .battleAnimScript = gBattleAnimMove_FireFang, }, [MOVE_SHADOW_SNEAK] = @@ -10669,7 +10669,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_SNEAK, + .battleAnimScript = gBattleAnimMove_ShadowSneak, }, [MOVE_MUD_BOMB] = @@ -10695,7 +10695,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MUD_BOMB, + .battleAnimScript = gBattleAnimMove_MudBomb, }, [MOVE_PSYCHO_CUT] = @@ -10718,7 +10718,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCHO_CUT, + .battleAnimScript = gBattleAnimMove_PsychoCut, }, [MOVE_ZEN_HEADBUTT] = @@ -10744,7 +10744,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ZEN_HEADBUTT, + .battleAnimScript = gBattleAnimMove_ZenHeadbutt, }, [MOVE_MIRROR_SHOT] = @@ -10769,7 +10769,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIRROR_SHOT, + .battleAnimScript = gBattleAnimMove_MirrorShot, }, [MOVE_FLASH_CANNON] = @@ -10794,7 +10794,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLASH_CANNON, + .battleAnimScript = gBattleAnimMove_FlashCannon, }, [MOVE_ROCK_CLIMB] = @@ -10820,7 +10820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_CLIMB, + .battleAnimScript = gBattleAnimMove_RockClimb, }, [MOVE_DEFOG] = @@ -10844,7 +10844,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DEFOG, + .battleAnimScript = gBattleAnimMove_Defog, }, [MOVE_TRICK_ROOM] = @@ -10867,7 +10867,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRICK_ROOM, + .battleAnimScript = gBattleAnimMove_TrickRoom, }, [MOVE_DRACO_METEOR] = @@ -10892,7 +10892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRACO_METEOR, + .battleAnimScript = gBattleAnimMove_DracoMeteor, }, [MOVE_DISCHARGE] = @@ -10917,7 +10917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_DISCHARGE, + .battleAnimScript = gBattleAnimMove_Discharge, }, [MOVE_LAVA_PLUME] = @@ -10940,7 +10940,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_LAVA_PLUME, + .battleAnimScript = gBattleAnimMove_LavaPlume, }, [MOVE_LEAF_STORM] = @@ -10965,7 +10965,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LEAF_STORM, + .battleAnimScript = gBattleAnimMove_LeafStorm, }, [MOVE_POWER_WHIP] = @@ -10987,7 +10987,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_POWER_WHIP, + .battleAnimScript = gBattleAnimMove_PowerWhip, }, [MOVE_ROCK_WRECKER] = @@ -11011,7 +11011,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_WRECKER, + .battleAnimScript = gBattleAnimMove_RockWrecker, }, [MOVE_CROSS_POISON] = @@ -11039,7 +11039,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CROSS_POISON, + .battleAnimScript = gBattleAnimMove_CrossPoison, }, [MOVE_GUNK_SHOT] = @@ -11064,7 +11064,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GUNK_SHOT, + .battleAnimScript = gBattleAnimMove_GunkShot, }, [MOVE_IRON_HEAD] = @@ -11090,7 +11090,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_IRON_HEAD, + .battleAnimScript = gBattleAnimMove_IronHead, }, [MOVE_MAGNET_BOMB] = @@ -11112,7 +11112,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGNET_BOMB, + .battleAnimScript = gBattleAnimMove_MagnetBomb, }, [MOVE_STONE_EDGE] = @@ -11134,7 +11134,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STONE_EDGE, + .battleAnimScript = gBattleAnimMove_StoneEdge, }, [MOVE_CAPTIVATE] = @@ -11157,7 +11157,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_CAPTIVATE, + .battleAnimScript = gBattleAnimMove_Captivate, }, [MOVE_STEALTH_ROCK] = @@ -11183,7 +11183,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEALTH_ROCK, + .battleAnimScript = gBattleAnimMove_StealthRock, }, [MOVE_GRASS_KNOT] = @@ -11206,7 +11206,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRASS_KNOT, + .battleAnimScript = gBattleAnimMove_GrassKnot, }, [MOVE_CHATTER] = @@ -11246,7 +11246,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CHATTER, + .battleAnimScript = gBattleAnimMove_Chatter, }, [MOVE_JUDGMENT] = @@ -11268,7 +11268,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_JUDGMENT, + .battleAnimScript = gBattleAnimMove_Judgment, }, [MOVE_BUG_BITE] = @@ -11291,7 +11291,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BUG_BITE, + .battleAnimScript = gBattleAnimMove_BugBite, }, [MOVE_CHARGE_BEAM] = @@ -11317,7 +11317,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_CHARGE_BEAM, + .battleAnimScript = gBattleAnimMove_ChargeBeam, }, [MOVE_WOOD_HAMMER] = @@ -11340,7 +11340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WOOD_HAMMER, + .battleAnimScript = gBattleAnimMove_WoodHammer, }, [MOVE_AQUA_JET] = @@ -11362,7 +11362,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_AQUA_JET, + .battleAnimScript = gBattleAnimMove_AquaJet, }, [MOVE_ATTACK_ORDER] = @@ -11384,7 +11384,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_ATTACK_ORDER, .contestComboMoves = {COMBO_STARTER_DEFEND_ORDER, COMBO_STARTER_HEAL_ORDER}, - .battleAnimScript = Move_ATTACK_ORDER, + .battleAnimScript = gBattleAnimMove_AttackOrder, }, [MOVE_DEFEND_ORDER] = @@ -11409,7 +11409,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_DEFEND_ORDER, .contestComboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_HEAL_ORDER}, - .battleAnimScript = Move_DEFEND_ORDER, + .battleAnimScript = gBattleAnimMove_DefendOrder, }, [MOVE_HEAL_ORDER] = @@ -11435,7 +11435,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HEAL_ORDER, .contestComboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_DEFEND_ORDER}, - .battleAnimScript = Move_HEAL_ORDER, + .battleAnimScript = gBattleAnimMove_HealOrder, }, [MOVE_HEAD_SMASH] = @@ -11458,7 +11458,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAD_SMASH, + .battleAnimScript = gBattleAnimMove_HeadSmash, }, [MOVE_DOUBLE_HIT] = @@ -11481,7 +11481,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DOUBLE_HIT, + .battleAnimScript = gBattleAnimMove_DoubleHit, }, [MOVE_ROAR_OF_TIME] = @@ -11506,7 +11506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROAR_OF_TIME, + .battleAnimScript = gBattleAnimMove_RoarOfTime, }, [MOVE_SPACIAL_REND] = @@ -11528,7 +11528,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPACIAL_REND, + .battleAnimScript = gBattleAnimMove_SpacialRend, }, [MOVE_LUNAR_DANCE] = @@ -11552,7 +11552,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LUNAR_DANCE, + .battleAnimScript = gBattleAnimMove_LunarDance, }, [MOVE_CRUSH_GRIP] = @@ -11573,7 +11573,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CRUSH_GRIP, + .battleAnimScript = gBattleAnimMove_CrushGrip, }, [MOVE_MAGMA_STORM] = @@ -11597,7 +11597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_MAGMA_STORM, + .battleAnimScript = gBattleAnimMove_MagmaStorm, }, [MOVE_DARK_VOID] = @@ -11621,7 +11621,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DARK_VOID, + .battleAnimScript = gBattleAnimMove_DarkVoid, }, [MOVE_SEED_FLARE] = @@ -11646,7 +11646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SEED_FLARE, + .battleAnimScript = gBattleAnimMove_SeedFlare, }, [MOVE_OMINOUS_WIND] = @@ -11673,7 +11673,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OMINOUS_WIND, + .battleAnimScript = gBattleAnimMove_OminousWind, }, [MOVE_SHADOW_FORCE] = @@ -11702,7 +11702,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_FORCE, + .battleAnimScript = gBattleAnimMove_ShadowForce, }, [MOVE_HONE_CLAWS] = @@ -11727,7 +11727,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HONE_CLAWS, + .battleAnimScript = gBattleAnimMove_HoneClaws, }, [MOVE_WIDE_GUARD] = @@ -11754,7 +11754,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WIDE_GUARD, + .battleAnimScript = gBattleAnimMove_WideGuard, }, [MOVE_GUARD_SPLIT] = @@ -11777,7 +11777,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GUARD_SPLIT, + .battleAnimScript = gBattleAnimMove_GuardSplit, }, [MOVE_POWER_SPLIT] = @@ -11800,7 +11800,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_SPLIT, + .battleAnimScript = gBattleAnimMove_PowerSplit, }, [MOVE_WONDER_ROOM] = @@ -11823,7 +11823,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WONDER_ROOM, + .battleAnimScript = gBattleAnimMove_WonderRoom, }, [MOVE_PSYSHOCK] = @@ -11842,7 +11842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYSHOCK, + .battleAnimScript = gBattleAnimMove_Psyshock, }, [MOVE_VENOSHOCK] = @@ -11864,7 +11864,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, - .battleAnimScript = Move_VENOSHOCK, + .battleAnimScript = gBattleAnimMove_Venoshock, }, [MOVE_AUTOTOMIZE] = @@ -11889,7 +11889,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AUTOTOMIZE, + .battleAnimScript = gBattleAnimMove_Autotomize, }, [MOVE_RAGE_POWDER] = @@ -11917,7 +11917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RAGE_POWDER, + .battleAnimScript = gBattleAnimMove_RagePowder, }, [MOVE_TELEKINESIS] = @@ -11941,7 +11941,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TELEKINESIS, + .battleAnimScript = gBattleAnimMove_Telekinesis, }, [MOVE_MAGIC_ROOM] = @@ -11964,7 +11964,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGIC_ROOM, + .battleAnimScript = gBattleAnimMove_MagicRoom, }, [MOVE_SMACK_DOWN] = @@ -11990,7 +11990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SMACK_DOWN, + .battleAnimScript = gBattleAnimMove_SmackDown, }, [MOVE_STORM_THROW] = @@ -12011,7 +12011,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STORM_THROW, + .battleAnimScript = gBattleAnimMove_StormThrow, }, [MOVE_FLAME_BURST] = @@ -12036,7 +12036,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLAME_BURST, + .battleAnimScript = gBattleAnimMove_FlameBurst, }, [MOVE_SLUDGE_WAVE] = @@ -12061,7 +12061,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SLUDGE_WAVE, + .battleAnimScript = gBattleAnimMove_SludgeWave, }, [MOVE_QUIVER_DANCE] = @@ -12087,7 +12087,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_QUIVER_DANCE, + .battleAnimScript = gBattleAnimMove_QuiverDance, }, [MOVE_HEAVY_SLAM] = @@ -12109,7 +12109,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAVY_SLAM, + .battleAnimScript = gBattleAnimMove_HeavySlam, }, [MOVE_SYNCHRONOISE] = @@ -12130,7 +12130,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SYNCHRONOISE, + .battleAnimScript = gBattleAnimMove_Synchronoise, }, [MOVE_ELECTRO_BALL] = @@ -12152,7 +12152,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ELECTRO_BALL, + .battleAnimScript = gBattleAnimMove_ElectroBall, }, [MOVE_SOAK] = @@ -12175,7 +12175,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SOAK, + .battleAnimScript = gBattleAnimMove_Soak, }, [MOVE_FLAME_CHARGE] = @@ -12202,7 +12202,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLAME_CHARGE, + .battleAnimScript = gBattleAnimMove_FlameCharge, }, [MOVE_COIL] = @@ -12227,7 +12227,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COIL, + .battleAnimScript = gBattleAnimMove_Coil, }, [MOVE_LOW_SWEEP] = @@ -12253,7 +12253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LOW_SWEEP, + .battleAnimScript = gBattleAnimMove_LowSweep, }, [MOVE_ACID_SPRAY] = @@ -12279,7 +12279,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACID_SPRAY, + .battleAnimScript = gBattleAnimMove_AcidSpray, }, [MOVE_FOUL_PLAY] = @@ -12301,7 +12301,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FOUL_PLAY, + .battleAnimScript = gBattleAnimMove_FoulPlay, }, [MOVE_SIMPLE_BEAM] = @@ -12324,7 +12324,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SIMPLE_BEAM, + .battleAnimScript = gBattleAnimMove_SimpleBeam, }, [MOVE_ENTRAINMENT] = @@ -12347,7 +12347,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ENTRAINMENT, + .battleAnimScript = gBattleAnimMove_Entrainment, }, [MOVE_AFTER_YOU] = @@ -12373,7 +12373,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AFTER_YOU, + .battleAnimScript = gBattleAnimMove_AfterYou, }, [MOVE_ROUND] = @@ -12399,7 +12399,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROUND, + .battleAnimScript = gBattleAnimMove_Round, }, [MOVE_ECHOED_VOICE] = @@ -12422,7 +12422,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ECHOED_VOICE, + .battleAnimScript = gBattleAnimMove_EchoedVoice, }, [MOVE_CHIP_AWAY] = @@ -12443,7 +12443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CHIP_AWAY, + .battleAnimScript = gBattleAnimMove_ChipAway, }, [MOVE_CLEAR_SMOG] = @@ -12467,7 +12467,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CLEAR_SMOG, + .battleAnimScript = gBattleAnimMove_ClearSmog, }, [MOVE_STORED_POWER] = @@ -12488,7 +12488,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STORED_POWER, + .battleAnimScript = gBattleAnimMove_StoredPower, }, [MOVE_QUICK_GUARD] = @@ -12515,7 +12515,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_QUICK_GUARD, + .battleAnimScript = gBattleAnimMove_QuickGuard, }, [MOVE_ALLY_SWITCH] = @@ -12539,7 +12539,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ALLY_SWITCH, + .battleAnimScript = gBattleAnimMove_AllySwitch, }, [MOVE_SCALD] = @@ -12565,7 +12565,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCALD, .contestComboMoves = {0}, - .battleAnimScript = Move_SCALD, + .battleAnimScript = gBattleAnimMove_Scald, }, [MOVE_SHELL_SMASH] = @@ -12590,7 +12590,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHELL_SMASH, + .battleAnimScript = gBattleAnimMove_ShellSmash, }, [MOVE_HEAL_PULSE] = @@ -12616,7 +12616,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAL_PULSE, + .battleAnimScript = gBattleAnimMove_HealPulse, }, [MOVE_HEX] = @@ -12639,7 +12639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, - .battleAnimScript = Move_HEX, + .battleAnimScript = gBattleAnimMove_Hex, }, [MOVE_SKY_DROP] = @@ -12666,7 +12666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKY_DROP, + .battleAnimScript = gBattleAnimMove_SkyDrop, }, [MOVE_SHIFT_GEAR] = @@ -12691,7 +12691,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHIFT_GEAR, + .battleAnimScript = gBattleAnimMove_ShiftGear, }, [MOVE_CIRCLE_THROW] = @@ -12713,7 +12713,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CIRCLE_THROW, + .battleAnimScript = gBattleAnimMove_CircleThrow, }, [MOVE_INCINERATE] = @@ -12737,7 +12737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INCINERATE, + .battleAnimScript = gBattleAnimMove_Incinerate, }, [MOVE_QUASH] = @@ -12760,7 +12760,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_QUASH, + .battleAnimScript = gBattleAnimMove_Quash, }, [MOVE_ACROBATICS] = @@ -12782,7 +12782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACROBATICS, + .battleAnimScript = gBattleAnimMove_Acrobatics, }, [MOVE_REFLECT_TYPE] = @@ -12806,7 +12806,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_REFLECT_TYPE, + .battleAnimScript = gBattleAnimMove_ReflectType, }, [MOVE_RETALIATE] = @@ -12828,7 +12828,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RETALIATE, + .battleAnimScript = gBattleAnimMove_Retaliate, }, [MOVE_FINAL_GAMBIT] = @@ -12851,7 +12851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FINAL_GAMBIT, + .battleAnimScript = gBattleAnimMove_FinalGambit, }, [MOVE_BESTOW] = @@ -12878,7 +12878,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BESTOW, + .battleAnimScript = gBattleAnimMove_Bestow, }, [MOVE_INFERNO] = @@ -12903,7 +12903,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INFERNO, + .battleAnimScript = gBattleAnimMove_Inferno, }, [MOVE_WATER_PLEDGE] = @@ -12925,7 +12925,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WATER_PLEDGE, + .battleAnimScript = gBattleAnimMove_WaterPledge, }, [MOVE_FIRE_PLEDGE] = @@ -12947,7 +12947,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FIRE_PLEDGE, + .battleAnimScript = gBattleAnimMove_FirePledge, }, [MOVE_GRASS_PLEDGE] = @@ -12969,7 +12969,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRASS_PLEDGE, + .battleAnimScript = gBattleAnimMove_GrassPledge, }, [MOVE_VOLT_SWITCH] = @@ -12988,7 +12988,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_VOLT_SWITCH, + .battleAnimScript = gBattleAnimMove_VoltSwitch, }, [MOVE_STRUGGLE_BUG] = @@ -13013,7 +13013,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STRUGGLE_BUG, + .battleAnimScript = gBattleAnimMove_StruggleBug, }, [MOVE_BULLDOZE] = @@ -13039,7 +13039,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BULLDOZE, + .battleAnimScript = gBattleAnimMove_Bulldoze, }, [MOVE_FROST_BREATH] = @@ -13059,7 +13059,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FROST_BREATH, + .battleAnimScript = gBattleAnimMove_FrostBreath, }, [MOVE_DRAGON_TAIL] = @@ -13081,7 +13081,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_TAIL, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH}, - .battleAnimScript = Move_DRAGON_TAIL, + .battleAnimScript = gBattleAnimMove_DragonTail, }, [MOVE_WORK_UP] = @@ -13106,7 +13106,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WORK_UP, + .battleAnimScript = gBattleAnimMove_WorkUp, }, [MOVE_ELECTROWEB] = @@ -13131,7 +13131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ELECTROWEB, + .battleAnimScript = gBattleAnimMove_Electroweb, }, [MOVE_WILD_CHARGE] = @@ -13154,7 +13154,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WILD_CHARGE, + .battleAnimScript = gBattleAnimMove_WildCharge, }, [MOVE_DRILL_RUN] = @@ -13177,7 +13177,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRILL_RUN, + .battleAnimScript = gBattleAnimMove_DrillRun, }, [MOVE_DUAL_CHOP] = @@ -13200,7 +13200,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DUAL_CHOP, + .battleAnimScript = gBattleAnimMove_DualChop, }, [MOVE_HEART_STAMP] = @@ -13226,7 +13226,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEART_STAMP, + .battleAnimScript = gBattleAnimMove_HeartStamp, }, [MOVE_HORN_LEECH] = @@ -13247,7 +13247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HORN_LEECH, + .battleAnimScript = gBattleAnimMove_HornLeech, }, [MOVE_SACRED_SWORD] = @@ -13269,7 +13269,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SACRED_SWORD, + .battleAnimScript = gBattleAnimMove_SacredSword, }, [MOVE_RAZOR_SHELL] = @@ -13296,7 +13296,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RAZOR_SHELL, + .battleAnimScript = gBattleAnimMove_RazorShell, }, [MOVE_HEAT_CRASH] = @@ -13317,7 +13317,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAT_CRASH, + .battleAnimScript = gBattleAnimMove_HeatCrash, }, [MOVE_LEAF_TORNADO] = @@ -13343,7 +13343,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LEAF_TORNADO, + .battleAnimScript = gBattleAnimMove_LeafTornado, }, [MOVE_STEAMROLLER] = @@ -13370,7 +13370,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEAMROLLER, + .battleAnimScript = gBattleAnimMove_Steamroller, }, [MOVE_COTTON_GUARD] = @@ -13395,7 +13395,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COTTON_GUARD, + .battleAnimScript = gBattleAnimMove_CottonGuard, }, [MOVE_NIGHT_DAZE] = @@ -13420,7 +13420,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NIGHT_DAZE, + .battleAnimScript = gBattleAnimMove_NightDaze, }, [MOVE_PSYSTRIKE] = @@ -13439,7 +13439,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYSTRIKE, + .battleAnimScript = gBattleAnimMove_Psystrike, }, [MOVE_TAIL_SLAP] = @@ -13461,7 +13461,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TAIL_SLAP, + .battleAnimScript = gBattleAnimMove_TailSlap, }, [MOVE_HURRICANE] = @@ -13488,7 +13488,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HURRICANE, + .battleAnimScript = gBattleAnimMove_Hurricane, }, [MOVE_HEAD_CHARGE] = @@ -13511,7 +13511,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAD_CHARGE, + .battleAnimScript = gBattleAnimMove_HeadCharge, }, [MOVE_GEAR_GRIND] = @@ -13535,7 +13535,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GEAR_GRIND, + .battleAnimScript = gBattleAnimMove_GearGrind, }, [MOVE_SEARING_SHOT] = @@ -13559,7 +13559,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SEARING_SHOT, + .battleAnimScript = gBattleAnimMove_SearingShot, }, [MOVE_TECHNO_BLAST] = @@ -13582,7 +13582,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TECHNO_BLAST, + .battleAnimScript = gBattleAnimMove_TechnoBlast, }, [MOVE_RELIC_SONG] = @@ -13611,7 +13611,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RELIC_SONG, + .battleAnimScript = gBattleAnimMove_RelicSong, }, [MOVE_SECRET_SWORD] = @@ -13634,7 +13634,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SECRET_SWORD, + .battleAnimScript = gBattleAnimMove_SecretSword, }, [MOVE_GLACIATE] = @@ -13659,7 +13659,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GLACIATE, + .battleAnimScript = gBattleAnimMove_Glaciate, }, [MOVE_BOLT_STRIKE] = @@ -13685,7 +13685,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BOLT_STRIKE, + .battleAnimScript = gBattleAnimMove_BoltStrike, }, [MOVE_BLUE_FLARE] = @@ -13710,7 +13710,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BLUE_FLARE, + .battleAnimScript = gBattleAnimMove_BlueFlare, }, [MOVE_FIERY_DANCE] = @@ -13737,7 +13737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FIERY_DANCE, + .battleAnimScript = gBattleAnimMove_FieryDance, }, [MOVE_FREEZE_SHOCK] = @@ -13766,7 +13766,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FREEZE_SHOCK, + .battleAnimScript = gBattleAnimMove_FreezeShock, }, [MOVE_ICE_BURN] = @@ -13795,7 +13795,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ICE_BURN, + .battleAnimScript = gBattleAnimMove_IceBurn, }, [MOVE_SNARL] = @@ -13823,7 +13823,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SNARL, + .battleAnimScript = gBattleAnimMove_Snarl, }, [MOVE_ICICLE_CRASH] = @@ -13848,7 +13848,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ICICLE_CRASH, + .battleAnimScript = gBattleAnimMove_IcicleCrash, }, [MOVE_V_CREATE] = @@ -13876,7 +13876,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_V_CREATE, + .battleAnimScript = gBattleAnimMove_VCreate, }, [MOVE_FUSION_FLARE] = @@ -13898,7 +13898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FUSION_FLARE, + .battleAnimScript = gBattleAnimMove_FusionFlare, }, [MOVE_FUSION_BOLT] = @@ -13919,7 +13919,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FUSION_BOLT, + .battleAnimScript = gBattleAnimMove_FusionBolt, }, [MOVE_FLYING_PRESS] = @@ -13946,7 +13946,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLYING_PRESS, + .battleAnimScript = gBattleAnimMove_FlyingPress, }, [MOVE_MAT_BLOCK] = @@ -13976,7 +13976,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAT_BLOCK, + .battleAnimScript = gBattleAnimMove_MatBlock, }, [MOVE_BELCH] = @@ -14005,7 +14005,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BELCH, + .battleAnimScript = gBattleAnimMove_Belch, }, [MOVE_ROTOTILLER] = @@ -14030,7 +14030,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROTOTILLER, + .battleAnimScript = gBattleAnimMove_Rototiller, }, [MOVE_STICKY_WEB] = @@ -14056,7 +14056,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STICKY_WEB, + .battleAnimScript = gBattleAnimMove_StickyWeb, }, [MOVE_FELL_STINGER] = @@ -14078,7 +14078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FELL_STINGER, + .battleAnimScript = gBattleAnimMove_FellStinger, }, [MOVE_PHANTOM_FORCE] = @@ -14107,7 +14107,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PHANTOM_FORCE, + .battleAnimScript = gBattleAnimMove_PhantomForce, }, [MOVE_TRICK_OR_TREAT] = @@ -14131,7 +14131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRICK_OR_TREAT, + .battleAnimScript = gBattleAnimMove_TrickOrTreat, }, [MOVE_NOBLE_ROAR] = @@ -14156,7 +14156,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NOBLE_ROAR, + .battleAnimScript = gBattleAnimMove_NobleRoar, }, [MOVE_ION_DELUGE] = @@ -14180,7 +14180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ION_DELUGE, + .battleAnimScript = gBattleAnimMove_IonDeluge, }, [MOVE_PARABOLIC_CHARGE] = @@ -14202,7 +14202,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PARABOLIC_CHARGE, + .battleAnimScript = gBattleAnimMove_ParabolicCharge, }, [MOVE_FORESTS_CURSE] = @@ -14226,7 +14226,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FORESTS_CURSE, + .battleAnimScript = gBattleAnimMove_ForestsCurse, }, [MOVE_PETAL_BLIZZARD] = @@ -14248,7 +14248,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PETAL_BLIZZARD, + .battleAnimScript = gBattleAnimMove_PetalBlizzard, }, [MOVE_FREEZE_DRY] = @@ -14278,7 +14278,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FREEZE_DRY, + .battleAnimScript = gBattleAnimMove_FreezeDry, }, [MOVE_DISARMING_VOICE] = @@ -14301,7 +14301,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DISARMING_VOICE, + .battleAnimScript = gBattleAnimMove_DisarmingVoice, }, [MOVE_PARTING_SHOT] = @@ -14326,7 +14326,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PARTING_SHOT, + .battleAnimScript = gBattleAnimMove_PartingShot, }, [MOVE_TOPSY_TURVY] = @@ -14349,7 +14349,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TOPSY_TURVY, + .battleAnimScript = gBattleAnimMove_TopsyTurvy, }, [MOVE_DRAINING_KISS] = @@ -14371,7 +14371,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAINING_KISS, + .battleAnimScript = gBattleAnimMove_DrainingKiss, }, [MOVE_CRAFTY_SHIELD] = @@ -14397,7 +14397,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CRAFTY_SHIELD, + .battleAnimScript = gBattleAnimMove_CraftyShield, }, [MOVE_FLOWER_SHIELD] = @@ -14421,7 +14421,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLOWER_SHIELD, + .battleAnimScript = gBattleAnimMove_FlowerShield, }, [MOVE_GRASSY_TERRAIN] = @@ -14446,7 +14446,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_GRASSY_TERRAIN, .contestComboMoves = {0}, - .battleAnimScript = Move_GRASSY_TERRAIN, + .battleAnimScript = gBattleAnimMove_GrassyTerrain, }, [MOVE_MISTY_TERRAIN] = @@ -14471,7 +14471,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MISTY_TERRAIN, .contestComboMoves = {0}, - .battleAnimScript = Move_MISTY_TERRAIN, + .battleAnimScript = gBattleAnimMove_MistyTerrain, }, [MOVE_ELECTRIFY] = @@ -14493,7 +14493,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ELECTRIFY, + .battleAnimScript = gBattleAnimMove_Electrify, }, [MOVE_PLAY_ROUGH] = @@ -14519,7 +14519,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PLAY_ROUGH, + .battleAnimScript = gBattleAnimMove_PlayRough, }, [MOVE_FAIRY_WIND] = @@ -14541,7 +14541,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FAIRY_WIND, + .battleAnimScript = gBattleAnimMove_FairyWind, }, [MOVE_MOONBLAST] = @@ -14566,7 +14566,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MOONBLAST, + .battleAnimScript = gBattleAnimMove_Moonblast, }, [MOVE_BOOMBURST] = @@ -14589,7 +14589,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BOOMBURST, + .battleAnimScript = gBattleAnimMove_Boomburst, }, [MOVE_FAIRY_LOCK] = @@ -14613,7 +14613,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FAIRY_LOCK, + .battleAnimScript = gBattleAnimMove_FairyLock, }, [MOVE_KINGS_SHIELD] = @@ -14641,7 +14641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_KINGS_SHIELD, + .battleAnimScript = gBattleAnimMove_KingsShield, }, [MOVE_PLAY_NICE] = @@ -14666,7 +14666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PLAY_NICE, + .battleAnimScript = gBattleAnimMove_PlayNice, }, [MOVE_CONFIDE] = @@ -14692,7 +14692,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONFIDE, + .battleAnimScript = gBattleAnimMove_Confide, }, [MOVE_DIAMOND_STORM] = @@ -14719,7 +14719,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DIAMOND_STORM, + .battleAnimScript = gBattleAnimMove_DiamondStorm, }, [MOVE_STEAM_ERUPTION] = @@ -14746,7 +14746,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCALD}, - .battleAnimScript = Move_STEAM_ERUPTION, + .battleAnimScript = gBattleAnimMove_SteamEruption, }, [MOVE_HYPERSPACE_HOLE] = @@ -14771,7 +14771,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HYPERSPACE_HOLE, .contestComboMoves = {COMBO_STARTER_HYPERSPACE_FURY}, - .battleAnimScript = Move_HYPERSPACE_HOLE, + .battleAnimScript = gBattleAnimMove_HyperspaceHole, }, [MOVE_WATER_SHURIKEN] = @@ -14792,7 +14792,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WATER_SHURIKEN, + .battleAnimScript = gBattleAnimMove_WaterShuriken, }, [MOVE_MYSTICAL_FIRE] = @@ -14817,7 +14817,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MYSTICAL_FIRE, + .battleAnimScript = gBattleAnimMove_MysticalFire, }, [MOVE_SPIKY_SHIELD] = @@ -14844,7 +14844,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIKY_SHIELD, + .battleAnimScript = gBattleAnimMove_SpikyShield, }, [MOVE_AROMATIC_MIST] = @@ -14869,7 +14869,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AROMATIC_MIST, + .battleAnimScript = gBattleAnimMove_AromaticMist, }, [MOVE_EERIE_IMPULSE] = @@ -14892,7 +14892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EERIE_IMPULSE, + .battleAnimScript = gBattleAnimMove_EerieImpulse, }, [MOVE_VENOM_DRENCH] = @@ -14915,7 +14915,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, - .battleAnimScript = Move_VENOM_DRENCH, + .battleAnimScript = gBattleAnimMove_VenomDrench, }, [MOVE_POWDER] = @@ -14939,7 +14939,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWDER, + .battleAnimScript = gBattleAnimMove_Powder, }, [MOVE_GEOMANCY] = @@ -14965,7 +14965,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GEOMANCY, + .battleAnimScript = gBattleAnimMove_Geomancy, }, [MOVE_MAGNETIC_FLUX] = @@ -14991,7 +14991,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGNETIC_FLUX, + .battleAnimScript = gBattleAnimMove_MagneticFlux, }, [MOVE_HAPPY_HOUR] = @@ -15015,7 +15015,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HAPPY_HOUR, + .battleAnimScript = gBattleAnimMove_HappyHour, }, [MOVE_ELECTRIC_TERRAIN] = @@ -15040,7 +15040,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_ELECTRIC_TERRAIN, .contestComboMoves = {0}, - .battleAnimScript = Move_ELECTRIC_TERRAIN, + .battleAnimScript = gBattleAnimMove_ElectricTerrain, }, [MOVE_DAZZLING_GLEAM] = @@ -15061,7 +15061,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DAZZLING_GLEAM, + .battleAnimScript = gBattleAnimMove_DazzlingGleam, }, [MOVE_CELEBRATE] = @@ -15091,7 +15091,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CELEBRATE, + .battleAnimScript = gBattleAnimMove_Celebrate, }, [MOVE_HOLD_HANDS] = @@ -15121,7 +15121,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HOLD_HANDS, + .battleAnimScript = gBattleAnimMove_HoldHands, }, [MOVE_BABY_DOLL_EYES] = @@ -15144,7 +15144,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BABY_DOLL_EYES, + .battleAnimScript = gBattleAnimMove_BabyDollEyes, }, [MOVE_NUZZLE] = @@ -15170,7 +15170,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NUZZLE, + .battleAnimScript = gBattleAnimMove_Nuzzle, }, [MOVE_HOLD_BACK] = @@ -15190,7 +15190,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HOLD_BACK, + .battleAnimScript = gBattleAnimMove_HoldBack, }, [MOVE_INFESTATION] = @@ -15215,7 +15215,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INFESTATION, + .battleAnimScript = gBattleAnimMove_Infestation, }, [MOVE_POWER_UP_PUNCH] = @@ -15243,7 +15243,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_UP_PUNCH, + .battleAnimScript = gBattleAnimMove_PowerUpPunch, }, [MOVE_OBLIVION_WING] = @@ -15264,7 +15264,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OBLIVION_WING, + .battleAnimScript = gBattleAnimMove_OblivionWing, }, [MOVE_THOUSAND_ARROWS] = @@ -15292,7 +15292,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_THOUSAND_ARROWS, .contestComboMoves = {COMBO_STARTER_THOUSAND_WAVES}, - .battleAnimScript = Move_THOUSAND_ARROWS, + .battleAnimScript = gBattleAnimMove_ThousandArrows, }, [MOVE_THOUSAND_WAVES] = @@ -15318,7 +15318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_THOUSAND_WAVES, .contestComboMoves = {COMBO_STARTER_THOUSAND_ARROWS}, - .battleAnimScript = Move_THOUSAND_WAVES, + .battleAnimScript = gBattleAnimMove_ThousandWaves, }, [MOVE_LANDS_WRATH] = @@ -15340,7 +15340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LANDS_WRATH, + .battleAnimScript = gBattleAnimMove_LandsWrath, }, [MOVE_LIGHT_OF_RUIN] = @@ -15359,7 +15359,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .metronomeBanned = TRUE, - .battleAnimScript = Move_LIGHT_OF_RUIN, + .battleAnimScript = gBattleAnimMove_LightOfRuin, }, [MOVE_ORIGIN_PULSE] = @@ -15382,7 +15382,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ORIGIN_PULSE, + .battleAnimScript = gBattleAnimMove_OriginPulse, }, [MOVE_PRECIPICE_BLADES] = @@ -15404,7 +15404,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PRECIPICE_BLADES, + .battleAnimScript = gBattleAnimMove_PrecipiceBlades, }, [MOVE_DRAGON_ASCENT] = @@ -15429,7 +15429,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAGON_ASCENT, + .battleAnimScript = gBattleAnimMove_DragonAscent, }, [MOVE_HYPERSPACE_FURY] = @@ -15457,7 +15457,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_HYPERSPACE_FURY, .contestComboMoves = {COMBO_STARTER_HYPERSPACE_HOLE}, - .battleAnimScript = Move_HYPERSPACE_FURY, + .battleAnimScript = gBattleAnimMove_HyperspaceFury, }, [MOVE_SHORE_UP] = @@ -15483,7 +15483,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_SHORE_UP, + .battleAnimScript = gBattleAnimMove_ShoreUp, }, [MOVE_FIRST_IMPRESSION] = @@ -15506,7 +15506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FIRST_IMPRESSION, + .battleAnimScript = gBattleAnimMove_FirstImpression, }, [MOVE_BANEFUL_BUNKER] = @@ -15533,7 +15533,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BANEFUL_BUNKER, + .battleAnimScript = gBattleAnimMove_BanefulBunker, }, [MOVE_SPIRIT_SHACKLE] = @@ -15558,7 +15558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIRIT_SHACKLE, + .battleAnimScript = gBattleAnimMove_SpiritShackle, }, [MOVE_DARKEST_LARIAT] = @@ -15581,7 +15581,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DARKEST_LARIAT, + .battleAnimScript = gBattleAnimMove_DarkestLariat, }, [MOVE_SPARKLING_ARIA] = @@ -15609,7 +15609,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCALD}, - .battleAnimScript = Move_SPARKLING_ARIA, + .battleAnimScript = gBattleAnimMove_SparklingAria, }, [MOVE_ICE_HAMMER] = @@ -15636,7 +15636,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_ICE_HAMMER, + .battleAnimScript = gBattleAnimMove_IceHammer, }, [MOVE_FLORAL_HEALING] = @@ -15662,7 +15662,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLORAL_HEALING, + .battleAnimScript = gBattleAnimMove_FloralHealing, }, [MOVE_HIGH_HORSEPOWER] = @@ -15684,7 +15684,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HIGH_HORSEPOWER, + .battleAnimScript = gBattleAnimMove_HighHorsepower, }, [MOVE_STRENGTH_SAP] = @@ -15708,7 +15708,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STRENGTH_SAP, + .battleAnimScript = gBattleAnimMove_StrengthSap, }, [MOVE_SOLAR_BLADE] = @@ -15734,7 +15734,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_SOLAR_BLADE, + .battleAnimScript = gBattleAnimMove_SolarBlade, }, [MOVE_LEAFAGE] = @@ -15755,7 +15755,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_LEAFAGE, + .battleAnimScript = gBattleAnimMove_Leafage, }, [MOVE_SPOTLIGHT] = @@ -15782,7 +15782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPOTLIGHT, + .battleAnimScript = gBattleAnimMove_Spotlight, }, [MOVE_TOXIC_THREAD] = @@ -15805,7 +15805,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, - .battleAnimScript = Move_TOXIC_THREAD, + .battleAnimScript = gBattleAnimMove_ToxicThread, }, [MOVE_LASER_FOCUS] = @@ -15830,7 +15830,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LASER_FOCUS, + .battleAnimScript = gBattleAnimMove_LaserFocus, }, [MOVE_GEAR_UP] = @@ -15856,7 +15856,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GEAR_UP, + .battleAnimScript = gBattleAnimMove_GearUp, }, [MOVE_THROAT_CHOP] = @@ -15882,7 +15882,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_THROAT_CHOP, + .battleAnimScript = gBattleAnimMove_ThroatChop, }, [MOVE_POLLEN_PUFF] = @@ -15904,7 +15904,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POLLEN_PUFF, + .battleAnimScript = gBattleAnimMove_PollenPuff, }, [MOVE_ANCHOR_SHOT] = @@ -15930,7 +15930,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ANCHOR_SHOT, + .battleAnimScript = gBattleAnimMove_AnchorShot, }, [MOVE_PSYCHIC_TERRAIN] = @@ -15954,7 +15954,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_PSYCHIC_TERRAIN, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCHIC_TERRAIN, + .battleAnimScript = gBattleAnimMove_PsychicTerrain, }, [MOVE_LUNGE] = @@ -15980,7 +15980,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LUNGE, + .battleAnimScript = gBattleAnimMove_Lunge, }, [MOVE_FIRE_LASH] = @@ -16006,7 +16006,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FIRE_LASH, + .battleAnimScript = gBattleAnimMove_FireLash, }, [MOVE_POWER_TRIP] = @@ -16028,7 +16028,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_TRIP, + .battleAnimScript = gBattleAnimMove_PowerTrip, }, [MOVE_BURN_UP] = @@ -16055,7 +16055,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_BURN_UP, + .battleAnimScript = gBattleAnimMove_BurnUp, }, [MOVE_SPEED_SWAP] = @@ -16078,7 +16078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPEED_SWAP, + .battleAnimScript = gBattleAnimMove_SpeedSwap, }, [MOVE_SMART_STRIKE] = @@ -16100,7 +16100,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SMART_STRIKE, + .battleAnimScript = gBattleAnimMove_SmartStrike, }, [MOVE_PURIFY] = @@ -16125,7 +16125,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PURIFY, + .battleAnimScript = gBattleAnimMove_Purify, }, [MOVE_REVELATION_DANCE] = @@ -16147,7 +16147,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_REVELATION_DANCE, + .battleAnimScript = gBattleAnimMove_RevelationDance, }, [MOVE_CORE_ENFORCER] = @@ -16172,7 +16172,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CORE_ENFORCER, + .battleAnimScript = gBattleAnimMove_CoreEnforcer, }, [MOVE_TROP_KICK] = @@ -16198,7 +16198,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TROP_KICK, + .battleAnimScript = gBattleAnimMove_TropKick, }, [MOVE_INSTRUCT] = @@ -16224,7 +16224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INSTRUCT, + .battleAnimScript = gBattleAnimMove_Instruct, }, [MOVE_BEAK_BLAST] = @@ -16253,7 +16253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BEAK_BLAST, + .battleAnimScript = gBattleAnimMove_BeakBlast, }, [MOVE_CLANGING_SCALES] = @@ -16280,7 +16280,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CLANGING_SCALES, + .battleAnimScript = gBattleAnimMove_ClangingScales, }, [MOVE_DRAGON_HAMMER] = @@ -16302,7 +16302,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_HAMMER, + .battleAnimScript = gBattleAnimMove_DragonHammer, }, [MOVE_BRUTAL_SWING] = @@ -16324,7 +16324,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BRUTAL_SWING, + .battleAnimScript = gBattleAnimMove_BrutalSwing, }, [MOVE_AURORA_VEIL] = @@ -16349,7 +16349,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_AURORA_VEIL, + .battleAnimScript = gBattleAnimMove_AuroraVeil, }, [MOVE_SHELL_TRAP] = @@ -16377,7 +16377,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHELL_TRAP, + .battleAnimScript = gBattleAnimMove_ShellTrap, }, [MOVE_FLEUR_CANNON] = @@ -16403,7 +16403,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLEUR_CANNON, + .battleAnimScript = gBattleAnimMove_FleurCannon, }, [MOVE_PSYCHIC_FANGS] = @@ -16426,7 +16426,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCHIC_FANGS, + .battleAnimScript = gBattleAnimMove_PsychicFangs, }, [MOVE_STOMPING_TANTRUM] = @@ -16449,7 +16449,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STOMPING_TANTRUM, + .battleAnimScript = gBattleAnimMove_StompingTantrum, }, [MOVE_SHADOW_BONE] = @@ -16474,7 +16474,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SHADOW_BONE, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH}, - .battleAnimScript = Move_SHADOW_BONE, + .battleAnimScript = gBattleAnimMove_ShadowBone, }, [MOVE_ACCELEROCK] = @@ -16496,7 +16496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACCELEROCK, + .battleAnimScript = gBattleAnimMove_Accelerock, }, [MOVE_LIQUIDATION] = @@ -16522,7 +16522,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_LIQUIDATION, + .battleAnimScript = gBattleAnimMove_Liquidation, }, [MOVE_PRISMATIC_LASER] = @@ -16547,7 +16547,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PRISMATIC_LASER, + .battleAnimScript = gBattleAnimMove_PrismaticLaser, }, [MOVE_SPECTRAL_THIEF] = @@ -16574,7 +16574,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPECTRAL_THIEF, + .battleAnimScript = gBattleAnimMove_SpectralThief, }, [MOVE_SUNSTEEL_STRIKE] = @@ -16598,7 +16598,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SUNSTEEL_STRIKE, + .battleAnimScript = gBattleAnimMove_SunsteelStrike, }, [MOVE_MOONGEIST_BEAM] = @@ -16621,7 +16621,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MOONGEIST_BEAM, + .battleAnimScript = gBattleAnimMove_MoongeistBeam, }, [MOVE_TEARFUL_LOOK] = @@ -16645,7 +16645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TEARFUL_LOOK, + .battleAnimScript = gBattleAnimMove_TearfulLook, }, [MOVE_ZING_ZAP] = @@ -16671,7 +16671,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_ZING_ZAP, + .battleAnimScript = gBattleAnimMove_ZingZap, }, [MOVE_NATURES_MADNESS] = @@ -16693,7 +16693,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NATURES_MADNESS, + .battleAnimScript = gBattleAnimMove_NaturesMadness, }, [MOVE_MULTI_ATTACK] = @@ -16716,7 +16716,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MULTI_ATTACK, + .battleAnimScript = gBattleAnimMove_MultiAttack, }, [MOVE_MIND_BLOWN] = @@ -16738,7 +16738,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIND_BLOWN, + .battleAnimScript = gBattleAnimMove_MindBlown, }, [MOVE_PLASMA_FISTS] = @@ -16762,7 +16762,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PLASMA_FISTS, + .battleAnimScript = gBattleAnimMove_PlasmaFists, }, [MOVE_PHOTON_GEYSER] = @@ -16785,7 +16785,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PHOTON_GEYSER, + .battleAnimScript = gBattleAnimMove_PhotonGeyser, }, [MOVE_ZIPPY_ZAP] = @@ -16812,7 +16812,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .chance = 100, }), #endif - .battleAnimScript = Move_ZIPPY_ZAP, + .battleAnimScript = gBattleAnimMove_ZippyZap, }, [MOVE_SPLISHY_SPLASH] = @@ -16835,7 +16835,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 30, }), - .battleAnimScript = Move_SPLISHY_SPLASH, + .battleAnimScript = gBattleAnimMove_SplishySplash, }, [MOVE_FLOATY_FALL] = @@ -16860,7 +16860,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), - .battleAnimScript = Move_FLOATY_FALL, + .battleAnimScript = gBattleAnimMove_FloatyFall, }, [MOVE_PIKA_PAPOW] = @@ -16879,7 +16879,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_PIKA_PAPOW, + .battleAnimScript = gBattleAnimMove_PikaPapow, }, [MOVE_BOUNCY_BUBBLE] = @@ -16904,7 +16904,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, .healingMove = B_HEAL_BLOCKING >= GEN_6, - .battleAnimScript = Move_BOUNCY_BUBBLE, + .battleAnimScript = gBattleAnimMove_BouncyBubble, }, [MOVE_BUZZY_BUZZ] = @@ -16927,7 +16927,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, }), - .battleAnimScript = Move_BUZZY_BUZZ, + .battleAnimScript = gBattleAnimMove_BuzzyBuzz, }, [MOVE_SIZZLY_SLIDE] = @@ -16952,7 +16952,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 100, }), - .battleAnimScript = Move_SIZZLY_SLIDE, + .battleAnimScript = gBattleAnimMove_SizzlySlide, }, [MOVE_GLITZY_GLOW] = @@ -16971,7 +16971,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_GLITZY_GLOW, + .battleAnimScript = gBattleAnimMove_GlitzyGlow, }, [MOVE_BADDY_BAD] = @@ -16990,7 +16990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_BADDY_BAD, + .battleAnimScript = gBattleAnimMove_BaddyBad, }, [MOVE_SAPPY_SEED] = @@ -17010,7 +17010,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SAPPY_SEED, + .battleAnimScript = gBattleAnimMove_SappySeed, }, [MOVE_FREEZY_FROST] = @@ -17029,7 +17029,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_FREEZY_FROST, + .battleAnimScript = gBattleAnimMove_FreezyFrost, }, [MOVE_SPARKLY_SWIRL] = @@ -17048,7 +17048,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_SPARKLY_SWIRL, + .battleAnimScript = gBattleAnimMove_SparklySwirl, }, [MOVE_VEEVEE_VOLLEY] = @@ -17068,7 +17068,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_VEEVEE_VOLLEY, + .battleAnimScript = gBattleAnimMove_VeeveeVolley, }, [MOVE_DOUBLE_IRON_BASH] = @@ -17098,7 +17098,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DOUBLE_IRON_BASH, + .battleAnimScript = gBattleAnimMove_DoubleIronBash, }, [MOVE_DYNAMAX_CANNON] = @@ -17128,7 +17128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DYNAMAX_CANNON, + .battleAnimScript = gBattleAnimMove_DynamaxCannon, }, [MOVE_SNIPE_SHOT] = @@ -17150,7 +17150,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SNIPE_SHOT, + .battleAnimScript = gBattleAnimMove_SnipeShot, }, [MOVE_JAW_LOCK] = @@ -17176,7 +17176,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_JAW_LOCK, + .battleAnimScript = gBattleAnimMove_JawLock, }, [MOVE_STUFF_CHEEKS] = @@ -17200,7 +17200,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STUFF_CHEEKS, + .battleAnimScript = gBattleAnimMove_StuffCheeks, }, [MOVE_NO_RETREAT] = @@ -17224,7 +17224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NO_RETREAT, + .battleAnimScript = gBattleAnimMove_NoRetreat, }, [MOVE_TAR_SHOT] = @@ -17246,7 +17246,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TAR_SHOT, + .battleAnimScript = gBattleAnimMove_TarShot, }, [MOVE_MAGIC_POWDER] = @@ -17270,7 +17270,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGIC_POWDER, + .battleAnimScript = gBattleAnimMove_MagicPowder, }, [MOVE_DRAGON_DARTS] = @@ -17293,7 +17293,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAGON_DARTS, + .battleAnimScript = gBattleAnimMove_DragonDarts, }, [MOVE_TEATIME] = @@ -17317,7 +17317,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TEATIME, + .battleAnimScript = gBattleAnimMove_Teatime, }, [MOVE_OCTOLOCK] = @@ -17338,7 +17338,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OCTOLOCK, + .battleAnimScript = gBattleAnimMove_Octolock, }, [MOVE_BOLT_BEAK] = @@ -17360,7 +17360,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BOLT_BEAK, + .battleAnimScript = gBattleAnimMove_BoltBeak, }, [MOVE_FISHIOUS_REND] = @@ -17383,7 +17383,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FISHIOUS_REND, + .battleAnimScript = gBattleAnimMove_FishiousRend, }, [MOVE_COURT_CHANGE] = @@ -17405,7 +17405,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COURT_CHANGE, + .battleAnimScript = gBattleAnimMove_CourtChange, }, [MOVE_CLANGOROUS_SOUL] = @@ -17432,7 +17432,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CLANGOROUS_SOUL, + .battleAnimScript = gBattleAnimMove_ClangorousSoul, }, [MOVE_BODY_PRESS] = @@ -17456,7 +17456,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BODY_PRESS, + .battleAnimScript = gBattleAnimMove_BodyPress, }, [MOVE_DECORATE] = @@ -17480,7 +17480,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DECORATE, + .battleAnimScript = gBattleAnimMove_Decorate, }, [MOVE_DRUM_BEATING] = @@ -17506,7 +17506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRUM_BEATING, + .battleAnimScript = gBattleAnimMove_DrumBeating, }, [MOVE_SNAP_TRAP] = @@ -17533,7 +17533,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SNAP_TRAP, + .battleAnimScript = gBattleAnimMove_SnapTrap, }, [MOVE_PYRO_BALL] = @@ -17561,7 +17561,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PYRO_BALL, + .battleAnimScript = gBattleAnimMove_PyroBall, }, [MOVE_BEHEMOTH_BLADE] = @@ -17588,7 +17588,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BEHEMOTH_BLADE, + .battleAnimScript = gBattleAnimMove_BehemothBlade, }, [MOVE_BEHEMOTH_BASH] = @@ -17614,7 +17614,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BEHEMOTH_BASH, + .battleAnimScript = gBattleAnimMove_BehemothBash, }, [MOVE_AURA_WHEEL] = @@ -17641,7 +17641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AURA_WHEEL, + .battleAnimScript = gBattleAnimMove_AuraWheel, }, [MOVE_BREAKING_SWIPE] = @@ -17668,7 +17668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BREAKING_SWIPE, + .battleAnimScript = gBattleAnimMove_BreakingSwipe, }, [MOVE_BRANCH_POKE] = @@ -17691,7 +17691,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BRANCH_POKE, + .battleAnimScript = gBattleAnimMove_BranchPoke, }, [MOVE_OVERDRIVE] = @@ -17715,7 +17715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OVERDRIVE, + .battleAnimScript = gBattleAnimMove_Overdrive, }, [MOVE_APPLE_ACID] = @@ -17741,7 +17741,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_APPLE_ACID, + .battleAnimScript = gBattleAnimMove_AppleAcid, }, [MOVE_GRAV_APPLE] = @@ -17767,7 +17767,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRAV_APPLE, + .battleAnimScript = gBattleAnimMove_GravApple, }, [MOVE_SPIRIT_BREAK] = @@ -17794,7 +17794,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIRIT_BREAK, + .battleAnimScript = gBattleAnimMove_SpiritBreak, }, [MOVE_STRANGE_STEAM] = @@ -17820,7 +17820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STRANGE_STEAM, + .battleAnimScript = gBattleAnimMove_StrangeSteam, }, [MOVE_LIFE_DEW] = @@ -17847,7 +17847,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LIFE_DEW, + .battleAnimScript = gBattleAnimMove_LifeDew, }, [MOVE_OBSTRUCT] = @@ -17872,7 +17872,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OBSTRUCT, + .battleAnimScript = gBattleAnimMove_Obstruct, }, [MOVE_FALSE_SURRENDER] = @@ -17895,7 +17895,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FALSE_SURRENDER, + .battleAnimScript = gBattleAnimMove_FalseSurrender, }, [MOVE_METEOR_ASSAULT] = @@ -17922,7 +17922,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_METEOR_ASSAULT, + .battleAnimScript = gBattleAnimMove_MeteorAssault, }, [MOVE_ETERNABEAM] = @@ -17948,7 +17948,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ETERNABEAM, + .battleAnimScript = gBattleAnimMove_Eternabeam, }, [MOVE_STEEL_BEAM] = @@ -17970,7 +17970,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEEL_BEAM, + .battleAnimScript = gBattleAnimMove_SteelBeam, }, [MOVE_EXPANDING_FORCE] = @@ -17991,7 +17991,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN}, - .battleAnimScript = Move_EXPANDING_FORCE, + .battleAnimScript = gBattleAnimMove_ExpandingForce, }, [MOVE_STEEL_ROLLER] = @@ -18015,7 +18015,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEEL_ROLLER, + .battleAnimScript = gBattleAnimMove_SteelRoller, }, [MOVE_SCALE_SHOT] = @@ -18037,7 +18037,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SCALE_SHOT, + .battleAnimScript = gBattleAnimMove_ScaleShot, }, [MOVE_METEOR_BEAM] = @@ -18065,7 +18065,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_METEOR_BEAM, + .battleAnimScript = gBattleAnimMove_MeteorBeam, }, [MOVE_SHELL_SIDE_ARM] = @@ -18090,7 +18090,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHELL_SIDE_ARM, + .battleAnimScript = gBattleAnimMove_ShellSideArm, }, [MOVE_MISTY_EXPLOSION] = @@ -18111,7 +18111,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MISTY_TERRAIN}, - .battleAnimScript = Move_MISTY_EXPLOSION, + .battleAnimScript = gBattleAnimMove_MistyExplosion, }, [MOVE_GRASSY_GLIDE] = @@ -18134,7 +18134,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GRASSY_TERRAIN}, - .battleAnimScript = Move_GRASSY_GLIDE, + .battleAnimScript = gBattleAnimMove_GrassyGlide, }, [MOVE_RISING_VOLTAGE] = @@ -18155,7 +18155,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN}, - .battleAnimScript = Move_RISING_VOLTAGE, + .battleAnimScript = gBattleAnimMove_RisingVoltage, }, [MOVE_TERRAIN_PULSE] = @@ -18177,7 +18177,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN, COMBO_STARTER_MISTY_TERRAIN, COMBO_STARTER_GRASSY_TERRAIN, COMBO_STARTER_PSYCHIC_TERRAIN}, - .battleAnimScript = Move_TERRAIN_PULSE, + .battleAnimScript = gBattleAnimMove_TerrainPulse, }, [MOVE_SKITTER_SMACK] = @@ -18203,7 +18203,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKITTER_SMACK, + .battleAnimScript = gBattleAnimMove_SkitterSmack, }, [MOVE_BURNING_JEALOUSY] = @@ -18229,7 +18229,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BURNING_JEALOUSY, + .battleAnimScript = gBattleAnimMove_BurningJealousy, }, [MOVE_LASH_OUT] = @@ -18251,7 +18251,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LASH_OUT, + .battleAnimScript = gBattleAnimMove_LashOut, }, [MOVE_POLTERGEIST] = @@ -18272,7 +18272,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POLTERGEIST, + .battleAnimScript = gBattleAnimMove_Poltergeist, }, [MOVE_CORROSIVE_GAS] = @@ -18294,7 +18294,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CORROSIVE_GAS, + .battleAnimScript = gBattleAnimMove_CorrosiveGas, }, [MOVE_COACHING] = @@ -18318,7 +18318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COACHING, + .battleAnimScript = gBattleAnimMove_Coaching, }, [MOVE_FLIP_TURN] = @@ -18340,7 +18340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLIP_TURN, + .battleAnimScript = gBattleAnimMove_FlipTurn, }, [MOVE_TRIPLE_AXEL] = @@ -18363,7 +18363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRIPLE_AXEL, + .battleAnimScript = gBattleAnimMove_TripleAxel, }, [MOVE_DUAL_WINGBEAT] = @@ -18386,7 +18386,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DUAL_WINGBEAT, + .battleAnimScript = gBattleAnimMove_DualWingbeat, }, [MOVE_SCORCHING_SANDS] = @@ -18412,7 +18412,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SCORCHING_SANDS, + .battleAnimScript = gBattleAnimMove_ScorchingSands, }, [MOVE_JUNGLE_HEALING] = @@ -18438,7 +18438,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_JUNGLE_HEALING, + .battleAnimScript = gBattleAnimMove_JungleHealing, }, [MOVE_WICKED_BLOW] = @@ -18463,7 +18463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WICKED_BLOW, + .battleAnimScript = gBattleAnimMove_WickedBlow, }, [MOVE_SURGING_STRIKES] = @@ -18489,7 +18489,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SURGING_STRIKES, + .battleAnimScript = gBattleAnimMove_SurgingStrikes, }, [MOVE_THUNDER_CAGE] = @@ -18514,7 +18514,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_THUNDER_CAGE, + .battleAnimScript = gBattleAnimMove_ThunderCage, }, [MOVE_DRAGON_ENERGY] = @@ -18536,7 +18536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAGON_ENERGY, + .battleAnimScript = gBattleAnimMove_DragonEnergy, }, [MOVE_FREEZING_GLARE] = @@ -18566,7 +18566,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FREEZING_GLARE, + .battleAnimScript = gBattleAnimMove_FreezingGlare, }, [MOVE_FIERY_WRATH] = @@ -18592,7 +18592,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FIERY_WRATH, + .battleAnimScript = gBattleAnimMove_FieryWrath, }, [MOVE_THUNDEROUS_KICK] = @@ -18619,7 +18619,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_THUNDEROUS_KICK, + .battleAnimScript = gBattleAnimMove_ThunderousKick, }, [MOVE_GLACIAL_LANCE] = @@ -18641,7 +18641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GLACIAL_LANCE, + .battleAnimScript = gBattleAnimMove_GlacialLance, }, [MOVE_ASTRAL_BARRAGE] = @@ -18663,7 +18663,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ASTRAL_BARRAGE, + .battleAnimScript = gBattleAnimMove_AstralBarrage, }, [MOVE_EERIE_SPELL] = @@ -18686,7 +18686,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EERIE_SPELL, + .battleAnimScript = gBattleAnimMove_EerieSpell, }, [MOVE_DIRE_CLAW] = @@ -18708,7 +18708,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DIRE_CLAW, .chance = 50, }), - .battleAnimScript = Move_DIRE_CLAW, + .battleAnimScript = gBattleAnimMove_DireClaw, }, [MOVE_PSYSHIELD_BASH] = @@ -18731,7 +18731,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_PSYSHIELD_BASH, + .battleAnimScript = gBattleAnimMove_PsyshieldBash, }, [MOVE_POWER_SHIFT] = @@ -18752,7 +18752,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_POWER_SHIFT, + .battleAnimScript = gBattleAnimMove_PowerShift, }, [MOVE_STONE_AXE] = @@ -18775,7 +18775,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_STEALTH_ROCK, .chance = 100, }), - .battleAnimScript = Move_STONE_AXE, + .battleAnimScript = gBattleAnimMove_StoneAxe, }, [MOVE_SPRINGTIDE_STORM] = @@ -18798,7 +18798,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 30, }), - .battleAnimScript = Move_SPRINGTIDE_STORM, + .battleAnimScript = gBattleAnimMove_SpringtideStorm, }, [MOVE_MYSTICAL_POWER] = @@ -18820,7 +18820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_MYSTICAL_POWER, + .battleAnimScript = gBattleAnimMove_MysticalPower, }, [MOVE_RAGING_FURY] = @@ -18842,7 +18842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_THRASH, .self = TRUE, }), - .battleAnimScript = Move_RAGING_FURY, + .battleAnimScript = gBattleAnimMove_RagingFury, }, [MOVE_WAVE_CRASH] = @@ -18862,7 +18862,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .battleAnimScript = Move_WAVE_CRASH, + .battleAnimScript = gBattleAnimMove_WaveCrash, }, [MOVE_CHLOROBLAST] = @@ -18879,7 +18879,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_CHLOROBLAST, + .battleAnimScript = gBattleAnimMove_Chloroblast, }, [MOVE_MOUNTAIN_GALE] = @@ -18900,7 +18900,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), - .battleAnimScript = Move_MOUNTAIN_GALE, + .battleAnimScript = gBattleAnimMove_MountainGale, }, [MOVE_VICTORY_DANCE] = @@ -18921,7 +18921,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, - .battleAnimScript = Move_VICTORY_DANCE, + .battleAnimScript = gBattleAnimMove_VictoryDance, }, [MOVE_HEADLONG_RUSH] = @@ -18944,7 +18944,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN, .self = TRUE, }), - .battleAnimScript = Move_HEADLONG_RUSH, + .battleAnimScript = gBattleAnimMove_HeadlongRush, }, [MOVE_BARB_BARRAGE] = @@ -18966,7 +18966,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 50, }), - .battleAnimScript = Move_BARB_BARRAGE, + .battleAnimScript = gBattleAnimMove_BarbBarrage, }, [MOVE_ESPER_WING] = @@ -18989,7 +18989,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_ESPER_WING, + .battleAnimScript = gBattleAnimMove_EsperWing, }, [MOVE_BITTER_MALICE] = @@ -19010,7 +19010,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 100, }), - .battleAnimScript = Move_BITTER_MALICE, + .battleAnimScript = gBattleAnimMove_BitterMalice, }, [MOVE_SHELTER] = @@ -19030,7 +19030,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, - .battleAnimScript = Move_SHELTER, + .battleAnimScript = gBattleAnimMove_Shelter, }, [MOVE_TRIPLE_ARROWS] = @@ -19056,7 +19056,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), - .battleAnimScript = Move_TRIPLE_ARROWS, + .battleAnimScript = gBattleAnimMove_TripleArrows, }, [MOVE_INFERNAL_PARADE] = @@ -19078,7 +19078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 30, }), - .battleAnimScript = Move_INFERNAL_PARADE, + .battleAnimScript = gBattleAnimMove_InfernalParade, }, [MOVE_CEASELESS_EDGE] = @@ -19101,7 +19101,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPIKES, .chance = 100, }), - .battleAnimScript = Move_CEASELESS_EDGE, + .battleAnimScript = gBattleAnimMove_CeaselessEdge, }, [MOVE_BLEAKWIND_STORM] = @@ -19123,7 +19123,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_1, .chance = 30, }), - .battleAnimScript = Move_BLEAKWIND_STORM, + .battleAnimScript = gBattleAnimMove_BleakwindStorm, }, [MOVE_WILDBOLT_STORM] = @@ -19145,7 +19145,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 20, }), - .battleAnimScript = Move_WILDBOLT_STORM, + .battleAnimScript = gBattleAnimMove_WildboltStorm, }, [MOVE_SANDSEAR_STORM] = @@ -19167,7 +19167,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 20, }), - .battleAnimScript = Move_SANDSEAR_STORM, + .battleAnimScript = gBattleAnimMove_SandsearStorm, }, [MOVE_LUNAR_BLESSING] = @@ -19188,7 +19188,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .healingMove = TRUE, - .battleAnimScript = Move_LUNAR_BLESSING, + .battleAnimScript = gBattleAnimMove_LunarBlessing, }, [MOVE_TAKE_HEART] = @@ -19208,7 +19208,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, - .battleAnimScript = Move_TAKE_HEART, + .battleAnimScript = gBattleAnimMove_TakeHeart, }, [MOVE_TERA_BLAST] = @@ -19230,7 +19230,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_TERA_BLAST, .self = TRUE, }), - .battleAnimScript = Move_TERA_BLAST, + .battleAnimScript = gBattleAnimMove_TeraBlast, }, [MOVE_SILK_TRAP] = @@ -19250,7 +19250,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SILK_TRAP, + .battleAnimScript = gBattleAnimMove_SilkTrap, }, [MOVE_AXE_KICK] = @@ -19272,7 +19272,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_CONFUSION, .chance = 30, }), - .battleAnimScript = Move_AXE_KICK, + .battleAnimScript = gBattleAnimMove_AxeKick, }, [MOVE_LAST_RESPECTS] = @@ -19290,7 +19290,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, // Only since it isn't implemented yet - .battleAnimScript = Move_LAST_RESPECTS, + .battleAnimScript = gBattleAnimMove_LastRespects, }, [MOVE_LUMINA_CRASH] = @@ -19311,7 +19311,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_DEF_MINUS_2, .chance = 100, }), - .battleAnimScript = Move_LUMINA_CRASH, + .battleAnimScript = gBattleAnimMove_LuminaCrash, }, [MOVE_ORDER_UP] = @@ -19330,7 +19330,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_ORDER_UP, + .battleAnimScript = gBattleAnimMove_OrderUp, }, [MOVE_JET_PUNCH] = @@ -19350,7 +19350,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_JET_PUNCH, + .battleAnimScript = gBattleAnimMove_JetPunch, }, [MOVE_SPICY_EXTRACT] = @@ -19369,7 +19369,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_STATUS, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SPICY_EXTRACT, + .battleAnimScript = gBattleAnimMove_SpicyExtract, }, [MOVE_SPIN_OUT] = @@ -19392,7 +19392,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_2, .self = TRUE, }), - .battleAnimScript = Move_SPIN_OUT, + .battleAnimScript = gBattleAnimMove_SpinOut, }, [MOVE_POPULATION_BOMB] = @@ -19413,7 +19413,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .slicingMove = TRUE, .metronomeBanned = TRUE, .strikeCount = 10, - .battleAnimScript = Move_POPULATION_BOMB, + .battleAnimScript = gBattleAnimMove_PopulationBomb, }, [MOVE_ICE_SPINNER] = @@ -19433,7 +19433,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .battleAnimScript = Move_ICE_SPINNER, + .battleAnimScript = gBattleAnimMove_IceSpinner, }, [MOVE_GLAIVE_RUSH] = @@ -19451,7 +19451,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, - .battleAnimScript = Move_GLAIVE_RUSH, + .battleAnimScript = gBattleAnimMove_GlaiveRush, }, [MOVE_REVIVAL_BLESSING] = @@ -19473,7 +19473,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .healingMove = TRUE, .sketchBanned = (B_SKETCH_BANS >= GEN_9), - .battleAnimScript = Move_REVIVAL_BLESSING, + .battleAnimScript = gBattleAnimMove_RevivalBlessing, }, [MOVE_SALT_CURE] = @@ -19491,7 +19491,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, - .battleAnimScript = Move_SALT_CURE, + .battleAnimScript = gBattleAnimMove_SaltCure, }, [MOVE_TRIPLE_DIVE] = @@ -19510,7 +19510,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .strikeCount = 3, - .battleAnimScript = Move_TRIPLE_DIVE, + .battleAnimScript = gBattleAnimMove_TripleDive, }, [MOVE_MORTAL_SPIN] = @@ -19536,7 +19536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 100, }), - .battleAnimScript = Move_MORTAL_SPIN, + .battleAnimScript = gBattleAnimMove_MortalSpin, }, [MOVE_DOODLE] = @@ -19556,7 +19556,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_DOODLE, + .battleAnimScript = gBattleAnimMove_Doodle, }, [MOVE_FILLET_AWAY] = @@ -19578,7 +19578,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_FILLET_AWAY, + .battleAnimScript = gBattleAnimMove_FilletAway, }, [MOVE_KOWTOW_CLEAVE] = @@ -19597,7 +19597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .slicingMove = TRUE, - .battleAnimScript = Move_KOWTOW_CLEAVE, + .battleAnimScript = gBattleAnimMove_KowtowCleave, }, [MOVE_FLOWER_TRICK] = @@ -19615,7 +19615,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .alwaysCriticalHit = TRUE, - .battleAnimScript = Move_FLOWER_TRICK, + .battleAnimScript = gBattleAnimMove_FlowerTrick, }, [MOVE_TORCH_SONG] = @@ -19639,7 +19639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_TORCH_SONG, + .battleAnimScript = gBattleAnimMove_TorchSong, }, [MOVE_AQUA_STEP] = @@ -19663,7 +19663,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_AQUA_STEP, + .battleAnimScript = gBattleAnimMove_AquaStep, }, [MOVE_RAGING_BULL] = @@ -19682,7 +19682,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_RAGING_BULL, + .battleAnimScript = gBattleAnimMove_RagingBull, }, [MOVE_MAKE_IT_RAIN] = @@ -19707,7 +19707,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1, .self = TRUE, }), - .battleAnimScript = Move_MAKE_IT_RAIN, + .battleAnimScript = gBattleAnimMove_MakeItRain, }, [MOVE_RUINATION] = @@ -19725,7 +19725,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .metronomeBanned = TRUE, - .battleAnimScript = Move_RUINATION, + .battleAnimScript = gBattleAnimMove_Ruination, }, [MOVE_COLLISION_COURSE] = @@ -19744,7 +19744,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_COLLISION_COURSE, + .battleAnimScript = gBattleAnimMove_CollisionCourse, }, [MOVE_ELECTRO_DRIFT] = @@ -19763,7 +19763,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .makesContact = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_ELECTRO_DRIFT, + .battleAnimScript = gBattleAnimMove_ElectroDrift, }, [MOVE_SHED_TAIL] = @@ -19784,7 +19784,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SHED_TAIL, + .battleAnimScript = gBattleAnimMove_ShedTail, }, [MOVE_CHILLY_RECEPTION] = @@ -19805,7 +19805,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_CHILLY_RECEPTION, + .battleAnimScript = gBattleAnimMove_ChillyReception, }, [MOVE_TIDY_UP] = @@ -19825,7 +19825,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_TIDY_UP, + .battleAnimScript = gBattleAnimMove_TidyUp, }, [MOVE_SNOWSCAPE] = @@ -19846,7 +19846,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SNOWSCAPE, + .battleAnimScript = gBattleAnimMove_Snowscape, }, [MOVE_POUNCE] = @@ -19869,7 +19869,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_1, .chance = 100, }), - .battleAnimScript = Move_POUNCE, + .battleAnimScript = gBattleAnimMove_Pounce, }, [MOVE_TRAILBLAZE] = @@ -19893,7 +19893,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_TRAILBLAZE, + .battleAnimScript = gBattleAnimMove_Trailblaze, }, [MOVE_CHILLING_WATER] = @@ -19915,7 +19915,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 100, }), - .battleAnimScript = Move_CHILLING_WATER, + .battleAnimScript = gBattleAnimMove_ChillingWater, }, [MOVE_HYPER_DRILL] = @@ -19935,7 +19935,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .ignoresProtect = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_HYPER_DRILL, + .battleAnimScript = gBattleAnimMove_HyperDrill, }, [MOVE_TWIN_BEAM] = @@ -19954,7 +19954,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .strikeCount = 2, .metronomeBanned = TRUE, - .battleAnimScript = Move_TWIN_BEAM, + .battleAnimScript = gBattleAnimMove_TwinBeam, }, [MOVE_RAGE_FIST] = @@ -19974,7 +19974,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_RAGE_FIST, + .battleAnimScript = gBattleAnimMove_RageFist, }, [MOVE_ARMOR_CANNON] = @@ -19996,7 +19996,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN, .self = TRUE, }), - .battleAnimScript = Move_ARMOR_CANNON, + .battleAnimScript = gBattleAnimMove_ArmorCannon, }, [MOVE_BITTER_BLADE] = @@ -20016,7 +20016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .slicingMove = TRUE, .healingMove = TRUE, - .battleAnimScript = Move_BITTER_BLADE, + .battleAnimScript = gBattleAnimMove_BitterBlade, }, [MOVE_DOUBLE_SHOCK] = @@ -20040,7 +20040,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_REMOVE_ARG_TYPE, .self = TRUE, }), - .battleAnimScript = Move_DOUBLE_SHOCK, + .battleAnimScript = gBattleAnimMove_DoubleShock, }, [MOVE_GIGATON_HAMMER] = @@ -20058,7 +20058,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .cantUseTwice = TRUE, - .battleAnimScript = Move_GIGATON_HAMMER, + .battleAnimScript = gBattleAnimMove_GigatonHammer, }, [MOVE_COMEUPPANCE] = @@ -20078,7 +20078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .meFirstBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_COMEUPPANCE, + .battleAnimScript = gBattleAnimMove_Comeuppance, }, [MOVE_AQUA_CUTTER] = @@ -20097,7 +20097,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .slicingMove = TRUE, - .battleAnimScript = Move_AQUA_CUTTER, + .battleAnimScript = gBattleAnimMove_AquaCutter, }, [MOVE_BLAZING_TORQUE] = @@ -20126,7 +20126,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 30, }), - .battleAnimScript = Move_BLAZING_TORQUE, + .battleAnimScript = gBattleAnimMove_BlazingTorque, }, [MOVE_WICKED_TORQUE] = @@ -20155,7 +20155,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SLEEP, .chance = 10, }), - .battleAnimScript = Move_WICKED_TORQUE, + .battleAnimScript = gBattleAnimMove_WickedTorque, }, [MOVE_NOXIOUS_TORQUE] = @@ -20184,7 +20184,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 30, }), - .battleAnimScript = Move_NOXIOUS_TORQUE, + .battleAnimScript = gBattleAnimMove_NoxiousTorque, }, [MOVE_COMBAT_TORQUE] = @@ -20213,7 +20213,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 30, }), - .battleAnimScript = Move_COMBAT_TORQUE, + .battleAnimScript = gBattleAnimMove_CombatTorque, }, [MOVE_MAGICAL_TORQUE] = @@ -20242,7 +20242,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_CONFUSION, .chance = 30, }), - .battleAnimScript = Move_MAGICAL_TORQUE, + .battleAnimScript = gBattleAnimMove_MagicalTorque, }, [MOVE_PSYBLADE] = @@ -20261,7 +20261,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .slicingMove = TRUE, - .battleAnimScript = Move_PSYBLADE, + .battleAnimScript = gBattleAnimMove_Psyblade, }, [MOVE_HYDRO_STEAM] = @@ -20279,7 +20279,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .thawsUser = TRUE, - .battleAnimScript = Move_HYDRO_STEAM, + .battleAnimScript = gBattleAnimMove_HydroSteam, }, [MOVE_BLOOD_MOON] = @@ -20297,7 +20297,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .cantUseTwice = TRUE, - .battleAnimScript = Move_BLOOD_MOON, + .battleAnimScript = gBattleAnimMove_BloodMoon, }, [MOVE_MATCHA_GOTCHA] = @@ -20321,7 +20321,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 20, }), - .battleAnimScript = Move_MATCHA_GOTCHA, + .battleAnimScript = gBattleAnimMove_MatchaGotcha, }, [MOVE_SYRUP_BOMB] = @@ -20344,7 +20344,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SYRUP_BOMB, .chance = 100, }), - .battleAnimScript = Move_SYRUP_BOMB, + .battleAnimScript = gBattleAnimMove_SyrupBomb, }, [MOVE_IVY_CUDGEL] = @@ -20363,7 +20363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, - .battleAnimScript = Move_IVY_CUDGEL, + .battleAnimScript = gBattleAnimMove_IvyCudgel, }, [MOVE_ELECTRO_SHOT] = @@ -20386,7 +20386,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .onChargeTurnOnly = TRUE, }, SHEER_FORCE_HACK), - .battleAnimScript = Move_ELECTRO_SHOT, + .battleAnimScript = gBattleAnimMove_ElectroShot, }, [MOVE_TERA_STARSTORM] = @@ -20407,7 +20407,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .copycatBanned = TRUE, .mimicBanned = TRUE, .sketchBanned = (B_SKETCH_BANS >= GEN_9), - .battleAnimScript = Move_TERA_STARSTORM, + .battleAnimScript = gBattleAnimMove_TeraStarstorm, }, [MOVE_FICKLE_BEAM] = @@ -20424,7 +20424,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_FICKLE_BEAM, + .battleAnimScript = gBattleAnimMove_FickleBeam, }, [MOVE_BURNING_BULWARK] = @@ -20447,7 +20447,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .copycatBanned = TRUE, .assistBanned = TRUE, - .battleAnimScript = Move_BURNING_BULWARK, + .battleAnimScript = gBattleAnimMove_BurningBulwark, }, [MOVE_THUNDERCLAP] = @@ -20462,7 +20462,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 1, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_THUNDERCLAP, + .battleAnimScript = gBattleAnimMove_Thunderclap, }, [MOVE_MIGHTY_CLEAVE] = @@ -20480,7 +20480,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .ignoresProtect = TRUE, .slicingMove = TRUE, - .battleAnimScript = Move_MIGHTY_CLEAVE, + .battleAnimScript = gBattleAnimMove_MightyCleave, }, [MOVE_TACHYON_CUTTER] = @@ -20499,7 +20499,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .strikeCount = 2, .slicingMove = TRUE, - .battleAnimScript = Move_TACHYON_CUTTER, + .battleAnimScript = gBattleAnimMove_TachyonCutter, }, [MOVE_HARD_PRESS] = @@ -20516,7 +20516,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = 100, .makesContact = TRUE, - .battleAnimScript = Move_HARD_PRESS, + .battleAnimScript = gBattleAnimMove_HardPress, }, [MOVE_DRAGON_CHEER] = @@ -20534,7 +20534,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .ignoresSubstitute = TRUE, - .battleAnimScript = Move_DRAGON_CHEER, + .battleAnimScript = gBattleAnimMove_DragonCheer, }, [MOVE_ALLURING_VOICE] = @@ -20558,7 +20558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .onlyIfTargetRaisedStats = TRUE, .chance = 100, }), - .battleAnimScript = Move_ALLURING_VOICE, + .battleAnimScript = gBattleAnimMove_AlluringVoice, }, [MOVE_TEMPER_FLARE] = @@ -20576,7 +20576,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, - .battleAnimScript = Move_TEMPER_FLARE, + .battleAnimScript = gBattleAnimMove_TemperFlare, }, [MOVE_SUPERCELL_SLAM] = @@ -20594,7 +20594,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, - .battleAnimScript = Move_SUPERCELL_SLAM, + .battleAnimScript = gBattleAnimMove_SupercellSlam, }, [MOVE_PSYCHIC_NOISE] = @@ -20617,7 +20617,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PSYCHIC_NOISE, .chance = 100, }), - .battleAnimScript = Move_PSYCHIC_NOISE, + .battleAnimScript = gBattleAnimMove_PsychicNoise, }, [MOVE_UPPER_HAND] = @@ -20639,7 +20639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 100, }), - .battleAnimScript = Move_UPPER_HAND, + .battleAnimScript = gBattleAnimMove_UpperHand, }, [MOVE_MALIGNANT_CHAIN] = @@ -20660,7 +20660,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_TOXIC, .chance = 50, }), - .battleAnimScript = Move_MALIGNANT_CHAIN, + .battleAnimScript = gBattleAnimMove_MalignantChain, }, // Z-Moves @@ -20676,7 +20676,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, //determined from move type - .battleAnimScript = Move_BREAKNECK_BLITZ, + .battleAnimScript = gBattleAnimMove_BreakneckBlitz, }, [MOVE_ALL_OUT_PUMMELING] = { @@ -20690,7 +20690,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_ALL_OUT_PUMMELING, + .battleAnimScript = gBattleAnimMove_AllOutPummeling, }, [MOVE_SUPERSONIC_SKYSTRIKE] = { @@ -20704,7 +20704,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SUPERSONIC_SKYSTRIKE, + .battleAnimScript = gBattleAnimMove_SupersonicSkystrike, }, [MOVE_ACID_DOWNPOUR] = { @@ -20718,7 +20718,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_ACID_DOWNPOUR, + .battleAnimScript = gBattleAnimMove_AcidDownpour, }, [MOVE_TECTONIC_RAGE] = { @@ -20733,7 +20733,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .battleAnimScript = Move_TECTONIC_RAGE, + .battleAnimScript = gBattleAnimMove_TectonicRage, }, [MOVE_CONTINENTAL_CRUSH] = { @@ -20747,7 +20747,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_CONTINENTAL_CRUSH, + .battleAnimScript = gBattleAnimMove_ContinentalCrush, }, [MOVE_SAVAGE_SPIN_OUT] = { @@ -20761,7 +20761,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SAVAGE_SPIN_OUT, + .battleAnimScript = gBattleAnimMove_SavageSpinOut, }, [MOVE_NEVER_ENDING_NIGHTMARE] = { @@ -20775,7 +20775,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_NEVER_ENDING_NIGHTMARE, + .battleAnimScript = gBattleAnimMove_NeverEndingNightmare, }, [MOVE_CORKSCREW_CRASH] = { @@ -20789,7 +20789,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_CORKSCREW_CRASH, + .battleAnimScript = gBattleAnimMove_CorkscrewCrash, }, [MOVE_INFERNO_OVERDRIVE] = { @@ -20803,7 +20803,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_INFERNO_OVERDRIVE, + .battleAnimScript = gBattleAnimMove_InfernoOverdrive, }, [MOVE_HYDRO_VORTEX] = { @@ -20817,7 +20817,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_HYDRO_VORTEX, + .battleAnimScript = gBattleAnimMove_HydroVortex, }, [MOVE_BLOOM_DOOM] = { @@ -20831,7 +20831,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_BLOOM_DOOM, + .battleAnimScript = gBattleAnimMove_BloomDoom, }, [MOVE_GIGAVOLT_HAVOC] = { @@ -20845,7 +20845,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_GIGAVOLT_HAVOC, + .battleAnimScript = gBattleAnimMove_GigavoltHavoc, }, [MOVE_SHATTERED_PSYCHE] = { @@ -20859,7 +20859,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SHATTERED_PSYCHE, + .battleAnimScript = gBattleAnimMove_ShatteredPsyche, }, [MOVE_SUBZERO_SLAMMER] = { @@ -20873,7 +20873,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SUBZERO_SLAMMER, + .battleAnimScript = gBattleAnimMove_SubzeroSlammer, }, [MOVE_DEVASTATING_DRAKE] = { @@ -20887,7 +20887,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_DEVASTATING_DRAKE, + .battleAnimScript = gBattleAnimMove_DevastatingDrake, }, [MOVE_BLACK_HOLE_ECLIPSE] = { @@ -20901,7 +20901,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_BLACK_HOLE_ECLIPSE, + .battleAnimScript = gBattleAnimMove_BlackHoleEclipse, }, [MOVE_TWINKLE_TACKLE] = { @@ -20915,7 +20915,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_TWINKLE_TACKLE, + .battleAnimScript = gBattleAnimMove_TwinkleTackle, }, [MOVE_CATASTROPIKA] = { @@ -20929,7 +20929,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_CATASTROPIKA, + .battleAnimScript = gBattleAnimMove_Catastropika, }, [MOVE_10000000_VOLT_THUNDERBOLT] = { @@ -20944,7 +20944,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_10000000_VOLT_THUNDERBOLT, + .battleAnimScript = gBattleAnimMove_10000000VoltThunderbolt, }, [MOVE_STOKED_SPARKSURFER] = { @@ -20962,7 +20962,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, }), - .battleAnimScript = Move_STOKED_SPARKSURFER, + .battleAnimScript = gBattleAnimMove_StokedSparksurfer, }, [MOVE_EXTREME_EVOBOOST] = { @@ -20976,7 +20976,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_USER, .priority = 0, .category = DAMAGE_CATEGORY_STATUS, - .battleAnimScript = Move_EXTREME_EVOBOOST, + .battleAnimScript = gBattleAnimMove_ExtremeEvoboost, }, [MOVE_PULVERIZING_PANCAKE] = { @@ -20990,7 +20990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_PULVERIZING_PANCAKE, + .battleAnimScript = gBattleAnimMove_PulverizingPancake, }, [MOVE_GENESIS_SUPERNOVA] = { @@ -21005,7 +21005,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .argument = ARG_SET_PSYCHIC_TERRAIN, // Set Psychic Terrain. If there's a different field terrain active, overwrite it. - .battleAnimScript = Move_GENESIS_SUPERNOVA, + .battleAnimScript = gBattleAnimMove_GenesisSupernova, }, [MOVE_SINISTER_ARROW_RAID] = { @@ -21019,7 +21019,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SINISTER_ARROW_RAID, + .battleAnimScript = gBattleAnimMove_SinisterArrowRaid, }, [MOVE_MALICIOUS_MOONSAULT] = { @@ -21033,7 +21033,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_MALICIOUS_MOONSAULT, + .battleAnimScript = gBattleAnimMove_MaliciousMoonsault, }, [MOVE_OCEANIC_OPERETTA] = { @@ -21047,7 +21047,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_OCEANIC_OPERETTA, + .battleAnimScript = gBattleAnimMove_OceanicOperetta, }, [MOVE_SPLINTERED_STORMSHARDS] = { @@ -21062,7 +21062,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. - .battleAnimScript = Move_SPLINTERED_STORMSHARDS, + .battleAnimScript = gBattleAnimMove_SplinteredStormshards, }, [MOVE_LETS_SNUGGLE_FOREVER] = { @@ -21076,7 +21076,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_LETS_SNUGGLE_FOREVER, + .battleAnimScript = gBattleAnimMove_LetsSnuggleForever, }, [MOVE_CLANGOROUS_SOULBLAZE] = { @@ -21097,7 +21097,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_CLANGOROUS_SOULBLAZE, + .battleAnimScript = gBattleAnimMove_ClangorousSoulblaze, }, [MOVE_GUARDIAN_OF_ALOLA] = { @@ -21111,7 +21111,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_GUARDIAN_OF_ALOLA, + .battleAnimScript = gBattleAnimMove_GuardianOfAlola, }, [MOVE_SEARING_SUNRAZE_SMASH] = { @@ -21126,7 +21126,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_SEARING_SUNRAZE_SMASH, + .battleAnimScript = gBattleAnimMove_SearingSunrazeSmash, }, [MOVE_MENACING_MOONRAZE_MAELSTROM] = { @@ -21141,7 +21141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_MENACING_MOONRAZE_MAELSTROM, + .battleAnimScript = gBattleAnimMove_MenacingMoonrazeMaelstrom, }, [MOVE_LIGHT_THAT_BURNS_THE_SKY] = { @@ -21156,7 +21156,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_LIGHT_THAT_BURNS_THE_SKY, + .battleAnimScript = gBattleAnimMove_LightThatBurnsTheSky, }, [MOVE_SOUL_STEALING_7_STAR_STRIKE] = { @@ -21170,7 +21170,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SOUL_STEALING_7_STAR_STRIKE, + .battleAnimScript = gBattleAnimMove_SoulStealing7StarStrike, }, [MOVE_MAX_GUARD] = @@ -21185,7 +21185,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_USER, .priority = 4, .category = DAMAGE_CATEGORY_STATUS, - .battleAnimScript = Move_MAX_GUARD, + .battleAnimScript = gBattleAnimMove_MaxGuard, }, [MOVE_MAX_FLARE] = @@ -21201,7 +21201,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SUN, - .battleAnimScript = Move_MAX_FLARE, + .battleAnimScript = gBattleAnimMove_MaxFlare, }, [MOVE_MAX_FLUTTERBY] = @@ -21217,7 +21217,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SP_ATK, - .battleAnimScript = Move_MAX_FLUTTERBY, + .battleAnimScript = gBattleAnimMove_MaxFlutterby, }, [MOVE_MAX_LIGHTNING] = @@ -21233,7 +21233,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_ELECTRIC_TERRAIN, - .battleAnimScript = Move_MAX_LIGHTNING, + .battleAnimScript = gBattleAnimMove_MaxLightning, }, [MOVE_MAX_STRIKE] = @@ -21249,7 +21249,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED, - .battleAnimScript = Move_MAX_STRIKE, + .battleAnimScript = gBattleAnimMove_MaxStrike, }, [MOVE_MAX_KNUCKLE] = @@ -21265,7 +21265,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_ATTACK, - .battleAnimScript = Move_MAX_KNUCKLE, + .battleAnimScript = gBattleAnimMove_MaxKnuckle, }, [MOVE_MAX_PHANTASM] = @@ -21281,7 +21281,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_DEFENSE, - .battleAnimScript = Move_MAX_PHANTASM, + .battleAnimScript = gBattleAnimMove_MaxPhantasm, }, [MOVE_MAX_HAILSTORM] = @@ -21297,7 +21297,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_HAIL, - .battleAnimScript = Move_MAX_HAILSTORM, + .battleAnimScript = gBattleAnimMove_MaxHailstorm, }, [MOVE_MAX_OOZE] = @@ -21313,7 +21313,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SP_ATK, - .battleAnimScript = Move_MAX_OOZE, + .battleAnimScript = gBattleAnimMove_MaxOoze, }, [MOVE_MAX_GEYSER] = @@ -21329,7 +21329,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAIN, - .battleAnimScript = Move_MAX_GEYSER, + .battleAnimScript = gBattleAnimMove_MaxGeyser, }, [MOVE_MAX_AIRSTREAM] = @@ -21345,7 +21345,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SPEED, - .battleAnimScript = Move_MAX_AIRSTREAM, + .battleAnimScript = gBattleAnimMove_MaxAirstream, }, [MOVE_MAX_STARFALL] = @@ -21361,7 +21361,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_MISTY_TERRAIN, - .battleAnimScript = Move_MAX_STARFALL, + .battleAnimScript = gBattleAnimMove_MaxStarfall, }, [MOVE_MAX_WYRMWIND] = @@ -21377,7 +21377,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_ATTACK, - .battleAnimScript = Move_MAX_WYRMWIND, + .battleAnimScript = gBattleAnimMove_MaxWyrmwind, }, [MOVE_MAX_MINDSTORM] = @@ -21393,7 +21393,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_PSYCHIC_TERRAIN, - .battleAnimScript = Move_MAX_MINDSTORM, + .battleAnimScript = gBattleAnimMove_MaxMindstorm, }, [MOVE_MAX_ROCKFALL] = @@ -21409,7 +21409,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SANDSTORM, - .battleAnimScript = Move_MAX_ROCKFALL, + .battleAnimScript = gBattleAnimMove_MaxRockfall, }, [MOVE_MAX_QUAKE] = @@ -21426,7 +21426,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SP_DEF, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .battleAnimScript = Move_MAX_QUAKE, + .battleAnimScript = gBattleAnimMove_MaxQuake, }, [MOVE_MAX_DARKNESS] = @@ -21442,7 +21442,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SP_DEF, - .battleAnimScript = Move_MAX_DARKNESS, + .battleAnimScript = gBattleAnimMove_MaxDarkness, }, [MOVE_MAX_OVERGROWTH] = @@ -21458,7 +21458,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_GRASSY_TERRAIN, - .battleAnimScript = Move_MAX_OVERGROWTH, + .battleAnimScript = gBattleAnimMove_MaxOvergrowth, }, [MOVE_MAX_STEELSPIKE] = @@ -21474,7 +21474,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_DEFENSE, - .battleAnimScript = Move_MAX_STEELSPIKE, + .battleAnimScript = gBattleAnimMove_MaxSteelspike, }, [MOVE_G_MAX_VINE_LASH] = @@ -21490,7 +21490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_VINE_LASH, - .battleAnimScript = Move_G_MAX_VINE_LASH, + .battleAnimScript = gBattleAnimMove_GMaxVineLash, }, [MOVE_G_MAX_WILDFIRE] = @@ -21506,7 +21506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_WILDFIRE, - .battleAnimScript = Move_G_MAX_WILDFIRE, + .battleAnimScript = gBattleAnimMove_GMaxWildfire, }, [MOVE_G_MAX_CANNONADE] = @@ -21522,7 +21522,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CANNONADE, - .battleAnimScript = Move_G_MAX_CANNONADE, + .battleAnimScript = gBattleAnimMove_GMaxCannonade, }, [MOVE_G_MAX_BEFUDDLE] = @@ -21538,7 +21538,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_EFFECT_SPORE_FOES, - .battleAnimScript = Move_G_MAX_BEFUDDLE, + .battleAnimScript = gBattleAnimMove_GMaxBefuddle, }, [MOVE_G_MAX_VOLT_CRASH] = @@ -21554,7 +21554,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_PARALYZE_FOES, - .battleAnimScript = Move_G_MAX_VOLT_CRASH, + .battleAnimScript = gBattleAnimMove_GMaxVoltCrash, }, [MOVE_G_MAX_GOLD_RUSH] = @@ -21570,7 +21570,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES_PAY_DAY, - .battleAnimScript = Move_G_MAX_GOLD_RUSH, + .battleAnimScript = gBattleAnimMove_GMaxGoldRush, }, [MOVE_G_MAX_CHI_STRIKE] = @@ -21586,7 +21586,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CRIT_PLUS, - .battleAnimScript = Move_G_MAX_CHI_STRIKE, + .battleAnimScript = gBattleAnimMove_GMaxChiStrike, }, [MOVE_G_MAX_TERROR] = @@ -21602,7 +21602,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_MEAN_LOOK, - .battleAnimScript = Move_G_MAX_TERROR, + .battleAnimScript = gBattleAnimMove_GMaxTerror, }, [MOVE_G_MAX_FOAM_BURST] = @@ -21618,7 +21618,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED_2_FOES, - .battleAnimScript = Move_G_MAX_FOAM_BURST, + .battleAnimScript = gBattleAnimMove_GMaxFoamBurst, }, [MOVE_G_MAX_RESONANCE] = @@ -21634,7 +21634,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_AURORA_VEIL, - .battleAnimScript = Move_G_MAX_RESONANCE, + .battleAnimScript = gBattleAnimMove_GMaxResonance, }, [MOVE_G_MAX_CUDDLE] = @@ -21650,7 +21650,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_INFATUATE_FOES, - .battleAnimScript = Move_G_MAX_CUDDLE, + .battleAnimScript = gBattleAnimMove_GMaxCuddle, }, [MOVE_G_MAX_REPLENISH] = @@ -21666,7 +21666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RECYCLE_BERRIES, - .battleAnimScript = Move_G_MAX_REPLENISH, + .battleAnimScript = gBattleAnimMove_GMaxReplenish, }, [MOVE_G_MAX_MALODOR] = @@ -21682,7 +21682,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_POISON_FOES, - .battleAnimScript = Move_G_MAX_MALODOR, + .battleAnimScript = gBattleAnimMove_GMaxMalodor, }, [MOVE_G_MAX_MELTDOWN] = @@ -21698,7 +21698,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_TORMENT_FOES, - .battleAnimScript = Move_G_MAX_MELTDOWN, + .battleAnimScript = gBattleAnimMove_GMaxMeltdown, }, [MOVE_G_MAX_DRUM_SOLO] = @@ -21715,7 +21715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_G_MAX_DRUM_SOLO, + .battleAnimScript = gBattleAnimMove_GMaxDrumSolo, }, [MOVE_G_MAX_FIREBALL] = @@ -21732,7 +21732,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_G_MAX_FIREBALL, + .battleAnimScript = gBattleAnimMove_GMaxFireball, }, [MOVE_G_MAX_HYDROSNIPE] = @@ -21749,7 +21749,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIXED_POWER, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_G_MAX_HYDROSNIPE, + .battleAnimScript = gBattleAnimMove_GMaxHydrosnipe, }, [MOVE_G_MAX_WIND_RAGE] = @@ -21765,7 +21765,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_DEFOG, - .battleAnimScript = Move_G_MAX_WIND_RAGE, + .battleAnimScript = gBattleAnimMove_GMaxWindRage, }, [MOVE_G_MAX_GRAVITAS] = @@ -21781,7 +21781,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_GRAVITY, - .battleAnimScript = Move_G_MAX_GRAVITAS, + .battleAnimScript = gBattleAnimMove_GMaxGravitas, }, [MOVE_G_MAX_STONESURGE] = @@ -21797,7 +21797,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_STEALTH_ROCK, - .battleAnimScript = Move_G_MAX_STONESURGE, + .battleAnimScript = gBattleAnimMove_GMaxStonesurge, }, [MOVE_G_MAX_VOLCALITH] = @@ -21813,7 +21813,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_VOLCALITH, - .battleAnimScript = Move_G_MAX_VOLCALITH, + .battleAnimScript = gBattleAnimMove_GMaxVolcalith, }, [MOVE_G_MAX_TARTNESS] = @@ -21829,7 +21829,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_EVASIVENESS_FOES, - .battleAnimScript = Move_G_MAX_TARTNESS, + .battleAnimScript = gBattleAnimMove_GMaxTartness, }, [MOVE_G_MAX_SWEETNESS] = @@ -21845,7 +21845,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_AROMATHERAPY, - .battleAnimScript = Move_G_MAX_SWEETNESS, + .battleAnimScript = gBattleAnimMove_GMaxSweetness, }, [MOVE_G_MAX_SANDBLAST] = @@ -21861,7 +21861,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SANDBLAST_FOES, - .battleAnimScript = Move_G_MAX_SANDBLAST, + .battleAnimScript = gBattleAnimMove_GMaxSandblast, }, [MOVE_G_MAX_STUN_SHOCK] = @@ -21877,7 +21877,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_POISON_PARALYZE_FOES, - .battleAnimScript = Move_G_MAX_STUN_SHOCK, + .battleAnimScript = gBattleAnimMove_GMaxStunShock, }, [MOVE_G_MAX_CENTIFERNO] = @@ -21893,7 +21893,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIRE_SPIN_FOES, - .battleAnimScript = Move_G_MAX_CENTIFERNO, + .battleAnimScript = gBattleAnimMove_GMaxCentiferno, }, [MOVE_G_MAX_SMITE] = @@ -21909,7 +21909,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES, - .battleAnimScript = Move_G_MAX_SMITE, + .battleAnimScript = gBattleAnimMove_GMaxSmite, }, @@ -21926,7 +21926,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_YAWN_FOE, - .battleAnimScript = Move_G_MAX_SNOOZE, + .battleAnimScript = gBattleAnimMove_GMaxSnooze, }, [MOVE_G_MAX_FINALE] = @@ -21942,7 +21942,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_HEAL_TEAM, - .battleAnimScript = Move_G_MAX_FINALE, + .battleAnimScript = gBattleAnimMove_GMaxFinale, }, [MOVE_G_MAX_STEELSURGE] = @@ -21958,7 +21958,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_STEELSURGE, - .battleAnimScript = Move_G_MAX_STEELSURGE, + .battleAnimScript = gBattleAnimMove_GMaxSteelsurge, }, [MOVE_G_MAX_DEPLETION] = @@ -21974,7 +21974,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SPITE, - .battleAnimScript = Move_G_MAX_DEPLETION, + .battleAnimScript = gBattleAnimMove_GMaxDepletion, }, [MOVE_G_MAX_ONE_BLOW] = @@ -21990,7 +21990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_BYPASS_PROTECT, - .battleAnimScript = Move_G_MAX_ONE_BLOW, + .battleAnimScript = gBattleAnimMove_GMaxOneBlow, }, [MOVE_G_MAX_RAPID_FLOW] = @@ -22006,7 +22006,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_BYPASS_PROTECT, - .battleAnimScript = Move_G_MAX_RAPID_FLOW, + .battleAnimScript = gBattleAnimMove_GMaxRapidFlow, }, }; diff --git a/src/pokemon.c b/src/pokemon.c index 165c430d96..92a50ed1aa 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6902,7 +6902,7 @@ const u8 *GetMoveAnimationScript(u16 moveId) if (gMovesInfo[moveId].battleAnimScript == NULL) { DebugPrintfLevel(MGBA_LOG_WARN, "No animation for moveId=%u", moveId); - return Move_TACKLE; + return gMovesInfo[MOVE_NONE].battleAnimScript; } return gMovesInfo[moveId].battleAnimScript; } From 3aa24f527e14fcb6955933675d856e4f87c2164f Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Wed, 4 Sep 2024 14:56:19 -0400 Subject: [PATCH 150/544] Converted Mechadoll text to COMPOUND_STRINGs (#5276) --- data/event_scripts.s | 1 - data/text/trick_house_mechadolls.inc | 134 --------------------------- include/strings.h | 45 --------- src/data/script_menu.h | 90 +++++++++--------- 4 files changed, 45 insertions(+), 225 deletions(-) delete mode 100644 data/text/trick_house_mechadolls.inc diff --git a/data/event_scripts.s b/data/event_scripts.s index d4393ac9d4..e86d895a75 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1103,7 +1103,6 @@ EventScript_VsSeekerChargingDone:: .include "data/text/contest_strings.inc" .include "data/text/contest_link.inc" .include "data/text/contest_painting.inc" - .include "data/text/trick_house_mechadolls.inc" .include "data/scripts/tv.inc" .include "data/text/tv.inc" .include "data/scripts/interview.inc" diff --git a/data/text/trick_house_mechadolls.inc b/data/text/trick_house_mechadolls.inc deleted file mode 100644 index 7edd1f1beb..0000000000 --- a/data/text/trick_house_mechadolls.inc +++ /dev/null @@ -1,134 +0,0 @@ -gTrickHouse_Mechadoll_Oddish:: - .string "ODDISH$" - -gTrickHouse_Mechadoll_Poochyena:: - .string "POOCHYENA$" - -gTrickHouse_Mechadoll_Taillow:: - .string "TAILLOW$" - -gTrickHouse_Mechadoll_Azurill:: - .string "AZURILL$" - -gTrickHouse_Mechadoll_Lotad:: - .string "LOTAD$" - -gTrickHouse_Mechadoll_Wingull:: - .string "WINGULL$" - -gTrickHouse_Mechadoll_Dustox:: - .string "DUSTOX$" - -gTrickHouse_Mechadoll_Zubat:: - .string "ZUBAT$" - -gTrickHouse_Mechadoll_Nincada:: - .string "NINCADA$" - -gTrickHouse_Mechadoll_Ralts:: - .string "RALTS$" - -gTrickHouse_Mechadoll_Zigzagoon:: - .string "ZIGZAGOON$" - -gTrickHouse_Mechadoll_Slakoth:: - .string "SLAKOTH$" - -gTrickHouse_Mechadoll_Poochyena2:: - .string "POOCHYENA$" - -gTrickHouse_Mechadoll_Shroomish:: - .string "SHROOMISH$" - -gTrickHouse_Mechadoll_Zigzagoon2:: - .string "ZIGZAGOON$" - -gTrickHouse_Mechadoll_Poochyena3:: - .string "POOCHYENA$" - -gTrickHouse_Mechadoll_Zubat2:: - .string "ZUBAT$" - -gTrickHouse_Mechadoll_Carvanha:: - .string "CARVANHA$" - -gTrickHouse_Mechadoll_BurnHeal:: - .string "BURN HEAL$" - -gTrickHouse_Mechadoll_HarborMail:: - .string "HARBOR MAIL$" - -gTrickHouse_Mechadoll_SamePrice:: - .string "Same price$" - -gTrickHouse_Mechadoll_60Yen:: - .string "¥60$" - -gTrickHouse_Mechadoll_55Yen:: - .string "¥55$" - -gTrickHouse_Mechadoll_Nothing:: - .string "Nothing$" - -gTrickHouse_Mechadoll_CostMore:: - .string "They will cost more.$" - -gTrickHouse_Mechadoll_CostLess:: - .string "They will cost less.$" - -gTrickHouse_Mechadoll_SamePrice2:: - .string "Same price$" - -gTrickHouse_Mechadoll_Male:: - .string "Male$" - -gTrickHouse_Mechadoll_Female:: - .string "Female$" - -gTrickHouse_Mechadoll_Neither:: - .string "Neither$" - -gTrickHouse_Mechadoll_ElderlyMen:: - .string "Elderly men$" - -gTrickHouse_Mechadoll_ElderlyLadies:: - .string "Elderly ladies$" - -gTrickHouse_Mechadoll_SameNumber:: - .string "Same number$" - -gTrickHouse_Mechadoll_None:: - .string "None$" - -gTrickHouse_Mechadoll_One:: - .string "1$" - -gTrickHouse_Mechadoll_Two:: - .string "2$" - -gTrickHouse_Mechadoll_Two2:: - .string "2$" - -gTrickHouse_Mechadoll_Three:: - .string "3$" - -gTrickHouse_Mechadoll_Four:: - .string "4$" - -gTrickHouse_Mechadoll_Six:: - .string "6$" - -gTrickHouse_Mechadoll_Seven:: - .string "7$" - -gTrickHouse_Mechadoll_Eight:: - .string "8$" - -gTrickHouse_Mechadoll_Six2:: - .string "6$" - -gTrickHouse_Mechadoll_Seven2:: - .string "7$" - -gTrickHouse_Mechadoll_Eight2:: - .string "8$" diff --git a/include/strings.h b/include/strings.h index 80df986993..e4adb071dd 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1011,51 +1011,6 @@ extern const u8 gText_Yes[]; extern const u8 gText_No[]; extern const u8 gText_Challenge[]; extern const u8 gText_Info3[]; -extern const u8 gTrickHouse_Mechadoll_Oddish[]; -extern const u8 gTrickHouse_Mechadoll_Poochyena[]; -extern const u8 gTrickHouse_Mechadoll_Taillow[]; -extern const u8 gTrickHouse_Mechadoll_Azurill[]; -extern const u8 gTrickHouse_Mechadoll_Lotad[]; -extern const u8 gTrickHouse_Mechadoll_Wingull[]; -extern const u8 gTrickHouse_Mechadoll_Dustox[]; -extern const u8 gTrickHouse_Mechadoll_Zubat[]; -extern const u8 gTrickHouse_Mechadoll_Nincada[]; -extern const u8 gTrickHouse_Mechadoll_Ralts[]; -extern const u8 gTrickHouse_Mechadoll_Zigzagoon[]; -extern const u8 gTrickHouse_Mechadoll_Slakoth[]; -extern const u8 gTrickHouse_Mechadoll_Poochyena2[]; -extern const u8 gTrickHouse_Mechadoll_Shroomish[]; -extern const u8 gTrickHouse_Mechadoll_Zigzagoon2[]; -extern const u8 gTrickHouse_Mechadoll_Poochyena3[]; -extern const u8 gTrickHouse_Mechadoll_Zubat2[]; -extern const u8 gTrickHouse_Mechadoll_Carvanha[]; -extern const u8 gTrickHouse_Mechadoll_BurnHeal[]; -extern const u8 gTrickHouse_Mechadoll_HarborMail[]; -extern const u8 gTrickHouse_Mechadoll_SamePrice[]; -extern const u8 gTrickHouse_Mechadoll_60Yen[]; -extern const u8 gTrickHouse_Mechadoll_55Yen[]; -extern const u8 gTrickHouse_Mechadoll_Nothing[]; -extern const u8 gTrickHouse_Mechadoll_CostMore[]; -extern const u8 gTrickHouse_Mechadoll_CostLess[]; -extern const u8 gTrickHouse_Mechadoll_SamePrice2[]; -extern const u8 gTrickHouse_Mechadoll_Male[]; -extern const u8 gTrickHouse_Mechadoll_Female[]; -extern const u8 gTrickHouse_Mechadoll_Neither[]; -extern const u8 gTrickHouse_Mechadoll_ElderlyMen[]; -extern const u8 gTrickHouse_Mechadoll_ElderlyLadies[]; -extern const u8 gTrickHouse_Mechadoll_SameNumber[]; -extern const u8 gTrickHouse_Mechadoll_None[]; -extern const u8 gTrickHouse_Mechadoll_One[]; -extern const u8 gTrickHouse_Mechadoll_Two[]; -extern const u8 gTrickHouse_Mechadoll_Two2[]; -extern const u8 gTrickHouse_Mechadoll_Three[]; -extern const u8 gTrickHouse_Mechadoll_Four[]; -extern const u8 gTrickHouse_Mechadoll_Six[]; -extern const u8 gTrickHouse_Mechadoll_Seven[]; -extern const u8 gTrickHouse_Mechadoll_Eight[]; -extern const u8 gTrickHouse_Mechadoll_Six2[]; -extern const u8 gTrickHouse_Mechadoll_Seven2[]; -extern const u8 gTrickHouse_Mechadoll_Eight2[]; // Pokédex strings extern const u8 gText_SearchForPkmnBasedOnParameters[]; diff --git a/src/data/script_menu.h b/src/data/script_menu.h index c5afa87043..3b29171327 100644 --- a/src/data/script_menu.h +++ b/src/data/script_menu.h @@ -105,107 +105,107 @@ static const struct MenuAction MultichoiceList_LevelMode[] = static const struct MenuAction MultichoiceList_Mechadoll1_Q1[] = { - {gTrickHouse_Mechadoll_Oddish}, - {gTrickHouse_Mechadoll_Poochyena}, - {gTrickHouse_Mechadoll_Taillow}, + {COMPOUND_STRING("ODDISH")}, + {COMPOUND_STRING("POOCHYENA")}, + {COMPOUND_STRING("TAILLOW")}, }; static const struct MenuAction MultichoiceList_Mechadoll1_Q2[] = { - {gTrickHouse_Mechadoll_Azurill}, - {gTrickHouse_Mechadoll_Lotad}, - {gTrickHouse_Mechadoll_Wingull}, + {COMPOUND_STRING("AZURILL")}, + {COMPOUND_STRING("LOTAD")}, + {COMPOUND_STRING("WINGULL")}, }; static const struct MenuAction MultichoiceList_Mechadoll1_Q3[] = { - {gTrickHouse_Mechadoll_Dustox}, - {gTrickHouse_Mechadoll_Zubat}, - {gTrickHouse_Mechadoll_Nincada}, + {COMPOUND_STRING("DUSTOX")}, + {COMPOUND_STRING("ZUBAT")}, + {COMPOUND_STRING("NINCADA")}, }; static const struct MenuAction MultichoiceList_Mechadoll2_Q1[] = { - {gTrickHouse_Mechadoll_Ralts}, - {gTrickHouse_Mechadoll_Zigzagoon}, - {gTrickHouse_Mechadoll_Slakoth}, + {COMPOUND_STRING("RALTS")}, + {COMPOUND_STRING("ZIGZAGOON")}, + {COMPOUND_STRING("SLAKOTH")}, }; static const struct MenuAction MultichoiceList_Mechadoll2_Q2[] = { - {gTrickHouse_Mechadoll_Poochyena2}, - {gTrickHouse_Mechadoll_Shroomish}, - {gTrickHouse_Mechadoll_Zigzagoon2}, + {COMPOUND_STRING("POOCHYENA")}, + {COMPOUND_STRING("SHROOMISH")}, + {COMPOUND_STRING("ZIGZAGOON")}, }; static const struct MenuAction MultichoiceList_Mechadoll2_Q3[] = { - {gTrickHouse_Mechadoll_Poochyena3}, - {gTrickHouse_Mechadoll_Zubat2}, - {gTrickHouse_Mechadoll_Carvanha}, + {COMPOUND_STRING("POOCHYENA")}, + {COMPOUND_STRING("ZUBAT")}, + {COMPOUND_STRING("CARVANHA")}, }; static const struct MenuAction MultichoiceList_Mechadoll3_Q1[] = { - {gTrickHouse_Mechadoll_BurnHeal}, - {gTrickHouse_Mechadoll_HarborMail}, - {gTrickHouse_Mechadoll_SamePrice}, + {COMPOUND_STRING("BURN HEAL")}, + {COMPOUND_STRING("HARBOR MAIL")}, + {COMPOUND_STRING("Same price")}, }; static const struct MenuAction MultichoiceList_Mechadoll3_Q2[] = { - {gTrickHouse_Mechadoll_60Yen}, - {gTrickHouse_Mechadoll_55Yen}, - {gTrickHouse_Mechadoll_Nothing}, + {COMPOUND_STRING("¥60")}, + {COMPOUND_STRING("¥55")}, + {COMPOUND_STRING("Nothing")}, }; static const struct MenuAction MultichoiceList_Mechadoll3_Q3[] = { - {gTrickHouse_Mechadoll_CostMore}, - {gTrickHouse_Mechadoll_CostLess}, - {gTrickHouse_Mechadoll_SamePrice2}, + {COMPOUND_STRING("They will cost more.")}, + {COMPOUND_STRING("They will cost less.")}, + {COMPOUND_STRING("Same price")}, }; static const struct MenuAction MultichoiceList_Mechadoll4_Q1[] = { - {gTrickHouse_Mechadoll_Male}, - {gTrickHouse_Mechadoll_Female}, - {gTrickHouse_Mechadoll_Neither}, + {COMPOUND_STRING("Male")}, + {COMPOUND_STRING("Female")}, + {COMPOUND_STRING("Neither")}, }; static const struct MenuAction MultichoiceList_Mechadoll4_Q2[] = { - {gTrickHouse_Mechadoll_ElderlyMen}, - {gTrickHouse_Mechadoll_ElderlyLadies}, - {gTrickHouse_Mechadoll_SameNumber}, + {COMPOUND_STRING("Elderly men")}, + {COMPOUND_STRING("Elderly ladies")}, + {COMPOUND_STRING("Same number")}, }; static const struct MenuAction MultichoiceList_Mechadoll4_Q3[] = { - {gTrickHouse_Mechadoll_None}, - {gTrickHouse_Mechadoll_One}, - {gTrickHouse_Mechadoll_Two}, + {COMPOUND_STRING("None")}, + {COMPOUND_STRING("1")}, + {COMPOUND_STRING("2")}, }; static const struct MenuAction MultichoiceList_Mechadoll5_Q1[] = { - {gTrickHouse_Mechadoll_Two2}, - {gTrickHouse_Mechadoll_Three}, - {gTrickHouse_Mechadoll_Four}, + {COMPOUND_STRING("2")}, + {COMPOUND_STRING("3")}, + {COMPOUND_STRING("4")}, }; static const struct MenuAction MultichoiceList_Mechadoll5_Q2[] = { - {gTrickHouse_Mechadoll_Six}, - {gTrickHouse_Mechadoll_Seven}, - {gTrickHouse_Mechadoll_Eight}, + {COMPOUND_STRING("6")}, + {COMPOUND_STRING("7")}, + {COMPOUND_STRING("8")}, }; static const struct MenuAction MultichoiceList_Mechadoll5_Q3[] = { - {gTrickHouse_Mechadoll_Six2}, - {gTrickHouse_Mechadoll_Seven2}, - {gTrickHouse_Mechadoll_Eight2}, + {COMPOUND_STRING("6")}, + {COMPOUND_STRING("7")}, + {COMPOUND_STRING("8")}, }; static const struct MenuAction MultichoiceList_VendingMachine[] = From 181c4ea4768694c24d9ddabf6882a1ca75638378 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Wed, 4 Sep 2024 22:25:41 +0200 Subject: [PATCH 151/544] Typeless fix (#5323) Co-authored-by: Hedara --- src/battle_util.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/battle_util.c b/src/battle_util.c index d6279dc317..527d2d350a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -11790,5 +11790,10 @@ u32 GetMoveType(u32 move) { if (gMain.inBattle && gBattleStruct->dynamicMoveType) return gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; + else if (B_UPDATED_MOVE_TYPES < GEN_5 + && (move == MOVE_BEAT_UP + || move == MOVE_FUTURE_SIGHT + || move == MOVE_DOOM_DESIRE)) + return TYPE_MYSTERY; return gMovesInfo[move].type; } From d3a3565fefa8189f2b433cb05f6c48da5f4a4d7a Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:43:34 -0400 Subject: [PATCH 152/544] Converted PC strings to COMPOUND_STRINGs (#5314) * Converted PC strings to COMPOUND_STRINGs * Update src/pokemon_storage_system.c Co-authored-by: Eduardo Quezada --------- Co-authored-by: Eduardo Quezada --- include/strings.h | 82 ------------------- src/pokemon_storage_system.c | 154 ++++++++++++++++++----------------- src/strings.c | 81 ------------------ 3 files changed, 81 insertions(+), 236 deletions(-) diff --git a/include/strings.h b/include/strings.h index e4adb071dd..041f43d05b 100644 --- a/include/strings.h +++ b/include/strings.h @@ -216,17 +216,6 @@ extern const u8 gMenuText_Confirm[]; extern const u8 gMenuText_Show[]; extern const u8 gMenuText_Give2[]; -extern const u8 gText_WithdrawPokemon[]; -extern const u8 gText_WithdrawMonDescription[]; -extern const u8 gText_DepositPokemon[]; -extern const u8 gText_DepositMonDescription[]; -extern const u8 gText_MovePokemon[]; -extern const u8 gText_MoveMonDescription[]; -extern const u8 gText_MoveItems[]; -extern const u8 gText_MoveItemsDescription[]; -extern const u8 gText_SeeYa[]; -extern const u8 gText_SeeYaDescription[]; - extern const u8 gText_EggNickname[]; extern const u8 gText_Pokemon[]; extern const u8 gText_InParty[]; @@ -1881,78 +1870,7 @@ extern const u8 BattlePyramid_Text_SixTrainersRemaining6[]; extern const u8 BattlePyramid_Text_SevenTrainersRemaining6[]; // PC strings -extern const u8 gText_ExitFromBox[]; -extern const u8 gText_WhatDoYouWantToDo[]; -extern const u8 gText_PleasePickATheme[]; -extern const u8 gText_PickTheWallpaper[]; -extern const u8 gText_PkmnIsSelected[]; -extern const u8 gText_JumpToWhichBox[]; -extern const u8 gText_DepositInWhichBox[]; -extern const u8 gText_PkmnWasDeposited[]; -extern const u8 gText_BoxIsFull2[]; -extern const u8 gText_ReleaseThisPokemon[]; -extern const u8 gText_PkmnWasReleased[]; -extern const u8 gText_ByeByePkmn[]; -extern const u8 gText_MarkYourPkmn[]; -extern const u8 gText_ThatsYourLastPkmn[]; extern const u8 gText_YourPartysFull[]; -extern const u8 gText_YoureHoldingAPkmn[]; -extern const u8 gText_WhichOneWillYouTake[]; -extern const u8 gText_YouCantReleaseAnEgg[]; -extern const u8 gText_ContinueBoxOperations[]; -extern const u8 gText_PkmnCameBack[]; -extern const u8 gText_WasItWorriedAboutYou[]; -extern const u8 gText_FourEllipsesExclamation[]; -extern const u8 gText_PleaseRemoveTheMail[]; -extern const u8 gText_GiveToAPkmn[]; -extern const u8 gText_PlacedItemInBag[]; -extern const u8 gText_BagIsFull2[]; -extern const u8 gText_PutItemInBag[]; -extern const u8 gText_ItemIsNowHeld[]; -extern const u8 gText_ChangedToNewItem[]; -extern const u8 gText_MailCantBeStored[]; -extern const u8 gPCText_Cancel[]; -extern const u8 gPCText_Store[]; -extern const u8 gPCText_Withdraw[]; -extern const u8 gPCText_Move[]; -extern const u8 gPCText_Shift[]; -extern const u8 gPCText_Place[]; -extern const u8 gPCText_Summary[]; -extern const u8 gPCText_Release[]; -extern const u8 gPCText_Mark[]; -extern const u8 gPCText_Jump[]; -extern const u8 gPCText_Wallpaper[]; -extern const u8 gPCText_Name[]; -extern const u8 gPCText_Take[]; -extern const u8 gPCText_Give[]; -extern const u8 gPCText_Give[]; -extern const u8 gPCText_Switch[]; -extern const u8 gPCText_Bag[]; -extern const u8 gPCText_Info[]; -extern const u8 gPCText_Scenery1[]; -extern const u8 gPCText_Scenery2[]; -extern const u8 gPCText_Scenery3[]; -extern const u8 gPCText_Etcetera[]; -extern const u8 gPCText_Friends[]; -extern const u8 gPCText_Forest[]; -extern const u8 gPCText_City[]; -extern const u8 gPCText_Desert[]; -extern const u8 gPCText_Savanna[]; -extern const u8 gPCText_Crag[]; -extern const u8 gPCText_Volcano[]; -extern const u8 gPCText_Snow[]; -extern const u8 gPCText_Cave[]; -extern const u8 gPCText_Beach[]; -extern const u8 gPCText_Seafloor[]; -extern const u8 gPCText_River[]; -extern const u8 gPCText_Sky[]; -extern const u8 gPCText_PolkaDot[]; -extern const u8 gPCText_Pokecenter[]; -extern const u8 gPCText_Machine[]; -extern const u8 gPCText_Simple[]; -extern const u8 gText_PartyFull[]; -extern const u8 gText_Box[]; -extern const u8 gText_JustOnePkmn[]; // battle main extern const u8 gText_LinkStandby3[]; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 6c9c53fd7f..54fee9e77a 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -892,16 +892,20 @@ static void UnkUtil_DmaRun(struct UnkUtilData *); void SetMonFormPSS(struct BoxPokemon *boxMon); void UpdateSpeciesSpritePSS(struct BoxPokemon *boxmon); +static const u8 gText_JustOnePkmn[] = _("There is just one POKéMON with you."); +static const u8 gText_PartyFull[] = _("Your party is full!"); +static const u8 gText_Box[] = _("BOX"); + struct { const u8 *text; const u8 *desc; } static const sMainMenuTexts[OPTIONS_COUNT] = { - [OPTION_WITHDRAW] = {gText_WithdrawPokemon, gText_WithdrawMonDescription}, - [OPTION_DEPOSIT] = {gText_DepositPokemon, gText_DepositMonDescription}, - [OPTION_MOVE_MONS] = {gText_MovePokemon, gText_MoveMonDescription}, - [OPTION_MOVE_ITEMS] = {gText_MoveItems, gText_MoveItemsDescription}, - [OPTION_EXIT] = {gText_SeeYa, gText_SeeYaDescription} + [OPTION_WITHDRAW] = {COMPOUND_STRING("WITHDRAW POKéMON"), COMPOUND_STRING("Move POKéMON stored in BOXES to\nyour party.")}, + [OPTION_DEPOSIT] = {COMPOUND_STRING("DEPOSIT POKéMON"), COMPOUND_STRING("Store POKéMON in your party in BOXES.")}, + [OPTION_MOVE_MONS] = {COMPOUND_STRING("MOVE POKéMON"), COMPOUND_STRING("Organize the POKéMON in BOXES and\nin your party.")}, + [OPTION_MOVE_ITEMS] = {COMPOUND_STRING("MOVE ITEMS"), COMPOUND_STRING("Move items held by any POKéMON\nin a BOX or your party.")}, + [OPTION_EXIT] = {COMPOUND_STRING("SEE YA!"), COMPOUND_STRING("Return to the previous menu.")} }; static const struct WindowTemplate sWindowTemplate_MainMenu = @@ -1078,39 +1082,41 @@ static const struct SpriteTemplate sSpriteTemplate_DisplayMon = .callback = SpriteCallbackDummy, }; +static const u8 gText_PkmnIsSelected[] = _("{DYNAMIC 0} is selected."); + static const struct StorageMessage sMessages[] = { - [MSG_EXIT_BOX] = {gText_ExitFromBox, MSG_VAR_NONE}, - [MSG_WHAT_YOU_DO] = {gText_WhatDoYouWantToDo, MSG_VAR_NONE}, - [MSG_PICK_A_THEME] = {gText_PleasePickATheme, MSG_VAR_NONE}, - [MSG_PICK_A_WALLPAPER] = {gText_PickTheWallpaper, MSG_VAR_NONE}, - [MSG_IS_SELECTED] = {gText_PkmnIsSelected, MSG_VAR_MON_NAME_1}, - [MSG_JUMP_TO_WHICH_BOX] = {gText_JumpToWhichBox, MSG_VAR_NONE}, - [MSG_DEPOSIT_IN_WHICH_BOX] = {gText_DepositInWhichBox, MSG_VAR_NONE}, - [MSG_WAS_DEPOSITED] = {gText_PkmnWasDeposited, MSG_VAR_MON_NAME_1}, - [MSG_BOX_IS_FULL] = {gText_BoxIsFull2, MSG_VAR_NONE}, - [MSG_RELEASE_POKE] = {gText_ReleaseThisPokemon, MSG_VAR_NONE}, - [MSG_WAS_RELEASED] = {gText_PkmnWasReleased, MSG_VAR_RELEASE_MON_1}, - [MSG_BYE_BYE] = {gText_ByeByePkmn, MSG_VAR_RELEASE_MON_3}, - [MSG_MARK_POKE] = {gText_MarkYourPkmn, MSG_VAR_NONE}, - [MSG_LAST_POKE] = {gText_ThatsYourLastPkmn, MSG_VAR_NONE}, - [MSG_PARTY_FULL] = {gText_YourPartysFull, MSG_VAR_NONE}, - [MSG_HOLDING_POKE] = {gText_YoureHoldingAPkmn, MSG_VAR_NONE}, - [MSG_WHICH_ONE_WILL_TAKE] = {gText_WhichOneWillYouTake, MSG_VAR_NONE}, - [MSG_CANT_RELEASE_EGG] = {gText_YouCantReleaseAnEgg, MSG_VAR_NONE}, - [MSG_CONTINUE_BOX] = {gText_ContinueBoxOperations, MSG_VAR_NONE}, - [MSG_CAME_BACK] = {gText_PkmnCameBack, MSG_VAR_MON_NAME_1}, - [MSG_WORRIED] = {gText_WasItWorriedAboutYou, MSG_VAR_NONE}, - [MSG_SURPRISE] = {gText_FourEllipsesExclamation, MSG_VAR_NONE}, - [MSG_PLEASE_REMOVE_MAIL] = {gText_PleaseRemoveTheMail, MSG_VAR_NONE}, - [MSG_IS_SELECTED2] = {gText_PkmnIsSelected, MSG_VAR_ITEM_NAME}, - [MSG_GIVE_TO_MON] = {gText_GiveToAPkmn, MSG_VAR_NONE}, - [MSG_PLACED_IN_BAG] = {gText_PlacedItemInBag, MSG_VAR_ITEM_NAME}, - [MSG_BAG_FULL] = {gText_BagIsFull2, MSG_VAR_NONE}, - [MSG_PUT_IN_BAG] = {gText_PutItemInBag, MSG_VAR_NONE}, - [MSG_ITEM_IS_HELD] = {gText_ItemIsNowHeld, MSG_VAR_ITEM_NAME}, - [MSG_CHANGED_TO_ITEM] = {gText_ChangedToNewItem, MSG_VAR_ITEM_NAME}, - [MSG_CANT_STORE_MAIL] = {gText_MailCantBeStored, MSG_VAR_NONE}, + [MSG_EXIT_BOX] = {COMPOUND_STRING("Exit from the BOX?"), MSG_VAR_NONE}, + [MSG_WHAT_YOU_DO] = {COMPOUND_STRING("What do you want to do?"), MSG_VAR_NONE}, + [MSG_PICK_A_THEME] = {COMPOUND_STRING("Please pick a theme."), MSG_VAR_NONE}, + [MSG_PICK_A_WALLPAPER] = {COMPOUND_STRING("Pick the wallpaper."), MSG_VAR_NONE}, + [MSG_IS_SELECTED] = {gText_PkmnIsSelected, MSG_VAR_MON_NAME_1}, + [MSG_JUMP_TO_WHICH_BOX] = {COMPOUND_STRING("Jump to which BOX?"), MSG_VAR_NONE}, + [MSG_DEPOSIT_IN_WHICH_BOX] = {COMPOUND_STRING("Deposit in which BOX?"), MSG_VAR_NONE}, + [MSG_WAS_DEPOSITED] = {COMPOUND_STRING("{DYNAMIC 0} was deposited."), MSG_VAR_MON_NAME_1}, + [MSG_BOX_IS_FULL] = {COMPOUND_STRING("The BOX is full."), MSG_VAR_NONE}, + [MSG_RELEASE_POKE] = {COMPOUND_STRING("Release this POKéMON?"), MSG_VAR_NONE}, + [MSG_WAS_RELEASED] = {COMPOUND_STRING("{DYNAMIC 0} was released."), MSG_VAR_RELEASE_MON_1}, + [MSG_BYE_BYE] = {COMPOUND_STRING("Bye-bye, {DYNAMIC 0}!"), MSG_VAR_RELEASE_MON_3}, + [MSG_MARK_POKE] = {COMPOUND_STRING("Mark your POKéMON."), MSG_VAR_NONE}, + [MSG_LAST_POKE] = {COMPOUND_STRING("That's your last POKéMON!"), MSG_VAR_NONE}, + [MSG_PARTY_FULL] = {gText_YourPartysFull, MSG_VAR_NONE}, + [MSG_HOLDING_POKE] = {COMPOUND_STRING("You're holding a POKéMON!"), MSG_VAR_NONE}, + [MSG_WHICH_ONE_WILL_TAKE] = {COMPOUND_STRING("Which one will you take?"), MSG_VAR_NONE}, + [MSG_CANT_RELEASE_EGG] = {COMPOUND_STRING("You can't release an EGG."), MSG_VAR_NONE}, + [MSG_CONTINUE_BOX] = {COMPOUND_STRING("Continue BOX operations?"), MSG_VAR_NONE}, + [MSG_CAME_BACK] = {COMPOUND_STRING("{DYNAMIC 0} came back!"), MSG_VAR_MON_NAME_1}, + [MSG_WORRIED] = {COMPOUND_STRING("Was it worried about you?"), MSG_VAR_NONE}, + [MSG_SURPRISE] = {COMPOUND_STRING("… … … … !"), MSG_VAR_NONE}, + [MSG_PLEASE_REMOVE_MAIL] = {COMPOUND_STRING("Please remove the MAIL."), MSG_VAR_NONE}, + [MSG_IS_SELECTED2] = {gText_PkmnIsSelected, MSG_VAR_ITEM_NAME}, + [MSG_GIVE_TO_MON] = {COMPOUND_STRING("GIVE to a POKéMON?"), MSG_VAR_NONE}, + [MSG_PLACED_IN_BAG] = {COMPOUND_STRING("Placed item in the BAG."), MSG_VAR_ITEM_NAME}, + [MSG_BAG_FULL] = {COMPOUND_STRING("The BAG is full."), MSG_VAR_NONE}, + [MSG_PUT_IN_BAG] = {COMPOUND_STRING("Put this item in the BAG?"), MSG_VAR_NONE}, + [MSG_ITEM_IS_HELD] = {COMPOUND_STRING("{DYNAMIC 0} is now held."), MSG_VAR_ITEM_NAME}, + [MSG_CHANGED_TO_ITEM] = {COMPOUND_STRING("Changed to {DYNAMIC 0}."), MSG_VAR_ITEM_NAME}, + [MSG_CANT_STORE_MAIL] = {COMPOUND_STRING("MAIL can't be stored!"), MSG_VAR_NONE}, }; static const struct WindowTemplate sYesNoWindowTemplate = @@ -8041,47 +8047,49 @@ static void InitMenu(void) sStorage->menuWindow.baseBlock = 92; } +static const u8 gPCText_Give[] = _("GIVE"); + static const u8 *const sMenuTexts[] = { - [MENU_CANCEL] = gPCText_Cancel, - [MENU_STORE] = gPCText_Store, - [MENU_WITHDRAW] = gPCText_Withdraw, - [MENU_MOVE] = gPCText_Move, - [MENU_SHIFT] = gPCText_Shift, - [MENU_PLACE] = gPCText_Place, - [MENU_SUMMARY] = gPCText_Summary, - [MENU_RELEASE] = gPCText_Release, - [MENU_MARK] = gPCText_Mark, - [MENU_JUMP] = gPCText_Jump, - [MENU_WALLPAPER] = gPCText_Wallpaper, - [MENU_NAME] = gPCText_Name, - [MENU_TAKE] = gPCText_Take, + [MENU_CANCEL] = COMPOUND_STRING("CANCEL"), + [MENU_STORE] = COMPOUND_STRING("STORE"), + [MENU_WITHDRAW] = COMPOUND_STRING("WITHDRAW"), + [MENU_MOVE] = COMPOUND_STRING("SHIFT"), + [MENU_SHIFT] = COMPOUND_STRING("MOVE"), + [MENU_PLACE] = COMPOUND_STRING("PLACE"), + [MENU_SUMMARY] = COMPOUND_STRING("SUMMARY"), + [MENU_RELEASE] = COMPOUND_STRING("RELEASE"), + [MENU_MARK] = COMPOUND_STRING("MARK"), + [MENU_JUMP] = COMPOUND_STRING("NAME"), + [MENU_WALLPAPER] = COMPOUND_STRING("JUMP"), + [MENU_NAME] = COMPOUND_STRING("WALLPAPER"), + [MENU_TAKE] = COMPOUND_STRING("TAKE"), [MENU_GIVE] = gPCText_Give, [MENU_GIVE_2] = gPCText_Give, - [MENU_SWITCH] = gPCText_Switch, - [MENU_BAG] = gPCText_Bag, - [MENU_INFO] = gPCText_Info, - [MENU_SCENERY_1] = gPCText_Scenery1, - [MENU_SCENERY_2] = gPCText_Scenery2, - [MENU_SCENERY_3] = gPCText_Scenery3, - [MENU_ETCETERA] = gPCText_Etcetera, - [MENU_FRIENDS] = gPCText_Friends, - [MENU_FOREST] = gPCText_Forest, - [MENU_CITY] = gPCText_City, - [MENU_DESERT] = gPCText_Desert, - [MENU_SAVANNA] = gPCText_Savanna, - [MENU_CRAG] = gPCText_Crag, - [MENU_VOLCANO] = gPCText_Volcano, - [MENU_SNOW] = gPCText_Snow, - [MENU_CAVE] = gPCText_Cave, - [MENU_BEACH] = gPCText_Beach, - [MENU_SEAFLOOR] = gPCText_Seafloor, - [MENU_RIVER] = gPCText_River, - [MENU_SKY] = gPCText_Sky, - [MENU_POLKADOT] = gPCText_PolkaDot, - [MENU_POKECENTER] = gPCText_Pokecenter, - [MENU_MACHINE] = gPCText_Machine, - [MENU_SIMPLE] = gPCText_Simple, + [MENU_SWITCH] = COMPOUND_STRING("SWITCH"), + [MENU_BAG] = COMPOUND_STRING("BAG"), + [MENU_INFO] = COMPOUND_STRING("INFO"), + [MENU_SCENERY_1] = COMPOUND_STRING("SCENERY 1"), + [MENU_SCENERY_2] = COMPOUND_STRING("SCENERY 2"), + [MENU_SCENERY_3] = COMPOUND_STRING("SCENERY 3"), + [MENU_ETCETERA] = COMPOUND_STRING("ETCETERA"), + [MENU_FRIENDS] = COMPOUND_STRING("FRIENDS"), + [MENU_FOREST] = COMPOUND_STRING("FOREST"), + [MENU_CITY] = COMPOUND_STRING("CITY"), + [MENU_DESERT] = COMPOUND_STRING("DESERT"), + [MENU_SAVANNA] = COMPOUND_STRING("SAVANNA"), + [MENU_CRAG] = COMPOUND_STRING("CRAG"), + [MENU_VOLCANO] = COMPOUND_STRING("VOLCANO"), + [MENU_SNOW] = COMPOUND_STRING("SNOW"), + [MENU_CAVE] = COMPOUND_STRING("CAVE"), + [MENU_BEACH] = COMPOUND_STRING("BEACH"), + [MENU_SEAFLOOR] = COMPOUND_STRING("SEAFLOOR"), + [MENU_RIVER] = COMPOUND_STRING("RIVER"), + [MENU_SKY] = COMPOUND_STRING("SKY"), + [MENU_POLKADOT] = COMPOUND_STRING("POLKA-DOT"), + [MENU_POKECENTER] = COMPOUND_STRING("POKéCENTER"), + [MENU_MACHINE] = COMPOUND_STRING("MACHINE"), + [MENU_SIMPLE] = COMPOUND_STRING("SIMPLE"), }; static void SetMenuText(u8 textId) diff --git a/src/strings.c b/src/strings.c index 54a08f32e2..6009dbf5e6 100644 --- a/src/strings.c +++ b/src/strings.c @@ -814,88 +814,7 @@ const u8 gText_MtPyre[] = _("MT. PYRE"); const u8 gText_SkyPillar[] = _("SKY PILLAR"); const u8 gText_DontRemember[] = _("Don't remember"); const u8 gText_Exit[] = _("EXIT"); -const u8 gText_ExitFromBox[] = _("Exit from the BOX?"); -const u8 gText_WhatDoYouWantToDo[] = _("What do you want to do?"); -const u8 gText_PleasePickATheme[] = _("Please pick a theme."); -const u8 gText_PickTheWallpaper[] = _("Pick the wallpaper."); -const u8 gText_PkmnIsSelected[] = _("{DYNAMIC 0} is selected."); -const u8 gText_JumpToWhichBox[] = _("Jump to which BOX?"); -const u8 gText_DepositInWhichBox[] = _("Deposit in which BOX?"); -const u8 gText_PkmnWasDeposited[] = _("{DYNAMIC 0} was deposited."); -const u8 gText_BoxIsFull2[] = _("The BOX is full."); -const u8 gText_ReleaseThisPokemon[] = _("Release this POKéMON?"); -const u8 gText_PkmnWasReleased[] = _("{DYNAMIC 0} was released."); -const u8 gText_ByeByePkmn[] = _("Bye-bye, {DYNAMIC 0}!"); -const u8 gText_MarkYourPkmn[] = _("Mark your POKéMON."); -const u8 gText_ThatsYourLastPkmn[] = _("That's your last POKéMON!"); const u8 gText_YourPartysFull[] = _("Your party's full!{PAUSE_UNTIL_PRESS}"); -const u8 gText_YoureHoldingAPkmn[] = _("You're holding a POKéMON!"); -const u8 gText_WhichOneWillYouTake[] = _("Which one will you take?"); -const u8 gText_YouCantReleaseAnEgg[] = _("You can't release an EGG."); -const u8 gText_ContinueBoxOperations[] = _("Continue BOX operations?"); -const u8 gText_PkmnCameBack[] = _("{DYNAMIC 0} came back!"); -const u8 gText_WasItWorriedAboutYou[] = _("Was it worried about you?"); -const u8 gText_FourEllipsesExclamation[] = _("… … … … !"); -const u8 gText_PleaseRemoveTheMail[] = _("Please remove the MAIL."); -const u8 gText_GiveToAPkmn[] = _("GIVE to a POKéMON?"); -const u8 gText_PlacedItemInBag[] = _("Placed item in the BAG."); -const u8 gText_BagIsFull2[] = _("The BAG is full."); -const u8 gText_PutItemInBag[] = _("Put this item in the BAG?"); -const u8 gText_ItemIsNowHeld[] = _("{DYNAMIC 0} is now held."); -const u8 gText_ChangedToNewItem[] = _("Changed to {DYNAMIC 0}."); -const u8 gText_MailCantBeStored[] = _("MAIL can't be stored!"); -const u8 gPCText_Cancel[] = _("CANCEL"); -const u8 gPCText_Store[] = _("STORE"); -const u8 gPCText_Withdraw[] = _("WITHDRAW"); -const u8 gPCText_Shift[] = _("SHIFT"); -const u8 gPCText_Move[] = _("MOVE"); -const u8 gPCText_Place[] = _("PLACE"); -const u8 gPCText_Summary[] = _("SUMMARY"); -const u8 gPCText_Release[] = _("RELEASE"); -const u8 gPCText_Mark[] = _("MARK"); -const u8 gPCText_Name[] = _("NAME"); -const u8 gPCText_Jump[] = _("JUMP"); -const u8 gPCText_Wallpaper[] = _("WALLPAPER"); -const u8 gPCText_Take[] = _("TAKE"); -const u8 gPCText_Give[] = _("GIVE"); -const u8 gPCText_Switch[] = _("SWITCH"); -const u8 gPCText_Bag[] = _("BAG"); -const u8 gPCText_Info[] = _("INFO"); -const u8 gPCText_Scenery1[] = _("SCENERY 1"); -const u8 gPCText_Scenery2[] = _("SCENERY 2"); -const u8 gPCText_Scenery3[] = _("SCENERY 3"); -const u8 gPCText_Etcetera[] = _("ETCETERA"); -const u8 gPCText_Friends[] = _("FRIENDS"); -const u8 gPCText_Forest[] = _("FOREST"); -const u8 gPCText_City[] = _("CITY"); -const u8 gPCText_Desert[] = _("DESERT"); -const u8 gPCText_Savanna[] = _("SAVANNA"); -const u8 gPCText_Crag[] = _("CRAG"); -const u8 gPCText_Volcano[] = _("VOLCANO"); -const u8 gPCText_Snow[] = _("SNOW"); -const u8 gPCText_Cave[] = _("CAVE"); -const u8 gPCText_Beach[] = _("BEACH"); -const u8 gPCText_Seafloor[] = _("SEAFLOOR"); -const u8 gPCText_River[] = _("RIVER"); -const u8 gPCText_Sky[] = _("SKY"); -const u8 gPCText_PolkaDot[] = _("POLKA-DOT"); -const u8 gPCText_Pokecenter[] = _("POKéCENTER"); -const u8 gPCText_Machine[] = _("MACHINE"); -const u8 gPCText_Simple[] = _("SIMPLE"); -const u8 gText_WhatWouldYouLikeToDo[] = _("What would you like to do?"); // Unused -const u8 gText_WithdrawPokemon[] = _("WITHDRAW POKéMON"); -const u8 gText_DepositPokemon[] = _("DEPOSIT POKéMON"); -const u8 gText_MovePokemon[] = _("MOVE POKéMON"); -const u8 gText_MoveItems[] = _("MOVE ITEMS"); -const u8 gText_SeeYa[] = _("SEE YA!"); -const u8 gText_WithdrawMonDescription[] = _("Move POKéMON stored in BOXES to\nyour party."); -const u8 gText_DepositMonDescription[] = _("Store POKéMON in your party in BOXES."); -const u8 gText_MoveMonDescription[] = _("Organize the POKéMON in BOXES and\nin your party."); -const u8 gText_MoveItemsDescription[] = _("Move items held by any POKéMON\nin a BOX or your party."); -const u8 gText_SeeYaDescription[] = _("Return to the previous menu."); -const u8 gText_JustOnePkmn[] = _("There is just one POKéMON with you."); -const u8 gText_PartyFull[] = _("Your party is full!"); -const u8 gText_Box[] = _("BOX"); const u8 gText_NatureSlash[] = _("NATURE/"); const u8 gText_InParty[] = _("IN PARTY"); const u8 gText_PokemonMaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}"); // Unused From 59787d0c1357bfd1dd7f5fddfee21a42dd479fcb Mon Sep 17 00:00:00 2001 From: Sadfish the Sad Date: Thu, 5 Sep 2024 02:18:09 -0400 Subject: [PATCH 153/544] new terrain bgs (#5162) Toggled by B_NEW_TERRAIN_BACKGROUNDS --- .../backgrounds/new_electric_terrain.bin | Bin 0 -> 4096 bytes .../backgrounds/new_electric_terrain.pal | 19 +++++++ .../backgrounds/new_electric_terrain.png | Bin 0 -> 1242 bytes .../backgrounds/new_grassy_terrain.bin | Bin 0 -> 4096 bytes .../backgrounds/new_grassy_terrain.pal | 19 +++++++ .../backgrounds/new_grassy_terrain.png | Bin 0 -> 1057 bytes .../backgrounds/new_misty_terrain.bin | Bin 0 -> 4096 bytes .../backgrounds/new_misty_terrain.pal | 19 +++++++ .../backgrounds/new_misty_terrain.png | Bin 0 -> 1003 bytes .../backgrounds/new_psychic_terrain.bin | Bin 0 -> 4096 bytes .../backgrounds/new_psychic_terrain.pal | 19 +++++++ .../backgrounds/new_psychic_terrain.png | Bin 0 -> 1045 bytes src/graphics.c | 50 ++++++++++++------ 13 files changed, 110 insertions(+), 16 deletions(-) create mode 100644 graphics/battle_anims/backgrounds/new_electric_terrain.bin create mode 100644 graphics/battle_anims/backgrounds/new_electric_terrain.pal create mode 100644 graphics/battle_anims/backgrounds/new_electric_terrain.png create mode 100644 graphics/battle_anims/backgrounds/new_grassy_terrain.bin create mode 100644 graphics/battle_anims/backgrounds/new_grassy_terrain.pal create mode 100644 graphics/battle_anims/backgrounds/new_grassy_terrain.png create mode 100644 graphics/battle_anims/backgrounds/new_misty_terrain.bin create mode 100644 graphics/battle_anims/backgrounds/new_misty_terrain.pal create mode 100644 graphics/battle_anims/backgrounds/new_misty_terrain.png create mode 100644 graphics/battle_anims/backgrounds/new_psychic_terrain.bin create mode 100644 graphics/battle_anims/backgrounds/new_psychic_terrain.pal create mode 100644 graphics/battle_anims/backgrounds/new_psychic_terrain.png diff --git a/graphics/battle_anims/backgrounds/new_electric_terrain.bin b/graphics/battle_anims/backgrounds/new_electric_terrain.bin new file mode 100644 index 0000000000000000000000000000000000000000..581c331ea07bfcfd97f7efc985b8b73e0cfed1b0 GIT binary patch literal 4096 zcmeH}Nlz3(7>4`6Pv8gCbDM*pfGFx5Km=T24k{pHer zkR4oLe#HC;Pn=B!xl}T#N-CL5VDcn=sJu`2*I&B7Di_xZ4?9A{E+_om2Z4!ni*!9W1a;TSz=jR;}2F?WsP+< z*kp@scKFFJe)ET2_O!ku5{SgU*cXlk^1e2HEV!}<2YooaI{#PfdJ_xp7Ox@R0lVGT zwcLF@?R<*H430k|-ht!Vfxp6(NT&qT^`kax6Gfu&*+^zpe8Ok!%dCoD_>Fy;RSAfI zu`jbKRiet+msyoI(Pr$+tV&P>jeVI_afNH_%dCngJY!#GRYD?U?8~f5ScHvznN^Yh Ly(4V*e_Q__diO-u literal 0 HcmV?d00001 diff --git a/graphics/battle_anims/backgrounds/new_electric_terrain.pal b/graphics/battle_anims/backgrounds/new_electric_terrain.pal new file mode 100644 index 0000000000..8741f4c6fa --- /dev/null +++ b/graphics/battle_anims/backgrounds/new_electric_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +237 28 36 +251 239 143 +247 228 69 +234 209 76 +222 186 48 +160 113 22 +255 255 16 +213 222 32 +255 255 255 +222 153 4 +222 171 55 +230 188 67 +247 210 69 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new_electric_terrain.png b/graphics/battle_anims/backgrounds/new_electric_terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad234b1d32a201825eaed0a3a73e1b286d65934 GIT binary patch literal 1242 zcmV<01SR{4P)006iI0{{R3mSpV4=_vA(D(M;aDFraZ3 z|Njux-XQ<~|K6Dd-m5p}yhHcWMF0Q*00000007Au;n@HH00Cl4M@0Xn2lB-L00aI> zL_t(|ob6YOZQDQ$%?d?3fzt&VB?C0EkpZfc7O1Hkz?L!rb1QU(uFw@aRQb7IBFS-U zpg;gV*p@Ayo*sWk>gvj1Fc=I5gTY`h7z_r3!C){L3>~!%@s9nQ!{=`cbq^N+ytR^1I?jn1u3hbK2xv)uz&vQx3`xA#?K|!!*L)J)9!k zu{ua94v_nRf#Ijd*YNA zdeTVDAsJ34eP1@2(pVTuI6@{QZZBV%N|&T%NPcXW2tSi}pM+@)^2PB|{isY<2a_Z3 z7ko$#?20r{4Ze6Z%EKHUj*lF<8s|PFfqf;$zsS67UKZ??ANV&q8183;cg}&{8PzN- z`2vNd_Au~EQ^|ds5$>o?#cOn5xd>&c`qF#MP7H+-Io@mx**qsK8I8&1A_617^;raMQcxQzF$%p4h`8VOsJlw^shLVT<+R*+6VY3CN zQ#$BFz!-T!3g|emlo?^=3aRBDq?D}IAo9(F8U+p&4a2?{%J}eaU z5+U!04`6Pv8gCbDM*pfGFx5Km=T24k{pHer zkR4oLe#HC;Pn=B!xl}T#N-CL5VDcn=sJu`2*I&B7Di_xZ4?9A{E+_om2Z4!ni*!9W1a;TSz=jR;}2F?WsP+< z*kp@scKFFJe)ET2_O!ku5{SgU*cXlk^1e2HEV!}<2YooaI{#PfdJ_xp7Ox@R0lVGT zwcLF@?R<*H430k|-ht!Vfxp6(NT&qT^`kax6Gfu&*+^zpe8Ok!%dCoD_>Fy;RSAfI zu`jbKRiet+msyoI(Pr$+tV&P>jeVI_afNH_%dCngJY!#GRYD?U?8~f5ScHvznN^Yh Ly(4V*e_Q__diO-u literal 0 HcmV?d00001 diff --git a/graphics/battle_anims/backgrounds/new_grassy_terrain.pal b/graphics/battle_anims/backgrounds/new_grassy_terrain.pal new file mode 100644 index 0000000000..8f90ee6e27 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new_grassy_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +237 28 36 +185 255 175 +142 243 140 +56 177 78 +78 214 109 +48 126 26 +44 177 68 +65 206 48 +8 248 0 +24 189 2 +90 189 77 +97 210 101 +137 226 120 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new_grassy_terrain.png b/graphics/battle_anims/backgrounds/new_grassy_terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc78fbaeb7ac5cbc64098ea696b8f47a30eb99b GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0vp^3xIeB3p0?Mmh$TbkYX?K^mS!_!6+%pWWMdnl0QHp z@eD4M{kJw_xn@&+4+?k55tra>ODg;z=ebY=f|3B$0G{5c-cf!Nv z>O!3^N)tU)a8kBY=G|Y(u%l+VoPfl#O+RYx^MpUQ_MchnEBwv4QF@#Ar%%%b7tHrO zw{7JKyG{DW#wj|P6MlB~Fou6;%M&mVdX^<4k#gir)t5_`)~Ba+$o%?xWxehF%Z(RJ z%nu%xD41)hn8_`fd{1iH`oFazCk@iyDF4d;`OPu zuNP&#er0{b#MU$F*;kByHWhgJ75)Xtk)cviYE zZ9&@lPQ`-M%86MS2}ifSUft^=P(G2Ty7~SYf96kXbx1HTFj>K!lN}j7 zhB`&^V>?GdD9OehNnGGRYX2K59piF#cgxEF-yo#mz}F+ zyN^u8Cew{uTMFZHt@2O1Ebj^HUAuHn9s5?t+Y(_F+}YMTr!MJ9hkBdNk=8aiDaD+6 zDe2h6(j6UnHasD(*L_JAW81!Q@0(m((*^y)W$V+5?Vl}N`&@YExy?_kw0YOunIYWX zthDHCzgrhG&&;jS%bJ)C&j|1xxh}>0)kAQ;S@%-D8$bTK$v$zv!?cHM;ngMcEOj4* zujeS(DVG;??qtHOD~U7NZpqoN?VXj#C=mPA&L{WFKYOFX_Rs5--1b+iHYlA{DvY#Z zncvSm_41+i38IJxj=RLXvDcz4zLuID;M!O#B~ YukN`mv~FVdQ&MBb@0M}~9!2kdN literal 0 HcmV?d00001 diff --git a/graphics/battle_anims/backgrounds/new_misty_terrain.bin b/graphics/battle_anims/backgrounds/new_misty_terrain.bin new file mode 100644 index 0000000000000000000000000000000000000000..581c331ea07bfcfd97f7efc985b8b73e0cfed1b0 GIT binary patch literal 4096 zcmeH}Nlz3(7>4`6Pv8gCbDM*pfGFx5Km=T24k{pHer zkR4oLe#HC;Pn=B!xl}T#N-CL5VDcn=sJu`2*I&B7Di_xZ4?9A{E+_om2Z4!ni*!9W1a;TSz=jR;}2F?WsP+< z*kp@scKFFJe)ET2_O!ku5{SgU*cXlk^1e2HEV!}<2YooaI{#PfdJ_xp7Ox@R0lVGT zwcLF@?R<*H430k|-ht!Vfxp6(NT&qT^`kax6Gfu&*+^zpe8Ok!%dCoD_>Fy;RSAfI zu`jbKRiet+msyoI(Pr$+tV&P>jeVI_afNH_%dCngJY!#GRYD?U?8~f5ScHvznN^Yh Ly(4V*e_Q__diO-u literal 0 HcmV?d00001 diff --git a/graphics/battle_anims/backgrounds/new_misty_terrain.pal b/graphics/battle_anims/backgrounds/new_misty_terrain.pal new file mode 100644 index 0000000000..a47ed5a7e7 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new_misty_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +237 28 36 +253 242 242 +251 225 225 +255 210 226 +255 198 218 +255 181 206 +244 159 183 +247 187 187 +249 210 210 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new_misty_terrain.png b/graphics/battle_anims/backgrounds/new_misty_terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..5e46aa138eb7c5623f13d859dd9578810261ce9c GIT binary patch literal 1003 zcmeAS@N?(olHy`uVBq!ia0vp^3xIeB3p0?Mmh$TbkYX?K^mS!_!6+%pEcdpS_aab8 zyu>x4Bsf2yn2+B^)IMe(pdSV<4Nst3gv9NU@|l z`Z_W&Z0zU$lgJ9>8wB`-xW1K9`TOb9?}rcnUwZWa*scFt&wZJ{{rm3SKQCPZX~h6H zOiPaf1sRjP-Ch1KW&Z@^F!Ou5IEGZrc^iIl?PCRj8eN;E%>j-);fw)}3tF=uM(x;? zKfRT8_R){QOC~G5tvSN+II*nf@Q1HU12jaqTAdc+qPqGIeV;vp<9+@kX3ndJzr%5A zdfv2kW-ZsM{@iiyzOg}2V4K;S3x(#X7nV-awSBs_RPo82jglQJ$`gdE-*`JU^BdeXUuZx4$@Re%-^Cso-TPLT z>|EjE9^Rtz-bMc0*8Oummb`hm_J;Z7BXzu%U;Zr@6AYyKzYiJE}bHhoL^$m8ptc-?rmVxCy1@Wb4S{r5PnHU$)Y6;ZKM za}xGQNO3Y3=F?X_enpL;GjTRYY(nGiN$zi^`Tja8_C(^3PluRLdcEcug$?$*muEck zQWU#1-FJPV$&_UeCtVIo)J}0QeVL%)e_3jhlQY-+cK_3S-D$JhWIGRe@0@((#QYE` z&hHlAx?T&|r9OMLwfJQ1Gz;NFMpO1bEflzFr)M+osfF*f{ZDt_G@LeRwdb99*=3o( zc72`wr#_=BOC==v^S^wgdOd6AO{;ywI`1gY2OVga?s?BzaNA(&%Ue!OR zl_EbkaNXjJDd)8k4xZg=d@AVThU**M1b$AiEqSE4G?jBtU*b+y6OorkC-Kf-`0GQ2 z`S+@&Pi}nX$`;|X|E`$w{*zO;|M_{j{DQrGjO>T%x32E(kNOa93(7p6u6{1-oD!M< Dq29pd literal 0 HcmV?d00001 diff --git a/graphics/battle_anims/backgrounds/new_psychic_terrain.bin b/graphics/battle_anims/backgrounds/new_psychic_terrain.bin new file mode 100644 index 0000000000000000000000000000000000000000..581c331ea07bfcfd97f7efc985b8b73e0cfed1b0 GIT binary patch literal 4096 zcmeH}Nlz3(7>4`6Pv8gCbDM*pfGFx5Km=T24k{pHer zkR4oLe#HC;Pn=B!xl}T#N-CL5VDcn=sJu`2*I&B7Di_xZ4?9A{E+_om2Z4!ni*!9W1a;TSz=jR;}2F?WsP+< z*kp@scKFFJe)ET2_O!ku5{SgU*cXlk^1e2HEV!}<2YooaI{#PfdJ_xp7Ox@R0lVGT zwcLF@?R<*H430k|-ht!Vfxp6(NT&qT^`kax6Gfu&*+^zpe8Ok!%dCoD_>Fy;RSAfI zu`jbKRiet+msyoI(Pr$+tV&P>jeVI_afNH_%dCngJY!#GRYD?U?8~f5ScHvznN^Yh Ly(4V*e_Q__diO-u literal 0 HcmV?d00001 diff --git a/graphics/battle_anims/backgrounds/new_psychic_terrain.pal b/graphics/battle_anims/backgrounds/new_psychic_terrain.pal new file mode 100644 index 0000000000..dd492dc203 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new_psychic_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +237 28 36 +213 206 232 +206 186 224 +203 168 232 +204 145 230 +192 87 219 +156 51 183 +111 36 130 +210 51 171 +247 4 107 +67 21 79 +203 113 225 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new_psychic_terrain.png b/graphics/battle_anims/backgrounds/new_psychic_terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..93b54a5e94d735c62547d10cd8a1a38194446269 GIT binary patch literal 1045 zcmeAS@N?(olHy`uVBq!ia0vp^3xIeB3p0?Mmh$TbkYX?K^mS!_!6+%p!m1G&^b05? zUg8>25}cn_Ql40p%HZzf0yIXUEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4& zeH|GXHuiJ>Nn{1`4FY^ZT;Iy5Ts`;V+^z?wSG+hg@!5g!+jES!=c_bbGG6_iCEHol z|8yb9JUBQLaV`zWVNCLNclp1R{nJqf24+i77srr_Id7-^&An|PaCEcNMZXCpjV>=4 zeCKe!s%Y+5^?$wJR|d{44XnBXOfd^jf0gT>rqNxLvsxqJftQt|# zK`TSFa8r6-^V70YDr|$rGge5RGrz*~Tso`mGwdq+hfxz5+85M>x}Qwje5MQZONslcN3pfuUxyvd|Ly%&(EiG zYqh>TR9~a5C&Ir%YUSsT6Bg?CJ4o{EJh1ET1pS`c8$GYCMf7O%H6-kub55YHZBD?Z z#G`Sp-i@=8Q#P+U`|-4?9D~1wUn+;ao|lH?b#cWj29KZIn!})z{PTD83d2MW`!0>Z zCA`Ux%dVI<>^xxb%)C%Wx{g(UyMRNQd+y)a0adTOj$Qjd**}%{Rl7@@f5v*7674Gs z4zWD(WAVDr6%g$6w@JdiP2+>Q>y(AtJ%kU)mYTm?A^7<4i4W4^9qQ)4ue{jmnxE^@ zsA;&Zc746A{eKC`rX7yKt-D@Uy=B_UZEUsV!OFP-n;#lwX8gK0tM8Vl{@mUw*%j9l z=a{ea8XUU-UIJdoWy_0!-4 z-o4E|ZYlq(4z7OjQ~M1L|DW>kW9&2gl>a4ibqN)}yd)*v0(-7~y0Y}|w-r48ySMPK z@{ycZn>pXW=Km!-qc4hc$}{Jm`*6qmx5%e8-qnW+?k%mo|3QD+p(8I=PhRl@l)XG% L{an^LB{Ts56Kma3 literal 0 HcmV?d00001 diff --git a/src/graphics.c b/src/graphics.c index 8df7055bd8..e032cf054f 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1445,10 +1445,6 @@ const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[] = INCBIN_U32("graphics/batt const u32 gBattleAnimBgPalette_DynamaxCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/dynamax_cannon.gbapal.lz"); -const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.4bpp.lz"); -const u32 gBattleAnimBgPalette_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.gbapal.lz"); -const u32 gBattleAnimBgTilemap_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.bin.lz"); - const u32 gBattleAnimBgImage_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/fire1.4bpp.lz"); const u32 gBattleAnimBgPalette_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/fire1.gbapal.lz"); const u32 gBattleAnimBgTilemap_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/fire1.bin.lz"); @@ -1461,10 +1457,6 @@ const u32 gBattleAnimBgTilemap_FocusBlast[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimBgPalette_GarbageFalls[] = INCBIN_U32("graphics/battle_anims/backgrounds/garbage_falls.gbapal.lz"); -const u32 gBattleAnimBgImage_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.4bpp.lz"); -const u32 gBattleAnimBgPalette_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.gbapal.lz"); -const u32 gBattleAnimBgTilemap_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.bin.lz"); - const u32 gBattleAnimBgPalette_GunkShot[] = INCBIN_U32("graphics/battle_anims/backgrounds/gunk_shot.gbapal.lz"); const u32 gBattleAnimBgImage_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_cannon.4bpp.lz"); @@ -1496,14 +1488,44 @@ const u32 gBattleAnimBgImage_MaxLightning[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimBgPalette_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/max_lightning.gbapal.lz"); const u32 gBattleAnimBgTilemap_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/max_lightning.bin.lz"); -const u32 gBattleAnimBgImage_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.4bpp.lz"); -const u32 gBattleAnimBgPalette_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.gbapal.lz"); -const u32 gBattleAnimBgTilemap_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.bin.lz"); - const u32 gBattleAnimBgImage_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/neverending_nightmare.4bpp.lz"); const u32 gBattleAnimBgPalette_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/neverending_nightmare.gbapal.lz"); const u32 gBattleAnimBgTilemap_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/neverending_nightmare.bin.lz"); +#if B_NEW_TERRAIN_BACKGROUNDS +const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_electric_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_electric_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_electric_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_grassy_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_grassy_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_grassy_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_misty_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_misty_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_misty_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_psychic_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_psychic_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_psychic_terrain.bin.lz"); +#else +const u32 gBattleAnimBgImage_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.bin.lz"); +#endif + const u32 gBattleAnimBgImage_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/nightmare.4bpp.lz"); const u32 gBattleAnimBgPalette_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/nightmare.gbapal.lz"); const u32 gBattleAnimBgTilemap_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/nightmare.bin.lz"); @@ -1512,10 +1534,6 @@ const u32 gBattleAnimBgPalette_PoisonFalls[] = INCBIN_U32("graphics/battle_anims const u32 gBattleAnimBgPalette_PsychicNew[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_new.gbapal.lz"); -const u32 gBattleAnimBgImage_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.4bpp.lz"); -const u32 gBattleAnimBgPalette_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.gbapal.lz"); -const u32 gBattleAnimBgTilemap_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.bin.lz"); - const u32 gBattleAnimBgImage_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/shattered_psyche.4bpp.lz"); const u32 gBattleAnimBgPalette_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/shattered_psyche.gbapal.lz"); const u32 gBattleAnimBgTilemap_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/shattered_psyche.bin.lz"); From 9a95c9b07a4084afe0e96fd5d4408777172be822 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 6 Sep 2024 12:36:21 +0200 Subject: [PATCH 154/544] RTC-based wild encounters follow up (#5328) During my review of #5313 I overlooked that the function vars used a u8 instead of u32. This follow up fixes it --- src/wild_encounter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 3cfdfb1191..81721596ad 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -355,7 +355,7 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon, u8 wildMonIn } } -static bool8 IsExactTimeOfDayMatchForWildEncounters(u8 currentTimeOfDay, u8 encounterTimeOfDay) +static bool32 IsExactTimeOfDayMatchForWildEncounters(u32 currentTimeOfDay, u32 encounterTimeOfDay) { switch (currentTimeOfDay) { From 5c86aa126f9b06b28bc4d97778ce37b6d577a4ad Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 6 Sep 2024 21:09:04 +0200 Subject: [PATCH 155/544] Revert rtc based encounters (#5331) * Revert "RTC-based wild encounters follow up (#5328)" This reverts commit 9a95c9b07a4084afe0e96fd5d4408777172be822. * Revert "RTC-based wild encounters (#5313)" This reverts commit 7c7fd905bae849bc1244a66545e10677fed763dd. --- include/config/overworld.h | 7 ----- include/wild_encounter.h | 1 - src/data/wild_encounters.json.txt | 2 -- src/wild_encounter.c | 45 ++----------------------------- tools/jsonproc/jsonproc.cpp | 21 --------------- 5 files changed, 2 insertions(+), 74 deletions(-) diff --git a/include/config/overworld.h b/include/config/overworld.h index 8be52abfb5..cebbe5b34b 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -74,13 +74,6 @@ #define OW_USE_FAKE_RTC FALSE // When TRUE, seconds on the in-game clock will only advance once every 60 playTimeVBlanks (every 60 frames). #define OW_ALTERED_TIME_RATIO GEN_LATEST // In GEN_8_PLA, the time in game moves forward 60 seconds for every second in the RTC. In GEN_9, it is 20 seconds. This has no effect if OW_USE_FAKE_RTC is FALSE. -// Time-based wild Pokemon encounters - Allows you to create additional encounter groups in wild_encounters.json (or in porymap). -// The groups are processed by base label's suffix. For example, "gRoute101" (no suffix) contains daytime encounters, and "gRoute101_Night" contains nighttime encounters. -// Not every group needs to be defined for every map - you could for example omit them inside caves and it would fall back to the unsuffixed daytime encounter group. -#define OW_TIME_BASED_WILD_ENCOUNTERS FALSE // Enables the system. If disabled, all suffixes are ignored and the first encounter group found for a map will be used for wild encounters. -#define OW_ENABLE_MORNING_WILD_ENCOUNTERS FALSE // If true, allows definition of morning encounter groups such as "gRoute101_Morning". Otherwise, morning is considered to be day for encounters. No effect if OW_TIME_BASED_WILD_ENCOUNTERS is false. -#define OW_ENABLE_EVENING_WILD_ENCOUNTERS FALSE // If true, allows definition of evening encounter groups such as "gRoute101_Evening". Otherwise, evening is considered to be night for encounters. No effect if OW_TIME_BASED_WILD_ENCOUNTERS is false. - // 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/wild_encounter.h b/include/wild_encounter.h index fb0f5ab00e..63289f081c 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -20,7 +20,6 @@ struct WildPokemonHeader { u8 mapGroup; u8 mapNum; - u8 timeOfDay; const struct WildPokemonInfo *landMonsInfo; const struct WildPokemonInfo *waterMonsInfo; const struct WildPokemonInfo *rockSmashMonsInfo; diff --git a/src/data/wild_encounters.json.txt b/src/data/wild_encounters.json.txt index 55dd20cd52..bf848249f0 100755 --- a/src/data/wild_encounters.json.txt +++ b/src/data/wild_encounters.json.txt @@ -72,7 +72,6 @@ const struct WildPokemonHeader {{ wild_encounter_group.label }}[] = { .mapGroup = {% if wild_encounter_group.for_maps %}MAP_GROUP({{ removePrefix(encounter.map, "MAP_") }}){% else %}0{% endif %}, .mapNum = {% if wild_encounter_group.for_maps %}MAP_NUM({{ removePrefix(encounter.map, "MAP_") }}){% else %}{{ loop.index1 }}{% endif %}, - .timeOfDay = {% if stringEndsWith(encounter.base_label, "_Night") or stringContains(encounter.base_label, "_Night_") %}TIME_NIGHT{% else if stringEndsWith(encounter.base_label, "_Morning") or stringContains(encounter.base_label, "_Morning_") %}TIME_MORNING{% else if stringEndsWith(encounter.base_label, "_Evening") or stringContains(encounter.base_label, "_Evening_") %}TIME_EVENING{% else %}TIME_DAY{% endif %}, .landMonsInfo = {% if existsIn(encounter, "land_mons") %}&{{ encounter.base_label }}_LandMonsInfo{% else %}NULL{% endif %}, .waterMonsInfo = {% if existsIn(encounter, "water_mons") %}&{{ encounter.base_label }}_WaterMonsInfo{% else %}NULL{% endif %}, .rockSmashMonsInfo = {% if existsIn(encounter, "rock_smash_mons") %}&{{ encounter.base_label }}_RockSmashMonsInfo{% else %}NULL{% endif %}, @@ -82,7 +81,6 @@ const struct WildPokemonHeader {{ wild_encounter_group.label }}[] = { .mapGroup = MAP_GROUP(UNDEFINED), .mapNum = MAP_NUM(UNDEFINED), - .timeOfDay = TIME_DAY, .landMonsInfo = NULL, .waterMonsInfo = NULL, .rockSmashMonsInfo = NULL, diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 81721596ad..033eec56da 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -11,7 +11,6 @@ #include "pokeblock.h" #include "battle_setup.h" #include "roamer.h" -#include "rtc.h" #include "tv.h" #include "link.h" #include "script.h" @@ -355,32 +354,9 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon, u8 wildMonIn } } -static bool32 IsExactTimeOfDayMatchForWildEncounters(u32 currentTimeOfDay, u32 encounterTimeOfDay) -{ - switch (currentTimeOfDay) - { - case TIME_MORNING: - if (OW_ENABLE_MORNING_WILD_ENCOUNTERS) - return encounterTimeOfDay == TIME_MORNING; - // fallthrough - case TIME_DAY: - return encounterTimeOfDay == TIME_DAY; - case TIME_EVENING: - if (OW_ENABLE_EVENING_WILD_ENCOUNTERS) - return encounterTimeOfDay == TIME_EVENING; - // fallthrough - case TIME_NIGHT: - return encounterTimeOfDay == TIME_NIGHT; - } - return FALSE; -} - static u16 GetCurrentMapWildMonHeaderId(void) { u16 i; - u8 currentTimeOfDay = GetTimeOfDay(); - u16 dayId = HEADER_NONE; - u16 nightId = HEADER_NONE; for (i = 0; ; i++) { @@ -399,30 +375,13 @@ static u16 GetCurrentMapWildMonHeaderId(void) alteringCaveId = 0; i += alteringCaveId; - return i; // Altering cave is not affected by time-of-day encounters. } - if (OW_TIME_BASED_WILD_ENCOUNTERS) - { - if (IsExactTimeOfDayMatchForWildEncounters(currentTimeOfDay, gWildMonHeaders[i].timeOfDay)) - return i; - else if (gWildMonHeaders[i].timeOfDay == TIME_DAY && dayId == HEADER_NONE) - dayId = i; - else if (gWildMonHeaders[i].timeOfDay == TIME_NIGHT && nightId == HEADER_NONE) - nightId = i; - } - else - return i; + return i; } } - if (!OW_TIME_BASED_WILD_ENCOUNTERS) - return HEADER_NONE; - - // Exact match for time of day was not found. We fall back to other encounter groups for this map - if (currentTimeOfDay == TIME_EVENING && OW_ENABLE_EVENING_WILD_ENCOUNTERS && nightId != HEADER_NONE) - return nightId; - return dayId; + return HEADER_NONE; } u8 PickWildMonNature(void) diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp index 5e661e40d3..9ef23cd43e 100755 --- a/tools/jsonproc/jsonproc.cpp +++ b/tools/jsonproc/jsonproc.cpp @@ -118,27 +118,6 @@ int main(int argc, char *argv[]) return str; }); - env.add_callback("stringContains", 2, [](Arguments& args) { - string str = args.at(0)->get(); - string check = args.at(1)->get(); - - return str.find(check) != std::string::npos; - }); - - env.add_callback("stringStartsWith", 2, [](Arguments& args) { - string str = args.at(0)->get(); - string check = args.at(1)->get(); - - return str.find(check) == 0; - }); - - env.add_callback("stringEndsWith", 2, [](Arguments& args) { - string str = args.at(0)->get(); - string check = args.at(1)->get(); - - return str.rfind(check) == (str.length() - check.length()); - }); - try { env.write_with_json_file(templateFilepath, jsonfilepath, outputFilepath); From 90089ecf51adddf0c8ca05463b39518bd9953716 Mon Sep 17 00:00:00 2001 From: Salem <65783283+u8-Salem@users.noreply.github.com> Date: Sat, 7 Sep 2024 16:13:22 +0200 Subject: [PATCH 156/544] add debug build target (#4817) * add debug build target * fix maybe uninitialized error * add option to undef NDEBUG * debug for agbcc * init instead of ignore to not break agbcc * make clean removes modern and agbcc artifacts. explicit use of -O0 again for NOOPT * automatically enable debug menu when building for debug * automatically enable debug menu when building for debug * automatically enable debug menu when building for debug * clean up previous mess omg * remove preproc around debug menus * automatically enable debug menu when building for debug * clean up previous mess omg * Apply suggestions from code review Co-authored-by: Bassoonian * Update Makefile * Update field_control_avatar.c * make debug print independent * remove unwanted changes * remove trailing endif --------- Co-authored-by: Bassoonian --- Makefile | 36 ++++++++++++++++++++++++++++----- data/scripts/debug.inc | 3 --- src/battle_ai_main.c | 4 +--- src/battle_main.c | 8 ++------ src/debug.c | 3 --- src/field_control_avatar.c | 15 +++++++------- src/librfu_rfu.c | 2 +- src/pokemon_sprite_visualizer.c | 3 --- src/pokemon_summary_screen.c | 4 +--- src/start_menu.c | 9 +++++---- 10 files changed, 48 insertions(+), 39 deletions(-) diff --git a/Makefile b/Makefile index 6f8951d378..52bfe1e93f 100644 --- a/Makefile +++ b/Makefile @@ -41,11 +41,16 @@ REVISION := 0 TEST ?= 0 ANALYZE ?= 0 UNUSED_ERROR ?= 0 +DEBUG ?= 0 ifeq (check,$(MAKECMDGOALS)) TEST := 1 endif +ifeq (debug,$(MAKECMDGOALS)) + DEBUG := 1 +endif + CPP := $(PREFIX)cpp ROM_NAME := pokeemerald.gba @@ -60,6 +65,7 @@ MAP = $(ROM:.gba=.map) SYM = $(ROM:.gba=.sym) TEST_OBJ_DIR_NAME := build/modern-test +DEBUG_OBJ_DIR_NAME := build/modern-debug TESTELF = $(ROM:.gba=-test.elf) HEADLESSELF = $(ROM:.gba=-test-headless.elf) @@ -86,7 +92,8 @@ TEST_BUILDDIR = $(OBJ_DIR)/$(TEST_SUBDIR) ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=1 CC1 = $(shell $(PATH_ARMCC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init +override CFLAGS += -mthumb -mthumb-interwork -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init + ifeq ($(ANALYZE),1) override CFLAGS += -fanalyzer endif @@ -101,6 +108,12 @@ OBJ_DIR := $(OBJ_DIR_NAME) LIBPATH := -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libc.a))" LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall +ifeq ($(DEBUG),1) +override CFLAGS += -Og -g +else +override CFLAGS += -O2 +endif + ifeq ($(TESTELF),$(MAKECMDGOALS)) TEST := 1 endif @@ -108,6 +121,10 @@ endif ifeq ($(TEST),1) OBJ_DIR := $(TEST_OBJ_DIR_NAME) endif +ifeq ($(DEBUG),1) +OBJ_DIR := $(DEBUG_OBJ_DIR_NAME) +endif + CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=1 -DTESTING=$(TEST) @@ -146,7 +163,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools check-tools mostlyclean clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) libagbsyscall agbcc modern tidymodern tidynonmodern check history +.PHONY: all rom clean compare tidy tools check-tools mostlyclean clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) libagbsyscall agbcc modern tidymodern tidynonmodern check history debug infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -154,7 +171,7 @@ infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst # Disable dependency scanning for clean/tidy/tools # Use a separate minimal makefile for speed # Since we don't need to reload most of this makefile -ifeq (,$(filter-out all rom compare agbcc modern check libagbsyscall syms $(TESTELF),$(MAKECMDGOALS))) +ifeq (,$(filter-out all rom compare agbcc modern check libagbsyscall syms $(TESTELF) debug,$(MAKECMDGOALS))) $(call infoshell, $(MAKE) -f make_tools.mk) else NODEP ?= 1 @@ -246,7 +263,7 @@ clean-tools: clean-check-tools: @$(foreach tooldir,$(CHECKTOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidynonmodern tidymodern tidycheck +mostlyclean: tidynonmodern tidymodern tidycheck tidydebug find sound -iname '*.bin' -exec rm {} + rm -f $(MID_SUBDIR)/*.s find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + @@ -256,7 +273,7 @@ mostlyclean: tidynonmodern tidymodern tidycheck rm -f $(AUTO_GEN_TARGETS) @$(MAKE) clean -C libagbsyscall -tidy: tidymodern tidycheck +tidy: tidymodern tidycheck tidydebug tidymodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) @@ -266,6 +283,8 @@ tidycheck: rm -f $(TESTELF) $(HEADLESSELF) rm -rf $(TEST_OBJ_DIR_NAME) +tidydebug: + rm -rf $(DEBUG_OBJ_DIR_NAME) include graphics_file_rules.mk include map_data_rules.mk @@ -305,6 +324,11 @@ ifeq ($(DINFO),1) override CFLAGS += -g endif +ifeq ($(NOOPT),1) +override CFLAGS := $(filter-out -O1 -Og -O2,$(CFLAGS)) +override CFLAGS += -O0 +endif + # The dep rules have to be explicit or else missing files won't be reported. # As a side effect, they're evaluated immediately instead of when the rule is invoked. # It doesn't look like $(shell) can be deferred so there might not be a better way. @@ -443,6 +467,8 @@ agbcc: modern: all +debug: all + LD_SCRIPT_TEST := ld_script_test.ld $(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 12dc693fd0..4851c87c40 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -1,4 +1,3 @@ -.if DEBUG_OVERWORLD_MENU == TRUE Debug_MessageEnd: waitmessage waitbuttonpress @@ -448,5 +447,3 @@ Debug_EventScript_EWRAMCounters:: Debug_EventScript_EWRAMCounters_Text:: .string "Follower Steps: {STR_VAR_1}.\n" .string "Fishing Chain: {STR_VAR_2}.$" - -.endif diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index ffaa058a08..f554da437d 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -196,14 +196,12 @@ void BattleAI_SetupFlags(void) else AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT] = 0; // player has no AI -#if DEBUG_OVERWORLD_MENU == TRUE - if (gIsDebugBattle) + if (DEBUG_OVERWORLD_MENU && gIsDebugBattle) { AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_LEFT] = gDebugAIFlags; AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_RIGHT] = gDebugAIFlags; return; } -#endif if (IsWildMonSmart() && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER))) { diff --git a/src/battle_main.c b/src/battle_main.c index 319c26bcfa..c77c325db2 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -517,9 +517,7 @@ static void CB2_InitBattleInternal(void) gBattle_BG3_X = 0; gBattle_BG3_Y = 0; -#if DEBUG_OVERWORLD_MENU == TRUE - if (!gIsDebugBattle) -#endif + if (!DEBUG_OVERWORLD_MENU || (DEBUG_OVERWORLD_MENU && !gIsDebugBattle)) { gBattleTerrain = BattleSetup_GetTerrainId(); } @@ -552,9 +550,7 @@ static void CB2_InitBattleInternal(void) else SetMainCallback2(CB2_HandleStartBattle); -#if DEBUG_OVERWORLD_MENU == TRUE - if (!gIsDebugBattle) -#endif + if (!DEBUG_OVERWORLD_MENU || (DEBUG_OVERWORLD_MENU && !gIsDebugBattle)) { if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED))) { diff --git a/src/debug.c b/src/debug.c index a2bf55d95a..a3978fbd40 100644 --- a/src/debug.c +++ b/src/debug.c @@ -68,7 +68,6 @@ #include "constants/weather.h" #include "save.h" -#if DEBUG_OVERWORLD_MENU == TRUE // ******************************* enum DebugMenu { @@ -5129,5 +5128,3 @@ static void DebugAction_Util_CheckEWRAMCounters(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_EWRAMCounters); } - -#endif //DEBUG_OVERWORLD_MENU == TRUE diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 582617d555..9452e1273e 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -135,13 +135,14 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) else if (heldKeys & DPAD_RIGHT) input->dpadDirection = DIR_EAST; -#if DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == FALSE - if ((heldKeys & DEBUG_OVERWORLD_HELD_KEYS) && input->DEBUG_OVERWORLD_TRIGGER_EVENT) + if(DEBUG_OVERWORLD_MENU && !DEBUG_OVERWORLD_IN_MENU) { - input->input_field_1_2 = TRUE; - input->DEBUG_OVERWORLD_TRIGGER_EVENT = FALSE; + if ((heldKeys & DEBUG_OVERWORLD_HELD_KEYS) && input->DEBUG_OVERWORLD_TRIGGER_EVENT) + { + input->input_field_1_2 = TRUE; + input->DEBUG_OVERWORLD_TRIGGER_EVENT = FALSE; + } } -#endif } int ProcessPlayerFieldInput(struct FieldInput *input) @@ -201,15 +202,13 @@ int ProcessPlayerFieldInput(struct FieldInput *input) if (input->pressedSelectButton && UseRegisteredKeyItemOnField() == TRUE) return TRUE; -#if DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == FALSE - if (input->input_field_1_2) + if(input->input_field_1_2 && DEBUG_OVERWORLD_MENU && !DEBUG_OVERWORLD_IN_MENU) { PlaySE(SE_WIN_OPEN); FreezeObjectEvents(); Debug_ShowMainMenu(); return TRUE; } -#endif return FALSE; } diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 152bb716e9..cd7cb6cc5a 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -762,7 +762,7 @@ static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult) u16 id; u8 slot; u8 bm_slot_flag, i; - struct RfuTgtData *target_p; + struct RfuTgtData *target_p = NULL; struct RfuTgtData target_local; if (reqResult == 0) diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index c83716aeda..a0b7ddabc2 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -41,7 +41,6 @@ #include "constants/items.h" #include "constants/event_objects.h" -#if DEBUG_POKEMON_SPRITE_VISUALIZER == TRUE extern const struct BattleBackground sBattleTerrainTable[]; extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; @@ -1763,5 +1762,3 @@ static void Exit_PokemonSpriteVisualizer(u8 taskId) m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } } - -#endif diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index a1ebc2b188..bf6ab45a2a 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1640,15 +1640,13 @@ static void Task_HandleInput(u8 taskId) PlaySE(SE_SELECT); BeginCloseSummaryScreen(taskId); } - #if DEBUG_POKEMON_SPRITE_VISUALIZER == TRUE - else if (JOY_NEW(SELECT_BUTTON) && !gMain.inBattle) + else if (DEBUG_POKEMON_SPRITE_VISUALIZER && JOY_NEW(SELECT_BUTTON) && !gMain.inBattle) { sMonSummaryScreen->callback = CB2_Pokemon_Sprite_Visualizer; StopPokemonAnimations(); PlaySE(SE_SELECT); CloseSummaryScreen(taskId); } - #endif } } diff --git a/src/start_menu.c b/src/start_menu.c index 0525ccf70d..71ab87363c 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -784,10 +784,11 @@ static bool8 StartMenuDebugCallback(void) RemoveExtraStartMenuWindows(); HideStartMenuDebug(); // Hide start menu without enabling movement -#if DEBUG_OVERWORLD_MENU == TRUE - FreezeObjectEvents(); - Debug_ShowMainMenu(); -#endif + if (DEBUG_OVERWORLD_MENU) + { + FreezeObjectEvents(); + Debug_ShowMainMenu(); + } return TRUE; } From 8c3531ffc7049b351011a5ae5be120e1730fd049 Mon Sep 17 00:00:00 2001 From: SonikkuA-DatH <58025603+SonikkuA-DatH@users.noreply.github.com> Date: Sat, 7 Sep 2024 09:04:47 -0700 Subject: [PATCH 157/544] Grass/Water Pledge Swamp Animation + Sea of Fire animation tweak (#5325) --- data/battle_anim_scripts.s | 46 +++++++++++++++++- .../battle_anims/backgrounds/swampswizzle.bin | Bin 0 -> 2048 bytes .../battle_anims/backgrounds/swampswizzle.pal | 19 ++++++++ .../battle_anims/backgrounds/swampswizzle.png | Bin 0 -> 25120 bytes include/constants/battle_anim.h | 1 + include/graphics.h | 5 ++ src/data/battle_anim.h | 1 + src/graphics.c | 5 ++ 8 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 graphics/battle_anims/backgrounds/swampswizzle.bin create mode 100644 graphics/battle_anims/backgrounds/swampswizzle.pal create mode 100644 graphics/battle_anims/backgrounds/swampswizzle.png diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 622dd24f18..296de004ac 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -28312,10 +28312,19 @@ gBattleAnimGeneral_SeaOfFire:: monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + fadetobg BG_FIRE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(21, 2, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_PARTNER, 2, 0, 11, RGB(21, 2, 0) call SeaOfFireTwisterDos delay 3 call SeaOfFireTwisterTres + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 10, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 10, 1 waitforvisualfinish + restorebg + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(21, 2, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_PARTNER, 2, 11, 0, RGB(21, 2, 0) + waitbgfadein clearmonbg ANIM_DEF_PARTNER blendoff end @@ -28350,8 +28359,41 @@ SeaOfFireTwisterTres: delay 2 return -gBattleAnimGeneral_Swamp:: @ To do - goto gBattleAnimMove_Haze +gBattleAnimGeneral_Swamp:: + loadspritegfx ANIM_TAG_RAIN_DROPS + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_THOUGHT_BUBBLE + playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SMALL_BUBBLES, 0, 4, 4, RGB(12, 11, 31) + delay 1 + waitforvisualfinish + fadetobg BG_SWAMP + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(11, 26, 10) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_PARTNER, 2, 0, 11, RGB(11, 26, 10) + waitbgfadeout + delay 4 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 10, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 10, 1 + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 20, 3 + waitforvisualfinish + delay 10 + restorebg + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(11, 26, 10) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_PARTNER, 2, 11, 0, RGB(11, 26, 10) + waitbgfadein + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 4, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end SnatchMoveTrySwapFromSubstitute: createvisualtask AnimTask_IsAttackerBehindSubstitute, 2 diff --git a/graphics/battle_anims/backgrounds/swampswizzle.bin b/graphics/battle_anims/backgrounds/swampswizzle.bin new file mode 100644 index 0000000000000000000000000000000000000000..54864dd530af53267a00c6702877b233370ac649 GIT binary patch literal 2048 zcmeIvReR6{6oB#3FmiPBzHD@lW^|73?pn}YBL*AYUCJ;>lT=XBPQn%x6qK|(0P%mt zH{fQ^d7g9kI~VT>Aq{CsM|v`lkxXQMV6qTOR|rlY1^#KC z;aQ&JdG@iN103WKhk1b)Il@t1;$@C;oD-bn6sLKGS9y)sd4o53EAVgg4)5|F?{kK; zoZ~zn@F5@ZF`w`$pYb^txX2fL$t5oH6<>3Ot9-+^TnqelZg7)Z+~zyJ=Lde|Cw}G^ ze&siQ=MVnmFaG8q{^bsLxkrd;OlvyRo8kWVQ_N^4Gn>UwvzpE9<}jzZ3^TWR%xgaL zTfl-Avam%gYB7sjLe!Fm2R_15mbQ##EoXTvSkX#Wwu)7)W~9}vVNGjU+d9^@o>A7f zfemeBW19rNsm*L|3tQUCXj|LHwzjjq9qec)JKM#scC))Z>}fB1+sD54v%doz82CXB zc8EhA=5S+-HO_cPIMPv$c8p^k=XfVL(Me8ric_8DbZ400OlJjtwsTB$uJcSX+4(MT vp^IGX5|_Hn<*sn0t6c3G*SgO2Zg8WU-0T*&2LAtssgqhDwLofthf&}^i@~Wi literal 0 HcmV?d00001 diff --git a/graphics/battle_anims/backgrounds/swampswizzle.pal b/graphics/battle_anims/backgrounds/swampswizzle.pal new file mode 100644 index 0000000000..68d0311f6b --- /dev/null +++ b/graphics/battle_anims/backgrounds/swampswizzle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +140 214 132 +115 181 132 +115 181 99 +90 148 90 +90 148 74 +74 115 41 +74 107 57 +57 82 24 +49 82 41 +66 74 33 +33 57 16 +41 49 16 +49 41 8 +16 24 0 +140 222 173 diff --git a/graphics/battle_anims/backgrounds/swampswizzle.png b/graphics/battle_anims/backgrounds/swampswizzle.png new file mode 100644 index 0000000000000000000000000000000000000000..9b4a88cf0a9b6443e0ba9450bf34004e484c775f GIT binary patch literal 25120 zcmeFYWl)^mvNk-pySuv$Zi7S6;4Z-jcXxM}KyVEqNN^AC4#9)Fy9axDp1sdL`_%XT zIaS~LZ%>Wf_v-GeyRX%&Yt~GyC}l-y6huNq004j@Dz*e^Az8bHm;(jl$Mz1e$ zRBxX;-?qgs_p5dypZ|DJFFdp>M~jHScj9^alOF#lY6=Jl_40pxJ(m458IT^Z^LlUm zmhk2Cjf|#m`*VM;=WZwGMlSEE4#`sV-~K#__`f0Ul8ML!tkS(c<+!}PFuuM#wfA3g z76y!UytSX7o!^gv`cs(H3$VfU;jm731i-zy7kXnLK7G31 zS;zSh$-F@1yts+rz_-56#2o%*yTxQX2472Io!7^t)QM(+?a9H@)KtUci23SIn$Wk0 z1??V>Wv8m+Hog4`!Ha49X6+5F*W-Yyw>!MG1$Fq%*BsxTV5j~AGfrf!36V#9Cd{>U zS(bI^x5xXux8@&FILs5Z3>;q;A6=q!dfudhZ&+NnLc%%&oPqT(J`g35dU&u{m`q(| zVd~;29x*jxU6Ss&2gV1~%Gnj7^fdOc1TJ!)8xE)Su9;YT$>M0PPGioYz!j1dql7jR zYc<;Zcw66g6_JH#KI_YU|N8mU2QTZgmNZ?P^5Cr*)ln^`%EozbqSM3g`=7i|EANH> zaBj&2f(hK}rw8#Tdxgk;JYOuMk$L74SY&#o*~~A2^Gtc$Sz{q&s?QS#-ZUD+R8lLh^`5K4Aow{ zusHqkP*?b4slSU*%`Mk*q?e#suG^1UiQ$?X{mE86eC{~T`Q_Zq7SmG) zAqMBK#3BL$UptK_Tl4_)igtCkbxdepfYk<~>S;K6xAnNuo&E9c_9wE1Vt{LoZ9Z; z$QlW%2;WwfGJX3$lkQQ}rB=v%B>7Z%J$x>tg%E=@=ruv2Oyyvz1Ap~wi)-Kil3Ht$ z{d!ru<|M$xJR;z-0um;Zi?fOr%x%K5pvZCGy&X%!TIaj8D*EBV(JkSK{wwACI5cOX zy0dN(UeAMh4}q=GPp8HrN?uFb(xzCbB=ztU-0<)^gZ|m?7RH?tI@XPLw z1W_y6j@?jf&ER`|I)l-fi6QX8Ilm=|Vh04pgxny^i{_#`rWGF_MAU>JdnQacdXfFD z)BI+MF@}^$J6UOYOq`PV5!6I6J+rj!g#h=%H)$tinD6U^!RSk|NAmXAhu=W6guXD@2j0F31v`a4JF|Wr=Z=)z`}$f) zatZxDAA51u-2Tk;C(3cakNKW9(k?KT>*V*oNg+-Z4*?OjO9qNgucR@sE#bfh;*)I; zJiS+*=Oy1)w4MWsS2!&nxpA*M;S7HC+U&!l5-b_ytITpV6Su+mG+O8{YifwVT68*Q zZ`$%dI*ASyKG47%E8Tz{7HEU$#ipx1>ik&TK*?xf=n?)EVf~ybkF6!Qa;7f#J31;fc}x` zJTIkqxly}N_n7BTH5$P|Juidg{W270psvg3m zWxgi*Ib~GiXq0X68|e)hnIJV2e@o!z=cz-V+vML_q{2>#Y1NE1#h(D0I_hcnVYR<+ zV?U;qo_X-*Co)~H1`1x9p)O#+CZ1z)2Ao^x%ae?8s0sb@r9cctVdg+W){*@I_Z@%^ z5xNiCfOORDK$4E;nB&lXA55Qd;}vpn%;SCi1q(Uyngh{#xJemG3g~U=4dW2ct$f>a$q zpq#01Ny%32-xlxd=9sOQ!5j8yr;JzcI7o4It}3e-nEjoyS;dha_E}@V52nOykIhR{ z7L6H_Tr_u*k6=m|si4vR2DioyDz%t~FRqg^Ecal00((Nm`zHg`ZXMem(2#LqoG@|r z^K)q=;T64PAw{x$9|JKGe=^;aSI1;b5&d;ypIy>d2)=FJBOFi2nho@>mYa!*yV45_?Rvq_C?cV-DKjbUNu- z3=?ETFiIk)>!cf^+C&aU)?quW_D^Xc1*4pt=MSWa#~@qdoLmB5O#K6tKgg1Yw3I%iJq6iJ!5q&9f1u5X?3?>&fK9~|oJi#| zofx?xC)_Rd3)BrV*_jrti01l@q8xA(yeS7$;s4G+caEgEV+``;~EzEiZSUPY{d-GfrIh#*r zQalu0qZEKG7Ou|@ImFDdD>ch`d;UV6yv)hUfO-fY?ItX~(o@$rn1$<+=AS#2c$Y7H z*07(Fv!k_jhBmT?eanuy>1{)?GyS|mrl;0*-Sk5Xs`e8m6o%JD{kK|FoWoiSA8M$? zRGG2hAaZXmZsfcu$8d|e$;pdc2s>uCEi6uDBy1Z*z*>^Kpm0^-&QOhaHLIBc8zqbt zA_Ke09$HLz4-BrdR2B}sTzVYe;tm73kyV&j3Lj3NE*Kp6b+8qmg92kXG;V8jN0>MZ z{TE_$*Tp6!wf5o`Ig>%Q6djf)HKvV)_>APAq{v%M75EcNX#Y^yhz9F{z-YQ1ToXGK zI~{ot3<8k30(}xIih6P`NRY6`5}Yo_1Ep$x1;?dZ>KglPRJJ2AXO56?&qVwaREsR6 z5x;14=&zP$1lzBn_70}Mjk8+1JNCgn38h7MK1wt|vWM$#hQR7`;*I-5OSF$i`XEA% zQyThnbtidC+Qg&4;0j09hpqup^m!bJNq9mf_*U#M9Uk_WQpx({O36=ZBtt8sF)UGl5WluG|g>oU04HrA95|1 zo(0421-+5D+1n)RESI@o2P{z#!cro9gOupE2lyZy`B*Y+(q%g$y#rIIw)oLMTg8|X zHfkDexj^Z}!k>qC3RaJ#T2UzAqHe15bjXfuEWt0w-?zsem^u2LAz6Wn{~*R;@nz^6 z{%%2U@k?Ck3LxJRV?9M-xU63J*+bdfx@FD!6X40y1qmpW0LpkHKO+?foW&x89+t5a z=^V+Dt5!chrr=M~)l)v`j$gLOkXk~Rira234^<kA}f%kS;@hI|o zgdBkGL{cOBU|Z>?;mKy3(uc#4%vhO%dlTn;*EICc+-3Y(PZs(caF!4?K@C(#Dw|Uf z_7$bqH6J2NBUPblHHe8ya^`h-M293r3;VGDJoFz>B;<0-*&h+XW5%GxlS9a|T?tta zlQDx$RC1B_D3aHqk^1f6p&?wqWR(MQY`VsvKCFgbLz@8nINUW#HZ)*NiVFt3`?)wd zyM+X+10$G$9y$2gzD7Ts^kz*?@3GY!<cimX~>f-(n->mqwUx` zMjrOkh&xZ2mEryoaK7_%vXdnH-LyjyoD6oO2*oLi^hDk|0T2@s65Ld1;EU%(i8w05 zd=6UcH82|u22c$L(%Es-RiId|d8T<`bZGJgW~hjH(SG@|@?tx6M=L4wq6T|hE57I* zqcvdmL$~Hba8(d+ixF2x6-34UNS_vobRNuC!8?Mv-hAahtS&50U5kBRMj2&Nn^?Qo zoBD*|J!Yd04!=P zv8OXZq+Bg!*;S5XBs_~v52Lgo?`7A4xAPCZ@iJ&;4e7B;Rg2y$4=|pB zg3JxXL;TDBJlzwqPg1>dDU0Ly4;hZ`537hIs3ofHLGvAu-L$4N(VxO3_8Q4=36E$k8E1CgpR$S z+D6Oo@6QoF4~TS~u{l3_JM&GCC;%NUlz8iU$&>Zu$swG?L$`|<7lF)f)dHcJ8q>9^ z;Ks=gpUy--LkqyhWvup`8Vq89lg@LXm2^ej7qdM}HM+2{y`bW~`tT^dq3PF+Cwao? z!$?}3DJ9K(S0wITCawJt)t+tPSo8{L4w=2xZ_#K8k^6zwYc}nGu?;H=^pRw4640%B z3I?FL*_`5=`Zd zP$;)W2-Z~j5mld+;*g|kH0EtN0L6rs(PV?7-p#G99Z;eC%5c0KK+#apAEMvY-MhBX z-ZZEFDye!NWCeZjCs-Aoj}bCIh@X|M75@~%eSu65eslYl-h`??u|TY^ zd%5iDo3I}4q9%AA-^j7Qki(UOhHNbzWTotNbTD9KSbK&e@{~N@>hx?G1MMS?U6IjQ z6BMM>He&>SbImr*eW{tjP)a1*QX-%w)qsC2XMjpttn2H;uL2m(y4N4GpZECaw z=|2An8>Glxd5HXs)M6+Y-|!63wXZ#p@SJu_PABo!aP18YeE}O=Kq89%H+t z=Zw7UttSPxjlLW4m7yPa2z_q)dfKUCSb1Ig&BeQ$m8c$)-YJ#z)nP=vOsJ516+KYb zv&w^i7`Z%=iXp~Oes6GOLb@7M>7kr2>?Si|Kv(4BcTriU!4me&ptlzhu z_>}-wI6so}i)~^~S}cd3_XBmNRFkfqZ)zrqg3y`HAO7%1xEaw7J=lFkhU@BrZ*QYQ z=oEqn*k2@eaWc4RA-{$>)=xoydgIGPlYM{zdm^iSs^wyX|m_l1CrOtr)cPu+UM+ z%~69kWFiBHbi>@3)$BM(PfDBR4RA;2@~OZuwysSozdQuF)tQhF$F8uON&|0l(VG=0 z`m#Esvw%|-{*G3#ars&jh|8X~)KFfGzqBM{#lJ%-I32pIEf%aA?Kt>(vX9MZr6EH>^zLeRw z=k44_={y}NrWuf`HU>-6p>XUme+WA$`BT=;_+5S>tp^uRS=oUovKbYdqs0O;wvyL$ zS%stv`be(<4Fja%kXP@Ab5`09hddAc!;?-Af90#AAcWZSMdFk&r63M<q%>r|gIemMLUSWuw@oPwW2xxJ({i?O=&!XDU z*j!4SaVJvoOXbQ#{w4Q!6RZ=I#Gch0w+j`7@@A8$E(jnIqHi#S9fleg{?|CXG3qix z)bfJx`6E)O%?1>hgtPFrza72MkIN%!p^m%z0xzCwM}{!KhiSJ9}lHhdsRO|b*>2V{h~9aHuxmk4GX7= zx6L5fkKUQ=IUsw1aR6BR;<7hdNH2#^O`GhbeQ_@NXqDEe7dR%5cb`IE@z`gP{l}Ua z5i(>&f;&V?%eR6~l6yo;I{b4YZ{=acMa~9^SO=8XAIRNm_1`JY1m7K6cc^)Z-5@w6ruN{zHL&h})x#yBLv|2&^&P1 z{GlODgq~^RF}x~cVlx*py5)CL{y^8*walS*cgSq!?-xX|`|$mZeR`fT8M6Xs(E2Am zt3)K$Q!{F%-Y!ZB7GtR`Xihs}iMITJ=1-)vLJ#A0J#>pov10Y}%O~8Pyilr4KTnsn zTaeV2)B;w%CR}94At_jQYI{&ph}ifMG05UPn=q{et7>D)L&mf#U)XrrQcR(=Ujuro zgy)3HcHLo1ggc2)Ey3F3X9uOCr*rzyq8TD{O&-nt{wuQ-Seo{19oY2UzR5Q3T`7;2 z2|)uPbTi^V(w6T~e_hL-p)3#`$yE3SheSYQp8Dc{ZyQIZMRktTAt+9I^5ZeMOvUdH zreYz1hC@WJ%U`4rQh=* zOWehVPI|D@@yPNaM1jb#=B_UWUF0Y!^p6f=diPb3<6;0jR5fe4e*^?i8Np{#i}E|F zqJYd*!@0Q4WpAFcC<=M@yVBotm!;J}+hRKCm}Ig$hc0b1B-4oPDA5xHY{aCtuQwnq zZz0nj>ve&oxQhDNywyh^&-|XD4R0=vD_n|ii(iV-LefK9c56XGzrvWy4H*cxB+&}| zwlDM*>RxDE=DwdY>oHw55G9gYn$B)Jm7jkReQ7`DMw07TGT=^urftzn5HH~4Wy}tj z^0dYH;N8569A2^^%KlPTca5$icbjngesm&{SEd>0eB-a-s%^lz?>=s z2Lmxz(Zp<0o9kJyQ5ovu6Zt!MZC|BwMo}Ntro+ge<82pVJ&gj(KjVoyEq}%Fdpl3* zHPXk03ccBl@osLxZS<_jbu&HU82(cUL3^eC2B&~VF+EA0wEbWAk}mo~&&zj$yPwO= zs6wt%pSPdV8UUPnAlqOF{PeFLX04~3JO;N_gOH*1VZ3PfH~Fx|gFKGYE>RIdEM%jY zrPrZHBWI@R<~96l^l~0(ElHq{6o^k1Nv(h%Po-Yk=Tj(KG_zvJX)E zs48adZv3yb3H8XCS~_`7oh^ej`bIXZOhO^WE})2lr4O&!*?4wAa4K6RC4w@mFKY0o zL7L7{@b2@h?cVB#wB!gZV#ad9Pu2)|O9LiMUgvlGSIjT13wbNi1D?He3pUkS_ZSBefH!f??Ng@)Tigpt|qVPo6UF;a#BD;M zzL##FtS1nAnz&66EZ2sA>jV5rugJzcH~mLNr{I%e$Bkp0H2;tY!lbdB+HY$#t(GMdgr zj0r3eWiuOxFC9aVqo?O=%Lu;e$5WS7a;3gAsMi0wipTQT3YxEcj7RLTp%U9? zQ&#>-z)-VNvl!(t2!Gbp^o$u@4@;HINotfp<5hZ}0<*)P$io4?(rTaGRW$UZYH+&n z0Uj*~)qe3D6Vg3|j{_BCEtRXqTf3oUg4nLHYMuA-XmMr_bk;s}N^b=$au+nUhljYr z?2hlNRu1A+>wrX>M~Nyl-mWnp76=*NttRhm|FV=(VjyoHvHyFGH`}6P;p0@H0ft~M zkixn(!o8xZj`A)*nrLriLAJ}bZpDmJ9+_viDoc-etT7Mfo~Gm@Nu!fX+%jpv6Npkb z^}_Ab6hP(_3Z}2B1@I*VRt9u~n4&(~YTw7C(=vP#9<0!q4po{AgKpPwc`RbY4k0xk zM4#0ZW`PtvdajMx-vMZX@v@I6Ys=pBR@MQj}eMr z9EI^WIMd($dhd1Jaej^tGZlD{KqThWN#<6RUic7AEJ(<%0HCVTI*OZ%Z$PhtB1rBc z1Bonewh97g3t?=|Qm1^l*1J4@-{u2^Yp%iyz} zK+cUJJi89aBDb@V+GHsj<2Ui^9egXT@jCak1^>Wj-YLx>SS6Q^Pc-Ro(0FRzG;L|n z`AO3_V2-t?1V{U@wz7K}i{lHSf?cBcxd{Yoo>bU*7j}@tL+=ak*caQWz zTf0oeo(M7&KO|Scwbm1N2`EZ(u6hDM!{PqS7zIhyLG=mqwDlS)rI{6u{h^=WBLyD; z?}zQywNEHbzG|;qJ}J&n5P{)MRXh{2h1*DFhPXc|v0^>nb(m(j7AS8Mlg>?FzyFj% zu?N&gj+Yq1!toHGmaI19x$}ZW)-ii4w$sJ!>S?MWwhn06JJ5%B*h-%oa%-M6i4Y4& zIz{6`_kg32(l&wnEnV_KZDh`(m{FMZY>xfp6uTT}X+UMH41}1Bsv#HJ$7ac`D}cPa z?2Pcupl8S;eOG@?c1{H zYg9n{oa{i%O~q)(qNZGEXIOYn)P61oy|>OyxYly-6APxZ09>M?l2tafQ}1NKYCEtV znn^Xo5=Y`6Rxf(nz(h%W%<}jumZ_Kg4Fu@xpgoj4LyssUiXH*#wxg!@6DW$Uj$H%RbA|e3 zU8M)byPwSYZc0SIPf)^mDF|aIBW1W~fBvYuG23>Ibi~7TH9%uDJE|%1(S#_d@2usb zTx@I*LVqhI@Qs?wm&>I55E6GS2Zu6JgVbqgc#i*F!dqL;Lwfr31@E&SO7^A>AGAZT zC%`M85&}fe-uHbqqBLw)_Aq82;-mc2_vs})?Pd~d-bdanh>9ad!;FLHN#O@<&G zK0#qFq@ZBO&RHCH5uA24X*YFnNcIOR%{IC^l*x+6tQF5eGjZf=DD5YeMpC9k_H*-V zxV70I(UCdgpQ@l~z54?D>XnXN(0B&uek81A+XQJ(-qnBR_DO)HtWSI27kI(~t`jap zgQBDrU;#@v1k@rX2}AX~^J<@Yq;QBy3OSc+1lQe8jYUGot5=?05lh2v`ZL3&g)O12 zKU8rnoqg-VqFy!PKe0CwVkUK)f2!@SknmSn9WGI&neULBD1Vf2u|N-%zAQyo=|#4H zi?TQNt0Otc!)XKVO~Vp2hWdAMBfABR(io5MFAb9VOFA*_Gc%9cC z;W`$J6E+?liHYR%*hH=pxy``ov~>@phJ~TYWg-K>gyE%u&@^GACG`VvoS4*NFj%zA zC_e7U9-JSWC?$%%=M=Ue+*Vcls75^L-m~;0ZLP#0V1=wr$6k;kDyLXGx1_<>Or#i* zgvV1`THNFj94(xPtZZ9nP`T?a#T!)MgPfTKecA16k%T(+R=Uc_23rJ64#}MgRk&dj z_n20{vKa8o=aXN}-Q(TO%7SThPr|v@@(Xw24S=39*s(8IT)yE&O+T5P( z8&Y5DW|L3RKwYbmWmU`A=&EbTO^O)kq9*6Cx$=~)|wDS|W z2Sl@j92jimkv+eKg*XCT%KuvaYy~$T%LQ5$rk9I@n@%KEza0POTC0bc&t7zuF ziEObl_`k&(g?#WL$B>}VJ7-k(1%n>#@>Y1jaM)qv2XPUU3f)hF5ML`C5oTs&hOaF| zCmh%B6K#}HJZ!E^EcCZ)AYcjbItL`~>84%!#(dTy=;vCveP%N_@10iN59xW7x+vWs zEYoIYI!Vj@g#JXIZ4ymx6P#ys3Qt_4mdo1LB(kG=p4>5{yR7!6Gz`(&@^SrOZn{wJ zLj0L$(xQtDyC_q$oaUzNr$Zfjc}_hC!opw-KEJl*nlp1I`i zG8P=~-5_kSrTpB1&Usw=67$h*st#L3(Vb+CyGKuq2G7^B)h_5zHS~ZA_yAAxtBdv{HDPT!@kB4HBAnb^H;aOaMJ-dFc(wU)6sZu! z^NmV^&^~M@Tib=14I@YrYm01LV(se+w& ztaARO*|gP_F~2mQ-b7@}&~R#JmiQH}8K` z$4!{~UDoakhs-zsYZn)_co_mZSel4O4}Av7R7*}QU=$meW$TzdXVCs2cK)9Dx$;c>=HV=yFdip^>SNi;$xG99 zo}u`*B@2t(n#e;bGAr|&ogo{+6njjz6}Gyxqj3t6~raWeNEN{!)OOo^TxXUMG0$PpKoi*q}QL&3KMh4DLXQQN!Am3;_Z zcz)>5euog9;B=JoRRpxeHeLCq6x{tJn-5%Yq!Ra{*+~;9@z23?IlR95_w^7xIJjb# zq;}D(JnnU^{ZL+7)yN?-jGmE$wDO*PLaM4AEamX~FX9W~N?-7MObXpocqW- z0q92OWj?OPr43X-_-{$D4rSovbNb9(K{IQLqdIVDnmx<*B{y$azB7?22YIzAR4N*C z9ON?TK|SVOj!dnCjWvAb=4YEL=xQ8PBAmb_l^V<(QXQ=)vh`~2lUjpA!E`C;%A5AK z-r@eJBv#SUmJzZX4`bRg76DxlwDQ zg}k}UG8!<5J|gbq>IPD7N`mz+pmR?6<;0jdW*tv+xZM_|1|=fmfI^|9 z%5#b7n*%4#%MlpJnG&z}JsCJdKq?MejM&_yA-dUo9fVRe-RS%HXB#2FXC{*a@T=OT zPeRL3k0vomST8b7l;FJ|G?IAz_Qr6<0Je~zim+4-xp4&_4< z>i!`)CA87#b%%ELNzJngRdv6dNQC|*R$pythaJXdh7-zQa)e&R{J|yH<+Ac|Daj3{ z!ZAP1@s9nfko!sV0(z?;dMW2qij--tnU2{QR?-O*^b~V`L(XCsisi>&?ml=^(?{^i z2l=`Pkw941t#Ll|Chc$S^5=Ii@>_2Vgxp+wudf-4d)`5~!<-TMkYKYGzmFzphG2m4 zxk;OdSiyaS8H>Qu?g@`iBZ;EL<;$L1j}{cmAw357ZKS;!mGOvai&m5tDtgB^^z|y2 zDX6v-Hgakux}QsT+oP}0TVG>am=ikdsP%Xy*w)*mcsl(e>{z<5?-_KpV?l?bbG}m2 z_dudqM|LO9aHXArLo4P~71yyT% zE+^>q83W<*u>t;pBEH$BV-|S4V z2b{MfNS3cT`%Lfz7=UH0;h)7Pmr5~{&;^I&|y+XcxT!DzAI8#X24Ps zIV$9;A~$k){f>r7Sohj6K{BcH*hhlNJ?cM`t_R0x9$fT{$4!pdLN%NUfdZKe|8#!-71?h6(%i5RW98RkB&2HZ zg7-)NF?<<%3$R|w8%P-qnl_rpuM)t+r@t(~?+9|DyTj^M@3=1Ios|5#o78La6}F~c zK3P}Ah2PuTV;Oyi?0VU-u6Ip{hIVRO>0C(+d(EPM9Af2EQqV6#Ld+7l#!Jn&oKc{d zV6~!zto5k4?2*O9ZoJ{d6B;tE(Km~Ay0DqW+?gf5j`}4IeK}1v0g3bql3ne`E~`rL z#yETUE<4(n6wghfL!bT4doXe_5fJv;Y=(^FBIiiCp0SC@TC%YzX3=HW-OZ_UC$}5d z;iySSHd@gq4%DnEL=lE(rEQ`hSJG7m?Pt)g^hN!soA|k zMcG6rBzLF25-bMtjih=i%4LP`o0ph%li@GC_Rss`kzqunmkL`=#$Osn)!q)yD$lK+|5zkK zTx3+P8paKDsHNf(E`{8i9nN*&mQ=xr;3Tv7ydwO#S%EIe@>%QHr}DPMS?iX~*@%)Z znY0IFy&7G0GCzFH+G%?0|0;svyzZd zmX(nBuhS6kXCSiul7wV>MTz?j)xI*~z{QmEnUyNCL`L(;;lvmf)Z^&70b6b)EPo{y zH}fI>fPoXiEk|XYXccHi4Bmi?tP4pgj7fdyES{nq2-)`k*>>OT0|$T0p*9}xBs#}T zg_97qv=WW)DaHGY--S+z$$2a3O#wA|>4rvTcwPt^eOk#Y(i+Y}zKH6pQ{ZLZa@#um zD8K(xiP(fjmO_{=9^X}LOZvwsYo`;d0Q1FIVv_7QMnq)43DKzCm|VCVNQzifJ?<*3 zVia+oWx~2;B=dfU4SBC&mutZ)o;+TPIx!TUK*Kg48A(N#TUDXhQe7x`d3fhH zfNBuLs7%4{eBU z=+aKAT>!1E&aEwXT4cVw06zOTH#F@acE2B6!MA!po}&FxLBQ0(j@8)A!Ni=^)6Vhz z_zD0367h62HnlN#B{wm*u(B7TJa6lyB)2jXqSWI42>j?MVQy(9TP4n zZ$>F1j0o}+cn7dEcQq#Ww6nE$5%3hE{2N!`{razAHcIlpRa|X^D78N-lS?=_o0D^~ za{g2rGlKh>{zX$Se{x97Bq5WUE|E>J4_3@*Cq=Tv3U*XA03Q_*$U%<@4 z)XGfY?@MkD9!_I+USk#>6LvlpE+Ckbg`b1ngvHz#Xl826W6s6HZTxRgvi2^n#`dP> ze?h&2vs%65aG0|jbMt`BSvZ00Tr6B*ULcDxm$?}W7cVE63v6P>{VxAE2qkB$_o_6u z{r9N;f--xD0&?-0a&v;;qhU8QW#KXb0$KPtI80gidB8lzeB4~@{Kn>gLz$Thd~k5K zGk%{=D?4Kgb2dkNi@ybb5iTI6EGtCG!3zBE5oKFrSMa;R`x>yaH*@fC`EQZBm7Teo ztMOlavh#9qa{+lc`MG%5*}1v-{#!}Y+}Y*57XLzJ2eNYh1NpCs5qMAMom%6+D)k-U zZ;SVA1SFizja?m_)g2scg(&|Diu^CjzYClk^p9zgv2uCW@cOIf|5^2F=1%{(`^O@% zwfb8`PX2e{3K*OI!-&HrKw$ic+|Q;b5XMWGg-F3*7Sd63u62K@B#W;;oq9T zyWKy=-kZyNuVVXGv-&4re^L1V@bS-i_iQ2| z|0@RmSIYmXuK(ZYLj3RTj=BB&Hz1Gq%?#;^()0U92&k-}F7*Zg#LkDhG`v4ebyIb9 zQ|07b802jD`Bm}RRT;$PC@A>R8Q9U;8Q{_J0kLb9W$7#*-)$jG7jJ zGCD2*020<;F9<+pHvan{oU80dDYyd!C_D;OJ$je-O&K{rR#Hsea?Q_sU5QF34g8EG zT6u?o;f|rgxOCvTSUUJjd8@NM`wD*BXm5JM$}u4MQi>`;a1z!tg`nhQK1R z9e0Ycp~9^m9qo$0cIE71$K8xfiiGhe=?tDU$8YLK-o~9ojVWUzC+*aVK&KAA`{#!V zeqQEN8`y?lzf*qaTl*I6qH=mmb`Y&iD6S7XZ=CtVthKM8NIMLz1tfn}jX_^NyZz*k z^=08|`7qLOphx3s^_$kl%NzAE1r3^=^;=CRSrRu(-V*+*Ctt_3C(3#X0`wYOez+7v zgWc=P>p;$rjOET;OJQPv=!>-%IwXKPvrkt+P?=84%>m{k9bnrKviU_hZ5?6+vjJjL zwQ2Qt!r1Y^ytjAprXwG+uk-ao9jF1w3z0@Iv{K+YPQvAC5GLI?lfnWG8PFejk)V|8 z2Y0apxH6n;ZmYt&-K3zRdP9CA1gw1y5wqM7gD$SIF<)YXyI?F&)jV1`^MIXu%^%To z6UNuB_jauQVDnODf7ooKm+m0Fj0|0@qF^LNNf?U-Kc?5O_|2Q^;1)JykH!NoMC?)4 z%_nZL0hb20zWDuL(Dj0y40-zevTKw3UNY_7R=M(!+~okF=0gd8(YRBRn8jQ0=aX`P zr@%a5lUDv>ROVL3EOrF{JZBE}Wj}j8ThscdaH()Xc*&A|2qwvW5Ns`IT3@^mE)#=}NhFo@0RnpQ>7N(FQ!9$f)uul(x{-xI)60%z&_TdF1q_Ja*?vk+&%HwsKzxH4+Ns)>=^D$$k05>odQIK%x6}YrsUa4<~+eUpOXU z@g897{wxy?C#~1~^j1Z&WqRgL91zsPjs>qXSM_9m>vGtOj^c~F(awJy7RL-Xct{OU z*NA^shthe)2jGn(h88%c;H`byc+fx@D=PaHK}q%<82WsW+%=?Dlue9^;R)me1kc=C zaXhD@REKS@?sPy8Aw0gMH*ct%m5VSQ=O zdBqpAe38}HxJ81Nb*zp)4+IGb3ZCvh%$^JpORzmfcmyRhPa#3b^d_rbb2oI7B0tF1 z=(wyNi}gAimca&pz#Bdd*rIgXb*g$IGVbd=7h4~%H zyTThVloj}#;dCbHdu7>enLD4Kt0TIyCQb?fC*e4(r7j+J>9MqRh&Z&d6hQQ>I9Aqh z{gUj9e_#Oqyq%w&ovkd+dYghfuCEfL0xaO_l{SkxVCW{Jl+Ycw=SNSa7BCW8;P{ zBj5nm9-h#toG7^Vr-CT%N2P9laUb7qRJFR~rGtGBwoaR+dw@99E9U)u`5%e4mH^(T ziGU`TrrfP9DQzQnxiZJxh?CFKoxy&VZtLfEVsm>~t>A_1E@&gd0uH9W3y!e#!?5oR zhwjNADDlFMrKtVXv*}<|`x405PxJ(it}W;Z(lPHiS#yglF`U)ZW@J{J?67axZ{iSH z8(}OyP`-v5-#;FH+%I7oUlXHZbKW)T8(r<1RnSigak+BDuI-L|>xLp5d+0jH+m(=z zVa}3%Q6zf%;ws1i$ND^mb{dMQHnZsn;@M9BwoBge!3IAz5+5HC#rP-{AqR}7 z_XU#{=P;~mnks3C?VDKuJ$5#N5ULnT0k(n&Hv&vw%H;k`tX$_B$xT)jweiOw_SAi_ z1=MvbVRw~U@1d1`j6(s50tZvfR8CeP_1Fy0dCsRb*MjcUCW!M|hOQy__^#QP)^?OJ z2rJ#4El*BoWlo*@k=4TmR(Z@H-G;$40fMLZFnH+sYBQYC-|i09EMfLazU}RS;266% zT$K^R(iS!DTeVt1BJIh1BM;-Zr`E=4@;%&(EYhCo?DaWWc)t&2({bL#gNK(Y5&xew)=CyimGciO3@!O;bh_WO!G@#k04y z7iHUp%PTdjq;oTwADju=oNudYzE8fYF@F!G@@6I#M-;*(5jB%!aMUmY8(V*{c2NrI zw&@)?U36Qh<(aeoOvtm1D=zqTps;4=3hb4x)$?2b8&x##(SMVZUy&5?TA}T zeH0aF!9vjC8r)0jw>r5 zfw?p$$DE-s5?w)E6s@F^r*0Ld_2*QJ1;R0or_sfaiUA3U6Db-KX28URh9Ewoa1)s# zQ*1~=s3|!VV#b<_G$BGGos^W~fGs020``FvnR?OT1IA_}@N2(wqOgWdaDE5~Npj)h(a)B&yh`<M+KwZR9};ADaOm=9G2)Ae~q(?|^?nGmE%AdILwBFoqY{F@-G4KM*3TOIY~8FQ}hyP4UF8`kZt`|}0GR@qJl3OyML9bf3>GpR1EWdkJ zh1_9&bqxSjI8mcDhdIAi5}Wabd--Xf5`&{zw(M3t3F8I`s}xVBpbk&vkq5>#rm|=6so}LdY;#*(sNy^6{}l9C)Le)uWj# zwVn*>{rV+i&04?zT^A`d>SgNCy>}pKWJ!BcHH!OY(K5|)`N*_P#vG@70)LW_>afFI z_jKSk*KNuNoVRao2IGdXj(;yD)6|~A=ME_!v1YkgY!)5IphnTC+C@sDU+CtJTjTxn zQoi)O(=b{E(sU}jJpjkJ#lwkH?y{8 zyMM^<=JT2CYL*m>%vma$#Zm}Vs|dM;1#k**7L)|hG>h5;Y9j;c&us|_aA2>|uPnnA z_b=qFrz^%$k(F7|W=>392n82}_-7#i#8HJ5bRdL0c|AHkvIGG5_W&afUCfkNp}>Co zBD2?L6<*`5OLZfni7c8?P`nf+jxwYuF-$H5-a@*&FD3pJ7~lyK%RNY)l?tns;+DxO z?S6w-dFvcOt*N68cnc*H^p;GdbuhO@uo=mH>e^3Sky#+4hEw2Gaq|x6trmA1MD<03 z5SbAO;ZQlMjDZp$f7e0|OKx@7<1v^Neyu&PRiQe9vV}OZ^oS2PhXUUEJBR*bc#Hrv zzh>z=k&poVyQ3o;d!h}P{Y%)-SZ-^*Xli?K+~=xXvK9l`Y~Yx(F{!_y=7QLhab-J zJ4L;eM+;Tyx7z%wRri>vP{LFP2Vh}327=_BM~W0231eeK&oTDwAXQRXDKC1s-bJB# z<@UUy&i`08h(Rb()vxz;UDqV+*t)+vA*!aSKWA(&w|D%r!mB+Fv8y(}1i*wwgnI~@ zxue(nx~58?FKC1>1Jar}Qcz>;)v4R$+pN^Q;+;YNtljQ<4!|Dz)H2YH4w{S!*HKGK zLJo~ga(N^jQDd4`VBaGOb9>!Ap>}JJx38|fZWKMqN+PDl)T~is00fCj!UH0&>WD=o zm+&FcCjsXLZ?;72=qL*m^jq+;%<;u5-2j)e^SvSB~?Yp$D`^*SW&&hIPW+}ti>GBVzDq9LeVxV zQPlJh#Pb(_ifQn!KamK9Luev{5eQ=(^^LTY)W?s5YD5kt)XXNvva#;TXi!m7NTu$H z``ZUfJgVtFToMXl8$l?3Z)C|*AIH(;A%3D?ei<5XUHQWAFw795tlI7FAVAe(7lt3Wg8~j1|fS&Rq`HfRBpBjIgvC^kJO#41kxA8VyO_ z{vSvDv1HZ+)4Ek_?XXtkyxYClbDLceKs^ybg39335c0rAS*ExHJ5KAWgtsFqur`68 z6Jd}OO`evb;fWDD#TRiI4~{yh+T6pfbb$BOESzJRKRfF+9bKGk;|-6 z^l2cH&L{x{fas@D8ghRRl3$n!>xSC~g7Z+qgrWGvHaz*|5l%Lf%LqMA+gtr;I5QRqo zfKX17&16ix;C1<(8nz2tzF|>i{(sJd%(r*)-J@SB3FJ&Hsnxgu2&r%@QbZ%0nkTrK z7;R{Iq{S1rGiaLXXJjt)*xYy|PHcvLLq}y(wOuI^kbSv`Nc2#)z)l$}o$#uzCZ6nz zc@ZfBqDdeJg0e_&b-Zv>?^_&+VkC+EMoDDX*9)b~>+b1b@LJWfIyn;UemktaJk0BeplDsC)S+C}9L(prt0_X_+`@7V(J8$F8{oB)hfk(!Nzu$Z*JOokGm zV6jrEOy*!Mo5R={PoTpY@kdDgG(dq}ZeqrcuK)ydJc!T($!0toB*8TcK3~u`HsJkE z-T}azC=`i=$IA(k4P+8Sf*$@@G#w|I)XR_lRy+cd-|EEDWsNMFh0-=O4@>WKLB(0# zgh5rJPr{JeM?8Z9G7}DJ;ygAW%WuKq|9p2hpIpr|XH$v42jG|--bd9b0}oL|KU*} zaQ6esHlI6l%=?$v#y4-pXwt-)Wzd-yi?r4+MtuC}c8;EW*YawAtJLD5=r+q9inS z@B|>F8J7NNIFx_1Ha3Po37egg+7;|TUT z4Ru`4-rZmJd4N(fDT3dVjzj;b&_y&hp;3?GSt1nmu9bcF?omeo&_KwKq_M(^x1q4; z5PXqPNF2Zl058%Y5*lyb`_0>d&>%U=KX1ij;W+vbAoxWy0SLTI5-|7|A6C6hrmhDNaqkBvcn zN>l)7WCImLl>J9YUsMlb2HpP6ow`cm402n39 z*wUhfRF~Im{o7*)cH4NXEomFWfWEI;^IpTSmJzngq*hX%4w5=bvUju}lzmY#U!zMT zWMfH>_`x4{ezI@8bi^?sImmgsrvw6kq%n)U%UT#Cw!BPT(Z)H2@kAS|Mt`~sa9~JWzBxAH$OPd;;&CFej6#?=JNxQoM3#eouU4zk zNeLglh<;$~cj-NoB$K%V`dy`Xb4|;bjnUw#rY`$W5IrJ6MiRM2;x#c|{G=kWcL11L zmeChltwxa#F3S!ol5-3`m=CDOWGJg%J&mOne-T?&SHvm&D1PG7q_CmWCb`Yr8h_rX zykXRMPUp)Y0rlq_j{-x#PV|)#_iZjNCS%$3nEsN9QG<~f^)yya)63jCau_QXDg6%z zJoa;4_v@ghMRik8i;g;$i><`cE6H?bC3S$|TMZ@Nb>;@isb;y-FrBh34iqfn97ofd z`N$!9dO5xFn>1R-<%GTr1(t31C5)p><8J5xt!7#r4KZ4DELx;xaTe(4AO($lt8L|C zu@|uyn;3c%snjTC&g0a@tDh~V z)9Gw#F|~-hPWnVI(&F*Q!3Upb+@0*f>gumkn)(2vtR7lc!oH|@(6ziN(ju8iY+@vd zWl45yv`mglXh!L3=4~=DiL`{*zW-J-gz*UJwHJwEpj0G5- zN{LLyFfx=-LtWNMB$wGfK#PlRN;ttkn(Hw*Wj!ua(-6;Obs)fQWHD>muL)@^m|El4t|~7&P>M7Dp<2K#k}`6OB4- ztnCwXN%yPr{Ic~q)m52Ll1ryiWi2t}IA(5ro_L=_iA4P5k%~ST1g`2D%BW5@hI+*K zf-Dv1-~RZQ?EhW*KeA!i`7BANt?YpzT%02>qFOu@k&yI(w-0q)M#=;<;WHnW(BEvAg%1+s|ciWfU(>#0eLLe5ljdadg z)PIr9Mb(w#oOmNz%`*z!K?tBOyCVd+#oHa1l0Sk<7wbIN(G>GF17h!;wXS!L(9j)Re( z>B$&b787}xY;NXEOht$&KcV`uW$tTIM42~DvqP)rEzZv_E(&aQcaK*%FBI}du?T7) z%b3J4*(dQWMlx~k1+KuR+1JOWl=_{+UNFl(IXU6nh3u=s-k!U6CXVVsGSF_Ec^lsA z=Ln?xUy_{L!oF;1Zk06 zj^HH+ z?e+CEJ7zoif-Cua;)5mu86`-L%wwjEs2eIZoo{|L9-8cum2;_BI=hv1oTuWnn*84U z-^r4bW5LZnWYaV~${KJ21{<~@JClWDp$t0}I zD&WQqM_JEqE+&`Ys8WHRNk}^tqv_@Y&63~x^~j^U;WvJx_{AIAY<&I3DV7^sTc{H! zmT_KdBFm2TpJ!hp3tZ<8{ zKJcActTNLUM_gxnE<%|(;^adYPGZh+M1{)Y$zj=`j!_o9EoG;rW6i?8{pAkUxz^ee|@sV+r7Ot9Cr_D?J5fQq` zmKu&!aa(nlce~G?m7YC&R%w=a|BTY2M-gT3S%E=WaSUPO%~NNDPRy*yc9_)a)!fc? z_f;XEzu>Pf&hop}YL(K7ym)j=C-UCgUHt0`m{Puc!Y`%XfcGyrf0ZxgFYs0HK7Bzx zxx^78y<%OlgVQZm<-3JeS2}d}cJui?@W4fW=l*p3uPlRB5A&cuR?XL3&cOguzLpol z>{;nvIH`VeCB5T8B2LncGaE6$dA}{$wTr#{-o=HuyJd}qqvO6f`d)iI`f=IoV+gJ8 zy0z9|z&lc{R?F{t%8REXo9_+wpIV}w5(Jgoa_hamP(p$~j>QqNNL68agCFi4e~Thu zLeup$it#$hq1YiE%_8scL9f?u6&ZEU&hmLwZHci_Szue<52aE*ze?06>RH>K`rw|UWh)#m*|;i7%jZI(*gKp^INHnT>^76ZkvujbDS ztVt{V8(wK&9ocp7)RGF5OQ%=uoAxypzi8*%gZAzr_O|_kY-LzxJCj+@uQKOFY3GO) zFU$RYr&786zSgn9N zc!tRNpu?{?@6;ju)TP#@H*|>ubl%6GYM7~!hw2HJc6TrM1ri!0vQ^y{#@xKZNF}?e_BU0`GMCoR>Qi@us4m zULO2p6edMB*;Rxwr)~$^=FOUv`0Jq?ojebEr-V3<5a;#19)(L9jPr|kXKDBMxgX}E zqnGIWe-ui%)U^cl*_G0TG(NNrO&+>T4(mU-1_Y@900E~-L_t(I1dqO_geqDkyLtow z@oZQcnQL+mbARX_{rDXHof3vkVMOudg6BsXgeGU!?~WutP-1*IIMPE7iO1e9?_Zr> z4!A4bpJyr`9Q%I=ppNY6okGd}7=Z@7*=g1Q;I>-sF8Yc>u~9Y)X1P>4+udQT))B3n zY1*}yZVQ=rv0G~oZf;sPKmF_~0P3}iKko5n^9^#CAt2pK<@|{E1xKi>JG9yn&69h6 zGq}FKYVwZ&E}((SFQCskDnT33(dTV`)ah0#oSBEV-Tc1R?sQzpcf0Kd{RkkR-vzCo z3oc=oRRkw8tAg?O4ZrF%Du{pgtUc&LxO>SjE3EJl!0zs@n?G~i$|y8!6kT$Ku=TDAAF4S>$QyoxOt}`kyOsydbU9mp zYA|Xx?T-L(^L+kn_gVXo?W^w_t-K%(j;%C{4j;gHJF9!`8@~5!y~LcS>xZR}06coz z Date: Sun, 8 Sep 2024 12:50:35 +0300 Subject: [PATCH 158/544] Fix incorrect point macros in contest_ai_script.inc --- asm/macros/contest_ai_script.inc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/asm/macros/contest_ai_script.inc b/asm/macros/contest_ai_script.inc index 9ab7184c3c..d66d9a8ffd 100644 --- a/asm/macros/contest_ai_script.inc +++ b/asm/macros/contest_ai_script.inc @@ -141,25 +141,25 @@ .macro if_points_less_than num:req, destination:req .byte 0x16 - .byte \num + .2byte \num .4byte \destination .endm .macro if_points_more_than num:req, destination:req .byte 0x17 - .byte \num + .2byte \num .4byte \destination .endm .macro if_points_eq num:req, destination:req .byte 0x18 - .byte \num + .2byte \num .4byte \destination .endm .macro if_points_not_eq num:req, destination:req .byte 0x19 - .byte \num + .2byte \num .4byte \destination .endm @@ -171,25 +171,25 @@ .macro if_preliminary_points_less_than num:req, destination:req .byte 0x1B - .byte \num + .2byte \num .4byte \destination .endm .macro if_preliminary_points_more_than num:req, destination:req .byte 0x1C - .byte \num + .2byte \num .4byte \destination .endm .macro if_preliminary_points_eq num:req, destination:req .byte 0x1D - .byte \num + .2byte \num .4byte \destination .endm .macro if_preliminary_points_not_eq num:req, destination:req .byte 0x1E - .byte \num + .2byte \num .4byte \destination .endm From 6d020eb366269a7da5c37aa51b8e9be51d63a8a6 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 8 Sep 2024 14:14:05 -0300 Subject: [PATCH 159/544] Cleaned up duplicate dynamic type functions (#5338) * Cleaned up duplicated dynamic type functions * Small cleanup * Oops, last cleanup broke stuff * Alignment Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/battle_main.h | 1 + include/config/pokemon.h | 2 +- src/battle_controller_player.c | 15 +- src/battle_main.c | 279 ++++++++++++++++++++++----------- src/battle_script_commands.c | 2 +- src/pokemon.c | 172 +------------------- src/pokemon_summary_screen.c | 13 +- 7 files changed, 202 insertions(+), 282 deletions(-) diff --git a/include/battle_main.h b/include/battle_main.h index eb0af5aa77..7e3206c554 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -80,6 +80,7 @@ s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands(void); void SpecialStatusesClear(void); +u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost); void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk); bool32 IsWildMonSmart(void); u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags); diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 89e72cec17..15db4881b5 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -51,7 +51,7 @@ #define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games. #define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid won't be shiny. #define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be shiny -#define P_SHOW_DYNAMIC_TYPES FALSE // If TRUE, moves with dynamic type changes will be reflected as their current type in battle/summary screens. +#define P_SHOW_DYNAMIC_TYPES FALSE // If TRUE, all moves with dynamic type changes will be reflected as their current type in battle/summary screens instead of just select ones like in vanilla. // Learnset helper toggles #define P_LEARNSET_HELPER_TEACHABLE TRUE // If TRUE, teachable_learnsets.h will be populated by tools/learnset_helpers/teachable.py using the included JSON files based on available TMs and tutors. diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 209a40e751..afff143266 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1720,7 +1720,6 @@ static void MoveSelectionDisplayMoveType(u32 battler) { if (IsGimmickSelected(battler, GIMMICK_TERA) || GetActiveGimmick(battler) == GIMMICK_TERA) type = GetBattlerTeraType(battler); - end = StringCopy(txtPtr, gTypesInfo[type].name); } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_IVY_CUDGEL) { @@ -1730,32 +1729,24 @@ static void MoveSelectionDisplayMoveType(u32 battler) || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK_TERA) type = gBattleMons[battler].types[1]; - end = StringCopy(txtPtr, gTypesInfo[type].name); } - // Max Guard is a Normal-type move else if (gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].category == DAMAGE_CATEGORY_STATUS && (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))) { - type = TYPE_NORMAL; - end = StringCopy(txtPtr, gTypesInfo[type].name); + type = TYPE_NORMAL; // Max Guard is always a Normal-type move } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_STARSTORM) { if (gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR || (IsGimmickSelected(battler, GIMMICK_TERA) && gBattleMons[battler].species == SPECIES_TERAPAGOS_TERASTAL)) type = TYPE_STELLAR; - end = StringCopy(txtPtr, gTypesInfo[type].name); } - else if (P_SHOW_DYNAMIC_TYPES) + else if (P_SHOW_DYNAMIC_TYPES) // Non-vanilla changes to battle UI showing dynamic types { struct Pokemon *mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; type = CheckDynamicMoveType(mon, moveInfo->moves[gMoveSelectionCursor[battler]], battler); - end = StringCopy(txtPtr, gTypesInfo[type].name); - } - else - { - end = StringCopy(txtPtr, gTypesInfo[type].name); } + end = StringCopy(txtPtr, gTypesInfo[type].name); PrependFontIdToFit(txtPtr, end, FONT_NORMAL, WindowWidthPx(B_WIN_MOVE_TYPE) - 25); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); diff --git a/src/battle_main.c b/src/battle_main.c index c77c325db2..a4c55ce9b5 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -23,6 +23,7 @@ #include "dma3.h" #include "event_data.h" #include "evolution_scene.h" +#include "field_weather.h" #include "graphics.h" #include "gpu_regs.h" #include "international_string_util.h" @@ -67,6 +68,7 @@ #include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainers.h" +#include "constants/weather.h" #include "cable_club.h" extern const struct BgTemplate gBattleBgTemplates[]; @@ -5774,151 +5776,246 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) return FALSE; } -void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) +// Returns TYPE_NONE if type doesn't change. +// NULL can be passed to ateBoost to avoid applying ate-ability boosts when opening the summary screen in-battle. +u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) { - u32 moveType, attackerAbility; - u16 holdEffect = GetBattlerHoldEffect(battlerAtk, TRUE); + u32 moveType = gMovesInfo[move].type; + u32 moveEffect = gMovesInfo[move].effect; + u32 species, heldItem, holdEffect, ability, type1, type2, type3; if (move == MOVE_STRUGGLE) - return; + return TYPE_NORMAL; - gBattleStruct->dynamicMoveType = 0; - gBattleStruct->ateBoost[battlerAtk] = 0; - gSpecialStatuses[battlerAtk].gemBoost = FALSE; - - if (gMovesInfo[move].effect == EFFECT_WEATHER_BALL) + if (gMain.inBattle) { - if (WEATHER_HAS_EFFECT) + species = gBattleMons[battler].species; + heldItem = gBattleMons[battler].item; + holdEffect = GetBattlerHoldEffect(battler, TRUE); + ability = GetBattlerAbility(battler); + type1 = gBattleMons[battler].types[0]; + type2 = gBattleMons[battler].types[1]; + type3 = gBattleMons[battler].types[2]; + } + else + { + species = GetMonData(mon, MON_DATA_SPECIES); + heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + holdEffect = ItemId_GetHoldEffect(heldItem); + ability = GetMonAbility(mon); + type1 = gSpeciesInfo[species].types[0]; + type2 = gSpeciesInfo[species].types[1]; + type3 = TYPE_MYSTERY; + } + + if (moveEffect == EFFECT_WEATHER_BALL) + { + if (gMain.inBattle && WEATHER_HAS_EFFECT) { if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_SET; + return TYPE_WATER; else if (gBattleWeather & B_WEATHER_SANDSTORM) - gBattleStruct->dynamicMoveType = TYPE_ROCK | F_DYNAMIC_TYPE_SET; + return TYPE_ROCK; else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - gBattleStruct->dynamicMoveType = TYPE_FIRE | F_DYNAMIC_TYPE_SET; - else if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) - gBattleStruct->dynamicMoveType = TYPE_ICE | F_DYNAMIC_TYPE_SET; + return TYPE_FIRE; + else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) + return TYPE_ICE; else - gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; + return moveType; + } + else + { + switch (gWeatherPtr->currWeather) + { + case WEATHER_DROUGHT: + if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_FIRE; + break; + case WEATHER_RAIN: + case WEATHER_RAIN_THUNDERSTORM: + if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_WATER; + break; + case WEATHER_SNOW: + return TYPE_ICE; + case WEATHER_SANDSTORM: + return TYPE_ROCK; + } + return moveType; } } - else if (gMovesInfo[move].effect == EFFECT_HIDDEN_POWER) + else if (moveEffect == EFFECT_HIDDEN_POWER) { - u8 typeBits = ((gBattleMons[battlerAtk].hpIV & 1) << 0) - | ((gBattleMons[battlerAtk].attackIV & 1) << 1) - | ((gBattleMons[battlerAtk].defenseIV & 1) << 2) - | ((gBattleMons[battlerAtk].speedIV & 1) << 3) - | ((gBattleMons[battlerAtk].spAttackIV & 1) << 4) - | ((gBattleMons[battlerAtk].spDefenseIV & 1) << 5); + u8 typeBits; + if (gMain.inBattle) + { + typeBits = ((gBattleMons[battler].hpIV & 1) << 0) + | ((gBattleMons[battler].attackIV & 1) << 1) + | ((gBattleMons[battler].defenseIV & 1) << 2) + | ((gBattleMons[battler].speedIV & 1) << 3) + | ((gBattleMons[battler].spAttackIV & 1) << 4) + | ((gBattleMons[battler].spDefenseIV & 1) << 5); + } + else + { + typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) + | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) + | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) + | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) + | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) + | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); + } // Subtract 6 instead of 1 below because 5 types are excluded (TYPE_NONE, TYPE_NORMAL, TYPE_MYSTERY, TYPE_FAIRY and TYPE_STELLAR) // The final + 2 skips past TYPE_NONE and Normal. - gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 6) * typeBits) / 63 + 2; - if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) - gBattleStruct->dynamicMoveType++; - gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_IGNORE_PHYSICALITY | F_DYNAMIC_TYPE_SET; + moveType = ((NUMBER_OF_MON_TYPES - 6) * typeBits) / 63 + 2; + if (moveType >= TYPE_MYSTERY) + moveType++; + return (moveType | F_DYNAMIC_TYPE_IGNORE_PHYSICALITY); } - else if (gMovesInfo[move].effect == EFFECT_CHANGE_TYPE_ON_ITEM && holdEffect == gMovesInfo[move].argument) + else if (moveEffect == EFFECT_CHANGE_TYPE_ON_ITEM && holdEffect == gMovesInfo[move].argument) { - gBattleStruct->dynamicMoveType = ItemId_GetSecondaryId(gBattleMons[battlerAtk].item) | F_DYNAMIC_TYPE_SET; + return ItemId_GetSecondaryId(heldItem); } - else if (gMovesInfo[move].effect == EFFECT_REVELATION_DANCE && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) + else if (moveEffect == EFFECT_REVELATION_DANCE && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) { - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) != TYPE_STELLAR) - gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk); - else if (gBattleMons[battlerAtk].types[0] != TYPE_MYSTERY && !(gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST && gBattleMons[battlerAtk].types[0] == TYPE_FLYING)) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[0] | F_DYNAMIC_TYPE_SET; - else if (gBattleMons[battlerAtk].types[1] != TYPE_MYSTERY && !(gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST && gBattleMons[battlerAtk].types[1] == TYPE_FLYING)) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET; - else if (gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST) - gBattleStruct->dynamicMoveType = (B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY) | F_DYNAMIC_TYPE_SET; - else if (gBattleMons[battlerAtk].types[2] != TYPE_MYSTERY) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[2] | F_DYNAMIC_TYPE_SET; + u8 teraType; + if (GetActiveGimmick(battler) == GIMMICK_TERA && ((teraType = GetMonData(mon, MON_DATA_TERA_TYPE)) != TYPE_STELLAR)) + return teraType; + else if (type1 != TYPE_MYSTERY && !(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST && type1 == TYPE_FLYING)) + return type1; + else if (type2 != TYPE_MYSTERY && !(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST && type2 == TYPE_FLYING)) + return type2; + else if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST) + return (B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY); + else if (type3 != TYPE_MYSTERY) + return type3; else - gBattleStruct->dynamicMoveType = TYPE_MYSTERY | F_DYNAMIC_TYPE_SET; + return TYPE_MYSTERY; } - else if (gMovesInfo[move].effect == EFFECT_RAGING_BULL - && (gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED - || gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED - || gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) + else if (moveEffect == EFFECT_RAGING_BULL + && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED + || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED + || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) { - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET; + return type2; } - else if (gMovesInfo[move].effect == EFFECT_IVY_CUDGEL - && (gBattleMons[battlerAtk].species == SPECIES_OGERPON_WELLSPRING_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_WELLSPRING_MASK_TERA - || gBattleMons[battlerAtk].species == SPECIES_OGERPON_HEARTHFLAME_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA - || gBattleMons[battlerAtk].species == SPECIES_OGERPON_CORNERSTONE_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA )) + else if (moveEffect == EFFECT_IVY_CUDGEL + && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA + || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA + || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) { - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET; + return type2; } - else if (gMovesInfo[move].effect == EFFECT_NATURAL_GIFT) + else if (moveEffect == EFFECT_NATURAL_GIFT) { - if (ItemId_GetPocket(gBattleMons[battlerAtk].item) == POCKET_BERRIES) - gBattleStruct->dynamicMoveType = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].type; + if (ItemId_GetPocket(heldItem) == POCKET_BERRIES) + return gNaturalGiftTable[ITEM_TO_BERRY(heldItem)].type; + else + return moveType; } - else if (gMovesInfo[move].effect == EFFECT_TERRAIN_PULSE) + else if (moveEffect == EFFECT_TERRAIN_PULSE) { - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_TERRAIN_ANY)) + if (gMain.inBattle) { - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) - gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; - else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - gBattleStruct->dynamicMoveType = TYPE_GRASS | F_DYNAMIC_TYPE_SET; - else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) - gBattleStruct->dynamicMoveType = TYPE_FAIRY | F_DYNAMIC_TYPE_SET; - else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) - gBattleStruct->dynamicMoveType = TYPE_PSYCHIC | F_DYNAMIC_TYPE_SET; - else //failsafe - gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; + if (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY)) + { + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + return TYPE_ELECTRIC; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + return TYPE_GRASS; + else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + return TYPE_FAIRY; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + return TYPE_PSYCHIC; + else //failsafe + return moveType; + } + } + else + { + switch (gWeatherPtr->currWeather) + { + case WEATHER_RAIN_THUNDERSTORM: + if (B_THUNDERSTORM_TERRAIN) + return TYPE_ELECTRIC; + break; + case WEATHER_FOG_HORIZONTAL: + case WEATHER_FOG_DIAGONAL: + if (B_OVERWORLD_FOG >= GEN_8) + return TYPE_FAIRY; + break; + } + return moveType; } } - else if (gMovesInfo[move].effect == EFFECT_TERA_BLAST && GetActiveGimmick(battlerAtk) == GIMMICK_TERA) + else if (moveEffect == EFFECT_TERA_BLAST && GetActiveGimmick(battler) == GIMMICK_TERA) { - gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk) | F_DYNAMIC_TYPE_SET; + return GetMonData(mon, MON_DATA_TERA_TYPE); } - else if (gMovesInfo[move].effect == EFFECT_TERA_STARSTORM && gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR) + else if (moveEffect == EFFECT_TERA_STARSTORM && species == SPECIES_TERAPAGOS_STELLAR) { - gBattleStruct->dynamicMoveType = TYPE_STELLAR | F_DYNAMIC_TYPE_SET; + return TYPE_STELLAR; } - attackerAbility = GetBattlerAbility(battlerAtk); - if (gMovesInfo[move].type == TYPE_NORMAL - && TrySetAteType(move, battlerAtk, attackerAbility) - && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) + if (moveType == TYPE_NORMAL + && ((!gMain.inBattle || TrySetAteType(move, battler, ability)) + && GetActiveGimmick(battler) != GIMMICK_DYNAMAX)) { - gBattleStruct->ateBoost[battlerAtk] = 1; + if (gMain.inBattle && ateBoost != NULL) + *ateBoost = TRUE; } - else if (gMovesInfo[move].type != TYPE_NORMAL - && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER - && gMovesInfo[move].effect != EFFECT_WEATHER_BALL - && attackerAbility == ABILITY_NORMALIZE - && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) + else if (moveType != TYPE_NORMAL + && moveEffect != EFFECT_HIDDEN_POWER + && moveEffect != EFFECT_WEATHER_BALL + && ability == ABILITY_NORMALIZE + && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) { - gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; - if (GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) - gBattleStruct->ateBoost[battlerAtk] = 1; + if (gMain.inBattle && ateBoost != NULL && GetActiveGimmick(battler) != GIMMICK_DYNAMAX) + *ateBoost = TRUE; + return TYPE_NORMAL; } - else if (gMovesInfo[move].soundMove && attackerAbility == ABILITY_LIQUID_VOICE) + else if (gMovesInfo[move].soundMove && ability == ABILITY_LIQUID_VOICE) { - gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_SET; + return TYPE_WATER; } - else if (gMovesInfo[move].effect == EFFECT_AURA_WHEEL && gBattleMons[battlerAtk].species == SPECIES_MORPEKO_HANGRY) + else if (moveEffect == EFFECT_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) { - gBattleStruct->dynamicMoveType = TYPE_DARK | F_DYNAMIC_TYPE_SET; + return TYPE_DARK; } + return TYPE_NONE; +} + +void SetTypeBeforeUsingMove(u32 move, u32 battler) +{ + u32 moveType; + u32 heldItem = gBattleMons[battler].item; + u32 holdEffect = GetBattlerHoldEffect(battler, TRUE); + + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->ateBoost[battler] = FALSE; + gSpecialStatuses[battler].gemBoost = FALSE; + + moveType = GetDynamicMoveType(&GetBattlerParty(battler)[gBattlerPartyIndexes[battler]], + move, + battler, + &gBattleStruct->ateBoost[battler]); + if (moveType != TYPE_NONE) + gBattleStruct->dynamicMoveType = moveType | F_DYNAMIC_TYPE_SET; + moveType = GetMoveType(move); if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) - || gStatuses4[battlerAtk] & STATUS4_ELECTRIFIED) + || gStatuses4[battler] & STATUS4_ELECTRIFIED) gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; // Check if a gem should activate. moveType = GetMoveType(move); if (holdEffect == HOLD_EFFECT_GEMS - && moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item)) + && moveType == ItemId_GetSecondaryId(heldItem)) { - gSpecialStatuses[battlerAtk].gemParam = GetBattlerHoldEffectParam(battlerAtk); - gSpecialStatuses[battlerAtk].gemBoost = TRUE; + gSpecialStatuses[battler].gemParam = GetBattlerHoldEffectParam(battler); + gSpecialStatuses[battler].gemBoost = TRUE; } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 231afefc1f..9f649252fd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6410,7 +6410,7 @@ static void Cmd_moveend(void) gBattleStruct->targetsDone[gBattlerAttacker] = 0; gProtectStructs[gBattlerAttacker].targetAffected = FALSE; gProtectStructs[gBattlerAttacker].shellTrap = FALSE; - gBattleStruct->ateBoost[gBattlerAttacker] = 0; + gBattleStruct->ateBoost[gBattlerAttacker] = FALSE; gStatuses3[gBattlerAttacker] &= ~STATUS3_ME_FIRST; gSpecialStatuses[gBattlerAttacker].gemBoost = FALSE; gSpecialStatuses[gBattlerAttacker].damagedMons = 0; diff --git a/src/pokemon.c b/src/pokemon.c index 92a50ed1aa..d76d1df58c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6963,172 +6963,8 @@ static inline u32 CalculateHiddenPowerType(struct Pokemon *mon) u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) { - u32 type = gMovesInfo[move].type; - u32 species = GetMonData(mon, MON_DATA_SPECIES); - u32 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - u32 heldItemEffect = ItemId_GetHoldEffect(heldItem); - u32 ability = GetMonAbility(mon); - u32 type1 = gSpeciesInfo[species].types[0]; - u32 type2 = gSpeciesInfo[species].types[1]; - u32 effect = gMovesInfo[move].effect; - - if (effect == EFFECT_IVY_CUDGEL - && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA - || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA - || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) - { - type = type2; - } - else if (move == MOVE_STRUGGLE) - { - return TYPE_NORMAL; - } - else if (effect == EFFECT_TERA_BLAST && GetActiveGimmick(battler) == GIMMICK_TERA && gBattleMons[battler].species == species) - { - return GetMonData(mon, MON_DATA_TERA_TYPE); - } - else if (effect == EFFECT_TERA_STARSTORM && species == SPECIES_TERAPAGOS_STELLAR) - { - return TYPE_STELLAR; - } - else if (move == MOVE_HIDDEN_POWER) - { - return CalculateHiddenPowerType(mon); - } - else if (effect == EFFECT_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) - { - type = TYPE_DARK; - } - else if (effect == EFFECT_CHANGE_TYPE_ON_ITEM) - { - if (heldItemEffect == gMovesInfo[move].argument) - return ItemId_GetSecondaryId(heldItem); - else - return TYPE_NORMAL; - } - else if (effect == EFFECT_NATURAL_GIFT) - { - if (ItemId_GetPocket(heldItem) == POCKET_BERRIES) - return gNaturalGiftTable[ITEM_TO_BERRY(heldItem)].type; - else - return TYPE_NORMAL; - } - else if (effect == EFFECT_RAGING_BULL - && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED - || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED - || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) - { - return type2; - } - else if (effect == EFFECT_REVELATION_DANCE) - { - if (gBattleMons[battler].species != species && type1 != TYPE_MYSTERY) - type = type1; - else if (gBattleMons[battler].species != species && type2 != TYPE_MYSTERY) - type = type2; - else if (GetBattlerTeraType(battler) != TYPE_STELLAR && (GetActiveGimmick(battler) == GIMMICK_TERA || IsGimmickSelected(battler, GIMMICK_TERA))) - type = GetMonData(mon, MON_DATA_TERA_TYPE); - else if (gBattleMons[battler].types[0] != TYPE_MYSTERY) - type = gBattleMons[battler].types[0]; - else if (gBattleMons[battler].types[1] != TYPE_MYSTERY) - type = gBattleMons[battler].types[1]; - else if (gBattleMons[battler].types[2] != TYPE_MYSTERY) - type = gBattleMons[battler].types[2]; - } - else if (effect == EFFECT_TERRAIN_PULSE - && ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species) - || (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY) && gBattleMons[battler].species == species))) - { - if (gMain.inBattle) - { - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) - return TYPE_ELECTRIC; - else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - return TYPE_GRASS; - else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) - return TYPE_FAIRY; - else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) - return TYPE_PSYCHIC; - else //failsafe - type = TYPE_NORMAL; - } - else - { - switch (gWeatherPtr->currWeather) - { - case WEATHER_RAIN_THUNDERSTORM: - if (B_THUNDERSTORM_TERRAIN) - return TYPE_ELECTRIC; - break; - case WEATHER_FOG_HORIZONTAL: - case WEATHER_FOG_DIAGONAL: - if (B_OVERWORLD_FOG >= GEN_8) - return TYPE_FAIRY; - break; - } - return TYPE_NORMAL; - } - } - - if (effect == EFFECT_WEATHER_BALL) - { - if (gMain.inBattle && WEATHER_HAS_EFFECT) - { - if (gBattleWeather & B_WEATHER_RAIN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - return TYPE_WATER; - else if (gBattleWeather & B_WEATHER_SANDSTORM) - return TYPE_ROCK; - else if (gBattleWeather & B_WEATHER_SUN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - return TYPE_FIRE; - else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) - return TYPE_ICE; - else - return TYPE_NORMAL; - } - else - { - switch (gWeatherPtr->currWeather) - { - case WEATHER_DROUGHT: - if (heldItem != ITEM_UTILITY_UMBRELLA) - return TYPE_FIRE; - break; - case WEATHER_RAIN: - case WEATHER_RAIN_THUNDERSTORM: - if (heldItem != ITEM_UTILITY_UMBRELLA) - return TYPE_WATER; - break; - case WEATHER_SNOW: - return TYPE_ICE; - break; - case WEATHER_SANDSTORM: - return TYPE_ROCK; - break; - } - return TYPE_NORMAL; - } - } - - if (ability == ABILITY_NORMALIZE && gMovesInfo[move].type != TYPE_NORMAL && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) - type = TYPE_NORMAL; - - if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && type == TYPE_NORMAL) || gStatuses4[battler] & STATUS4_ELECTRIFIED) - type = TYPE_ELECTRIC; - - if (gMovesInfo[move].type == TYPE_NORMAL && gMovesInfo[move].category != DAMAGE_CATEGORY_STATUS) - { - switch (ability) - { - case ABILITY_PIXILATE: return TYPE_FAIRY; - case ABILITY_REFRIGERATE: return TYPE_ICE; - case ABILITY_AERILATE: return TYPE_FLYING; - case ABILITY_GALVANIZE: return TYPE_ELECTRIC; - default: break; - } - } - - if (ability == ABILITY_LIQUID_VOICE && gMovesInfo[move].soundMove == TRUE) - return TYPE_WATER; - - return type; + u32 moveType = GetDynamicMoveType(mon, move, battler, NULL); + if (moveType != TYPE_NONE) + return moveType; + return gMovesInfo[move].type; } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index bf6ab45a2a..de0b54800b 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3956,28 +3956,23 @@ static void SetMonTypeIcons(void) static void SetMoveTypeIcons(void) { u32 i; - u32 type; struct PokeSummary *summary = &sMonSummaryScreen->summary; struct Pokemon *mon = &sMonSummaryScreen->currentMon; + u32 type; for (i = 0; i < MAX_MON_MOVES; i++) { if (summary->moves[i] != MOVE_NONE) { + type = gMovesInfo[summary->moves[i]].type; if (P_SHOW_DYNAMIC_TYPES) - { type = CheckDynamicMoveType(mon, summary->moves[i], 0); - SetTypeSpritePosAndPal(type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); - } - else - { - SetTypeSpritePosAndPal(gMovesInfo[summary->moves[i]].type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); - } + SetTypeSpritePosAndPal(type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); } else { SetSpriteInvisibility(i + SPRITE_ARR_ID_TYPE, TRUE); - } + } } } From 9bc21c043c9d79b80c843aec345cd7c7d9ca9377 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 8 Sep 2024 14:30:01 -0300 Subject: [PATCH 160/544] Fix swamp pal linebreaks --- .../battle_anims/backgrounds/swampswizzle.pal | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/graphics/battle_anims/backgrounds/swampswizzle.pal b/graphics/battle_anims/backgrounds/swampswizzle.pal index 68d0311f6b..b739a386e7 100644 --- a/graphics/battle_anims/backgrounds/swampswizzle.pal +++ b/graphics/battle_anims/backgrounds/swampswizzle.pal @@ -1,19 +1,19 @@ -JASC-PAL -0100 -16 -255 0 0 -140 214 132 -115 181 132 -115 181 99 -90 148 90 -90 148 74 -74 115 41 -74 107 57 -57 82 24 -49 82 41 -66 74 33 -33 57 16 -41 49 16 -49 41 8 -16 24 0 -140 222 173 +JASC-PAL +0100 +16 +255 0 0 +140 214 132 +115 181 132 +115 181 99 +90 148 90 +90 148 74 +74 115 41 +74 107 57 +57 82 24 +49 82 41 +66 74 33 +33 57 16 +41 49 16 +49 41 8 +16 24 0 +140 222 173 From 32dde8af645965b315c544a1ad36a760f6310704 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Mon, 9 Sep 2024 04:43:15 -0400 Subject: [PATCH 161/544] Composite flag docs (#5349) --- docs/ai_flags.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/ai_flags.md b/docs/ai_flags.md index 8ba2e33253..8559ff36f9 100644 --- a/docs/ai_flags.md +++ b/docs/ai_flags.md @@ -27,6 +27,16 @@ If you are not using competitive syntax parties, instead access the trainer data # What AI Flags does pokeemerald-expansion have? This section lists all of expansion’s AI Flags and briefly describes the effect they have on the AI’s behaviour. In all cases, please check the corresponding function or surrounding code around their implementation for more details. Some of these functions are vanilla, some share a name with vanilla but have been modified to varying degrees, and some are completely new. +## Composite AI Flags + +Expansion has two "composite" AI flags, `AI_FLAG_BASIC_TRAINER` and `AI_FLAG_SMART_TRAINER`. This means that these flags have no unique functionality themselves, and can instead be thought of as groups of other flags that are all enabled when this flag is enabled. The idea behind these flags is that if you don't care to manage the detailed behaviour of a particular trainer, you can use these as a baseline instead, and expansion will keep them updated for you. + +`AI_FLAG_BASIC_TRAINER` is expansion's version of generic, normal AI behaviour. It includes `AI_FLAG_CHECK_BAD_MOVE` (don't use bad moves), `AI_FLAG_TRY_TO_FAINT` (faint the player where possible), and `AI_FLAG_CHECK_VIABILITY` (choose the most effective move to use in the current context). Trainers with this flag will still be smarter than they are in vanilla as there have been dramatic improvements made to move selection, but not incredibly so. Trainers with this flag should feel like normal trainers. In general we recommend these three flags be used in all cases, unless you specifically want a trainer who makes obvious mistakes in battle. + +`AI_FLAG_SMART_TRAINER` is expansion's version of a "smart AI". It includes everything in `AI_FLAG_BASIC_TRAINER` along with `AI_FLAG_SMART_SWITCHING` (make smart decisions about when to switch), `AI_FLAG_SMART_MON_CHOICES` (make smart decisions about what mon to send in after a switch / KO), and `AI_FLAG_OMNISCIENT` (awareness of what moves, items, and abilities the player's mons have to better inform decisions). Expansion will keep this updated to represent the most objectively intelligent behaviour our flags are capable of producing. + +Expansion has LOADS of flags, which will be covered in the rest of this guide. If you don't want to engage with detailed trainer AI tuning though, you can just use these two composite flags, and trust that expansion will keep their contents updated to always represent the most standard and the smartest behaviour we can. + ## `AI_FLAG_CHECK_BAD_MOVE` The AI will avoid using moves that are likely to fail in the current situation. This flag helps prevent the AI from making ineffective choices, such as using moves into immunities, into invulnerable states, or when the moves are otherwise hindered by abilities, terrain, or status conditions. From 3cfc0004b6da27b2fc4e16bb258223f81554ce4f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 9 Sep 2024 17:30:39 +0200 Subject: [PATCH 162/544] Removes redundant moveTargetType ai function (#5354) * Removes redundant moveTargetType ai function * Beautify GetBattlerMoveTargetType for better readability --- include/battle_ai_util.h | 1 - src/battle_ai_main.c | 18 +++++++++--------- src/battle_ai_util.c | 10 +--------- src/battle_util.c | 9 +++------ 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 04920cb3a2..3146bb94fd 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -72,7 +72,6 @@ bool32 CanKnockOffItem(u32 battler, u32 item); bool32 IsAbilityOfRating(u32 ability, s8 rating); bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u32 move); -u32 AI_GetBattlerMoveTargetType(u32 battlerId, u32 move); bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove); // stat stage checks diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index f554da437d..b71e6799e0 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -812,7 +812,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) s8 atkPriority = GetMovePriority(battlerAtk, move); u32 moveEffect = gMovesInfo[move].effect; s32 moveType; - u32 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move); + u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); struct AiLogicData *aiData = AI_DATA; u32 effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); @@ -2569,7 +2569,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } else { - if (AI_GetBattlerMoveTargetType(battlerDef, instructedMove) & (MOVE_TARGET_SELECTED + if (GetBattlerMoveTargetType(battlerDef, instructedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_DEPENDS | MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH @@ -2767,7 +2767,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // move data u32 moveType = gMovesInfo[move].type; u32 effect = gMovesInfo[move].effect; - u32 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move); + u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); // ally data u32 battlerAtkPartner = BATTLE_PARTNER(battlerAtk); struct AiLogicData *aiData = AI_DATA; @@ -3098,7 +3098,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (instructedMove != MOVE_NONE && !IS_MOVE_STATUS(instructedMove) - && (AI_GetBattlerMoveTargetType(battlerAtkPartner, instructedMove) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) // Use instruct on multi-target moves + && (GetBattlerMoveTargetType(battlerAtkPartner, instructedMove) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) // Use instruct on multi-target moves { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3743,24 +3743,24 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); break; case MOVE_WIDE_GUARD: - if (predictedMove != MOVE_NONE && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_BOTH)) + if (predictedMove != MOVE_NONE && GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_BOTH)) { ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); } - else if (isDoubleBattle && AI_GetBattlerMoveTargetType(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) & MOVE_TARGET_FOES_AND_ALLY) + else if (isDoubleBattle && GetBattlerMoveTargetType(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) & MOVE_TARGET_FOES_AND_ALLY) { if (aiData->abilities[battlerAtk] != ABILITY_TELEPATHY) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); } break; case MOVE_CRAFTY_SHIELD: - if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove) && !(AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) + if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove) && !(GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); break; case MOVE_MAT_BLOCK: if (gDisableStructs[battlerAtk].isFirstTurn && predictedMove != MOVE_NONE - && !IS_MOVE_STATUS(predictedMove) && !(AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) + && !IS_MOVE_STATUS(predictedMove) && !(GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); break; case MOVE_KINGS_SHIELD: @@ -4140,7 +4140,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_MAGIC_COAT: - if (IS_MOVE_STATUS(predictedMove) && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH)) + if (IS_MOVE_STATUS(predictedMove) && GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_RECYCLE: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 2b17361435..a6eab774cb 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1405,14 +1405,6 @@ u32 AI_GetWeather(struct AiLogicData *aiData) return gBattleWeather; } -u32 AI_GetBattlerMoveTargetType(u32 battlerId, u32 move) -{ - if (gMovesInfo[move].effect == EFFECT_EXPANDING_FORCE && AI_IsTerrainAffected(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN)) - return MOVE_TARGET_BOTH; - else - return gMovesInfo[move].target; -} - bool32 IsAromaVeilProtectedMove(u32 move) { switch (move) @@ -2113,7 +2105,7 @@ bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool if (ignoreStatus && IS_MOVE_STATUS(moves[i])) continue; else if ((!IS_MOVE_STATUS(moves[i]) && gMovesInfo[moves[i]].accuracy == 0) - || AI_GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) + || GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) continue; if (AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] <= accCheck) diff --git a/src/battle_util.c b/src/battle_util.c index 8fde78b4cb..2fc7ab899c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -11423,14 +11423,11 @@ bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags) // Possible return values are defined in battle.h following MOVE_TARGET_SELECTED u32 GetBattlerMoveTargetType(u32 battler, u32 move) { - if (move == MOVE_CURSE - && !IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + if (move == MOVE_CURSE && !IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return MOVE_TARGET_USER; - else if (gMovesInfo[move].effect == EFFECT_EXPANDING_FORCE - && IsBattlerTerrainAffected(battler, STATUS_FIELD_PSYCHIC_TERRAIN)) + if (gMovesInfo[move].effect == EFFECT_EXPANDING_FORCE && IsBattlerTerrainAffected(battler, STATUS_FIELD_PSYCHIC_TERRAIN)) return MOVE_TARGET_BOTH; - else if (gMovesInfo[move].effect == EFFECT_TERA_STARSTORM - && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR) + if (gMovesInfo[move].effect == EFFECT_TERA_STARSTORM && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR) return MOVE_TARGET_BOTH; return gMovesInfo[move].target; From 4c49dfdd1d0d33c72c6254bfa84d07de47291cdf Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Mon, 9 Sep 2024 15:03:24 -0400 Subject: [PATCH 163/544] AI burn score fixes and improvements (#5356) * Burn score fixes * Remove CanTargetFaintAi check --- src/battle_ai_util.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index a6eab774cb..82425a3082 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3744,11 +3744,14 @@ void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) if (AI_CanBurn(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) { - ADJUST_SCORE_PTR(WEAK_EFFECT); // burning is good - if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) + || (!(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_OMNISCIENT) // Not Omniscient but expects physical attacker + && gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack + 10)) { - if (CanTargetFaintAi(battlerDef, battlerAtk)) - ADJUST_SCORE_PTR(DECENT_EFFECT); // burning the target to stay alive is cool + if (gMovesInfo[GetBestDmgMoveFromBattler(battlerDef, battlerAtk)].category == DAMAGE_CATEGORY_PHYSICAL) + ADJUST_SCORE_PTR(DECENT_EFFECT); + else + ADJUST_SCORE_PTR(WEAK_EFFECT); } if (HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_BURN) From 2b20e6cae1b23e8e237125913778aff0da02ab78 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Tue, 10 Sep 2024 02:33:59 -0400 Subject: [PATCH 164/544] reset item flags on new game (#5363) Co-authored-by: ghoulslash --- src/new_game.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/new_game.c b/src/new_game.c index 783c6893c8..4bce5a5b96 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -51,6 +51,7 @@ extern const u8 EventScript_ResetAllMapFlags[]; static void ClearFrontierRecord(void); static void WarpToTruck(void); static void ResetMiniGamesRecords(void); +static void ResetItemFlags(void); EWRAM_DATA bool8 gDifferentSaveFile = FALSE; EWRAM_DATA bool8 gEnableContestDebugging = FALSE; @@ -204,6 +205,7 @@ void NewGameInitData(void) WipeTrainerNameRecords(); ResetTrainerHillResults(); ResetContestLinkResults(); + ResetItemFlags(); } static void ResetMiniGamesRecords(void) @@ -213,3 +215,10 @@ static void ResetMiniGamesRecords(void) ResetPokemonJumpRecords(); CpuFill16(0, &gSaveBlock2Ptr->berryPick, sizeof(struct BerryPickingResults)); } + +static void ResetItemFlags(void) +{ +#if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_FIRST_TIME + memset(&gSaveBlock3Ptr->itemFlags, 0, sizeof(gSaveBlock3Ptr->itemFlags)); +#endif +} From 6f922df7ef7d6d3db502b6fef24c0a2ce0cfc214 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Tue, 10 Sep 2024 06:58:30 -0400 Subject: [PATCH 165/544] Frostbite score fixes (#5362) --- src/battle_ai_util.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 82425a3082..b2e18db740 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3828,11 +3828,14 @@ void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score if (AI_CanGiveFrostbite(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) { - ADJUST_SCORE_PTR(WEAK_EFFECT); // frostbite is good - if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) + || (!(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_OMNISCIENT) // Not Omniscient but expects special attacker + && gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack + 10)) { - if (CanTargetFaintAi(battlerDef, battlerAtk)) - ADJUST_SCORE_PTR(DECENT_EFFECT); // frostbiting the target to stay alive is cool + if (gMovesInfo[GetBestDmgMoveFromBattler(battlerDef, battlerAtk)].category == DAMAGE_CATEGORY_SPECIAL) + ADJUST_SCORE_PTR(DECENT_EFFECT); + else + ADJUST_SCORE_PTR(WEAK_EFFECT); } if (HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_FROSTBITE) From 2477f1d5cab5766e78dca618d9024b6bca6b8cb5 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Tue, 10 Sep 2024 05:44:08 -0700 Subject: [PATCH 166/544] Made BuildColorMaps redundant by using static tables (#5289) * Added config for ColorMaps * Fixed delclartion of static maps * First commit complete * Removed config * Removed config * fixed overworld config per https://github.com/rh-hideout/pokeemerald-expansion/pull/5289\#discussion_r1747583812 * Fixed pointer alignment per https://github.com/rh-hideout/pokeemerald-expansion/pull/5289\#pullrequestreview-2286973040 * Update overworld.h Removed new lines per https://github.com/rh-hideout/pokeemerald-expansion/pull/5289/files#r1749325673 --- include/field_weather.h | 2 - src/field_weather.c | 145 ++++++++++++++++------------------------ 2 files changed, 58 insertions(+), 89 deletions(-) diff --git a/include/field_weather.h b/include/field_weather.h index 9805dc491d..ba45d161b7 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -41,8 +41,6 @@ struct Weather struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES]; } s2; } sprites; - u8 darkenedContrastColorMaps[NUM_WEATHER_COLOR_MAPS][32]; - u8 contrastColorMaps[NUM_WEATHER_COLOR_MAPS][32]; s8 colorMapIndex; s8 targetColorMapIndex; u8 colorMapStepDelay; diff --git a/src/field_weather.c b/src/field_weather.c index 3c9f642faf..7d3c4caf4f 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -5,6 +5,7 @@ #include "util.h" #include "event_object_movement.h" #include "field_weather.h" +#include "fieldmap.h" #include "main.h" #include "menu.h" #include "palette.h" @@ -44,7 +45,6 @@ struct WeatherCallbacks // This file's functions. static bool8 LightenSpritePaletteInFog(u8); -static void BuildColorMaps(void); static void UpdateWeatherColorMap(void); static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex); static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex, u8 blendCoeff, u32 blendColor); @@ -66,6 +66,52 @@ EWRAM_DATA static u8 ALIGNED(2) sFieldEffectPaletteColorMapTypes[32] = {0}; static const u8 *sPaletteColorMapTypes; +static const u8 sDarkenedContrastColorMaps[NUM_WEATHER_COLOR_MAPS][32] = +{ + {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, + {0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, 14, 15, 16, 17, 18, 19, 20, 21, 21, 22, 23, 24, 25, 26, 27}, + {0, 0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 13, 14, 15, 16, 17, 17, 18, 19, 20, 21, 21, 22, 23, 24, 25}, + {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 11, 11, 12, 13, 14, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, 24, 24, 25}, + {1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 12, 13, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 20, 21, 22, 23, 23, 24, 25, 25}, + {1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 13, 14, 15, 15, 16, 17, 17, 18, 19, 19, 20, 20, 21, 22, 22, 23, 24, 24, 25, 26}, + {1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 15, 15, 16, 16, 17, 18, 18, 19, 19, 20, 21, 21, 22, 22, 23, 24, 24, 25, 26, 26}, + {1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 16, 16, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 23, 23, 24, 24, 25, 25, 26, 27}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 19, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 27, 27}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 26, 27, 27, 28}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 27, 27, 27, 28, 28}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 23, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 25, 25, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31} +}; + +static const u8 sContrastColorMaps[NUM_WEATHER_COLOR_MAPS][32] = +{ + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 14, 15, 16, 17, 17, 18, 19, 20, 21, 22, 23, 24, 24, 25, 26, 27, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 18, 19, 20, 21, 22, 22, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 25, 26, 27, 28, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17, 18, 19, 20, 20, 21, 22, 22, 23, 24, 24, 25, 26, 26, 27, 28, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 19, 19, 20, 21, 21, 22, 22, 23, 24, 24, 25, 26, 26, 27, 27, 28, 29, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20, 20, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 27, 27, 27, 28, 28, 29, 29, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 27, 27, 27, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31} +}; + // The drought weather effect uses a precalculated color lookup table. Presumably this // is because the underlying color shift calculation is slow. static const u16 sDroughtWeatherColors[][0x1000] = { @@ -158,7 +204,9 @@ void StartWeather(void) { u8 index = AllocSpritePalette(PALTAG_WEATHER); CpuCopy32(gFogPalette, &gPlttBufferUnfaded[OBJ_PLTT_ID(index)], PLTT_SIZE_4BPP); - BuildColorMaps(); + + sPaletteColorMapTypes = sBasePaletteColorMapTypes; + gWeatherPtr->contrastColorMapSpritePalIndex = index; gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(PALTAG_WEATHER_2); gWeatherPtr->rainSpriteCount = 0; @@ -265,83 +313,6 @@ static u8 None_Finish(void) return 0; } -// Builds two tables that contain color maps, used for directly transforming -// palette colors in weather effects. The colors maps are a spectrum of -// brightness + contrast mappings. By transitioning between the maps, weather -// effects like lightning are created. -// It's unclear why the two tables aren't declared as const arrays, since -// this function always builds the same two tables. -static void BuildColorMaps(void) -{ - u16 i; - u8 (*colorMaps)[32]; - u16 colorVal; - u16 curBrightness; - u16 brightnessDelta; - u16 colorMapIndex; - u16 baseBrightness; - s16 diff; - - sPaletteColorMapTypes = sBasePaletteColorMapTypes; - for (i = 0; i < 2; i++) - { - if (i == 0) - colorMaps = gWeatherPtr->darkenedContrastColorMaps; - else - colorMaps = gWeatherPtr->contrastColorMaps; - - for (colorVal = 0; colorVal < 32; colorVal++) - { - curBrightness = colorVal << 8; - if (i == 0) - brightnessDelta = (colorVal << 8) / 16; - else - brightnessDelta = 0; - - // First three color mappings are simple brightness modifiers which are - // progressively darker, according to brightnessDelta. - for (colorMapIndex = 0; colorMapIndex < 3; colorMapIndex++) - { - curBrightness -= brightnessDelta; - colorMaps[colorMapIndex][colorVal] = curBrightness >> 8; - } - - baseBrightness = curBrightness; - brightnessDelta = (0x1f00 - curBrightness) / (NUM_WEATHER_COLOR_MAPS - 3); - if (colorVal < 12) - { - // For shadows (color values < 12), the remaining color mappings are - // brightness modifiers, which are increased at a significantly lower rate - // than the midtones and highlights (color values >= 12). This creates a - // high contrast effect, used in the thunderstorm weather. - for (; colorMapIndex < NUM_WEATHER_COLOR_MAPS; colorMapIndex++) - { - curBrightness += brightnessDelta; - diff = curBrightness - baseBrightness; - if (diff > 0) - curBrightness -= diff / 2; - colorMaps[colorMapIndex][colorVal] = curBrightness >> 8; - if (colorMaps[colorMapIndex][colorVal] > 31) - colorMaps[colorMapIndex][colorVal] = 31; - } - } - else - { - // For midtones and highlights (color values >= 12), the remaining - // color mappings are simple brightness modifiers which are - // progressively brighter, hitting exactly 31 at the last mapping. - for (; colorMapIndex < NUM_WEATHER_COLOR_MAPS; colorMapIndex++) - { - curBrightness += brightnessDelta; - colorMaps[colorMapIndex][colorVal] = curBrightness >> 8; - if (colorMaps[colorMapIndex][colorVal] > 31) - colorMaps[colorMapIndex][colorVal] = 31; - } - } - } - } -} - // When the weather is changing, it gradually updates the palettes // towards the desired color map. static void UpdateWeatherColorMap(void) @@ -463,8 +434,8 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) { u16 curPalIndex; u16 palOffset; - u8 *colorMap; - u16 i; + const u8 *colorMap; + u32 i; if (colorMapIndex > 0) { @@ -487,9 +458,9 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) u8 r, g, b; if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_CONTRAST || curPalIndex - 16 == gWeatherPtr->contrastColorMapSpritePalIndex) - colorMap = gWeatherPtr->contrastColorMaps[colorMapIndex]; + colorMap = sContrastColorMaps[colorMapIndex]; else - colorMap = gWeatherPtr->darkenedContrastColorMaps[colorMapIndex]; + colorMap = sDarkenedContrastColorMaps[colorMapIndex]; for (i = 0; i < 16; i++) { @@ -544,7 +515,7 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap { u16 palOffset; u16 curPalIndex; - u16 i; + u32 i; struct RGBColor color = *(struct RGBColor *)&blendColor; u8 rBlend = color.r; u8 gBlend = color.g; @@ -565,12 +536,12 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap } else { - u8 *colorMap; + const u8 *colorMap; if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_DARK_CONTRAST) - colorMap = gWeatherPtr->darkenedContrastColorMaps[colorMapIndex]; + colorMap = sDarkenedContrastColorMaps[colorMapIndex]; else - colorMap = gWeatherPtr->contrastColorMaps[colorMapIndex]; + colorMap = sContrastColorMaps[colorMapIndex]; for (i = 0; i < 16; i++) { From b478881fc64f6b8c8c5336e92e71f8b3126f319c Mon Sep 17 00:00:00 2001 From: Rachel Date: Tue, 10 Sep 2024 12:27:49 -0700 Subject: [PATCH 167/544] Add in-battle shadows underneath all enemy battlers (#5178) * Add data to SpeciesInfo entries for in-battle shadows * Implement sized shadows in the sprite visualizer * Implement sized shadows in game code * Show shadows for the lead battler for opponents during their battle anim * Feedback on shadows, round 1 * Revert removal of Goomy and Sliggoo shadows * Fixed GEN_3 setting * Code cleanup + remove pre-processor branches * Fix bugs with gen-3 configuration branch * Style corrections, final shadow coordinate adjustments * Adjustments to Garbodor and Araquanid --- .../enemy_mon_shadows_sized.png | Bin 0 -> 255 bytes include/battle.h | 5 +- include/battle_interface.h | 3 + include/config/battle.h | 3 + include/constants/event_objects.h | 10 +- include/graphics.h | 1 + include/pokemon.h | 6 + include/pokemon_sprite_visualizer.h | 20 +- src/battle_anim_effects_1.c | 27 +- src/battle_anim_smokescreen.c | 36 -- src/battle_controller_opponent.c | 37 +- src/battle_controller_recorded_opponent.c | 36 +- src/battle_gfx_sfx_util.c | 207 +++++++++-- src/battle_script_commands.c | 1 - src/data/pokemon/species_info.h | 8 + .../pokemon/species_info/gen_1_families.h | 273 ++++++++++++++ .../pokemon/species_info/gen_2_families.h | 114 +++++- .../pokemon/species_info/gen_3_families.h | 173 ++++++++- .../pokemon/species_info/gen_4_families.h | 98 +++++ .../pokemon/species_info/gen_5_families.h | 188 ++++++++++ .../pokemon/species_info/gen_6_families.h | 91 +++++ .../pokemon/species_info/gen_7_families.h | 113 ++++++ .../pokemon/species_info/gen_8_families.h | 123 +++++++ .../pokemon/species_info/gen_9_families.h | 127 ++++++- src/graphics.c | 1 + src/pokemon_sprite_visualizer.c | 335 ++++++++++++++++-- 26 files changed, 1907 insertions(+), 129 deletions(-) create mode 100644 graphics/battle_interface/enemy_mon_shadows_sized.png diff --git a/graphics/battle_interface/enemy_mon_shadows_sized.png b/graphics/battle_interface/enemy_mon_shadows_sized.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0e96885292fdf4a81edac08fed71a246b71312 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QU(D&A+A8$(b4h$|9khYZaKQQ zxOz%+P*#$HC4*&<Wf|Bf40dc#m(vy&Yz&7&&l&Zlustm%5UYe8PhL)e9U$7 k_4G!@J%>7#`}Tii<4F?#dTJ@VHPB`TPgg&ebxsLQ04$|#hyVZp literal 0 HcmV?d00001 diff --git a/include/battle.h b/include/battle.h index d3a7995ab8..66f8531ae7 100644 --- a/include/battle.h +++ b/include/battle.h @@ -979,7 +979,10 @@ struct BattleHealthboxInfo u8 animationState; u8 partyStatusDelayTimer; u8 matrixNum; - u8 shadowSpriteId; + + u8 shadowSpriteIdPrimary; + u8 shadowSpriteIdSecondary; + u8 soundTimer; u8 introEndDelay; u8 field_A; diff --git a/include/battle_interface.h b/include/battle_interface.h index 6635298dc1..3280826ff7 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -47,6 +47,9 @@ enum #define TAG_HEALTHBAR_PAL TAG_HEALTHBAR_PLAYER1_TILE #define TAG_HEALTHBOX_PAL TAG_HEALTHBOX_PLAYER1_TILE +#define TAG_SHADOW_PAL TAG_HEALTHBOX_PLAYER1_TILE + +#define TAG_SHADOW_TILE 0xD759 #define TAG_GIMMICK_TRIGGER_TILE 0xD777 #define TAG_MEGA_INDICATOR_TILE 0xD778 diff --git a/include/config/battle.h b/include/config/battle.h index 99476b4f83..a60d9cdd9b 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -279,4 +279,7 @@ #define SHOW_TYPES_CAUGHT 2 #define B_SHOW_TYPES SHOW_TYPES_NEVER // When defined as SHOW_TYPES_ALWAYS, after selecting "Fight" in battle, the types of all Pokemon are revealed. Whe defined as SHOW_TYPES_OWN, types are only revealed if the player owns the mon in question. +// Pokémon battle sprite settings +#define B_ENEMY_MON_SHADOW_STYLE GEN_LATEST // In Gen4+, all enemy Pokemon will have a shadow drawn beneath them. + #endif // GUARD_CONFIG_BATTLE_H diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index fccc206638..07853a69a8 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -281,10 +281,12 @@ #define OW_SPECIES(x) (((x)->graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE) #define OW_FORM(x) ((x)->graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS) -#define SHADOW_SIZE_S 0 -#define SHADOW_SIZE_M 1 -#define SHADOW_SIZE_L 2 -#define SHADOW_SIZE_NONE 3 // Originally SHADOW_SIZE_XL, which went unused due to shadowSize in ObjectEventGraphicsInfo being only 2 bits. +#define SHADOW_SIZE_S 0 +#define SHADOW_SIZE_M 1 +#define SHADOW_SIZE_L 2 +#define SHADOW_SIZE_NONE 3 // Originally SHADOW_SIZE_XL, which went unused due to shadowSize in ObjectEventGraphicsInfo being only 2 bits. + +#define SHADOW_SIZE_XL_BATTLE_ONLY SHADOW_SIZE_NONE // Battle-only definition for XL shadow size. #define F_INANIMATE (1 << 6) #define F_DISABLE_REFLECTION_PALETTE_LOAD (1 << 7) diff --git a/include/graphics.h b/include/graphics.h index 950c129c7d..0ea07557d5 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3104,6 +3104,7 @@ extern const u32 gBattleAnimBgPalette_Surf[]; extern const u32 gBattleAnimBackgroundImageMuddyWater_Pal[]; extern const u32 gEnemyMonShadow_Gfx[]; +extern const u32 gEnemyMonShadowsSized_Gfx[]; extern const u32 gBattleAnimFogTilemap[]; diff --git a/include/pokemon.h b/include/pokemon.h index dcdbf43dec..4dbd86a391 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -442,6 +442,12 @@ struct SpeciesInfo /*0xC4*/ u32 tmIlliterate:1; // This species will be unable to learn the universal moves. u32 isFrontierBanned:1; // This species is not allowed to participate in Battle Frontier facilities. u32 padding4:11; + // Shadow settings + s8 enemyShadowXOffset; // This determines the X-offset for an enemy Pokémon's shadow during battle; negative values point left, positive values point right. + s8 enemyShadowYOffset; // This determines the Y-offset for an enemy Pokémon's shadow during battle; negative values point up, positive values point down. + u16 enemyShadowSize:3; // This determines the size of the shadow sprite used for an enemy Pokémon's front sprite during battle. + u16 suppressEnemyShadow:1; // If set to true, then a shadow will not be drawn beneath an enemy Pokémon's front sprite during battle. + u16 padding5:12; // Move Data /* 0x80 */ const struct LevelUpMove *levelUpLearnset; /* 0x84 */ const u16 *teachableLearnset; diff --git a/include/pokemon_sprite_visualizer.h b/include/pokemon_sprite_visualizer.h index 946c2f37f6..fdd53d2ce8 100644 --- a/include/pokemon_sprite_visualizer.h +++ b/include/pokemon_sprite_visualizer.h @@ -1,6 +1,7 @@ #ifndef GUARD_POKEMON_SPRITE_VISUALIZER_H #define GUARD_POKEMON_SPRITE_VISUALIZER_H +#include "constants/global.h" #include "constants/pokemon_sprite_visualizer.h" //Structs @@ -43,6 +44,17 @@ struct PokemonSpriteOffsets s8 offset_front_elevation; }; +struct PokemonShadowSettings +{ + s8 definedX; + s8 definedY; + u8 definedSize; + + s8 overrideX; + s8 overrideY; + u8 overrideSize; +}; + struct PokemonSpriteVisualizer { u16 currentmonId; @@ -52,14 +64,20 @@ struct PokemonSpriteVisualizer u8 backspriteId; u8 iconspriteId; u8 followerspriteId; - u8 frontShadowSpriteId; + bool8 isShiny; bool8 isFemale; + + u8 frontShadowSpriteIdPrimary; + u8 frontShadowSpriteIdSecondary; + struct PokemonShadowSettings shadowSettings; + struct PokemonSpriteVisualizerModifyArrows modifyArrows; struct PokemonSpriteVisualizerOptionArrows optionArrows; struct PokemonSpriteVisualizerYPosModifiyArrows yPosModifyArrows; struct PokemonSpriteConstValues constSpriteValues; struct PokemonSpriteOffsets offsetsSpriteValues; + u8 animIdBack; u8 animIdFront; u8 battleBgType; diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index a44bf85090..69b9d0760e 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -6616,12 +6616,29 @@ static void ReloadBattlerSprites(u32 battler, struct Pokemon *party) UpdateIndicatorVisibilityAndType(gHealthboxSpriteIds[battler], TRUE); // Try to recreate shadow sprite - if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId < MAX_SPRITES) + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) { - DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId]); - gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId = MAX_SPRITES; - CreateEnemyShadowSprite(battler); - SetBattlerShadowSpriteCallback(battler, GetMonData(mon, MON_DATA_SPECIES)); + // Both of these *should* be true, but use an OR just to be certain + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES + || gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary < MAX_SPRITES) + { + DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]); + DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary]); + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = MAX_SPRITES; + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary = MAX_SPRITES; + CreateEnemyShadowSprite(battler); + SetBattlerShadowSpriteCallback(battler, GetMonData(mon, MON_DATA_SPECIES)); + } + } + else + { + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES) + { + DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]); + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = MAX_SPRITES; + CreateEnemyShadowSprite(battler); + SetBattlerShadowSpriteCallback(battler, GetMonData(mon, MON_DATA_SPECIES)); + } } } diff --git a/src/battle_anim_smokescreen.c b/src/battle_anim_smokescreen.c index 3b05ef6280..12fe97b993 100644 --- a/src/battle_anim_smokescreen.c +++ b/src/battle_anim_smokescreen.c @@ -9,9 +9,6 @@ #define TAG_SMOKESCREEN 55019 -#define PALTAG_SHADOW 55039 -#define GFXTAG_SHADOW 55129 - static void SpriteCB_SmokescreenImpactMain(struct Sprite *); static void SpriteCB_SmokescreenImpact(struct Sprite *); @@ -95,39 +92,6 @@ static const struct SpriteTemplate sSmokescreenImpactSpriteTemplate = .callback = SpriteCB_SmokescreenImpact }; -const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow = -{ - .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = GFXTAG_SHADOW -}; - -static const struct OamData sOamData_EnemyShadow = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = FALSE, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 3, - .paletteNum = 0, - .affineParam = 0 -}; - -const struct SpriteTemplate gSpriteTemplate_EnemyShadow = -{ - .tileTag = GFXTAG_SHADOW, - .paletteTag = PALTAG_SHADOW, - .oam = &sOamData_EnemyShadow, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_SetInvisible -}; - #define sActiveSprites data[0] #define sPersist data[1] diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 275aa623b6..57ebccf7fa 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -211,6 +211,18 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) } } +static void TrySetBattlerShadowSpriteCallback(u32 battler) +{ + if (gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback == SpriteCallbackDummy) + { + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3 + || gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback == SpriteCallbackDummy) + { + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); + } + } +} + static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; @@ -269,33 +281,36 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) if (!twoMons || (twoMons && gBattleTypeFlags & BATTLE_TYPE_MULTI && !BATTLE_TWO_VS_ONE_OPPONENT)) { - if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy) { - battlerAnimsDone = TRUE; + TrySetBattlerShadowSpriteCallback(battler); + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + { + battlerAnimsDone = TRUE; + } } } else { if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy - && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { - battlerAnimsDone = TRUE; + TrySetBattlerShadowSpriteCallback(battler); + TrySetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler)); + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + { + battlerAnimsDone = TRUE; + } } } if (bgmRestored && battlerAnimsDone) { if (twoMons && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT)) - { DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); - SetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], MON_DATA_SPECIES)); - } DestroySprite(&gSprites[gBattleControllerData[battler]]); - SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = FALSE; diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index da977fab89..bbeae7a9c0 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -200,6 +200,19 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) } } +static void TrySetBattlerShadowSpriteCallback(u32 battler) +{ + + if (gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback == SpriteCallbackDummy) + { + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3 + || gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback == SpriteCallbackDummy) + { + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); + } + } +} + static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; @@ -253,33 +266,34 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) if (!IsDoubleBattle()) { - if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy) { - battlerAnimsDone = TRUE; + TrySetBattlerShadowSpriteCallback(battler); + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + battlerAnimsDone = TRUE; } } else { if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy - && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { - battlerAnimsDone = TRUE; + TrySetBattlerShadowSpriteCallback(battler); + TrySetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler)); + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + { + battlerAnimsDone = TRUE; + } } } if (bgmRestored && battlerAnimsDone) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); - SetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], MON_DATA_SPECIES)); - } DestroySprite(&gSprites[gBattleControllerData[battler]]); - SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index aa16003694..ec5c1cfb33 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -27,10 +27,6 @@ #include "constants/battle_palace.h" #include "constants/battle_move_effects.h" - -extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; -extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; - // this file's functions static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move); static u16 GetBattlePalaceTarget(u32 battler); @@ -82,6 +78,46 @@ const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] = {gBattleInterface_BallDisplayPal, TAG_HEALTHBAR_PAL} }; +const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow = +{ + .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = TAG_SHADOW_TILE +}; + +const struct CompressedSpriteSheet gSpriteSheet_EnemyShadowsSized = +{ + .data = gEnemyMonShadowsSized_Gfx, + .size = TILE_SIZE_4BPP * 8 * 4, // 8 tiles per sprite, 4 sprites total + .tag = TAG_SHADOW_TILE, +}; + +static const struct OamData sOamData_EnemyShadow = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_EnemyShadow = +{ + .tileTag = TAG_SHADOW_TILE, + .paletteTag = TAG_SHADOW_PAL, + .oam = &sOamData_EnemyShadow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + // code void AllocateBattleSpritesData(void) { @@ -1094,16 +1130,58 @@ void SetBattlerSpriteAffineMode(u8 affineMode) } } -#define tBattlerId data[0] +#define tBattlerId data[0] +#define tSpriteSide data[1] + +#define SPRITE_SIDE_LEFT 0 +#define SPRITE_SIDE_RIGHT 1 void CreateEnemyShadowSprite(u32 battler) { - gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, - GetBattlerSpriteCoord(battler, BATTLER_COORD_X), - GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + 29, - 0xC8); - if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId < MAX_SPRITES) - gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].data[0] = battler; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + u16 species = SanitizeSpeciesId(gBattleMons[battler].species); + u8 size = gSpeciesInfo[species].enemyShadowSize; + + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battler, BATTLER_COORD_X), + GetBattlerSpriteCoord(battler, BATTLER_COORD_Y), + 0xC8); + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]; + sprite->tBattlerId = battler; + sprite->tSpriteSide = SPRITE_SIDE_LEFT; + sprite->oam.tileNum += 8 * size; + sprite->invisible = TRUE; + } + + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battler, BATTLER_COORD_X), + GetBattlerSpriteCoord(battler, BATTLER_COORD_Y), + 0xC8); + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary < MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary]; + sprite->tBattlerId = battler; + sprite->tSpriteSide = SPRITE_SIDE_RIGHT; + sprite->oam.tileNum += (8 * size) + 4; + sprite->invisible = TRUE; + } + } + else + { + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battler, BATTLER_COORD_X), + GetBattlerSpriteCoord(battler, BATTLER_COORD_Y), + 0xC8); + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]; + sprite->tBattlerId = battler; + sprite->invisible = TRUE; + } + } } void LoadAndCreateEnemyShadowSprites(void) @@ -1111,12 +1189,26 @@ void LoadAndCreateEnemyShadowSprites(void) u8 battler; u32 i; - LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); - - // initialize shadow sprite ids - for (i = 0; i < gBattlersCount; i++) + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) { - gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteId = MAX_SPRITES; + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadowsSized); + + // initialize shadow sprite ids + for (i = 0; i < gBattlersCount; i++) + { + gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteIdPrimary = MAX_SPRITES; + gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteIdSecondary = MAX_SPRITES; + } + } + else + { + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); + + // initialize shadow sprite ids + for (i = 0; i < gBattlersCount; i++) + { + gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteIdPrimary = MAX_SPRITES; + } } battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); @@ -1141,16 +1233,36 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) shadowSprite->callback = SpriteCB_SetInvisible; return; } + + s8 xOffset = 0, yOffset = 0; if (gAnimScriptActive || battlerSprite->invisible) invisible = TRUE; - else if (transformSpecies != SPECIES_NONE && gSpeciesInfo[transformSpecies].enemyMonElevation == 0) - invisible = TRUE; + else if (transformSpecies != SPECIES_NONE) + { + xOffset = gSpeciesInfo[transformSpecies].enemyShadowXOffset; + yOffset = gSpeciesInfo[transformSpecies].enemyShadowYOffset; + + invisible = B_ENEMY_MON_SHADOW_STYLE >= GEN_4 + ? gSpeciesInfo[transformSpecies].suppressEnemyShadow + : gSpeciesInfo[transformSpecies].enemyMonElevation == 0; + } + else if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + u16 species = SanitizeSpeciesId(gBattleMons[battler].species); + xOffset = gSpeciesInfo[species].enemyShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16); + yOffset = gSpeciesInfo[species].enemyShadowYOffset + 16; + } + else + { + yOffset = 29; + } if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) invisible = TRUE; - shadowSprite->x = battlerSprite->x; + shadowSprite->x = battlerSprite->x + xOffset; shadowSprite->x2 = battlerSprite->x2; + shadowSprite->y = battlerSprite->y + yOffset; shadowSprite->invisible = invisible; } @@ -1163,24 +1275,59 @@ void SpriteCB_SetInvisible(struct Sprite *sprite) void SetBattlerShadowSpriteCallback(u8 battler, u16 species) { - // The player's shadow is never seen. - if (GetBattlerSide(battler) == B_SIDE_PLAYER || gBattleScripting.monCaught) - return; - if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId >= MAX_SPRITES) - return; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + if (GetBattlerSide(battler) == B_SIDE_PLAYER || gBattleScripting.monCaught) + { + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; + return; + } - if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE) - species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies; + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary >= MAX_SPRITES + || gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary >= MAX_SPRITES) + return; - if (gSpeciesInfo[SanitizeSpeciesId(species)].enemyMonElevation != 0) - gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].callback = SpriteCB_EnemyShadow; + if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE) + species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies; + + if (gSpeciesInfo[SanitizeSpeciesId(species)].suppressEnemyShadow == FALSE) + { + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_EnemyShadow; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback = SpriteCB_EnemyShadow; + } + else + { + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; + } + } else - gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].callback = SpriteCB_SetInvisible; + { + if (GetBattlerSide(battler) == B_SIDE_PLAYER || gBattleScripting.monCaught) + { + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + return; + } + + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary >= MAX_SPRITES) + return; + + if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE) + species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies; + + if (gSpeciesInfo[SanitizeSpeciesId(species)].enemyMonElevation != 0) + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_EnemyShadow; + else + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + } } void HideBattlerShadowSprite(u8 battler) { - gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; } // Color the background tiles surrounding the action selection and move windows diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8f917d5cbb..afa9cc7dec 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10115,7 +10115,6 @@ static void Cmd_various(void) { // Save sprite IDs, because trainer slide in will overwrite gBattlerSpriteIds variable. gBattleScripting.savedDmg = (gBattlerSpriteIds[battler] & 0xFF) | (gBattlerSpriteIds[BATTLE_PARTNER(battler)] << 8); - HideBattlerShadowSprite(battler); } else if (cmd->case_ == 1) { diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 939f1d4635..b0945ed43f 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -11,6 +11,14 @@ #define FOOTPRINT(sprite) #endif +#if B_ENEMY_MON_SHADOW_STYLE >= GEN_4 +#define SHADOW(x, y, size) .enemyShadowXOffset = x, .enemyShadowYOffset = y, .enemyShadowSize = size, +#define NO_SHADOW .suppressEnemyShadow = TRUE, +#else +#define SHADOW(x, y, size) .enemyShadowXOffset = 0, .enemyShadowYOffset = 0, .enemyShadowSize = 0, +#define NO_SHADOW .suppressEnemyShadow = FALSE, +#endif + #define SIZE_32x32 1 #define SIZE_64x64 0 diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index a149174cd1..bb5ba4a0d4 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bulbasaur, .iconSprite = gMonIcon_Bulbasaur, .iconPalIndex = 4, + SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Bulbasaur) OVERWORLD( sPicTable_Bulbasaur, @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ivysaur, .iconSprite = gMonIcon_Ivysaur, .iconPalIndex = 4, + SHADOW(-1, 3, SHADOW_SIZE_L) FOOTPRINT(Ivysaur) OVERWORLD( sPicTable_Ivysaur, @@ -186,6 +188,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Venusaur, .iconSprite = gMonIcon_Venusaur, .iconPalIndex = 4, + SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) OVERWORLD( sPicTable_Venusaur, @@ -249,6 +252,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VenusaurMega, .iconSprite = gMonIcon_VenusaurMega, .iconPalIndex = 4, + SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) .isMegaEvolution = TRUE, .levelUpLearnset = sVenusaurLevelUpLearnset, @@ -307,6 +311,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VenusaurGigantamax, .iconSprite = gMonIcon_VenusaurGigantamax, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) .isGigantamax = TRUE, .levelUpLearnset = sVenusaurLevelUpLearnset, @@ -365,6 +370,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charmander, .iconSprite = gMonIcon_Charmander, .iconPalIndex = 0, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Charmander) OVERWORLD( sPicTable_Charmander, @@ -428,6 +434,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charmeleon, .iconSprite = gMonIcon_Charmeleon, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Charmeleon) OVERWORLD( sPicTable_Charmeleon, @@ -495,6 +502,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charizard, .iconSprite = gMonIcon_Charizard, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) OVERWORLD( sPicTable_Charizard, @@ -557,6 +565,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardMegaX, .iconSprite = gMonIcon_CharizardMegaX, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) .isMegaEvolution = TRUE, .levelUpLearnset = sCharizardLevelUpLearnset, @@ -612,6 +621,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardMegaY, .iconSprite = gMonIcon_CharizardMegaY, .iconPalIndex = 0, + SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Charizard) .isMegaEvolution = TRUE, .levelUpLearnset = sCharizardLevelUpLearnset, @@ -669,6 +679,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardGigantamax, .iconSprite = gMonIcon_CharizardGigantamax, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) .isGigantamax = TRUE, .levelUpLearnset = sCharizardLevelUpLearnset, @@ -727,6 +738,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Squirtle, .iconSprite = gMonIcon_Squirtle, .iconPalIndex = 0, + SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Squirtle) OVERWORLD( sPicTable_Squirtle, @@ -790,6 +802,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Wartortle, .iconSprite = gMonIcon_Wartortle, .iconPalIndex = 2, + SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Wartortle) OVERWORLD( sPicTable_Wartortle, @@ -858,6 +871,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Blastoise, .iconSprite = gMonIcon_Blastoise, .iconPalIndex = 2, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Blastoise) OVERWORLD( sPicTable_Blastoise, @@ -921,6 +935,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BlastoiseMega, .iconSprite = gMonIcon_BlastoiseMega, .iconPalIndex = 2, + SHADOW(4, 11, SHADOW_SIZE_L) FOOTPRINT(Blastoise) .isMegaEvolution = TRUE, .levelUpLearnset = sBlastoiseLevelUpLearnset, @@ -978,6 +993,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BlastoiseGigantamax, .iconSprite = gMonIcon_BlastoiseGigantamax, .iconPalIndex = 0, + SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Blastoise) .isGigantamax = TRUE, .levelUpLearnset = sBlastoiseLevelUpLearnset, @@ -1036,6 +1052,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Caterpie, .iconSprite = gMonIcon_Caterpie, .iconPalIndex = 1, + SHADOW(4, 1, SHADOW_SIZE_S) FOOTPRINT(Caterpie) OVERWORLD( sPicTable_Caterpie, @@ -1098,6 +1115,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Metapod, .iconSprite = gMonIcon_Metapod, .iconPalIndex = 1, + SHADOW(3, 0, SHADOW_SIZE_S) FOOTPRINT(Metapod) OVERWORLD( sPicTable_Metapod, @@ -1177,6 +1195,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Butterfree, .iconSprite = gMonIcon_Butterfree, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Butterfree) OVERWORLD( sPicTable_Butterfree, @@ -1243,6 +1262,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ButterfreeGigantamax, .iconSprite = gMonIcon_ButterfreeGigantamax, .iconPalIndex = 0, + SHADOW(-4, 15, SHADOW_SIZE_S) FOOTPRINT(Butterfree) .isGigantamax = TRUE, .levelUpLearnset = sButterfreeLevelUpLearnset, @@ -1302,6 +1322,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weedle, .iconSprite = gMonIcon_Weedle, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Weedle) OVERWORLD( sPicTable_Weedle, @@ -1365,6 +1386,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kakuna, .iconSprite = gMonIcon_Kakuna, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Kakuna) OVERWORLD( sPicTable_Kakuna, @@ -1440,6 +1462,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Beedrill, .iconSprite = gMonIcon_Beedrill, .iconPalIndex = 2, + SHADOW(4, 15, SHADOW_SIZE_M) FOOTPRINT(Beedrill) OVERWORLD( sPicTable_Beedrill, @@ -1506,6 +1529,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BeedrillMega, .iconSprite = gMonIcon_BeedrillMega, .iconPalIndex = 2, + SHADOW(1, 14, SHADOW_SIZE_S) FOOTPRINT(Beedrill) .isMegaEvolution = TRUE, .levelUpLearnset = sBeedrillLevelUpLearnset, @@ -1568,6 +1592,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgey, .iconSprite = gMonIcon_Pidgey, .iconPalIndex = 0, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Pidgey) OVERWORLD( sPicTable_Pidgey, @@ -1635,6 +1660,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgeotto, .iconSprite = gMonIcon_Pidgeotto, .iconPalIndex = 0, + SHADOW(-4, 6, SHADOW_SIZE_M) FOOTPRINT(Pidgeotto) OVERWORLD( sPicTable_Pidgeotto, @@ -1711,6 +1737,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgeot, .iconSprite = gMonIcon_Pidgeot, .iconPalIndex = 0, + SHADOW(-7, 14, SHADOW_SIZE_M) FOOTPRINT(Pidgeot) OVERWORLD( sPicTable_Pidgeot, @@ -1774,6 +1801,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PidgeotMega, .iconSprite = gMonIcon_PidgeotMega, .iconPalIndex = 0, + SHADOW(-7, 19, SHADOW_SIZE_M) FOOTPRINT(Pidgeot) .isMegaEvolution = TRUE, .levelUpLearnset = sPidgeotLevelUpLearnset, @@ -1836,6 +1864,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rattata, .iconSprite = gMonIcon_Rattata, .iconPalIndex = 2, + SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( sPicTable_Rattata, @@ -1903,6 +1932,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Raticate, .iconSprite = gMonIcon_Raticate, .iconPalIndex = 2, + SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( sPicTable_Raticate, @@ -1966,6 +1996,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RattataAlolan, .iconSprite = gMonIcon_RattataAlolan, .iconPalIndex = 2, + SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( sPicTable_RattataAlolan, @@ -2028,6 +2059,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaticateAlolan, .iconSprite = gMonIcon_RaticateAlolan, .iconPalIndex = 2, + SHADOW(-4, 3, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( sPicTable_RaticateAlolan, @@ -2087,6 +2119,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaticateAlolan, .iconSprite = gMonIcon_RaticateAlolan, .iconPalIndex = 2, + SHADOW(-4, 3, SHADOW_SIZE_L) FOOTPRINT(Raticate) .isTotem = TRUE, .isAlolanForm = TRUE, @@ -2147,6 +2180,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Spearow, .iconSprite = gMonIcon_Spearow, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Spearow) OVERWORLD( sPicTable_Spearow, @@ -2212,6 +2246,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Fearow, .iconSprite = gMonIcon_Fearow, .iconPalIndex = 0, + SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Fearow) OVERWORLD( sPicTable_Fearow, @@ -2275,6 +2310,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ekans, .iconSprite = gMonIcon_Ekans, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Ekans) OVERWORLD( sPicTable_Ekans, @@ -2343,6 +2379,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Arbok, .iconSprite = gMonIcon_Arbok, .iconPalIndex = 2, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Arbok) OVERWORLD( sPicTable_Arbok, @@ -2403,6 +2440,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pichu, .iconSprite = gMonIcon_Pichu, .iconPalIndex = 1, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Pichu) OVERWORLD( sPicTable_Pichu, @@ -2463,6 +2501,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PichuSpikyEared, .iconSprite = gMonIcon_PichuSpikyEared, .iconPalIndex = 1, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Pichu) OVERWORLD( sPicTable_PichuSpikyEared, @@ -2540,6 +2579,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconSpriteFemale = gMonIcon_PikachuF, .iconPalIndexFemale = 2, #endif + SHADOW(-3, 5, SHADOW_SIZE_M) OVERWORLD( sPicTable_Pikachu, SIZE_32x32, @@ -2602,6 +2642,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuCosplay, .iconSprite = gMonIcon_PikachuCosplay, .iconPalIndex = 2, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2652,6 +2693,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuRockStar, .iconSprite = gMonIcon_PikachuRockStar, .iconPalIndex = 1, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2703,6 +2745,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuBelle, .iconSprite = gMonIcon_PikachuBelle, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2754,6 +2797,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPopStar, .iconSprite = gMonIcon_PikachuPopStar, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2804,6 +2848,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPhD, .iconSprite = gMonIcon_PikachuPhD, .iconPalIndex = 1, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2854,6 +2899,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuLibre, .iconSprite = gMonIcon_PikachuLibre, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2912,6 +2958,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuOriginalCap, .iconSprite = gMonIcon_PikachuOriginalCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2966,6 +3013,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuHoennCap, .iconSprite = gMonIcon_PikachuHoennCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3020,6 +3068,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuSinnohCap, .iconSprite = gMonIcon_PikachuSinnohCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3074,6 +3123,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuUnovaCap, .iconSprite = gMonIcon_PikachuUnovaCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3128,6 +3178,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuKalosCap, .iconSprite = gMonIcon_PikachuKalosCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3182,6 +3233,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuAlolaCap, .iconSprite = gMonIcon_PikachuAlolaCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3237,6 +3289,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPartnerCap, .iconSprite = gMonIcon_PikachuPartnerCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3291,6 +3344,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuWorldCap, .iconSprite = gMonIcon_PikachuWorldCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3348,6 +3402,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuGigantamax, .iconSprite = gMonIcon_PikachuGigantamax, .iconPalIndex = 2, + SHADOW(-3, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pikachu) .isGigantamax = TRUE, .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3410,6 +3465,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconSpriteFemale = gMonIcon_PikachuPartnerF, .iconPalIndexFemale = 2, #endif + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .cannotBeTraded = TRUE, .perfectIVCount = NUM_STATS, @@ -3479,6 +3535,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Raichu, .iconSprite = gMonIcon_Raichu, .iconPalIndex = 0, + SHADOW(2, 10, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( sPicTable_Raichu, @@ -3542,6 +3599,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaichuAlolan, .iconSprite = gMonIcon_RaichuAlolan, .iconPalIndex = 2, + SHADOW(3, 15, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( sPicTable_RaichuAlolan, @@ -3608,6 +3666,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sandshrew, .iconSprite = gMonIcon_Sandshrew, .iconPalIndex = 2, + SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Sandshrew) OVERWORLD( sPicTable_Sandshrew, @@ -3672,6 +3731,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sandslash, .iconSprite = gMonIcon_Sandslash, .iconPalIndex = 2, + SHADOW(4, 4, SHADOW_SIZE_L) FOOTPRINT(Sandslash) OVERWORLD( sPicTable_Sandslash, @@ -3735,6 +3795,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SandshrewAlolan, .iconSprite = gMonIcon_SandshrewAlolan, .iconPalIndex = 0, + SHADOW(-2, -1, SHADOW_SIZE_M) FOOTPRINT(Sandshrew) OVERWORLD( sPicTable_SandshrewAlolan, @@ -3800,6 +3861,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SandslashAlolan, .iconSprite = gMonIcon_SandslashAlolan, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Sandslash) OVERWORLD( sPicTable_SandslashAlolan, @@ -3870,6 +3932,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NidoranF, .iconSprite = gMonIcon_NidoranF, .iconPalIndex = 0, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(NidoranF) OVERWORLD( sPicTable_NidoranF, @@ -3936,6 +3999,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidorina, .iconSprite = gMonIcon_Nidorina, .iconPalIndex = 0, + SHADOW(3, 5, SHADOW_SIZE_M) FOOTPRINT(Nidorina) OVERWORLD( sPicTable_Nidorina, @@ -4009,6 +4073,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidoqueen, .iconSprite = gMonIcon_Nidoqueen, .iconPalIndex = 2, + SHADOW(1, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Nidoqueen) OVERWORLD( sPicTable_Nidoqueen, @@ -4073,6 +4138,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NidoranM, .iconSprite = gMonIcon_NidoranM, .iconPalIndex = 2, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(NidoranM) OVERWORLD( sPicTable_NidoranM, @@ -4139,6 +4205,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidorino, .iconSprite = gMonIcon_Nidorino, .iconPalIndex = 2, + SHADOW(2, 1, SHADOW_SIZE_L) FOOTPRINT(Nidorino) OVERWORLD( sPicTable_Nidorino, @@ -4213,6 +4280,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidoking, .iconSprite = gMonIcon_Nidoking, .iconPalIndex = 2, + SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Nidoking) OVERWORLD( sPicTable_Nidoking, @@ -4288,6 +4356,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cleffa, .iconSprite = gMonIcon_Cleffa, .iconPalIndex = 0, + SHADOW(0, -4, SHADOW_SIZE_S) FOOTPRINT(Cleffa) OVERWORLD( sPicTable_Cleffa, @@ -4357,6 +4426,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Clefairy, .iconSprite = gMonIcon_Clefairy, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Clefairy) OVERWORLD( sPicTable_Clefairy, @@ -4432,6 +4502,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Clefable, .iconSprite = gMonIcon_Clefable, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Clefable) OVERWORLD( sPicTable_Clefable, @@ -4495,6 +4566,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Vulpix, .iconSprite = gMonIcon_Vulpix, .iconPalIndex = 5, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Vulpix) OVERWORLD( sPicTable_Vulpix, @@ -4560,6 +4632,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ninetales, .iconSprite = gMonIcon_Ninetales, .iconPalIndex = 3, + SHADOW(1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ninetales) OVERWORLD( sPicTable_Ninetales, @@ -4623,6 +4696,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VulpixAlolan, .iconSprite = gMonIcon_VulpixAlolan, .iconPalIndex = 2, + SHADOW(-2, 3, SHADOW_SIZE_M) FOOTPRINT(Vulpix) OVERWORLD( sPicTable_VulpixAlolan, @@ -4689,6 +4763,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NinetalesAlolan, .iconSprite = gMonIcon_NinetalesAlolan, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ninetales) OVERWORLD( sPicTable_NinetalesAlolan, @@ -4766,6 +4841,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Igglybuff, .iconSprite = gMonIcon_Igglybuff, .iconPalIndex = 1, + SHADOW(0, -3, SHADOW_SIZE_S) FOOTPRINT(Igglybuff) OVERWORLD( sPicTable_Igglybuff, @@ -4835,6 +4911,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jigglypuff, .iconSprite = gMonIcon_Jigglypuff, .iconPalIndex = 0, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Jigglypuff) OVERWORLD( sPicTable_Jigglypuff, @@ -4910,6 +4987,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Wigglytuff, .iconSprite = gMonIcon_Wigglytuff, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Wigglytuff) OVERWORLD( sPicTable_Wigglytuff, @@ -4977,6 +5055,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Zubat, .iconSprite = gMonIcon_Zubat, .iconPalIndex = 2, + SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Zubat) OVERWORLD( sPicTable_Zubat, @@ -5044,6 +5123,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Golbat, .iconSprite = gMonIcon_Golbat, .iconPalIndex = 2, + SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Golbat) OVERWORLD( sPicTable_Golbat, @@ -5113,6 +5193,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Crobat, .iconSprite = gMonIcon_Crobat, .iconPalIndex = 2, + SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Crobat) OVERWORLD( sPicTable_Crobat, @@ -5177,6 +5258,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Oddish, .iconSprite = gMonIcon_Oddish, .iconPalIndex = 4, + SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Oddish) OVERWORLD( sPicTable_Oddish, @@ -5244,6 +5326,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gloom, .iconSprite = gMonIcon_Gloom, .iconPalIndex = 0, + SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Gloom) OVERWORLD( sPicTable_Gloom, @@ -5319,6 +5402,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Vileplume, .iconSprite = gMonIcon_Vileplume, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Vileplume) OVERWORLD( sPicTable_Vileplume, @@ -5389,6 +5473,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bellossom, .iconSprite = gMonIcon_Bellossom, .iconPalIndex = 1, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Bellossom) OVERWORLD( sPicTable_Bellossom, @@ -5459,6 +5544,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Paras, .iconSprite = gMonIcon_Paras, .iconPalIndex = 0, + SHADOW(7, -11, SHADOW_SIZE_M) FOOTPRINT(Paras) OVERWORLD( sPicTable_Paras, @@ -5529,6 +5615,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Parasect, .iconSprite = gMonIcon_Parasect, .iconPalIndex = 0, + SHADOW(5, 2, SHADOW_SIZE_L) FOOTPRINT(Parasect) OVERWORLD( sPicTable_Parasect, @@ -5596,6 +5683,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Venonat, .iconSprite = gMonIcon_Venonat, .iconPalIndex = 2, + SHADOW(-1, 5, SHADOW_SIZE_M) FOOTPRINT(Venonat) OVERWORLD( sPicTable_Venonat, @@ -5665,6 +5753,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Venomoth, .iconSprite = gMonIcon_Venomoth, .iconPalIndex = 2, + SHADOW(-5, 18, SHADOW_SIZE_M) FOOTPRINT(Venomoth) OVERWORLD( sPicTable_Venomoth, @@ -5740,6 +5829,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Diglett, .iconSprite = gMonIcon_Diglett, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Diglett) OVERWORLD( sPicTable_Diglett, @@ -5805,6 +5895,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dugtrio, .iconSprite = gMonIcon_Dugtrio, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Dugtrio) OVERWORLD( sPicTable_Dugtrio, @@ -5868,6 +5959,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_DiglettAlolan, .iconSprite = gMonIcon_DiglettAlolan, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Diglett) OVERWORLD( sPicTable_DiglettAlolan, @@ -5934,6 +6026,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_DugtrioAlolan, .iconSprite = gMonIcon_DugtrioAlolan, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Dugtrio) OVERWORLD( sPicTable_DugtrioAlolan, @@ -6005,6 +6098,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Meowth, .iconSprite = gMonIcon_Meowth, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Meowth) OVERWORLD( sPicTable_Meowth, @@ -6075,6 +6169,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Persian, .iconSprite = gMonIcon_Persian, .iconPalIndex = 1, + SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Persian) OVERWORLD( sPicTable_Persian, @@ -6138,6 +6233,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthAlolan, .iconSprite = gMonIcon_MeowthAlolan, .iconPalIndex = 2, + SHADOW(-2, 5, SHADOW_SIZE_M) FOOTPRINT(Meowth) OVERWORLD( sPicTable_MeowthAlolan, @@ -6203,6 +6299,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PersianAlolan, .iconSprite = gMonIcon_PersianAlolan, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Persian) OVERWORLD( sPicTable_PersianAlolan, @@ -6267,6 +6364,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthGalarian, .iconSprite = gMonIcon_MeowthGalarian, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Meowth) OVERWORLD( sPicTable_MeowthGalarian, @@ -6330,6 +6428,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Perrserker, .iconSprite = gMonIcon_Perrserker, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Perrserker) OVERWORLD( sPicTable_Perrserker, @@ -6393,6 +6492,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthGigantamax, .iconSprite = gMonIcon_MeowthGigantamax, .iconPalIndex = 1, + SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Meowth) .isGigantamax = TRUE, .levelUpLearnset = sMeowthLevelUpLearnset, @@ -6452,6 +6552,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Psyduck, .iconSprite = gMonIcon_Psyduck, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Psyduck) OVERWORLD( sPicTable_Psyduck, @@ -6514,6 +6615,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Golduck, .iconSprite = gMonIcon_Golduck, .iconPalIndex = 0, + SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Golduck) OVERWORLD( sPicTable_Golduck, @@ -6581,6 +6683,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mankey, .iconSprite = gMonIcon_Mankey, .iconPalIndex = 1, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Mankey) OVERWORLD( sPicTable_Mankey, @@ -6647,6 +6750,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Primeape, .iconSprite = gMonIcon_Primeape, .iconPalIndex = 2, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Primeape) OVERWORLD( sPicTable_Primeape, @@ -6709,6 +6813,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Annihilape, .iconSprite = gMonIcon_Annihilape, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Annihilape) OVERWORLD( sPicTable_Annihilape, @@ -6773,6 +6878,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Growlithe, .iconSprite = gMonIcon_Growlithe, .iconPalIndex = 3, + SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Growlithe) OVERWORLD( sPicTable_Growlithe, @@ -6837,6 +6943,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Arcanine, .iconSprite = gMonIcon_Arcanine, .iconPalIndex = 3, + SHADOW(-4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Arcanine) OVERWORLD( sPicTable_Arcanine, @@ -6899,6 +7006,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GrowlitheHisuian, .iconSprite = gMonIcon_GrowlitheHisuian, .iconPalIndex = 0, + SHADOW(2, -2, SHADOW_SIZE_M) FOOTPRINT(Growlithe) OVERWORLD( sPicTable_GrowlitheHisuian, @@ -6962,6 +7070,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ArcanineHisuian, .iconSprite = gMonIcon_ArcanineHisuian, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Arcanine) OVERWORLD( sPicTable_ArcanineHisuian, @@ -7028,6 +7137,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwag, .iconSprite = gMonIcon_Poliwag, .iconPalIndex = 0, + SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Poliwag) OVERWORLD( sPicTable_Poliwag, @@ -7093,6 +7203,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwhirl, .iconSprite = gMonIcon_Poliwhirl, .iconPalIndex = 0, + SHADOW(-1, 4, SHADOW_SIZE_M) FOOTPRINT(Poliwhirl) OVERWORLD( sPicTable_Poliwhirl, @@ -7166,6 +7277,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwrath, .iconSprite = gMonIcon_Poliwrath, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Poliwrath) OVERWORLD( sPicTable_Poliwrath, @@ -7240,6 +7352,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Politoed, .iconSprite = gMonIcon_Politoed, .iconPalIndex = 1, + SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Politoed) OVERWORLD( sPicTable_Politoed, @@ -7310,6 +7423,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Abra, .iconSprite = gMonIcon_Abra, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Abra) OVERWORLD( sPicTable_Abra, @@ -7378,6 +7492,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kadabra, .iconSprite = gMonIcon_Kadabra, .iconPalIndex = 2, + SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Kadabra) OVERWORLD( sPicTable_Kadabra, @@ -7455,6 +7570,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Alakazam, .iconSprite = gMonIcon_Alakazam, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Alakazam) OVERWORLD( sPicTable_Alakazam, @@ -7519,6 +7635,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_AlakazamMega, .iconSprite = gMonIcon_AlakazamMega, .iconPalIndex = 2, + SHADOW(0, 18, SHADOW_SIZE_L) FOOTPRINT(Alakazam) .isMegaEvolution = TRUE, .levelUpLearnset = sAlakazamLevelUpLearnset, @@ -7588,6 +7705,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machop, .iconSprite = gMonIcon_Machop, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Machop) OVERWORLD( sPicTable_Machop, @@ -7656,6 +7774,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machoke, .iconSprite = gMonIcon_Machoke, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Machoke) OVERWORLD( sPicTable_Machoke, @@ -7731,6 +7850,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machamp, .iconSprite = gMonIcon_Machamp, .iconPalIndex = 0, + SHADOW(7, 13, SHADOW_SIZE_L) FOOTPRINT(Machamp) OVERWORLD( sPicTable_Machamp, @@ -7799,6 +7919,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MachampGigantamax, .iconSprite = gMonIcon_MachampGigantamax, .iconPalIndex = 0, + SHADOW(7, 13, SHADOW_SIZE_L) FOOTPRINT(Machamp) .isGigantamax = TRUE, .levelUpLearnset = sMachampLevelUpLearnset, @@ -7857,6 +7978,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bellsprout, .iconSprite = gMonIcon_Bellsprout, .iconPalIndex = 1, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Bellsprout) OVERWORLD( sPicTable_Bellsprout, @@ -7920,6 +8042,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weepinbell, .iconSprite = gMonIcon_Weepinbell, .iconPalIndex = 1, + SHADOW(-3, 3, SHADOW_SIZE_M) FOOTPRINT(Weepinbell) OVERWORLD( sPicTable_Weepinbell, @@ -7989,6 +8112,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Victreebel, .iconSprite = gMonIcon_Victreebel, .iconPalIndex = 1, + SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Victreebel) OVERWORLD( sPicTable_Victreebel, @@ -8052,6 +8176,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tentacool, .iconSprite = gMonIcon_Tentacool, .iconPalIndex = 0, + SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Tentacool) OVERWORLD( sPicTable_Tentacool, @@ -8115,6 +8240,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tentacruel, .iconSprite = gMonIcon_Tentacruel, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tentacruel) OVERWORLD( sPicTable_Tentacruel, @@ -8200,6 +8326,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Geodude, .iconSprite = gMonIcon_Geodude, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Geodude) OVERWORLD( sPicTable_Geodude, @@ -8264,6 +8391,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Graveler, .iconSprite = gMonIcon_Graveler, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Graveler) OVERWORLD( sPicTable_Graveler, @@ -8328,6 +8456,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Golem, .iconSprite = gMonIcon_Golem, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Golem) OVERWORLD( sPicTable_Golem, @@ -8392,6 +8521,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GeodudeAlolan, .iconSprite = gMonIcon_GeodudeAlolan, .iconPalIndex = 2, + SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Geodude) OVERWORLD( sPicTable_GeodudeAlolan, @@ -8457,6 +8587,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GravelerAlolan, .iconSprite = gMonIcon_GravelerAlolan, .iconPalIndex = 2, + SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Graveler) OVERWORLD( sPicTable_GravelerAlolan, @@ -8522,6 +8653,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GolemAlolan, .iconSprite = gMonIcon_GolemAlolan, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Golem) OVERWORLD( sPicTable_GolemAlolan, @@ -8588,6 +8720,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ponyta, .iconSprite = gMonIcon_Ponyta, .iconPalIndex = 3, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Ponyta) OVERWORLD( sPicTable_Ponyta, @@ -8651,6 +8784,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rapidash, .iconSprite = gMonIcon_Rapidash, .iconPalIndex = 3, + SHADOW(-1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rapidash) OVERWORLD( sPicTable_Rapidash, @@ -8713,6 +8847,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PonytaGalarian, .iconSprite = gMonIcon_PonytaGalarian, .iconPalIndex = 2, + SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Ponyta) OVERWORLD( sPicTable_PonytaGalarian, @@ -8777,6 +8912,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RapidashGalarian, .iconSprite = gMonIcon_RapidashGalarian, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rapidash) OVERWORLD( sPicTable_RapidashGalarian, @@ -8843,6 +8979,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowpoke, .iconSprite = gMonIcon_Slowpoke, .iconPalIndex = 0, + SHADOW(1, -5, SHADOW_SIZE_L) FOOTPRINT(Slowpoke) OVERWORLD( sPicTable_Slowpoke, @@ -8909,6 +9046,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowbro, .iconSprite = gMonIcon_Slowbro, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_L) FOOTPRINT(Slowbro) OVERWORLD( sPicTable_Slowbro, @@ -8973,6 +9111,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowking, .iconSprite = gMonIcon_Slowking, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Slowking) OVERWORLD( sPicTable_Slowking, @@ -9037,6 +9176,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowbroMega, .iconSprite = gMonIcon_SlowbroMega, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Slowbro) .isMegaEvolution = TRUE, .levelUpLearnset = sSlowbroLevelUpLearnset, @@ -9094,6 +9234,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowpokeGalarian, .iconSprite = gMonIcon_SlowpokeGalarian, .iconPalIndex = 0, + SHADOW(-3, -8, SHADOW_SIZE_L) FOOTPRINT(Slowpoke) OVERWORLD( sPicTable_SlowpokeGalarian, @@ -9160,6 +9301,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowbroGalarian, .iconSprite = gMonIcon_SlowbroGalarian, .iconPalIndex = 0, + SHADOW(-5, 9, SHADOW_SIZE_L) FOOTPRINT(Slowbro) OVERWORLD( sPicTable_SlowbroGalarian, @@ -9223,6 +9365,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowkingGalarian, .iconSprite = gMonIcon_SlowkingGalarian, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Slowking) OVERWORLD( sPicTable_SlowkingGalarian, @@ -9291,6 +9434,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magnemite, .iconSprite = gMonIcon_Magnemite, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Magnemite) OVERWORLD( sPicTable_Magnemite, @@ -9354,6 +9498,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magneton, .iconSprite = gMonIcon_Magneton, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Magneton) OVERWORLD( sPicTable_Magneton, @@ -9425,6 +9570,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magnezone, .iconSprite = gMonIcon_Magnezone, .iconPalIndex = 0, + SHADOW(4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Magnezone) OVERWORLD( sPicTable_Magnezone, @@ -9499,6 +9645,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Farfetchd, .iconSprite = gMonIcon_Farfetchd, .iconPalIndex = 1, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Farfetchd) OVERWORLD( sPicTable_Farfetchd, @@ -9563,6 +9710,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_FarfetchdGalarian, .iconSprite = gMonIcon_FarfetchdGalarian, .iconPalIndex = 1, + SHADOW(-7, 2, SHADOW_SIZE_L) FOOTPRINT(Farfetchd) OVERWORLD( sPicTable_FarfetchdGalarian, @@ -9628,6 +9776,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sirfetchd, .iconSprite = gMonIcon_Sirfetchd, .iconPalIndex = 1, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Sirfetchd) OVERWORLD( sPicTable_Sirfetchd, @@ -9696,6 +9845,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Doduo, .iconSprite = gMonIcon_Doduo, .iconPalIndex = 2, + SHADOW(6, 5, SHADOW_SIZE_M) FOOTPRINT(Doduo) OVERWORLD( sPicTable_Doduo, @@ -9769,6 +9919,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dodrio, .iconSprite = gMonIcon_Dodrio, .iconPalIndex = 2, + SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Dodrio) OVERWORLD( sPicTable_Dodrio, @@ -9835,6 +9986,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Seel, .iconSprite = gMonIcon_Seel, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Seel) OVERWORLD( sPicTable_Seel, @@ -9901,6 +10053,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dewgong, .iconSprite = gMonIcon_Dewgong, .iconPalIndex = 2, + SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dewgong) OVERWORLD( sPicTable_Dewgong, @@ -9964,6 +10117,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Grimer, .iconSprite = gMonIcon_Grimer, .iconPalIndex = 2, + SHADOW(2, 3, SHADOW_SIZE_M) FOOTPRINT(Grimer) OVERWORLD( sPicTable_Grimer, @@ -10030,6 +10184,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Muk, .iconSprite = gMonIcon_Muk, .iconPalIndex = 2, + SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Muk) OVERWORLD( sPicTable_Muk, @@ -10093,6 +10248,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GrimerAlolan, .iconSprite = gMonIcon_GrimerAlolan, .iconPalIndex = 1, + SHADOW(2, 1, SHADOW_SIZE_M) FOOTPRINT(Grimer) OVERWORLD( sPicTable_GrimerAlolan, @@ -10160,6 +10316,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MukAlolan, .iconSprite = gMonIcon_MukAlolan, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Muk) OVERWORLD( sPicTable_MukAlolan, @@ -10232,6 +10389,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Shellder, .iconSprite = gMonIcon_Shellder, .iconPalIndex = 2, + SHADOW(0, -4, SHADOW_SIZE_S) FOOTPRINT(Shellder) OVERWORLD( sPicTable_Shellder, @@ -10300,6 +10458,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cloyster, .iconSprite = gMonIcon_Cloyster, .iconPalIndex = 2, + SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Cloyster) OVERWORLD( sPicTable_Cloyster, @@ -10363,6 +10522,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gastly, .iconSprite = gMonIcon_Gastly, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Gastly) OVERWORLD( sPicTable_Gastly, @@ -10427,6 +10587,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Haunter, .iconSprite = gMonIcon_Haunter, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Haunter) OVERWORLD( sPicTable_Haunter, @@ -10501,6 +10662,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gengar, .iconSprite = gMonIcon_Gengar, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_L) FOOTPRINT(Gengar) OVERWORLD( sPicTable_Gengar, @@ -10564,6 +10726,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GengarMega, .iconSprite = gMonIcon_GengarMega, .iconPalIndex = 2, + SHADOW(6, 1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gengar) .isMegaEvolution = TRUE, .levelUpLearnset = sGengarLevelUpLearnset, @@ -10621,6 +10784,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GengarGigantamax, .iconSprite = gMonIcon_GengarGigantamax, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Gengar) .isGigantamax = TRUE, .levelUpLearnset = sGengarLevelUpLearnset, @@ -10679,6 +10843,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Onix, .iconSprite = gMonIcon_Onix, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Onix) OVERWORLD( sPicTable_Onix, @@ -10749,6 +10914,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Steelix, .iconSprite = gMonIcon_Steelix, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) OVERWORLD( sPicTable_Steelix, @@ -10813,6 +10979,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SteelixMega, .iconSprite = gMonIcon_SteelixMega, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) .isMegaEvolution = TRUE, .levelUpLearnset = sSteelixLevelUpLearnset, @@ -10877,6 +11044,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Drowzee, .iconSprite = gMonIcon_Drowzee, .iconPalIndex = 2, + SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Drowzee) OVERWORLD( sPicTable_Drowzee, @@ -10948,6 +11116,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hypno, .iconSprite = gMonIcon_Hypno, .iconPalIndex = 2, + SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hypno) OVERWORLD( sPicTable_Hypno, @@ -11010,6 +11179,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Krabby, .iconSprite = gMonIcon_Krabby, .iconPalIndex = 0, + SHADOW(0, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Krabby) OVERWORLD( sPicTable_Krabby, @@ -11074,6 +11244,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kingler, .iconSprite = gMonIcon_Kingler, .iconPalIndex = 0, + SHADOW(-2, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kingler) OVERWORLD( sPicTable_Kingler, @@ -11138,6 +11309,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_KinglerGigantamax, .iconSprite = gMonIcon_KinglerGigantamax, .iconPalIndex = 0, + SHADOW(-3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kingler) .isGigantamax = TRUE, .levelUpLearnset = sKinglerLevelUpLearnset, @@ -11204,6 +11376,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Voltorb, .iconSprite = gMonIcon_Voltorb, .iconPalIndex = 0, + SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Voltorb) OVERWORLD( sPicTable_Voltorb, @@ -11266,6 +11439,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electrode, .iconSprite = gMonIcon_Electrode, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Electrode) OVERWORLD( sPicTable_Electrode, @@ -11328,6 +11502,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VoltorbHisuian, .iconSprite = gMonIcon_VoltorbHisuian, .iconPalIndex = 0, + SHADOW(1, -4, SHADOW_SIZE_S) FOOTPRINT(Voltorb) OVERWORLD( sPicTable_VoltorbHisuian, @@ -11391,6 +11566,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ElectrodeHisuian, .iconSprite = gMonIcon_ElectrodeHisuian, .iconPalIndex = 1, + SHADOW(-1, 4, SHADOW_SIZE_M) FOOTPRINT(Electrode) OVERWORLD( sPicTable_ElectrodeHisuian, @@ -11457,6 +11633,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Exeggcute, .iconSprite = gMonIcon_Exeggcute, .iconPalIndex = 0, + SHADOW(0, -5, SHADOW_SIZE_L) FOOTPRINT(Exeggcute) OVERWORLD( sPicTable_Exeggcute, @@ -11530,6 +11707,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Exeggutor, .iconSprite = gMonIcon_Exeggutor, .iconPalIndex = 1, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Exeggutor) OVERWORLD( sPicTable_Exeggutor, @@ -11592,6 +11770,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ExeggutorAlolan, .iconSprite = gMonIcon_ExeggutorAlolan, .iconPalIndex = 1, + SHADOW(6, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Exeggutor) OVERWORLD( sPicTable_ExeggutorAlolan, @@ -11659,6 +11838,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cubone, .iconSprite = gMonIcon_Cubone, .iconPalIndex = 2, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Cubone) OVERWORLD( sPicTable_Cubone, @@ -11724,6 +11904,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Marowak, .iconSprite = gMonIcon_Marowak, .iconPalIndex = 2, + SHADOW(6, 6, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( sPicTable_Marowak, @@ -11783,6 +11964,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MarowakAlolan, .iconSprite = gMonIcon_MarowakAlolan, .iconPalIndex = 1, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( sPicTable_MarowakAlolan, @@ -11842,6 +12024,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MarowakAlolan, .iconSprite = gMonIcon_MarowakAlolan, .iconPalIndex = 1, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Marowak) .isTotem = TRUE, .isAlolanForm = TRUE, @@ -11906,6 +12089,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tyrogue, .iconSprite = gMonIcon_Tyrogue, .iconPalIndex = 2, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Tyrogue) OVERWORLD( sPicTable_Tyrogue, @@ -11975,6 +12159,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmonlee, .iconSprite = gMonIcon_Hitmonlee, .iconPalIndex = 2, + SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Hitmonlee) OVERWORLD( sPicTable_Hitmonlee, @@ -12039,6 +12224,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmonchan, .iconSprite = gMonIcon_Hitmonchan, .iconPalIndex = 2, + SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Hitmonchan) OVERWORLD( sPicTable_Hitmonchan, @@ -12104,6 +12290,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmontop, .iconSprite = gMonIcon_Hitmontop, .iconPalIndex = 2, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Hitmontop) OVERWORLD( sPicTable_Hitmontop, @@ -12168,6 +12355,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lickitung, .iconSprite = gMonIcon_Lickitung, .iconPalIndex = 0, + SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Lickitung) OVERWORLD( sPicTable_Lickitung, @@ -12232,6 +12420,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lickilicky, .iconSprite = gMonIcon_Lickilicky, .iconPalIndex = 1, + SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Lickilicky) OVERWORLD( sPicTable_Lickilicky, @@ -12301,6 +12490,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Koffing, .iconSprite = gMonIcon_Koffing, .iconPalIndex = 2, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Koffing) OVERWORLD( sPicTable_Koffing, @@ -12371,6 +12561,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weezing, .iconSprite = gMonIcon_Weezing, .iconPalIndex = 2, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Weezing) OVERWORLD( sPicTable_Weezing, @@ -12436,6 +12627,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_WeezingGalarian, .iconSprite = gMonIcon_WeezingGalarian, .iconPalIndex = 1, + SHADOW(7, 17, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Weezing) OVERWORLD( sPicTable_WeezingGalarian, @@ -12505,6 +12697,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rhyhorn, .iconSprite = gMonIcon_Rhyhorn, .iconPalIndex = 1, + SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Rhyhorn) OVERWORLD( sPicTable_Rhyhorn, @@ -12571,6 +12764,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rhydon, .iconSprite = gMonIcon_Rhydon, .iconPalIndex = 1, + SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhydon) OVERWORLD( sPicTable_Rhydon, @@ -12644,6 +12838,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rhyperior, .iconSprite = gMonIcon_Rhyperior, .iconPalIndex = 0, + SHADOW(2, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhyperior) OVERWORLD( sPicTable_Rhyperior, @@ -12709,6 +12904,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Happiny, .iconSprite = gMonIcon_Happiny, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Happiny) OVERWORLD( sPicTable_Happiny, @@ -12774,6 +12970,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Chansey, .iconSprite = gMonIcon_Chansey, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_L) FOOTPRINT(Chansey) OVERWORLD( sPicTable_Chansey, @@ -12838,6 +13035,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Blissey, .iconSprite = gMonIcon_Blissey, .iconPalIndex = 0, + SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Blissey) OVERWORLD( sPicTable_Blissey, @@ -12905,6 +13103,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tangela, .iconSprite = gMonIcon_Tangela, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Tangela) OVERWORLD( sPicTable_Tangela, @@ -12970,6 +13169,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tangrowth, .iconSprite = gMonIcon_Tangrowth, .iconPalIndex = 0, + SHADOW(-2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tangrowth) OVERWORLD( sPicTable_Tangrowth, @@ -13033,6 +13233,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kangaskhan, .iconSprite = gMonIcon_Kangaskhan, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kangaskhan) OVERWORLD( sPicTable_Kangaskhan, @@ -13097,6 +13298,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_KangaskhanMega, .iconSprite = gMonIcon_KangaskhanMega, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kangaskhan) .isMegaEvolution = TRUE, .levelUpLearnset = sKangaskhanLevelUpLearnset, @@ -13161,6 +13363,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Horsea, .iconSprite = gMonIcon_Horsea, .iconPalIndex = 0, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Horsea) OVERWORLD( sPicTable_Horsea, @@ -13229,6 +13432,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Seadra, .iconSprite = gMonIcon_Seadra, .iconPalIndex = 0, + SHADOW(-2, 7, SHADOW_SIZE_M) FOOTPRINT(Seadra) OVERWORLD( sPicTable_Seadra, @@ -13305,6 +13509,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kingdra, .iconSprite = gMonIcon_Kingdra, .iconPalIndex = 0, + SHADOW(3, 12, SHADOW_SIZE_M) FOOTPRINT(Kingdra) OVERWORLD( sPicTable_Kingdra, @@ -13373,6 +13578,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Goldeen, .iconSprite = gMonIcon_Goldeen, .iconPalIndex = 0, + SHADOW(-6, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Goldeen) OVERWORLD( sPicTable_Goldeen, @@ -13440,6 +13646,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Seaking, .iconSprite = gMonIcon_Seaking, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Seaking) OVERWORLD( sPicTable_Seaking, @@ -13505,6 +13712,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Staryu, .iconSprite = gMonIcon_Staryu, .iconPalIndex = 2, + SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Staryu) OVERWORLD( sPicTable_Staryu, @@ -13568,6 +13776,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Starmie, .iconSprite = gMonIcon_Starmie, .iconPalIndex = 2, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Starmie) OVERWORLD( sPicTable_Starmie, @@ -13639,6 +13848,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MimeJr, .iconSprite = gMonIcon_MimeJr, .iconPalIndex = 0, + SHADOW(-5, 4, SHADOW_SIZE_S) FOOTPRINT(MimeJr) OVERWORLD( sPicTable_MimeJr, @@ -13707,6 +13917,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrMime, .iconSprite = gMonIcon_MrMime, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(MrMime) OVERWORLD( sPicTable_MrMime, @@ -13770,6 +13981,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrMimeGalarian, .iconSprite = gMonIcon_MrMimeGalarian, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(MrMime) OVERWORLD( sPicTable_MrMimeGalarian, @@ -13833,6 +14045,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrRime, .iconSprite = gMonIcon_MrRime, .iconPalIndex = 0, + SHADOW(3, 9, SHADOW_SIZE_L) FOOTPRINT(MrRime) OVERWORLD( sPicTable_MrRime, @@ -13903,6 +14116,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Scyther, .iconSprite = gMonIcon_Scyther, .iconPalIndex = 1, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Scyther) OVERWORLD( sPicTable_Scyther, @@ -13975,6 +14189,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Scizor, .iconSprite = gMonIcon_Scizor, .iconPalIndex = 0, + SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) OVERWORLD( sPicTable_Scizor, @@ -14038,6 +14253,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ScizorMega, .iconSprite = gMonIcon_ScizorMega, .iconPalIndex = 0, + SHADOW(5, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) .isMegaEvolution = TRUE, .levelUpLearnset = sScizorLevelUpLearnset, @@ -14096,6 +14312,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kleavor, .iconSprite = gMonIcon_Kleavor, .iconPalIndex = 2, + SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kleavor) OVERWORLD( sPicTable_Kleavor, @@ -14165,6 +14382,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Smoochum, .iconSprite = gMonIcon_Smoochum, .iconPalIndex = 1, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Smoochum) OVERWORLD( sPicTable_Smoochum, @@ -14232,6 +14450,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jynx, .iconSprite = gMonIcon_Jynx, .iconPalIndex = 2, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Jynx) OVERWORLD( sPicTable_Jynx, @@ -14297,6 +14516,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Elekid, .iconSprite = gMonIcon_Elekid, .iconPalIndex = 1, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Elekid) OVERWORLD( sPicTable_Elekid, @@ -14362,6 +14582,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electabuzz, .iconSprite = gMonIcon_Electabuzz, .iconPalIndex = 1, + SHADOW(-2, 9, SHADOW_SIZE_L) FOOTPRINT(Electabuzz) OVERWORLD( sPicTable_Electabuzz, @@ -14432,6 +14653,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electivire, .iconSprite = gMonIcon_Electivire, .iconPalIndex = 1, + SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Electivire) OVERWORLD( sPicTable_Electivire, @@ -14498,6 +14720,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magby, .iconSprite = gMonIcon_Magby, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Magby) OVERWORLD( sPicTable_Magby, @@ -14562,6 +14785,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magmar, .iconSprite = gMonIcon_Magmar, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Magmar) OVERWORLD( sPicTable_Magmar, @@ -14633,6 +14857,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magmortar, .iconSprite = gMonIcon_Magmortar, .iconPalIndex = 0, + SHADOW(4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Magmortar) OVERWORLD( sPicTable_Magmortar, @@ -14700,6 +14925,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pinsir, .iconSprite = gMonIcon_Pinsir, .iconPalIndex = 2, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Pinsir) OVERWORLD( sPicTable_Pinsir, @@ -14765,6 +14991,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PinsirMega, .iconSprite = gMonIcon_PinsirMega, .iconPalIndex = 2, + SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Pinsir) .isMegaEvolution = TRUE, .levelUpLearnset = sPinsirLevelUpLearnset, @@ -14830,6 +15057,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tauros, .iconSprite = gMonIcon_Tauros, .iconPalIndex = 2, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( sPicTable_Tauros, @@ -14892,6 +15120,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeanCombatBreed, .iconSprite = gMonIcon_TaurosPaldeanCombatBreed, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( sPicTable_TaurosPaldeanCombatBreed, @@ -14955,6 +15184,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeanBlazeBreed, .iconSprite = gMonIcon_TaurosPaldeanBlazeBreed, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( sPicTable_TaurosPaldeanBlazeBreed, @@ -15018,6 +15248,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeanAquaBreed, .iconSprite = gMonIcon_TaurosPaldeanAquaBreed, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( sPicTable_TaurosPaldeanAquaBreed, @@ -15088,6 +15319,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magikarp, .iconSprite = gMonIcon_Magikarp, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Magikarp) OVERWORLD( sPicTable_Magikarp, @@ -15154,6 +15386,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gyarados, .iconSprite = gMonIcon_Gyarados, .iconPalIndex = 0, + SHADOW(5, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) OVERWORLD( sPicTable_Gyarados, @@ -15218,6 +15451,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GyaradosMega, .iconSprite = gMonIcon_GyaradosMega, .iconPalIndex = 0, + SHADOW(3, 17, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) .isMegaEvolution = TRUE, .levelUpLearnset = sGyaradosLevelUpLearnset, @@ -15278,6 +15512,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lapras, .iconSprite = gMonIcon_Lapras, .iconPalIndex = 2, + SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Lapras) OVERWORLD( sPicTable_Lapras, @@ -15344,6 +15579,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_LaprasGigantamax, .iconSprite = gMonIcon_LaprasGigantamax, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Lapras) .isGigantamax = TRUE, .levelUpLearnset = sLaprasLevelUpLearnset, @@ -15405,6 +15641,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ditto, .iconSprite = gMonIcon_Ditto, .iconPalIndex = 2, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Ditto) OVERWORLD( sPicTable_Ditto, @@ -15472,6 +15709,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Eevee, .iconSprite = gMonIcon_Eevee, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) OVERWORLD( sPicTable_Eevee, @@ -15546,6 +15784,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_EeveeGigantamax, .iconSprite = gMonIcon_EeveeGigantamax, .iconPalIndex = 2, + SHADOW(0, 4, SHADOW_SIZE_L) FOOTPRINT(Eevee) .isGigantamax = TRUE, .levelUpLearnset = sEeveeLevelUpLearnset, @@ -15607,6 +15846,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconSpriteFemale = gMonIcon_EeveePartnerF, .iconPalIndexFemale = 2, #endif + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) .cannotBeTraded = TRUE, .perfectIVCount = NUM_STATS, @@ -15663,6 +15903,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Vaporeon, .iconSprite = gMonIcon_Vaporeon, .iconPalIndex = 0, + SHADOW(-4, 3, SHADOW_SIZE_M) FOOTPRINT(Vaporeon) OVERWORLD( sPicTable_Vaporeon, @@ -15723,6 +15964,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jolteon, .iconSprite = gMonIcon_Jolteon, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Jolteon) OVERWORLD( sPicTable_Jolteon, @@ -15783,6 +16025,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Flareon, .iconSprite = gMonIcon_Flareon, .iconPalIndex = 3, + SHADOW(-2, 1, SHADOW_SIZE_L) FOOTPRINT(Flareon) OVERWORLD( sPicTable_Flareon, @@ -15844,6 +16087,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Espeon, .iconSprite = gMonIcon_Espeon, .iconPalIndex = 2, + SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Espeon) OVERWORLD( sPicTable_Espeon, @@ -15904,6 +16148,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Umbreon, .iconSprite = gMonIcon_Umbreon, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Umbreon) OVERWORLD( sPicTable_Umbreon, @@ -15966,6 +16211,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Leafeon, .iconSprite = gMonIcon_Leafeon, .iconPalIndex = 1, + SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Leafeon) OVERWORLD( sPicTable_Leafeon, @@ -16026,6 +16272,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Glaceon, .iconSprite = gMonIcon_Glaceon, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Glaceon) OVERWORLD( sPicTable_Glaceon, @@ -16089,6 +16336,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sylveon, .iconSprite = gMonIcon_Sylveon, .iconPalIndex = 0, + SHADOW(2, 9, SHADOW_SIZE_M) FOOTPRINT(Sylveon) OVERWORLD( sPicTable_Sylveon, @@ -16156,6 +16404,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Porygon, .iconSprite = gMonIcon_Porygon, .iconPalIndex = 0, + SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Porygon) OVERWORLD( sPicTable_Porygon, @@ -16224,6 +16473,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Porygon2, .iconSprite = gMonIcon_Porygon2, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Porygon2) OVERWORLD( sPicTable_Porygon2, @@ -16294,6 +16544,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PorygonZ, .iconSprite = gMonIcon_PorygonZ, .iconPalIndex = 0, + SHADOW(0, 17, SHADOW_SIZE_S) FOOTPRINT(PorygonZ) OVERWORLD( sPicTable_PorygonZ, @@ -16364,6 +16615,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Omanyte, .iconSprite = gMonIcon_Omanyte, .iconPalIndex = 0, + SHADOW(-2, -2, SHADOW_SIZE_S) FOOTPRINT(Omanyte) OVERWORLD( sPicTable_Omanyte, @@ -16426,6 +16678,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Omastar, .iconSprite = gMonIcon_Omastar, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Omastar) OVERWORLD( sPicTable_Omastar, @@ -16494,6 +16747,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kabuto, .iconSprite = gMonIcon_Kabuto, .iconPalIndex = 2, + SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Kabuto) OVERWORLD( sPicTable_Kabuto, @@ -16562,6 +16816,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kabutops, .iconSprite = gMonIcon_Kabutops, .iconPalIndex = 2, + SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kabutops) OVERWORLD( sPicTable_Kabutops, @@ -16625,6 +16880,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Aerodactyl, .iconSprite = gMonIcon_Aerodactyl, .iconPalIndex = 2, + SHADOW(-2, 16, SHADOW_SIZE_M) FOOTPRINT(Aerodactyl) OVERWORLD( sPicTable_Aerodactyl, @@ -16689,6 +16945,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_AerodactylMega, .iconSprite = gMonIcon_AerodactylMega, .iconPalIndex = 2, + SHADOW(-2, 16, SHADOW_SIZE_M) FOOTPRINT(Aerodactyl) .isMegaEvolution = TRUE, .levelUpLearnset = sAerodactylLevelUpLearnset, @@ -16751,6 +17008,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Munchlax, .iconSprite = gMonIcon_Munchlax, .iconPalIndex = 3, + SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Munchlax) OVERWORLD( sPicTable_Munchlax, @@ -16816,6 +17074,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Snorlax, .iconSprite = gMonIcon_Snorlax, .iconPalIndex = 3, + SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Snorlax) OVERWORLD( sPicTable_Snorlax, @@ -16882,6 +17141,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SnorlaxGigantamax, .iconSprite = gMonIcon_SnorlaxGigantamax, .iconPalIndex = 3, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Snorlax) .isGigantamax = TRUE, .levelUpLearnset = sSnorlaxLevelUpLearnset, @@ -16947,6 +17207,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Articuno, .iconSprite = gMonIcon_Articuno, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_M) FOOTPRINT(Articuno) OVERWORLD( sPicTable_Articuno, @@ -17012,6 +17273,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ArticunoGalarian, .iconSprite = gMonIcon_ArticunoGalarian, .iconPalIndex = 2, + SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Articuno) OVERWORLD( sPicTable_ArticunoGalarian, @@ -17090,6 +17352,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Zapdos, .iconSprite = gMonIcon_Zapdos, .iconPalIndex = 0, + SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(Zapdos) OVERWORLD( sPicTable_Zapdos, @@ -17154,6 +17417,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ZapdosGalarian, .iconSprite = gMonIcon_ZapdosGalarian, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Zapdos) OVERWORLD( sPicTable_ZapdosGalarian, @@ -17227,6 +17491,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Moltres, .iconSprite = gMonIcon_Moltres, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Moltres) OVERWORLD( sPicTable_Moltres, @@ -17291,6 +17556,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MoltresGalarian, .iconSprite = gMonIcon_MoltresGalarian, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Moltres) OVERWORLD( sPicTable_MoltresGalarian, @@ -17359,6 +17625,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dratini, .iconSprite = gMonIcon_Dratini, .iconPalIndex = 0, + SHADOW(3, 3, SHADOW_SIZE_L) FOOTPRINT(Dratini) OVERWORLD( sPicTable_Dratini, @@ -17422,6 +17689,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dragonair, .iconSprite = gMonIcon_Dragonair, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dragonair) OVERWORLD( sPicTable_Dragonair, @@ -17490,6 +17758,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dragonite, .iconSprite = gMonIcon_Dragonite, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dragonite) OVERWORLD( sPicTable_Dragonite, @@ -17558,6 +17827,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mewtwo, .iconSprite = gMonIcon_Mewtwo, .iconPalIndex = 2, + SHADOW(6, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mewtwo) OVERWORLD( sPicTable_Mewtwo, @@ -17624,6 +17894,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MewtwoMegaX, .iconSprite = gMonIcon_MewtwoMegaX, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Mewtwo) .isLegendary = TRUE, .isMegaEvolution = TRUE, @@ -17683,6 +17954,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MewtwoMegaY, .iconSprite = gMonIcon_MewtwoMegaY, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Mewtwo) .isLegendary = TRUE, .isMegaEvolution = TRUE, @@ -17753,6 +18025,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mew, .iconSprite = gMonIcon_Mew, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Mew) OVERWORLD( sPicTable_Mew, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 8c99c6b1db..f59e8a5417 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Chikorita, .iconSprite = gMonIcon_Chikorita, .iconPalIndex = 1, + SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Chikorita) OVERWORLD( sPicTable_Chikorita, @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Bayleef, .iconSprite = gMonIcon_Bayleef, .iconPalIndex = 1, + SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Bayleef) OVERWORLD( sPicTable_Bayleef, @@ -186,6 +188,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Meganium, .iconSprite = gMonIcon_Meganium, .iconPalIndex = 1, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Meganium) OVERWORLD( sPicTable_Meganium, @@ -248,6 +251,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Cyndaquil, .iconSprite = gMonIcon_Cyndaquil, .iconPalIndex = 3, + SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Cyndaquil) OVERWORLD( sPicTable_Cyndaquil, @@ -311,6 +315,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Quilava, .iconSprite = gMonIcon_Quilava, .iconPalIndex = 3, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Quilava) OVERWORLD( sPicTable_Quilava, @@ -382,6 +387,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Typhlosion, .iconSprite = gMonIcon_Typhlosion, .iconPalIndex = 3, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Typhlosion) OVERWORLD( sPicTable_Typhlosion, @@ -444,6 +450,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_TyphlosionHisuian, .iconSprite = gMonIcon_TyphlosionHisuian, .iconPalIndex = 1, + SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(Typhlosion) OVERWORLD( sPicTable_TyphlosionHisuian, @@ -509,6 +516,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Totodile, .iconSprite = gMonIcon_Totodile, .iconPalIndex = 0, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Totodile) OVERWORLD( sPicTable_Totodile, @@ -573,6 +581,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Croconaw, .iconSprite = gMonIcon_Croconaw, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Croconaw) OVERWORLD( sPicTable_Croconaw, @@ -642,6 +651,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Feraligatr, .iconSprite = gMonIcon_Feraligatr, .iconPalIndex = 0, + SHADOW(3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Feraligatr) OVERWORLD( sPicTable_Feraligatr, @@ -704,6 +714,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sentret, .iconSprite = gMonIcon_Sentret, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Sentret) OVERWORLD( sPicTable_Sentret, @@ -766,6 +777,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Furret, .iconSprite = gMonIcon_Furret, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Furret) OVERWORLD( sPicTable_Furret, @@ -828,6 +840,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Hoothoot, .iconSprite = gMonIcon_Hoothoot, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Hoothoot) OVERWORLD( sPicTable_Hoothoot, @@ -896,6 +909,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Noctowl, .iconSprite = gMonIcon_Noctowl, .iconPalIndex = 2, + SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Noctowl) OVERWORLD( sPicTable_Noctowl, @@ -962,6 +976,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ledyba, .iconSprite = gMonIcon_Ledyba, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Ledyba) OVERWORLD( sPicTable_Ledyba, @@ -1029,6 +1044,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ledian, .iconSprite = gMonIcon_Ledian, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Ledian) OVERWORLD( sPicTable_Ledian, @@ -1091,6 +1107,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Spinarak, .iconSprite = gMonIcon_Spinarak, .iconPalIndex = 1, + SHADOW(0, -8, SHADOW_SIZE_M) FOOTPRINT(Spinarak) OVERWORLD( sPicTable_Spinarak, @@ -1159,6 +1176,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ariados, .iconSprite = gMonIcon_Ariados, .iconPalIndex = 0, + SHADOW(1, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ariados) OVERWORLD( sPicTable_Ariados, @@ -1222,6 +1240,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Chinchou, .iconSprite = gMonIcon_Chinchou, .iconPalIndex = 2, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Chinchou) OVERWORLD( sPicTable_Chinchou, @@ -1285,6 +1304,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Lanturn, .iconSprite = gMonIcon_Lanturn, .iconPalIndex = 0, + SHADOW(5, 4, SHADOW_SIZE_M) FOOTPRINT(Lanturn) OVERWORLD( sPicTable_Lanturn, @@ -1349,6 +1369,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togepi, .iconSprite = gMonIcon_Togepi, .iconPalIndex = 0, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Togepi) OVERWORLD( sPicTable_Togepi, @@ -1411,6 +1432,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togetic, .iconSprite = gMonIcon_Togetic, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Togetic) OVERWORLD( sPicTable_Togetic, @@ -1482,6 +1504,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togekiss, .iconSprite = gMonIcon_Togekiss, .iconPalIndex = 2, + SHADOW(4, 15, SHADOW_SIZE_M) FOOTPRINT(Togekiss) OVERWORLD( sPicTable_Togekiss, @@ -1546,6 +1569,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Natu, .iconSprite = gMonIcon_Natu, .iconPalIndex = 1, + SHADOW(-2, -4, SHADOW_SIZE_S) FOOTPRINT(Natu) OVERWORLD( sPicTable_Natu, @@ -1611,6 +1635,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Xatu, .iconSprite = gMonIcon_Xatu, .iconPalIndex = 1, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Xatu) OVERWORLD( sPicTable_Xatu, @@ -1674,6 +1699,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mareep, .iconSprite = gMonIcon_Mareep, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Mareep) OVERWORLD( sPicTable_Mareep, @@ -1736,6 +1762,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Flaaffy, .iconSprite = gMonIcon_Flaaffy, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Flaaffy) OVERWORLD( sPicTable_Flaaffy, @@ -1808,6 +1835,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ampharos, .iconSprite = gMonIcon_Ampharos, .iconPalIndex = 0, + SHADOW(3, 11, SHADOW_SIZE_M) FOOTPRINT(Ampharos) OVERWORLD( sPicTable_Ampharos, @@ -1871,6 +1899,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_AmpharosMega, .iconSprite = gMonIcon_AmpharosMega, .iconPalIndex = 0, + SHADOW(-7, 13, SHADOW_SIZE_M) FOOTPRINT(Ampharos) .isMegaEvolution = TRUE, .levelUpLearnset = sAmpharosLevelUpLearnset, @@ -1934,6 +1963,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Azurill, .iconSprite = gMonIcon_Azurill, .iconPalIndex = 0, + SHADOW(-4, 3, SHADOW_SIZE_S) FOOTPRINT(Azurill) OVERWORLD( sPicTable_Azurill, @@ -2001,6 +2031,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Marill, .iconSprite = gMonIcon_Marill, .iconPalIndex = 0, + SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Marill) OVERWORLD( sPicTable_Marill, @@ -2075,6 +2106,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Azumarill, .iconSprite = gMonIcon_Azumarill, .iconPalIndex = 0, + SHADOW(-4, 8, SHADOW_SIZE_S) FOOTPRINT(Azumarill) OVERWORLD( sPicTable_Azumarill, @@ -2138,6 +2170,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Bonsly, .iconSprite = gMonIcon_Bonsly, .iconPalIndex = 1, + SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Bonsly) OVERWORLD( sPicTable_Bonsly, @@ -2205,6 +2238,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sudowoodo, .iconSprite = gMonIcon_Sudowoodo, .iconPalIndex = 1, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Sudowoodo) OVERWORLD( sPicTable_Sudowoodo, @@ -2273,6 +2307,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Hoppip, .iconSprite = gMonIcon_Hoppip, .iconPalIndex = 1, + SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Hoppip) OVERWORLD( sPicTable_Hoppip, @@ -2340,6 +2375,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Skiploom, .iconSprite = gMonIcon_Skiploom, .iconPalIndex = 1, + SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Skiploom) OVERWORLD( sPicTable_Skiploom, @@ -2414,6 +2450,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Jumpluff, .iconSprite = gMonIcon_Jumpluff, .iconPalIndex = 2, + SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Jumpluff) OVERWORLD( sPicTable_Jumpluff, @@ -2480,6 +2517,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Aipom, .iconSprite = gMonIcon_Aipom, .iconPalIndex = 2, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Aipom) OVERWORLD( sPicTable_Aipom, @@ -2547,6 +2585,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ambipom, .iconSprite = gMonIcon_Ambipom, .iconPalIndex = 2, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Ambipom) OVERWORLD( sPicTable_Ambipom, @@ -2614,6 +2653,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sunkern, .iconSprite = gMonIcon_Sunkern, .iconPalIndex = 1, + SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(Sunkern) OVERWORLD( sPicTable_Sunkern, @@ -2680,6 +2720,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sunflora, .iconSprite = gMonIcon_Sunflora, .iconPalIndex = 1, + SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Sunflora) OVERWORLD( sPicTable_Sunflora, @@ -2744,6 +2785,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Yanma, .iconSprite = gMonIcon_Yanma, .iconPalIndex = 1, + SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Yanma) OVERWORLD( sPicTable_Yanma, @@ -2809,6 +2851,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Yanmega, .iconSprite = gMonIcon_Yanmega, .iconPalIndex = 1, + SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Yanmega) OVERWORLD( sPicTable_Yanmega, @@ -2876,6 +2919,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Wooper, .iconSprite = gMonIcon_Wooper, .iconPalIndex = 0, + SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) OVERWORLD( sPicTable_Wooper, @@ -2943,6 +2987,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Quagsire, .iconSprite = gMonIcon_Quagsire, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Quagsire) OVERWORLD( sPicTable_Quagsire, @@ -3004,6 +3049,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_WooperPaldean, .iconSprite = gMonIcon_WooperPaldean, .iconPalIndex = 2, + SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) OVERWORLD( sPicTable_WooperPaldean, @@ -3068,6 +3114,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Clodsire, .iconSprite = gMonIcon_Clodsire, .iconPalIndex = 0, + SHADOW(-2, 3, SHADOW_SIZE_L) FOOTPRINT(Clodsire) OVERWORLD( sPicTable_Clodsire, @@ -3140,6 +3187,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Murkrow, .iconSprite = gMonIcon_Murkrow, .iconPalIndex = 2, + SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Murkrow) OVERWORLD( sPicTable_Murkrow, @@ -3203,6 +3251,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Honchkrow, .iconSprite = gMonIcon_Honchkrow, .iconPalIndex = 2, + SHADOW(5, 7, SHADOW_SIZE_M) FOOTPRINT(Honchkrow) OVERWORLD( sPicTable_Honchkrow, @@ -3268,6 +3317,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Misdreavus, .iconSprite = gMonIcon_Misdreavus, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Misdreavus) OVERWORLD( sPicTable_Misdreavus, @@ -3333,6 +3383,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mismagius, .iconSprite = gMonIcon_Mismagius, .iconPalIndex = 2, + SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Mismagius) OVERWORLD( sPicTable_Mismagius, @@ -3395,8 +3446,9 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Unown, \ .iconSprite = gMonIcon_Unown ##letter, \ .iconPalIndex = 0, \ + SHADOW(0, 3, SHADOW_SIZE_S) \ FOOTPRINT(Unown) \ - OVERWORLD( \ + OVERWORLD( \ sPicTable_Unown ##letter, \ SIZE_32x32, \ SHADOW_SIZE_M, \ @@ -3490,6 +3542,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Wynaut, .iconSprite = gMonIcon_Wynaut, .iconPalIndex = 0, + SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Wynaut) OVERWORLD( sPicTable_Wynaut, @@ -3561,6 +3614,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .iconSpriteFemale = gMonIcon_WobbuffetF, .iconPalIndexFemale = 0, #endif + SHADOW(-3, 8, SHADOW_SIZE_M) FOOTPRINT(Wobbuffet) OVERWORLD( sPicTable_Wobbuffet, @@ -3628,6 +3682,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Girafarig, .iconSprite = gMonIcon_Girafarig, .iconPalIndex = 1, + SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Girafarig) OVERWORLD( sPicTable_Girafarig, @@ -3691,6 +3746,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Farigiraf, .iconSprite = gMonIcon_Farigiraf, .iconPalIndex = 0, + SHADOW(11, 13, SHADOW_SIZE_L) FOOTPRINT(Farigiraf) OVERWORLD( sPicTable_Farigiraf, @@ -3754,6 +3810,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Pineco, .iconSprite = gMonIcon_Pineco, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Pineco) OVERWORLD( sPicTable_Pineco, @@ -3816,6 +3873,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Forretress, .iconSprite = gMonIcon_Forretress, .iconPalIndex = 2, + SHADOW(0, 6, SHADOW_SIZE_L) FOOTPRINT(Forretress) OVERWORLD( sPicTable_Forretress, @@ -3885,6 +3943,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dunsparce, .iconSprite = gMonIcon_Dunsparce, .iconPalIndex = 0, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Dunsparce) OVERWORLD( sPicTable_Dunsparce, @@ -3949,6 +4008,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dudunsparce, .iconSprite = gMonIcon_Dudunsparce, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_L) FOOTPRINT(Dudunsparce) OVERWORLD( sPicTable_DudunsparceTwoSegment, @@ -4010,6 +4070,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dudunsparce, .iconSprite = gMonIcon_Dudunsparce, .iconPalIndex = 0, + SHADOW(4, 4, SHADOW_SIZE_L) FOOTPRINT(Dudunsparce) OVERWORLD( sPicTable_DudunsparceThreeSegment, @@ -4079,6 +4140,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Gligar, .iconSprite = gMonIcon_Gligar, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Gligar) OVERWORLD( sPicTable_Gligar, @@ -4144,6 +4206,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Gliscor, .iconSprite = gMonIcon_Gliscor, .iconPalIndex = 2, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Gliscor) OVERWORLD( sPicTable_Gliscor, @@ -4211,6 +4274,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Snubbull, .iconSprite = gMonIcon_Snubbull, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Snubbull) OVERWORLD( sPicTable_Snubbull, @@ -4281,6 +4345,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Granbull, .iconSprite = gMonIcon_Granbull, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_L) FOOTPRINT(Granbull) OVERWORLD( sPicTable_Granbull, @@ -4354,6 +4419,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Qwilfish, .iconSprite = gMonIcon_Qwilfish, .iconPalIndex = 0, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Qwilfish) OVERWORLD( sPicTable_Qwilfish, @@ -4419,6 +4485,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_QwilfishHisuian, .iconSprite = gMonIcon_QwilfishHisuian, .iconPalIndex = 1, + SHADOW(-5, 4, SHADOW_SIZE_S) FOOTPRINT(Qwilfish) OVERWORLD( sPicTable_QwilfishHisuian, @@ -4482,6 +4549,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Overqwil, .iconSprite = gMonIcon_Overqwil, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Overqwil) OVERWORLD( sPicTable_Overqwil, @@ -4552,6 +4620,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Shuckle, .iconSprite = gMonIcon_Shuckle, .iconPalIndex = 1, + SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Shuckle) OVERWORLD( sPicTable_Shuckle, @@ -4619,6 +4688,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Heracross, .iconSprite = gMonIcon_Heracross, .iconPalIndex = 0, + SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Heracross) OVERWORLD( sPicTable_Heracross, @@ -4683,6 +4753,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HeracrossMega, .iconSprite = gMonIcon_HeracrossMega, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Heracross) .isMegaEvolution = TRUE, .levelUpLearnset = sHeracrossLevelUpLearnset, @@ -4748,6 +4819,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sneasel, .iconSprite = gMonIcon_Sneasel, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( sPicTable_Sneasel, @@ -4819,6 +4891,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Weavile, .iconSprite = gMonIcon_Weavile, .iconPalIndex = 0, + SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Weavile) OVERWORLD( sPicTable_Weavile, @@ -4887,6 +4960,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_SneaselHisuian, .iconSprite = gMonIcon_SneaselHisuian, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( sPicTable_SneaselHisuian, @@ -4951,6 +5025,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sneasler, .iconSprite = gMonIcon_Sneasler, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Sneasler) OVERWORLD( sPicTable_Sneasler, @@ -5020,6 +5095,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Teddiursa, .iconSprite = gMonIcon_Teddiursa, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Teddiursa) OVERWORLD( sPicTable_Teddiursa, @@ -5090,6 +5166,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ursaring, .iconSprite = gMonIcon_Ursaring, .iconPalIndex = 2, + SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Ursaring) OVERWORLD( sPicTable_Ursaring, @@ -5152,6 +5229,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ursaluna, .iconSprite = gMonIcon_Ursaluna, .iconPalIndex = 2, + SHADOW(1, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ursaluna) OVERWORLD( sPicTable_Ursaluna, @@ -5213,6 +5291,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_UrsalunaBloodmoon, .iconSprite = gMonIcon_UrsalunaBloodmoon, .iconPalIndex = 2, + SHADOW(6, 11, SHADOW_SIZE_L) FOOTPRINT(Ursaluna) .levelUpLearnset = sUrsalunaBloodmoonLevelUpLearnset, .teachableLearnset = sUrsalunaBloodmoonTeachableLearnset, @@ -5269,6 +5348,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Slugma, .iconSprite = gMonIcon_Slugma, .iconPalIndex = 0, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Slugma) OVERWORLD( sPicTable_Slugma, @@ -5338,6 +5418,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Magcargo, .iconSprite = gMonIcon_Magcargo, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Magcargo) OVERWORLD( sPicTable_Magcargo, @@ -5404,6 +5485,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Swinub, .iconSprite = gMonIcon_Swinub, .iconPalIndex = 2, + SHADOW(-3, -6, SHADOW_SIZE_S) FOOTPRINT(Swinub) OVERWORLD( sPicTable_Swinub, @@ -5475,6 +5557,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Piloswine, .iconSprite = gMonIcon_Piloswine, .iconPalIndex = 2, + SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Piloswine) OVERWORLD( sPicTable_Piloswine, @@ -5545,6 +5628,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mamoswine, .iconSprite = gMonIcon_Mamoswine, .iconPalIndex = 2, + SHADOW(7, 7, SHADOW_SIZE_L) FOOTPRINT(Mamoswine) OVERWORLD( sPicTable_Mamoswine, @@ -5620,6 +5704,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Corsola, .iconSprite = gMonIcon_Corsola, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Corsola) OVERWORLD( sPicTable_Corsola, @@ -5683,6 +5768,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_CorsolaGalarian, .iconSprite = gMonIcon_CorsolaGalarian, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Corsola) OVERWORLD( sPicTable_CorsolaGalarian, @@ -5747,6 +5833,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Cursola, .iconSprite = gMonIcon_Cursola, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Cursola) OVERWORLD( sPicTable_Cursola, @@ -5814,6 +5901,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Remoraid, .iconSprite = gMonIcon_Remoraid, .iconPalIndex = 0, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Remoraid) OVERWORLD( sPicTable_Remoraid, @@ -5886,6 +5974,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Octillery, .iconSprite = gMonIcon_Octillery, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Octillery) OVERWORLD( sPicTable_Octillery, @@ -5948,6 +6037,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Delibird, .iconSprite = gMonIcon_Delibird, .iconPalIndex = 1, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Delibird) OVERWORLD( sPicTable_Delibird, @@ -6012,6 +6102,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mantyke, .iconSprite = gMonIcon_Mantyke, .iconPalIndex = 0, + SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Mantyke) OVERWORLD( sPicTable_Mantyke, @@ -6082,6 +6173,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mantine, .iconSprite = gMonIcon_Mantine, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Mantine) OVERWORLD( sPicTable_Mantine, @@ -6146,6 +6238,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Skarmory, .iconSprite = gMonIcon_Skarmory, .iconPalIndex = 0, + SHADOW(2, 9, SHADOW_SIZE_M) FOOTPRINT(Skarmory) OVERWORLD( sPicTable_Skarmory, @@ -6209,6 +6302,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Houndour, .iconSprite = gMonIcon_Houndour, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Houndour) OVERWORLD( sPicTable_Houndour, @@ -6275,6 +6369,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Houndoom, .iconSprite = gMonIcon_Houndoom, .iconPalIndex = 0, + SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) OVERWORLD( sPicTable_Houndoom, @@ -6337,6 +6432,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HoundoomMega, .iconSprite = gMonIcon_HoundoomMega, .iconPalIndex = 0, + SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) .isMegaEvolution = TRUE, .levelUpLearnset = sHoundoomLevelUpLearnset, @@ -6395,6 +6491,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Phanpy, .iconSprite = gMonIcon_Phanpy, .iconPalIndex = 0, + SHADOW(3, -2, SHADOW_SIZE_M) FOOTPRINT(Phanpy) OVERWORLD( sPicTable_Phanpy, @@ -6462,6 +6559,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Donphan, .iconSprite = gMonIcon_Donphan, .iconPalIndex = 0, + SHADOW(7, 2, SHADOW_SIZE_L) FOOTPRINT(Donphan) OVERWORLD( sPicTable_Donphan, @@ -6528,6 +6626,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Stantler, .iconSprite = gMonIcon_Stantler, .iconPalIndex = 2, + SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Stantler) OVERWORLD( sPicTable_Stantler, @@ -6592,6 +6691,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Wyrdeer, .iconSprite = gMonIcon_Wyrdeer, .iconPalIndex = 2, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Wyrdeer) OVERWORLD( sPicTable_Wyrdeer, @@ -6659,6 +6759,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Smeargle, .iconSprite = gMonIcon_Smeargle, .iconPalIndex = 1, + SHADOW(6, 7, SHADOW_SIZE_S) FOOTPRINT(Smeargle) OVERWORLD( sPicTable_Smeargle, @@ -6728,6 +6829,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Miltank, .iconSprite = gMonIcon_Miltank, .iconPalIndex = 0, + SHADOW(-3, 4, SHADOW_SIZE_M) FOOTPRINT(Miltank) OVERWORLD( sPicTable_Miltank, @@ -6802,6 +6904,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Raikou, .iconSprite = gMonIcon_Raikou, .iconPalIndex = 2, + SHADOW(-4, 7, SHADOW_SIZE_L) FOOTPRINT(Raikou) OVERWORLD( sPicTable_Raikou, @@ -6877,6 +6980,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Entei, .iconSprite = gMonIcon_Entei, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_L) FOOTPRINT(Entei) OVERWORLD( sPicTable_Entei, @@ -6952,6 +7056,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Suicune, .iconSprite = gMonIcon_Suicune, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Suicune) OVERWORLD( sPicTable_Suicune, @@ -7016,6 +7121,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Larvitar, .iconSprite = gMonIcon_Larvitar, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Larvitar) OVERWORLD( sPicTable_Larvitar, @@ -7078,6 +7184,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Pupitar, .iconSprite = gMonIcon_Pupitar, .iconPalIndex = 2, + SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Pupitar) OVERWORLD( sPicTable_Pupitar, @@ -7146,6 +7253,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Tyranitar, .iconSprite = gMonIcon_Tyranitar, .iconPalIndex = 4, + SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Tyranitar) OVERWORLD( sPicTable_Tyranitar, @@ -7209,6 +7317,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_TyranitarMega, .iconSprite = gMonIcon_TyranitarMega, .iconPalIndex = 1, + SHADOW(-1, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tyranitar) .isMegaEvolution = TRUE, .levelUpLearnset = sTyranitarLevelUpLearnset, @@ -7275,6 +7384,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Lugia, .iconSprite = gMonIcon_Lugia, .iconPalIndex = 0, + SHADOW(2, 17, SHADOW_SIZE_L) FOOTPRINT(Lugia) OVERWORLD( sPicTable_Lugia, @@ -7349,6 +7459,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HoOh, .iconSprite = gMonIcon_HoOh, .iconPalIndex = 1, + SHADOW(1, 17, SHADOW_SIZE_L) FOOTPRINT(HoOh) OVERWORLD( sPicTable_HoOh, @@ -7423,6 +7534,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Celebi, .iconSprite = gMonIcon_Celebi, .iconPalIndex = 1, + SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Celebi) OVERWORLD( sPicTable_Celebi, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 667dc54d0e..e9d566096a 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Treecko, .iconSprite = gMonIcon_Treecko, .iconPalIndex = 1, + SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Treecko) OVERWORLD( sPicTable_Treecko, @@ -113,6 +114,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Grovyle, .iconSprite = gMonIcon_Grovyle, .iconPalIndex = 1, + SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Grovyle) OVERWORLD( sPicTable_Grovyle, @@ -180,6 +182,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sceptile, .iconSprite = gMonIcon_Sceptile, .iconPalIndex = 1, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Sceptile) OVERWORLD( sPicTable_Sceptile, @@ -243,6 +246,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SceptileMega, .iconSprite = gMonIcon_SceptileMega, .iconPalIndex = 1, + SHADOW(3, 11, SHADOW_SIZE_L) FOOTPRINT(Sceptile) .isMegaEvolution = TRUE, .levelUpLearnset = sSceptileLevelUpLearnset, @@ -303,6 +307,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Torchic, .iconSprite = gMonIcon_Torchic, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Torchic) OVERWORLD( sPicTable_Torchic, @@ -370,6 +375,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Combusken, .iconSprite = gMonIcon_Combusken, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Combusken) OVERWORLD( sPicTable_Combusken, @@ -441,6 +447,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Blaziken, .iconSprite = gMonIcon_Blaziken, .iconPalIndex = 0, + SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Blaziken) OVERWORLD( sPicTable_Blaziken, @@ -504,6 +511,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_BlazikenMega, .iconSprite = gMonIcon_BlazikenMega, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Blaziken) .isMegaEvolution = TRUE, .levelUpLearnset = sBlazikenLevelUpLearnset, @@ -562,6 +570,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mudkip, .iconSprite = gMonIcon_Mudkip, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Mudkip) OVERWORLD( sPicTable_Mudkip, @@ -624,6 +633,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Marshtomp, .iconSprite = gMonIcon_Marshtomp, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Marshtomp) OVERWORLD( sPicTable_Marshtomp, @@ -691,6 +701,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swampert, .iconSprite = gMonIcon_Swampert, .iconPalIndex = 0, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Swampert) OVERWORLD( sPicTable_Swampert, @@ -754,6 +765,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SwampertMega, .iconSprite = gMonIcon_SwampertMega, .iconPalIndex = 0, + SHADOW(6, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Swampert) .isMegaEvolution = TRUE, .levelUpLearnset = sSwampertLevelUpLearnset, @@ -822,6 +834,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Poochyena, .iconSprite = gMonIcon_Poochyena, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Poochyena) OVERWORLD( sPicTable_Poochyena, @@ -888,6 +901,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mightyena, .iconSprite = gMonIcon_Mightyena, .iconPalIndex = 2, + SHADOW(-2, 6, SHADOW_SIZE_L) FOOTPRINT(Mightyena) OVERWORLD( sPicTable_Mightyena, @@ -964,6 +978,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Zigzagoon, .iconSprite = gMonIcon_Zigzagoon, .iconPalIndex = 2, + SHADOW(-4, 0, SHADOW_SIZE_M) FOOTPRINT(Zigzagoon) OVERWORLD( sPicTable_Zigzagoon, @@ -1033,6 +1048,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Linoone, .iconSprite = gMonIcon_Linoone, .iconPalIndex = 2, + SHADOW(-6, 0, SHADOW_SIZE_L) FOOTPRINT(Linoone) OVERWORLD( sPicTable_Linoone, @@ -1095,6 +1111,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_ZigzagoonGalarian, .iconSprite = gMonIcon_ZigzagoonGalarian, .iconPalIndex = 0, + SHADOW(-5, 0, SHADOW_SIZE_M) FOOTPRINT(Zigzagoon) OVERWORLD( sPicTable_ZigzagoonGalarian, @@ -1159,6 +1176,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LinooneGalarian, .iconSprite = gMonIcon_LinooneGalarian, .iconPalIndex = 0, + SHADOW(-4, 0, SHADOW_SIZE_L) FOOTPRINT(Linoone) OVERWORLD( sPicTable_LinooneGalarian, @@ -1222,6 +1240,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Obstagoon, .iconSprite = gMonIcon_Obstagoon, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Obstagoon) OVERWORLD( sPicTable_Obstagoon, @@ -1293,6 +1312,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wurmple, .iconSprite = gMonIcon_Wurmple, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Wurmple) OVERWORLD( sPicTable_Wurmple, @@ -1356,6 +1376,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Silcoon, .iconSprite = gMonIcon_Silcoon, .iconPalIndex = 2, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Silcoon) OVERWORLD( sPicTable_Silcoon, @@ -1432,6 +1453,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Beautifly, .iconSprite = gMonIcon_Beautifly, .iconPalIndex = 0, + SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Beautifly) OVERWORLD( sPicTable_Beautifly, @@ -1498,6 +1520,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cascoon, .iconSprite = gMonIcon_Cascoon, .iconPalIndex = 2, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Cascoon) OVERWORLD( sPicTable_Cascoon, @@ -1576,6 +1599,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Dustox, .iconSprite = gMonIcon_Dustox, .iconPalIndex = 5, + SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Dustox) OVERWORLD( sPicTable_Dustox, @@ -1639,6 +1663,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lotad, .iconSprite = gMonIcon_Lotad, .iconPalIndex = 4, + SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Lotad) OVERWORLD( sPicTable_Lotad, @@ -1702,6 +1727,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lombre, .iconSprite = gMonIcon_Lombre, .iconPalIndex = 1, + SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Lombre) OVERWORLD( sPicTable_Lombre, @@ -1774,6 +1800,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Ludicolo, .iconSprite = gMonIcon_Ludicolo, .iconPalIndex = 1, + SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Ludicolo) OVERWORLD( sPicTable_Ludicolo, @@ -1837,6 +1864,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Seedot, .iconSprite = gMonIcon_Seedot, .iconPalIndex = 2, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Seedot) OVERWORLD( sPicTable_Seedot, @@ -1904,6 +1932,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Nuzleaf, .iconSprite = gMonIcon_Nuzleaf, .iconPalIndex = 1, + SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Nuzleaf) OVERWORLD( sPicTable_Nuzleaf, @@ -1980,6 +2009,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shiftry, .iconSprite = gMonIcon_Shiftry, .iconPalIndex = 5, + SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Shiftry) OVERWORLD( sPicTable_Shiftry, @@ -2042,6 +2072,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Taillow, .iconSprite = gMonIcon_Taillow, .iconPalIndex = 2, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Taillow) OVERWORLD( sPicTable_Taillow, @@ -2110,6 +2141,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swellow, .iconSprite = gMonIcon_Swellow, .iconPalIndex = 2, + SHADOW(-7, 7, SHADOW_SIZE_M) FOOTPRINT(Swellow) OVERWORLD( sPicTable_Swellow, @@ -2178,6 +2210,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wingull, .iconSprite = gMonIcon_Wingull, .iconPalIndex = 0, + SHADOW(-2, 15, SHADOW_SIZE_S) FOOTPRINT(Wingull) OVERWORLD( sPicTable_Wingull, @@ -2252,6 +2285,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Pelipper, .iconSprite = gMonIcon_Pelipper, .iconPalIndex = 2, + SHADOW(-1, 17, SHADOW_SIZE_M) FOOTPRINT(Pelipper) OVERWORLD( sPicTable_Pelipper, @@ -2322,6 +2356,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Ralts, .iconSprite = gMonIcon_Ralts, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Ralts) OVERWORLD( sPicTable_Ralts, @@ -2384,6 +2419,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kirlia, .iconSprite = gMonIcon_Kirlia, .iconPalIndex = 1, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Kirlia) OVERWORLD( sPicTable_Kirlia, @@ -2452,6 +2488,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gardevoir, .iconSprite = gMonIcon_Gardevoir, .iconPalIndex = 1, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Gardevoir) OVERWORLD( sPicTable_Gardevoir, @@ -2515,6 +2552,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GardevoirMega, .iconSprite = gMonIcon_GardevoirMega, .iconPalIndex = 1, + SHADOW(1, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gardevoir) .isMegaEvolution = TRUE, .levelUpLearnset = sGardevoirLevelUpLearnset, @@ -2582,6 +2620,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gallade, .iconSprite = gMonIcon_Gallade, .iconPalIndex = 1, + SHADOW(4, 13, SHADOW_SIZE_L) FOOTPRINT(Gallade) OVERWORLD( sPicTable_Gallade, @@ -2645,6 +2684,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GalladeMega, .iconSprite = gMonIcon_GalladeMega, .iconPalIndex = 1, + SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Gallade) .isMegaEvolution = TRUE, .levelUpLearnset = sGalladeLevelUpLearnset, @@ -2705,6 +2745,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Surskit, .iconSprite = gMonIcon_Surskit, .iconPalIndex = 0, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Surskit) OVERWORLD( sPicTable_Surskit, @@ -2776,6 +2817,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Masquerain, .iconSprite = gMonIcon_Masquerain, .iconPalIndex = 0, + SHADOW(-4, 17, SHADOW_SIZE_M) FOOTPRINT(Masquerain) OVERWORLD( sPicTable_Masquerain, @@ -2844,6 +2886,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shroomish, .iconSprite = gMonIcon_Shroomish, .iconPalIndex = 1, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Shroomish) OVERWORLD( sPicTable_Shroomish, @@ -2912,6 +2955,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Breloom, .iconSprite = gMonIcon_Breloom, .iconPalIndex = 1, + SHADOW(-4, 9, SHADOW_SIZE_M) FOOTPRINT(Breloom) OVERWORLD( sPicTable_Breloom, @@ -2974,6 +3018,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Slakoth, .iconSprite = gMonIcon_Slakoth, .iconPalIndex = 2, + SHADOW(1, -4, SHADOW_SIZE_M) FOOTPRINT(Slakoth) OVERWORLD( sPicTable_Slakoth, @@ -3036,6 +3081,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Vigoroth, .iconSprite = gMonIcon_Vigoroth, .iconPalIndex = 2, + SHADOW(4, 6, SHADOW_SIZE_M) FOOTPRINT(Vigoroth) OVERWORLD( sPicTable_Vigoroth, @@ -3103,6 +3149,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Slaking, .iconSprite = gMonIcon_Slaking, .iconPalIndex = 2, + SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Slaking) OVERWORLD( sPicTable_Slaking, @@ -3166,6 +3213,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Nincada, .iconSprite = gMonIcon_Nincada, .iconPalIndex = 1, + SHADOW(2, -3, SHADOW_SIZE_M) FOOTPRINT(Nincada) OVERWORLD( sPicTable_Nincada, @@ -3230,6 +3278,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Ninjask, .iconSprite = gMonIcon_Ninjask, .iconPalIndex = 1, + SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Ninjask) OVERWORLD( sPicTable_Ninjask, @@ -3291,6 +3340,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shedinja, .iconSprite = gMonIcon_Shedinja, .iconPalIndex = 1, + SHADOW(-2, 9, SHADOW_SIZE_S) FOOTPRINT(Shedinja) OVERWORLD( sPicTable_Shedinja, @@ -3353,6 +3403,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Whismur, .iconSprite = gMonIcon_Whismur, .iconPalIndex = 1, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Whismur) OVERWORLD( sPicTable_Whismur, @@ -3415,6 +3466,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Loudred, .iconSprite = gMonIcon_Loudred, .iconPalIndex = 2, + SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Loudred) OVERWORLD( sPicTable_Loudred, @@ -3484,6 +3536,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Exploud, .iconSprite = gMonIcon_Exploud, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(Exploud) OVERWORLD( sPicTable_Exploud, @@ -3547,6 +3600,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Makuhita, .iconSprite = gMonIcon_Makuhita, .iconPalIndex = 1, + SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Makuhita) OVERWORLD( sPicTable_Makuhita, @@ -3610,6 +3664,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Hariyama, .iconSprite = gMonIcon_Hariyama, .iconPalIndex = 2, + SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hariyama) OVERWORLD( sPicTable_Hariyama, @@ -3673,6 +3728,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Nosepass, .iconSprite = gMonIcon_Nosepass, .iconPalIndex = 0, + SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Nosepass) OVERWORLD( sPicTable_Nosepass, @@ -3740,6 +3796,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Probopass, .iconSprite = gMonIcon_Probopass, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_L) FOOTPRINT(Probopass) OVERWORLD( sPicTable_Probopass, @@ -3807,6 +3864,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Skitty, .iconSprite = gMonIcon_Skitty, .iconPalIndex = 0, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Skitty) OVERWORLD( sPicTable_Skitty, @@ -3880,6 +3938,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Delcatty, .iconSprite = gMonIcon_Delcatty, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Delcatty) OVERWORLD( sPicTable_Delcatty, @@ -3948,6 +4007,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sableye, .iconSprite = gMonIcon_Sableye, .iconPalIndex = 2, + SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Sableye) OVERWORLD( sPicTable_Sableye, @@ -4012,6 +4072,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SableyeMega, .iconSprite = gMonIcon_SableyeMega, .iconPalIndex = 2, + SHADOW(3, 7, SHADOW_SIZE_S) FOOTPRINT(Sableye) .isMegaEvolution = TRUE, .levelUpLearnset = sSableyeLevelUpLearnset, @@ -4079,6 +4140,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mawile, .iconSprite = gMonIcon_Mawile, .iconPalIndex = 2, + SHADOW(1, 4, SHADOW_SIZE_L) FOOTPRINT(Mawile) OVERWORLD( sPicTable_Mawile, @@ -4144,6 +4206,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MawileMega, .iconSprite = gMonIcon_MawileMega, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mawile) .isMegaEvolution = TRUE, .levelUpLearnset = sMawileLevelUpLearnset, @@ -4204,6 +4267,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Aron, .iconSprite = gMonIcon_Aron, .iconPalIndex = 2, + SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Aron) OVERWORLD( sPicTable_Aron, @@ -4267,6 +4331,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lairon, .iconSprite = gMonIcon_Lairon, .iconPalIndex = 2, + SHADOW(4, 2, SHADOW_SIZE_L) FOOTPRINT(Lairon) OVERWORLD( sPicTable_Lairon, @@ -4335,6 +4400,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Aggron, .iconSprite = gMonIcon_Aggron, .iconPalIndex = 2, + SHADOW(5, 12, SHADOW_SIZE_L) FOOTPRINT(Aggron) OVERWORLD( sPicTable_Aggron, @@ -4399,6 +4465,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AggronMega, .iconSprite = gMonIcon_AggronMega, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Aggron) .isMegaEvolution = TRUE, .levelUpLearnset = sAggronLevelUpLearnset, @@ -4461,6 +4528,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Meditite, .iconSprite = gMonIcon_Meditite, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Meditite) OVERWORLD( sPicTable_Meditite, @@ -4527,6 +4595,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Medicham, .iconSprite = gMonIcon_Medicham, .iconPalIndex = 0, + SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) OVERWORLD( sPicTable_Medicham, @@ -4590,6 +4659,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MedichamMega, .iconSprite = gMonIcon_MedichamMega, .iconPalIndex = 0, + SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) .isMegaEvolution = TRUE, .levelUpLearnset = sMedichamLevelUpLearnset, @@ -4648,6 +4718,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Electrike, .iconSprite = gMonIcon_Electrike, .iconPalIndex = 1, + SHADOW(3, -1, SHADOW_SIZE_M) FOOTPRINT(Electrike) OVERWORLD( sPicTable_Electrike, @@ -4710,6 +4781,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Manectric, .iconSprite = gMonIcon_Manectric, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Manectric) OVERWORLD( sPicTable_Manectric, @@ -4772,6 +4844,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_ManectricMega, .iconSprite = gMonIcon_ManectricMega, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Manectric) .isMegaEvolution = TRUE, .levelUpLearnset = sManectricLevelUpLearnset, @@ -4835,6 +4908,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Plusle, .iconSprite = gMonIcon_Plusle, .iconPalIndex = 0, + SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Plusle) OVERWORLD( sPicTable_Plusle, @@ -4903,6 +4977,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Minun, .iconSprite = gMonIcon_Minun, .iconPalIndex = 0, + SHADOW(-4, 3, SHADOW_SIZE_S) FOOTPRINT(Minun) OVERWORLD( sPicTable_Minun, @@ -4973,6 +5048,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Volbeat, .iconSprite = gMonIcon_Volbeat, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Volbeat) OVERWORLD( sPicTable_Volbeat, @@ -5045,6 +5121,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Illumise, .iconSprite = gMonIcon_Illumise, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Illumise) OVERWORLD( sPicTable_Illumise, @@ -5111,6 +5188,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Budew, .iconSprite = gMonIcon_Budew, .iconPalIndex = 1, + SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Budew) OVERWORLD( sPicTable_Budew, @@ -5180,6 +5258,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Roselia, .iconSprite = gMonIcon_Roselia, .iconPalIndex = 4, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Roselia) OVERWORLD( sPicTable_Roselia, @@ -5257,6 +5336,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Roserade, .iconSprite = gMonIcon_Roserade, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Roserade) OVERWORLD( sPicTable_Roserade, @@ -5326,6 +5406,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gulpin, .iconSprite = gMonIcon_Gulpin, .iconPalIndex = 1, + SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Gulpin) OVERWORLD( sPicTable_Gulpin, @@ -5394,6 +5475,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swalot, .iconSprite = gMonIcon_Swalot, .iconPalIndex = 2, + SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(Swalot) OVERWORLD( sPicTable_Swalot, @@ -5457,6 +5539,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Carvanha, .iconSprite = gMonIcon_Carvanha, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Carvanha) OVERWORLD( sPicTable_Carvanha, @@ -5520,6 +5603,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sharpedo, .iconSprite = gMonIcon_Sharpedo, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Sharpedo) OVERWORLD( sPicTable_Sharpedo, @@ -5585,6 +5669,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SharpedoMega, .iconSprite = gMonIcon_SharpedoMega, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Sharpedo) .isMegaEvolution = TRUE, .levelUpLearnset = sSharpedoLevelUpLearnset, @@ -5643,6 +5728,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wailmer, .iconSprite = gMonIcon_Wailmer, .iconPalIndex = 2, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Wailmer) OVERWORLD( sPicTable_Wailmer, @@ -5706,6 +5792,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wailord, .iconSprite = gMonIcon_Wailord, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Wailord) OVERWORLD( sPicTable_Wailord, @@ -5776,6 +5863,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Numel, .iconSprite = gMonIcon_Numel, .iconPalIndex = 1, + SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Numel) OVERWORLD( sPicTable_Numel, @@ -5847,6 +5935,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Camerupt, .iconSprite = gMonIcon_Camerupt, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_L) FOOTPRINT(Camerupt) OVERWORLD( sPicTable_Camerupt, @@ -5911,6 +6000,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CameruptMega, .iconSprite = gMonIcon_CameruptMega, .iconPalIndex = 0, + SHADOW(1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Camerupt) .isMegaEvolution = TRUE, .levelUpLearnset = sCameruptLevelUpLearnset, @@ -5974,6 +6064,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Torkoal, .iconSprite = gMonIcon_Torkoal, .iconPalIndex = 2, + SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(Torkoal) OVERWORLD( sPicTable_Torkoal, @@ -6037,6 +6128,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spoink, .iconSprite = gMonIcon_Spoink, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Spoink) OVERWORLD( sPicTable_Spoink, @@ -6100,6 +6192,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Grumpig, .iconSprite = gMonIcon_Grumpig, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Grumpig) OVERWORLD( sPicTable_Grumpig, @@ -6167,6 +6260,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spinda, .iconSprite = gMonIcon_Spinda, .iconPalIndex = 1, + SHADOW(2, 6, SHADOW_SIZE_S) FOOTPRINT(Spinda) OVERWORLD( sPicTable_Spinda, @@ -6235,6 +6329,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Trapinch, .iconSprite = gMonIcon_Trapinch, .iconPalIndex = 0, + SHADOW(4, -1, SHADOW_SIZE_S) FOOTPRINT(Trapinch) OVERWORLD( sPicTable_Trapinch, @@ -6302,6 +6397,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Vibrava, .iconSprite = gMonIcon_Vibrava, .iconPalIndex = 1, + SHADOW(-2, 0, SHADOW_SIZE_L) FOOTPRINT(Vibrava) OVERWORLD( sPicTable_Vibrava, @@ -6375,6 +6471,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Flygon, .iconSprite = gMonIcon_Flygon, .iconPalIndex = 1, + SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Flygon) OVERWORLD( sPicTable_Flygon, @@ -6438,6 +6535,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cacnea, .iconSprite = gMonIcon_Cacnea, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Cacnea) OVERWORLD( sPicTable_Cacnea, @@ -6504,6 +6602,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cacturne, .iconSprite = gMonIcon_Cacturne, .iconPalIndex = 1, + SHADOW(-1, 14, SHADOW_SIZE_M) FOOTPRINT(Cacturne) OVERWORLD( sPicTable_Cacturne, @@ -6566,6 +6665,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swablu, .iconSprite = gMonIcon_Swablu, .iconPalIndex = 0, + SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Swablu) OVERWORLD( sPicTable_Swablu, @@ -6628,6 +6728,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Altaria, .iconSprite = gMonIcon_Altaria, .iconPalIndex = 0, + SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Altaria) OVERWORLD( sPicTable_Altaria, @@ -6692,6 +6793,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AltariaMega, .iconSprite = gMonIcon_AltariaMega, .iconPalIndex = 0, + SHADOW(-2, 17, SHADOW_SIZE_L) FOOTPRINT(Altaria) .isMegaEvolution = TRUE, .levelUpLearnset = sAltariaLevelUpLearnset, @@ -6752,6 +6854,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Zangoose, .iconSprite = gMonIcon_Zangoose, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Zangoose) OVERWORLD( sPicTable_Zangoose, @@ -6818,6 +6921,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Seviper, .iconSprite = gMonIcon_Seviper, .iconPalIndex = 2, + SHADOW(-3, 7, SHADOW_SIZE_L) FOOTPRINT(Seviper) OVERWORLD( sPicTable_Seviper, @@ -6890,6 +6994,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lunatone, .iconSprite = gMonIcon_Lunatone, .iconPalIndex = 1, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Lunatone) OVERWORLD( sPicTable_Lunatone, @@ -6961,6 +7066,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Solrock, .iconSprite = gMonIcon_Solrock, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(Solrock) OVERWORLD( sPicTable_Solrock, @@ -7028,6 +7134,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Barboach, .iconSprite = gMonIcon_Barboach, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Barboach) OVERWORLD( sPicTable_Barboach, @@ -7094,6 +7201,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Whiscash, .iconSprite = gMonIcon_Whiscash, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Whiscash) OVERWORLD( sPicTable_Whiscash, @@ -7156,6 +7264,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Corphish, .iconSprite = gMonIcon_Corphish, .iconPalIndex = 0, + SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Corphish) OVERWORLD( sPicTable_Corphish, @@ -7218,6 +7327,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Crawdaunt, .iconSprite = gMonIcon_Crawdaunt, .iconPalIndex = 0, + SHADOW(6, 9, SHADOW_SIZE_M) FOOTPRINT(Crawdaunt) OVERWORLD( sPicTable_Crawdaunt, @@ -7282,6 +7392,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Baltoy, .iconSprite = gMonIcon_Baltoy, .iconPalIndex = 2, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Baltoy) OVERWORLD( sPicTable_Baltoy, @@ -7345,6 +7456,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Claydol, .iconSprite = gMonIcon_Claydol, .iconPalIndex = 0, + SHADOW(0, 18, SHADOW_SIZE_M) FOOTPRINT(Claydol) OVERWORLD( sPicTable_Claydol, @@ -7414,6 +7526,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lileep, .iconSprite = gMonIcon_Lileep, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Lileep) OVERWORLD( sPicTable_Lileep, @@ -7483,6 +7596,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cradily, .iconSprite = gMonIcon_Cradily, .iconPalIndex = 1, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Cradily) OVERWORLD( sPicTable_Cradily, @@ -7551,6 +7665,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Anorith, .iconSprite = gMonIcon_Anorith, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Anorith) OVERWORLD( sPicTable_Anorith, @@ -7619,6 +7734,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Armaldo, .iconSprite = gMonIcon_Armaldo, .iconPalIndex = 2, + SHADOW(-2, 11, SHADOW_SIZE_L) FOOTPRINT(Armaldo) OVERWORLD( sPicTable_Armaldo, @@ -7685,6 +7801,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Feebas, .iconSprite = gMonIcon_Feebas, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Feebas) OVERWORLD( sPicTable_Feebas, @@ -7758,6 +7875,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Milotic, .iconSprite = gMonIcon_Milotic, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Milotic) OVERWORLD( sPicTable_Milotic, @@ -7823,6 +7941,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformNormal, .iconSprite = gMonIcon_CastformNormal, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( sPicTable_CastformNormal, @@ -7889,6 +8008,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformSunny, .iconSprite = gMonIcon_CastformSunny, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( sPicTable_CastformSunny, @@ -7955,6 +8075,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformRainy, .iconSprite = gMonIcon_CastformRainy, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( sPicTable_CastformRainy, @@ -8021,6 +8142,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformSnowy, .iconSprite = gMonIcon_CastformSnowy, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( sPicTable_CastformSnowy, @@ -8091,6 +8213,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kecleon, .iconSprite = gMonIcon_Kecleon, .iconPalIndex = 1, + SHADOW(2, 8, SHADOW_SIZE_S) FOOTPRINT(Kecleon) OVERWORLD( sPicTable_Kecleon, @@ -8160,6 +8283,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shuppet, .iconSprite = gMonIcon_Shuppet, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_S) FOOTPRINT(Shuppet) OVERWORLD( sPicTable_Shuppet, @@ -8227,6 +8351,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Banette, .iconSprite = gMonIcon_Banette, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Banette) OVERWORLD( sPicTable_Banette, @@ -8291,6 +8416,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_BanetteMega, .iconSprite = gMonIcon_BanetteMega, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Banette) .isMegaEvolution = TRUE, .levelUpLearnset = sBanetteLevelUpLearnset, @@ -8356,6 +8482,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Duskull, .iconSprite = gMonIcon_Duskull, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Duskull) OVERWORLD( sPicTable_Duskull, @@ -8425,6 +8552,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Dusclops, .iconSprite = gMonIcon_Dusclops, .iconPalIndex = 0, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Dusclops) OVERWORLD( sPicTable_Dusclops, @@ -8501,6 +8629,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Dusknoir, .iconSprite = gMonIcon_Dusknoir, .iconPalIndex = 2, + SHADOW(6, 13, SHADOW_SIZE_M) FOOTPRINT(Dusknoir) OVERWORLD( sPicTable_Dusknoir, @@ -8568,6 +8697,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Tropius, .iconSprite = gMonIcon_Tropius, .iconPalIndex = 1, + SHADOW(-6, 13, SHADOW_SIZE_L) FOOTPRINT(Tropius) OVERWORLD( sPicTable_Tropius, @@ -8633,6 +8763,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Chingling, .iconSprite = gMonIcon_Chingling, .iconPalIndex = 1, + SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Chingling) OVERWORLD( sPicTable_Chingling, @@ -8705,6 +8836,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Chimecho, .iconSprite = gMonIcon_Chimecho, .iconPalIndex = 0, + SHADOW(-3, 16, SHADOW_SIZE_S) FOOTPRINT(Chimecho) OVERWORLD( sPicTable_Chimecho, @@ -8774,6 +8906,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Absol, .iconSprite = gMonIcon_Absol, .iconPalIndex = 0, + SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Absol) OVERWORLD( sPicTable_Absol, @@ -8839,6 +8972,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AbsolMega, .iconSprite = gMonIcon_AbsolMega, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Absol) .isMegaEvolution = TRUE, .levelUpLearnset = sAbsolLevelUpLearnset, @@ -8904,6 +9038,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Snorunt, .iconSprite = gMonIcon_Snorunt, .iconPalIndex = 2, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Snorunt) OVERWORLD( sPicTable_Snorunt, @@ -8972,6 +9107,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Glalie, .iconSprite = gMonIcon_Glalie, .iconPalIndex = 0, + SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(Glalie) OVERWORLD( sPicTable_Glalie, @@ -9035,6 +9171,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GlalieMega, .iconSprite = gMonIcon_GlalieMega, .iconPalIndex = 0, + SHADOW(3, 18, SHADOW_SIZE_L) FOOTPRINT(Glalie) .isMegaEvolution = TRUE, .levelUpLearnset = sGlalieLevelUpLearnset, @@ -9093,6 +9230,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Froslass, .iconSprite = gMonIcon_Froslass, .iconPalIndex = 0, + SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Froslass) OVERWORLD( sPicTable_Froslass, @@ -9161,6 +9299,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spheal, .iconSprite = gMonIcon_Spheal, .iconPalIndex = 2, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Spheal) OVERWORLD( sPicTable_Spheal, @@ -9227,6 +9366,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sealeo, .iconSprite = gMonIcon_Sealeo, .iconPalIndex = 2, + SHADOW(-1, 2, SHADOW_SIZE_L) FOOTPRINT(Sealeo) OVERWORLD( sPicTable_Sealeo, @@ -9298,6 +9438,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Walrein, .iconSprite = gMonIcon_Walrein, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Walrein) OVERWORLD( sPicTable_Walrein, @@ -9362,6 +9503,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Clamperl, .iconSprite = gMonIcon_Clamperl, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Clamperl) OVERWORLD( sPicTable_Clamperl, @@ -9429,6 +9571,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Huntail, .iconSprite = gMonIcon_Huntail, .iconPalIndex = 0, + SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(Huntail) OVERWORLD( sPicTable_Huntail, @@ -9490,6 +9633,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gorebyss, .iconSprite = gMonIcon_Gorebyss, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_M) FOOTPRINT(Gorebyss) OVERWORLD( sPicTable_Gorebyss, @@ -9558,6 +9702,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Relicanth, .iconSprite = gMonIcon_Relicanth, .iconPalIndex = 2, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Relicanth) OVERWORLD( sPicTable_Relicanth, @@ -9622,6 +9767,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Luvdisc, .iconSprite = gMonIcon_Luvdisc, .iconPalIndex = 0, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Luvdisc) OVERWORLD( sPicTable_Luvdisc, @@ -9686,6 +9832,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Bagon, .iconSprite = gMonIcon_Bagon, .iconPalIndex = 0, + SHADOW(4, 3, SHADOW_SIZE_S) FOOTPRINT(Bagon) OVERWORLD( sPicTable_Bagon, @@ -9749,6 +9896,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shelgon, .iconSprite = gMonIcon_Shelgon, .iconPalIndex = 2, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Shelgon) OVERWORLD( sPicTable_Shelgon, @@ -9818,6 +9966,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Salamence, .iconSprite = gMonIcon_Salamence, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Salamence) OVERWORLD( sPicTable_Salamence, @@ -9882,6 +10031,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SalamenceMega, .iconSprite = gMonIcon_SalamenceMega, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Salamence) .isMegaEvolution = TRUE, .levelUpLearnset = sSalamenceLevelUpLearnset, @@ -9942,6 +10092,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Beldum, .iconSprite = gMonIcon_Beldum, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Beldum) OVERWORLD( sPicTable_Beldum, @@ -10005,6 +10156,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Metang, .iconSprite = gMonIcon_Metang, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Metang) OVERWORLD( sPicTable_Metang, @@ -10073,6 +10225,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Metagross, .iconSprite = gMonIcon_Metagross, .iconPalIndex = 0, + SHADOW(2, -2, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Metagross) OVERWORLD( sPicTable_Metagross, @@ -10137,6 +10290,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MetagrossMega, .iconSprite = gMonIcon_MetagrossMega, .iconPalIndex = 0, + SHADOW(1, 15, SHADOW_SIZE_L) FOOTPRINT(Metagross) .isMegaEvolution = TRUE, .levelUpLearnset = sMetagrossLevelUpLearnset, @@ -10202,6 +10356,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Regirock, .iconSprite = gMonIcon_Regirock, .iconPalIndex = 2, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Regirock) OVERWORLD( sPicTable_Regirock, @@ -10272,6 +10427,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Regice, .iconSprite = gMonIcon_Regice, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Regice) OVERWORLD( sPicTable_Regice, @@ -10343,6 +10499,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Registeel, .iconSprite = gMonIcon_Registeel, .iconPalIndex = 2, + SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Registeel) OVERWORLD( sPicTable_Registeel, @@ -10414,6 +10571,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Latias, .iconSprite = gMonIcon_Latias, .iconPalIndex = 0, + SHADOW(3, 15, SHADOW_SIZE_M) FOOTPRINT(Latias) OVERWORLD( sPicTable_Latias, @@ -10480,6 +10638,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LatiasMega, .iconSprite = gMonIcon_LatiasMega, .iconPalIndex = 2, + SHADOW(-1, 19, SHADOW_SIZE_L) FOOTPRINT(Latias) .isLegendary = TRUE, .isMegaEvolution = TRUE, @@ -10547,6 +10706,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Latios, .iconSprite = gMonIcon_Latios, .iconPalIndex = 0, + SHADOW(1, 17, SHADOW_SIZE_M) FOOTPRINT(Latios) OVERWORLD( sPicTable_Latios, @@ -10613,6 +10773,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LatiosMega, .iconSprite = gMonIcon_LatiosMega, .iconPalIndex = 2, + SHADOW(-1, 19, SHADOW_SIZE_L) FOOTPRINT(Latios) .isLegendary = TRUE, .isMegaEvolution = TRUE, @@ -10680,6 +10841,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kyogre, .iconSprite = gMonIcon_Kyogre, .iconPalIndex = 2, + SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kyogre) OVERWORLD( sPicTable_Kyogre, @@ -10745,6 +10907,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_KyogrePrimal, .iconSprite = gMonIcon_KyogrePrimal, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kyogre) .isLegendary = TRUE, .isPrimalReversion = TRUE, @@ -10812,6 +10975,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Groudon, .iconSprite = gMonIcon_Groudon, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Groudon) OVERWORLD( sPicTable_Groudon, @@ -10878,6 +11042,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GroudonPrimal, .iconSprite = gMonIcon_GroudonPrimal, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Groudon) .isLegendary = TRUE, .isPrimalReversion = TRUE, @@ -10948,6 +11113,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Rayquaza, .iconSprite = gMonIcon_Rayquaza, .iconPalIndex = 1, + SHADOW(0, 17, SHADOW_SIZE_L) FOOTPRINT(Rayquaza) OVERWORLD( sPicTable_Rayquaza, @@ -11016,6 +11182,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_RayquazaMega, .iconSprite = gMonIcon_RayquazaMega, .iconPalIndex = 1, + SHADOW(0, 15, SHADOW_SIZE_L) FOOTPRINT(Rayquaza) .isLegendary = TRUE, .isMegaEvolution = TRUE, @@ -11086,6 +11253,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Jirachi, .iconSprite = gMonIcon_Jirachi, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Jirachi) OVERWORLD( sPicTable_Jirachi, @@ -11157,6 +11325,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysNormal, .iconSprite = gMonIcon_DeoxysNormal, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( sPicTable_DeoxysNormal, @@ -11219,7 +11388,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysAttack, .iconSprite = gMonIcon_DeoxysAttack, .iconPalIndex = 0, - FOOTPRINT(Deoxys) + SHADOW(0, 14, SHADOW_SIZE_M) OVERWORLD( sPicTable_DeoxysAttack, SIZE_32x32, @@ -11281,6 +11450,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysDefense, .iconSprite = gMonIcon_DeoxysDefense, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( sPicTable_DeoxysDefense, @@ -11343,6 +11513,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysSpeed, .iconSprite = gMonIcon_DeoxysSpeed, .iconPalIndex = 0, + SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( sPicTable_DeoxysSpeed, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index e1dbdd160e..c63d6f613b 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Turtwig, .iconSprite = gMonIcon_Turtwig, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Turtwig) OVERWORLD( sPicTable_Turtwig, @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Grotle, .iconSprite = gMonIcon_Grotle, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_L) FOOTPRINT(Grotle) OVERWORLD( sPicTable_Grotle, @@ -183,6 +185,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Torterra, .iconSprite = gMonIcon_Torterra, .iconPalIndex = 1, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Torterra) OVERWORLD( sPicTable_Torterra, @@ -246,6 +249,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Chimchar, .iconSprite = gMonIcon_Chimchar, .iconPalIndex = 1, + SHADOW(4, 3, SHADOW_SIZE_S) FOOTPRINT(Chimchar) OVERWORLD( sPicTable_Chimchar, @@ -310,6 +314,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Monferno, .iconSprite = gMonIcon_Monferno, .iconPalIndex = 0, + SHADOW(-7, 6, SHADOW_SIZE_S) FOOTPRINT(Monferno) OVERWORLD( sPicTable_Monferno, @@ -379,6 +384,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Infernape, .iconSprite = gMonIcon_Infernape, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Infernape) OVERWORLD( sPicTable_Infernape, @@ -445,6 +451,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Piplup, .iconSprite = gMonIcon_Piplup, .iconPalIndex = 0, + SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Piplup) OVERWORLD( sPicTable_Piplup, @@ -511,6 +518,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Prinplup, .iconSprite = gMonIcon_Prinplup, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Prinplup) OVERWORLD( sPicTable_Prinplup, @@ -582,6 +590,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Empoleon, .iconSprite = gMonIcon_Empoleon, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_M) FOOTPRINT(Empoleon) OVERWORLD( sPicTable_Empoleon, @@ -652,6 +661,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Starly, .iconSprite = gMonIcon_Starly, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Starly) OVERWORLD( sPicTable_Starly, @@ -718,6 +728,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Staravia, .iconSprite = gMonIcon_Staravia, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Staravia) OVERWORLD( sPicTable_Staravia, @@ -789,6 +800,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Staraptor, .iconSprite = gMonIcon_Staraptor, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Staraptor) OVERWORLD( sPicTable_Staraptor, @@ -855,6 +867,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bidoof, .iconSprite = gMonIcon_Bidoof, .iconPalIndex = 2, + SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Bidoof) OVERWORLD( sPicTable_Bidoof, @@ -919,6 +932,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bibarel, .iconSprite = gMonIcon_Bibarel, .iconPalIndex = 2, + SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Bibarel) OVERWORLD( sPicTable_Bibarel, @@ -986,6 +1000,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Kricketot, .iconSprite = gMonIcon_Kricketot, .iconPalIndex = 2, + SHADOW(-5, 2, SHADOW_SIZE_S) FOOTPRINT(Kricketot) OVERWORLD( sPicTable_Kricketot, @@ -1053,6 +1068,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Kricketune, .iconSprite = gMonIcon_Kricketune, .iconPalIndex = 2, + SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Kricketune) OVERWORLD( sPicTable_Kricketune, @@ -1119,6 +1135,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Shinx, .iconSprite = gMonIcon_Shinx, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Shinx) OVERWORLD( sPicTable_Shinx, @@ -1185,6 +1202,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Luxio, .iconSprite = gMonIcon_Luxio, .iconPalIndex = 0, + SHADOW(-4, 2, SHADOW_SIZE_M) FOOTPRINT(Luxio) OVERWORLD( sPicTable_Luxio, @@ -1256,6 +1274,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Luxray, .iconSprite = gMonIcon_Luxray, .iconPalIndex = 0, + SHADOW(-1, 10, SHADOW_SIZE_L) FOOTPRINT(Luxray) OVERWORLD( sPicTable_Luxray, @@ -1318,6 +1337,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cranidos, .iconSprite = gMonIcon_Cranidos, .iconPalIndex = 0, + SHADOW(4, 4, SHADOW_SIZE_S) FOOTPRINT(Cranidos) OVERWORLD( sPicTable_Cranidos, @@ -1380,6 +1400,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Rampardos, .iconSprite = gMonIcon_Rampardos, .iconPalIndex = 0, + SHADOW(7, 11, SHADOW_SIZE_L) FOOTPRINT(Rampardos) OVERWORLD( sPicTable_Rampardos, @@ -1442,6 +1463,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Shieldon, .iconSprite = gMonIcon_Shieldon, .iconPalIndex = 1, + SHADOW(3, -1, SHADOW_SIZE_S) FOOTPRINT(Shieldon) OVERWORLD( sPicTable_Shieldon, @@ -1504,6 +1526,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bastiodon, .iconSprite = gMonIcon_Bastiodon, .iconPalIndex = 1, + SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Bastiodon) OVERWORLD( sPicTable_Bastiodon, @@ -1567,6 +1590,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmyPlantCloak, .iconSprite = gMonIcon_BurmyPlantCloak, .iconPalIndex = 1, + SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( sPicTable_BurmyPlantCloak, @@ -1633,6 +1657,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmySandyCloak, .iconSprite = gMonIcon_BurmySandyCloak, .iconPalIndex = 1, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( sPicTable_BurmySandyCloak, @@ -1699,6 +1724,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmyTrashCloak, .iconSprite = gMonIcon_BurmyTrashCloak, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( sPicTable_BurmyTrashCloak, @@ -1766,6 +1792,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamPlantCloak, .iconSprite = gMonIcon_WormadamPlantCloak, .iconPalIndex = 1, + SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( sPicTable_WormadamPlantCloak, @@ -1829,6 +1856,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamSandyCloak, .iconSprite = gMonIcon_WormadamSandyCloak, .iconPalIndex = 1, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( sPicTable_WormadamSandyCloak, @@ -1893,6 +1921,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamTrashCloak, .iconSprite = gMonIcon_WormadamTrashCloak, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( sPicTable_WormadamTrashCloak, @@ -1953,6 +1982,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Mothim, \ .iconSprite = gMonIcon_Mothim, \ .iconPalIndex = 0, \ + SHADOW(-1, 9, SHADOW_SIZE_S) \ FOOTPRINT(Mothim) \ OVERWORLD( \ sPicTable_Mothim, \ @@ -2024,6 +2054,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPaletteFemale = gMonShinyPalette_CombeeF, .iconSprite = gMonIcon_Combee, .iconPalIndex = 0, + SHADOW(-4, 10, SHADOW_SIZE_S) FOOTPRINT(Combee) OVERWORLD( sPicTable_Combee, @@ -2089,6 +2120,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Vespiquen, .iconSprite = gMonIcon_Vespiquen, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Vespiquen) OVERWORLD( sPicTable_Vespiquen, @@ -2153,6 +2185,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Pachirisu, .iconSprite = gMonIcon_Pachirisu, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pachirisu) OVERWORLD( sPicTable_Pachirisu, @@ -2218,6 +2251,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Buizel, .iconSprite = gMonIcon_Buizel, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Buizel) OVERWORLD( sPicTable_Buizel, @@ -2282,6 +2316,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Floatzel, .iconSprite = gMonIcon_Floatzel, .iconPalIndex = 0, + SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Floatzel) OVERWORLD( sPicTable_Floatzel, @@ -2345,6 +2380,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cherubi, .iconSprite = gMonIcon_Cherubi, .iconPalIndex = 1, + SHADOW(-4, -2, SHADOW_SIZE_S) FOOTPRINT(Cherubi) OVERWORLD( sPicTable_Cherubi, @@ -2408,6 +2444,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_CherrimOvercast, .iconSprite = gMonIcon_CherrimOvercast, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Cherrim) OVERWORLD( sPicTable_CherrimOvercast, @@ -2471,6 +2508,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_CherrimSunshine, .iconSprite = gMonIcon_CherrimSunshine, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Cherrim) .levelUpLearnset = sCherrimLevelUpLearnset, .teachableLearnset = sCherrimTeachableLearnset, @@ -2527,6 +2565,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShellosWestSea, .iconSprite = gMonIcon_ShellosWestSea, .iconPalIndex = 0, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Shellos) OVERWORLD( sPicTable_ShellosWestSea, @@ -2590,6 +2629,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShellosEastSea, .iconSprite = gMonIcon_ShellosEastSea, .iconPalIndex = 0, + SHADOW(2, -1, SHADOW_SIZE_S) FOOTPRINT(Shellos) OVERWORLD( sPicTable_ShellosEastSea, @@ -2653,6 +2693,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GastrodonWestSea, .iconSprite = gMonIcon_GastrodonWestSea, .iconPalIndex = 0, + SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Gastrodon) OVERWORLD( sPicTable_GastrodonWestSea, @@ -2714,6 +2755,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GastrodonEastSea, .iconSprite = gMonIcon_GastrodonEastSea, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Gastrodon) OVERWORLD( sPicTable_GastrodonEastSea, @@ -2778,6 +2820,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drifloon, .iconSprite = gMonIcon_Drifloon, .iconPalIndex = 2, + SHADOW(1, 9, SHADOW_SIZE_S) FOOTPRINT(Drifloon) OVERWORLD( sPicTable_Drifloon, @@ -2841,6 +2884,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drifblim, .iconSprite = gMonIcon_Drifblim, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Drifblim) OVERWORLD( sPicTable_Drifblim, @@ -2903,6 +2947,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Buneary, .iconSprite = gMonIcon_Buneary, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_S) FOOTPRINT(Buneary) OVERWORLD( sPicTable_Buneary, @@ -2965,6 +3010,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Lopunny, .iconSprite = gMonIcon_Lopunny, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Lopunny) OVERWORLD( sPicTable_Lopunny, @@ -3028,6 +3074,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_LopunnyMega, .iconSprite = gMonIcon_LopunnyMega, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Lopunny) .isMegaEvolution = TRUE, .levelUpLearnset = sLopunnyLevelUpLearnset, @@ -3086,6 +3133,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Glameow, .iconSprite = gMonIcon_Glameow, .iconPalIndex = 0, + SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Glameow) OVERWORLD( sPicTable_Glameow, @@ -3148,6 +3196,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Purugly, .iconSprite = gMonIcon_Purugly, .iconPalIndex = 0, + SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Purugly) OVERWORLD( sPicTable_Purugly, @@ -3210,6 +3259,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Stunky, .iconSprite = gMonIcon_Stunky, .iconPalIndex = 2, + SHADOW(-1, 0, SHADOW_SIZE_M) FOOTPRINT(Stunky) OVERWORLD( sPicTable_Stunky, @@ -3272,6 +3322,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Skuntank, .iconSprite = gMonIcon_Skuntank, .iconPalIndex = 2, + SHADOW(-3, 6, SHADOW_SIZE_L) FOOTPRINT(Skuntank) OVERWORLD( sPicTable_Skuntank, @@ -3336,6 +3387,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bronzor, .iconSprite = gMonIcon_Bronzor, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Bronzor) OVERWORLD( sPicTable_Bronzor, @@ -3400,6 +3452,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bronzong, .iconSprite = gMonIcon_Bronzong, .iconPalIndex = 0, + SHADOW(5, 12, SHADOW_SIZE_M) FOOTPRINT(Bronzong) OVERWORLD( sPicTable_Bronzong, @@ -3463,6 +3516,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Chatot, .iconSprite = gMonIcon_Chatot, .iconPalIndex = 0, + SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Chatot) OVERWORLD( sPicTable_Chatot, @@ -3527,6 +3581,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Spiritomb, .iconSprite = gMonIcon_Spiritomb, .iconPalIndex = 5, + SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Spiritomb) OVERWORLD( sPicTable_Spiritomb, @@ -3594,6 +3649,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Gible, .iconSprite = gMonIcon_Gible, .iconPalIndex = 0, + SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Gible) OVERWORLD( sPicTable_Gible, @@ -3660,6 +3716,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Gabite, .iconSprite = gMonIcon_Gabite, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Gabite) OVERWORLD( sPicTable_Gabite, @@ -3729,6 +3786,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Garchomp, .iconSprite = gMonIcon_Garchomp, .iconPalIndex = 0, + SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Garchomp) OVERWORLD( sPicTable_Garchomp, @@ -3792,6 +3850,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GarchompMega, .iconSprite = gMonIcon_GarchompMega, .iconPalIndex = 0, + SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Garchomp) .isMegaEvolution = TRUE, .levelUpLearnset = sGarchompLevelUpLearnset, @@ -3850,6 +3909,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Riolu, .iconSprite = gMonIcon_Riolu, .iconPalIndex = 2, + SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Riolu) OVERWORLD( sPicTable_Riolu, @@ -3913,6 +3973,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Lucario, .iconSprite = gMonIcon_Lucario, .iconPalIndex = 2, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Lucario) OVERWORLD( sPicTable_Lucario, @@ -3977,6 +4038,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_LucarioMega, .iconSprite = gMonIcon_LucarioMega, .iconPalIndex = 2, + SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Lucario) .isMegaEvolution = TRUE, .levelUpLearnset = sLucarioLevelUpLearnset, @@ -4041,6 +4103,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconSpriteFemale = gMonIcon_HippopotasF, .iconPalIndexFemale = 1, #endif + SHADOW(2, -1, SHADOW_SIZE_L) FOOTPRINT(Hippopotas) OVERWORLD( sPicTable_Hippopotas, @@ -4109,6 +4172,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconSpriteFemale = gMonIcon_HippowdonF, .iconPalIndexFemale = 1, #endif + NO_SHADOW FOOTPRINT(Hippowdon) OVERWORLD( sPicTable_Hippowdon, @@ -4172,6 +4236,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Skorupi, .iconSprite = gMonIcon_Skorupi, .iconPalIndex = 0, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Skorupi) OVERWORLD( sPicTable_Skorupi, @@ -4235,6 +4300,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drapion, .iconSprite = gMonIcon_Drapion, .iconPalIndex = 2, + SHADOW(-3, 6, SHADOW_SIZE_L) FOOTPRINT(Drapion) OVERWORLD( sPicTable_Drapion, @@ -4302,6 +4368,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Croagunk, .iconSprite = gMonIcon_Croagunk, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Croagunk) OVERWORLD( sPicTable_Croagunk, @@ -4369,6 +4436,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Toxicroak, .iconSprite = gMonIcon_Toxicroak, .iconPalIndex = 0, + SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Toxicroak) OVERWORLD( sPicTable_Toxicroak, @@ -4432,6 +4500,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Carnivine, .iconSprite = gMonIcon_Carnivine, .iconPalIndex = 1, + SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Carnivine) OVERWORLD( sPicTable_Carnivine, @@ -4499,6 +4568,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Finneon, .iconSprite = gMonIcon_Finneon, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Finneon) OVERWORLD( sPicTable_Finneon, @@ -4565,6 +4635,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Lumineon, .iconSprite = gMonIcon_Lumineon, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Lumineon) OVERWORLD( sPicTable_Lumineon, @@ -4632,6 +4703,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Snover, .iconSprite = gMonIcon_Snover, .iconPalIndex = 1, + SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Snover) OVERWORLD( sPicTable_Snover, @@ -4698,6 +4770,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Abomasnow, .iconSprite = gMonIcon_Abomasnow, .iconPalIndex = 1, + SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Abomasnow) OVERWORLD( sPicTable_Abomasnow, @@ -4763,6 +4836,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_AbomasnowMega, .iconSprite = gMonIcon_AbomasnowMega, .iconPalIndex = 1, + SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Abomasnow) .isMegaEvolution = TRUE, .levelUpLearnset = sAbomasnowLevelUpLearnset, @@ -4823,6 +4897,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Rotom, .iconSprite = gMonIcon_Rotom, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Rotom) OVERWORLD( sPicTable_Rotom, @@ -4895,6 +4970,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomHeat, .iconSprite = gMonIcon_RotomHeat, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomHeat, @@ -4960,6 +5036,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomWash, .iconSprite = gMonIcon_RotomWash, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomWash, @@ -5024,6 +5101,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomFrost, .iconSprite = gMonIcon_RotomFrost, .iconPalIndex = 5, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomFrost, @@ -5089,6 +5167,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomFan, .iconSprite = gMonIcon_RotomFan, .iconPalIndex = 0, + SHADOW(4, 9, SHADOW_SIZE_S) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomFan, @@ -5153,6 +5232,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomMow, .iconSprite = gMonIcon_RotomMow, .iconPalIndex = 0, + SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomMow, @@ -5225,6 +5305,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Uxie, .iconSprite = gMonIcon_Uxie, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_S) FOOTPRINT(Uxie) OVERWORLD( sPicTable_Uxie, @@ -5298,6 +5379,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Mesprit, .iconSprite = gMonIcon_Mesprit, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Mesprit) OVERWORLD( sPicTable_Mesprit, @@ -5370,6 +5452,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Azelf, .iconSprite = gMonIcon_Azelf, .iconPalIndex = 0, + SHADOW(0, 17, SHADOW_SIZE_S) FOOTPRINT(Azelf) OVERWORLD( sPicTable_Azelf, @@ -5442,6 +5525,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Dialga, .iconSprite = gMonIcon_Dialga, .iconPalIndex = 2, + SHADOW(4, 12, SHADOW_SIZE_L) FOOTPRINT(Dialga) OVERWORLD( sPicTable_Dialga, @@ -5507,6 +5591,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_DialgaOrigin, .iconSprite = gMonIcon_DialgaOrigin, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Dialga) OVERWORLD( sPicTable_DialgaOrigin, @@ -5582,6 +5667,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Palkia, .iconSprite = gMonIcon_Palkia, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Palkia) OVERWORLD( sPicTable_Palkia, @@ -5647,6 +5733,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_PalkiaOrigin, .iconSprite = gMonIcon_PalkiaOrigin, .iconPalIndex = 2, + SHADOW(-3, 14, SHADOW_SIZE_L) FOOTPRINT(Palkia) OVERWORLD( sPicTable_PalkiaOrigin, @@ -5720,6 +5807,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Heatran, .iconSprite = gMonIcon_Heatran, .iconPalIndex = 0, + SHADOW(2, 2, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Heatran) OVERWORLD( sPicTable_Heatran, @@ -5790,6 +5878,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Regigigas, .iconSprite = gMonIcon_Regigigas, .iconPalIndex = 0, + SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Regigigas) OVERWORLD( sPicTable_Regigigas, @@ -5862,6 +5951,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GiratinaAltered, .iconSprite = gMonIcon_GiratinaAltered, .iconPalIndex = 0, + SHADOW(3, 11, SHADOW_SIZE_L) FOOTPRINT(GiratinaAltered) OVERWORLD( sPicTable_GiratinaAltered, @@ -5928,6 +6018,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GiratinaOrigin, .iconSprite = gMonIcon_GiratinaOrigin, .iconPalIndex = 0, + SHADOW(0, 18, SHADOW_SIZE_L) FOOTPRINT(GiratinaOrigin) OVERWORLD( sPicTable_GiratinaOrigin, @@ -6002,6 +6093,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cresselia, .iconSprite = gMonIcon_Cresselia, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Cresselia) OVERWORLD( sPicTable_Cresselia, @@ -6073,6 +6165,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Phione, .iconSprite = gMonIcon_Phione, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Phione) OVERWORLD( sPicTable_Phione, @@ -6143,6 +6236,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Manaphy, .iconSprite = gMonIcon_Manaphy, .iconPalIndex = 0, + SHADOW(-5, 8, SHADOW_SIZE_S) FOOTPRINT(Manaphy) OVERWORLD( sPicTable_Manaphy, @@ -6216,6 +6310,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Darkrai, .iconSprite = gMonIcon_Darkrai, .iconPalIndex = 0, + SHADOW(4, 12, SHADOW_SIZE_M) FOOTPRINT(Darkrai) OVERWORLD( sPicTable_Darkrai, @@ -6291,6 +6386,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShayminLand, .iconSprite = gMonIcon_ShayminLand, .iconPalIndex = 1, + SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Shaymin) OVERWORLD( sPicTable_ShayminLand, @@ -6363,6 +6459,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShayminSky, .iconSprite = gMonIcon_ShayminSky, .iconPalIndex = 1, + SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Shaymin) .isMythical = TRUE, .isFrontierBanned = TRUE, @@ -6434,6 +6531,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .palette = gMonPalette_Arceus ##typeName, \ .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ ARCEUS_ICON(typeName, iconPal) \ + SHADOW(-1, 15, SHADOW_SIZE_XL_BATTLE_ONLY) \ FOOTPRINT(Arceus) \ OVERWORLD( \ sPicTable_Arceus ##typeName, \ diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index 5e40f94469..9445c57a43 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Victini, .iconSprite = gMonIcon_Victini, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Victini) OVERWORLD( sPicTable_Victini, @@ -116,6 +117,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Snivy, .iconSprite = gMonIcon_Snivy, .iconPalIndex = 1, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Snivy) OVERWORLD( sPicTable_Snivy, @@ -178,6 +180,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Servine, .iconSprite = gMonIcon_Servine, .iconPalIndex = 1, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Servine) OVERWORLD( sPicTable_Servine, @@ -239,6 +242,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Serperior, .iconSprite = gMonIcon_Serperior, .iconPalIndex = 1, + SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Serperior) OVERWORLD( sPicTable_Serperior, @@ -301,6 +305,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tepig, .iconSprite = gMonIcon_Tepig, .iconPalIndex = 0, + SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Tepig) OVERWORLD( sPicTable_Tepig, @@ -363,6 +368,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pignite, .iconSprite = gMonIcon_Pignite, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Pignite) OVERWORLD( sPicTable_Pignite, @@ -425,6 +431,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Emboar, .iconSprite = gMonIcon_Emboar, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_L) FOOTPRINT(Emboar) OVERWORLD( sPicTable_Emboar, @@ -487,6 +494,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Oshawott, .iconSprite = gMonIcon_Oshawott, .iconPalIndex = 0, + SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Oshawott) OVERWORLD( sPicTable_Oshawott, @@ -549,6 +557,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Dewott, .iconSprite = gMonIcon_Dewott, .iconPalIndex = 0, + SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Dewott) OVERWORLD( sPicTable_Dewott, @@ -611,6 +620,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Samurott, .iconSprite = gMonIcon_Samurott, .iconPalIndex = 2, + SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Samurott) OVERWORLD( sPicTable_Samurott, @@ -673,6 +683,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SamurottHisuian, .iconSprite = gMonIcon_SamurottHisuian, .iconPalIndex = 0, + SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Samurott) OVERWORLD( sPicTable_SamurottHisuian, @@ -738,6 +749,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Patrat, .iconSprite = gMonIcon_Patrat, .iconPalIndex = 2, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Patrat) OVERWORLD( sPicTable_Patrat, @@ -800,6 +812,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Watchog, .iconSprite = gMonIcon_Watchog, .iconPalIndex = 2, + SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Watchog) OVERWORLD( sPicTable_Watchog, @@ -862,6 +875,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lillipup, .iconSprite = gMonIcon_Lillipup, .iconPalIndex = 2, + SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Lillipup) OVERWORLD( sPicTable_Lillipup, @@ -924,6 +938,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Herdier, .iconSprite = gMonIcon_Herdier, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_M) FOOTPRINT(Herdier) OVERWORLD( sPicTable_Herdier, @@ -991,6 +1006,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Stoutland, .iconSprite = gMonIcon_Stoutland, .iconPalIndex = 2, + SHADOW(-4, 9, SHADOW_SIZE_L) FOOTPRINT(Stoutland) OVERWORLD( sPicTable_Stoutland, @@ -1053,6 +1069,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Purrloin, .iconSprite = gMonIcon_Purrloin, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Purrloin) OVERWORLD( sPicTable_Purrloin, @@ -1115,6 +1132,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Liepard, .iconSprite = gMonIcon_Liepard, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Liepard) OVERWORLD( sPicTable_Liepard, @@ -1177,6 +1195,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pansage, .iconSprite = gMonIcon_Pansage, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Pansage) OVERWORLD( sPicTable_Pansage, @@ -1239,6 +1258,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simisage, .iconSprite = gMonIcon_Simisage, .iconPalIndex = 1, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Simisage) OVERWORLD( sPicTable_Simisage, @@ -1302,6 +1322,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pansear, .iconSprite = gMonIcon_Pansear, .iconPalIndex = 2, + SHADOW(1, 3, SHADOW_SIZE_S) FOOTPRINT(Pansear) OVERWORLD( sPicTable_Pansear, @@ -1365,6 +1386,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simisear, .iconSprite = gMonIcon_Simisear, .iconPalIndex = 2, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Simisear) OVERWORLD( sPicTable_Simisear, @@ -1427,6 +1449,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Panpour, .iconSprite = gMonIcon_Panpour, .iconPalIndex = 2, + SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Panpour) OVERWORLD( sPicTable_Panpour, @@ -1489,6 +1512,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simipour, .iconSprite = gMonIcon_Simipour, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Simipour) OVERWORLD( sPicTable_Simipour, @@ -1552,6 +1576,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Munna, .iconSprite = gMonIcon_Munna, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Munna) OVERWORLD( sPicTable_Munna, @@ -1615,6 +1640,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Musharna, .iconSprite = gMonIcon_Musharna, .iconPalIndex = 0, + SHADOW(6, 10, SHADOW_SIZE_M) FOOTPRINT(Musharna) OVERWORLD( sPicTable_Musharna, @@ -1677,6 +1703,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pidove, .iconSprite = gMonIcon_Pidove, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pidove) OVERWORLD( sPicTable_Pidove, @@ -1739,6 +1766,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tranquill, .iconSprite = gMonIcon_Tranquill, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Tranquill) OVERWORLD( sPicTable_Tranquill, @@ -1814,6 +1842,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_UnfezantF, .iconPalIndex = 1, .iconPalIndexFemale = 1, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Unfezant) OVERWORLD( sPicTable_Unfezant, @@ -1876,6 +1905,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Blitzle, .iconSprite = gMonIcon_Blitzle, .iconPalIndex = 2, + SHADOW(3, 9, SHADOW_SIZE_M) FOOTPRINT(Blitzle) OVERWORLD( sPicTable_Blitzle, @@ -1938,6 +1968,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zebstrika, .iconSprite = gMonIcon_Zebstrika, .iconPalIndex = 2, + SHADOW(-2, 13, SHADOW_SIZE_M) FOOTPRINT(Zebstrika) OVERWORLD( sPicTable_Zebstrika, @@ -2006,6 +2037,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Roggenrola, .iconSprite = gMonIcon_Roggenrola, .iconPalIndex = 2, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Roggenrola) OVERWORLD( sPicTable_Roggenrola, @@ -2075,6 +2107,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Boldore, .iconSprite = gMonIcon_Boldore, .iconPalIndex = 0, + SHADOW(1, 3, SHADOW_SIZE_L) FOOTPRINT(Boldore) OVERWORLD( sPicTable_Boldore, @@ -2149,6 +2182,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gigalith, .iconSprite = gMonIcon_Gigalith, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gigalith) OVERWORLD( sPicTable_Gigalith, @@ -2212,6 +2246,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Woobat, .iconSprite = gMonIcon_Woobat, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_S) FOOTPRINT(Woobat) OVERWORLD( sPicTable_Woobat, @@ -2275,6 +2310,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swoobat, .iconSprite = gMonIcon_Swoobat, .iconPalIndex = 0, + SHADOW(-1, 17, SHADOW_SIZE_M) FOOTPRINT(Swoobat) OVERWORLD( sPicTable_Swoobat, @@ -2338,6 +2374,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Drilbur, .iconSprite = gMonIcon_Drilbur, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Drilbur) OVERWORLD( sPicTable_Drilbur, @@ -2401,6 +2438,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Excadrill, .iconSprite = gMonIcon_Excadrill, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Excadrill) OVERWORLD( sPicTable_Excadrill, @@ -2465,6 +2503,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Audino, .iconSprite = gMonIcon_Audino, .iconPalIndex = 1, + SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Audino) OVERWORLD( sPicTable_Audino, @@ -2531,6 +2570,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_AudinoMega, .iconSprite = gMonIcon_AudinoMega, .iconPalIndex = 1, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Audino) .isMegaEvolution = TRUE, .levelUpLearnset = sAudinoLevelUpLearnset, @@ -2590,6 +2630,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Timburr, .iconSprite = gMonIcon_Timburr, .iconPalIndex = 1, + SHADOW(-4, 2, SHADOW_SIZE_S) FOOTPRINT(Timburr) OVERWORLD( sPicTable_Timburr, @@ -2652,6 +2693,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gurdurr, .iconSprite = gMonIcon_Gurdurr, .iconPalIndex = 1, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Gurdurr) OVERWORLD( sPicTable_Gurdurr, @@ -2714,6 +2756,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Conkeldurr, .iconSprite = gMonIcon_Conkeldurr, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Conkeldurr) OVERWORLD( sPicTable_Conkeldurr, @@ -2776,6 +2819,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tympole, .iconSprite = gMonIcon_Tympole, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Tympole) OVERWORLD( sPicTable_Tympole, @@ -2838,6 +2882,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Palpitoad, .iconSprite = gMonIcon_Palpitoad, .iconPalIndex = 2, + SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Palpitoad) OVERWORLD( sPicTable_Palpitoad, @@ -2905,6 +2950,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Seismitoad, .iconSprite = gMonIcon_Seismitoad, .iconPalIndex = 0, + SHADOW(4, 10, SHADOW_SIZE_L) FOOTPRINT(Seismitoad) OVERWORLD( sPicTable_Seismitoad, @@ -2968,6 +3014,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Throh, .iconSprite = gMonIcon_Throh, .iconPalIndex = 0, + SHADOW(3, 4, SHADOW_SIZE_M) FOOTPRINT(Throh) OVERWORLD( sPicTable_Throh, @@ -3032,6 +3079,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sawk, .iconSprite = gMonIcon_Sawk, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(Sawk) OVERWORLD( sPicTable_Sawk, @@ -3095,6 +3143,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sewaddle, .iconSprite = gMonIcon_Sewaddle, .iconPalIndex = 1, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Sewaddle) OVERWORLD( sPicTable_Sewaddle, @@ -3158,6 +3207,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swadloon, .iconSprite = gMonIcon_Swadloon, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_L) FOOTPRINT(Swadloon) OVERWORLD( sPicTable_Swadloon, @@ -3226,6 +3276,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Leavanny, .iconSprite = gMonIcon_Leavanny, .iconPalIndex = 1, + SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Leavanny) OVERWORLD( sPicTable_Leavanny, @@ -3293,6 +3344,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Venipede, .iconSprite = gMonIcon_Venipede, .iconPalIndex = 1, + SHADOW(-2, -3, SHADOW_SIZE_M) FOOTPRINT(Venipede) OVERWORLD( sPicTable_Venipede, @@ -3360,6 +3412,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Whirlipede, .iconSprite = gMonIcon_Whirlipede, .iconPalIndex = 2, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Whirlipede) OVERWORLD( sPicTable_Whirlipede, @@ -3432,6 +3485,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scolipede, .iconSprite = gMonIcon_Scolipede, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Scolipede) OVERWORLD( sPicTable_Scolipede, @@ -3501,6 +3555,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cottonee, .iconSprite = gMonIcon_Cottonee, .iconPalIndex = 1, + SHADOW(-1, -5, SHADOW_SIZE_M) FOOTPRINT(Cottonee) OVERWORLD( sPicTable_Cottonee, @@ -3564,6 +3619,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Whimsicott, .iconSprite = gMonIcon_Whimsicott, .iconPalIndex = 1, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Whimsicott) OVERWORLD( sPicTable_Whimsicott, @@ -3628,6 +3684,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Petilil, .iconSprite = gMonIcon_Petilil, .iconPalIndex = 1, + SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Petilil) OVERWORLD( sPicTable_Petilil, @@ -3693,6 +3750,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lilligant, .iconSprite = gMonIcon_Lilligant, .iconPalIndex = 1, + SHADOW(-2, 13, SHADOW_SIZE_M) FOOTPRINT(Lilligant) OVERWORLD( sPicTable_Lilligant, @@ -3758,6 +3816,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LilligantHisuian, .iconSprite = gMonIcon_LilligantHisuian, .iconPalIndex = 1, + SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Lilligant) OVERWORLD( sPicTable_LilligantHisuian, @@ -3825,6 +3884,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinRedStriped, .iconSprite = gMonIcon_BasculinRedStriped, .iconPalIndex = 1, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( sPicTable_BasculinRedStriped, @@ -3889,6 +3949,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinBlueStriped, .iconSprite = gMonIcon_BasculinBlueStriped, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( sPicTable_BasculinBlueStriped, @@ -3954,6 +4015,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinWhiteStriped, .iconSprite = gMonIcon_BasculinWhiteStriped, .iconPalIndex = 0, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( sPicTable_BasculinWhiteStriped, @@ -4018,6 +4080,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculegionMale, .iconSprite = gMonIcon_BasculegionMale, .iconPalIndex = 1, + SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Basculegion) OVERWORLD( sPicTable_BasculegionMale, @@ -4079,6 +4142,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculegionFemale, .iconSprite = gMonIcon_BasculegionFemale, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Basculegion) OVERWORLD( sPicTable_BasculegionFemale, @@ -4144,6 +4208,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sandile, .iconSprite = gMonIcon_Sandile, .iconPalIndex = 1, + SHADOW(4, -5, SHADOW_SIZE_M) FOOTPRINT(Sandile) OVERWORLD( sPicTable_Sandile, @@ -4207,6 +4272,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Krokorok, .iconSprite = gMonIcon_Krokorok, .iconPalIndex = 1, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Krokorok) OVERWORLD( sPicTable_Krokorok, @@ -4275,6 +4341,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Krookodile, .iconSprite = gMonIcon_Krookodile, .iconPalIndex = 0, + SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Krookodile) OVERWORLD( sPicTable_Krookodile, @@ -4337,6 +4404,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Darumaka, .iconSprite = gMonIcon_Darumaka, .iconPalIndex = 0, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Darumaka) OVERWORLD( sPicTable_Darumaka, @@ -4400,6 +4468,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanStandardMode, .iconSprite = gMonIcon_DarmanitanStandardMode, .iconPalIndex = 0, + SHADOW(3, 5, SHADOW_SIZE_L) FOOTPRINT(Darmanitan) OVERWORLD( sPicTable_DarmanitanStandardMode, @@ -4461,6 +4530,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanZenMode, .iconSprite = gMonIcon_DarmanitanZenMode, .iconPalIndex = 0, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Darmanitan) .levelUpLearnset = sDarmanitanLevelUpLearnset, .teachableLearnset = sDarmanitanTeachableLearnset, @@ -4516,6 +4586,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarumakaGalarian, .iconSprite = gMonIcon_DarumakaGalarian, .iconPalIndex = 0, + SHADOW(-3, -1, SHADOW_SIZE_S) FOOTPRINT(Darumaka) OVERWORLD( sPicTable_DarumakaGalarian, @@ -4580,6 +4651,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanGalarianStandardMode, .iconSprite = gMonIcon_DarmanitanGalarianStandardMode, .iconPalIndex = 0, + SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Darmanitan) OVERWORLD( sPicTable_DarmanitanGalarianStandardMode, @@ -4643,6 +4715,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanGalarianZenMode, .iconSprite = gMonIcon_DarmanitanGalarianZenMode, .iconPalIndex = 0, + SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Darmanitan) .isGalarianForm = TRUE, .levelUpLearnset = sDarmanitanGalarianLevelUpLearnset, @@ -4702,6 +4775,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Maractus, .iconSprite = gMonIcon_Maractus, .iconPalIndex = 1, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Maractus) OVERWORLD( sPicTable_Maractus, @@ -4766,6 +4840,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Dwebble, .iconSprite = gMonIcon_Dwebble, .iconPalIndex = 0, + SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Dwebble) OVERWORLD( sPicTable_Dwebble, @@ -4829,6 +4904,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Crustle, .iconSprite = gMonIcon_Crustle, .iconPalIndex = 2, + SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Crustle) OVERWORLD( sPicTable_Crustle, @@ -4892,6 +4968,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scraggy, .iconSprite = gMonIcon_Scraggy, .iconPalIndex = 2, + SHADOW(-4, 2, SHADOW_SIZE_S) FOOTPRINT(Scraggy) OVERWORLD( sPicTable_Scraggy, @@ -4956,6 +5033,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scrafty, .iconSprite = gMonIcon_Scrafty, .iconPalIndex = 0, + SHADOW(-2, 9, SHADOW_SIZE_M) FOOTPRINT(Scrafty) OVERWORLD( sPicTable_Scrafty, @@ -5019,6 +5097,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sigilyph, .iconSprite = gMonIcon_Sigilyph, .iconPalIndex = 0, + SHADOW(3, 18, SHADOW_SIZE_S) FOOTPRINT(Sigilyph) OVERWORLD( sPicTable_Sigilyph, @@ -5084,6 +5163,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Yamask, .iconSprite = gMonIcon_Yamask, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Yamask) OVERWORLD( sPicTable_Yamask, @@ -5148,6 +5228,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cofagrigus, .iconSprite = gMonIcon_Cofagrigus, .iconPalIndex = 0, + SHADOW(6, 12, SHADOW_SIZE_M) FOOTPRINT(Cofagrigus) OVERWORLD( sPicTable_Cofagrigus, @@ -5210,6 +5291,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_YamaskGalarian, .iconSprite = gMonIcon_YamaskGalarian, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Yamask) OVERWORLD( sPicTable_YamaskGalarian, @@ -5274,6 +5356,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Runerigus, .iconSprite = gMonIcon_Runerigus, .iconPalIndex = 2, + SHADOW(14, 14, SHADOW_SIZE_M) FOOTPRINT(Runerigus) OVERWORLD( sPicTable_Runerigus, @@ -5337,6 +5420,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tirtouga, .iconSprite = gMonIcon_Tirtouga, .iconPalIndex = 2, + SHADOW(0, -3, SHADOW_SIZE_M) FOOTPRINT(Tirtouga) OVERWORLD( sPicTable_Tirtouga, @@ -5399,6 +5483,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Carracosta, .iconSprite = gMonIcon_Carracosta, .iconPalIndex = 2, + SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Carracosta) OVERWORLD( sPicTable_Carracosta, @@ -5461,6 +5546,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Archen, .iconSprite = gMonIcon_Archen, .iconPalIndex = 0, + SHADOW(-3, -2, SHADOW_SIZE_S) FOOTPRINT(Archen) OVERWORLD( sPicTable_Archen, @@ -5524,6 +5610,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Archeops, .iconSprite = gMonIcon_Archeops, .iconPalIndex = 0, + SHADOW(0, 18, SHADOW_SIZE_M) FOOTPRINT(Archeops) OVERWORLD( sPicTable_Archeops, @@ -5587,6 +5674,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Trubbish, .iconSprite = gMonIcon_Trubbish, .iconPalIndex = 1, + SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Trubbish) OVERWORLD( sPicTable_Trubbish, @@ -5652,6 +5740,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Garbodor, .iconSprite = gMonIcon_Garbodor, .iconPalIndex = 1, + SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Garbodor) OVERWORLD( sPicTable_Garbodor, @@ -5718,6 +5807,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_GarbodorGigantamax, .iconSprite = gMonIcon_GarbodorGigantamax, .iconPalIndex = 0, + NO_SHADOW FOOTPRINT(Garbodor) .isGigantamax = TRUE, .levelUpLearnset = sGarbodorLevelUpLearnset, @@ -5776,6 +5866,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zorua, .iconSprite = gMonIcon_Zorua, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Zorua) OVERWORLD( sPicTable_Zorua, @@ -5839,6 +5930,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zoroark, .iconSprite = gMonIcon_Zoroark, .iconPalIndex = 0, + SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Zoroark) OVERWORLD( sPicTable_Zoroark, @@ -5901,6 +5993,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ZoruaHisuian, .iconSprite = gMonIcon_ZoruaHisuian, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_S) FOOTPRINT(Zorua) OVERWORLD( sPicTable_ZoruaHisuian, @@ -5964,6 +6057,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ZoroarkHisuian, .iconSprite = gMonIcon_ZoroarkHisuian, .iconPalIndex = 0, + SHADOW(11, 13, SHADOW_SIZE_L) FOOTPRINT(Zoroark) OVERWORLD( sPicTable_ZoroarkHisuian, @@ -6029,6 +6123,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Minccino, .iconSprite = gMonIcon_Minccino, .iconPalIndex = 0, + SHADOW(-3, 3, SHADOW_SIZE_S) FOOTPRINT(Minccino) OVERWORLD( sPicTable_Minccino, @@ -6092,6 +6187,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cinccino, .iconSprite = gMonIcon_Cinccino, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Cinccino) OVERWORLD( sPicTable_Cinccino, @@ -6158,6 +6254,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothita, .iconSprite = gMonIcon_Gothita, .iconPalIndex = 2, + SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Gothita) OVERWORLD( sPicTable_Gothita, @@ -6224,6 +6321,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothorita, .iconSprite = gMonIcon_Gothorita, .iconPalIndex = 2, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Gothorita) OVERWORLD( sPicTable_Gothorita, @@ -6289,6 +6387,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothitelle, .iconSprite = gMonIcon_Gothitelle, .iconPalIndex = 2, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Gothitelle) OVERWORLD( sPicTable_Gothitelle, @@ -6353,6 +6452,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Solosis, .iconSprite = gMonIcon_Solosis, .iconPalIndex = 1, + SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Solosis) OVERWORLD( sPicTable_Solosis, @@ -6416,6 +6516,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Duosion, .iconSprite = gMonIcon_Duosion, .iconPalIndex = 1, + SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(Duosion) OVERWORLD( sPicTable_Duosion, @@ -6478,6 +6579,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Reuniclus, .iconSprite = gMonIcon_Reuniclus, .iconPalIndex = 1, + SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Reuniclus) OVERWORLD( sPicTable_Reuniclus, @@ -6540,6 +6642,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ducklett, .iconSprite = gMonIcon_Ducklett, .iconPalIndex = 0, + SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Ducklett) OVERWORLD( sPicTable_Ducklett, @@ -6602,6 +6705,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swanna, .iconSprite = gMonIcon_Swanna, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Swanna) OVERWORLD( sPicTable_Swanna, @@ -6669,6 +6773,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanillite, .iconSprite = gMonIcon_Vanillite, .iconPalIndex = 0, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Vanillite) OVERWORLD( sPicTable_Vanillite, @@ -6736,6 +6841,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanillish, .iconSprite = gMonIcon_Vanillish, .iconPalIndex = 2, + SHADOW(-3, 9, SHADOW_SIZE_S) FOOTPRINT(Vanillish) OVERWORLD( sPicTable_Vanillish, @@ -6802,6 +6908,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanilluxe, .iconSprite = gMonIcon_Vanilluxe, .iconPalIndex = 2, + SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Vanilluxe) OVERWORLD( sPicTable_Vanilluxe, @@ -6864,6 +6971,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingSpring, .iconSprite = gMonIcon_DeerlingSpring, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( sPicTable_DeerlingSpring, @@ -6927,6 +7035,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingSummer, .iconSprite = gMonIcon_DeerlingSummer, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( sPicTable_DeerlingSummer, @@ -6990,6 +7099,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingAutumn, .iconSprite = gMonIcon_DeerlingAutumn, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( sPicTable_DeerlingAutumn, @@ -7053,6 +7163,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingWinter, .iconSprite = gMonIcon_DeerlingWinter, .iconPalIndex = 2, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( sPicTable_DeerlingWinter, @@ -7116,6 +7227,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckSpring, .iconSprite = gMonIcon_SawsbuckSpring, .iconPalIndex = 1, + SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( sPicTable_SawsbuckSpring, @@ -7177,6 +7289,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckSummer, .iconSprite = gMonIcon_SawsbuckSummer, .iconPalIndex = 1, + SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( sPicTable_SawsbuckSummer, @@ -7238,6 +7351,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckAutumn, .iconSprite = gMonIcon_SawsbuckAutumn, .iconPalIndex = 1, + SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( sPicTable_SawsbuckAutumn, @@ -7299,6 +7413,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckWinter, .iconSprite = gMonIcon_SawsbuckWinter, .iconPalIndex = 1, + SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( sPicTable_SawsbuckWinter, @@ -7364,6 +7479,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Emolga, .iconSprite = gMonIcon_Emolga, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Emolga) OVERWORLD( sPicTable_Emolga, @@ -7427,6 +7543,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Karrablast, .iconSprite = gMonIcon_Karrablast, .iconPalIndex = 0, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Karrablast) OVERWORLD( sPicTable_Karrablast, @@ -7489,6 +7606,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Escavalier, .iconSprite = gMonIcon_Escavalier, .iconPalIndex = 0, + SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Escavalier) OVERWORLD( sPicTable_Escavalier, @@ -7553,6 +7671,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Foongus, .iconSprite = gMonIcon_Foongus, .iconPalIndex = 0, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Foongus) OVERWORLD( sPicTable_Foongus, @@ -7618,6 +7737,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Amoonguss, .iconSprite = gMonIcon_Amoonguss, .iconPalIndex = 1, + SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Amoonguss) OVERWORLD( sPicTable_Amoonguss, @@ -7688,6 +7808,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_FrillishF, .iconPalIndex = 0, .iconPalIndexFemale = 1, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Frillish) OVERWORLD( sPicTable_Frillish, @@ -7758,6 +7879,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_JellicentF, .iconPalIndex = 0, .iconPalIndexFemale = 1, + SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Jellicent) OVERWORLD( sPicTable_Jellicent, @@ -7820,6 +7942,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Alomomola, .iconSprite = gMonIcon_Alomomola, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Alomomola) OVERWORLD( sPicTable_Alomomola, @@ -7883,6 +8006,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Joltik, .iconSprite = gMonIcon_Joltik, .iconPalIndex = 0, + SHADOW(0, -5, SHADOW_SIZE_S) FOOTPRINT(Joltik) OVERWORLD( sPicTable_Joltik, @@ -7945,6 +8069,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Galvantula, .iconSprite = gMonIcon_Galvantula, .iconPalIndex = 2, + SHADOW(0, -2, SHADOW_SIZE_L) FOOTPRINT(Galvantula) OVERWORLD( sPicTable_Galvantula, @@ -8008,6 +8133,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ferroseed, .iconSprite = gMonIcon_Ferroseed, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Ferroseed) OVERWORLD( sPicTable_Ferroseed, @@ -8076,6 +8202,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ferrothorn, .iconSprite = gMonIcon_Ferrothorn, .iconPalIndex = 1, + SHADOW(-2, 17, SHADOW_SIZE_M) FOOTPRINT(Ferrothorn) OVERWORLD( sPicTable_Ferrothorn, @@ -8140,6 +8267,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klink, .iconSprite = gMonIcon_Klink, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Klink) OVERWORLD( sPicTable_Klink, @@ -8203,6 +8331,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klang, .iconSprite = gMonIcon_Klang, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Klang) OVERWORLD( sPicTable_Klang, @@ -8266,6 +8395,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klinklang, .iconSprite = gMonIcon_Klinklang, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Klinklang) OVERWORLD( sPicTable_Klinklang, @@ -8329,6 +8459,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tynamo, .iconSprite = gMonIcon_Tynamo, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Tynamo) OVERWORLD( sPicTable_Tynamo, @@ -8392,6 +8523,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Eelektrik, .iconSprite = gMonIcon_Eelektrik, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eelektrik) OVERWORLD( sPicTable_Eelektrik, @@ -8454,6 +8586,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Eelektross, .iconSprite = gMonIcon_Eelektross, .iconPalIndex = 0, + SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Eelektross) OVERWORLD( sPicTable_Eelektross, @@ -8516,6 +8649,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Elgyem, .iconSprite = gMonIcon_Elgyem, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Elgyem) OVERWORLD( sPicTable_Elgyem, @@ -8578,6 +8712,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Beheeyem, .iconSprite = gMonIcon_Beheeyem, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Beheeyem) OVERWORLD( sPicTable_Beheeyem, @@ -8645,6 +8780,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Litwick, .iconSprite = gMonIcon_Litwick, .iconPalIndex = 2, + SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Litwick) OVERWORLD( sPicTable_Litwick, @@ -8712,6 +8848,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lampent, .iconSprite = gMonIcon_Lampent, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Lampent) OVERWORLD( sPicTable_Lampent, @@ -8778,6 +8915,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Chandelure, .iconSprite = gMonIcon_Chandelure, .iconPalIndex = 2, + SHADOW(1, 13, SHADOW_SIZE_S) FOOTPRINT(Chandelure) OVERWORLD( sPicTable_Chandelure, @@ -8840,6 +8978,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Axew, .iconSprite = gMonIcon_Axew, .iconPalIndex = 1, + SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Axew) OVERWORLD( sPicTable_Axew, @@ -8902,6 +9041,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Fraxure, .iconSprite = gMonIcon_Fraxure, .iconPalIndex = 1, + SHADOW(-2, 8, SHADOW_SIZE_L) FOOTPRINT(Fraxure) OVERWORLD( sPicTable_Fraxure, @@ -8963,6 +9103,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Haxorus, .iconSprite = gMonIcon_Haxorus, .iconPalIndex = 2, + SHADOW(2, 9, SHADOW_SIZE_L) FOOTPRINT(Haxorus) OVERWORLD( sPicTable_Haxorus, @@ -9029,6 +9170,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cubchoo, .iconSprite = gMonIcon_Cubchoo, .iconPalIndex = 0, + SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Cubchoo) OVERWORLD( sPicTable_Cubchoo, @@ -9095,6 +9237,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Beartic, .iconSprite = gMonIcon_Beartic, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Beartic) OVERWORLD( sPicTable_Beartic, @@ -9159,6 +9302,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cryogonal, .iconSprite = gMonIcon_Cryogonal, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Cryogonal) OVERWORLD( sPicTable_Cryogonal, @@ -9221,6 +9365,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Shelmet, .iconSprite = gMonIcon_Shelmet, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Shelmet) OVERWORLD( sPicTable_Shelmet, @@ -9283,6 +9428,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Accelgor, .iconSprite = gMonIcon_Accelgor, .iconPalIndex = 1, + SHADOW(-14, 8, SHADOW_SIZE_S) FOOTPRINT(Accelgor) OVERWORLD( sPicTable_Accelgor, @@ -9346,6 +9492,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Stunfisk, .iconSprite = gMonIcon_Stunfisk, .iconPalIndex = 2, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Stunfisk) OVERWORLD( sPicTable_Stunfisk, @@ -9409,6 +9556,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_StunfiskGalarian, .iconSprite = gMonIcon_StunfiskGalarian, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Stunfisk) OVERWORLD( sPicTable_StunfiskGalarian, @@ -9475,6 +9623,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mienfoo, .iconSprite = gMonIcon_Mienfoo, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Mienfoo) OVERWORLD( sPicTable_Mienfoo, @@ -9537,6 +9686,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mienshao, .iconSprite = gMonIcon_Mienshao, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Mienshao) OVERWORLD( sPicTable_Mienshao, @@ -9600,6 +9750,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Druddigon, .iconSprite = gMonIcon_Druddigon, .iconPalIndex = 0, + SHADOW(3, 9, SHADOW_SIZE_M) FOOTPRINT(Druddigon) OVERWORLD( sPicTable_Druddigon, @@ -9665,6 +9816,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Golett, .iconSprite = gMonIcon_Golett, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Golett) OVERWORLD( sPicTable_Golett, @@ -9728,6 +9880,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Golurk, .iconSprite = gMonIcon_Golurk, .iconPalIndex = 0, + SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Golurk) OVERWORLD( sPicTable_Golurk, @@ -9790,6 +9943,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pawniard, .iconSprite = gMonIcon_Pawniard, .iconPalIndex = 0, + SHADOW(4, 4, SHADOW_SIZE_S) FOOTPRINT(Pawniard) OVERWORLD( sPicTable_Pawniard, @@ -9853,6 +10007,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Bisharp, .iconSprite = gMonIcon_Bisharp, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Bisharp) OVERWORLD( sPicTable_Bisharp, @@ -9915,6 +10070,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Kingambit, .iconSprite = gMonIcon_Kingambit, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Kingambit) OVERWORLD( sPicTable_Kingambit, @@ -9978,6 +10134,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Bouffalant, .iconSprite = gMonIcon_Bouffalant, .iconPalIndex = 2, + SHADOW(8, 7, SHADOW_SIZE_M) FOOTPRINT(Bouffalant) OVERWORLD( sPicTable_Bouffalant, @@ -10041,6 +10198,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Rufflet, .iconSprite = gMonIcon_Rufflet, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rufflet) OVERWORLD( sPicTable_Rufflet, @@ -10104,6 +10262,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Braviary, .iconSprite = gMonIcon_Braviary, .iconPalIndex = 0, + SHADOW(-1, 16, SHADOW_SIZE_M) FOOTPRINT(Braviary) OVERWORLD( sPicTable_Braviary, @@ -10166,6 +10325,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BraviaryHisuian, .iconSprite = gMonIcon_BraviaryHisuian, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Braviary) OVERWORLD( sPicTable_BraviaryHisuian, @@ -10231,6 +10391,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vullaby, .iconSprite = gMonIcon_Vullaby, .iconPalIndex = 0, + SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Vullaby) OVERWORLD( sPicTable_Vullaby, @@ -10293,6 +10454,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mandibuzz, .iconSprite = gMonIcon_Mandibuzz, .iconPalIndex = 1, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Mandibuzz) OVERWORLD( sPicTable_Mandibuzz, @@ -10355,6 +10517,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Heatmor, .iconSprite = gMonIcon_Heatmor, .iconPalIndex = 2, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Heatmor) OVERWORLD( sPicTable_Heatmor, @@ -10418,6 +10581,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Durant, .iconSprite = gMonIcon_Durant, .iconPalIndex = 0, + SHADOW(0, -3, SHADOW_SIZE_L) FOOTPRINT(Durant) OVERWORLD( sPicTable_Durant, @@ -10481,6 +10645,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Deino, .iconSprite = gMonIcon_Deino, .iconPalIndex = 2, + SHADOW(1, 3, SHADOW_SIZE_S) FOOTPRINT(Deino) OVERWORLD( sPicTable_Deino, @@ -10543,6 +10708,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zweilous, .iconSprite = gMonIcon_Zweilous, .iconPalIndex = 2, + SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Zweilous) OVERWORLD( sPicTable_Zweilous, @@ -10605,6 +10771,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Hydreigon, .iconSprite = gMonIcon_Hydreigon, .iconPalIndex = 2, + SHADOW(1, 16, SHADOW_SIZE_M) FOOTPRINT(Hydreigon) OVERWORLD( sPicTable_Hydreigon, @@ -10667,6 +10834,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Larvesta, .iconSprite = gMonIcon_Larvesta, .iconPalIndex = 0, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Larvesta) OVERWORLD( sPicTable_Larvesta, @@ -10732,6 +10900,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Volcarona, .iconSprite = gMonIcon_Volcarona, .iconPalIndex = 0, + SHADOW(-4, 14, SHADOW_SIZE_M) FOOTPRINT(Volcarona) OVERWORLD( sPicTable_Volcarona, @@ -10794,6 +10963,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cobalion, .iconSprite = gMonIcon_Cobalion, .iconPalIndex = 0, + SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Cobalion) OVERWORLD( sPicTable_Cobalion, @@ -10858,6 +11028,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Terrakion, .iconSprite = gMonIcon_Terrakion, .iconPalIndex = 2, + SHADOW(3, 6, SHADOW_SIZE_L) FOOTPRINT(Terrakion) OVERWORLD( sPicTable_Terrakion, @@ -10922,6 +11093,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Virizion, .iconSprite = gMonIcon_Virizion, .iconPalIndex = 1, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Virizion) OVERWORLD( sPicTable_Virizion, @@ -10987,6 +11159,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_TornadusIncarnate, .iconSprite = gMonIcon_TornadusIncarnate, .iconPalIndex = 1, + SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Tornadus) OVERWORLD( sPicTable_TornadusIncarnate, @@ -11051,6 +11224,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_TornadusTherian, .iconSprite = gMonIcon_TornadusTherian, .iconPalIndex = 1, + SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Tornadus) .isLegendary = TRUE, .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, @@ -11110,6 +11284,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ThundurusIncarnate, .iconSprite = gMonIcon_ThundurusIncarnate, .iconPalIndex = 0, + SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Thundurus) OVERWORLD( sPicTable_ThundurusIncarnate, @@ -11175,6 +11350,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ThundurusTherian, .iconSprite = gMonIcon_ThundurusTherian, .iconPalIndex = 0, + SHADOW(5, 16, SHADOW_SIZE_M) FOOTPRINT(Thundurus) .isLegendary = TRUE, .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, @@ -11233,6 +11409,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Reshiram, .iconSprite = gMonIcon_Reshiram, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_L) FOOTPRINT(Reshiram) OVERWORLD( sPicTable_Reshiram, @@ -11298,6 +11475,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zekrom, .iconSprite = gMonIcon_Zekrom, .iconPalIndex = 2, + SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(Zekrom) OVERWORLD( sPicTable_Zekrom, @@ -11364,6 +11542,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LandorusIncarnate, .iconSprite = gMonIcon_LandorusIncarnate, .iconPalIndex = 0, + SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Landorus) OVERWORLD( sPicTable_LandorusIncarnate, @@ -11428,6 +11607,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LandorusTherian, .iconSprite = gMonIcon_LandorusTherian, .iconPalIndex = 0, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Landorus) .isLegendary = TRUE, .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, @@ -11489,6 +11669,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Kyurem, .iconSprite = gMonIcon_Kyurem, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Kyurem) OVERWORLD( sPicTable_Kyurem, @@ -11561,6 +11742,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KyuremWhite, .iconSprite = gMonIcon_KyuremWhite, .iconPalIndex = 0, + SHADOW(-8, 14, SHADOW_SIZE_L) FOOTPRINT(Kyurem) .isLegendary = TRUE, .cannotBeTraded = TRUE, @@ -11625,6 +11807,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KyuremBlack, .iconSprite = gMonIcon_KyuremBlack, .iconPalIndex = 0, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Kyurem) .isLegendary = TRUE, .cannotBeTraded = TRUE, @@ -11685,6 +11868,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KeldeoOrdinary, .iconSprite = gMonIcon_KeldeoOrdinary, .iconPalIndex = 0, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Keldeo) OVERWORLD( sPicTable_KeldeoOrdinary, @@ -11751,6 +11935,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KeldeoResolute, .iconSprite = gMonIcon_KeldeoResolute, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Keldeo) .isMythical = TRUE, .isFrontierBanned = TRUE, @@ -11816,6 +12001,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_MeloettaAria, .iconSprite = gMonIcon_MeloettaAria, .iconPalIndex = 4, + SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Meloetta) OVERWORLD( sPicTable_MeloettaAria, @@ -11886,6 +12072,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_MeloettaPirouette, .iconSprite = gMonIcon_MeloettaPirouette, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_S) FOOTPRINT(Meloetta) OVERWORLD( sPicTable_MeloettaPirouette, @@ -11951,6 +12138,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_##form, \ .iconSprite = gMonIcon_Genesect, \ .iconPalIndex = 2, \ + SHADOW(5, 13, SHADOW_SIZE_L) \ FOOTPRINT(Genesect) \ OVERWORLD( \ sPicTable_Genesect, \ diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index bae2833b9e..90e3d2d51e 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Chespin, .iconSprite = gMonIcon_Chespin, .iconPalIndex = 1, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Chespin) OVERWORLD( sPicTable_Chespin, @@ -113,6 +114,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Quilladin, .iconSprite = gMonIcon_Quilladin, .iconPalIndex = 1, + SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Quilladin) OVERWORLD( sPicTable_Quilladin, @@ -174,6 +176,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Chesnaught, .iconSprite = gMonIcon_Chesnaught, .iconPalIndex = 1, + SHADOW(4, 10, SHADOW_SIZE_L) FOOTPRINT(Chesnaught) OVERWORLD( sPicTable_Chesnaught, @@ -236,6 +239,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fennekin, .iconSprite = gMonIcon_Fennekin, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Fennekin) OVERWORLD( sPicTable_Fennekin, @@ -298,6 +302,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Braixen, .iconSprite = gMonIcon_Braixen, .iconPalIndex = 0, + SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Braixen) OVERWORLD( sPicTable_Braixen, @@ -359,6 +364,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Delphox, .iconSprite = gMonIcon_Delphox, .iconPalIndex = 0, + SHADOW(7, 14, SHADOW_SIZE_M) FOOTPRINT(Delphox) OVERWORLD( sPicTable_Delphox, @@ -421,6 +427,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Froakie, .iconSprite = gMonIcon_Froakie, .iconPalIndex = 0, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Froakie) OVERWORLD( sPicTable_Froakie, @@ -483,6 +490,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Frogadier, .iconSprite = gMonIcon_Frogadier, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Frogadier) OVERWORLD( sPicTable_Frogadier, @@ -541,6 +549,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Greninja, .iconSprite = gMonIcon_Greninja, .iconPalIndex = 0, + SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Greninja) OVERWORLD( sPicTable_Greninja, @@ -599,6 +608,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Greninja, .iconSprite = gMonIcon_Greninja, .iconPalIndex = 0, + SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Greninja) OVERWORLD( sPicTable_Greninja, @@ -662,6 +672,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_GreninjaAsh, .iconSprite = gMonIcon_GreninjaAsh, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Greninja) .levelUpLearnset = sGreninjaLevelUpLearnset, .teachableLearnset = sGreninjaTeachableLearnset, @@ -718,6 +729,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Bunnelby, .iconSprite = gMonIcon_Bunnelby, .iconPalIndex = 2, + SHADOW(3, 9, SHADOW_SIZE_S) FOOTPRINT(Bunnelby) OVERWORLD( sPicTable_Bunnelby, @@ -780,6 +792,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Diggersby, .iconSprite = gMonIcon_Diggersby, .iconPalIndex = 2, + SHADOW(8, 10, SHADOW_SIZE_M) FOOTPRINT(Diggersby) OVERWORLD( sPicTable_Diggersby, @@ -842,6 +855,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fletchling, .iconSprite = gMonIcon_Fletchling, .iconPalIndex = 2, + SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Fletchling) OVERWORLD( sPicTable_Fletchling, @@ -905,6 +919,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fletchinder, .iconSprite = gMonIcon_Fletchinder, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Fletchinder) OVERWORLD( sPicTable_Fletchinder, @@ -967,6 +982,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Talonflame, .iconSprite = gMonIcon_Talonflame, .iconPalIndex = 2, + SHADOW(-2, 17, SHADOW_SIZE_M) FOOTPRINT(Talonflame) OVERWORLD( sPicTable_Talonflame, @@ -1025,6 +1041,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Scatterbug, \ .iconSprite = gMonIcon_Scatterbug, \ .iconPalIndex = 1, \ + SHADOW(1, 1, SHADOW_SIZE_S) \ FOOTPRINT(Scatterbug) \ OVERWORLD( \ sPicTable_Scatterbug, \ @@ -1106,6 +1123,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Spewpa, \ .iconSprite = gMonIcon_Spewpa, \ .iconPalIndex = 1, \ + SHADOW(0, 2, SHADOW_SIZE_M) \ FOOTPRINT(Spewpa) \ OVERWORLD( \ sPicTable_Spewpa, \ @@ -1187,6 +1205,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Vivillon ##form, \ .iconSprite = gMonIcon_Vivillon ##form, \ .iconPalIndex = iconPal, \ + SHADOW(0, 20, SHADOW_SIZE_M) \ FOOTPRINT(Vivillon) \ OVERWORLD( \ sPicTable_Vivillon ##form, \ @@ -1430,6 +1449,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Litleo, .iconSprite = gMonIcon_Litleo, .iconPalIndex = 2, + SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Litleo) OVERWORLD( sPicTable_Litleo, @@ -1498,6 +1518,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .iconSpriteFemale = gMonIcon_PyroarF, .iconPalIndex = 2, .iconPalIndexFemale = 2, + SHADOW(-2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pyroar) OVERWORLD( sPicTable_Pyroar, @@ -1555,6 +1576,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Flabebe##Form##Flower, \ .iconSprite = gMonIcon_Flabebe##Form##Flower, \ .iconPalIndex = iconPal, \ + SHADOW(0, 11, SHADOW_SIZE_S) \ FOOTPRINT(Flabebe) \ OVERWORLD( \ sPicTable_Flabebe##Form##Flower, \ @@ -1642,6 +1664,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Floette ##form##Flower, \ .iconSprite = gMonIcon_Floette##form##Flower, \ .iconPalIndex = iconPal, \ + SHADOW(-3, 12, SHADOW_SIZE_S) \ FOOTPRINT(Floette) \ OVERWORLD( \ sPicTable_Floette ##form##Flower, \ @@ -1789,6 +1812,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Florges##Form##Flower, \ .iconSprite = gMonIcon_Florges##Form##Flower, \ .iconPalIndex = iconPal, \ + SHADOW(-5, 15, SHADOW_SIZE_M) \ FOOTPRINT(Florges) \ OVERWORLD( \ sPicTable_Florges ##Form##Flower, \ @@ -1896,6 +1920,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Skiddo, .iconSprite = gMonIcon_Skiddo, .iconPalIndex = 1, + SHADOW(2, 7, SHADOW_SIZE_M) FOOTPRINT(Skiddo) OVERWORLD( sPicTable_Skiddo, @@ -1958,6 +1983,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gogoat, .iconSprite = gMonIcon_Gogoat, .iconPalIndex = 1, + SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gogoat) OVERWORLD( sPicTable_Gogoat, @@ -2021,6 +2047,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pancham, .iconSprite = gMonIcon_Pancham, .iconPalIndex = 1, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Pancham) OVERWORLD( sPicTable_Pancham, @@ -2084,6 +2111,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pangoro, .iconSprite = gMonIcon_Pangoro, .iconPalIndex = 1, + SHADOW(-2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pangoro) OVERWORLD( sPicTable_Pangoro, @@ -2143,6 +2171,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Furfrou##_form, \ .iconSprite = gMonIcon_Furfrou##_form, \ .iconPalIndex = _iconIdx, \ + SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) \ FOOTPRINT(Furfrou) \ OVERWORLD( \ sPicTable_Furfrou##_form, \ @@ -2219,6 +2248,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Espurr, .iconSprite = gMonIcon_Espurr, .iconPalIndex = 2, + SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Espurr) OVERWORLD( sPicTable_Espurr, @@ -2282,6 +2312,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_MeowsticMale, .iconSprite = gMonIcon_MeowsticMale, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Meowstic) OVERWORLD( sPicTable_MeowsticMale, @@ -2343,6 +2374,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_MeowsticFemale, .iconSprite = gMonIcon_MeowsticFemale, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_S) FOOTPRINT(Meowstic) OVERWORLD( sPicTable_MeowsticFemale, @@ -2407,6 +2439,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Honedge, .iconSprite = gMonIcon_Honedge, .iconPalIndex = 2, + SHADOW(-10, 11, SHADOW_SIZE_S) FOOTPRINT(Honedge) OVERWORLD( sPicTable_Honedge, @@ -2470,6 +2503,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Doublade, .iconSprite = gMonIcon_Doublade, .iconPalIndex = 2, + SHADOW(8, 11, SHADOW_SIZE_M) FOOTPRINT(Doublade) OVERWORLD( sPicTable_Doublade, @@ -2535,6 +2569,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AegislashShield, .iconSprite = gMonIcon_AegislashShield, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Aegislash) OVERWORLD( sPicTable_AegislashShield, @@ -2604,6 +2639,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AegislashBlade, .iconSprite = gMonIcon_AegislashBlade, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Aegislash) .levelUpLearnset = sAegislashLevelUpLearnset, .teachableLearnset = sAegislashTeachableLearnset, @@ -2661,6 +2697,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Spritzee, .iconSprite = gMonIcon_Spritzee, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Spritzee) OVERWORLD( sPicTable_Spritzee, @@ -2724,6 +2761,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Aromatisse, .iconSprite = gMonIcon_Aromatisse, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Aromatisse) OVERWORLD( sPicTable_Aromatisse, @@ -2786,6 +2824,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Swirlix, .iconSprite = gMonIcon_Swirlix, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Swirlix) OVERWORLD( sPicTable_Swirlix, @@ -2849,6 +2888,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Slurpuff, .iconSprite = gMonIcon_Slurpuff, .iconPalIndex = 1, + SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Slurpuff) OVERWORLD( sPicTable_Slurpuff, @@ -2912,6 +2952,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Inkay, .iconSprite = gMonIcon_Inkay, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_S) FOOTPRINT(Inkay) OVERWORLD( sPicTable_Inkay, @@ -2974,6 +3015,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Malamar, .iconSprite = gMonIcon_Malamar, .iconPalIndex = 2, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Malamar) OVERWORLD( sPicTable_Malamar, @@ -3036,6 +3078,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Binacle, .iconSprite = gMonIcon_Binacle, .iconPalIndex = 2, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Binacle) OVERWORLD( sPicTable_Binacle, @@ -3099,6 +3142,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Barbaracle, .iconSprite = gMonIcon_Barbaracle, .iconPalIndex = 2, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Barbaracle) OVERWORLD( sPicTable_Barbaracle, @@ -3161,6 +3205,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Skrelp, .iconSprite = gMonIcon_Skrelp, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_S) FOOTPRINT(Skrelp) OVERWORLD( sPicTable_Skrelp, @@ -3223,6 +3268,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Dragalge, .iconSprite = gMonIcon_Dragalge, .iconPalIndex = 5, + SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Dragalge) OVERWORLD( sPicTable_Dragalge, @@ -3286,6 +3332,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Clauncher, .iconSprite = gMonIcon_Clauncher, .iconPalIndex = 0, + SHADOW(4, -6, SHADOW_SIZE_M) FOOTPRINT(Clauncher) OVERWORLD( sPicTable_Clauncher, @@ -3349,6 +3396,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Clawitzer, .iconSprite = gMonIcon_Clawitzer, .iconPalIndex = 0, + SHADOW(6, 1, SHADOW_SIZE_L) FOOTPRINT(Clawitzer) OVERWORLD( sPicTable_Clawitzer, @@ -3411,6 +3459,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Helioptile, .iconSprite = gMonIcon_Helioptile, .iconPalIndex = 2, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Helioptile) OVERWORLD( sPicTable_Helioptile, @@ -3474,6 +3523,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Heliolisk, .iconSprite = gMonIcon_Heliolisk, .iconPalIndex = 2, + SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Heliolisk) OVERWORLD( sPicTable_Heliolisk, @@ -3536,6 +3586,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Tyrunt, .iconSprite = gMonIcon_Tyrunt, .iconPalIndex = 2, + SHADOW(3, 2, SHADOW_SIZE_M) FOOTPRINT(Tyrunt) OVERWORLD( sPicTable_Tyrunt, @@ -3598,6 +3649,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Tyrantrum, .iconSprite = gMonIcon_Tyrantrum, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_L) FOOTPRINT(Tyrantrum) OVERWORLD( sPicTable_Tyrantrum, @@ -3660,6 +3712,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Amaura, .iconSprite = gMonIcon_Amaura, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Amaura) OVERWORLD( sPicTable_Amaura, @@ -3722,6 +3775,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Aurorus, .iconSprite = gMonIcon_Aurorus, .iconPalIndex = 0, + SHADOW(-6, 14, SHADOW_SIZE_L) FOOTPRINT(Aurorus) OVERWORLD( sPicTable_Aurorus, @@ -3789,6 +3843,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Hawlucha, .iconSprite = gMonIcon_Hawlucha, .iconPalIndex = 0, + SHADOW(3, 6, SHADOW_SIZE_S) FOOTPRINT(Hawlucha) OVERWORLD( sPicTable_Hawlucha, @@ -3852,6 +3907,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Dedenne, .iconSprite = gMonIcon_Dedenne, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Dedenne) OVERWORLD( sPicTable_Dedenne, @@ -3917,6 +3973,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Carbink, .iconSprite = gMonIcon_Carbink, .iconPalIndex = 2, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Carbink) OVERWORLD( sPicTable_Carbink, @@ -3980,6 +4037,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Goomy, .iconSprite = gMonIcon_Goomy, .iconPalIndex = 5, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Goomy) OVERWORLD( sPicTable_Goomy, @@ -4044,6 +4102,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Sliggoo, .iconSprite = gMonIcon_Sliggoo, .iconPalIndex = 5, + SHADOW(1, 6, SHADOW_SIZE_S) FOOTPRINT(Sliggoo) OVERWORLD( sPicTable_Sliggoo, @@ -4107,6 +4166,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Goodra, .iconSprite = gMonIcon_Goodra, .iconPalIndex = 5, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Goodra) OVERWORLD( sPicTable_Goodra, @@ -4170,6 +4230,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_SliggooHisuian, .iconSprite = gMonIcon_SliggooHisuian, .iconPalIndex = 2, + SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Sliggoo) OVERWORLD( sPicTable_SliggooHisuian, @@ -4234,6 +4295,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_GoodraHisuian, .iconSprite = gMonIcon_GoodraHisuian, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Goodra) OVERWORLD( sPicTable_GoodraHisuian, @@ -4301,6 +4363,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Klefki, .iconSprite = gMonIcon_Klefki, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Klefki) OVERWORLD( sPicTable_Klefki, @@ -4365,6 +4428,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Phantump, .iconSprite = gMonIcon_Phantump, .iconPalIndex = 1, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Phantump) OVERWORLD( sPicTable_Phantump, @@ -4428,6 +4492,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Trevenant, .iconSprite = gMonIcon_Trevenant, .iconPalIndex = 1, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Trevenant) OVERWORLD( sPicTable_Trevenant, @@ -4490,6 +4555,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( sPicTable_PumpkabooAverage, @@ -4553,6 +4619,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) .levelUpLearnset = sPumpkabooLevelUpLearnset, .teachableLearnset = sPumpkabooTeachableLearnset, @@ -4608,6 +4675,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) .levelUpLearnset = sPumpkabooLevelUpLearnset, .teachableLearnset = sPumpkabooTeachableLearnset, @@ -4665,6 +4733,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) .levelUpLearnset = sPumpkabooLevelUpLearnset, .teachableLearnset = sPumpkabooTeachableLearnset, @@ -4721,6 +4790,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) OVERWORLD( sPicTable_GourgeistAverage, @@ -4782,6 +4852,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + SHADOW(4, 9, SHADOW_SIZE_S) FOOTPRINT(Gourgeist) .levelUpLearnset = sGourgeistLevelUpLearnset, .teachableLearnset = sGourgeistTeachableLearnset, @@ -4835,6 +4906,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + SHADOW(4, 12, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) .levelUpLearnset = sGourgeistLevelUpLearnset, .teachableLearnset = sGourgeistTeachableLearnset, @@ -4890,6 +4962,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + SHADOW(4, 14, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) .levelUpLearnset = sGourgeistLevelUpLearnset, .teachableLearnset = sGourgeistTeachableLearnset, @@ -4951,6 +5024,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Bergmite, .iconSprite = gMonIcon_Bergmite, .iconPalIndex = 0, + SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Bergmite) OVERWORLD( sPicTable_Bergmite, @@ -5014,6 +5088,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Avalugg, .iconSprite = gMonIcon_Avalugg, .iconPalIndex = 0, + SHADOW(1, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Avalugg) OVERWORLD( sPicTable_Avalugg, @@ -5075,6 +5150,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AvaluggHisuian, .iconSprite = gMonIcon_AvaluggHisuian, .iconPalIndex = 5, + SHADOW(2, -2, SHADOW_SIZE_L) FOOTPRINT(Avalugg) OVERWORLD( sPicTable_AvaluggHisuian, @@ -5145,6 +5221,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Noibat, .iconSprite = gMonIcon_Noibat, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Noibat) OVERWORLD( sPicTable_Noibat, @@ -5211,6 +5288,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Noivern, .iconSprite = gMonIcon_Noivern, .iconPalIndex = 2, + SHADOW(5, 10, SHADOW_SIZE_L) FOOTPRINT(Noivern) OVERWORLD( sPicTable_Noivern, @@ -5269,6 +5347,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_XerneasNeutral, .iconSprite = gMonIcon_XerneasNeutral, .iconPalIndex = 0, + SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Xerneas) OVERWORLD( sPicTable_XerneasNeutral, @@ -5330,6 +5409,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_XerneasActive, .iconSprite = gMonIcon_XerneasActive, .iconPalIndex = 0, + SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Xerneas) OVERWORLD( sPicTable_XerneasActive, @@ -5398,6 +5478,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Yveltal, .iconSprite = gMonIcon_Yveltal, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_L) FOOTPRINT(Yveltal) OVERWORLD( sPicTable_Yveltal, @@ -5460,6 +5541,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde50, .iconSprite = gMonIcon_Zygarde50, .iconPalIndex = 1, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( sPicTable_Zygarde50, @@ -5521,6 +5603,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde50, .iconSprite = gMonIcon_Zygarde50, .iconPalIndex = 1, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( sPicTable_Zygarde50, @@ -5582,6 +5665,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde10, .iconSprite = gMonIcon_Zygarde10, .iconPalIndex = 1, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, @@ -5636,6 +5720,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde10, .iconSprite = gMonIcon_Zygarde10, .iconPalIndex = 1, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, @@ -5694,6 +5779,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_ZygardeComplete, .iconSprite = gMonIcon_ZygardeComplete, .iconPalIndex = 1, + SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, @@ -5754,6 +5840,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Diancie, .iconSprite = gMonIcon_Diancie, .iconPalIndex = 1, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Diancie) OVERWORLD( sPicTable_Diancie, @@ -5821,6 +5908,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_DiancieMega, .iconSprite = gMonIcon_DiancieMega, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Diancie) .isMythical = TRUE, .isMegaEvolution = TRUE, @@ -5883,6 +5971,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_HoopaConfined, .iconSprite = gMonIcon_HoopaConfined, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Hoopa) OVERWORLD( sPicTable_HoopaConfined, @@ -5949,6 +6038,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_HoopaUnbound, .iconSprite = gMonIcon_HoopaUnbound, .iconPalIndex = 0, + SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Hoopa) OVERWORLD( sPicTable_HoopaUnbound, @@ -6016,6 +6106,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Volcanion, .iconSprite = gMonIcon_Volcanion, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Volcanion) OVERWORLD( sPicTable_Volcanion, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index 0465def06b..b328c2a716 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rowlet, .iconSprite = gMonIcon_Rowlet, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Rowlet) OVERWORLD( sPicTable_Rowlet, @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dartrix, .iconSprite = gMonIcon_Dartrix, .iconPalIndex = 1, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Dartrix) OVERWORLD( sPicTable_Dartrix, @@ -176,6 +178,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Decidueye, .iconSprite = gMonIcon_Decidueye, .iconPalIndex = 1, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Decidueye) OVERWORLD( sPicTable_Decidueye, @@ -238,6 +241,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_DecidueyeHisuian, .iconSprite = gMonIcon_DecidueyeHisuian, .iconPalIndex = 0, + SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Decidueye) OVERWORLD( sPicTable_DecidueyeHisuian, @@ -303,6 +307,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Litten, .iconSprite = gMonIcon_Litten, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Litten) OVERWORLD( sPicTable_Litten, @@ -365,6 +370,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Torracat, .iconSprite = gMonIcon_Torracat, .iconPalIndex = 0, + SHADOW(5, 7, SHADOW_SIZE_M) FOOTPRINT(Torracat) OVERWORLD( sPicTable_Torracat, @@ -426,6 +432,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Incineroar, .iconSprite = gMonIcon_Incineroar, .iconPalIndex = 0, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Incineroar) OVERWORLD( sPicTable_Incineroar, @@ -488,6 +495,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Popplio, .iconSprite = gMonIcon_Popplio, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Popplio) OVERWORLD( sPicTable_Popplio, @@ -550,6 +558,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Brionne, .iconSprite = gMonIcon_Brionne, .iconPalIndex = 0, + SHADOW(-5, 6, SHADOW_SIZE_M) FOOTPRINT(Brionne) OVERWORLD( sPicTable_Brionne, @@ -611,6 +620,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Primarina, .iconSprite = gMonIcon_Primarina, .iconPalIndex = 0, + SHADOW(-6, 11, SHADOW_SIZE_L) FOOTPRINT(Primarina) OVERWORLD( sPicTable_Primarina, @@ -674,6 +684,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pikipek, .iconSprite = gMonIcon_Pikipek, .iconPalIndex = 2, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Pikipek) OVERWORLD( sPicTable_Pikipek, @@ -737,6 +748,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Trumbeak, .iconSprite = gMonIcon_Trumbeak, .iconPalIndex = 0, + SHADOW(1, 8, SHADOW_SIZE_S) FOOTPRINT(Trumbeak) OVERWORLD( sPicTable_Trumbeak, @@ -799,6 +811,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Toucannon, .iconSprite = gMonIcon_Toucannon, .iconPalIndex = 0, + SHADOW(9, 12, SHADOW_SIZE_M) FOOTPRINT(Toucannon) OVERWORLD( sPicTable_Toucannon, @@ -862,6 +875,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Yungoos, .iconSprite = gMonIcon_Yungoos, .iconPalIndex = 2, + SHADOW(-9, 1, SHADOW_SIZE_M) FOOTPRINT(Yungoos) OVERWORLD( sPicTable_Yungoos, @@ -921,6 +935,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Gumshoos, .iconSprite = gMonIcon_Gumshoos, .iconPalIndex = 2, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Gumshoos) OVERWORLD( sPicTable_Gumshoos, @@ -979,6 +994,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Gumshoos, .iconSprite = gMonIcon_Gumshoos, .iconPalIndex = 2, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Gumshoos) OVERWORLD( sPicTable_Gumshoos, @@ -1044,6 +1060,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Grubbin, .iconSprite = gMonIcon_Grubbin, .iconPalIndex = 0, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Grubbin) OVERWORLD( sPicTable_Grubbin, @@ -1107,6 +1124,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Charjabug, .iconSprite = gMonIcon_Charjabug, .iconPalIndex = 1, + NO_SHADOW FOOTPRINT(Charjabug) OVERWORLD( sPicTable_Charjabug, @@ -1167,6 +1185,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Vikavolt, .iconSprite = gMonIcon_Vikavolt, .iconPalIndex = 0, + SHADOW(-1, 16, SHADOW_SIZE_S) FOOTPRINT(Vikavolt) OVERWORLD( sPicTable_Vikavolt, @@ -1225,6 +1244,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Vikavolt, .iconSprite = gMonIcon_Vikavolt, .iconPalIndex = 0, + SHADOW(-1, 16, SHADOW_SIZE_S) FOOTPRINT(Vikavolt) OVERWORLD( sPicTable_Vikavolt, @@ -1291,6 +1311,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Crabrawler, .iconSprite = gMonIcon_Crabrawler, .iconPalIndex = 2, + SHADOW(7, 6, SHADOW_SIZE_M) FOOTPRINT(Crabrawler) OVERWORLD( sPicTable_Crabrawler, @@ -1355,6 +1376,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Crabominable, .iconSprite = gMonIcon_Crabominable, .iconPalIndex = 2, + SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Crabominable) OVERWORLD( sPicTable_Crabominable, @@ -1418,6 +1440,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioBaile, .iconSprite = gMonIcon_OricorioBaile, .iconPalIndex = 0, + SHADOW(-4, 9, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( sPicTable_OricorioBaile, @@ -1482,6 +1505,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioPomPom, .iconSprite = gMonIcon_OricorioPomPom, .iconPalIndex = 1, + SHADOW(5, 8, SHADOW_SIZE_S) FOOTPRINT(Oricorio) .levelUpLearnset = sOricorioLevelUpLearnset, .teachableLearnset = sOricorioTeachableLearnset, @@ -1538,6 +1562,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioPau, .iconSprite = gMonIcon_OricorioPau, .iconPalIndex = 1, + SHADOW(-3, 11, SHADOW_SIZE_S) FOOTPRINT(Oricorio) .levelUpLearnset = sOricorioLevelUpLearnset, .teachableLearnset = sOricorioTeachableLearnset, @@ -1594,6 +1619,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioSensu, .iconSprite = gMonIcon_OricorioSensu, .iconPalIndex = 0, + SHADOW(7, 10, SHADOW_SIZE_S) FOOTPRINT(Oricorio) .levelUpLearnset = sOricorioLevelUpLearnset, .teachableLearnset = sOricorioTeachableLearnset, @@ -1653,6 +1679,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cutiefly, .iconSprite = gMonIcon_Cutiefly, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Cutiefly) OVERWORLD( sPicTable_Cutiefly, @@ -1714,6 +1741,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Ribombee, .iconSprite = gMonIcon_Ribombee, .iconPalIndex = 2, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Ribombee) OVERWORLD( sPicTable_Ribombee, @@ -1773,6 +1801,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Ribombee, .iconSprite = gMonIcon_Ribombee, .iconPalIndex = 2, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Ribombee) OVERWORLD( sPicTable_Ribombee, @@ -1834,6 +1863,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rockruff, .iconSprite = gMonIcon_Rockruff, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rockruff) OVERWORLD( sPicTable_Rockruff, @@ -1894,6 +1924,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rockruff, .iconSprite = gMonIcon_Rockruff, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rockruff) OVERWORLD( sPicTable_Rockruff, @@ -1957,6 +1988,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocMidday, .iconSprite = gMonIcon_LycanrocMidday, .iconPalIndex = 2, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( sPicTable_LycanrocMidday, @@ -2018,6 +2050,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocMidnight, .iconSprite = gMonIcon_LycanrocMidnight, .iconPalIndex = 0, + SHADOW(5, 13, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( sPicTable_LycanrocMidnight, @@ -2079,6 +2112,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocDusk, .iconSprite = gMonIcon_LycanrocDusk, .iconPalIndex = 0, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( sPicTable_LycanrocDusk, @@ -2143,6 +2177,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_WishiwashiSolo, .iconSprite = gMonIcon_WishiwashiSolo, .iconPalIndex = 2, + SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Wishiwashi) OVERWORLD( sPicTable_WishiwashiSolo, @@ -2206,6 +2241,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_WishiwashiSchool, .iconSprite = gMonIcon_WishiwashiSchool, .iconPalIndex = 0, + SHADOW(-4, 7, SHADOW_SIZE_L) FOOTPRINT(Wishiwashi) .levelUpLearnset = sWishiwashiLevelUpLearnset, .teachableLearnset = sWishiwashiTeachableLearnset, @@ -2264,6 +2300,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mareanie, .iconSprite = gMonIcon_Mareanie, .iconPalIndex = 2, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Mareanie) OVERWORLD( sPicTable_Mareanie, @@ -2327,6 +2364,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Toxapex, .iconSprite = gMonIcon_Toxapex, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxapex) OVERWORLD( sPicTable_Toxapex, @@ -2390,6 +2428,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mudbray, .iconSprite = gMonIcon_Mudbray, .iconPalIndex = 2, + SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Mudbray) OVERWORLD( sPicTable_Mudbray, @@ -2453,6 +2492,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mudsdale, .iconSprite = gMonIcon_Mudsdale, .iconPalIndex = 0, + SHADOW(4, 13, SHADOW_SIZE_L) FOOTPRINT(Mudsdale) OVERWORLD( sPicTable_Mudsdale, @@ -2516,6 +2556,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dewpider, .iconSprite = gMonIcon_Dewpider, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Dewpider) OVERWORLD( sPicTable_Dewpider, @@ -2576,6 +2617,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Araquanid, .iconSprite = gMonIcon_Araquanid, .iconPalIndex = 2, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Araquanid) OVERWORLD( sPicTable_Araquanid, @@ -2634,6 +2676,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Araquanid, .iconSprite = gMonIcon_Araquanid, .iconPalIndex = 2, + SHADOW(-6, 9, SHADOW_SIZE_S) FOOTPRINT(Araquanid) OVERWORLD( sPicTable_Araquanid, @@ -2700,6 +2743,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Fomantis, .iconSprite = gMonIcon_Fomantis, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Fomantis) OVERWORLD( sPicTable_Fomantis, @@ -2760,6 +2804,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lurantis, .iconSprite = gMonIcon_Lurantis, .iconPalIndex = 1, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Lurantis) OVERWORLD( sPicTable_Lurantis, @@ -2818,6 +2863,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lurantis, .iconSprite = gMonIcon_Lurantis, .iconPalIndex = 1, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Lurantis) OVERWORLD( sPicTable_Lurantis, @@ -2885,6 +2931,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Morelull, .iconSprite = gMonIcon_Morelull, .iconPalIndex = 0, + SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Morelull) OVERWORLD( sPicTable_Morelull, @@ -2949,6 +2996,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Shiinotic, .iconSprite = gMonIcon_Shiinotic, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Shiinotic) OVERWORLD( sPicTable_Shiinotic, @@ -3012,6 +3060,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salandit, .iconSprite = gMonIcon_Salandit, .iconPalIndex = 2, + SHADOW(3, 1, SHADOW_SIZE_M) FOOTPRINT(Salandit) OVERWORLD( sPicTable_Salandit, @@ -3072,6 +3121,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salazzle, .iconSprite = gMonIcon_Salazzle, .iconPalIndex = 0, + SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Salazzle) OVERWORLD( sPicTable_Salazzle, @@ -3130,6 +3180,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salazzle, .iconSprite = gMonIcon_Salazzle, .iconPalIndex = 0, + SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Salazzle) OVERWORLD( sPicTable_Salazzle, @@ -3195,6 +3246,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Stufful, .iconSprite = gMonIcon_Stufful, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Stufful) OVERWORLD( sPicTable_Stufful, @@ -3257,6 +3309,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bewear, .iconSprite = gMonIcon_Bewear, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Bewear) OVERWORLD( sPicTable_Bewear, @@ -3320,6 +3373,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bounsweet, .iconSprite = gMonIcon_Bounsweet, .iconPalIndex = 1, + SHADOW(-2, -3, SHADOW_SIZE_S) FOOTPRINT(Bounsweet) OVERWORLD( sPicTable_Bounsweet, @@ -3384,6 +3438,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Steenee, .iconSprite = gMonIcon_Steenee, .iconPalIndex = 1, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Steenee) OVERWORLD( sPicTable_Steenee, @@ -3447,6 +3502,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Tsareena, .iconSprite = gMonIcon_Tsareena, .iconPalIndex = 1, + SHADOW(1, 13, SHADOW_SIZE_M) FOOTPRINT(Tsareena) OVERWORLD( sPicTable_Tsareena, @@ -3512,6 +3568,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Comfey, .iconSprite = gMonIcon_Comfey, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Comfey) OVERWORLD( sPicTable_Comfey, @@ -3575,6 +3632,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Oranguru, .iconSprite = gMonIcon_Oranguru, .iconPalIndex = 0, + SHADOW(-2, 6, SHADOW_SIZE_M) FOOTPRINT(Oranguru) OVERWORLD( sPicTable_Oranguru, @@ -3638,6 +3696,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Passimian, .iconSprite = gMonIcon_Passimian, .iconPalIndex = 1, + SHADOW(-4, 12, SHADOW_SIZE_L) FOOTPRINT(Passimian) OVERWORLD( sPicTable_Passimian, @@ -3701,6 +3760,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Wimpod, .iconSprite = gMonIcon_Wimpod, .iconPalIndex = 2, + SHADOW(-4, -3, SHADOW_SIZE_S) FOOTPRINT(Wimpod) OVERWORLD( sPicTable_Wimpod, @@ -3763,6 +3823,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Golisopod, .iconSprite = gMonIcon_Golisopod, .iconPalIndex = 2, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Golisopod) OVERWORLD( sPicTable_Golisopod, @@ -3826,6 +3887,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Sandygast, .iconSprite = gMonIcon_Sandygast, .iconPalIndex = 1, + NO_SHADOW FOOTPRINT(Sandygast) OVERWORLD( sPicTable_Sandygast, @@ -3889,6 +3951,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Palossand, .iconSprite = gMonIcon_Palossand, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Palossand) OVERWORLD( sPicTable_Palossand, @@ -3951,6 +4014,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pyukumuku, .iconSprite = gMonIcon_Pyukumuku, .iconPalIndex = 0, + SHADOW(-3, -3, SHADOW_SIZE_S) FOOTPRINT(Pyukumuku) OVERWORLD( sPicTable_Pyukumuku, @@ -4014,6 +4078,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TypeNull, .iconSprite = gMonIcon_TypeNull, .iconPalIndex = 0, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Type_Null) OVERWORLD( sPicTable_TypeNull, @@ -4075,6 +4140,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Silvally##_palette, \ .iconSprite = gMonIcon_Silvally, \ .iconPalIndex = 0, \ + SHADOW(1, 13, SHADOW_SIZE_L) \ FOOTPRINT(Silvally) \ OVERWORLD( \ sPicTable_Silvally, \ @@ -4166,6 +4232,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MiniorMeteor, \ .iconSprite = gMonIcon_MiniorMeteor, \ .iconPalIndex = 0, \ + SHADOW(0, 14, SHADOW_SIZE_S) \ OVERWORLD( \ sPicTable_MiniorMeteor, \ SIZE_32x32, \ @@ -4202,6 +4269,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MiniorCore, \ .iconSprite = gMonIcon_MiniorCore##Form, \ .iconPalIndex = iconPal, \ + SHADOW(-2, 12, SHADOW_SIZE_S) \ .formChangeTable = sMinior ##Form##FormChangeTable, \ MINIOR_MISC_INFO(color), \ } @@ -4270,6 +4338,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Komala, .iconSprite = gMonIcon_Komala, .iconPalIndex = 2, + SHADOW(-4, 0, SHADOW_SIZE_S) FOOTPRINT(Komala) OVERWORLD( sPicTable_Komala, @@ -4334,6 +4403,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Turtonator, .iconSprite = gMonIcon_Turtonator, .iconPalIndex = 0, + SHADOW(-3, 12, SHADOW_SIZE_L) FOOTPRINT(Turtonator) OVERWORLD( sPicTable_Turtonator, @@ -4394,6 +4464,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Togedemaru, .iconSprite = gMonIcon_Togedemaru, .iconPalIndex = 2, + SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Togedemaru) OVERWORLD( sPicTable_Togedemaru, @@ -4453,6 +4524,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Togedemaru, .iconSprite = gMonIcon_Togedemaru, .iconPalIndex = 2, + SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Togedemaru) OVERWORLD( sPicTable_Togedemaru, @@ -4516,6 +4588,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuDisguised, .iconSprite = gMonIcon_MimikyuDisguised, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) OVERWORLD( sPicTable_MimikyuDisguised, @@ -4576,6 +4649,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuBusted, .iconSprite = gMonIcon_MimikyuBusted, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, @@ -4628,6 +4702,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuDisguised, .iconSprite = gMonIcon_MimikyuDisguised, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) .isTotem = TRUE, .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, @@ -4682,6 +4757,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuBusted, .iconSprite = gMonIcon_MimikyuBusted, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) .isTotem = TRUE, .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, @@ -4742,6 +4818,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bruxish, .iconSprite = gMonIcon_Bruxish, .iconPalIndex = 0, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Bruxish) OVERWORLD( sPicTable_Bruxish, @@ -4806,6 +4883,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Drampa, .iconSprite = gMonIcon_Drampa, .iconPalIndex = 0, + SHADOW(5, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Drampa) OVERWORLD( sPicTable_Drampa, @@ -4871,6 +4949,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dhelmise, .iconSprite = gMonIcon_Dhelmise, .iconPalIndex = 1, + SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Dhelmise) OVERWORLD( sPicTable_Dhelmise, @@ -4934,6 +5013,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_JangmoO, .iconSprite = gMonIcon_JangmoO, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(JangmoO) OVERWORLD( sPicTable_JangmoO, @@ -4997,6 +5077,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_HakamoO, .iconSprite = gMonIcon_HakamoO, .iconPalIndex = 2, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(HakamoO) OVERWORLD( sPicTable_HakamoO, @@ -5056,6 +5137,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_KommoO, .iconSprite = gMonIcon_KommoO, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(KommoO) OVERWORLD( sPicTable_KommoO, @@ -5114,6 +5196,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_KommoO, .iconSprite = gMonIcon_KommoO, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(KommoO) OVERWORLD( sPicTable_KommoO, @@ -5180,6 +5263,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuKoko, .iconSprite = gMonIcon_TapuKoko, .iconPalIndex = 0, + SHADOW(-1, 19, SHADOW_SIZE_M) FOOTPRINT(TapuKoko) OVERWORLD( sPicTable_TapuKoko, @@ -5245,6 +5329,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuLele, .iconSprite = gMonIcon_TapuLele, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(TapuLele) OVERWORLD( sPicTable_TapuLele, @@ -5310,6 +5395,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuBulu, .iconSprite = gMonIcon_TapuBulu, .iconPalIndex = 2, + SHADOW(4, 16, SHADOW_SIZE_M) FOOTPRINT(TapuBulu) OVERWORLD( sPicTable_TapuBulu, @@ -5376,6 +5462,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuFini, .iconSprite = gMonIcon_TapuFini, .iconPalIndex = 0, + SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(TapuFini) OVERWORLD( sPicTable_TapuFini, @@ -5441,6 +5528,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cosmog, .iconSprite = gMonIcon_Cosmog, .iconPalIndex = 2, + SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Cosmog) OVERWORLD( sPicTable_Cosmog, @@ -5508,6 +5596,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cosmoem, .iconSprite = gMonIcon_Cosmoem, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Cosmoem) OVERWORLD( sPicTable_Cosmoem, @@ -5574,6 +5663,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Solgaleo, .iconSprite = gMonIcon_Solgaleo, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Solgaleo) OVERWORLD( sPicTable_Solgaleo, @@ -5638,6 +5728,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lunala, .iconSprite = gMonIcon_Lunala, .iconPalIndex = 2, + SHADOW(4, 17, SHADOW_SIZE_L) FOOTPRINT(Lunala) OVERWORLD( sPicTable_Lunala, @@ -5704,6 +5795,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Nihilego, .iconSprite = gMonIcon_Nihilego, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_S) FOOTPRINT(Nihilego) OVERWORLD( sPicTable_Nihilego, @@ -5769,6 +5861,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Buzzwole, .iconSprite = gMonIcon_Buzzwole, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Buzzwole) OVERWORLD( sPicTable_Buzzwole, @@ -5833,6 +5926,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pheromosa, .iconSprite = gMonIcon_Pheromosa, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Pheromosa) OVERWORLD( sPicTable_Pheromosa, @@ -5897,6 +5991,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Xurkitree, .iconSprite = gMonIcon_Xurkitree, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Xurkitree) OVERWORLD( sPicTable_Xurkitree, @@ -5963,6 +6058,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Celesteela, .iconSprite = gMonIcon_Celesteela, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Celesteela) OVERWORLD( sPicTable_Celesteela, @@ -6028,6 +6124,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Kartana, .iconSprite = gMonIcon_Kartana, .iconPalIndex = 0, + SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Kartana) OVERWORLD( sPicTable_Kartana, @@ -6092,6 +6189,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Guzzlord, .iconSprite = gMonIcon_Guzzlord, .iconPalIndex = 0, + SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Guzzlord) OVERWORLD( sPicTable_Guzzlord, @@ -6159,6 +6257,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Necrozma, .iconSprite = gMonIcon_Necrozma, .iconPalIndex = 0, + SHADOW(-1, 15, SHADOW_SIZE_M) FOOTPRINT(Necrozma) OVERWORLD( sPicTable_Necrozma, @@ -6225,6 +6324,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaDuskMane, .iconSprite = gMonIcon_NecrozmaDuskMane, .iconPalIndex = 0, + SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Necrozma) OVERWORLD( sPicTable_NecrozmaDuskMane, @@ -6293,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaDawnWings, .iconSprite = gMonIcon_NecrozmaDawnWings, .iconPalIndex = 0, + SHADOW(3, 17, SHADOW_SIZE_L) FOOTPRINT(Necrozma) OVERWORLD( sPicTable_NecrozmaDawnWings, @@ -6364,6 +6465,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaUltra, .iconSprite = gMonIcon_NecrozmaUltra, .iconPalIndex = 2, + SHADOW(-1, 16, SHADOW_SIZE_L) FOOTPRINT(Necrozma) .isLegendary = TRUE, .isUltraBurst = TRUE, @@ -6426,6 +6528,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Magearna, .iconSprite = gMonIcon_Magearna, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Magearna) OVERWORLD( sPicTable_Magearna, @@ -6489,6 +6592,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MagearnaOriginalColor, .iconSprite = gMonIcon_MagearnaOriginalColor, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Magearna) .isMythical = TRUE, .isFrontierBanned = TRUE, @@ -6549,6 +6653,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Marshadow, .iconSprite = gMonIcon_Marshadow, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Marshadow) OVERWORLD( sPicTable_Marshadow, @@ -6614,6 +6719,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Poipole, .iconSprite = gMonIcon_Poipole, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Poipole) OVERWORLD( sPicTable_Poipole, @@ -6677,6 +6783,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Naganadel, .iconSprite = gMonIcon_Naganadel, .iconPalIndex = 0, + SHADOW(7, 17, SHADOW_SIZE_M) FOOTPRINT(Naganadel) OVERWORLD( sPicTable_Naganadel, @@ -6741,6 +6848,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Stakataka, .iconSprite = gMonIcon_Stakataka, .iconPalIndex = 0, + SHADOW(2, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Stakataka) OVERWORLD( sPicTable_Stakataka, @@ -6805,6 +6913,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Blacephalon, .iconSprite = gMonIcon_Blacephalon, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Blacephalon) OVERWORLD( sPicTable_Blacephalon, @@ -6868,6 +6977,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Zeraora, .iconSprite = gMonIcon_Zeraora, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Zeraora) OVERWORLD( sPicTable_Zeraora, @@ -6932,6 +7042,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Meltan, .iconSprite = gMonIcon_Meltan, .iconPalIndex = 2, + SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Meltan) OVERWORLD( sPicTable_Meltan, @@ -6994,6 +7105,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Melmetal, .iconSprite = gMonIcon_Melmetal, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_L) FOOTPRINT(Melmetal) OVERWORLD( sPicTable_Melmetal, @@ -7060,6 +7172,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MelmetalGigantamax, .iconSprite = gMonIcon_MelmetalGigantamax, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Melmetal) .isMythical = TRUE, .isGigantamax = TRUE, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index a18f314547..b40b31a25d 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grookey, .iconSprite = gMonIcon_Grookey, .iconPalIndex = 1, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Grookey) OVERWORLD( sPicTable_Grookey, @@ -112,6 +113,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Thwackey, .iconSprite = gMonIcon_Thwackey, .iconPalIndex = 1, + SHADOW(5, 6, SHADOW_SIZE_M) FOOTPRINT(Thwackey) OVERWORLD( sPicTable_Thwackey, @@ -172,6 +174,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rillaboom, .iconSprite = gMonIcon_Rillaboom, .iconPalIndex = 1, + SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Rillaboom) OVERWORLD( sPicTable_Rillaboom, @@ -234,6 +237,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_RillaboomGigantamax, .iconSprite = gMonIcon_RillaboomGigantamax, .iconPalIndex = 1, + SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rillaboom) .isGigantamax = TRUE, .levelUpLearnset = sRillaboomLevelUpLearnset, @@ -292,6 +296,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Scorbunny, .iconSprite = gMonIcon_Scorbunny, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Scorbunny) OVERWORLD( sPicTable_Scorbunny, @@ -353,6 +358,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Raboot, .iconSprite = gMonIcon_Raboot, .iconPalIndex = 0, + SHADOW(-4, 5, SHADOW_SIZE_S) FOOTPRINT(Raboot) OVERWORLD( sPicTable_Raboot, @@ -414,6 +420,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cinderace, .iconSprite = gMonIcon_Cinderace, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Cinderace) OVERWORLD( sPicTable_Cinderace, @@ -477,6 +484,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CinderaceGigantamax, .iconSprite = gMonIcon_CinderaceGigantamax, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Cinderace) .isGigantamax = TRUE, .levelUpLearnset = sCinderaceLevelUpLearnset, @@ -536,6 +544,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sobble, .iconSprite = gMonIcon_Sobble, .iconPalIndex = 2, + SHADOW(-3, 3, SHADOW_SIZE_S) FOOTPRINT(Sobble) OVERWORLD( sPicTable_Sobble, @@ -597,6 +606,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drizzile, .iconSprite = gMonIcon_Drizzile, .iconPalIndex = 2, + SHADOW(2, 5, SHADOW_SIZE_M) FOOTPRINT(Drizzile) OVERWORLD( sPicTable_Drizzile, @@ -658,6 +668,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Inteleon, .iconSprite = gMonIcon_Inteleon, .iconPalIndex = 0, + SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Inteleon) OVERWORLD( sPicTable_Inteleon, @@ -721,6 +732,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_InteleonGigantamax, .iconSprite = gMonIcon_InteleonGigantamax, .iconPalIndex = 0, + SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Inteleon) .isGigantamax = TRUE, .levelUpLearnset = sInteleonLevelUpLearnset, @@ -779,6 +791,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Skwovet, .iconSprite = gMonIcon_Skwovet, .iconPalIndex = 2, + SHADOW(-7, 5, SHADOW_SIZE_S) FOOTPRINT(Skwovet) OVERWORLD( sPicTable_Skwovet, @@ -842,6 +855,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Greedent, .iconSprite = gMonIcon_Greedent, .iconPalIndex = 0, + SHADOW(-11, 10, SHADOW_SIZE_M) FOOTPRINT(Greedent) OVERWORLD( sPicTable_Greedent, @@ -904,6 +918,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rookidee, .iconSprite = gMonIcon_Rookidee, .iconPalIndex = 0, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Rookidee) OVERWORLD( sPicTable_Rookidee, @@ -967,6 +982,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Corvisquire, .iconSprite = gMonIcon_Corvisquire, .iconPalIndex = 0, + SHADOW(2, 16, SHADOW_SIZE_S) FOOTPRINT(Corvisquire) OVERWORLD( sPicTable_Corvisquire, @@ -1028,6 +1044,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Corviknight, .iconSprite = gMonIcon_Corviknight, .iconPalIndex = 0, + SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Corviknight) OVERWORLD( sPicTable_Corviknight, @@ -1091,6 +1108,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CorviknightGigantamax, .iconSprite = gMonIcon_CorviknightGigantamax, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Corviknight) .isGigantamax = TRUE, .levelUpLearnset = sCorviknightLevelUpLearnset, @@ -1148,6 +1166,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Blipbug, .iconSprite = gMonIcon_Blipbug, .iconPalIndex = 0, + SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Blipbug) OVERWORLD( sPicTable_Blipbug, @@ -1212,6 +1231,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dottler, .iconSprite = gMonIcon_Dottler, .iconPalIndex = 2, + SHADOW(-1, 0, SHADOW_SIZE_M) FOOTPRINT(Dottler) OVERWORLD( sPicTable_Dottler, @@ -1275,6 +1295,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Orbeetle, .iconSprite = gMonIcon_Orbeetle, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(Orbeetle) OVERWORLD( sPicTable_Orbeetle, @@ -1339,6 +1360,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_OrbeetleGigantamax, .iconSprite = gMonIcon_OrbeetleGigantamax, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Orbeetle) .isGigantamax = TRUE, .levelUpLearnset = sOrbeetleLevelUpLearnset, @@ -1397,6 +1419,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Nickit, .iconSprite = gMonIcon_Nickit, .iconPalIndex = 2, + SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Nickit) OVERWORLD( sPicTable_Nickit, @@ -1459,6 +1482,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Thievul, .iconSprite = gMonIcon_Thievul, .iconPalIndex = 2, + SHADOW(-9, 7, SHADOW_SIZE_M) FOOTPRINT(Thievul) OVERWORLD( sPicTable_Thievul, @@ -1521,6 +1545,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Gossifleur, .iconSprite = gMonIcon_Gossifleur, .iconPalIndex = 1, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Gossifleur) OVERWORLD( sPicTable_Gossifleur, @@ -1583,6 +1608,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Eldegoss, .iconSprite = gMonIcon_Eldegoss, .iconPalIndex = 1, + SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Eldegoss) OVERWORLD( sPicTable_Eldegoss, @@ -1645,6 +1671,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Wooloo, .iconSprite = gMonIcon_Wooloo, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Wooloo) OVERWORLD( sPicTable_Wooloo, @@ -1707,6 +1734,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dubwool, .iconSprite = gMonIcon_Dubwool, .iconPalIndex = 2, + SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Dubwool) OVERWORLD( sPicTable_Dubwool, @@ -1768,6 +1796,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Chewtle, .iconSprite = gMonIcon_Chewtle, .iconPalIndex = 0, + SHADOW(3, 1, SHADOW_SIZE_S) FOOTPRINT(Chewtle) OVERWORLD( sPicTable_Chewtle, @@ -1829,6 +1858,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drednaw, .iconSprite = gMonIcon_Drednaw, .iconPalIndex = 0, + SHADOW(-2, 4, SHADOW_SIZE_L) FOOTPRINT(Drednaw) OVERWORLD( sPicTable_Drednaw, @@ -1892,6 +1922,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_DrednawGigantamax, .iconSprite = gMonIcon_DrednawGigantamax, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Drednaw) .isGigantamax = TRUE, .levelUpLearnset = sDrednawLevelUpLearnset, @@ -1950,6 +1981,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Yamper, .iconSprite = gMonIcon_Yamper, .iconPalIndex = 1, + SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Yamper) OVERWORLD( sPicTable_Yamper, @@ -2012,6 +2044,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Boltund, .iconSprite = gMonIcon_Boltund, .iconPalIndex = 1, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Boltund) OVERWORLD( sPicTable_Boltund, @@ -2074,6 +2107,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rolycoly, .iconSprite = gMonIcon_Rolycoly, .iconPalIndex = 0, + SHADOW(0, -3, SHADOW_SIZE_S) FOOTPRINT(Rolycoly) OVERWORLD( sPicTable_Rolycoly, @@ -2135,6 +2169,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Carkol, .iconSprite = gMonIcon_Carkol, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Carkol) OVERWORLD( sPicTable_Carkol, @@ -2196,6 +2231,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Coalossal, .iconSprite = gMonIcon_Coalossal, .iconPalIndex = 0, + SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Coalossal) OVERWORLD( sPicTable_Coalossal, @@ -2259,6 +2295,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CoalossalGigantamax, .iconSprite = gMonIcon_CoalossalGigantamax, .iconPalIndex = 0, + SHADOW(1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Coalossal) .isGigantamax = TRUE, .levelUpLearnset = sCoalossalLevelUpLearnset, @@ -2317,6 +2354,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Applin, .iconSprite = gMonIcon_Applin, .iconPalIndex = 1, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Applin) OVERWORLD( sPicTable_Applin, @@ -2382,6 +2420,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Flapple, .iconSprite = gMonIcon_Flapple, .iconPalIndex = 1, + SHADOW(-6, 11, SHADOW_SIZE_S) FOOTPRINT(Flapple) OVERWORLD( sPicTable_Flapple, @@ -2445,6 +2484,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_FlappleGigantamax, .iconSprite = gMonIcon_FlappleGigantamax, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Flapple) .isGigantamax = TRUE, .levelUpLearnset = sFlappleLevelUpLearnset, @@ -2500,6 +2540,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Appletun, .iconSprite = gMonIcon_Appletun, .iconPalIndex = 1, + SHADOW(5, 6, SHADOW_SIZE_L) FOOTPRINT(Appletun) OVERWORLD( sPicTable_Appletun, @@ -2563,6 +2604,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_AppletunGigantamax, .iconSprite = gMonIcon_AppletunGigantamax, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Appletun) .isGigantamax = TRUE, .levelUpLearnset = sAppletunLevelUpLearnset, @@ -2619,6 +2661,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dipplin, .iconSprite = gMonIcon_Dipplin, .iconPalIndex = 1, + SHADOW(-4, 8, SHADOW_SIZE_S) FOOTPRINT(Dipplin) OVERWORLD( sPicTable_Dipplin, @@ -2680,6 +2723,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hydrapple, .iconSprite = gMonIcon_Hydrapple, .iconPalIndex = 5, + SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Hydrapple) OVERWORLD( sPicTable_Hydrapple, @@ -2742,6 +2786,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Silicobra, .iconSprite = gMonIcon_Silicobra, .iconPalIndex = 1, + SHADOW(3, 1, SHADOW_SIZE_M) FOOTPRINT(Silicobra) OVERWORLD( sPicTable_Silicobra, @@ -2804,6 +2849,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sandaconda, .iconSprite = gMonIcon_Sandaconda, .iconPalIndex = 1, + SHADOW(2, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Sandaconda) OVERWORLD( sPicTable_Sandaconda, @@ -2867,6 +2913,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_SandacondaGigantamax, .iconSprite = gMonIcon_SandacondaGigantamax, .iconPalIndex = 1, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Sandaconda) .isGigantamax = TRUE, .levelUpLearnset = sSandacondaLevelUpLearnset, @@ -2924,6 +2971,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cramorant, .iconSprite = gMonIcon_Cramorant, .iconPalIndex = 0, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) OVERWORLD( sPicTable_Cramorant, @@ -2987,6 +3035,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CramorantGulping, .iconSprite = gMonIcon_CramorantGulping, .iconPalIndex = 0, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) .levelUpLearnset = sCramorantLevelUpLearnset, .teachableLearnset = sCramorantTeachableLearnset, @@ -3042,6 +3091,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CramorantGorging, .iconSprite = gMonIcon_CramorantGorging, .iconPalIndex = 0, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) .levelUpLearnset = sCramorantLevelUpLearnset, .teachableLearnset = sCramorantTeachableLearnset, @@ -3099,6 +3149,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arrokuda, .iconSprite = gMonIcon_Arrokuda, .iconPalIndex = 2, + SHADOW(-1, -5, SHADOW_SIZE_S) FOOTPRINT(Arrokuda) OVERWORLD( sPicTable_Arrokuda, @@ -3161,6 +3212,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Barraskewda, .iconSprite = gMonIcon_Barraskewda, .iconPalIndex = 2, + SHADOW(4, 5, SHADOW_SIZE_M) FOOTPRINT(Barraskewda) OVERWORLD( sPicTable_Barraskewda, @@ -3223,6 +3275,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Toxel, .iconSprite = gMonIcon_Toxel, .iconPalIndex = 2, + SHADOW(-2, 1, SHADOW_SIZE_M) FOOTPRINT(Toxel) OVERWORLD( sPicTable_Toxel, @@ -3286,6 +3339,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityAmped, .iconSprite = gMonIcon_ToxtricityAmped, .iconPalIndex = 2, + SHADOW(-6, 13, SHADOW_SIZE_M) FOOTPRINT(Toxtricity) OVERWORLD( sPicTable_ToxtricityAmped, @@ -3345,6 +3399,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityGigantamax, .iconSprite = gMonIcon_ToxtricityGigantamax, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxtricity) .isGigantamax = TRUE, .levelUpLearnset = sToxtricityAmpedLevelUpLearnset, @@ -3400,6 +3455,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityLowKey, .iconSprite = gMonIcon_ToxtricityLowKey, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Toxtricity) OVERWORLD( sPicTable_ToxtricityLowKey, @@ -3459,6 +3515,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityGigantamax, .iconSprite = gMonIcon_ToxtricityGigantamax, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxtricity) OVERWORLD( sPicTable_ToxtricityLowKey, @@ -3524,6 +3581,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sizzlipede, .iconSprite = gMonIcon_Sizzlipede, .iconPalIndex = 0, + SHADOW(6, -4, SHADOW_SIZE_S) FOOTPRINT(Sizzlipede) OVERWORLD( sPicTable_Sizzlipede, @@ -3586,6 +3644,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Centiskorch, .iconSprite = gMonIcon_Centiskorch, .iconPalIndex = 0, + SHADOW(-3, 7, SHADOW_SIZE_M) FOOTPRINT(Centiskorch) OVERWORLD( sPicTable_Centiskorch, @@ -3649,6 +3708,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CentiskorchGigantamax, .iconSprite = gMonIcon_CentiskorchGigantamax, .iconPalIndex = 0, + SHADOW(6, 9, SHADOW_SIZE_L) FOOTPRINT(Centiskorch) .isGigantamax = TRUE, .levelUpLearnset = sCentiskorchLevelUpLearnset, @@ -3707,6 +3767,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Clobbopus, .iconSprite = gMonIcon_Clobbopus, .iconPalIndex = 0, + SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Clobbopus) OVERWORLD( sPicTable_Clobbopus, @@ -3768,6 +3829,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grapploct, .iconSprite = gMonIcon_Grapploct, .iconPalIndex = 2, + SHADOW(4, 9, SHADOW_SIZE_M) FOOTPRINT(Grapploct) OVERWORLD( sPicTable_Grapploct, @@ -3830,6 +3892,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sinistea, .iconSprite = gMonIcon_Sinistea, .iconPalIndex = 2, + SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Sinistea) OVERWORLD( sPicTable_Sinistea, @@ -3893,6 +3956,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sinistea, .iconSprite = gMonIcon_Sinistea, .iconPalIndex = 2, + SHADOW(3, 4, SHADOW_SIZE_S) FOOTPRINT(Sinistea) OVERWORLD( sPicTable_Sinistea, @@ -3955,6 +4019,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Polteageist, .iconSprite = gMonIcon_Polteageist, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Polteageist) OVERWORLD( sPicTable_Polteageist, @@ -4017,6 +4082,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Polteageist, .iconSprite = gMonIcon_Polteageist, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Polteageist) OVERWORLD( sPicTable_Polteageist, @@ -4080,6 +4146,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hatenna, .iconSprite = gMonIcon_Hatenna, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Hatenna) OVERWORLD( sPicTable_Hatenna, @@ -4141,6 +4208,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hattrem, .iconSprite = gMonIcon_Hattrem, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Hattrem) OVERWORLD( sPicTable_Hattrem, @@ -4201,6 +4269,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hatterene, .iconSprite = gMonIcon_Hatterene, .iconPalIndex = 0, + SHADOW(6, 13, SHADOW_SIZE_S) FOOTPRINT(Hatterene) OVERWORLD( sPicTable_Hatterene, @@ -4264,6 +4333,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_HattereneGigantamax, .iconSprite = gMonIcon_HattereneGigantamax, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Hatterene) .isGigantamax = TRUE, .levelUpLearnset = sHattereneLevelUpLearnset, @@ -4322,6 +4392,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Impidimp, .iconSprite = gMonIcon_Impidimp, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Impidimp) OVERWORLD( sPicTable_Impidimp, @@ -4383,6 +4454,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Morgrem, .iconSprite = gMonIcon_Morgrem, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Morgrem) OVERWORLD( sPicTable_Morgrem, @@ -4444,6 +4516,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grimmsnarl, .iconSprite = gMonIcon_Grimmsnarl, .iconPalIndex = 0, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Grimmsnarl) OVERWORLD( sPicTable_Grimmsnarl, @@ -4507,6 +4580,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_GrimmsnarlGigantamax, .iconSprite = gMonIcon_GrimmsnarlGigantamax, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Grimmsnarl) .isGigantamax = TRUE, .levelUpLearnset = sGrimmsnarlLevelUpLearnset, @@ -4565,6 +4639,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Milcery, .iconSprite = gMonIcon_Milcery, .iconPalIndex = 1, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Milcery) OVERWORLD( sPicTable_Milcery, @@ -4634,6 +4709,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Alcremie ##sweet, \ .iconSprite = gMonIcon_AlcremieStrawberryVanillaCream, /*AlcremieStrawberry##cream##*/ \ .iconPalIndex = 1, \ + SHADOW(0, 5, SHADOW_SIZE_S) \ FOOTPRINT(Alcremie) \ OVERWORLD( \ sPicTable_AlcremieStrawberry, /*Alcremie ##sweet*/ \ @@ -4744,6 +4820,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_AlcremieGigantamax, .iconSprite = gMonIcon_AlcremieGigantamax, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Alcremie) .isGigantamax = TRUE, .levelUpLearnset = sAlcremieLevelUpLearnset, @@ -4801,6 +4878,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Falinks, .iconSprite = gMonIcon_Falinks, .iconPalIndex = 0, + SHADOW(-7, 5, SHADOW_SIZE_S) FOOTPRINT(Falinks) OVERWORLD( sPicTable_Falinks, @@ -4862,6 +4940,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Pincurchin, .iconSprite = gMonIcon_Pincurchin, .iconPalIndex = 2, + SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(Pincurchin) OVERWORLD( sPicTable_Pincurchin, @@ -4926,6 +5005,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Snom, .iconSprite = gMonIcon_Snom, .iconPalIndex = 0, + SHADOW(-2, -7, SHADOW_SIZE_S) FOOTPRINT(Snom) OVERWORLD( sPicTable_Snom, @@ -4989,6 +5069,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Frosmoth, .iconSprite = gMonIcon_Frosmoth, .iconPalIndex = 0, + SHADOW(-7, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Frosmoth) OVERWORLD( sPicTable_Frosmoth, @@ -5051,6 +5132,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Stonjourner, .iconSprite = gMonIcon_Stonjourner, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Stonjourner) OVERWORLD( sPicTable_Stonjourner, @@ -5114,6 +5196,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EiscueIceFace, .iconSprite = gMonIcon_EiscueIceFace, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eiscue) OVERWORLD( sPicTable_EiscueIceFace, @@ -5177,6 +5260,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EiscueNoiceFace, .iconSprite = gMonIcon_EiscueNoiceFace, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eiscue) .levelUpLearnset = sEiscueLevelUpLearnset, .teachableLearnset = sEiscueTeachableLearnset, @@ -5234,6 +5318,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_IndeedeeMale, .iconSprite = gMonIcon_IndeedeeMale, .iconPalIndex = 2, + SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Indeedee) OVERWORLD( sPicTable_IndeedeeMale, @@ -5295,6 +5380,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_IndeedeeFemale, .iconSprite = gMonIcon_IndeedeeFemale, .iconPalIndex = 2, + SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Indeedee) OVERWORLD( sPicTable_IndeedeeFemale, @@ -5359,6 +5445,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_MorpekoFullBelly, .iconSprite = gMonIcon_MorpekoFullBelly, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Morpeko) OVERWORLD( sPicTable_MorpekoFullBelly, @@ -5422,6 +5509,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_MorpekoHangry, .iconSprite = gMonIcon_MorpekoHangry, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Morpeko) .levelUpLearnset = sMorpekoLevelUpLearnset, .teachableLearnset = sMorpekoTeachableLearnset, @@ -5480,6 +5568,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cufant, .iconSprite = gMonIcon_Cufant, .iconPalIndex = 0, + SHADOW(5, 2, SHADOW_SIZE_M) FOOTPRINT(Cufant) OVERWORLD( sPicTable_Cufant, @@ -5542,6 +5631,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Copperajah, .iconSprite = gMonIcon_Copperajah, .iconPalIndex = 0, + SHADOW(6, 7, SHADOW_SIZE_L) FOOTPRINT(Copperajah) OVERWORLD( sPicTable_Copperajah, @@ -5606,6 +5696,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CopperajahGigantamax, .iconSprite = gMonIcon_CopperajahGigantamax, .iconPalIndex = 0, + SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Copperajah) .isGigantamax = TRUE, .levelUpLearnset = sCopperajahLevelUpLearnset, @@ -5664,6 +5755,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dracozolt, .iconSprite = gMonIcon_Dracozolt, .iconPalIndex = 1, + SHADOW(-4, 10, SHADOW_SIZE_L) FOOTPRINT(Dracozolt) OVERWORLD( sPicTable_Dracozolt, @@ -5725,6 +5817,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arctozolt, .iconSprite = gMonIcon_Arctozolt, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Arctozolt) OVERWORLD( sPicTable_Arctozolt, @@ -5787,6 +5880,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dracovish, .iconSprite = gMonIcon_Dracovish, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Dracovish) OVERWORLD( sPicTable_Dracovish, @@ -5849,6 +5943,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arctovish, .iconSprite = gMonIcon_Arctovish, .iconPalIndex = 0, + SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Arctovish) OVERWORLD( sPicTable_Arctovish, @@ -5910,6 +6005,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Duraludon, .iconSprite = gMonIcon_Duraludon, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Duraludon) OVERWORLD( sPicTable_Duraludon, @@ -5975,6 +6071,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_DuraludonGigantamax, .iconSprite = gMonIcon_DuraludonGigantamax, .iconPalIndex = 0, + SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Duraludon) .isGigantamax = TRUE, .levelUpLearnset = sDuraludonLevelUpLearnset, @@ -6033,6 +6130,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Archaludon, .iconSprite = gMonIcon_Archaludon, .iconPalIndex = 0, + SHADOW(4, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Archaludon) OVERWORLD( sPicTable_Archaludon, @@ -6097,6 +6195,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dreepy, .iconSprite = gMonIcon_Dreepy, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Dreepy) OVERWORLD( sPicTable_Dreepy, @@ -6159,6 +6258,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drakloak, .iconSprite = gMonIcon_Drakloak, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_M) FOOTPRINT(Drakloak) OVERWORLD( sPicTable_Drakloak, @@ -6221,6 +6321,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dragapult, .iconSprite = gMonIcon_Dragapult, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Dragapult) OVERWORLD( sPicTable_Dragapult, @@ -6282,6 +6383,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZacianHeroOfManyBattles, .iconSprite = gMonIcon_ZacianHeroOfManyBattles, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Zacian) OVERWORLD( sPicTable_ZacianHeroOfManyBattles, @@ -6347,6 +6449,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZacianCrownedSword, .iconSprite = gMonIcon_ZacianCrownedSword, .iconPalIndex = 2, + SHADOW(-3, 12, SHADOW_SIZE_L) FOOTPRINT(Zacian) OVERWORLD( sPicTable_ZacianCrownedSword, @@ -6414,6 +6517,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZamazentaHeroOfManyBattles, .iconSprite = gMonIcon_ZamazentaHeroOfManyBattles, .iconPalIndex = 2, + SHADOW(-1, 12, SHADOW_SIZE_L) FOOTPRINT(Zamazenta) OVERWORLD( sPicTable_ZamazentaHeroOfManyBattles, @@ -6479,6 +6583,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZamazentaCrownedShield, .iconSprite = gMonIcon_ZamazentaCrownedShield, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(Zamazenta) OVERWORLD( sPicTable_ZamazentaCrownedShield, @@ -6547,6 +6652,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Eternatus, .iconSprite = gMonIcon_Eternatus, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Eternatus) OVERWORLD( sPicTable_Eternatus, @@ -6612,6 +6718,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EternatusEternamax, .iconSprite = gMonIcon_EternatusEternamax, .iconPalIndex = 0, + SHADOW(-3, 20, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Eternatus) .isLegendary = TRUE, .isFrontierBanned = TRUE, @@ -6669,6 +6776,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Kubfu, .iconSprite = gMonIcon_Kubfu, .iconPalIndex = 1, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Kubfu) OVERWORLD( sPicTable_Kubfu, @@ -6735,6 +6843,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuSingleStrikeStyle, .iconSprite = gMonIcon_Urshifu, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Urshifu) OVERWORLD( sPicTable_Urshifu, @@ -6800,6 +6909,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuSingleStrikeStyleGigantamax, .iconSprite = gMonIcon_UrshifuSingleStrikeStyleGigantamax, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, @@ -6857,6 +6967,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuRapidStrikeStyle, .iconSprite = gMonIcon_Urshifu, .iconPalIndex = 2, + SHADOW(4, 14, SHADOW_SIZE_M) FOOTPRINT(Urshifu) OVERWORLD( sPicTable_Urshifu, @@ -6922,6 +7033,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuRapidStrikeStyleGigantamax, .iconSprite = gMonIcon_UrshifuRapidStrikeStyleGigantamax, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, @@ -6982,6 +7094,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Zarude, .iconSprite = gMonIcon_Zarude, .iconPalIndex = 1, + SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Zarude) OVERWORLD( sPicTable_Zarude, @@ -7045,6 +7158,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZarudeDada, .iconSprite = gMonIcon_ZarudeDada, .iconPalIndex = 1, + SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Zarude) .isMythical = TRUE, .isFrontierBanned = TRUE, @@ -7104,6 +7218,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Regieleki, .iconSprite = gMonIcon_Regieleki, .iconPalIndex = 0, + SHADOW(-3, 14, SHADOW_SIZE_S) FOOTPRINT(Regieleki) OVERWORLD( sPicTable_Regieleki, @@ -7169,6 +7284,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Regidrago, .iconSprite = gMonIcon_Regidrago, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Regidrago) OVERWORLD( sPicTable_Regidrago, @@ -7232,6 +7348,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Glastrier, .iconSprite = gMonIcon_Glastrier, .iconPalIndex = 0, + SHADOW(-5, 11, SHADOW_SIZE_L) FOOTPRINT(Glastrier) OVERWORLD( sPicTable_Glastrier, @@ -7296,6 +7413,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Spectrier, .iconSprite = gMonIcon_Spectrier, .iconPalIndex = 0, + SHADOW(-6, 12, SHADOW_SIZE_L) FOOTPRINT(Spectrier) OVERWORLD( sPicTable_Spectrier, @@ -7360,6 +7478,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Calyrex, .iconSprite = gMonIcon_Calyrex, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Calyrex) OVERWORLD( sPicTable_Calyrex, @@ -7425,6 +7544,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CalyrexIceRider, .iconSprite = gMonIcon_CalyrexIceRider, .iconPalIndex = 0, + SHADOW(-5, 11, SHADOW_SIZE_L) FOOTPRINT(Calyrex) OVERWORLD( sPicTable_CalyrexIceRider, @@ -7490,6 +7610,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CalyrexShadowRider, .iconSprite = gMonIcon_CalyrexShadowRider, .iconPalIndex = 0, + SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Calyrex) OVERWORLD( sPicTable_CalyrexShadowRider, @@ -7559,6 +7680,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EnamorusIncarnate, .iconSprite = gMonIcon_EnamorusIncarnate, .iconPalIndex = 1, + SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Enamorus) OVERWORLD( sPicTable_EnamorusIncarnate, @@ -7622,6 +7744,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EnamorusTherian, .iconSprite = gMonIcon_EnamorusTherian, .iconPalIndex = 1, + SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Enamorus) OVERWORLD( sPicTable_EnamorusTherian, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 08614606f7..922e57784b 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sprigatito, .iconSprite = gMonIcon_Sprigatito, .iconPalIndex = 1, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Sprigatito) OVERWORLD( sPicTable_Sprigatito, @@ -113,6 +114,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Floragato, .iconSprite = gMonIcon_Floragato, .iconPalIndex = 1, + SHADOW(-3, 11, SHADOW_SIZE_M) FOOTPRINT(Floragato) OVERWORLD( sPicTable_Floragato, @@ -174,6 +176,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Meowscarada, .iconSprite = gMonIcon_Meowscarada, .iconPalIndex = 1, + SHADOW(-3, 14, SHADOW_SIZE_S) FOOTPRINT(Meowscarada) OVERWORLD( sPicTable_Meowscarada, @@ -236,6 +239,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fuecoco, .iconSprite = gMonIcon_Fuecoco, .iconPalIndex = 2, + SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Fuecoco) OVERWORLD( sPicTable_Fuecoco, @@ -298,6 +302,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Crocalor, .iconSprite = gMonIcon_Crocalor, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Crocalor) OVERWORLD( sPicTable_Crocalor, @@ -359,6 +364,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Skeledirge, .iconSprite = gMonIcon_Skeledirge, .iconPalIndex = 0, + SHADOW(6, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Skeledirge) OVERWORLD( sPicTable_Skeledirge, @@ -421,6 +427,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaxly, .iconSprite = gMonIcon_Quaxly, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Quaxly) OVERWORLD( sPicTable_Quaxly, @@ -483,6 +490,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaxwell, .iconSprite = gMonIcon_Quaxwell, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_S) FOOTPRINT(Quaxwell) OVERWORLD( sPicTable_Quaxwell, @@ -544,6 +552,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaquaval, .iconSprite = gMonIcon_Quaquaval, .iconPalIndex = 0, + SHADOW(-7, 13, SHADOW_SIZE_M) FOOTPRINT(Quaquaval) OVERWORLD( sPicTable_Quaquaval, @@ -606,6 +615,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Lechonk, .iconSprite = gMonIcon_Lechonk, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Lechonk) OVERWORLD( sPicTable_Lechonk, @@ -668,6 +678,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_OinkologneMale, .iconSprite = gMonIcon_OinkologneMale, .iconPalIndex = 1, + SHADOW(-2, 6, SHADOW_SIZE_M) FOOTPRINT(Oinkologne) OVERWORLD( sPicTable_OinkologneMale, @@ -729,6 +740,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_OinkologneFemale, .iconSprite = gMonIcon_OinkologneFemale, .iconPalIndex = 0, + SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Oinkologne) OVERWORLD( sPicTable_OinkologneFemale, @@ -792,6 +804,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tarountula, .iconSprite = gMonIcon_Tarountula, .iconPalIndex = 1, + SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Tarountula) OVERWORLD( sPicTable_Tarountula, @@ -854,6 +867,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Spidops, .iconSprite = gMonIcon_Spidops, .iconPalIndex = 1, + SHADOW(6, 8, SHADOW_SIZE_L) FOOTPRINT(Spidops) OVERWORLD( sPicTable_Spidops, @@ -916,6 +930,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Nymble, .iconSprite = gMonIcon_Nymble, .iconPalIndex = 0, + SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Nymble) OVERWORLD( sPicTable_Nymble, @@ -978,6 +993,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Lokix, .iconSprite = gMonIcon_Lokix, .iconPalIndex = 0, + SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Lokix) OVERWORLD( sPicTable_Lokix, @@ -1040,6 +1056,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmi, .iconSprite = gMonIcon_Pawmi, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Pawmi) OVERWORLD( sPicTable_Pawmi, @@ -1102,6 +1119,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmo, .iconSprite = gMonIcon_Pawmo, .iconPalIndex = 0, + SHADOW(-3, 10, SHADOW_SIZE_S) FOOTPRINT(Pawmo) OVERWORLD( sPicTable_Pawmo, @@ -1163,6 +1181,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmot, .iconSprite = gMonIcon_Pawmot, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Pawmot) OVERWORLD( sPicTable_Pawmot, @@ -1225,6 +1244,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tandemaus, .iconSprite = gMonIcon_Tandemaus, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Tandemaus) OVERWORLD( sPicTable_Tandemaus, @@ -1288,6 +1308,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maushold, .iconSprite = gMonIcon_MausholdFamilyOfThree, .iconPalIndex = 1, + SHADOW(4, -1, SHADOW_SIZE_L) FOOTPRINT(MausholdFamilyOfThree) OVERWORLD( sPicTable_MausholdFamilyOfThree, @@ -1348,6 +1369,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maushold, .iconSprite = gMonIcon_MausholdFamilyOfFour, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_L) FOOTPRINT(MausholdFamilyOfFour) OVERWORLD( sPicTable_MausholdFamilyOfFour, @@ -1411,6 +1433,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fidough, .iconSprite = gMonIcon_Fidough, .iconPalIndex = 1, + SHADOW(4, 0, SHADOW_SIZE_S) FOOTPRINT(Fidough) OVERWORLD( sPicTable_Fidough, @@ -1473,6 +1496,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dachsbun, .iconSprite = gMonIcon_Dachsbun, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Dachsbun) OVERWORLD( sPicTable_Dachsbun, @@ -1535,6 +1559,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Smoliv, .iconSprite = gMonIcon_Smoliv, .iconPalIndex = 1, + SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Smoliv) OVERWORLD( sPicTable_Smoliv, @@ -1597,6 +1622,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dolliv, .iconSprite = gMonIcon_Dolliv, .iconPalIndex = 1, + SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Dolliv) OVERWORLD( sPicTable_Dolliv, @@ -1658,6 +1684,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Arboliva, .iconSprite = gMonIcon_Arboliva, .iconPalIndex = 1, + SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Arboliva) OVERWORLD( sPicTable_Arboliva, @@ -1720,6 +1747,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyGreenPlumage, .iconSprite = gMonIcon_SquawkabillyGreenPlumage, .iconPalIndex = 1, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( sPicTable_SquawkabillyGreenPlumage, @@ -1782,6 +1810,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyBluePlumage, .iconSprite = gMonIcon_SquawkabillyBluePlumage, .iconPalIndex = 0, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( sPicTable_SquawkabillyBluePlumage, @@ -1844,6 +1873,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyYellowPlumage, .iconSprite = gMonIcon_SquawkabillyYellowPlumage, .iconPalIndex = 1, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( sPicTable_SquawkabillyYellowPlumage, @@ -1906,6 +1936,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyWhitePlumage, .iconSprite = gMonIcon_SquawkabillyWhitePlumage, .iconPalIndex = 0, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( sPicTable_SquawkabillyWhitePlumage, @@ -1970,6 +2001,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Nacli, .iconSprite = gMonIcon_Nacli, .iconPalIndex = 2, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Nacli) OVERWORLD( sPicTable_Nacli, @@ -2032,6 +2064,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Naclstack, .iconSprite = gMonIcon_Naclstack, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_L) FOOTPRINT(Naclstack) OVERWORLD( sPicTable_Naclstack, @@ -2093,6 +2126,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Garganacl, .iconSprite = gMonIcon_Garganacl, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Garganacl) OVERWORLD( sPicTable_Garganacl, @@ -2155,6 +2189,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Charcadet, .iconSprite = gMonIcon_Charcadet, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Charcadet) OVERWORLD( sPicTable_Charcadet, @@ -2218,6 +2253,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Armarouge, .iconSprite = gMonIcon_Armarouge, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Armarouge) OVERWORLD( sPicTable_Armarouge, @@ -2278,6 +2314,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Ceruledge, .iconSprite = gMonIcon_Ceruledge, .iconPalIndex = 2, + SHADOW(9, 14, SHADOW_SIZE_L) FOOTPRINT(Ceruledge) OVERWORLD( sPicTable_Ceruledge, @@ -2341,6 +2378,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tadbulb, .iconSprite = gMonIcon_Tadbulb, .iconPalIndex = 0, + SHADOW(0, 19, SHADOW_SIZE_S) FOOTPRINT(Tadbulb) OVERWORLD( sPicTable_Tadbulb, @@ -2403,6 +2441,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bellibolt, .iconSprite = gMonIcon_Bellibolt, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Bellibolt) OVERWORLD( sPicTable_Bellibolt, @@ -2465,6 +2504,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wattrel, .iconSprite = gMonIcon_Wattrel, .iconPalIndex = 0, + SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Wattrel) OVERWORLD( sPicTable_Wattrel, @@ -2527,6 +2567,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Kilowattrel, .iconSprite = gMonIcon_Kilowattrel, .iconPalIndex = 0, + SHADOW(-6, 6, SHADOW_SIZE_M) FOOTPRINT(Kilowattrel) OVERWORLD( sPicTable_Kilowattrel, @@ -2589,6 +2630,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maschiff, .iconSprite = gMonIcon_Maschiff, .iconPalIndex = 0, + SHADOW(2, 5, SHADOW_SIZE_L) FOOTPRINT(Maschiff) OVERWORLD( sPicTable_Maschiff, @@ -2651,6 +2693,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Mabosstiff, .iconSprite = gMonIcon_Mabosstiff, .iconPalIndex = 0, + SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mabosstiff) OVERWORLD( sPicTable_Mabosstiff, @@ -2713,6 +2756,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Shroodle, .iconSprite = gMonIcon_Shroodle, .iconPalIndex = 0, + SHADOW(0, -6, SHADOW_SIZE_S) FOOTPRINT(Shroodle) OVERWORLD( sPicTable_Shroodle, @@ -2775,6 +2819,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Grafaiai, .iconSprite = gMonIcon_Grafaiai, .iconPalIndex = 0, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Grafaiai) OVERWORLD( sPicTable_Grafaiai, @@ -2837,6 +2882,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bramblin, .iconSprite = gMonIcon_Bramblin, .iconPalIndex = 1, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Bramblin) OVERWORLD( sPicTable_Bramblin, @@ -2899,6 +2945,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Brambleghast, .iconSprite = gMonIcon_Brambleghast, .iconPalIndex = 2, + SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Brambleghast) OVERWORLD( sPicTable_Brambleghast, @@ -2963,6 +3010,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Toedscool, .iconSprite = gMonIcon_Toedscool, .iconPalIndex = 0, + SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Toedscool) OVERWORLD( sPicTable_Toedscool, @@ -3027,6 +3075,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Toedscruel, .iconSprite = gMonIcon_Toedscruel, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Toedscruel) OVERWORLD( sPicTable_Toedscruel, @@ -3089,6 +3138,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Klawf, .iconSprite = gMonIcon_Klawf, .iconPalIndex = 0, + SHADOW(0, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Klawf) OVERWORLD( sPicTable_Klawf, @@ -3152,6 +3202,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Capsakid, .iconSprite = gMonIcon_Capsakid, .iconPalIndex = 1, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Capsakid) OVERWORLD( sPicTable_Capsakid, @@ -3214,6 +3265,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Scovillain, .iconSprite = gMonIcon_Scovillain, .iconPalIndex = 1, + SHADOW(6, 11, SHADOW_SIZE_M) FOOTPRINT(Scovillain) OVERWORLD( sPicTable_Scovillain, @@ -3277,6 +3329,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Rellor, .iconSprite = gMonIcon_Rellor, .iconPalIndex = 0, + SHADOW(4, -3, SHADOW_SIZE_L) FOOTPRINT(Rellor) OVERWORLD( sPicTable_Rellor, @@ -3339,6 +3392,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Rabsca, .iconSprite = gMonIcon_Rabsca, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Rabsca) OVERWORLD( sPicTable_Rabsca, @@ -3401,6 +3455,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Flittle, .iconSprite = gMonIcon_Flittle, .iconPalIndex = 1, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Flittle) OVERWORLD( sPicTable_Flittle, @@ -3463,6 +3518,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Espathra, .iconSprite = gMonIcon_Espathra, .iconPalIndex = 0, + SHADOW(-5, 10, SHADOW_SIZE_M) FOOTPRINT(Espathra) OVERWORLD( sPicTable_Espathra, @@ -3525,6 +3581,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkatink, .iconSprite = gMonIcon_Tinkatink, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Tinkatink) OVERWORLD( sPicTable_Tinkatink, @@ -3588,6 +3645,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkatuff, .iconSprite = gMonIcon_Tinkatuff, .iconPalIndex = 1, + SHADOW(-4, 5, SHADOW_SIZE_L) FOOTPRINT(Tinkatuff) OVERWORLD( sPicTable_Tinkatuff, @@ -3650,6 +3708,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkaton, .iconSprite = gMonIcon_Tinkaton, .iconPalIndex = 1, + SHADOW(-5, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tinkaton) OVERWORLD( sPicTable_Tinkaton, @@ -3712,6 +3771,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wiglett, .iconSprite = gMonIcon_Wiglett, .iconPalIndex = 0, + NO_SHADOW FOOTPRINT(Wiglett) OVERWORLD( sPicTable_Wiglett, @@ -3773,6 +3833,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wugtrio, .iconSprite = gMonIcon_Wugtrio, .iconPalIndex = 0, + NO_SHADOW FOOTPRINT(Wugtrio) OVERWORLD( sPicTable_Wugtrio, @@ -3836,6 +3897,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bombirdier, .iconSprite = gMonIcon_Bombirdier, .iconPalIndex = 0, + SHADOW(1, 18, SHADOW_SIZE_M) FOOTPRINT(Bombirdier) OVERWORLD( sPicTable_Bombirdier, @@ -3898,6 +3960,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Finizen, .iconSprite = gMonIcon_Finizen, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Finizen) OVERWORLD( sPicTable_Finizen, @@ -3960,6 +4023,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_PalafinZero, .iconSprite = gMonIcon_PalafinZero, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Palafin) OVERWORLD( sPicTable_PalafinZero, @@ -4022,6 +4086,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_PalafinHero, .iconSprite = gMonIcon_PalafinHero, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_M) FOOTPRINT(Palafin) OVERWORLD( sPicTable_PalafinHero, @@ -4086,6 +4151,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Varoom, .iconSprite = gMonIcon_Varoom, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_M) FOOTPRINT(Varoom) OVERWORLD( sPicTable_Varoom, @@ -4148,6 +4214,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Revavroom, .iconSprite = gMonIcon_Revavroom, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Revavroom) OVERWORLD( sPicTable_Revavroom, @@ -4210,6 +4277,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cyclizar, .iconSprite = gMonIcon_Cyclizar, .iconPalIndex = 1, + SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Cyclizar) OVERWORLD( sPicTable_Cyclizar, @@ -4273,6 +4341,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Orthworm, .iconSprite = gMonIcon_Orthworm, .iconPalIndex = 0, + SHADOW(6, 10, SHADOW_SIZE_L) FOOTPRINT(Orthworm) OVERWORLD( sPicTable_Orthworm, @@ -4337,6 +4406,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Glimmet, .iconSprite = gMonIcon_Glimmet, .iconPalIndex = 0, + SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Glimmet) OVERWORLD( sPicTable_Glimmet, @@ -4400,6 +4470,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Glimmora, .iconSprite = gMonIcon_Glimmora, .iconPalIndex = 0, + SHADOW(-3, 17, SHADOW_SIZE_M) FOOTPRINT(Glimmora) OVERWORLD( sPicTable_Glimmora, @@ -4462,6 +4533,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Greavard, .iconSprite = gMonIcon_Greavard, .iconPalIndex = 0, + SHADOW(3, 2, SHADOW_SIZE_M) FOOTPRINT(Greavard) OVERWORLD( sPicTable_Greavard, @@ -4524,6 +4596,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Houndstone, .iconSprite = gMonIcon_Houndstone, .iconPalIndex = 2, + SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Houndstone) OVERWORLD( sPicTable_Houndstone, @@ -4586,6 +4659,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Flamigo, .iconSprite = gMonIcon_Flamigo, .iconPalIndex = 1, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Flamigo) OVERWORLD( sPicTable_Flamigo, @@ -4649,6 +4723,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cetoddle, .iconSprite = gMonIcon_Cetoddle, .iconPalIndex = 0, + SHADOW(2, 0, SHADOW_SIZE_M) FOOTPRINT(Cetoddle) OVERWORLD( sPicTable_Cetoddle, @@ -4711,6 +4786,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cetitan, .iconSprite = gMonIcon_Cetitan, .iconPalIndex = 0, + SHADOW(-1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Cetitan) OVERWORLD( sPicTable_Cetitan, @@ -4774,6 +4850,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Veluza, .iconSprite = gMonIcon_Veluza, .iconPalIndex = 1, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Veluza) OVERWORLD( sPicTable_Veluza, @@ -4838,6 +4915,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dondozo, .iconSprite = gMonIcon_Dondozo, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dondozo) OVERWORLD( sPicTable_Dondozo, @@ -4901,6 +4979,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriCurly, .iconSprite = gMonIcon_TatsugiriCurly, .iconPalIndex = 0, + SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( sPicTable_TatsugiriCurly, @@ -4962,6 +5041,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriDroopy, .iconSprite = gMonIcon_TatsugiriDroopy, .iconPalIndex = 0, + SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( sPicTable_TatsugiriDroopy, @@ -5023,6 +5103,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriStretchy, .iconSprite = gMonIcon_TatsugiriStretchy, .iconPalIndex = 0, + SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( sPicTable_TatsugiriStretchy, @@ -5088,6 +5169,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GreatTusk, .iconSprite = gMonIcon_GreatTusk, .iconPalIndex = 0, + SHADOW(3, 6, SHADOW_SIZE_L) FOOTPRINT(GreatTusk) OVERWORLD( sPicTable_GreatTusk, @@ -5152,6 +5234,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ScreamTail, .iconSprite = gMonIcon_ScreamTail, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(ScreamTail) OVERWORLD( sPicTable_ScreamTail, @@ -5216,6 +5299,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_BruteBonnet, .iconSprite = gMonIcon_BruteBonnet, .iconPalIndex = 1, + SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(BruteBonnet) OVERWORLD( sPicTable_BruteBonnet, @@ -5283,6 +5367,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_FlutterMane, .iconSprite = gMonIcon_FlutterMane, .iconPalIndex = 2, + SHADOW(-2, 20, SHADOW_SIZE_S) FOOTPRINT(FlutterMane) OVERWORLD( sPicTable_FlutterMane, @@ -5346,6 +5431,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SlitherWing, .iconSprite = gMonIcon_SlitherWing, .iconPalIndex = 1, + SHADOW(-5, 13, SHADOW_SIZE_M) FOOTPRINT(SlitherWing) OVERWORLD( sPicTable_SlitherWing, @@ -5410,6 +5496,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SandyShocks, .iconSprite = gMonIcon_SandyShocks, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(SandyShocks) OVERWORLD( sPicTable_SandyShocks, @@ -5474,6 +5561,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronTreads, .iconSprite = gMonIcon_IronTreads, .iconPalIndex = 1, + SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(IronTreads) OVERWORLD( sPicTable_IronTreads, @@ -5538,6 +5626,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronBundle, .iconSprite = gMonIcon_IronBundle, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(IronBundle) OVERWORLD( sPicTable_IronBundle, @@ -5602,6 +5691,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronHands, .iconSprite = gMonIcon_IronHands, .iconPalIndex = 0, + SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(IronHands) OVERWORLD( sPicTable_IronHands, @@ -5667,6 +5757,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronJugulis, .iconSprite = gMonIcon_IronJugulis, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(IronJugulis) OVERWORLD( sPicTable_IronJugulis, @@ -5732,6 +5823,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronMoth, .iconSprite = gMonIcon_IronMoth, .iconPalIndex = 3, + SHADOW(-4, 14, SHADOW_SIZE_M) FOOTPRINT(IronMoth) OVERWORLD( sPicTable_IronMoth, @@ -5796,6 +5888,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronThorns, .iconSprite = gMonIcon_IronThorns, .iconPalIndex = 1, + SHADOW(-9, 12, SHADOW_SIZE_L) FOOTPRINT(IronThorns) OVERWORLD( sPicTable_IronThorns, @@ -5859,6 +5952,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Frigibax, .iconSprite = gMonIcon_Frigibax, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Frigibax) OVERWORLD( sPicTable_Frigibax, @@ -5921,6 +6015,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Arctibax, .iconSprite = gMonIcon_Arctibax, .iconPalIndex = 0, + SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Arctibax) OVERWORLD( sPicTable_Arctibax, @@ -5982,6 +6077,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Baxcalibur, .iconSprite = gMonIcon_Baxcalibur, .iconPalIndex = 0, + SHADOW(5, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Baxcalibur) OVERWORLD( sPicTable_Baxcalibur, @@ -6044,6 +6140,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GimmighoulChest, .iconSprite = gMonIcon_GimmighoulChest, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(GimmighoulChest) OVERWORLD( sPicTable_GimmighoulChest, @@ -6106,6 +6203,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GimmighoulRoaming, .iconSprite = gMonIcon_GimmighoulRoaming, .iconPalIndex = 0, + SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(GimmighoulRoaming) .levelUpLearnset = sGimmighoulLevelUpLearnset, .teachableLearnset = sGimmighoulTeachableLearnset, @@ -6160,6 +6258,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Gholdengo, .iconSprite = gMonIcon_Gholdengo, .iconPalIndex = 0, + SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Gholdengo) OVERWORLD( sPicTable_Gholdengo, @@ -6222,6 +6321,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_WoChien, .iconSprite = gMonIcon_WoChien, .iconPalIndex = 1, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(WoChien) OVERWORLD( sPicTable_WoChien, @@ -6286,6 +6386,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ChienPao, .iconSprite = gMonIcon_ChienPao, .iconPalIndex = 0, + SHADOW(-4, 8, SHADOW_SIZE_L) FOOTPRINT(ChienPao) OVERWORLD( sPicTable_ChienPao, @@ -6350,6 +6451,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TingLu, .iconSprite = gMonIcon_TingLu, .iconPalIndex = 0, + SHADOW(12, 13, SHADOW_SIZE_L) FOOTPRINT(TingLu) OVERWORLD( sPicTable_TingLu, @@ -6415,6 +6517,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ChiYu, .iconSprite = gMonIcon_ChiYu, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_S) FOOTPRINT(ChiYu) OVERWORLD( sPicTable_ChiYu, @@ -6481,6 +6584,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_RoaringMoon, .iconSprite = gMonIcon_RoaringMoon, .iconPalIndex = 0, + SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(RoaringMoon) OVERWORLD( sPicTable_RoaringMoon, @@ -6544,6 +6648,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronValiant, .iconSprite = gMonIcon_IronValiant, .iconPalIndex = 1, + SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(IronValiant) OVERWORLD( sPicTable_IronValiant, @@ -6607,6 +6712,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Koraidon, .iconSprite = gMonIcon_Koraidon, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Koraidon) OVERWORLD( sPicTable_Koraidon, @@ -6672,6 +6778,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Miraidon, .iconSprite = gMonIcon_Miraidon, .iconPalIndex = 2, + SHADOW(10, 14, SHADOW_SIZE_L) FOOTPRINT(Miraidon) OVERWORLD( sPicTable_Miraidon, @@ -6737,6 +6844,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_WalkingWake, .iconSprite = gMonIcon_WalkingWake, .iconPalIndex = 2, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(WalkingWake) OVERWORLD( sPicTable_WalkingWake, @@ -6800,6 +6908,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronLeaves, .iconSprite = gMonIcon_IronLeaves, .iconPalIndex = 1, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(IronLeaves) OVERWORLD( sPicTable_IronLeaves, @@ -6864,6 +6973,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Poltchageist, .iconSprite = gMonIcon_Poltchageist, .iconPalIndex = 1, + SHADOW(-1, 14, SHADOW_SIZE_S) FOOTPRINT(Poltchageist) OVERWORLD( sPicTable_Poltchageist, @@ -6925,6 +7035,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Poltchageist, .iconSprite = gMonIcon_Poltchageist, .iconPalIndex = 1, + SHADOW(-1, 14, SHADOW_SIZE_S) FOOTPRINT(Poltchageist) OVERWORLD( sPicTable_Poltchageist, @@ -6987,6 +7098,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sinistcha, .iconSprite = gMonIcon_Sinistcha, .iconPalIndex = 1, + SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Sinistcha) OVERWORLD( sPicTable_Sinistcha, @@ -7047,6 +7159,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sinistcha, .iconSprite = gMonIcon_Sinistcha, .iconPalIndex = 1, + SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Sinistcha) OVERWORLD( sPicTable_Sinistcha, @@ -7109,6 +7222,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Okidogi, .iconSprite = gMonIcon_Okidogi, .iconPalIndex = 1, + SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Okidogi) OVERWORLD( sPicTable_Okidogi, @@ -7173,6 +7287,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Munkidori, .iconSprite = gMonIcon_Munkidori, .iconPalIndex = 0, + SHADOW(1, 8, SHADOW_SIZE_S) FOOTPRINT(Munkidori) OVERWORLD( sPicTable_Munkidori, @@ -7237,6 +7352,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fezandipiti, .iconSprite = gMonIcon_Fezandipiti, .iconPalIndex = 0, + SHADOW(-3, 10, SHADOW_SIZE_M) FOOTPRINT(Fezandipiti) OVERWORLD( sPicTable_Fezandipiti, @@ -7298,6 +7414,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Ogerpon##Form1##Form2, \ .iconSprite = gMonIcon_Ogerpon##Form1##Mask, \ .iconPalIndex = iconpalette, \ + SHADOW(7, 13, SHADOW_SIZE_L) \ FOOTPRINT(Ogerpon) \ OVERWORLD( \ sPicTable_Ogerpon##Form1##Form2, \ @@ -7313,7 +7430,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .formChangeTable = sOgerponFormChangeTable, \ .isLegendary = TRUE, \ .isTeraForm = isTeraform, \ - .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), @@ -7378,6 +7495,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GougingFire, .iconSprite = gMonIcon_GougingFire, .iconPalIndex = 5, + SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(GougingFire) OVERWORLD( sPicTable_GougingFire, @@ -7442,6 +7560,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_RagingBolt, .iconSprite = gMonIcon_RagingBolt, .iconPalIndex = 2, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(RagingBolt) OVERWORLD( sPicTable_RagingBolt, @@ -7505,6 +7624,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronBoulder, .iconSprite = gMonIcon_IronBoulder, .iconPalIndex = 5, + SHADOW(4, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(IronBoulder) OVERWORLD( sPicTable_IronBoulder, @@ -7569,6 +7689,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronCrown, .iconSprite = gMonIcon_IronCrown, .iconPalIndex = 3, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(IronCrown) OVERWORLD( sPicTable_IronCrown, @@ -7634,6 +7755,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosNormal, .iconSprite = gMonIcon_TerapagosNormal, .iconPalIndex = 0, + SHADOW(3, 13, SHADOW_SIZE_L) FOOTPRINT(TerapagosNormal) OVERWORLD( sPicTable_TerapagosNormal, @@ -7702,6 +7824,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosTerastal, .iconSprite = gMonIcon_TerapagosTerastal, .iconPalIndex = 0, + SHADOW(-4, 4, SHADOW_SIZE_L) FOOTPRINT(TerapagosTerastal) OVERWORLD( sPicTable_TerapagosTerastal, @@ -7768,6 +7891,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosStellar, .iconSprite = gMonIcon_TerapagosStellar, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(TerapagosStellar) .isLegendary = TRUE, .isTeraForm = TRUE, @@ -7828,6 +7952,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pecharunt, .iconSprite = gMonIcon_Pecharunt, .iconPalIndex = 0, + SHADOW(2, 1, SHADOW_SIZE_L) FOOTPRINT(Pecharunt) OVERWORLD( sPicTable_Pecharunt, diff --git a/src/graphics.c b/src/graphics.c index 724b4791cb..703c32331f 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1387,6 +1387,7 @@ const u32 gBattleAnimSpritePal_Protect[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimBackgroundImageMuddyWater_Pal[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_muddy.gbapal.lz"); const u32 gEnemyMonShadow_Gfx[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz"); +const u32 gEnemyMonShadowsSized_Gfx[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadows_sized.4bpp.lz"); const u32 gBattleInterface_BallStatusBarGfx[] = INCBIN_U32("graphics/battle_interface/ball_status_bar.4bpp.lz"); diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index a0b7ddabc2..fea6324129 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -4,8 +4,6 @@ #include "battle_anim.h" #include "battle_gfx_sfx_util.h" #include "bg.h" -#include "constants/rgb.h" -#include "constants/songs.h" #include "data.h" #include "decompress.h" #include "event_object_movement.h" @@ -38,11 +36,15 @@ #include "text_window.h" #include "trainer_pokemon_sprites.h" +#include "constants/global.h" #include "constants/items.h" #include "constants/event_objects.h" +#include "constants/rgb.h" +#include "constants/songs.h" extern const struct BattleBackground sBattleTerrainTable[]; extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; +extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadowsSized; extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; extern const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2]; extern const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] ; @@ -396,6 +398,13 @@ const u8 gBattleBackgroundTerrainNames[][26] = [BATTLE_TERRAIN_BUILDING] = _("NORMAL - BUILDING "), [BATTLE_TERRAIN_PLAIN] = _("NORMAL - PLAIN "), }; +const u8 sShadowSizeLabels[][4] = +{ + [SHADOW_SIZE_S] = _(" S"), + [SHADOW_SIZE_M] = _(" M"), + [SHADOW_SIZE_L] = _(" L"), + [SHADOW_SIZE_XL_BATTLE_ONLY] = _(" XL"), +}; //Function declarations static void PrintDigitChars(struct PokemonSpriteVisualizer *data); static void SetUpModifyArrows(struct PokemonSpriteVisualizer *data); @@ -426,17 +435,27 @@ static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data) { u8 fontId = 0; u8 x = 2; - u8 textInstructions[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Exit {A_BUTTON} Submenu 1$"); - u8 textInstructionsGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Exit {A_BUTTON} Submenu 1$"); - u8 textInstructionsSubmenuOne[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back {A_BUTTON} Submenu 2$"); - u8 textInstructionsSubmenuOneGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back {A_BUTTON} Submenu 2$"); + u8 textInstructions[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Exit {A_BUTTON} Anims and BG$"); + u8 textInstructionsGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Exit {A_BUTTON} Anims and BG$"); + u8 textInstructionsSubmenuOne[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back {A_BUTTON} Sprite Coords$"); + u8 textInstructionsSubmenuOneGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back {A_BUTTON} Sprite Coords$"); +#if B_ENEMY_MON_SHADOW_STYLE >= GEN_4 + u8 textInstructionsSubmenuTwo[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back {A_BUTTON} Shadow Coords$"); + u8 textInstructionsSubmenuTwoGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back {A_BUTTON} Shadow Coords$"); + u8 textInstructionsSubmenuThree[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back"); + u8 textInstructionsSubmenuThreeGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back$"); +#else u8 textInstructionsSubmenuTwo[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back$"); u8 textInstructionsSubmenuTwoGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back$"); + u8 textInstructionsSubmenuThree[] = _("$"); + u8 textInstructionsSubmenuThreeGender[] = _("$"); +#endif u8 textBottom[] = _("BACK:\nFRONT:\nBG:$"); u8 textBottomForms[] = _("BACK:\nFRONT:\nBG:\nFORMS:$"); u8 textBottomSubmenuTwo[] = _("B coords:\nF coords:\nF elev:"); + u8 textBottomSubmenuThree[] = _("X coords:\nY coords:\nSize:"); u16 species = data->modifyArrows.currValue; u8 textL[] = _("{L_BUTTON}"); @@ -465,11 +484,18 @@ static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data) else AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuTwo, x, 0, 0, NULL); } + else if (data->currentSubmenu == 3) + { + if (SpeciesHasGenderDifferences(species)) + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuThreeGender, x, 0, 0, NULL); + else + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuThree, x, 0, 0, NULL); + } CopyWindowToVram(WIN_INSTRUCTIONS, COPYWIN_FULL); //Bottom left text FillWindowPixelBuffer(WIN_BOTTOM_LEFT, PIXEL_FILL(0)); - if (data->currentSubmenu != 2) + if (data->currentSubmenu < 2) { AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textL, 30, 0, 0, NULL); AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textR, 30, 12, 0, NULL); @@ -478,8 +504,10 @@ static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data) else AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottom, 0, 0, 0, NULL); } - else + else if (data->currentSubmenu == 2) AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottomSubmenuTwo, 0, 0, 0, NULL); + else if (data->currentSubmenu == 3) + AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottomSubmenuThree, 0, 0, 0, NULL); } static void VBlankCB(void) @@ -588,6 +616,7 @@ static void SetArrowInvisibility(struct PokemonSpriteVisualizer *data) gSprites[data->yPosModifyArrows.arrowSpriteId[0]].invisible = TRUE; break; case 2: + case 3: gSprites[data->modifyArrows.arrowSpriteId[0]].invisible = TRUE; gSprites[data->modifyArrows.arrowSpriteId[1]].invisible = TRUE; gSprites[data->optionArrows.arrowSpriteId[0]].invisible = TRUE; @@ -735,6 +764,20 @@ static void ResetOffsetSpriteValues(struct PokemonSpriteVisualizer *data) data->offsetsSpriteValues.offset_front_elevation = 0; } +static void ResetShadowSettings(struct PokemonSpriteVisualizer *data, u16 species) +{ + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3) + return; + + data->shadowSettings.definedX = gSpeciesInfo[species].enemyShadowXOffset; + data->shadowSettings.definedY = gSpeciesInfo[species].enemyShadowYOffset; + data->shadowSettings.definedSize = gSpeciesInfo[species].enemyShadowSize; + + data->shadowSettings.overrideX = data->shadowSettings.definedX; + data->shadowSettings.overrideY = data->shadowSettings.definedY; + data->shadowSettings.overrideSize = data->shadowSettings.definedSize; +} + static u8 GetBattlerSpriteFinal_YCustom(u16 species, s8 offset_picCoords, s8 offset_elevation) { u16 offset; @@ -758,18 +801,39 @@ static u8 GetBattlerSpriteFinal_YCustom(u16 species, s8 offset_picCoords, s8 off static void UpdateShadowSpriteInvisible(struct PokemonSpriteVisualizer *data) { + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + return; + if (data->constSpriteValues.frontElevation + data->offsetsSpriteValues.offset_front_elevation == 0) - gSprites[data->frontShadowSpriteId].invisible = TRUE; + gSprites[data->frontShadowSpriteIdPrimary].invisible = TRUE; else - gSprites[data->frontShadowSpriteId].invisible = FALSE; + gSprites[data->frontShadowSpriteIdPrimary].invisible = FALSE; } +#define tFrontSpriteId data[0] +#define tSpriteSide data[1] +#define tShadowXOffset data[2] +#define tShadowYOffset data[3] + +#define SPRITE_SIDE_LEFT 0 +#define SPRITE_SIDE_RIGHT 1 + + static void SpriteCB_EnemyShadowCustom(struct Sprite *shadowSprite) { - u8 frontSpriteId = shadowSprite->data[0]; + u8 frontSpriteId = shadowSprite->tFrontSpriteId; struct Sprite *battlerSprite = &gSprites[frontSpriteId]; - shadowSprite->x = battlerSprite->x; + s8 xOffset = 0, yOffset = 0; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + xOffset = shadowSprite->tShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16); + yOffset = shadowSprite->tShadowYOffset + 16; + + shadowSprite->y = battlerSprite->y + yOffset; + } + + shadowSprite->x = battlerSprite->x + xOffset; shadowSprite->x2 = battlerSprite->x2; } @@ -801,25 +865,60 @@ static void SpriteCB_Follower(struct Sprite *sprite) sprite->animDelayCounter--; } } - static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data, u16 species) { - u8 x, y; bool8 invisible = FALSE; species = SanitizeSpeciesId(species); - if (gSpeciesInfo[species].enemyMonElevation == 0) - invisible = TRUE; - LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); - LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); - x = sBattlerCoords[0][1].x; - y = sBattlerCoords[0][1].y; - data->frontShadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y + 29, 0xC8); - gSprites[data->frontShadowSpriteId].data[0] = data->frontspriteId; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + invisible = gSpeciesInfo[species].suppressEnemyShadow; - gSprites[data->frontShadowSpriteId].callback = SpriteCB_EnemyShadowCustom; - gSprites[data->frontShadowSpriteId].oam.priority = 0; - gSprites[data->frontShadowSpriteId].invisible = invisible; + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadowsSized); + LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); + u8 x = sBattlerCoords[0][1].x; + u8 y = sBattlerCoords[0][1].y; + s8 xOffset = data->shadowSettings.overrideX; + s8 yOffset = data->shadowSettings.overrideY; + u8 size = data->shadowSettings.overrideSize; + + data->frontShadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y, 0xC8); + gSprites[data->frontShadowSpriteIdPrimary].tFrontSpriteId = data->frontspriteId; + gSprites[data->frontShadowSpriteIdPrimary].tSpriteSide = SPRITE_SIDE_LEFT; + gSprites[data->frontShadowSpriteIdPrimary].tShadowXOffset = (u8)xOffset; + gSprites[data->frontShadowSpriteIdPrimary].tShadowYOffset = (u8)yOffset; + gSprites[data->frontShadowSpriteIdPrimary].callback = SpriteCB_EnemyShadowCustom; + gSprites[data->frontShadowSpriteIdPrimary].oam.priority = 0; + gSprites[data->frontShadowSpriteIdPrimary].oam.tileNum += 8 * size; + gSprites[data->frontShadowSpriteIdPrimary].invisible = invisible; + + data->frontShadowSpriteIdSecondary = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y, 0xC8); + gSprites[data->frontShadowSpriteIdSecondary].tFrontSpriteId = data->frontspriteId; + gSprites[data->frontShadowSpriteIdSecondary].tSpriteSide = SPRITE_SIDE_RIGHT; + gSprites[data->frontShadowSpriteIdSecondary].tShadowXOffset = (u8)xOffset; + gSprites[data->frontShadowSpriteIdSecondary].tShadowYOffset = (u8)yOffset; + gSprites[data->frontShadowSpriteIdSecondary].callback = SpriteCB_EnemyShadowCustom; + gSprites[data->frontShadowSpriteIdSecondary].oam.priority = 0; + gSprites[data->frontShadowSpriteIdSecondary].oam.tileNum += (8 * size) + 4; + gSprites[data->frontShadowSpriteIdSecondary].invisible = invisible; + } + else + { + if (gSpeciesInfo[species].enemyMonElevation == 0) + invisible = TRUE; + + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); + LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); + u8 x = sBattlerCoords[0][1].x; + u8 y = sBattlerCoords[0][1].y; + + data->frontShadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y + 29, 0xC8); + gSprites[data->frontShadowSpriteIdPrimary].data[0] = data->frontspriteId; + + gSprites[data->frontShadowSpriteIdPrimary].callback = SpriteCB_EnemyShadowCustom; + gSprites[data->frontShadowSpriteIdPrimary].oam.priority = 0; + gSprites[data->frontShadowSpriteIdPrimary].invisible = invisible; + } } //Battle background functions @@ -1044,6 +1143,55 @@ static void UpdateYPosOffsetText(struct PokemonSpriteVisualizer *data) AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); } +#define ABS(val) (val < 0 ? val * -1 : val) +#define ITOA_SIGNED(buf, val) \ +{ \ + buf[0] = val < 0 ? CHAR_HYPHEN : CHAR_SPACER; \ + ConvertIntToDecimalStringN(&text[1], ABS(val), STR_CONV_MODE_LEFT_ALIGN, 2); \ +} + +static void UpdateShadowSettingsText(struct PokemonSpriteVisualizer *data) +{ + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3) + return; + + u8 text[16]; + u8 fontId = 0; + u8 textConst[] = _("const val:"); + u8 textNew[] = _("new val:"); + u8 x_const_val = 50; + u8 x_new_text = 70; + u8 x_new_val = 110; + u8 y = 0; + + FillWindowPixelBuffer(WIN_BOTTOM_RIGHT, PIXEL_FILL(0)); + + // X offset + y = 0; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + ITOA_SIGNED(text, data->shadowSettings.definedX); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + ITOA_SIGNED(text, data->shadowSettings.overrideX); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); + + // Y offset + y = 12; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + ITOA_SIGNED(text, data->shadowSettings.definedY); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + ITOA_SIGNED(text, data->shadowSettings.overrideY); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); + + // Shadow Size + y = 24; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, sShadowSizeLabels[data->shadowSettings.definedSize], x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, sShadowSizeLabels[data->shadowSettings.overrideSize], x_new_val, y, 0, NULL); +} + static void ResetPokemonSpriteVisualizerWindows(void) { u8 i; @@ -1334,6 +1482,7 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment) data->animIdFront = gSpeciesInfo[modArrows->currValue].frontAnimId; UpdateMonAnimNames(taskId); ResetOffsetSpriteValues(data); + ResetShadowSettings(data, modArrows->currValue); UpdateBattlerValue(data); ReloadPokemonSprites(data); @@ -1421,6 +1570,79 @@ static void UpdateSubmenuTwoOptionValue(u8 taskId, bool8 increment) UpdateYPosOffsetText(data); } +static void UpdateShadowSettingsValue(u8 taskId, bool8 increment) +{ + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3) + return; + + struct PokemonSpriteVisualizer *data = GetStructPtr(taskId); + u8 option = data->submenuYpos[2]; + s8 *offset; + s16 *leftTarget, *rightTarget; + if (option == 0) + { + offset = &data->shadowSettings.overrideX; + leftTarget = &gSprites[data->frontShadowSpriteIdPrimary].tShadowXOffset; + rightTarget = &gSprites[data->frontShadowSpriteIdSecondary].tShadowXOffset; + } + else + { + offset = &data->shadowSettings.overrideY; + leftTarget = &gSprites[data->frontShadowSpriteIdPrimary].tShadowYOffset; + rightTarget = &gSprites[data->frontShadowSpriteIdSecondary].tShadowYOffset; + } + + *offset = *offset + (increment ? 1 : -1); + if (*offset > 20) + *offset = -20; + else if (*offset < -20) + *offset = 20; + UpdateShadowSettingsText(data); + + *leftTarget = (s16)*offset; + *rightTarget = (s16)*offset; +} + +static void UpdateShadowSizeValue(u8 taskId, bool8 increment) +{ + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3) + return; + + struct PokemonSpriteVisualizer *data = GetStructPtr(taskId); + s8 update; + + if (increment) + { + if (data->shadowSettings.overrideSize == SHADOW_SIZE_XL_BATTLE_ONLY) + { + update = -data->shadowSettings.overrideSize; + data->shadowSettings.overrideSize = SHADOW_SIZE_S; + } + else + { + update = 1; + data->shadowSettings.overrideSize += 1; + } + } + else + { + if (data->shadowSettings.overrideSize == SHADOW_SIZE_S) + { + update = SHADOW_SIZE_XL_BATTLE_ONLY; + data->shadowSettings.overrideSize = update; + } + else + { + update = -1; + data->shadowSettings.overrideSize -= 1; + } + } + + UpdateShadowSettingsText(data); + gSprites[data->frontShadowSpriteIdPrimary].oam.tileNum += (8 * update); + gSprites[data->frontShadowSpriteIdSecondary].oam.tileNum += (8 * update); +} + #define READ_PTR_FROM_TASK(taskId, dataId) \ (void *)( \ ((u16)(gTasks[taskId].data[dataId]) | \ @@ -1517,6 +1739,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) data->isFemale = FALSE; PrintDigitChars(data); UpdateBattlerValue(data); + ResetShadowSettings(data, data->currentmonId); ReloadPokemonSprites(data); data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1; data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId; @@ -1533,6 +1756,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) data->isFemale = FALSE; PrintDigitChars(data); UpdateBattlerValue(data); + ResetShadowSettings(data, data->currentmonId); ReloadPokemonSprites(data); data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1; data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId; @@ -1571,6 +1795,8 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) SetArrowInvisibility(data); SetConstSpriteValues(data); UpdateYPosOffsetText(data); + + gSprites[data->followerspriteId].invisible = TRUE; } else if (JOY_NEW(B_BUTTON)) { @@ -1621,13 +1847,22 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) } else if (data->currentSubmenu == 2) //Submenu 2 { - if (JOY_NEW(B_BUTTON)) + if (JOY_NEW(A_BUTTON) && B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + data->currentSubmenu = 3; + PrintInstructionsOnWindow(data); + SetArrowInvisibility(data); + UpdateShadowSettingsText(data); + } + else if (JOY_NEW(B_BUTTON)) { data->currentSubmenu = 1; SetArrowInvisibility(data); PrintInstructionsOnWindow(data); UpdateMonAnimNames(taskId); + + gSprites[data->followerspriteId].invisible = FALSE; } else if (JOY_NEW(DPAD_DOWN)) { @@ -1657,6 +1892,50 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) UpdateSubmenuTwoOptionValue(taskId, TRUE); } } + else if (data->currentSubmenu == 3) // Submenu 3 + { + if (JOY_NEW(B_BUTTON)) + { + data->currentSubmenu = 2; + PrintInstructionsOnWindow(data); + SetArrowInvisibility(data); + SetConstSpriteValues(data); + UpdateYPosOffsetText(data); + } + else if (JOY_NEW(DPAD_DOWN)) + { + data->submenuYpos[2] += 1; + if (data->submenuYpos[2] >= 3) + data->submenuYpos[2] = 0; + + data->yPosModifyArrows.currentDigit = data->submenuYpos[2]; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->yPosModifyArrows.currentDigit * 12; + } + else if (JOY_NEW(DPAD_UP)) + { + if (data->submenuYpos[2] == 0) + data->submenuYpos[2] = 2; + else + data->submenuYpos[2] -= 1; + + data->yPosModifyArrows.currentDigit = data->submenuYpos[2]; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->yPosModifyArrows.currentDigit * 12; + } + else if (JOY_NEW(DPAD_LEFT)) + { + if (data->submenuYpos[2] < 2) + UpdateShadowSettingsValue(taskId, FALSE); + else + UpdateShadowSizeValue(taskId, FALSE); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + if (data->submenuYpos[2] < 2) + UpdateShadowSettingsValue(taskId, TRUE); + else + UpdateShadowSizeValue(taskId, TRUE); + } + } } #undef sDelay #undef sAnimId @@ -1674,6 +1953,10 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) DestroySprite(&gSprites[data->iconspriteId]); DestroySprite(&gSprites[data->followerspriteId]); + DestroySprite(&gSprites[data->frontShadowSpriteIdPrimary]); + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + DestroySprite(&gSprites[data->frontShadowSpriteIdSecondary]); + FreeMonSpritesGfx(); ResetSpriteData(); ResetPaletteFade(); From 047289a63939541ed99edaea9d02dbc24bd3c8e8 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Tue, 10 Sep 2024 18:00:29 -0400 Subject: [PATCH 168/544] Improve AI's Skill Swap handling in double battles (#5360) * Improve AI contrary * Update src/battle_ai_util.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Fix additionalEffects loop * moves[i] to aiMove * Update src/battle_ai_util.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/battle_ai_util.h | 2 ++ src/battle_ai_main.c | 19 +++++++++--- src/battle_ai_util.c | 48 +++++++++++++++++++++++++++++ test/battle/ai/ai_check_viability.c | 15 +++++++++ 4 files changed, 80 insertions(+), 4 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 3146bb94fd..5fecdd5f47 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -114,6 +114,7 @@ bool32 HasMoveEffectANDArg(u32 battlerId, u32 effect, u32 argument); bool32 HasMoveWithAdditionalEffect(u32 battlerId, u32 moveEffect); bool32 HasMoveWithCriticalHitChance(u32 battlerId); bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, u32 exception); +bool32 HasMoveThatLowersOwnStats(u32 battlerId); bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); bool32 HasAnyKnownMove(u32 battlerId); bool32 IsAromaVeilProtectedMove(u32 move); @@ -138,6 +139,7 @@ bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move); bool32 HasThawingMove(u32 battler); bool32 IsStatRaisingEffect(u32 effect); bool32 IsStatLoweringEffect(u32 effect); +bool32 IsSelfStatLoweringEffect(u32 effect); bool32 IsAttackBoostMoveEffect(u32 effect); bool32 IsUngroundingEffect(u32 effect); bool32 IsSemiInvulnerable(u32 battlerDef, u32 move); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index b71e6799e0..af6557e967 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3049,15 +3049,26 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_SKILL_SWAP: if (aiData->abilities[battlerAtk] != aiData->abilities[BATTLE_PARTNER(battlerAtk)] && !attackerHasBadAbility) { + // Partner abilities if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_TRUANT) { - RETURN_SCORE_PLUS(10); + ADJUST_SCORE(10); } - else if (aiData->abilities[battlerAtk] == ABILITY_COMPOUND_EYES - && HasMoveWithLowAccuracy(battlerAtkPartner, FOE(battlerAtkPartner), 90, TRUE, atkPartnerAbility, aiData->abilities[FOE(battlerAtkPartner)], atkPartnerHoldEffect, aiData->holdEffects[FOE(battlerAtkPartner)])) + else if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_INTIMIDATE) { - RETURN_SCORE_PLUS(3); + ADJUST_SCORE(DECENT_EFFECT); } + // Active mon abilities + if (aiData->abilities[battlerAtk] == ABILITY_COMPOUND_EYES + && HasMoveWithLowAccuracy(battlerAtkPartner, FOE(battlerAtkPartner), 90, TRUE, atkPartnerAbility, aiData->abilities[FOE(battlerAtkPartner)], atkPartnerHoldEffect, aiData->holdEffects[FOE(battlerAtkPartner)])) + { + ADJUST_SCORE(GOOD_EFFECT); + } + else if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY && HasMoveThatLowersOwnStats(battlerAtkPartner)) + { + ADJUST_SCORE(GOOD_EFFECT); + } + return score; } break; case EFFECT_ROLE_PLAY: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index b2e18db740..1ac43fb737 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2089,6 +2089,26 @@ bool32 HasAnyKnownMove(u32 battlerId) return FALSE; } +bool32 HasMoveThatLowersOwnStats(u32 battlerId) +{ + s32 i, j; + u32 aiMove; + u16 *moves = GetMovesArray(battlerId); + for (i = 0; i < MAX_MON_MOVES; i++) + { + aiMove = moves[i]; + if (aiMove != MOVE_NONE && aiMove != MOVE_UNAVAILABLE) + { + for (j = 0; j < gMovesInfo[aiMove].numAdditionalEffects; j++) + { + if (IsSelfStatLoweringEffect(gMovesInfo[aiMove].additionalEffects[j].moveEffect) && gMovesInfo[aiMove].additionalEffects[j].self) + return TRUE; + } + } + } + return FALSE; +} + bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect) { s32 i; @@ -2294,6 +2314,34 @@ bool32 IsStatLoweringEffect(u32 effect) } } +bool32 IsSelfStatLoweringEffect(u32 effect) +{ + // Self stat lowering moves like Overheart, Superpower etc. + switch (effect) + { + case MOVE_EFFECT_ATK_MINUS_1: + case MOVE_EFFECT_DEF_MINUS_1: + case MOVE_EFFECT_SPD_MINUS_1: + case MOVE_EFFECT_SP_ATK_MINUS_1: + case MOVE_EFFECT_SP_DEF_MINUS_1: + case MOVE_EFFECT_EVS_MINUS_1: + case MOVE_EFFECT_ACC_MINUS_1: + case MOVE_EFFECT_ATK_MINUS_2: + case MOVE_EFFECT_DEF_MINUS_2: + case MOVE_EFFECT_SPD_MINUS_2: + case MOVE_EFFECT_SP_ATK_MINUS_2: + case MOVE_EFFECT_SP_DEF_MINUS_2: + case MOVE_EFFECT_EVS_MINUS_2: + case MOVE_EFFECT_ACC_MINUS_2: + case MOVE_EFFECT_V_CREATE: + case MOVE_EFFECT_ATK_DEF_DOWN: + case MOVE_EFFECT_DEF_SPDEF_DOWN: + return TRUE; + default: + return FALSE; + } +} + bool32 HasDamagingMove(u32 battlerId) { u32 i; diff --git a/test/battle/ai/ai_check_viability.c b/test/battle/ai/ai_check_viability.c index fa921e8674..039d8ca331 100644 --- a/test/battle/ai/ai_check_viability.c +++ b/test/battle/ai/ai_check_viability.c @@ -239,3 +239,18 @@ AI_SINGLE_BATTLE_TEST("AI chooses moves that cure inactive party members") TURN { EXPECT_MOVE(opponent, MOVE_HEAL_BELL); } } } + +AI_DOUBLE_BATTLE_TEST("AI prioritizes Skill Swapping Contrary to allied mons that would benefit from it") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SKILL_SWAP].effect == EFFECT_SKILL_SWAP); + ASSUME(gMovesInfo[MOVE_OVERHEAT].additionalEffects[0].moveEffect == MOVE_EFFECT_SP_ATK_MINUS_2); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_DOUBLE_BATTLE); + PLAYER(SPECIES_WOBBUFFET) { Speed(3); } + PLAYER(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(SPECIES_SPINDA) { Ability(ABILITY_CONTRARY); Speed(5); Moves(MOVE_SKILL_SWAP, MOVE_ENCORE, MOVE_FAKE_TEARS, MOVE_SWAGGER); } + OPPONENT(SPECIES_ARCANINE) { Ability(ABILITY_INTIMIDATE); Speed(4); Moves (MOVE_OVERHEAT); } + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_SKILL_SWAP, target:opponentRight); EXPECT_MOVE(opponentRight, MOVE_OVERHEAT); } + } +} From 28786b42a6cf2f31333d9bc618ef63eae1553d0b Mon Sep 17 00:00:00 2001 From: Skye Chappelle Date: Tue, 10 Sep 2024 23:36:13 -0400 Subject: [PATCH 169/544] Update INSTALL.md to state that Windows 8 is no longer supported by Microsoft --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 7ffcdee07b..03b28ba464 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -24,7 +24,7 @@ Unscientific benchmarks suggest **msys2 is 2x slower** than WSL1, and **Cygwin i All of the Windows instructions assume that the default drive is C:\\. If this differs to your actual drive letter, then replace C with the correct drive letter when reading the instructions. -**A note of caution**: As Windows 7 is officially unsupported by Microsoft and Windows 8 has very little usage, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10 instructions. +**A note of caution**: As Windows 7 and Windows 8 are officially unsupported by Microsoft, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10/11 instructions. ## Windows 10/11 (WSL1) WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL). From a75be4124d9d06524ef42c9eb670f3bb93c5749b Mon Sep 17 00:00:00 2001 From: Skye Chappelle Date: Tue, 10 Sep 2024 23:39:41 -0400 Subject: [PATCH 170/544] Update pull_request_template.md to include Discord username update --- .github/pull_request_template.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c381b50f1b..6bf2034006 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -4,5 +4,5 @@ ## **Discord contact info** - - \ No newline at end of file + + From 20e937a7241b86766657a6c5bf2cde05a164ee9e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 11 Sep 2024 16:33:11 -0300 Subject: [PATCH 171/544] Rebuild of makefile 1: Modern as default --- Makefile | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index bb0e3e7064..fde014f815 100644 --- a/Makefile +++ b/Makefile @@ -3,19 +3,20 @@ TITLE := POKEMON EMER GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 -MODERN ?= 0 -# `File name`.gba ('_modern' will be appended to the modern builds) +# `File name`.gba ('_agbcc' will be appended to the non-modern builds) FILE_NAME := pokeemerald BUILD_DIR := build # Builds the ROM using a modern compiler -MODERN ?= 0 +MODERN ?= 1 # Compares the ROM to a checksum of the original - only makes sense using when non-modern COMPARE ?= 0 +# Executes the Test Runner System that checks that all mechanics work as expected +TEST ?= 0 -ifeq (modern,$(MAKECMDGOALS)) - MODERN := 1 +ifeq (agbcc,$(MAKECMDGOALS)) + MODERN := 0 endif ifeq (compare,$(MAKECMDGOALS)) COMPARE := 1 @@ -66,9 +67,9 @@ else CPP := $(PREFIX)cpp endif -ROM_NAME := $(FILE_NAME).gba +ROM_NAME := $(FILE_NAME)_agbcc.gba OBJ_DIR_NAME := $(BUILD_DIR)/emerald -MODERN_ROM_NAME := $(FILE_NAME)_modern.gba +MODERN_ROM_NAME := $(FILE_NAME).gba MODERN_OBJ_DIR_NAME := $(BUILD_DIR)/modern ELF_NAME := $(ROM_NAME:.gba=.elf) @@ -116,7 +117,7 @@ INCLUDE_CPP_ARGS := $(INCLUDE_DIRS:%=-iquote %) INCLUDE_SCANINC_ARGS := $(INCLUDE_DIRS:%=-I %) O_LEVEL ?= 2 -CPPFLAGS := $(INCLUDE_CPP_ARGS) -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) +CPPFLAGS := $(INCLUDE_CPP_ARGS) -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -DTESTING=$(TEST) ifeq ($(MODERN),0) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef CC1 := tools/agbcc/bin/agbcc$(EXE) @@ -166,7 +167,7 @@ MAKEFLAGS += --no-print-directory .SECONDEXPANSION: RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidynonmodern generated clean-generated -.PHONY: all rom modern compare +.PHONY: all rom agbcc modern compare .PHONY: $(RULES_NO_SCAN) infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -226,6 +227,12 @@ $(shell mkdir -p $(SUBDIRS)) # Pretend rules that are actually flags defer to `make all` modern: all compare: all +# Uncomment the next line, and then comment the 4 lines after it to reenable agbcc. +#agbcc: all +agbcc: + @echo "'make agbcc' is deprecated as of pokeemerald-expansion 1.9 and will be removed in 1.10." + @echo "Search for 'agbcc: all' in Makefile to reenable agbcc." + @exit 1 # Other rules rom: $(ROM) From 83872ab89fb9e92f7fc9976fe0c8af6254d1082e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 11 Sep 2024 19:31:40 -0300 Subject: [PATCH 172/544] Rebuild of makefile 2: -Wall and UNUSED_ERROR --- Makefile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fde014f815..2611eed2ef 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,8 @@ MODERN ?= 1 COMPARE ?= 0 # Executes the Test Runner System that checks that all mechanics work as expected TEST ?= 0 +# Count unused warnings as errors. Used by RH-Hideout's repo +UNUSED_ERROR ?= 0 ifeq (agbcc,$(MAKECMDGOALS)) MODERN := 0 @@ -129,7 +131,13 @@ else MODERNCC := $(PREFIX)gcc PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) CC1 := $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet - override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast + override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init + # Only throw an error for unused elements if its RH-Hideout's repo + ifeq ($(UNUSED_ERROR),0) + ifneq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) + override CFLAGS += -Wno-error=unused-variable -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-function -Wno-error=unused-but-set-parameter -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=unused-local-typedefs + endif + endif LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall endif From 5f8c9158267b83482e538e224abfd4d35fce7d0a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 11 Sep 2024 19:40:52 -0300 Subject: [PATCH 173/544] Rebuild of makefile 3: ANALYZE --- Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Makefile b/Makefile index 2611eed2ef..6f87e1aa74 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,8 @@ MODERN ?= 1 COMPARE ?= 0 # Executes the Test Runner System that checks that all mechanics work as expected TEST ?= 0 +# Enables -fanalyzer C flag to analyze in depth potential UBs +ANALYZE ?= 0 # Count unused warnings as errors. Used by RH-Hideout's repo UNUSED_ERROR ?= 0 @@ -132,6 +134,9 @@ else PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) CC1 := $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init + ifeq ($(ANALYZE),1) + override CFLAGS += -fanalyzer + endif # Only throw an error for unused elements if its RH-Hideout's repo ifeq ($(UNUSED_ERROR),0) ifneq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) From 5790200e2d602b1b9eb40b7ea7b25ec2b6ff0b20 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 11 Sep 2024 20:05:18 -0300 Subject: [PATCH 174/544] Rebuild of makefile 4: Teachable learnset helper --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 6f87e1aa74..2b87d61e08 100644 --- a/Makefile +++ b/Makefile @@ -407,6 +407,10 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(RAMSCRGEN) ewram_data $< ENGLISH > $@ +# NOTE: Depending on event_scripts.o is hacky, but we want to depend on everything event_scripts.s depends on without having to alter scaninc +$(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(DATA_ASM_BUILDDIR)/event_scripts.o + python3 $(TOOLS_DIR)/learnset_helpers/teachable.py + # Linker script ifeq ($(MODERN),0) LD_SCRIPT := ld_script.ld From e13f399a67a2af1b6843dcbcf57282ed526e48fb Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Thu, 12 Sep 2024 04:13:08 -0400 Subject: [PATCH 175/544] Switch AI hitsToKO considers one shot prevention (#5371) * One shot prevention effects * I'm bad at brackets --- src/battle_ai_switch_items.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index b087cf3939..2fb8417ad9 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1609,7 +1609,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) u16 maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, item = AI_DATA->switchinCandidate.battleMon.item, heldItemEffect = ItemId_GetHoldEffect(item); u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = ItemId_GetHoldEffectParam(item); u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); - u32 opposingAbility = gBattleMons[opposingBattler].ability; + u32 opposingAbility = gBattleMons[opposingBattler].ability, ability = AI_DATA->switchinCandidate.battleMon.ability; bool32 usedSingleUseHealingItem = FALSE; s32 currentHP = startingHP; @@ -1631,6 +1631,10 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) // Take attack damage for the turn currentHP = currentHP - damageTaken; + // One shot prevention effects + if (damageTaken >= maxHP && currentHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (B_STURDY >= GEN_5 && ability == ABILITY_STURDY))) + currentHP = 1; + // If mon is still alive, apply weather impact first, as it might KO the mon before it can heal with its item (order is weather -> item -> status) if (currentHP != 0) currentHP = currentHP - weatherImpact; From f87440a25a518b1eb54df0b46b7350aa5832416f Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 12 Sep 2024 05:43:55 -0700 Subject: [PATCH 176/544] Removed setmonball per https://github.com/rh-hideout/pokeemerald-expansion/pull/5177\#issuecomment-2294980531 --- .swo | Bin 0 -> 4096 bytes asm/macros/event.inc | 8 -------- data/specials.inc | 1 - src/field_specials.c | 6 ------ 4 files changed, 15 deletions(-) create mode 100644 .swo diff --git a/.swo b/.swo new file mode 100644 index 0000000000000000000000000000000000000000..dac352690102655cc3a6e5f5a7fee17b83ce8ed2 GIT binary patch literal 4096 zcmYc?2=nw+u+%eP00IFJ0RcOh7#IqQ(_mb@w2N!7cZh$0uBAm-n5(H7UbUl=qaiRF z0s|ESoT0`>hTyEOtfZ(QEEGCW4jHv~Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU;sh@ E055zBfdBvi literal 0 HcmV?d00001 diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 986ed8305f..a4057b22db 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2399,14 +2399,6 @@ setvar VAR_0x8005, \species setvar VAR_0x8006, FLAG_SET_CAUGHT specialvar VAR_RESULT, Script_GetSetPokedexFlag - .endm - - @ Changes the caught ball of a selected Pokémon - .macro setmonball ballId:req - special ChoosePartyMon - waitstate - setvar VAR_0x8005, \ballId - special SetMonBall .endm @ Check if the Player has \speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. diff --git a/data/specials.inc b/data/specials.inc index ed88d42eae..54a5218c37 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -557,7 +557,6 @@ gSpecials:: def_special GetObjectPosition def_special CheckObjectAtXY def_special Script_GetSetPokedexFlag - def_special SetMonBall def_special CheckPartyHasSpecie def_special CheckChosenMonMatchDesiredSpecie def_special Script_GetObjectFacingDirection diff --git a/src/field_specials.c b/src/field_specials.c index 4081e83757..d26f9219cf 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4334,12 +4334,6 @@ bool32 Script_GetSetPokedexFlag(void) return GetSetPokedexFlag(speciesId,desiredFlag); } -void SetMonBall(void) -{ - u32 ballId = gSpecialVar_0x8005; - SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_POKEBALL, &ballId); -} - bool32 CheckPartyHasSpecie(void) { u32 partyIndex; From 979c9994f76c0823b3d221e4c94d67c87a07ee74 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 12 Sep 2024 05:47:12 -0700 Subject: [PATCH 177/544] Set VAR_RESULT to the number of removed items from removeallitem per https://github.com/rh-hideout/pokeemerald-expansion/pull/5177\#issuecomment-2294980531 --- .swo | Bin 4096 -> 0 bytes asm/macros/event.inc | 2 +- src/scrcmd.c | 4 +++- 3 files changed, 4 insertions(+), 2 deletions(-) delete mode 100644 .swo diff --git a/.swo b/.swo deleted file mode 100644 index dac352690102655cc3a6e5f5a7fee17b83ce8ed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmYc?2=nw+u+%eP00IFJ0RcOh7#IqQ(_mb@w2N!7cZh$0uBAm-n5(H7UbUl=qaiRF z0s|ESoT0`>hTyEOtfZ(QEEGCW4jHv~Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU;sh@ E055zBfdBvi diff --git a/asm/macros/event.inc b/asm/macros/event.inc index a4057b22db..dff3faf83a 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2339,7 +2339,7 @@ callnative ScriptHideItemDescription .endm - @ Remove all of specified item from the player's bag + @ Remove all of specified item from the player's bag and return the number of removed items to VAR_RESULT .macro removeallitem itemId:req callnative RemoveAllItem .2byte \itemId diff --git a/src/scrcmd.c b/src/scrcmd.c index 12ec041895..7062721a94 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2477,5 +2477,7 @@ void ScriptSetDoubleBattleFlag(struct ScriptContext *ctx) void RemoveAllItem(struct ScriptContext *ctx) { u32 itemId = VarGet(ScriptReadHalfword(ctx)); - RemoveBagItem(itemId, CountTotalItemQuantityInBag(itemId)); + u32 count = CountTotalItemQuantityInBag(itemId); + gSpecialVar_Result = count; + RemoveBagItem(itemId, count); } From 2f4dc1996ca5afdc9a8581b47a81b8aed510c3a8 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:05:29 +0200 Subject: [PATCH 178/544] Some Strings were switched (#5374) --- src/pokemon_storage_system.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 54fee9e77a..ef0c644c7d 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -8054,15 +8054,15 @@ static const u8 *const sMenuTexts[] = [MENU_CANCEL] = COMPOUND_STRING("CANCEL"), [MENU_STORE] = COMPOUND_STRING("STORE"), [MENU_WITHDRAW] = COMPOUND_STRING("WITHDRAW"), - [MENU_MOVE] = COMPOUND_STRING("SHIFT"), - [MENU_SHIFT] = COMPOUND_STRING("MOVE"), + [MENU_MOVE] = COMPOUND_STRING("MOVE"), + [MENU_SHIFT] = COMPOUND_STRING("SHIFT"), [MENU_PLACE] = COMPOUND_STRING("PLACE"), [MENU_SUMMARY] = COMPOUND_STRING("SUMMARY"), [MENU_RELEASE] = COMPOUND_STRING("RELEASE"), [MENU_MARK] = COMPOUND_STRING("MARK"), - [MENU_JUMP] = COMPOUND_STRING("NAME"), - [MENU_WALLPAPER] = COMPOUND_STRING("JUMP"), - [MENU_NAME] = COMPOUND_STRING("WALLPAPER"), + [MENU_JUMP] = COMPOUND_STRING("JUMP"), + [MENU_WALLPAPER] = COMPOUND_STRING("WALLPAPER"), + [MENU_NAME] = COMPOUND_STRING("NAME"), [MENU_TAKE] = COMPOUND_STRING("TAKE"), [MENU_GIVE] = gPCText_Give, [MENU_GIVE_2] = gPCText_Give, From c804e605d83bcf1a4a931f177ffa445c111773ed Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:40:17 +0200 Subject: [PATCH 179/544] Adds CanEndureHit AI function (#5373) * Adds CanEndureHit AI function * use ai data * missed a function --- src/battle_ai_util.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 5fabe7c134..3f08ace393 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1113,6 +1113,26 @@ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 moveConsidered) return AI_IS_SLOWER; } +static bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) +{ + if (!BATTLER_MAX_HP(battlerTarget) || gMovesInfo[move].effect == EFFECT_MULTI_HIT) + return FALSE; + if (gMovesInfo[move].strikeCount > 1 && !(gMovesInfo[move].effect == EFFECT_DRAGON_DARTS && IsValidDoubleBattle(battlerTarget))) + return FALSE; + if (AI_DATA->holdEffects[battlerTarget] == HOLD_EFFECT_FOCUS_SASH) + return TRUE; + + if (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battler], move)) + { + if (B_STURDY >= GEN_5 && AI_DATA->abilities[battlerTarget] == ABILITY_STURDY) + return TRUE; + if (gBattleMons[battlerTarget].species == SPECIES_MIMIKYU_DISGUISED) + return TRUE; + } + + return FALSE; +} + // Check if target has means to faint ai mon. bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) { @@ -1123,7 +1143,8 @@ bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) - && AI_DATA->simulatedDmg[battlerDef][battlerAtk][i].expected >= gBattleMons[battlerAtk].hp) + && AI_DATA->simulatedDmg[battlerDef][battlerAtk][i].expected >= gBattleMons[battlerAtk].hp + && !CanEndureHit(battlerDef, battlerAtk, moves[i])) { return TRUE; } @@ -1210,7 +1231,13 @@ bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) dmg *= numHits; if (gBattleMons[battlerDef].hp <= dmg) - return TRUE; + { + if (numHits > 1) + return TRUE; + + if (!CanEndureHit(battlerAtk, battlerDef, moves[i])) + return TRUE; + } } } @@ -1922,13 +1949,14 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits) { s32 dmg; + u16 *moves = gBattleMons[battlerAtk].moves; if (numHits) dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index].expected * numHits; else dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index].minimum; - if (gBattleMons[battlerDef].hp <= dmg) + if (gBattleMons[battlerDef].hp <= dmg && !CanEndureHit(battlerAtk, battlerDef, moves[index])) return TRUE; return FALSE; } From d9b824db3f6ede8007be70b58c03874451f9d046 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 12 Sep 2024 12:27:31 -0400 Subject: [PATCH 180/544] Sync missing alignment from pokefirered --- tools/mapjson/mapjson.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 1a10c9dab8..94328b4857 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -197,7 +197,7 @@ string generate_map_events_text(Json map_data) { string mapName = json_to_string(map_data, "name"); - text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" << mapName << "/map.json\n@\n\n"; + text << "@\n@ DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/" << mapName << "/map.json\n@\n\n\t.align 2\n\n"; string objects_label, warps_label, coords_label, bgs_label; From 9bdc9e5dab3bbe0dc5a1d73d2f74a704ae965f79 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:49:29 -0400 Subject: [PATCH 181/544] Disguise KO prevention consideration (#5375) --- src/battle_ai_switch_items.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 2fb8417ad9..c33878465a 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1610,7 +1610,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = ItemId_GetHoldEffectParam(item); u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); u32 opposingAbility = gBattleMons[opposingBattler].ability, ability = AI_DATA->switchinCandidate.battleMon.ability; - bool32 usedSingleUseHealingItem = FALSE; + bool32 usedSingleUseHealingItem = FALSE, opponentCanBreakMold = IsMoldBreakerTypeAbility(opposingBattler, opposingAbility); s32 currentHP = startingHP; // No damage being dealt @@ -1632,7 +1632,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) currentHP = currentHP - damageTaken; // One shot prevention effects - if (damageTaken >= maxHP && currentHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (B_STURDY >= GEN_5 && ability == ABILITY_STURDY))) + if (damageTaken >= maxHP && currentHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && B_STURDY >= GEN_5 && ability == ABILITY_STURDY))) currentHP = 1; // If mon is still alive, apply weather impact first, as it might KO the mon before it can heal with its item (order is weather -> item -> status) @@ -1697,6 +1697,10 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) hitsToKO++; } + // Disguise will always add an extra hit to KO + if (opponentCanBreakMold && AI_DATA->switchinCandidate.battleMon.species == SPECIES_MIMIKYU_DISGUISED) + hitsToKO++; + // If mon had a hypothetical status from TSpikes, clear it if (AI_DATA->switchinCandidate.hypotheticalStatus == TRUE) { From 7007439be899cd0901c2145f5eb219c9d7776a51 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 12 Sep 2024 13:50:47 -0400 Subject: [PATCH 182/544] Remove old ld_script processing --- Makefile | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 7e5e14cd61..ce868f06bd 100644 --- a/Makefile +++ b/Makefile @@ -392,18 +392,14 @@ LD_SCRIPT := ld_script_modern.ld LD_SCRIPT_DEPS := endif -$(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) - sed "s#tools/#tools/#g" $(LD_SCRIPT) > $(OBJ_DIR)/ld_script.ld - # Final rules libagbsyscall: @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) # Elf from object files -$(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) libagbsyscall - @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld -o ../../$@ " - @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ld_script.ld --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat +$(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) libagbsyscall + @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent # Builds the rom from the elf file From 22b0fdf5c3cd5cb68f4f23a75b4d917e391e77ac Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 12 Sep 2024 18:18:41 -0700 Subject: [PATCH 183/544] Removed checkspecies_auto and made that the default behavior --- asm/macros/event.inc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index dff3faf83a..f3fa3a4027 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2402,7 +2402,7 @@ .endm @ Check if the Player has \speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. - .macro checkspecies speciesId:req, mode:req + .macro checkspecies speciesId:req, mode=NO_PARTY_SCREEN setvar VAR_0x8005, \speciesId .if \mode == OPEN_PARTY_SCREEN special ChoosePartyMon @@ -2417,10 +2417,6 @@ checkspecies \speciesId, OPEN_PARTY_SCREEN .endm - .macro checkspecies_auto speciesId:req - checkspecies \speciesId, NO_PARTY_SCREEN - .endm - @ Gets the facing direction of a given event object and stores it in the variable \dest. .macro getobjectfacingdirection localId:req, dest:req setvar VAR_0x8005, \localId From 10bb349b8cc2b46ffd22cd9e36ce0c18a032d281 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 12 Sep 2024 18:41:42 -0700 Subject: [PATCH 184/544] Changed GetObjectPosition to callnative --- asm/macros/event.inc | 22 +++++++++++----------- data/specials.inc | 1 - src/field_specials.c | 24 ------------------------ src/scrcmd.c | 25 +++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index f3fa3a4027..b2a2d46159 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2347,21 +2347,21 @@ @ Stores the position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y). Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will takje the object's template position. .macro getobjectxy localId:req, posType:req - setvar VAR_0x8000, \localId - setvar VAR_0x8001, \posType - special GetObjectPosition + callnative GetObjectPosition + .2byte \localId + .2byte \posType .endm - .macro getobjecttemplatexy localId:req - setvar VAR_0x8000, \localId - setvar VAR_0x8001, TEMPLATE_POSITION - special GetObjectPosition + .macro getobjecttemplatexy localId:req, posType = TEMPLATE_POSITION + callnative GetObjectPosition + .2byte \localId + .2byte \posType .endm - .macro getobjectcurrentxy localId:req - setvar VAR_0x8000, \localId - setvar VAR_0x8001, CURRENT_POSITION - special GetObjectPosition + .macro getobjectcurrentxy localId:req, posType = CURRENT_POSITION + callnative GetObjectPosition + .2byte \localId + .2byte \posType .endm @ checks if there is any object at a given position diff --git a/data/specials.inc b/data/specials.inc index 54a5218c37..3232dca7af 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -554,7 +554,6 @@ gSpecials:: def_special Script_GetChosenMonDefensiveEVs def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs - def_special GetObjectPosition def_special CheckObjectAtXY def_special Script_GetSetPokedexFlag def_special CheckPartyHasSpecie diff --git a/src/field_specials.c b/src/field_specials.c index d26f9219cf..3c27ade570 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4278,30 +4278,6 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } -void GetObjectPosition(void) -{ - u32 localId = gSpecialVar_0x8000; - u32 useTemplate = gSpecialVar_0x8001; - u32 objectId; - struct ObjectEvent* objEvent; - - u16 *x = &gSpecialVar_0x8007; - u16 *y = &gSpecialVar_0x8008; - - if (useTemplate) - { - const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); - *x = objTemplate->x; - *y = objTemplate->y; - return; - } - - objectId = GetObjectEventIdByLocalId(localId); - objEvent = &gObjectEvents[objectId]; - *x = objEvent->currentCoords.x - 7; - *y = objEvent->currentCoords.y - 7; -} - bool32 CheckObjectAtXY(void) { u32 x = gSpecialVar_0x8005 + 7; diff --git a/src/scrcmd.c b/src/scrcmd.c index 7062721a94..7bcedb89bb 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2481,3 +2481,28 @@ void RemoveAllItem(struct ScriptContext *ctx) gSpecialVar_Result = count; RemoveBagItem(itemId, count); } + +void GetObjectPosition(struct ScriptContext *ctx) +{ + u32 localId = VarGet(ScriptReadHalfword(ctx)); + u32 useTemplate = gSpecialVar_0x8001; + u32 objectId; + struct ObjectEvent* objEvent; + + u16 *x = &gSpecialVar_0x8007; + u16 *y = &gSpecialVar_0x8008; + + if (useTemplate) + { + const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); + *x = objTemplate->x; + *y = objTemplate->y; + return; + } + + objectId = GetObjectEventIdByLocalId(localId); + objEvent = &gObjectEvents[objectId]; + *x = objEvent->currentCoords.x - 7; + *y = objEvent->currentCoords.y - 7; +} + From be7938f32221247547b4da30eb396fc999e1a69b Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 12 Sep 2024 18:55:11 -0700 Subject: [PATCH 185/544] Changed CheckObjectAtXY to callnative --- asm/macros/event.inc | 9 +++++---- data/specials.inc | 1 - src/field_specials.c | 21 --------------------- src/scrcmd.c | 27 ++++++++++++++++++++++++--- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index b2a2d46159..a4f22f817a 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2365,10 +2365,11 @@ .endm @ checks if there is any object at a given position - .macro checkobjectat x:req, y:req - setorcopyvar VAR_0x8005, \x - setorcopyvar VAR_0x8006, \y - specialvar VAR_RESULT, CheckObjectAtXY + .macro checkobjectat x:req, y:req, dest = VAR_RESULT + callnative CheckObjectAtXY + .2byte \x + .2byte \y + .2byte \dest .endm @ Checks the state of the Pokédex Seen flag of the specified Pokemon diff --git a/data/specials.inc b/data/specials.inc index 3232dca7af..91fed72d78 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -554,7 +554,6 @@ gSpecials:: def_special Script_GetChosenMonDefensiveEVs def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs - def_special CheckObjectAtXY def_special Script_GetSetPokedexFlag def_special CheckPartyHasSpecie def_special CheckChosenMonMatchDesiredSpecie diff --git a/src/field_specials.c b/src/field_specials.c index 3c27ade570..0f1854b3b5 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4278,27 +4278,6 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } -bool32 CheckObjectAtXY(void) -{ - u32 x = gSpecialVar_0x8005 + 7; - u32 y = gSpecialVar_0x8006 + 7; - u32 i; - - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) - { - if (!gObjectEvents[i].active) - continue; - - if (gObjectEvents[i].currentCoords.x != x) - continue; - - if (gObjectEvents[i].currentCoords.y != y) - continue; - return TRUE; - } - return FALSE; -} - bool32 Script_GetSetPokedexFlag(void) { u32 speciesId = SpeciesToNationalPokedexNum(gSpecialVar_0x8005); diff --git a/src/scrcmd.c b/src/scrcmd.c index 7bcedb89bb..d68e2dbd86 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2485,12 +2485,12 @@ void RemoveAllItem(struct ScriptContext *ctx) void GetObjectPosition(struct ScriptContext *ctx) { u32 localId = VarGet(ScriptReadHalfword(ctx)); - u32 useTemplate = gSpecialVar_0x8001; + u32 useTemplate = VarGet(ScriptReadHalfword(ctx)); + u16 *x = &gSpecialVar_0x8007; + u16 *y = &gSpecialVar_0x8008; u32 objectId; struct ObjectEvent* objEvent; - u16 *x = &gSpecialVar_0x8007; - u16 *y = &gSpecialVar_0x8008; if (useTemplate) { @@ -2506,3 +2506,24 @@ void GetObjectPosition(struct ScriptContext *ctx) *y = objEvent->currentCoords.y - 7; } +bool32 CheckObjectAtXY(struct ScriptContext *ctx) +{ + u32 x = VarGet(ScriptReadHalfword(ctx)) + 7; + u32 y = VarGet(ScriptReadHalfword(ctx)) + 7; + u32 i; + + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (!gObjectEvents[i].active) + continue; + + if (gObjectEvents[i].currentCoords.x != x) + continue; + + if (gObjectEvents[i].currentCoords.y != y) + continue; + return TRUE; + } + return FALSE; +} + From c2db77c4f603f4053c4b08606c32b6a03203dba6 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 12 Sep 2024 20:15:55 -0700 Subject: [PATCH 186/544] Changed Script_GetSetPokedexFlag to callnative --- asm/macros/event.inc | 24 ++++++++++++------------ data/specials.inc | 1 - src/field_specials.c | 11 ----------- src/scrcmd.c | 12 ++++++++++++ 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index a4f22f817a..b826b4c556 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2375,31 +2375,31 @@ @ Checks the state of the Pokédex Seen flag of the specified Pokemon @ The result is stored in VAR_RESULT .macro getseenmon species:req - setvar VAR_0x8005, \species - setvar VAR_0x8006, FLAG_GET_SEEN - specialvar VAR_RESULT, Script_GetSetPokedexFlag + callnative Script_GetSetPokedexFlag + .2byte \species + .2byte FLAG_GET_SEEN .endm @ Checks the state of the Pokédex Caught flag of the specified Pokemon @ The result is stored in VAR_RESULT .macro getcaughtmon species:req - setvar VAR_0x8005, \species - setvar VAR_0x8006, FLAG_GET_CAUGHT - specialvar VAR_RESULT, Script_GetSetPokedexFlag + callnative Script_GetSetPokedexFlag + .2byte \species + .2byte FLAG_GET_CAUGHT .endm @ Sets the Pokédex Seen flag of the specified Pokemon .macro setseenmon species:req - setvar VAR_0x8005, \species - setvar VAR_0x8006, FLAG_SET_SEEN - specialvar VAR_RESULT, Script_GetSetPokedexFlag + callnative Script_GetSetPokedexFlag + .2byte \species + .2byte FLAG_SET_SEEN .endm @ Sets the Pokédex Caught flag of the specified Pokemon .macro setcaughtmon species:req - setvar VAR_0x8005, \species - setvar VAR_0x8006, FLAG_SET_CAUGHT - specialvar VAR_RESULT, Script_GetSetPokedexFlag + callnative Script_GetSetPokedexFlag + .2byte \species + .2byte FLAG_SET_CAUGHT .endm @ Check if the Player has \speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. diff --git a/data/specials.inc b/data/specials.inc index 91fed72d78..e6a8860096 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -554,7 +554,6 @@ gSpecials:: def_special Script_GetChosenMonDefensiveEVs def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs - def_special Script_GetSetPokedexFlag def_special CheckPartyHasSpecie def_special CheckChosenMonMatchDesiredSpecie def_special Script_GetObjectFacingDirection diff --git a/src/field_specials.c b/src/field_specials.c index 0f1854b3b5..57bd0158a6 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4278,17 +4278,6 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } -bool32 Script_GetSetPokedexFlag(void) -{ - u32 speciesId = SpeciesToNationalPokedexNum(gSpecialVar_0x8005); - bool32 desiredFlag = gSpecialVar_0x8006; - - if (desiredFlag == FLAG_SET_CAUGHT) - GetSetPokedexFlag(speciesId,FLAG_SET_SEEN); - - return GetSetPokedexFlag(speciesId,desiredFlag); -} - bool32 CheckPartyHasSpecie(void) { u32 partyIndex; diff --git a/src/scrcmd.c b/src/scrcmd.c index d68e2dbd86..f087d2d290 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -53,6 +53,7 @@ #include "list_menu.h" #include "malloc.h" #include "constants/event_objects.h" +#include "pokedex.h" typedef u16 (*SpecialFunc)(void); typedef void (*NativeFunc)(struct ScriptContext *ctx); @@ -2527,3 +2528,14 @@ bool32 CheckObjectAtXY(struct ScriptContext *ctx) return FALSE; } +void Script_GetSetPokedexFlag(struct ScriptContext *ctx) +{ + u32 speciesId = SpeciesToNationalPokedexNum(VarGet(ScriptReadHalfword(ctx))); + bool32 desiredFlag = VarGet(ScriptReadHalfword(ctx)); + + if (desiredFlag == FLAG_SET_CAUGHT) + GetSetPokedexFlag(speciesId,FLAG_SET_SEEN); + + gSpecialVar_Result = GetSetPokedexFlag(speciesId,desiredFlag); +} + From ecd435cd84be9b986f60d00655b96b2b2c2d93bc Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 12 Sep 2024 20:45:14 -0700 Subject: [PATCH 187/544] Changed CheckChosenMOnMatchDesiredSpecies and CheckPartyHasSpecies to callnative --- asm/macros/event.inc | 7 ++++--- data/specials.inc | 2 -- src/field_specials.c | 16 ---------------- src/scrcmd.c | 21 +++++++++++++++++++++ 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index b826b4c556..67b5e9b634 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2404,13 +2404,14 @@ @ Check if the Player has \speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. .macro checkspecies speciesId:req, mode=NO_PARTY_SCREEN - setvar VAR_0x8005, \speciesId .if \mode == OPEN_PARTY_SCREEN special ChoosePartyMon waitstate - specialvar VAR_RESULT, CheckChosenMonMatchDesiredSpecie + callnative CheckChosenMonMatchDesiredSpecie + .2byte \speciesId .else - specialvar VAR_RESULT, CheckPartyHasSpecie + callnative CheckPartyHasSpecie + .2byte \speciesId .endif .endm diff --git a/data/specials.inc b/data/specials.inc index e6a8860096..8233deda59 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -554,6 +554,4 @@ gSpecials:: def_special Script_GetChosenMonDefensiveEVs def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs - def_special CheckPartyHasSpecie - def_special CheckChosenMonMatchDesiredSpecie def_special Script_GetObjectFacingDirection diff --git a/src/field_specials.c b/src/field_specials.c index 57bd0158a6..982d7a2924 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4278,19 +4278,3 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } -bool32 CheckPartyHasSpecie(void) -{ - u32 partyIndex; - - for (partyIndex = 0; partyIndex < CalculatePlayerPartyCount(); partyIndex++) - if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES) == gSpecialVar_0x8005) - return TRUE; - - return FALSE; -} - -bool32 CheckChosenMonMatchDesiredSpecie(void) -{ - return (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES) == gSpecialVar_0x8005); -} - diff --git a/src/scrcmd.c b/src/scrcmd.c index f087d2d290..345d3b8bef 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2539,3 +2539,24 @@ void Script_GetSetPokedexFlag(struct ScriptContext *ctx) gSpecialVar_Result = GetSetPokedexFlag(speciesId,desiredFlag); } +void CheckPartyHasSpecie(struct ScriptContext *ctx) +{ + u32 partyIndex; + u32 givenSpecies = VarGet(ScriptReadHalfword(ctx)); + u32 hasSpecies = FALSE; + + for (partyIndex = 0; partyIndex < CalculatePlayerPartyCount(); partyIndex++) + if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES) == givenSpecies) + hasSpecies = TRUE; + + gSpecialVar_Result = hasSpecies; +} + +void CheckChosenMonMatchDesiredSpecie(struct ScriptContext *ctx) +{ + u32 givenSpecies = VarGet(ScriptReadHalfword(ctx)); + + gSpecialVar_Result = (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES) == givenSpecies); +} + + From 510af1bee6746ddf99bafa732b61da7193ec23a2 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 12 Sep 2024 20:55:37 -0700 Subject: [PATCH 188/544] Restored original functions and made script versions --- asm/macros/event.inc | 20 +++++++-------- include/field_specials.h | 3 +++ src/field_specials.c | 52 +++++++++++++++++++++++++++++++++++++ src/scrcmd.c | 55 ++++++---------------------------------- 4 files changed, 73 insertions(+), 57 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 67b5e9b634..73d0d07526 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2347,26 +2347,26 @@ @ Stores the position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y). Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will takje the object's template position. .macro getobjectxy localId:req, posType:req - callnative GetObjectPosition + callnative Script_GetObjectPosition .2byte \localId .2byte \posType .endm .macro getobjecttemplatexy localId:req, posType = TEMPLATE_POSITION - callnative GetObjectPosition + callnative Script_GetObjectPosition .2byte \localId .2byte \posType .endm .macro getobjectcurrentxy localId:req, posType = CURRENT_POSITION - callnative GetObjectPosition + callnative Script_GetObjectPosition .2byte \localId .2byte \posType .endm @ checks if there is any object at a given position .macro checkobjectat x:req, y:req, dest = VAR_RESULT - callnative CheckObjectAtXY + callnative Script_CheckObjectAtXY .2byte \x .2byte \y .2byte \dest @@ -2375,7 +2375,7 @@ @ Checks the state of the Pokédex Seen flag of the specified Pokemon @ The result is stored in VAR_RESULT .macro getseenmon species:req - callnative Script_GetSetPokedexFlag + callnative Script_Script_GetSetPokedexFlag .2byte \species .2byte FLAG_GET_SEEN .endm @@ -2383,21 +2383,21 @@ @ Checks the state of the Pokédex Caught flag of the specified Pokemon @ The result is stored in VAR_RESULT .macro getcaughtmon species:req - callnative Script_GetSetPokedexFlag + callnative Script_Script_GetSetPokedexFlag .2byte \species .2byte FLAG_GET_CAUGHT .endm @ Sets the Pokédex Seen flag of the specified Pokemon .macro setseenmon species:req - callnative Script_GetSetPokedexFlag + callnative Script_Script_GetSetPokedexFlag .2byte \species .2byte FLAG_SET_SEEN .endm @ Sets the Pokédex Caught flag of the specified Pokemon .macro setcaughtmon species:req - callnative Script_GetSetPokedexFlag + callnative Script_Script_GetSetPokedexFlag .2byte \species .2byte FLAG_SET_CAUGHT .endm @@ -2407,10 +2407,10 @@ .if \mode == OPEN_PARTY_SCREEN special ChoosePartyMon waitstate - callnative CheckChosenMonMatchDesiredSpecie + callnative Script_CheckChosenMonMatchDesiredSpecie .2byte \speciesId .else - callnative CheckPartyHasSpecie + callnative Script_CheckPartyHasSpecie .2byte \speciesId .endif .endm diff --git a/include/field_specials.h b/include/field_specials.h index 95a91d543f..85db5ba40f 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -33,5 +33,8 @@ void ResetFanClub(void); bool8 ShouldShowBoxWasFullMessage(void); void SetPCBoxToSendMon(u8 boxId); void PreparePartyForSkyBattle(void); +void GetObjectPosition(u32, u32); +bool32 CheckObjectAtXY(u32, u32); +bool32 CheckPartyHasSpecie(u32); #endif // GUARD_FIELD_SPECIALS_H diff --git a/src/field_specials.c b/src/field_specials.c index 982d7a2924..94a98812b1 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4278,3 +4278,55 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } +void GetObjectPosition(u32 localId, u32 useTemplate) +{ + u32 objectId; + struct ObjectEvent* objEvent; + + u16 *x = &gSpecialVar_0x8007; + u16 *y = &gSpecialVar_0x8008; + + if (useTemplate) + { + const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); + *x = objTemplate->x; + *y = objTemplate->y; + return; + } + + objectId = GetObjectEventIdByLocalId(localId); + objEvent = &gObjectEvents[objectId]; + *x = objEvent->currentCoords.x - 7; + *y = objEvent->currentCoords.y - 7; +} + +bool32 CheckObjectAtXY(u32 x, u32 y) +{ + u32 i; + + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (!gObjectEvents[i].active) + continue; + + if (gObjectEvents[i].currentCoords.x != x) + continue; + + if (gObjectEvents[i].currentCoords.y != y) + continue; + return TRUE; + } + return FALSE; +} + +bool32 CheckPartyHasSpecie(u32 givenSpecies) +{ + u32 partyIndex; + + for (partyIndex = 0; partyIndex < CalculatePlayerPartyCount(); partyIndex++) + if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES) == givenSpecies) + return TRUE; + + return FALSE; +} + diff --git a/src/scrcmd.c b/src/scrcmd.c index 345d3b8bef..974b223f26 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2483,79 +2483,40 @@ void RemoveAllItem(struct ScriptContext *ctx) RemoveBagItem(itemId, count); } -void GetObjectPosition(struct ScriptContext *ctx) +void Script_GetObjectPosition(struct ScriptContext *ctx) { u32 localId = VarGet(ScriptReadHalfword(ctx)); u32 useTemplate = VarGet(ScriptReadHalfword(ctx)); - u16 *x = &gSpecialVar_0x8007; - u16 *y = &gSpecialVar_0x8008; - u32 objectId; - struct ObjectEvent* objEvent; - - if (useTemplate) - { - const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); - *x = objTemplate->x; - *y = objTemplate->y; - return; - } - - objectId = GetObjectEventIdByLocalId(localId); - objEvent = &gObjectEvents[objectId]; - *x = objEvent->currentCoords.x - 7; - *y = objEvent->currentCoords.y - 7; + GetObjectPosition(localId,useTemplate); } -bool32 CheckObjectAtXY(struct ScriptContext *ctx) +void Script_CheckObjectAtXY(struct ScriptContext *ctx) { u32 x = VarGet(ScriptReadHalfword(ctx)) + 7; u32 y = VarGet(ScriptReadHalfword(ctx)) + 7; - u32 i; - - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) - { - if (!gObjectEvents[i].active) - continue; - - if (gObjectEvents[i].currentCoords.x != x) - continue; - - if (gObjectEvents[i].currentCoords.y != y) - continue; - return TRUE; - } - return FALSE; + gSpecialVar_Result = CheckObjectAtXY(x,y); } void Script_GetSetPokedexFlag(struct ScriptContext *ctx) { u32 speciesId = SpeciesToNationalPokedexNum(VarGet(ScriptReadHalfword(ctx))); bool32 desiredFlag = VarGet(ScriptReadHalfword(ctx)); + gSpecialVar_Result = GetSetPokedexFlag(speciesId,desiredFlag); if (desiredFlag == FLAG_SET_CAUGHT) GetSetPokedexFlag(speciesId,FLAG_SET_SEEN); - - gSpecialVar_Result = GetSetPokedexFlag(speciesId,desiredFlag); } -void CheckPartyHasSpecie(struct ScriptContext *ctx) +void Script_CheckPartyHasSpecie(struct ScriptContext *ctx) { - u32 partyIndex; u32 givenSpecies = VarGet(ScriptReadHalfword(ctx)); - u32 hasSpecies = FALSE; - - for (partyIndex = 0; partyIndex < CalculatePlayerPartyCount(); partyIndex++) - if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES) == givenSpecies) - hasSpecies = TRUE; - - gSpecialVar_Result = hasSpecies; + gSpecialVar_Result = CheckPartyHasSpecie(givenSpecies); } -void CheckChosenMonMatchDesiredSpecie(struct ScriptContext *ctx) +void Script_CheckChosenMonMatchDesiredSpecie(struct ScriptContext *ctx) { u32 givenSpecies = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES) == givenSpecies); } From 5ea1f39a9dde753c5787d211c97963037daadfa5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 13 Sep 2024 14:27:40 -0300 Subject: [PATCH 189/544] Rebuild of makefile 5: trainerproc --- Makefile | 24 +++++++++++++++--------- make_tools.mk | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 2b87d61e08..dde15c644a 100644 --- a/Makefile +++ b/Makefile @@ -155,15 +155,16 @@ endif AUTO_GEN_TARGETS := include make_tools.mk # Tool executables -GFX := $(TOOLS_DIR)/gbagfx/gbagfx$(EXE) -AIF := $(TOOLS_DIR)/aif2pcm/aif2pcm$(EXE) -MID := $(TOOLS_DIR)/mid2agb/mid2agb$(EXE) -SCANINC := $(TOOLS_DIR)/scaninc/scaninc$(EXE) -PREPROC := $(TOOLS_DIR)/preproc/preproc$(EXE) -RAMSCRGEN := $(TOOLS_DIR)/ramscrgen/ramscrgen$(EXE) -FIX := $(TOOLS_DIR)/gbafix/gbafix$(EXE) -MAPJSON := $(TOOLS_DIR)/mapjson/mapjson$(EXE) -JSONPROC := $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) +GFX := $(TOOLS_DIR)/gbagfx/gbagfx$(EXE) +AIF := $(TOOLS_DIR)/aif2pcm/aif2pcm$(EXE) +MID := $(TOOLS_DIR)/mid2agb/mid2agb$(EXE) +SCANINC := $(TOOLS_DIR)/scaninc/scaninc$(EXE) +PREPROC := $(TOOLS_DIR)/preproc/preproc$(EXE) +RAMSCRGEN := $(TOOLS_DIR)/ramscrgen/ramscrgen$(EXE) +FIX := $(TOOLS_DIR)/gbafix/gbafix$(EXE) +MAPJSON := $(TOOLS_DIR)/mapjson/mapjson$(EXE) +JSONPROC := $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) +TRAINERPROC := $(TOOLS_DIR)/trainerproc/trainerproc$(EXE) PERL := perl SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c @@ -305,6 +306,11 @@ generated: tools $(AUTO_GEN_TARGETS) clean-generated: -rm -f $(AUTO_GEN_TARGETS) +COMPETITIVE_PARTY_SYNTAX := $(shell PATH="$(PATH)"; echo 'COMPETITIVE_PARTY_SYNTAX' | $(CPP) $(CPPFLAGS) -imacros include/gba/defines.h -imacros include/config/general.h | tail -n1) +ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) +%.h: %.party tools ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | $(TRAINERPROC) -o $@ -i $< - +endif + ifeq ($(MODERN),0) $(C_BUILDDIR)/libc.o: CC1 := $(TOOLS_DIR)/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 diff --git a/make_tools.mk b/make_tools.mk index 4a6a929a86..df9696f518 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -5,7 +5,7 @@ MAKEFLAGS += --no-print-directory # Inclusive list. If you don't want a tool to be built, don't add it here. TOOLS_DIR := tools -TOOL_NAMES := aif2pcm bin2c gbafix gbagfx jsonproc mapjson mid2agb preproc ramscrgen rsfont scaninc +TOOL_NAMES := aif2pcm bin2c gbafix gbagfx jsonproc mapjson mid2agb preproc ramscrgen rsfont scaninc trainerproc TOOLDIRS := $(TOOL_NAMES:%=$(TOOLS_DIR)/%) From bee1452c8e7d8b23667b4bc06a8200277ec6817d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 13 Sep 2024 14:38:43 -0300 Subject: [PATCH 190/544] Rebuild of makefile 6: File-specific stuff --- Makefile | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index dde15c644a..6db6c62428 100644 --- a/Makefile +++ b/Makefile @@ -262,7 +262,7 @@ clean: tidy clean-tools clean-generated clean-assets clean-assets: rm -f $(MID_SUBDIR)/*.s rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc - rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc + rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc $(DATA_SRC_SUBDIR)/map_group_count.h find sound -iname '*.bin' -exec rm {} + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + @@ -298,6 +298,7 @@ generated: $(AUTO_GEN_TARGETS) %.gbapal: %.png ; $(GFX) $< $@ %.lz: % ; $(GFX) $< $@ %.rl: % ; $(GFX) $< $@ +$(CRY_SUBDIR)/uncomp_%.bin: $(CRY_SUBDIR)/uncomp_%.aif ; $(AIF) $< $@ $(CRY_SUBDIR)/%.bin: $(CRY_SUBDIR)/%.aif ; $(AIF) $< $@ --compress sound/%.bin: sound/%.aif ; $(AIF) $< $@ @@ -325,6 +326,9 @@ $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member +$(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init +# Annoyingly we can't turn this on just for src/data/trainers.h +$(C_BUILDDIR)/data.o: CFLAGS += -fno-show-column -fno-diagnostics-show-caret endif # Dependency rules (for the *.c & *.s sources to .o files) @@ -417,6 +421,14 @@ $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(DATA_ASM_BUILDDIR)/event_scripts.o python3 $(TOOLS_DIR)/learnset_helpers/teachable.py +# NOTE: Based on C_DEP above, but without NODEP and KEEP_TEMPS handling. +define TEST_DEP +$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include -I gflib $2) + @echo "$$(CC1) -o $$@ $$<" + @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - +endef +$(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src))))) + # Linker script ifeq ($(MODERN),0) LD_SCRIPT := ld_script.ld From 5954d662a5762d73b073731aa1d46feab2481c5c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 13 Sep 2024 15:26:42 -0300 Subject: [PATCH 191/544] Rebuild of makefile 7: Test Runner --- Makefile | 89 +++++++++++++++++++++++++++++++++++++++++---------- make_tools.mk | 12 ++++++- 2 files changed, 83 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index 6db6c62428..71b98016a3 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,9 @@ endif ifeq (compare,$(MAKECMDGOALS)) COMPARE := 1 endif +ifeq (check,$(MAKECMDGOALS)) + TEST := 1 +endif # Default make rule all: rom @@ -73,21 +76,36 @@ endif ROM_NAME := $(FILE_NAME)_agbcc.gba OBJ_DIR_NAME := $(BUILD_DIR)/emerald +OBJ_DIR_NAME_TEST := $(BUILD_DIR)/test MODERN_ROM_NAME := $(FILE_NAME).gba MODERN_OBJ_DIR_NAME := $(BUILD_DIR)/modern +MODERN_OBJ_DIR_NAME_TEST := $(BUILD_DIR)/modern-test ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) +TESTELF = $(ROM_NAME:.gba=-test.elf) +HEADLESSELF = $(ROM_NAME:.gba=-test-headless.elf) # Pick our active variables ifeq ($(MODERN),0) ROM := $(ROM_NAME) - OBJ_DIR := $(OBJ_DIR_NAME) + ifeq ($(TEST), 0) + OBJ_DIR := $(OBJ_DIR_NAME) + else + OBJ_DIR := $(OBJ_DIR_NAME_TEST) + endif else ROM := $(MODERN_ROM_NAME) - OBJ_DIR := $(MODERN_OBJ_DIR_NAME) + ifeq ($(TEST), 0) + OBJ_DIR := $(MODERN_OBJ_DIR_NAME) + else + OBJ_DIR := $(MODERN_OBJ_DIR_NAME_TEST) + endif +endif +ifeq ($(TESTELF),$(MAKECMDGOALS)) + TEST := 1 endif ELF := $(ROM:.gba=.elf) MAP := $(ROM:.gba=.map) @@ -103,6 +121,7 @@ SONG_SUBDIR = sound/songs MID_SUBDIR = sound/songs/midi SAMPLE_SUBDIR = sound/direct_sound_samples CRY_SUBDIR = sound/direct_sound_samples/cries +TEST_SUBDIR = test C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) GFLIB_BUILDDIR = $(OBJ_DIR)/$(GFLIB_SUBDIR) @@ -110,6 +129,7 @@ ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) +TEST_BUILDDIR = $(OBJ_DIR)/$(TEST_SUBDIR) SHELL := bash -o pipefail @@ -155,16 +175,19 @@ endif AUTO_GEN_TARGETS := include make_tools.mk # Tool executables -GFX := $(TOOLS_DIR)/gbagfx/gbagfx$(EXE) -AIF := $(TOOLS_DIR)/aif2pcm/aif2pcm$(EXE) -MID := $(TOOLS_DIR)/mid2agb/mid2agb$(EXE) -SCANINC := $(TOOLS_DIR)/scaninc/scaninc$(EXE) -PREPROC := $(TOOLS_DIR)/preproc/preproc$(EXE) -RAMSCRGEN := $(TOOLS_DIR)/ramscrgen/ramscrgen$(EXE) -FIX := $(TOOLS_DIR)/gbafix/gbafix$(EXE) -MAPJSON := $(TOOLS_DIR)/mapjson/mapjson$(EXE) -JSONPROC := $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) -TRAINERPROC := $(TOOLS_DIR)/trainerproc/trainerproc$(EXE) +GFX := $(TOOLS_DIR)/gbagfx/gbagfx$(EXE) +AIF := $(TOOLS_DIR)/aif2pcm/aif2pcm$(EXE) +MID := $(TOOLS_DIR)/mid2agb/mid2agb$(EXE) +SCANINC := $(TOOLS_DIR)/scaninc/scaninc$(EXE) +PREPROC := $(TOOLS_DIR)/preproc/preproc$(EXE) +RAMSCRGEN := $(TOOLS_DIR)/ramscrgen/ramscrgen$(EXE) +FIX := $(TOOLS_DIR)/gbafix/gbafix$(EXE) +MAPJSON := $(TOOLS_DIR)/mapjson/mapjson$(EXE) +JSONPROC := $(TOOLS_DIR)/jsonproc/jsonproc$(EXE) +TRAINERPROC := $(TOOLS_DIR)/trainerproc/trainerproc$(EXE) +PATCHELF := $(TOOLS_DIR)/patchelf/patchelf$(EXE) +ROMTEST ?= $(shell { command -v mgba-rom-test || command -v $(TOOLS_DIR)/mgba/mgba-rom-test$(EXE); } 2>/dev/null) +ROMTESTHYDRA := $(TOOLS_DIR)/mgba-rom-test-hydra/mgba-rom-test-hydra$(EXE) PERL := perl SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c @@ -180,8 +203,8 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidynonmodern generated clean-generated -.PHONY: all rom agbcc modern compare +RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidynonmodern tidycheck generated clean-generated $(TESTELF) +.PHONY: all rom agbcc modern compare check .PHONY: $(RULES_NO_SCAN) infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -211,6 +234,11 @@ C_SRCS_IN := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) C_SRCS := $(foreach src,$(C_SRCS_IN),$(if $(findstring .inc.c,$(src)),,$(src))) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) +TEST_SRCS_IN := $(wildcard $(TEST_SUBDIR)/*.c $(TEST_SUBDIR)/*/*.c $(TEST_SUBDIR)/*/*/*.c) +TEST_SRCS := $(foreach src,$(TEST_SRCS_IN),$(if $(findstring .inc.c,$(src)),,$(src))) +TEST_OBJS := $(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(TEST_SRCS)) +TEST_OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(TEST_OBJS)) + GFLIB_SRCS := $(wildcard $(GFLIB_SUBDIR)/*.c) GFLIB_OBJS := $(patsubst $(GFLIB_SUBDIR)/%.c,$(GFLIB_BUILDDIR)/%.o,$(GFLIB_SRCS)) @@ -235,7 +263,7 @@ MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) OBJS := $(C_OBJS) $(GFLIB_OBJS) $(C_ASM_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) -SUBDIRS := $(sort $(dir $(OBJS))) +SUBDIRS := $(sort $(dir $(OBJS) $(dir $(TEST_OBJS)))) $(shell mkdir -p $(SUBDIRS)) # Pretend rules that are actually flags defer to `make all` @@ -248,6 +276,28 @@ agbcc: @echo "Search for 'agbcc: all' in Makefile to reenable agbcc." @exit 1 +LD_SCRIPT_TEST := ld_script_test.ld + +$(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS) + cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT_TEST) > ld_script_test.ld + +$(TESTELF): $(OBJ_DIR)/ld_script_test.ld $(OBJS) $(TEST_OBJS) libagbsyscall tools check-tools + @echo "cd $(OBJ_DIR) && $(LD) -T ld_script_test.ld -o ../../$@ " + @cd $(OBJ_DIR) && $(LD) $(TESTLDFLAGS) -T ld_script_test.ld -o ../../$@ $(OBJS_REL) $(TEST_OBJS_REL) $(LIB) + $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) -d0 --silent + $(PATCHELF) $(TESTELF) gTestRunnerArgv "$(TESTS)\0" + +ifeq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) +TEST_SKIP_IS_FAIL := \x01 +else +TEST_SKIP_IS_FAIL := \x00 +endif + +check: $(TESTELF) + @cp $< $(HEADLESSELF) + $(PATCHELF) $(HEADLESSELF) gTestRunnerHeadless '\x01' gTestRunnerSkipIsFail "$(TEST_SKIP_IS_FAIL)" + $(ROMTESTHYDRA) $(ROMTEST) $(OBJCOPY) $(HEADLESSELF) + # Other rules rom: $(ROM) ifeq ($(COMPARE),1) @@ -256,7 +306,7 @@ endif syms: $(SYM) -clean: tidy clean-tools clean-generated clean-assets +clean: tidy clean-tools clean-check-tools clean-generated clean-assets @$(MAKE) clean -C libagbsyscall clean-assets: @@ -267,7 +317,7 @@ clean-assets: find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + -tidy: tidynonmodern tidymodern +tidy: tidynonmodern tidymodern tidycheck tidynonmodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) @@ -277,6 +327,11 @@ tidymodern: rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) rm -rf $(MODERN_OBJ_DIR_NAME) +tidycheck: + rm -f $(TESTELF) $(HEADLESSELF) + rm -rf $(MODERN_OBJ_DIR_NAME_TEST) + rm -rf $(OBJ_DIR_NAME_TEST) + # Other rules include graphics_file_rules.mk include map_data_rules.mk diff --git a/make_tools.mk b/make_tools.mk index df9696f518..75ebc05c96 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -6,17 +6,27 @@ MAKEFLAGS += --no-print-directory # Inclusive list. If you don't want a tool to be built, don't add it here. TOOLS_DIR := tools TOOL_NAMES := aif2pcm bin2c gbafix gbagfx jsonproc mapjson mid2agb preproc ramscrgen rsfont scaninc trainerproc +CHECK_TOOL_NAMES = patchelf mgba-rom-test-hydra TOOLDIRS := $(TOOL_NAMES:%=$(TOOLS_DIR)/%) +CHECKTOOLDIRS := $(CHECK_TOOL_NAMES:%=$(TOOLS_DIR)/%) # Tool making doesnt require a pokeemerald dependency scan. -RULES_NO_SCAN += tools check-tools clean-tools $(TOOLDIRS) +RULES_NO_SCAN += tools check-tools clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) .PHONY: $(RULES_NO_SCAN) tools: $(TOOLDIRS) +check-tools: $(CHECKTOOLDIRS) + $(TOOLDIRS): @$(MAKE) -C $@ +$(CHECKTOOLDIRS): + @$(MAKE) -C $@ + clean-tools: @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) + +clean-check-tools: + @$(foreach tooldir,$(CHECKTOOLDIRS),$(MAKE) clean -C $(tooldir);) From b8c71fa84d7d590006b94b0b5b46aa9a74cf2f41 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 13 Sep 2024 23:38:50 -0400 Subject: [PATCH 192/544] Fix .d files not updating if .o fails, fix clean rule, remove some unnecessary warnings --- Makefile | 31 ++++++++++++++----------------- tools/mapjson/json11.cpp | 17 ++++++++--------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index ce868f06bd..48350147a4 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,7 @@ GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 +KEEP_TEMPS ?= 0 # `File name`.gba ('_modern' will be appended to the modern builds) FILE_NAME := pokeemerald @@ -261,18 +262,18 @@ include audio_rules.mk generated: $(AUTO_GEN_TARGETS) -%.s: ; +%.s: ; %.png: ; %.pal: ; %.aif: ; -%.1bpp: %.png ; $(GFX) $< $@ -%.4bpp: %.png ; $(GFX) $< $@ -%.8bpp: %.png ; $(GFX) $< $@ -%.gbapal: %.pal ; $(GFX) $< $@ -%.gbapal: %.png ; $(GFX) $< $@ -%.lz: % ; $(GFX) $< $@ -%.rl: % ; $(GFX) $< $@ +%.1bpp: %.png ; $(GFX) $< $@ +%.4bpp: %.png ; $(GFX) $< $@ +%.8bpp: %.png ; $(GFX) $< $@ +%.gbapal: %.pal ; $(GFX) $< $@ +%.gbapal: %.png ; $(GFX) $< $@ +%.lz: % ; $(GFX) $< $@ +%.rl: % ; $(GFX) $< $@ # NOTE: Tools must have been built prior (FIXME) generated: tools $(AUTO_GEN_TARGETS) @@ -310,7 +311,7 @@ endef # $1: Output file without extension, $2 input file, $3 temp path (if keeping) define C_DEP_IMPL $1.o: $2 -ifeq (,$(KEEP_TEMPS)) +ifneq ($(KEEP_TEMPS),1) @echo "$$(CC1) -o $$@ $$<" @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - else @@ -319,15 +320,11 @@ else @echo -e ".text\n\t.align\t2, 0\n" >> $3.s $$(AS) $$(ASFLAGS) -o $$@ $3.s endif -$(call C_SCANINC,$1,$2) -endef -# Calls SCANINC to find dependencies -define C_SCANINC -ifneq ($(NODEP),1) -$1.o: $1.d $1.d: $2 $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include -I gflib $2 -include $1.d +ifneq ($(NODEP),1) +$1.o: $1.d +-include $1.d endif endef @@ -359,7 +356,7 @@ ifneq ($(NODEP),1) $1.o: $1.d $1.d: $2 $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I "" $2 -include $1.d +-include $1.d endif endef diff --git a/tools/mapjson/json11.cpp b/tools/mapjson/json11.cpp index 1da530206b..3ac5f392a0 100644 --- a/tools/mapjson/json11.cpp +++ b/tools/mapjson/json11.cpp @@ -33,7 +33,6 @@ using std::vector; using std::map; using std::make_shared; using std::initializer_list; -using std::move; /* Helper for representing null - just a do-nothing struct, plus comparison * operators so the helpers in JsonValue work. We can't use nullptr_t because @@ -149,7 +148,7 @@ protected: // Constructors explicit Value(const T &value) : m_value(value) {} - explicit Value(T &&value) : m_value(move(value)) {} + explicit Value(T &&value) : m_value(std::move(value)) {} // Get type tag Json::Type type() const override { @@ -196,7 +195,7 @@ class JsonString final : public Value { const string &string_value() const override { return m_value; } public: explicit JsonString(const string &value) : Value(value) {} - explicit JsonString(string &&value) : Value(move(value)) {} + explicit JsonString(string &&value) : Value(std::move(value)) {} }; class JsonArray final : public Value { @@ -204,7 +203,7 @@ class JsonArray final : public Value { const Json & operator[](size_t i) const override; public: explicit JsonArray(const Json::array &value) : Value(value) {} - explicit JsonArray(Json::array &&value) : Value(move(value)) {} + explicit JsonArray(Json::array &&value) : Value(std::move(value)) {} }; class JsonObject final : public Value { @@ -212,7 +211,7 @@ class JsonObject final : public Value { const Json & operator[](const string &key) const override; public: explicit JsonObject(const Json::object &value) : Value(value) {} - explicit JsonObject(Json::object &&value) : Value(move(value)) {} + explicit JsonObject(Json::object &&value) : Value(std::move(value)) {} }; class JsonNull final : public Value { @@ -254,12 +253,12 @@ Json::Json(double value) : m_ptr(make_shared(value)) { Json::Json(int value) : m_ptr(make_shared(value)) {} Json::Json(bool value) : m_ptr(value ? statics().t : statics().f) {} Json::Json(const string &value) : m_ptr(make_shared(value)) {} -Json::Json(string &&value) : m_ptr(make_shared(move(value))) {} +Json::Json(string &&value) : m_ptr(make_shared(std::move(value))) {} Json::Json(const char * value) : m_ptr(make_shared(value)) {} Json::Json(const Json::array &values) : m_ptr(make_shared(values)) {} -Json::Json(Json::array &&values) : m_ptr(make_shared(move(values))) {} +Json::Json(Json::array &&values) : m_ptr(make_shared(std::move(values))) {} Json::Json(const Json::object &values) : m_ptr(make_shared(values)) {} -Json::Json(Json::object &&values) : m_ptr(make_shared(move(values))) {} +Json::Json(Json::object &&values) : m_ptr(make_shared(std::move(values))) {} /* * * * * * * * * * * * * * * * * * * * * Accessors @@ -357,7 +356,7 @@ struct JsonParser final { * Mark this parse as failed. */ Json fail(string &&msg) { - return fail(move(msg), Json()); + return fail(std::move(msg), Json()); } template From 302193a814ffcf12fa2a5c394ce2ce85e6c49250 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 13 Sep 2024 23:40:00 -0400 Subject: [PATCH 193/544] Have scaninc ignore non-existing files --- tools/scaninc/scaninc.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/scaninc/scaninc.cpp b/tools/scaninc/scaninc.cpp index f5ee7ad6de..c1b7987a5a 100644 --- a/tools/scaninc/scaninc.cpp +++ b/tools/scaninc/scaninc.cpp @@ -125,7 +125,12 @@ int main(int argc, char **argv) if (!exists && (file.FileType() == SourceFileType::Asm || file.FileType() == SourceFileType::Inc)) { path = include; + if (CanOpenFile(path)) + exists = true; } + if (!exists) + continue; + dependencies_includes.insert(path); bool inserted = dependencies.insert(path).second; if (inserted && exists) From fbea1e7e7eb43c762d0da472620eb36fbfb3dd97 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 14 Sep 2024 08:16:20 +0200 Subject: [PATCH 194/544] Fixes Defog used by the wrong side when there is a Substitue and Screen (#5381) --- src/battle_script_commands.c | 7 ++++++- test/battle/move_effect/defog.c | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 76c39377a1..bfb7eec56d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8637,6 +8637,10 @@ static void RemoveAllTerrains(void) BattleScriptPushCursor(); \ gBattlescriptCurrInstr = battlescript; \ } \ + else \ + { \ + gBattlerAttacker = saveBattler; \ + } \ return TRUE; \ } \ } @@ -8651,9 +8655,9 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) struct SideTimer *sideTimer = &gSideTimers[i]; u32 *sideStatuses = &gSideStatuses[i]; - gBattlerAttacker = i; // For correct battle string. Ally's / Foe's if (GetBattlerSide(battlerAtk) != i) { + gBattlerAttacker = i; // For correct battle string. Ally's / Foe's DEFOG_CLEAR(SIDE_STATUS_REFLECT, reflectTimer, BattleScript_SideStatusWoreOffReturn, MOVE_REFLECT); DEFOG_CLEAR(SIDE_STATUS_LIGHTSCREEN, lightscreenTimer, BattleScript_SideStatusWoreOffReturn, MOVE_LIGHT_SCREEN); DEFOG_CLEAR(SIDE_STATUS_MIST, mistTimer, BattleScript_SideStatusWoreOffReturn, MOVE_MIST); @@ -8662,6 +8666,7 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) } if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { + gBattlerAttacker = i; // For correct battle string. Ally's / Foe's DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 80d500d2ee..ab6d647a97 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -383,3 +383,21 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" } } } + +SINGLE_BATTLE_TEST("Defog is used on the correct side if opposing mon is behind a substitute with Screen up") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_LIGHT_SCREEN); } + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); + MESSAGE("Wobbuffet used Defog!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("Foe's Light Screen wore off!"); + } +} From a509f28038663b63eaaec88ba665695833db54e9 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 14 Sep 2024 06:32:47 -0700 Subject: [PATCH 195/544] Changed Scripot_GetObjectFacingDirection to callnative --- asm/macros/event.inc | 11 +++++++++-- data/specials.inc | 1 - src/event_object_movement.c | 5 ----- src/scrcmd.c | 6 ++++++ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 73d0d07526..9a99ae3756 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2421,6 +2421,13 @@ @ Gets the facing direction of a given event object and stores it in the variable \dest. .macro getobjectfacingdirection localId:req, dest:req - setvar VAR_0x8005, \localId - specialvar \dest, Script_GetObjectFacingDirection + callnative Script_GetObjectFacingDirection + .2byte \localId + .byte \dest .endm + + @ .macro checkobjectat x:req, y:req, dest = VAR_RESULT + @ callnative Script_CheckObjectAtXY + @ .2byte \x + @ .2byte \y + @ .2byte \dest diff --git a/data/specials.inc b/data/specials.inc index 8233deda59..f02497d603 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -554,4 +554,3 @@ gSpecials:: def_special Script_GetChosenMonDefensiveEVs def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs - def_special Script_GetObjectFacingDirection diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 646d2323fb..8fa688fdf6 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -10633,8 +10633,3 @@ void GetDaycareGraphics(struct ScriptContext *ctx) gSpecialVar_Result = i; } -u32 Script_GetObjectFacingDirection(void) -{ - return gObjectEvents[GetObjectEventIdByLocalId(gSpecialVar_0x8005)].facingDirection; -} - diff --git a/src/scrcmd.c b/src/scrcmd.c index 974b223f26..fc34720683 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2520,4 +2520,10 @@ void Script_CheckChosenMonMatchDesiredSpecie(struct ScriptContext *ctx) gSpecialVar_Result = (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES) == givenSpecies); } +void Script_GetObjectFacingDirection(struct ScriptContext *ctx) +{ + u32 objectId = VarGet(ScriptReadHalfword(ctx)); + u16 *varPointer = GetVarPointer(ScriptReadHalfword(ctx)); + *varPointer = gObjectEvents[GetObjectEventIdByLocalId(objectId)].facingDirection; +} From 1665423e5214bc834c5f4cf8acc5c82bf3570347 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 14 Sep 2024 07:11:04 -0700 Subject: [PATCH 196/544] Renamed scripts to match vanilla Cleaned up descriptions --- asm/macros/event.inc | 49 +++++++++++++++++++------------------------- src/scrcmd.c | 34 ++++++++++++++++++++++-------- 2 files changed, 46 insertions(+), 37 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 9a99ae3756..985ced862f 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2341,76 +2341,74 @@ @ Remove all of specified item from the player's bag and return the number of removed items to VAR_RESULT .macro removeallitem itemId:req - callnative RemoveAllItem + callnative ScrCmd_removeallitem .2byte \itemId .endm - @ Stores the position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y). Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will takje the object's template position. + @ Stores the position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y). Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will take the object's template position. .macro getobjectxy localId:req, posType:req - callnative Script_GetObjectPosition + callnative ScrCmd_getobjectxy .2byte \localId .2byte \posType .endm .macro getobjecttemplatexy localId:req, posType = TEMPLATE_POSITION - callnative Script_GetObjectPosition + callnative ScrCmd_getobjectxy .2byte \localId .2byte \posType .endm .macro getobjectcurrentxy localId:req, posType = CURRENT_POSITION - callnative Script_GetObjectPosition + callnative ScrCmd_getobjectxy .2byte \localId .2byte \posType .endm - @ checks if there is any object at a given position + @ Return TRUE to dest if there is an object at the position x and y. .macro checkobjectat x:req, y:req, dest = VAR_RESULT - callnative Script_CheckObjectAtXY + callnative ScrCmd_checkobjectat .2byte \x .2byte \y .2byte \dest .endm - @ Checks the state of the Pokédex Seen flag of the specified Pokemon - @ The result is stored in VAR_RESULT + @ Returns the state of the Pokedex Seen Flag to VAR_RESULT for the Pokemon with speciesId .macro getseenmon species:req - callnative Script_Script_GetSetPokedexFlag + callnative Scrcmd_getsetpokedexflag .2byte \species .2byte FLAG_GET_SEEN .endm - @ Checks the state of the Pokédex Caught flag of the specified Pokemon - @ The result is stored in VAR_RESULT + @ Returns the state of the Pokedex Caught Flag to VAR_RESULT for the Pokemon with speciesId .macro getcaughtmon species:req - callnative Script_Script_GetSetPokedexFlag + callnative Scrcmd_getsetpokedexflag .2byte \species .2byte FLAG_GET_CAUGHT .endm - @ Sets the Pokédex Seen flag of the specified Pokemon + @ Sets the Pokedex Seen Flag for the Pokemon with speciesId .macro setseenmon species:req - callnative Script_Script_GetSetPokedexFlag + callnative Scrcmd_getsetpokedexflag .2byte \species .2byte FLAG_SET_SEEN .endm - @ Sets the Pokédex Caught flag of the specified Pokemon + @ Sets the Pokedex Caught Flag for the Pokemon with speciesId .macro setcaughtmon species:req - callnative Script_Script_GetSetPokedexFlag + callnative Scrcmd_getsetpokedexflag .2byte \species .2byte FLAG_SET_CAUGHT .endm - @ Check if the Player has \speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. + @ Check if the Player has speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. .macro checkspecies speciesId:req, mode=NO_PARTY_SCREEN .if \mode == OPEN_PARTY_SCREEN special ChoosePartyMon waitstate - callnative Script_CheckChosenMonMatchDesiredSpecie + callnative Scrcmd_checkspecies_choose .2byte \speciesId .else - callnative Script_CheckPartyHasSpecie + callnative Scrcmd_checkspecies .2byte \speciesId .endif .endm @@ -2419,15 +2417,10 @@ checkspecies \speciesId, OPEN_PARTY_SCREEN .endm - @ Gets the facing direction of a given event object and stores it in the variable \dest. + @ Gets the facing direction of a given event object and stores it in the variable dest. .macro getobjectfacingdirection localId:req, dest:req - callnative Script_GetObjectFacingDirection + callnative Scrcmd_getobjectfacingdirection .2byte \localId - .byte \dest + .2byte \dest .endm - @ .macro checkobjectat x:req, y:req, dest = VAR_RESULT - @ callnative Script_CheckObjectAtXY - @ .2byte \x - @ .2byte \y - @ .2byte \dest diff --git a/src/scrcmd.c b/src/scrcmd.c index fc34720683..be5c3c9346 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -32,6 +32,7 @@ #include "mystery_event_script.h" #include "palette.h" #include "party_menu.h" +#include "pokedex.h" #include "pokemon_storage_system.h" #include "random.h" #include "overworld.h" @@ -53,7 +54,6 @@ #include "list_menu.h" #include "malloc.h" #include "constants/event_objects.h" -#include "pokedex.h" typedef u16 (*SpecialFunc)(void); typedef void (*NativeFunc)(struct ScriptContext *ctx); @@ -2475,30 +2475,38 @@ void ScriptSetDoubleBattleFlag(struct ScriptContext *ctx) sIsScriptedWildDouble = TRUE; } -void RemoveAllItem(struct ScriptContext *ctx) +bool8 ScrCmd_removeallitem(struct ScriptContext *ctx) { u32 itemId = VarGet(ScriptReadHalfword(ctx)); u32 count = CountTotalItemQuantityInBag(itemId); gSpecialVar_Result = count; RemoveBagItem(itemId, count); + + return FALSE; } -void Script_GetObjectPosition(struct ScriptContext *ctx) +bool8 ScrCmd_getobjectxy(struct ScriptContext *ctx) { u32 localId = VarGet(ScriptReadHalfword(ctx)); u32 useTemplate = VarGet(ScriptReadHalfword(ctx)); GetObjectPosition(localId,useTemplate); + + return FALSE; } -void Script_CheckObjectAtXY(struct ScriptContext *ctx) +bool8 ScrCmd_checkobjectat(struct ScriptContext *ctx) { u32 x = VarGet(ScriptReadHalfword(ctx)) + 7; u32 y = VarGet(ScriptReadHalfword(ctx)) + 7; - gSpecialVar_Result = CheckObjectAtXY(x,y); + u16 *varPointer = GetVarPointer(ScriptReadHalfword(ctx)); + + *varPointer = CheckObjectAtXY(x,y); + + return FALSE; } -void Script_GetSetPokedexFlag(struct ScriptContext *ctx) +bool8 Scrcmd_getsetpokedexflag(struct ScriptContext *ctx) { u32 speciesId = SpeciesToNationalPokedexNum(VarGet(ScriptReadHalfword(ctx))); bool32 desiredFlag = VarGet(ScriptReadHalfword(ctx)); @@ -2506,24 +2514,32 @@ void Script_GetSetPokedexFlag(struct ScriptContext *ctx) if (desiredFlag == FLAG_SET_CAUGHT) GetSetPokedexFlag(speciesId,FLAG_SET_SEEN); + + return FALSE; } -void Script_CheckPartyHasSpecie(struct ScriptContext *ctx) +bool8 Scrcmd_checkspecies(struct ScriptContext *ctx) { u32 givenSpecies = VarGet(ScriptReadHalfword(ctx)); gSpecialVar_Result = CheckPartyHasSpecie(givenSpecies); + + return FALSE; } -void Script_CheckChosenMonMatchDesiredSpecie(struct ScriptContext *ctx) +bool8 Scrcmd_checkspecies_choose(struct ScriptContext *ctx) { u32 givenSpecies = VarGet(ScriptReadHalfword(ctx)); gSpecialVar_Result = (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES) == givenSpecies); + + return FALSE; } -void Script_GetObjectFacingDirection(struct ScriptContext *ctx) +bool8 Scrcmd_getobjectfacingdirection(struct ScriptContext *ctx) { u32 objectId = VarGet(ScriptReadHalfword(ctx)); u16 *varPointer = GetVarPointer(ScriptReadHalfword(ctx)); *varPointer = gObjectEvents[GetObjectEventIdByLocalId(objectId)].facingDirection; + + return FALSE; } From 60fb0b34fddf3f9bf4d010f29348f7b9c57cafa4 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 14 Sep 2024 07:48:24 -0700 Subject: [PATCH 197/544] Modified getobjectxy to allow for custom destinations --- asm/macros/event.inc | 14 ++++++++++---- include/field_specials.h | 2 +- src/field_specials.c | 13 +++++-------- src/scrcmd.c | 5 +++-- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 985ced862f..710514cda1 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2345,23 +2345,29 @@ .2byte \itemId .endm - @ Stores the position of the given object in VAR_0x8007 (x) and VAR_0x8008 (y). Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will take the object's template position. - .macro getobjectxy localId:req, posType:req + @ Stores the position of the given object in destX and destY. Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will take the object's template position. + .macro getobjectxy localId:req, posType:req, destX:req, destY:req callnative ScrCmd_getobjectxy .2byte \localId .2byte \posType + .2byte \destX + .2byte \destY .endm - .macro getobjecttemplatexy localId:req, posType = TEMPLATE_POSITION + .macro getobjecttemplatexy localId:req, posType = TEMPLATE_POSITION, destX:req, destY:req callnative ScrCmd_getobjectxy .2byte \localId .2byte \posType + .2byte \destX + .2byte \destY .endm - .macro getobjectcurrentxy localId:req, posType = CURRENT_POSITION + .macro getobjectcurrentxy localId:req, posType = CURRENT_POSITION, destX:req, destY:req callnative ScrCmd_getobjectxy .2byte \localId .2byte \posType + .2byte \destX + .2byte \destY .endm @ Return TRUE to dest if there is an object at the position x and y. diff --git a/include/field_specials.h b/include/field_specials.h index 85db5ba40f..f391a46ba5 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -33,7 +33,7 @@ void ResetFanClub(void); bool8 ShouldShowBoxWasFullMessage(void); void SetPCBoxToSendMon(u8 boxId); void PreparePartyForSkyBattle(void); -void GetObjectPosition(u32, u32); +void GetObjectPosition(u16*, u16*, u32, u32); bool32 CheckObjectAtXY(u32, u32); bool32 CheckPartyHasSpecie(u32); diff --git a/src/field_specials.c b/src/field_specials.c index 94a98812b1..8b2ac8de8d 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4278,26 +4278,23 @@ void PreparePartyForSkyBattle(void) CompactPartySlots(); } -void GetObjectPosition(u32 localId, u32 useTemplate) +void GetObjectPosition(u16* xPointer, u16* yPointer, u32 localId, u32 useTemplate) { u32 objectId; struct ObjectEvent* objEvent; - u16 *x = &gSpecialVar_0x8007; - u16 *y = &gSpecialVar_0x8008; - if (useTemplate) { const struct ObjectEventTemplate *objTemplate = FindObjectEventTemplateByLocalId(localId, gSaveBlock1Ptr->objectEventTemplates, gMapHeader.events->objectEventCount); - *x = objTemplate->x; - *y = objTemplate->y; + *xPointer = objTemplate->x; + *yPointer = objTemplate->y; return; } objectId = GetObjectEventIdByLocalId(localId); objEvent = &gObjectEvents[objectId]; - *x = objEvent->currentCoords.x - 7; - *y = objEvent->currentCoords.y - 7; + *xPointer = objEvent->currentCoords.x - 7; + *yPointer = objEvent->currentCoords.y - 7; } bool32 CheckObjectAtXY(u32 x, u32 y) diff --git a/src/scrcmd.c b/src/scrcmd.c index be5c3c9346..542f3d1dfc 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2489,8 +2489,9 @@ bool8 ScrCmd_getobjectxy(struct ScriptContext *ctx) { u32 localId = VarGet(ScriptReadHalfword(ctx)); u32 useTemplate = VarGet(ScriptReadHalfword(ctx)); - - GetObjectPosition(localId,useTemplate); + u16 *pX = GetVarPointer(ScriptReadHalfword(ctx)); + u16 *pY = GetVarPointer(ScriptReadHalfword(ctx)); + GetObjectPosition(pX,pY,localId,useTemplate); return FALSE; } From 3b226fc2e240ef6a0967e1238a34ca07a4edea54 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 14 Sep 2024 09:01:53 -0700 Subject: [PATCH 198/544] Removed swp --- .swp | Bin 4096 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .swp diff --git a/.swp b/.swp deleted file mode 100644 index 099c8db49858ca8579ae6d0417da70c45e4b4c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmYc?2=nw+u+%eP00IFJ0RfJ6Obi9ZX)rEc+Ql{4JH$Ug*U};^%+=Hkui8<`(GVC7 zfq@DE&QN0`LvU7CR#H?D7786Ghm6`g8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFaRL{ E0G?C|hyVZp From d76ccddad3908789a1a611d057ec8be897900571 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Sat, 14 Sep 2024 09:03:49 -0700 Subject: [PATCH 199/544] spaces to tabs in inc files --- asm/macros/event.inc | 122 +++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 710514cda1..a67d5a751c 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2341,92 +2341,92 @@ @ Remove all of specified item from the player's bag and return the number of removed items to VAR_RESULT .macro removeallitem itemId:req - callnative ScrCmd_removeallitem + callnative ScrCmd_removeallitem .2byte \itemId .endm @ Stores the position of the given object in destX and destY. Mode CURRENT_POSITION will take the object's current position. Mode TEMPLATE_POSITION will take the object's template position. .macro getobjectxy localId:req, posType:req, destX:req, destY:req callnative ScrCmd_getobjectxy - .2byte \localId - .2byte \posType - .2byte \destX - .2byte \destY + .2byte \localId + .2byte \posType + .2byte \destX + .2byte \destY .endm .macro getobjecttemplatexy localId:req, posType = TEMPLATE_POSITION, destX:req, destY:req callnative ScrCmd_getobjectxy - .2byte \localId - .2byte \posType - .2byte \destX - .2byte \destY + .2byte \localId + .2byte \posType + .2byte \destX + .2byte \destY .endm .macro getobjectcurrentxy localId:req, posType = CURRENT_POSITION, destX:req, destY:req callnative ScrCmd_getobjectxy - .2byte \localId - .2byte \posType - .2byte \destX - .2byte \destY + .2byte \localId + .2byte \posType + .2byte \destX + .2byte \destY .endm - @ Return TRUE to dest if there is an object at the position x and y. + @ Return TRUE to dest if there is an object at the position x and y. .macro checkobjectat x:req, y:req, dest = VAR_RESULT - callnative ScrCmd_checkobjectat - .2byte \x - .2byte \y - .2byte \dest + callnative ScrCmd_checkobjectat + .2byte \x + .2byte \y + .2byte \dest .endm - @ Returns the state of the Pokedex Seen Flag to VAR_RESULT for the Pokemon with speciesId - .macro getseenmon species:req - callnative Scrcmd_getsetpokedexflag - .2byte \species - .2byte FLAG_GET_SEEN - .endm + @ Returns the state of the Pokedex Seen Flag to VAR_RESULT for the Pokemon with speciesId + .macro getseenmon species:req + callnative Scrcmd_getsetpokedexflag + .2byte \species + .2byte FLAG_GET_SEEN + .endm - @ Returns the state of the Pokedex Caught Flag to VAR_RESULT for the Pokemon with speciesId - .macro getcaughtmon species:req - callnative Scrcmd_getsetpokedexflag - .2byte \species - .2byte FLAG_GET_CAUGHT - .endm + @ Returns the state of the Pokedex Caught Flag to VAR_RESULT for the Pokemon with speciesId + .macro getcaughtmon species:req + callnative Scrcmd_getsetpokedexflag + .2byte \species + .2byte FLAG_GET_CAUGHT + .endm - @ Sets the Pokedex Seen Flag for the Pokemon with speciesId - .macro setseenmon species:req - callnative Scrcmd_getsetpokedexflag - .2byte \species - .2byte FLAG_SET_SEEN - .endm + @ Sets the Pokedex Seen Flag for the Pokemon with speciesId + .macro setseenmon species:req + callnative Scrcmd_getsetpokedexflag + .2byte \species + .2byte FLAG_SET_SEEN + .endm - @ Sets the Pokedex Caught Flag for the Pokemon with speciesId - .macro setcaughtmon species:req - callnative Scrcmd_getsetpokedexflag - .2byte \species - .2byte FLAG_SET_CAUGHT - .endm + @ Sets the Pokedex Caught Flag for the Pokemon with speciesId + .macro setcaughtmon species:req + callnative Scrcmd_getsetpokedexflag + .2byte \species + .2byte FLAG_SET_CAUGHT + .endm - @ Check if the Player has speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. - .macro checkspecies speciesId:req, mode=NO_PARTY_SCREEN - .if \mode == OPEN_PARTY_SCREEN - special ChoosePartyMon - waitstate - callnative Scrcmd_checkspecies_choose - .2byte \speciesId - .else - callnative Scrcmd_checkspecies - .2byte \speciesId - .endif - .endm + @ Check if the Player has speciesId in their party. OPEN_PARTY_SCREEN will have the player select a mon from their party. NO_PARTY_SCREEN will automatically check every mon in the player's party. + .macro checkspecies speciesId:req, mode=NO_PARTY_SCREEN + .if \mode == OPEN_PARTY_SCREEN + special ChoosePartyMon + waitstate + callnative Scrcmd_checkspecies_choose + .2byte \speciesId + .else + callnative Scrcmd_checkspecies + .2byte \speciesId + .endif + .endm - .macro checkspecies_choose speciesId:req + .macro checkspecies_choose speciesId:req checkspecies \speciesId, OPEN_PARTY_SCREEN - .endm + .endm @ Gets the facing direction of a given event object and stores it in the variable dest. - .macro getobjectfacingdirection localId:req, dest:req - callnative Scrcmd_getobjectfacingdirection - .2byte \localId - .2byte \dest - .endm + .macro getobjectfacingdirection localId:req, dest:req + callnative Scrcmd_getobjectfacingdirection + .2byte \localId + .2byte \dest + .endm From c4b5818d986b6c4525ee78a360342ec2cb534e68 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 14 Sep 2024 19:13:02 +0200 Subject: [PATCH 200/544] remove ScriptContext_Enable from secret_base.h --- include/secret_base.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/secret_base.h b/include/secret_base.h index cb3b95ee78..567316cf9c 100644 --- a/include/secret_base.h +++ b/include/secret_base.h @@ -24,7 +24,6 @@ void SetCurSecretBaseIdFromPosition(const struct MapPosition *position, const st void TrySetCurSecretBaseIndex(void); void CheckPlayerHasSecretBase(void); void ToggleSecretBaseEntranceMetatile(void); -void ScriptContext_Enable(void); void ReceiveSecretBasesData(void *records, size_t recordSize, u8 linkIdx); #endif //GUARD_SECRET_BASE_H From f7209166338cf881490519e8334882d740875f51 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 15 Sep 2024 02:25:12 -0300 Subject: [PATCH 201/544] CI fix attempt --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0322cbe11f..0cd9583984 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,5 +59,4 @@ jobs: MODERN: 1 TEST: 1 run: | - make -j${nproc} -O pokeemerald-test.elf make -j${nproc} check From f6319d8446616e22450f45d28fa2b0f9b3ff83b7 Mon Sep 17 00:00:00 2001 From: Sadfish the Sad Date: Sun, 15 Sep 2024 02:22:40 -0400 Subject: [PATCH 202/544] new animations for many moves more details in description (#5367) New: Me First, Zippy Zap, Splishy Splash, Floaty Fall, Pika Papow, Bouncy Bubble, Buzzy Buzz, Sizzly Slide, Glitzy Glow, Baddy Bad, Sappy Seed, Freezy Frost, Sparkly Swirl, Veevee Volley, Snap Trap, Astral Barrage, Burning Bulwark Updated: Aura Sphere, Dark Void, Spirit Shackle Fixed: Springtide Storm, Bleakwind Storm, Wildbolt Storm, Sandsear Storm, Clangorous Soul(Blaze) --- data/battle_anim_scripts.s | 572 ++++++++++++++++-- .../sprites/spirit_shackle_arrow.png | Bin 236 -> 341 bytes include/battle_anim.h | 3 + src/battle_anim_bug.c | 3 +- src/battle_anim_effects_1.c | 4 +- src/battle_anim_effects_3.c | 11 + src/battle_anim_fight.c | 6 +- src/battle_anim_flying.c | 5 +- src/battle_anim_mon_movement.c | 16 +- src/battle_anim_new.c | 79 ++- src/battle_anim_rock.c | 31 +- 11 files changed, 607 insertions(+), 123 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 296de004ac..14f9a3f592 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -691,6 +691,32 @@ gBattleAnimMove_LuckyChant:: end gBattleAnimMove_MeFirst:: + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_FINGER + loadspritegfx ANIM_TAG_THOUGHT_BUBBLE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 12, 12, 0x7FAF + setalpha 11, 5 + monbg_static ANIM_DEF_PARTNER + splitbgprio_all + createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 + playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER + delay 6 + createsprite gMetronomeFingerSpriteTemplate, ANIM_ATTACKER, 12, 0 + delay 24 + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3 + waitforvisualfinish + panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 + createvisualtask AnimTask_ShrinkTargetCopy, 5, 128, 24 + delay 15 + createsprite gMimicOrbSpriteTemplate, ANIM_TARGET, 2, -12, 24 + delay 10 + setarg 7, 0xFFFF + waitforvisualfinish + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB_WHITE + waitforvisualfinish + clearmonbg_static ANIM_DEF_PARTNER + blendoff end gBattleAnimMove_Copycat:: @@ -1092,8 +1118,8 @@ gBattleAnimMove_ForcePalm:: end gBattleAnimMove_AuraSphere:: - loadspritegfx ANIM_TAG_METEOR - loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_IMPACT_2 + loadspritegfx ANIM_TAG_LEER monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER setalpha 12, 8 @@ -3600,17 +3626,18 @@ gBattleAnimMove_DarkVoid:: waitbgfadein createvisualtask AnimTask_DestinyBondWhiteShadow, 5, 0, 0x30 loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_ATTACKER, 5, 2 - delay 0x30 - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0x15, 0, 0x70 @Last is speed - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0x15, 0, 0x70 @Last is speed - delay 0x40 + delay 48 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -768, 21, 0, 112 @Last is duration + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, -768, 21, 0, 112 @Last is duration + delay 64 invisible ANIM_TARGET invisible ANIM_DEF_PARTNER - createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0, 0x20, 0x3c + createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0, 32, 60 + createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_DEF_PARTNER, 0, 32, 60 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 16 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0, 16 - delay 0x20 + delay 32 call UnsetPsychicBg visible ANIM_TARGET visible ANIM_DEF_PARTNER @@ -9827,27 +9854,25 @@ gBattleAnimMove_BanefulBunker:: gBattleAnimMove_SpiritShackle:: loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow - loadspritegfx ANIM_TAG_CHAIN_LINK @Chain - monbg ANIM_DEF_PARTNER - splitbgprio ANIM_TARGET - setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 - waitforvisualfinish + loadspritegfx ANIM_TAG_PURPLE_CHAIN + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PURPLE_CHAIN, 0, 9, 9, RGB_BLACK + monbg ANIM_TARGET playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xf - delay 0x8 + createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 15 + delay 8 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 10, 1 waitforvisualfinish - loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x1c, 0x2 - createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0xfff0 - delay 0x4 - createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x0 - delay 0x4 - createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x10 + loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 1 + delay 7 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 1 + delay 3 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + delay 20 + setarg 7, 0xFFFF + playsewithpan SE_M_BIND, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 - waitforvisualfinish - clearmonbg ANIM_DEF_PARTNER + clearmonbg ANIM_TARGET blendoff end @@ -12621,43 +12646,385 @@ PhotonGeyserBeam: return gBattleAnimMove_ZippyZap:: - end @to do: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_SPARK_2 + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 @electric circle + waitforvisualfinish + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 + createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 4 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + call ElectricityEffect + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + waitforvisualfinish + end gBattleAnimMove_SplishySplash:: - end @to do: + loadspritegfx ANIM_TAG_SPARK_2 + createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF + delay 24 + panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 10, 1 + call ElectricityEffect + end gBattleAnimMove_FloatyFall:: - end @to do: + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, RGB_YELLOW + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 + waitforvisualfinish + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE + delay 20 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + waitforvisualfinish + end gBattleAnimMove_PikaPapow:: - end @to do: + createvisualtask AnimTask_GetReturnPowerLevel, 2 + delay 2 + jumpreteq 0, gBattleAnimMove_ThunderShock + jumpreteq 1, gBattleAnimMove_ShockWave + jumpreteq 2, gBattleAnimMove_Thunderbolt + jumpreteq 3, gBattleAnimMove_Thunder gBattleAnimMove_BouncyBubble:: - end @to do: + loadspritegfx ANIM_TAG_BUBBLE + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_BLUE_STAR + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 12, RGB(13, 12, 31) + waitforvisualfinish + playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + delay 2 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 + waitforvisualfinish + call WaterBubblesEffectLong + call GigaDrainAbsorbEffect + waitforvisualfinish + delay 15 + call HealingEffect + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 12, 0, RGB(13, 12, 31) + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end gBattleAnimMove_BuzzyBuzz:: - end @to do: + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_LIGHTNING + loadspritegfx ANIM_TAG_SHOCK_3 + loadspritegfx ANIM_TAG_SPARK_2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK + waitforvisualfinish + createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_TARGET + delay 10 + createvisualtask AnimTask_ElectricBolt, 5, 24, -52, 0 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + delay 7 + createvisualtask AnimTask_ElectricBolt, 5, -24, -52, 0 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + delay 7 + createvisualtask AnimTask_ElectricBolt, 5, 0, -60, 1 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + delay 9 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 13, 0, RGB_BLACK + waitforvisualfinish + delay 20 + waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 19 + call ElectricityEffect + waitforvisualfinish + delay 20 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK + waitforvisualfinish + end gBattleAnimMove_SizzlySlide:: - end @to do: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 + createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 4 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + call FireSpreadEffect + delay 7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 9 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end gBattleAnimMove_GlitzyGlow:: - end @to do: + loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring + loadspritegfx ANIM_TAG_SPARK_2 @yellow color + loadspritegfx ANIM_TAG_WATER_ORB @blue color + loadspritegfx ANIM_TAG_POISON_BUBBLE @violet color + loadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 12, 12, 0x289F + monbg ANIM_DEF_PARTNER + splitbgprio_foes ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, 0 @Darken + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 0, 0 + delay 18 + panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 + createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1 + delay 1 + createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1 + delay 1 + createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1 + delay 36 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 + createvisualtask AnimTask_ShakeBattleTerrain, 2, 1, 0, 6, 1 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, 0 @Darken + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + delay 1 + unloadspritegfx ANIM_TAG_THIN_RING @hypervoice ring + unloadspritegfx ANIM_TAG_SPARK_2 @yellow color + unloadspritegfx ANIM_TAG_WATER_ORB @blue color + unloadspritegfx ANIM_TAG_POISON_BUBBLE @violet color + unloadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + waitforvisualfinish + goto gBattleAnimMove_LightScreen gBattleAnimMove_BaddyBad:: - end @to do: + loadspritegfx ANIM_TAG_STRAIGHT_BEAM + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRAIGHT_BEAM, 0, 14, 14, RGB_BLACK + monbg ANIM_ATTACKER + splitbgprio ANIM_ATTACKER + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + fadetobg BG_DARK + waitbgfadein + delay 10 + playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER + createvisualtask AnimTask_NightShadeClone, 5, 133 + delay 10 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 6, 0, 16, RGB_BLACK + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 4, 0, 96, 1 + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 + call PhotonGeyserBeam + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 16, 0, RGB_BLACK + waitforvisualfinish + delay 1 + restorebg + waitbgfadein + waitforvisualfinish + clearmonbg ANIM_ATTACKER + unloadspritegfx ANIM_TAG_STRAIGHT_BEAM + waitforvisualfinish + goto gBattleAnimMove_Reflect gBattleAnimMove_SappySeed:: - end @to do: + loadspritegfx ANIM_TAG_SPROUT + loadspritegfx ANIM_TAG_SEED + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 40, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -30, ANIM_TARGET, 1 + delay 2 + call FullBeanstalk + call FallingSeeds + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + waitforvisualfinish + end +FullBeanstalk: + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -30, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -40, ANIM_TARGET, 1 + delay 2 + return +FallingSeeds: + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 28, 0, 10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -10, 0, -5, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 10, 0, 6, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 24, 0, 10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -32, 0, -10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 30, 0, 10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + return gBattleAnimMove_FreezyFrost:: - end @to do: + loadspritegfx ANIM_TAG_ICICLE_SPEAR + loadspritegfx ANIM_TAG_ICE_SPIKES + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICICLE_SPEAR, 0, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICE_SPIKES, 0, 0, 12, RGB_BLACK + waitforvisualfinish + call FreezyFrostHitEffect + call FreezyFrostHitEffect + call FreezyFrostHitEffect + call FreezyFrostHitEffect + waitforvisualfinish + call IceSpikesEffectLong + waitforvisualfinish + end +FreezyFrostHitEffect: + createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, -4, 16 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + delay 1 + createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 4109, 16 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + delay 1 + createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 4, 16 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + delay 1 + createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, -16, 16 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + delay 1 + return gBattleAnimMove_SparklySwirl:: - end @to do: + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_PINK_PETAL + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUST, 0, 15, 15, RGB(31, 21, 21) + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 + call HurricaneGust + call PinkPetalVortex + call HurricaneGust + call PinkPetalVortex + call HurricaneGust + call PinkPetalVortex + waitforvisualfinish + stopsound + clearmonbg ANIM_TARGET + end +PinkPetalVortex: + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, -50, 1 + delay 2 + return gBattleAnimMove_VeeveeVolley:: - end @to do: + createvisualtask AnimTask_GetReturnPowerLevel, 2 + delay 2 + jumpreteq 0, gBattleAnimMove_Tackle + jumpreteq 1, gBattleAnimMove_Headbutt + jumpreteq 2, gBattleAnimMove_TakeDown + jumpreteq 3, gBattleAnimMove_DoubleEdge gBattleAnimMove_DoubleIronBash:: loadspritegfx ANIM_TAG_GUST @@ -13004,6 +13371,9 @@ gBattleAnimMove_ClangorousSoul:: createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0, 0, 0, 10, ANIM_ATTACKER, ANIM_LEFT_FIST, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish + unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST + unloadspritegfx ANIM_TAG_SPARKLE_2 @stars + waitforvisualfinish loadspritegfx ANIM_TAG_THIN_RING @ring playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 @@ -13104,8 +13474,31 @@ gBattleAnimMove_DrumBeating:: blendoff end -gBattleAnimMove_SnapTrap:: @ placeholder - goto gBattleAnimMove_Bite +gBattleAnimMove_SnapTrap:: + loadspritegfx ANIM_TAG_LEAF @leaves + loadspritegfx ANIM_TAG_FLOWER @flowers + loadspritegfx ANIM_TAG_SHARP_TEETH + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0688 + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 10 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end gBattleAnimMove_PyroBall:: loadspritegfx ANIM_TAG_FLAT_ROCK @@ -14848,7 +15241,44 @@ gBattleAnimMove_GlacialLance:: gBattleAnimMove_AstralBarrage:: - goto gBattleAnimMove_ShadowBall + loadspritegfx ANIM_TAG_FLAT_ROCK + loadspritegfx ANIM_TAG_ICE_CRYSTALS + loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_FLAT_ROCK, 0x0, 0xA, 0xA, RGB(2, 1, 4) + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICE_CRYSTALS, 0x0, 0xA, 0xA, RGB(2, 1, 4) + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + setalpha 12, 8 + fadetobg BG_GHOST + waitbgfadein + createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 20, 0, 5 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 200, 96, 1, 120 + delay 8 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 20, 248, 4, 112 + delay 8 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 130, 160, 2, 104 + delay 8 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 160, 192, 0, 96 + delay 8 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 60, 288, 3, 88 + delay 74 + panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + call BlizzardIceCrystals + call BlizzardIceCrystals + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_TARGET + waitforvisualfinish + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET + createspriteontargets gCurseGhostSpriteTemplate, ANIM_TARGET, 3, 2, 8, -5, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 8, 0, 16, 1 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + restorebg + waitbgfadein + blendoff + delay 1 + end @Credits to Skeli @@ -14995,8 +15425,9 @@ gBattleAnimMove_SpringtideStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_RED_HEART playsewithpan SE_M_GUST, SOUND_PAN_TARGET - createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1 - createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x6, 0x0, 0xB, 0x7ADF + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 2, 6, 0, 11, 0x7ADF call HurricaneGustCentered call SpringtideStormHeartSwirl call HurricaneGustCentered @@ -15565,8 +15996,9 @@ gBattleAnimMove_BleakwindStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_ICE_CRYSTALS playsewithpan SE_M_GUST, SOUND_PAN_TARGET - createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x7FFF + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x7FFF call HurricaneGustCentered call BleakwindStormIceSwirl call HurricaneGustCentered @@ -15581,7 +16013,7 @@ gBattleAnimMove_BleakwindStorm:: call BleakwindStormIceSwirl waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x7FFF waitforvisualfinish end BleakwindStormIceSwirl: @@ -15605,11 +16037,12 @@ gBattleAnimMove_WildboltStorm:: loadspritegfx ANIM_TAG_SPARK_2 fadetobg BG_MAX_LIGHTNING waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 0x5, 0xff00, 0x0, 0x1, 0xffff + createvisualtask AnimTask_StartSlidingBg, 5, -256, 0, 1, 0xffff waitbgfadein playsewithpan SE_M_GUST, SOUND_PAN_TARGET - createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x07FE + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x07FE call HurricaneGustCentered call WildboltStormSparkSwirl call HurricaneGustCentered @@ -15624,7 +16057,7 @@ gBattleAnimMove_WildboltStorm:: call WildboltStormSparkSwirl waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x07FE call UnsetPsychicBg waitforvisualfinish end @@ -15650,8 +16083,9 @@ gBattleAnimMove_SandsearStorm:: loadspritegfx ANIM_TAG_SMALL_EMBER createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_GUST, 0x0, 0xA, 0xA, 0x190B playsewithpan SE_M_GUST, SOUND_PAN_TARGET - createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x1F + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x1F call HurricaneGustCentered call SandsearStormFireSpin call HurricaneGustCentered @@ -15666,7 +16100,7 @@ gBattleAnimMove_SandsearStorm:: call SandsearStormFireSpin waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x1F waitforvisualfinish end @@ -15997,7 +16431,30 @@ ChillyReceptionSnowballs: return gBattleAnimMove_BurningBulwark:: - goto gBattleAnimMove_Protect + loadspritegfx ANIM_TAG_PROTECT @protect + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER 16 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 13, 13, 0x015B + createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 90 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_ATTACKER, RGB_RED, 10, 0, 2 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end gBattleAnimMove_AlluringVoice:: loadspritegfx ANIM_TAG_THIN_RING @@ -27667,8 +28124,8 @@ Status_Thunder_Cage: @ TODO goto gBattleAnimMove_ThunderCage -Status_Snap_Trap: @ placeholder - goto gBattleAnimMove_Bite +Status_Snap_Trap: + goto gBattleAnimMove_SnapTrap Status_SandTomb: loadspritegfx ANIM_TAG_MUD_SAND @@ -33004,6 +33461,9 @@ gBattleAnimMove_ClangorousSoulblaze:: createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0xa, ANIM_ATTACKER, ANIM_LEFT_FIST, 0x1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish + unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST + unloadspritegfx ANIM_TAG_SPARKLE_2 @stars + waitforvisualfinish loadspritegfx ANIM_TAG_THIN_RING @ring playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 diff --git a/graphics/battle_anims/sprites/spirit_shackle_arrow.png b/graphics/battle_anims/sprites/spirit_shackle_arrow.png index ff86f33d21cd4f83c7f7419eeb578c540ef8a41c..cc520e6b5d5ee4dcee9822c660335933ce2823b4 100644 GIT binary patch delta 301 zcmaFEc$H~_N`sf3r=1Ueo4brGY19+2JsTth?3y^w370~qErTVAC~|>cZIUl zA_ZeTlfu>|4}nTJN(%hkfilKGHiK7#raX{hNq6*hWMJ6X&;2Kn705RT@CkAK|Nnon zmc)`JOaAv|olWry3JRLjtoi?5^S!-EAgv4&-301)N^ukenT$!^?k@kAvVS@XxH6+Io;h1!ZR!y3Yq+_aqY)8Z`3vjPR`>S1C5#JFUj8a%kk^oV_FH}*$V&{Ku6{1-oD!MK`G1mcNgc!giEjVv)%W`{-~zw)=gkJnm3z84 zhE&W+PFTP(W$H98h0iy=yt$btusV5rALR~U<#N6l(lLGUDh(c9Uk5<}efLm72`Qy += gBattleAnimArgs[1]; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ed2e7457f6..8c2d73ff80 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1281,6 +1281,17 @@ const struct SpriteTemplate gTeraCrystalSpreadSpriteTemplate = .callback = AnimTask_TeraCrystalShatter, }; +const struct SpriteTemplate gPinkPetalVortexTemplate = +{ + .tileTag = ANIM_TAG_PINK_PETAL, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSweetScentPetalAnimCmdTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + // Task data for AnimTask_TeraCrystalShatter #define tCounter data[0] #define tDX data[6] diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c index e150a2a57d..ed18e89f9b 100644 --- a/src/battle_anim_fight.c +++ b/src/battle_anim_fight.c @@ -414,9 +414,9 @@ const struct SpriteTemplate gPalmSpriteTemplate = const struct SpriteTemplate gAuraSphereBlast = { - .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_AffineOff_ObjNormal_64x64, + .tileTag = ANIM_TAG_IMPACT_2, + .paletteTag = ANIM_TAG_IMPACT_2, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 1fd587fa4c..7d21624495 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -359,7 +359,10 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate = // same as AnimEllipticalGust but centered on targets static void AnimEllipticalGustCentered(struct Sprite *sprite) { - InitSpritePosToAnimTargetsCentre(sprite, FALSE); + if (IsDoubleBattle()) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); sprite->y += 20; sprite->data[1] = 191; sprite->callback = AnimEllipticalGust_Step; diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 051524a689..04fd111a84 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -487,11 +487,7 @@ static void ReverseVerticalDipDirection(struct Sprite *sprite) // arg 2: duration static void SlideMonToOriginalPos(struct Sprite *sprite) { - u32 monSpriteId; - if (!gBattleAnimArgs[0]) - monSpriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - else - monSpriteId = gBattlerSpriteIds[gBattleAnimTarget]; + u32 monSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gSprites[monSpriteId].x + gSprites[monSpriteId].x2; @@ -554,15 +550,9 @@ static void SlideMonToOriginalPos_Step(struct Sprite *sprite) // arg 4: duration static void SlideMonToOffset(struct Sprite *sprite) { - u8 battler; - u8 monSpriteId; - if (!gBattleAnimArgs[0]) - battler = gBattleAnimAttacker; - else - battler = gBattleAnimTarget; + u8 monSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - monSpriteId = gBattlerSpriteIds[battler]; - if (GetBattlerSide(battler) != B_SIDE_PLAYER) + if (GetBattlerSide(gBattleAnimArgs[0]) != B_SIDE_PLAYER) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; if (gBattleAnimArgs[3] == 1) diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 4cadfaaffd..50bb83305f 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -99,7 +99,6 @@ static void SpriteCB_GlacialLance_Step1(struct Sprite* sprite); static void SpriteCB_GlacialLance_Step2(struct Sprite* sprite); static void SpriteCB_GlacialLance(struct Sprite* sprite); static void SpriteCB_TripleArrowKick(struct Sprite* sprite); -static void AnimMakingItRain(struct Sprite *sprite); // const data // general @@ -2176,18 +2175,7 @@ const struct SpriteTemplate gSpiritShackleArrowTemplate = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSonicBoomProjectile -}; - -const struct SpriteTemplate gSpiritShackleChainTemplate = -{ - .tileTag = ANIM_TAG_CHAIN_LINK, - .paletteTag = ANIM_TAG_CHAIN_LINK, - .oam = &gOamData_AffineOff_ObjNormal_32x16, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimThunderWave + .callback = AnimTranslateStinger }; //darkest lariat @@ -7235,18 +7223,6 @@ const struct SpriteTemplate gBitterBladeImpactTemplate = .callback = AnimClawSlash }; -// Make It Rain -const struct SpriteTemplate gMakingItRainTemplate = -{ - .tileTag = ANIM_TAG_COIN, - .paletteTag = ANIM_TAG_COIN, - .oam = &gOamData_AffineNormal_ObjNormal_16x16, - .anims = gCoinAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimMakingItRain, -}; - const struct SpriteTemplate gRedExplosionSpriteTemplate = { .tileTag = ANIM_TAG_RED_EXPLOSION, @@ -7280,6 +7256,39 @@ const struct SpriteTemplate gMoonUpSpriteTemplate = .callback = AnimWeatherBallUp, }; +const union AnimCmd gSproutAnimCmds[] = +{ + ANIMCMD_FRAME(96, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSproutAnimTable[] = +{ + gSproutAnimCmds, +}; + +const struct SpriteTemplate gSproutGrowSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPROUT, + .paletteTag = ANIM_TAG_SPROUT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSproutAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gFreezyFrostRisingSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ICICLE_SPEAR, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_GeyserTarget +}; + // functions //general void AnimTask_IsTargetPartner(u8 taskId) @@ -9266,26 +9275,6 @@ void AnimTask_StickySyrup(u8 taskId) DestroyAnimVisualTask(taskId); } -static void AnimMakingItRain(struct Sprite *sprite) -{ - if (gBattleAnimArgs[3] != 0) - SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); //coin shower on target - - sprite->x += gBattleAnimArgs[0]; - sprite->y += 14; - StartSpriteAnim(sprite, gBattleAnimArgs[1]); - AnimateSprite(sprite); - sprite->data[0] = 0; - sprite->data[1] = 0; - sprite->data[2] = 4; - sprite->data[3] = 16; - sprite->data[4] = -70; - sprite->data[5] = gBattleAnimArgs[2]; - StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step); - sprite->callback = TranslateSpriteInEllipse; - sprite->callback(sprite); -} - void AnimTask_RandomBool(u8 taskId) { if (RandomPercentage(RNG_NONE, 50)) diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index 5aa14ffa34..b6239ca063 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -349,6 +349,28 @@ const struct SpriteTemplate gSeedFlareGreenWavesTemplate = .callback = AnimFlyingSandCrescent }; +const struct SpriteTemplate gMakingItRainTemplate = +{ + .tileTag = ANIM_TAG_COIN, + .paletteTag = ANIM_TAG_COIN, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gCoinAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFallingRock, +}; + +const struct SpriteTemplate gFallingSeedSpriteTemplate = +{ + .tileTag = ANIM_TAG_SEED, + .paletteTag = ANIM_TAG_SEED, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFallingRock, +}; + static void AnimStealthRock(struct Sprite *sprite) { s16 x, y; @@ -456,7 +478,14 @@ void AnimRockFragment(struct Sprite *sprite) // Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb void AnimParticleInVortex(struct Sprite *sprite) { - InitSpritePosToAnimBattler(gBattleAnimArgs[6], sprite, FALSE); + if (IsDoubleBattle() //got a little lazy here will fix later + && (gAnimMoveIndex == MOVE_BLEAKWIND_STORM + || gAnimMoveIndex == MOVE_SANDSEAR_STORM + || gAnimMoveIndex == MOVE_SPRINGTIDE_STORM + || gAnimMoveIndex == MOVE_WILDBOLT_STORM)) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); sprite->data[0] = gBattleAnimArgs[3]; sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[4]; From 25e9ca2ac66b1f87ad5ca4ca3b50166ab2c8a9ed Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 15 Sep 2024 08:24:26 +0200 Subject: [PATCH 203/544] Cleaned up a bit of code with GetBattlerPartyData (#5378) * rename GetBattlerPartyData --- include/battle.h | 8 ++++---- src/battle_anim_mons.c | 6 +----- src/battle_debug.c | 7 +------ src/battle_message.c | 9 ++------- src/battle_script_commands.c | 5 +---- src/battle_tv.c | 13 ++----------- src/pokeball.c | 8 ++------ src/type_icons.c | 2 +- 8 files changed, 14 insertions(+), 44 deletions(-) diff --git a/include/battle.h b/include/battle.h index 66f8531ae7..7ccbcfbfe4 100644 --- a/include/battle.h +++ b/include/battle.h @@ -1153,11 +1153,10 @@ static inline u32 GetBattlerSide(u32 battler) return GetBattlerPosition(battler) & BIT_SIDE; } -static inline struct Pokemon* GetBattlerData(u32 battlerId) +static inline struct Pokemon* GetPartyBattlerData(u32 battler) { - u32 index = gBattlerPartyIndexes[battlerId]; - - return (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) ? &gEnemyParty[index] : &gPlayerParty[index]; + u32 index = gBattlerPartyIndexes[battler]; + return (GetBattlerSide(battler) == B_SIDE_OPPONENT) ? &gEnemyParty[index] : &gPlayerParty[index]; } static inline struct Pokemon *GetSideParty(u32 side) @@ -1176,3 +1175,4 @@ static inline bool32 IsDoubleBattle(void) } #endif // GUARD_BATTLE_H + diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index e0b4820409..dec12e0dc6 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -116,11 +116,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) } else { - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; - + mon = GetPartyBattlerData(battlerId); illusionMon = GetIllusionMonPtr(battlerId); if (illusionMon != NULL) mon = illusionMon; diff --git a/src/battle_debug.c b/src/battle_debug.c index b088aa73ba..a5421a932b 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -2269,14 +2269,9 @@ static void UpdateMonData(struct BattleDebugMenu *data) { if (data->battlerWasChanged[i]) { - struct Pokemon *mon; + struct Pokemon *mon = GetPartyBattlerData(i); struct BattlePokemon *battleMon = &gBattleMons[i]; - if (GetBattlerSide(i) == B_SIDE_PLAYER) - mon = &gPlayerParty[gBattlerPartyIndexes[i]]; - else - mon = &gEnemyParty[gBattlerPartyIndexes[i]]; - SetMonData(mon, MON_DATA_HELD_ITEM, &battleMon->item); SetMonData(mon, MON_DATA_STATUS, &battleMon->status1); SetMonData(mon, MON_DATA_HP, &battleMon->hp); diff --git a/src/battle_message.c b/src/battle_message.c index 7c009f5a73..727091cec6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3091,14 +3091,9 @@ static const u8 *TryGetStatusString(u8 *src) static void GetBattlerNick(u32 battler, u8 *dst) { - struct Pokemon *mon, *illusionMon; + struct Pokemon *illusionMon = GetIllusionMonPtr(battler); + struct Pokemon *mon = GetPartyBattlerData(battler); - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; - else - mon = &gEnemyParty[gBattlerPartyIndexes[battler]]; - - illusionMon = GetIllusionMonPtr(battler); if (illusionMon != NULL) mon = illusionMon; GetMonData(mon, MON_DATA_NICKNAME, dst); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bfb7eec56d..283f42a23b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9877,10 +9877,7 @@ static void Cmd_various(void) case VARIOUS_HANDLE_FORM_CHANGE: { VARIOUS_ARGS(u8 case_); - if (GetBattlerSide(battler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[battler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; + mon = GetPartyBattlerData(battler); // Change species. if (cmd->case_ == 0) diff --git a/src/battle_tv.c b/src/battle_tv.c index 24d573d0bf..22e5ab1c31 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -338,17 +338,8 @@ void BattleTv_SetDataBasedOnString(u16 stringId) defSide = GetBattlerSide(gBattlerTarget); effSide = GetBattlerSide(gEffectBattler); scriptingSide = GetBattlerSide(gBattleMsgDataPtr->scrActive); - - if (atkSide == B_SIDE_PLAYER) - atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]; - else - atkMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]]; - - if (defSide == B_SIDE_PLAYER) - defMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]]; - else - defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]; - + atkMon = GetPartyBattlerData(gBattlerAttacker); + defMon = GetPartyBattlerData(gBattlerTarget); moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gBattleMsgDataPtr->currentMove); if (moveSlot >= MAX_MON_MOVES && IsNotSpecialBattleString(stringId) && stringId > BATTLESTRINGS_TABLE_START) diff --git a/src/pokeball.c b/src/pokeball.c index 914455af5a..21557d973a 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1571,12 +1571,8 @@ void FreeBallGfx(u8 ballId) static u16 GetBattlerPokeballItemId(u8 battlerId) { - struct Pokemon *mon, *illusionMon; - - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; - else - mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + struct Pokemon *illusionMon; + struct Pokemon *mon = GetPartyBattlerData(battlerId); illusionMon = GetIllusionMonPtr(battlerId); if (illusionMon != NULL) diff --git a/src/type_icons.c b/src/type_icons.c index 361312ab91..41fa102bb9 100644 --- a/src/type_icons.c +++ b/src/type_icons.c @@ -291,7 +291,7 @@ static bool32 UseDoubleBattleCoords(u32 position) static u32 GetMonPublicType(u32 battlerId, u32 typeNum) { - struct Pokemon* mon = GetBattlerData(battlerId); + struct Pokemon* mon = GetPartyBattlerData(battlerId); u32 monSpecies = GetMonData(mon,MON_DATA_SPECIES,NULL); struct Pokemon* monIllusion; u32 illusionSpecies; From 6116b8b04e4152f4e794fd54907c1a9979db375a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 16 Sep 2024 11:57:41 -0300 Subject: [PATCH 204/544] Start 1.9.3 cycle --- include/constants/expansion.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 338c41a848..8a86282619 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,13 +1,13 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// 1.9.2 +// Last version: 1.9.2 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 9 -#define EXPANSION_VERSION_PATCH 2 +#define EXPANSION_VERSION_PATCH 3 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE TRUE +#define EXPANSION_TAGGED_RELEASE FALSE #endif From 95dac7c4acb7fea7b3d4af866194236eee7d4926 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 17 Sep 2024 20:58:43 +0200 Subject: [PATCH 205/544] Remove potential uninitialized behavior (#5393) `MAX_BATTLERS_COUNT` makes more sense to use here because we iterate over max battlers in the first place. --- 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 04f3c966bb..698b8db4b4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8935,7 +8935,7 @@ static bool32 ChangeOrderTargetAfterAttacker(void) || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) return FALSE; - for (i = 0; i < gBattlersCount; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { data[i] = gBattlerByTurnOrder[i]; actionsData[i] = gActionsByTurnOrder[i]; From 52c2728ff6d07a5d8d420cbe39c08365aa1ca01e Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Wed, 18 Sep 2024 10:37:34 -0400 Subject: [PATCH 206/544] remove gflib --- Makefile | 13 ++------- {gflib => include}/bg.h | 0 {gflib => include}/blit.h | 0 {gflib => include/constants}/characters.h | 0 {gflib => include}/dma3.h | 0 {gflib => include}/gpu_regs.h | 0 {gflib => include}/io_reg.h | 0 {gflib => include}/malloc.h | 0 {gflib => include}/sprite.h | 0 {gflib => include}/string_util.h | 0 {gflib => include}/text.h | 2 +- {gflib => include}/window.h | 0 ld_script.ld | 34 ++++++++++------------- ld_script_modern.ld | 5 ---- {gflib => src}/bg.c | 0 {gflib => src}/blit.c | 0 {gflib => src}/dma3_manager.c | 0 {gflib => src}/gpu_regs.c | 0 {gflib => src}/io_reg.c | 0 {gflib => src}/malloc.c | 0 src/mini_printf.c | 2 +- {gflib => src}/sprite.c | 0 {gflib => src}/string_util.c | 0 {gflib => src}/text.c | 0 {gflib => src}/window.c | 0 sym_bss.txt | 12 ++++---- sym_common.txt | 8 +++--- sym_ewram.txt | 10 +++---- tools/preproc/asm_file.cpp | 2 +- 29 files changed, 36 insertions(+), 52 deletions(-) rename {gflib => include}/bg.h (100%) rename {gflib => include}/blit.h (100%) rename {gflib => include/constants}/characters.h (100%) rename {gflib => include}/dma3.h (100%) rename {gflib => include}/gpu_regs.h (100%) rename {gflib => include}/io_reg.h (100%) rename {gflib => include}/malloc.h (100%) rename {gflib => include}/sprite.h (100%) rename {gflib => include}/string_util.h (100%) rename {gflib => include}/text.h (99%) rename {gflib => include}/window.h (100%) rename {gflib => src}/bg.c (100%) rename {gflib => src}/blit.c (100%) rename {gflib => src}/dma3_manager.c (100%) rename {gflib => src}/gpu_regs.c (100%) rename {gflib => src}/io_reg.c (100%) rename {gflib => src}/malloc.c (100%) rename {gflib => src}/sprite.c (100%) rename {gflib => src}/string_util.c (100%) rename {gflib => src}/text.c (100%) rename {gflib => src}/window.c (100%) diff --git a/Makefile b/Makefile index ce868f06bd..9082680c8c 100644 --- a/Makefile +++ b/Makefile @@ -90,7 +90,6 @@ SYM := $(ROM:.gba=.sym) # Commonly used directories C_SUBDIR = src -GFLIB_SUBDIR = gflib ASM_SUBDIR = asm DATA_SRC_SUBDIR = src/data DATA_ASM_SUBDIR = data @@ -98,7 +97,6 @@ SONG_SUBDIR = sound/songs MID_SUBDIR = sound/songs/midi C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) -GFLIB_BUILDDIR = $(OBJ_DIR)/$(GFLIB_SUBDIR) ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) @@ -114,7 +112,7 @@ INCLUDE_CPP_ARGS := $(INCLUDE_DIRS:%=-iquote %) INCLUDE_SCANINC_ARGS := $(INCLUDE_DIRS:%=-I %) O_LEVEL ?= 2 -CPPFLAGS := $(INCLUDE_CPP_ARGS) -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) +CPPFLAGS := $(INCLUDE_CPP_ARGS) -Wno-trigraphs -DMODERN=$(MODERN) ifeq ($(MODERN),0) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef CC1 := tools/agbcc/bin/agbcc$(EXE) @@ -192,9 +190,6 @@ C_SRCS_IN := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c $(C_SUBDIR)/*/*/*.c) C_SRCS := $(foreach src,$(C_SRCS_IN),$(if $(findstring .inc.c,$(src)),,$(src))) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) -GFLIB_SRCS := $(wildcard $(GFLIB_SUBDIR)/*.c) -GFLIB_OBJS := $(patsubst $(GFLIB_SUBDIR)/%.c,$(GFLIB_BUILDDIR)/%.o,$(GFLIB_SRCS)) - C_ASM_SRCS := $(wildcard $(C_SUBDIR)/*.s $(C_SUBDIR)/*/*.s $(C_SUBDIR)/*/*/*.s) C_ASM_OBJS := $(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o,$(C_ASM_SRCS)) @@ -213,7 +208,7 @@ SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid) MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) -OBJS := $(C_OBJS) $(GFLIB_OBJS) $(C_ASM_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) +OBJS := $(C_OBJS) $(C_ASM_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(MID_OBJS) OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) SUBDIRS := $(sort $(dir $(OBJS))) @@ -326,7 +321,7 @@ define C_SCANINC ifneq ($(NODEP),1) $1.o: $1.d $1.d: $2 - $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include -I gflib $2 + $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $2 include $1.d endif endef @@ -334,10 +329,8 @@ endef # Create generic rules if no dependency scanning, else create the real rules ifeq ($(NODEP),1) $(eval $(call C_DEP,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.c)) -$(eval $(call C_DEP,$(GFLIB_BUILDDIR)/%,$(GFLIB_SUBDIR)/%.c)) else $(foreach src,$(C_SRCS),$(eval $(call C_DEP,$(OBJ_DIR)/$(basename $(src)),$(src)))) -$(foreach src,$(GFLIB_SRCS),$(eval $(call C_DEP,$(OBJ_DIR)/$(basename $(src)),$(src)))) endif # Similar methodology for Assembly files diff --git a/gflib/bg.h b/include/bg.h similarity index 100% rename from gflib/bg.h rename to include/bg.h diff --git a/gflib/blit.h b/include/blit.h similarity index 100% rename from gflib/blit.h rename to include/blit.h diff --git a/gflib/characters.h b/include/constants/characters.h similarity index 100% rename from gflib/characters.h rename to include/constants/characters.h diff --git a/gflib/dma3.h b/include/dma3.h similarity index 100% rename from gflib/dma3.h rename to include/dma3.h diff --git a/gflib/gpu_regs.h b/include/gpu_regs.h similarity index 100% rename from gflib/gpu_regs.h rename to include/gpu_regs.h diff --git a/gflib/io_reg.h b/include/io_reg.h similarity index 100% rename from gflib/io_reg.h rename to include/io_reg.h diff --git a/gflib/malloc.h b/include/malloc.h similarity index 100% rename from gflib/malloc.h rename to include/malloc.h diff --git a/gflib/sprite.h b/include/sprite.h similarity index 100% rename from gflib/sprite.h rename to include/sprite.h diff --git a/gflib/string_util.h b/include/string_util.h similarity index 100% rename from gflib/string_util.h rename to include/string_util.h diff --git a/gflib/text.h b/include/text.h similarity index 99% rename from gflib/text.h rename to include/text.h index ff13efa9a8..db9f4db873 100644 --- a/gflib/text.h +++ b/include/text.h @@ -1,7 +1,7 @@ #ifndef GUARD_TEXT_H #define GUARD_TEXT_H -#include "characters.h" +#include "constants/characters.h" // Given as a text speed when all the text should be // loaded at once but not copied to vram yet. diff --git a/gflib/window.h b/include/window.h similarity index 100% rename from gflib/window.h rename to include/window.h diff --git a/ld_script.ld b/ld_script.ld index c4abf075f8..1e08a8d61c 100644 --- a/ld_script.ld +++ b/ld_script.ld @@ -23,7 +23,6 @@ SECTIONS { { INCLUDE "sym_ewram.ld" src/*.o(ewram_data); - gflib/*.o(ewram_data); *libc.a:impure.o(.data); *libc.a:locale.o(.data); @@ -36,7 +35,6 @@ SECTIONS { /* .bss starts at 0x3000000 */ INCLUDE "sym_bss.ld" src/*.o(.bss); - gflib/*.o(.bss); data/*.o(.bss); /* .bss.code starts at 0x3001AA8 */ @@ -57,15 +55,15 @@ SECTIONS { src/rom_header_gf.o(.text.*); src/crt0.o(.text); src/main.o(.text); - gflib/malloc.o(.text); - gflib/dma3_manager.o(.text); - gflib/gpu_regs.o(.text); - gflib/bg.o(.text); - gflib/blit.o(.text); - gflib/window.o(.text); - gflib/text.o(.text); - gflib/sprite.o(.text); - gflib/string_util.o(.text); + src/malloc.o(.text); + src/dma3_manager.o(.text); + src/gpu_regs.o(.text); + src/bg.o(.text); + src/blit.o(.text); + src/window.o(.text); + src/text.o(.text); + src/sprite.o(.text); + src/string_util.o(.text); src/link.o(.text); src/AgbRfu_LinkManager.o(.text); src/link_rfu_3.o(.text); @@ -446,12 +444,12 @@ SECTIONS { src/rom_header.o(.rodata); src/rom_header_gf.o(.rodata); src/main.o(.rodata); - gflib/bg.o(.rodata); - gflib/window.o(.rodata); - gflib/text.o(.rodata); - gflib/sprite.o(.rodata); - gflib/io_reg.o(.rodata); - gflib/string_util.o(.rodata); + src/bg.o(.rodata); + src/window.o(.rodata); + src/text.o(.rodata); + src/sprite.o(.rodata); + src/io_reg.o(.rodata); + src/string_util.o(.rodata); src/link.o(.rodata); src/link.o(.rodata.str1.4); src/AgbRfu_LinkManager.o(.rodata); @@ -1317,9 +1315,7 @@ SECTIONS { ALIGN(4) { src/*.o(.text); - gflib/*.o(.text); src/*.o(.rodata); - gflib/*.o(.rodata); data/*.o(.rodata); } > ROM = 0 diff --git a/ld_script_modern.ld b/ld_script_modern.ld index 4ccbfbaa0f..fac4a134c3 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -16,14 +16,12 @@ SECTIONS { ALIGN(4) { src/*.o(ewram_data); - gflib/*.o(ewram_data); } > EWRAM iwram 0x3000000 (NOLOAD) : ALIGN(4) { src/*.o(.bss); - gflib/*.o(.bss); data/*.o(.bss); *libc.a:*.o(.bss*); *libnosys.a:*.o(.bss*); @@ -31,7 +29,6 @@ SECTIONS { src/m4a.o(.bss.code); src/*.o(COMMON); - gflib/*.o(COMMON); *libc.a:*.o(COMMON); *libnosys.a:*.o(COMMON); } > IWRAM @@ -46,7 +43,6 @@ SECTIONS { src/rom_header_gf.o(.text.*); src/crt0.o(.text); src/main.o(.text); - gflib/*.o(.text*); src/*.o(.text*); asm/*.o(.text*); } > ROM =0 @@ -82,7 +78,6 @@ SECTIONS { ALIGN(4) { src/*.o(.rodata*); - gflib/*.o(.rodata*); data/*.o(.rodata*); } > ROM =0 diff --git a/gflib/bg.c b/src/bg.c similarity index 100% rename from gflib/bg.c rename to src/bg.c diff --git a/gflib/blit.c b/src/blit.c similarity index 100% rename from gflib/blit.c rename to src/blit.c diff --git a/gflib/dma3_manager.c b/src/dma3_manager.c similarity index 100% rename from gflib/dma3_manager.c rename to src/dma3_manager.c diff --git a/gflib/gpu_regs.c b/src/gpu_regs.c similarity index 100% rename from gflib/gpu_regs.c rename to src/gpu_regs.c diff --git a/gflib/io_reg.c b/src/io_reg.c similarity index 100% rename from gflib/io_reg.c rename to src/io_reg.c diff --git a/gflib/malloc.c b/src/malloc.c similarity index 100% rename from gflib/malloc.c rename to src/malloc.c diff --git a/src/mini_printf.c b/src/mini_printf.c index cab78d7611..ac8a0ef127 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -36,7 +36,7 @@ #include "gba/types.h" #include "gba/defines.h" #include "config.h" -#include "characters.h" +#include "constants/characters.h" #include "string_util.h" #ifndef NDEBUG diff --git a/gflib/sprite.c b/src/sprite.c similarity index 100% rename from gflib/sprite.c rename to src/sprite.c diff --git a/gflib/string_util.c b/src/string_util.c similarity index 100% rename from gflib/string_util.c rename to src/string_util.c diff --git a/gflib/text.c b/src/text.c similarity index 100% rename from gflib/text.c rename to src/text.c diff --git a/gflib/window.c b/src/window.c similarity index 100% rename from gflib/window.c rename to src/window.c diff --git a/sym_bss.txt b/sym_bss.txt index 3a23e74789..0520e0b5b0 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -1,10 +1,10 @@ .include "src/main.o" - .include "gflib/malloc.o" - .include "gflib/dma3_manager.o" - .include "gflib/gpu_regs.o" - .include "gflib/bg.o" - .include "gflib/text.o" - .include "gflib/sprite.o" + .include "src/malloc.o" + .include "src/dma3_manager.o" + .include "src/gpu_regs.o" + .include "src/bg.o" + .include "src/text.o" + .include "src/sprite.o" .include "src/link.o" .include "src/AgbRfu_LinkManager.o" .include "src/link_rfu_3.o" diff --git a/sym_common.txt b/sym_common.txt index 7eebcac74e..bffabfbdf3 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -1,17 +1,17 @@ .space 0x8 .include "main.o" - @ ../gflib/bg.o + @ ../src/bg.o .align 2 gWindowTileAutoAllocEnabled: .space 4 - @ ../gflib/window.o + @ ../src/window.o .align 4 gTransparentTileNumber: .space 1 .align 4 gWindowBgTilemapBuffers: .space 16 - @ ../gflib/text.o + @ ../src/text.o .align 4 gFonts: .space 4 @@ -24,7 +24,7 @@ gCurGlyph: .align 2 gTextFlags: .space 4 - @ ../gflib/sprite.o + @ ../src/sprite.o .align 2 gOamMatrixAllocBitmap: .space 4 diff --git a/sym_ewram.txt b/sym_ewram.txt index 31c507ee9b..92a69cc4c9 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1,10 +1,10 @@ - .include "gflib/malloc.o" + .include "src/malloc.o" .include "src/decompress.o" .include "src/main.o" - .include "gflib/window.o" - .include "gflib/text.o" - .include "gflib/sprite.o" - .include "gflib/string_util.o" + .include "src/window.o" + .include "src/text.o" + .include "src/sprite.o" + .include "src/string_util.o" .include "src/link.o" .include "src/AgbRfu_LinkManager.o" .include "src/link_rfu_3.o" diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index 36b6c7ed06..4eda54a3aa 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -26,7 +26,7 @@ #include "char_util.h" #include "utf8.h" #include "string_parser.h" -#include "../../gflib/characters.h" +#include "../../include/constants/characters.h" #include "io.h" AsmFile::AsmFile(std::string filename, bool isStdin, bool doEnum) : m_filename(filename) From 9cb353179ba77e9d1247e003d018d5f005df8861 Mon Sep 17 00:00:00 2001 From: Kurausukun Date: Wed, 18 Sep 2024 10:42:28 -0400 Subject: [PATCH 207/544] fix indentation --- sym_common.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sym_common.txt b/sym_common.txt index bffabfbdf3..335af85a30 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -4,14 +4,14 @@ .align 2 gWindowTileAutoAllocEnabled: .space 4 - @ ../src/window.o + @ ../src/window.o .align 4 gTransparentTileNumber: .space 1 .align 4 gWindowBgTilemapBuffers: .space 16 - @ ../src/text.o + @ ../src/text.o .align 4 gFonts: .space 4 @@ -24,7 +24,7 @@ gCurGlyph: .align 2 gTextFlags: .space 4 - @ ../src/sprite.o + @ ../src/sprite.o .align 2 gOamMatrixAllocBitmap: .space 4 From 27db57f854856ccb75cf6b661e78d45f1e4e17c5 Mon Sep 17 00:00:00 2001 From: RavePossum <145081120+ravepossum@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:57:13 -0400 Subject: [PATCH 208/544] fallback on default BW popup theme to reduce potential for error (#5392) --- src/map_name_popup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 5cc1f3cfd5..500d45e866 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -625,7 +625,7 @@ static void LoadMapNamePopUpWindowBg(void) switch (popUpThemeId) { // add additional gen 5-style pop-up themes as cases here - case MAPPOPUP_THEME_BW_DEFAULT: + default: // MAPPOPUP_THEME_BW_DEFAULT if (OW_POPUP_BW_COLOR == OW_POPUP_BW_COLOR_WHITE) LoadPalette(sMapPopUpTilesPalette_BW_White, BG_PLTT_ID(14), sizeof(sMapPopUpTilesPalette_BW_White)); else From 6ef36837e94edcde20a5ddf78ab0c89e77df106a Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 18 Sep 2024 16:58:49 +0200 Subject: [PATCH 209/544] Fixed corruption of the next turn used move caused by Scale Shot (#5397) --- data/battle_scripts_1.s | 40 +++-------------------------- include/battle_scripts.h | 1 + src/battle_script_commands.c | 10 +++----- test/battle/move_effect/multi_hit.c | 40 +++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 43 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0040c7e804..06b82f43b7 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3279,51 +3279,17 @@ BattleScript_RoarBlockedByDynamax: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_MultiHitLoop:: - jumpifhasnohp BS_ATTACKER, BattleScript_MultiHitEnd - jumpifhasnohp BS_TARGET, BattleScript_MultiHitPrintStrings - jumpifhalfword CMP_EQUAL, gChosenMove, MOVE_SLEEP_TALK, BattleScript_DoMultiHit - jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_MultiHitPrintStrings -BattleScript_DoMultiHit:: - movevaluescleanup - copyhword sMOVE_EFFECT, sMULTIHIT_EFFECT - critcalc - damagecalc - jumpifmovehadnoeffect BattleScript_MultiHitNoMoreHits - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - multihitresultmessage - flushtextbox - addbyte sMULTIHIT_STRING + 4, 1 - moveendto MOVEEND_NEXT_TARGET - jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_FOE_ENDURED, BattleScript_MultiHitPrintStrings - decrementmultihit BattleScript_MultiHitLoop - goto BattleScript_MultiHitPrintStrings -BattleScript_MultiHitNoMoreHits:: - pause B_WAIT_TIME_SHORT BattleScript_MultiHitPrintStrings:: resultmessage waitmessage B_WAIT_TIME_LONG - jumpifmovehadnoeffect BattleScript_MultiHitEnd copyarray gBattleTextBuff1, sMULTIHIT_STRING, 6 printstring STRINGID_HITXTIMES waitmessage B_WAIT_TIME_LONG return -BattleScript_MultiHitEnd:: - setadditionaleffects - tryfaintmon BS_TARGET - moveendcase MOVEEND_SYNCHRONIZE_TARGET - moveendfrom MOVEEND_STATUS_IMMUNITY_ABILITIES - end +BattleScript_ScaleShot:: + call BattleScript_MultiHitPrintStrings + goto BattleScript_DefDownSpeedUp BattleScript_EffectConversion:: attackcanceler diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 893ab42a5e..e98790764d 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -460,6 +460,7 @@ extern const u8 BattleScript_DefDownSpeedUp[]; extern const u8 BattleScript_AffectionBasedStatusHeal[]; extern const u8 BattleScript_AffectionBasedEndurance[]; extern const u8 BattleScript_SymbiosisActivates[]; +extern const u8 BattleScript_ScaleShot[]; extern const u8 BattleScript_MultiHitPrintStrings[]; extern const u8 BattleScript_RemoveFireType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 698b8db4b4..1e4b10e928 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6030,13 +6030,11 @@ static void Cmd_moveend(void) gBattleScripting.multihitString[4]++; if (gMultiHitCounter == 0) { - if (gMovesInfo[gCurrentMove].argument == MOVE_EFFECT_SCALE_SHOT && !NoAliveMonsForEitherParty()) - { - BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_DefDownSpeedUp; - } BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings; + if (gMovesInfo[gCurrentMove].argument == MOVE_EFFECT_SCALE_SHOT && !NoAliveMonsForEitherParty()) + gBattlescriptCurrInstr = BattleScript_ScaleShot; + else + gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings; effect = TRUE; } else diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index fca9da8150..052226d1c8 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -160,6 +160,46 @@ SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after final } } +SINGLE_BATTLE_TEST("Scale Shot is immune to Fairy types and will end the move correctly") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SCALE_SHOT].effect == EFFECT_MULTI_HIT); + ASSUME(gMovesInfo[MOVE_SCALE_SHOT].type == TYPE_DRAGON); + ASSUME(gSpeciesInfo[SPECIES_CLEFAIRY].types[0] == TYPE_FAIRY || gSpeciesInfo[SPECIES_CLEFAIRY].types[1] == TYPE_FAIRY); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CLEFAIRY) { HP(1); } + } WHEN { + TURN { MOVE(player, MOVE_SCALE_SHOT); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + MESSAGE("It doesn't affect Foe Clefairy…"); + } +} + +DOUBLE_BATTLE_TEST("Scale Shot does not corrupt the next turn move used") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SCALE_SHOT].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_SCALE_SHOT, target: opponentRight); SWITCH(playerLeft, 2); SEND_OUT(opponentRight, 2); } + TURN { MOVE(playerRight, MOVE_BULLDOZE); MOVE(playerLeft, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); MOVE(opponentLeft, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, playerRight); + HP_BAR(opponentRight); + MESSAGE("Hit 1 time(s)!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, playerRight); + HP_BAR(playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + } +} + SINGLE_BATTLE_TEST("Endure does not prevent multiple hits and stat changes occur at the end of the turn") { GIVEN { From ac2b41ae71de8539217d046f15b873101b818741 Mon Sep 17 00:00:00 2001 From: nescioquid <34481132+nescioquid@users.noreply.github.com> Date: Wed, 18 Sep 2024 17:03:36 -0400 Subject: [PATCH 210/544] Typo fixes and Growth move description change (#5398) * changes Growth's move description to account for Gen 5+ behavior * completes B_DIVE_BALL_MODIFIER comment * fixes typos and incongruent spacing in various files * Update src/data/moves_info.h Co-authored-by: Bassoonian --------- Co-authored-by: Bassoonian --- include/config/battle.h | 2 +- include/config/overworld.h | 4 ++-- migration_scripts/README.md | 2 +- src/data/moves_info.h | 5 +++++ src/party_menu.c | 2 +- src/pokemon.c | 2 +- 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 501c4162ee..402b5db6cf 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -165,7 +165,7 @@ #define B_RESTORE_HELD_BATTLE_ITEMS GEN_LATEST // In Gen9, all non-berry items are restored after battle. #define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Latis' 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. +#define B_DIVE_BALL_MODIFIER GEN_LATEST // In Gen4+, Dive Ball's effectiveness increases by x3.5 when Surfing or Fishing. #define B_NEST_BALL_MODIFIER GEN_LATEST // Nest Ball's formula varies depending on the Gen. See Cmd_handleballthrow. #define B_REPEAT_BALL_MODIFIER GEN_LATEST // In Gen7+, Repeat Ball's catch multiplier is x3.5 instead of x3. #define B_TIMER_BALL_MODIFIER GEN_LATEST // In Gen5+, Timer Ball's effectiveness increases by x0.3 per turn instead of x0.1 diff --git a/include/config/overworld.h b/include/config/overworld.h index 2e1e1d7b12..c792c76678 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -44,7 +44,7 @@ // 16x32, 32x32, 64x64 etc are fine #define OW_MON_WANDER_WALK TRUE // If true, OW pokemon with MOVEMENT_TYPE_WANDER will walk-in-place in between steps. // Follower Pokémon -#define OW_FOLLOWERS_ENABLED FALSE // Enables follower Pokémon, HGSS style. Requires OW_POKEMON_OBJECT_EVENTS. Note that additional scripting may be required for them to be fully supported! +#define OW_FOLLOWERS_ENABLED FALSE // Enables follower Pokémon, HGSS style. Requires OW_POKEMON_OBJECT_EVENTS. Note that additional scripting may be required for them to be fully supported! #define OW_FOLLOWERS_BOBBING TRUE // If true, follower pokemon will bob up and down during their idle & walking animations #define OW_FOLLOWERS_POKEBALLS TRUE // Followers will emerge from the pokeball they are stored in, instead of a normal pokeball @@ -79,7 +79,7 @@ // Map pop-up config #define OW_POPUP_GENERATION GEN_3 // Different generations display location names in overworld pop-ups differently. - // Only choies are currently GEN_3 and GEN_5, all others will default to Gen3 pop-ups. + // Only choices are currently GEN_3 and GEN_5, all others will default to Gen3 pop-ups. // Gen5 map pop-up config // Constants diff --git a/migration_scripts/README.md b/migration_scripts/README.md index 5ae26c1c0a..5ff925d8ef 100644 --- a/migration_scripts/README.md +++ b/migration_scripts/README.md @@ -11,7 +11,7 @@ These scripts exist to help developers make the transition between refactored sy All migration scripts require [`python3`](https://www.python.org/downloads/) to be installed. Migration scripts are executed by running the following commands from the root directory of a developer's project. ```bash -chmod +x migration_scripts/*.py ; #give permision to make the script executable +chmod +x migration_scripts/*.py ; #give permission to make the script executable python3 migration_scripts/*.py ; #run the migration script ``` diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 6e0230cf31..b6d0aaf3ca 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -1938,8 +1938,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = COMPOUND_STRING("Growth"), .description = COMPOUND_STRING( + #if B_GROWTH_STAT_RAISE >= GEN_5 + "Forces the body to grow,\n" + "raising Attack and Sp. Atk."), + #else "Forces the body to grow\n" "and heightens Sp. Atk."), + #endif .effect = B_GROWTH_STAT_RAISE >= GEN_5 ? EFFECT_GROWTH : EFFECT_SPECIAL_ATTACK_UP, .power = 0, .type = TYPE_NORMAL, diff --git a/src/party_menu.c b/src/party_menu.c index 5214ddc2be..32ccd6ca19 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4672,7 +4672,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (canHeal == TRUE) { if (hp == 0) - AnimatePartySlot(gPartyMenu.slotId, 1); + AnimatePartySlot(gPartyMenu.slotId, 1); PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage); ResetHPTaskData(taskId, 0, hp); return; diff --git a/src/pokemon.c b/src/pokemon.c index 66fb83332f..0583939a85 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -684,7 +684,7 @@ const struct NatureInfo gNaturesInfo[NUM_NATURES] = #elif P_LVL_UP_LEARNSETS >= GEN_8 #include "data/pokemon/level_up_learnsets/gen_8.h" // Sword/Shield #elif P_LVL_UP_LEARNSETS >= GEN_7 -#include "data/pokemon/level_up_learnsets/gen_7.h" // Ultra Sun/ Ultra Moon +#include "data/pokemon/level_up_learnsets/gen_7.h" // Ultra Sun/Ultra Moon #elif P_LVL_UP_LEARNSETS >= GEN_6 #include "data/pokemon/level_up_learnsets/gen_6.h" // Omega Ruby/Alpha Sapphire #elif P_LVL_UP_LEARNSETS >= GEN_5 From 76656e85c2f682f35d2504ee4a46c8c2f37dad0b Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Wed, 18 Sep 2024 23:10:29 +0100 Subject: [PATCH 211/544] Fix Quash implementation, adds After You and Quash missing configs + tests (#5400) * Fix Quash + After You and Quash configs * Add tests --- include/config/battle.h | 2 + src/battle_script_commands.c | 41 ++++++++----- test/battle/move_effect/after_you.c | 49 ++++++++++++++- test/battle/move_effect/quash.c | 92 ++++++++++++++++++++++++++++- 4 files changed, 163 insertions(+), 21 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 402b5db6cf..b00eb199a9 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -123,6 +123,8 @@ #define B_HEAL_BELL_SOUNDPROOF GEN_LATEST // In Gen5, Heal Bell affects all mons with Soundproof. In Gen6-8 it affects inactive mons, but not battlers. In Gen9 it always affects the user. #define B_CHARGE GEN_LATEST // In Gen8-, Charge status is lost regardless of the typing of the next move. #define B_POWDER_RAIN GEN_LATEST // In Gen7+, Powder doesn't damage the user of a Fire type move in heavy rain. +#define B_AFTER_YOU_TURN_ORDER GEN_LATEST // In Gen8+, After You doesn't fail if the turn order wouldn't change after use. +#define B_QUASH_TURN_ORDER GEN_LATEST // In Gen8+, Quash-affected battlers move according to speed order. Before Gen8, Quash-affected battlers move in the order they were affected by Quash. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1e4b10e928..ee2a148831 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8929,9 +8929,10 @@ static bool32 ChangeOrderTargetAfterAttacker(void) u8 data[MAX_BATTLERS_COUNT]; u8 actionsData[MAX_BATTLERS_COUNT]; - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) - || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) return FALSE; + if (GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) + return B_AFTER_YOU_TURN_ORDER >= GEN_8; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { @@ -8944,8 +8945,6 @@ static bool32 ChangeOrderTargetAfterAttacker(void) gActionsByTurnOrder[1] = actionsData[2]; gBattlerByTurnOrder[2] = data[1]; gActionsByTurnOrder[2] = actionsData[1]; - gBattlerByTurnOrder[3] = data[3]; - gActionsByTurnOrder[3] = actionsData[3]; } else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3) { @@ -17110,7 +17109,7 @@ void BS_TryActivateGulpMissile(void) void BS_TryQuash(void) { NATIVE_ARGS(const u8 *failInstr); - u32 i; + u32 i, j; // It's true if foe is faster, has a bigger priority, or switches if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) @@ -17121,19 +17120,29 @@ void BS_TryQuash(void) // If the above condition is not true, it means we are faster than the foe, so we can set the quash bit gProtectStructs[gBattlerTarget].quash = TRUE; - for (i = 0; i < gBattlersCount; i++) + + if (B_QUASH_TURN_ORDER < GEN_8) { - gBattlerByTurnOrder[i] = i; - } - for (i = 0; i < gBattlersCount - 1; i++) - { - s32 j; - for (j = i + 1; j < gBattlersCount; j++) + // Gen 7- config makes target go last so that the order of quash targets is kept for the correct turn order + j = GetBattlerTurnOrderNum(gBattlerTarget); + for (i = j + 1; i < gBattlersCount; i++) { - if (!gProtectStructs[i].quash - && !gProtectStructs[j].quash - && GetWhichBattlerFaster(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE) == -1) - SwapTurnOrder(i, j); + SwapTurnOrder(i, j); + j++; + } + } + else + { + // Gen 8+ config only alters Turn Order of battlers affected by Quash, dynamic speed should handle the rest + for (i = gCurrentTurnActionNumber + 1; i < gBattlersCount - 1; i++) + { + for (j = i + 1; j < gBattlersCount; j++) + { + u32 battler1 = gBattlerByTurnOrder[i], battler2 = gBattlerByTurnOrder[j]; + if ((gProtectStructs[battler1].quash || gProtectStructs[battler2].quash) + && GetWhichBattlerFaster(battler1, battler2, FALSE) == -1) + SwapTurnOrder(i, j); + } } } gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/test/battle/move_effect/after_you.c b/test/battle/move_effect/after_you.c index b788fab725..32ea44efb1 100644 --- a/test/battle/move_effect/after_you.c +++ b/test/battle/move_effect/after_you.c @@ -52,7 +52,7 @@ DOUBLE_BATTLE_TEST("After You does nothing if the target has already moved") } } -DOUBLE_BATTLE_TEST("After You calculates correct targets if only one pokemon is left on the opposing side") +DOUBLE_BATTLE_TEST("After You calculates correct turn order if only one pokemon is left on the opposing side") { GIVEN { PLAYER(SPECIES_GRENINJA) { Speed(120); } @@ -86,5 +86,48 @@ DOUBLE_BATTLE_TEST("After You calculates correct targets if only one pokemon is } } -TO_DO_BATTLE_TEST("After You doesn't fail if the turner remains the same after After You (Gen8+)"); -TO_DO_BATTLE_TEST("After You ignores the effects of Quash"); +DOUBLE_BATTLE_TEST("After You doesn't fail if the turn order remains the same after After You (Gen8+)") +{ + GIVEN { + ASSUME(B_AFTER_YOU_TURN_ORDER >= GEN_8); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + PLAYER(SPECIES_WYNAUT) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WYNAUT) { Speed(3); } + } WHEN { + TURN { + MOVE(playerLeft, MOVE_CELEBRATE); + MOVE(playerRight, MOVE_CELEBRATE); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_AFTER_YOU, target: opponentLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_AFTER_YOU, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + } +} + +DOUBLE_BATTLE_TEST("After You ignores the effects of Quash") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_QUASH].effect == EFFECT_QUASH); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + PLAYER(SPECIES_WYNAUT) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WYNAUT) { Speed(3); } + } WHEN { + TURN { + MOVE(playerLeft, MOVE_QUASH, target: opponentLeft); + MOVE(playerRight, MOVE_CELEBRATE); + MOVE(opponentLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_AFTER_YOU, target: opponentLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_AFTER_YOU, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + } +} diff --git a/test/battle/move_effect/quash.c b/test/battle/move_effect/quash.c index fd2bd9d877..5500fcb33e 100644 --- a/test/battle/move_effect/quash.c +++ b/test/battle/move_effect/quash.c @@ -32,14 +32,102 @@ DOUBLE_BATTLE_TEST("Quash is not affected by dynamic speed") PLAYER(SPECIES_WOBBUFFET) { Speed(30); } OPPONENT(SPECIES_TORCHIC) { Speed(50); } OPPONENT(SPECIES_TREECKO) { Speed(40); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_QUASH, target: opponentLeft); + MOVE(opponentRight, MOVE_TAILWIND); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + } +} + +DOUBLE_BATTLE_TEST("Quash calculates correct turn order if only one pokemon is left on the opposing side") +{ + GIVEN { + PLAYER(SPECIES_GRENINJA) { Speed(120); } + PLAYER(SPECIES_REGIROCK) { Speed(100); } + OPPONENT(SPECIES_PIDGEOT) { Speed(10); } + OPPONENT(SPECIES_DRAGONITE) { Speed(60); } + } WHEN { + TURN { + MOVE(playerLeft, MOVE_QUASH, target: playerRight); + MOVE(playerRight, MOVE_STONE_EDGE, target: opponentLeft); + MOVE(opponentRight, MOVE_CELEBRATE); + } + TURN { + MOVE(playerLeft, MOVE_QUASH, target: playerRight); + MOVE(playerRight, MOVE_STONE_EDGE, target: opponentRight); + MOVE(opponentRight, MOVE_CELEBRATE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_EDGE, playerRight); + HP_BAR(opponentLeft); + MESSAGE("Foe Pidgeot fainted!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_EDGE, playerRight); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Quash-affected targets move from fastest to slowest (Gen 8+) or from first affected battler to last (Gen 7-)") +{ + u32 speedLeft, speedRight; + + PARAMETRIZE { speedLeft = 60; speedRight = 50; } + PARAMETRIZE { speedLeft = 50; speedRight = 60; } + GIVEN { + PLAYER(SPECIES_VOLBEAT) { Speed(10); Ability(ABILITY_PRANKSTER); } + PLAYER(SPECIES_WOBBUFFET) { Speed(70); } + OPPONENT(SPECIES_TORCHIC) { Speed(speedLeft); } + OPPONENT(SPECIES_TREECKO) { Speed(speedRight); } } WHEN { TURN { MOVE(playerLeft, MOVE_QUASH, target: opponentRight); + MOVE(playerRight, MOVE_QUASH, target: opponentLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerRight); + if (B_QUASH_TURN_ORDER < GEN_8) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + } + else if (speedLeft > speedRight) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + } + else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + } + } +} + +DOUBLE_BATTLE_TEST("Quash-affected mon that acted early via After You is not affected by dynamic speed") +{ + GIVEN { + ASSUME(B_RECALC_TURN_AFTER_ACTIONS >= GEN_8); + ASSUME(gMovesInfo[MOVE_TAILWIND].effect == EFFECT_TAILWIND); + ASSUME(gMovesInfo[MOVE_AFTER_YOU].effect == EFFECT_AFTER_YOU); + PLAYER(SPECIES_VOLBEAT) { Speed(20); Ability(ABILITY_PRANKSTER); } + PLAYER(SPECIES_WOBBUFFET) { Speed(30); } + OPPONENT(SPECIES_TORCHIC) { Speed(10); } + OPPONENT(SPECIES_TREECKO) { Speed(40); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_QUASH, target: opponentLeft); + MOVE(opponentRight, MOVE_AFTER_YOU, target: opponentLeft); MOVE(opponentLeft, MOVE_TAILWIND); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_AFTER_YOU, opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentLeft); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); // this is the relevant part, testing if quash affected battler becomes last to move causing playerRight to not move } } From 71dfd3e7c03bb02f80b8071b4f3d191ee69406f8 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 19 Sep 2024 00:25:53 +0200 Subject: [PATCH 212/544] Ogerpon masks were missing their hold effects (#5391) * Ogerpon masks were missing their hold effects * fix wrong num * test * correct tests and additional fix * added hold effect to battle debug --- include/constants/hold_effects.h | 5 ++-- src/battle_debug.c | 2 ++ src/battle_util.c | 4 +++ src/data/items.h | 6 +++++ test/battle/hold_effect/ogerpon_mask.c | 36 ++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 test/battle/hold_effect/ogerpon_mask.c diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index 0f364d2462..a159102932 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -155,11 +155,12 @@ // Gen9 hold effects #define HOLD_EFFECT_ABILITY_SHIELD 175 #define HOLD_EFFECT_CLEAR_AMULET 176 -#define HOLD_EFFECT_MIRROR_HERB 177 // Not implemented. +#define HOLD_EFFECT_MIRROR_HERB 177 #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_BOOSTER_ENERGY 181 +#define HOLD_EFFECT_OGERPON_MASK 182 // Gen2 hold effect #define HOLD_EFFECT_BERSERK_GENE 184 diff --git a/src/battle_debug.c b/src/battle_debug.c index b088aa73ba..c3b4ac85aa 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -2435,6 +2435,7 @@ static const u8 sText_HoldEffectCovertCloak[] = _("Covert Cloak"); static const u8 sText_HoldEffectLoadedDice[] = _("Loaded Dice"); static const u8 sText_HoldEffectBoosterEnergy[] = _("Booster Energy"); static const u8 sText_HoldEffectBerserkGene[] = _("Berserk Gene"); +static const u8 sText_HoldEffectOgerponMask[] = _("Ogerpon Mask"); static const u8 *const sHoldEffectNames[] = { [HOLD_EFFECT_NONE] = sText_HoldEffectNone, @@ -2585,6 +2586,7 @@ static const u8 *const sHoldEffectNames[] = [HOLD_EFFECT_LOADED_DICE] = sText_HoldEffectLoadedDice, [HOLD_EFFECT_BOOSTER_ENERGY] = sText_HoldEffectBoosterEnergy, [HOLD_EFFECT_BERSERK_GENE] = sText_HoldEffectBerserkGene, + [HOLD_EFFECT_OGERPON_MASK] = sText_HoldEffectOgerponMask, }; static const u8 *GetHoldEffectName(u16 holdEffect) { diff --git a/src/battle_util.c b/src/battle_util.c index a3711f161c..612965fff2 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9454,6 +9454,10 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 if (gMovesInfo[move].punchingMove) modifier = uq4_12_multiply(modifier, UQ_4_12(1.1)); break; + case HOLD_EFFECT_OGERPON_MASK: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_OGERPON) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.2)); + break; } // Terastallization boosts weak, non-priority, non-multi hit moves after modifiers to 60 BP. diff --git a/src/data/items.h b/src/data/items.h index f97c4670c1..adfb1914a2 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -13659,6 +13659,8 @@ const struct Item gItemsInfo[] = { .name = HANDLE_EXPANDED_ITEM_NAME("CornrstneMask", "Cornerstone Mask"), .price = 0, + .holdEffect = HOLD_EFFECT_OGERPON_MASK, + .holdEffectParam = 20, .description = COMPOUND_STRING( "Allows Ogerpon to\n" "wield the Rock-\n" @@ -13674,6 +13676,8 @@ const struct Item gItemsInfo[] = { .name = HANDLE_EXPANDED_ITEM_NAME("WellsprngMask", "Wellspring Mask"), .price = 0, + .holdEffect = HOLD_EFFECT_OGERPON_MASK, + .holdEffectParam = 20, .description = COMPOUND_STRING( "Allows Ogerpon to\n" "wield the Water-\n" @@ -13689,6 +13693,8 @@ const struct Item gItemsInfo[] = { .name = HANDLE_EXPANDED_ITEM_NAME("HrthflameMask", "Hearthflame Mask"), .price = 0, + .holdEffect = HOLD_EFFECT_OGERPON_MASK, + .holdEffectParam = 20, .description = COMPOUND_STRING( "Allows Ogerpon to\n" "wield the Fire-\n" diff --git a/test/battle/hold_effect/ogerpon_mask.c b/test/battle/hold_effect/ogerpon_mask.c new file mode 100644 index 0000000000..31fb0511f4 --- /dev/null +++ b/test/battle/hold_effect/ogerpon_mask.c @@ -0,0 +1,36 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_CORNERSTONE_MASK].holdEffect == HOLD_EFFECT_OGERPON_MASK); + ASSUME(gItemsInfo[ITEM_WELLSPRING_MASK].holdEffect == HOLD_EFFECT_OGERPON_MASK); + ASSUME(gItemsInfo[ITEM_HEARTHFLAME_MASK].holdEffect == HOLD_EFFECT_OGERPON_MASK); + ASSUME(gItemsInfo[ITEM_CORNERSTONE_MASK].holdEffectParam == 20); + ASSUME(gItemsInfo[ITEM_WELLSPRING_MASK].holdEffectParam == 20); + ASSUME(gItemsInfo[ITEM_HEARTHFLAME_MASK].holdEffectParam == 20); +} + +SINGLE_BATTLE_TEST("Ogerpon Masks increase the base power of moves by 20%", s16 damage) +{ + u32 species; + u32 item; + PARAMETRIZE { species = SPECIES_OGERPON_TEAL_MASK; item = ITEM_NONE; } + PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_MASK; item = ITEM_CORNERSTONE_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_MASK; item = ITEM_WELLSPRING_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_MASK; item = ITEM_HEARTHFLAME_MASK; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); + PLAYER(species) { Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.2), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.2), results[2].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.2), results[3].damage); + } +} From 5cb1be7e5cff8a9a7afb349ce6b92175350759cf Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 19 Sep 2024 10:58:56 +0200 Subject: [PATCH 213/544] Minor Gem check optimazation (#5401) Since the variable is only used once I removed it and replaced it with a direct call. Also the if statement is short enough to fit into one line. very ocd induced change but I couldn't look away. --- src/battle_main.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index a4c55ce9b5..78e44956a4 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -6010,9 +6010,7 @@ void SetTypeBeforeUsingMove(u32 move, u32 battler) gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; // Check if a gem should activate. - moveType = GetMoveType(move); - if (holdEffect == HOLD_EFFECT_GEMS - && moveType == ItemId_GetSecondaryId(heldItem)) + if (holdEffect == HOLD_EFFECT_GEMS && GetMoveType(move) == ItemId_GetSecondaryId(heldItem)) { gSpecialStatuses[battler].gemParam = GetBattlerHoldEffectParam(battler); gSpecialStatuses[battler].gemBoost = TRUE; From 68c51f84121f12dc87737ad3283a3e5a974f4093 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 19 Sep 2024 12:00:32 +0200 Subject: [PATCH 214/544] Fixes Spiky Shield Counter interaction (#5402) * Fixes Spiky Shield Counter interaction * Update test/battle/move_effect/protect.c --------- Co-authored-by: Bassoonian --- src/battle_script_commands.c | 4 +++- test/battle/move_effect/protect.c | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ee2a148831..0048cf14e4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5448,7 +5448,9 @@ static void Cmd_moveend(void) case MOVEEND_PROTECT_LIKE_EFFECT: if (gProtectStructs[gBattlerAttacker].touchedProtectLike) { - if (gProtectStructs[gBattlerTarget].spikyShielded && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) + if (gProtectStructs[gBattlerTarget].spikyShielded + && gMovesInfo[gCurrentMove].effect != EFFECT_COUNTER + && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index aca5ef859d..60b55ebb75 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -547,3 +547,22 @@ DOUBLE_BATTLE_TEST("Crafty Shield does not protect against moves that target all MESSAGE("Foe Sunflora's Defense rose!"); } } + +SINGLE_BATTLE_TEST("Spiky Shield does not damage users on Counter or Mirror Coat") +{ + u32 move; + PARAMETRIZE { move = MOVE_MIRROR_COAT; } + PARAMETRIZE { move = MOVE_COUNTER; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SPIKY_SHIELD); MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, player); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + HP_BAR(opponent); + } + } +} From fee26e29f5f1b513ea887a0de390ad5c3dad6fe2 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Thu, 19 Sep 2024 03:01:12 -0700 Subject: [PATCH 215/544] Add AUTO_SCROLL_TEXT and NUM_FRAMES_AUTO_SCROLL_DELAY (#5054) * Added AUTO_SCROLL_TEXT * Moved NUM_FRAMES_AUTO_SCROLL_DELAY * Moved NUM_FRAMES_AUTO_SCROLL_DELAY per https://github.com/rh-hideout/pokeemerald-expansion/pull/5054/files#r1698268265 * Apply suggestions from https://github.com/rh-hideout/pokeemerald-expansion/pull/5054/files#r1698268524 Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Added ability to skip text with button press per https://github.com/rh-hideout/pokeemerald-expansion/pull/5054\#issuecomment-2267100771 * Update gflib/text.h per https://github.com/rh-hideout/pokeemerald-expansion/pull/5054#issuecomment-2274402891 * Update text.h * Fixed alignment per https://github.com/rh-hideout/pokeemerald-expansion/pull/5054/files\#r1711780606 * Moved NUM_FRAMES_AUTO_SCROLL_DELAY * Update gflib/text.c Co-authored-by: Bassoonian --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> Co-authored-by: Bassoonian --- gflib/text.c | 34 +++++++++++++++++++++------------- include/config/general.h | 3 +++ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 59c6e3f4e8..e2adba1cdb 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -932,8 +932,9 @@ bool32 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->autoScrollDelay == 49) + if (subStruct->autoScrollDelay == NUM_FRAMES_AUTO_SCROLL_DELAY) { + subStruct->autoScrollDelay = 0; return TRUE; } else @@ -943,21 +944,29 @@ bool32 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) } } +void SetResultWithButtonPress(bool32 *result) +{ + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + *result = TRUE; + PlaySE(SE_SELECT); + } +} + bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) { bool32 result = FALSE; - if (gTextFlags.autoScroll != 0) + if (gTextFlags.autoScroll != 0 || AUTO_SCROLL_TEXT) { result = TextPrinterWaitAutoMode(textPrinter); + + if (AUTO_SCROLL_TEXT) + SetResultWithButtonPress(&result); } else { TextPrinterDrawDownArrow(textPrinter); - if (JOY_NEW(A_BUTTON | B_BUTTON)) - { - result = TRUE; - PlaySE(SE_SELECT); - } + SetResultWithButtonPress(&result); } return result; } @@ -965,17 +974,16 @@ bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) bool32 TextPrinterWait(struct TextPrinter *textPrinter) { bool32 result = FALSE; - if (gTextFlags.autoScroll != 0) + if (gTextFlags.autoScroll != 0 || AUTO_SCROLL_TEXT) { result = TextPrinterWaitAutoMode(textPrinter); + + if (AUTO_SCROLL_TEXT) + SetResultWithButtonPress(&result); } else { - if (JOY_NEW(A_BUTTON | B_BUTTON)) - { - result = TRUE; - PlaySE(SE_SELECT); - } + SetResultWithButtonPress(&result); } return result; } diff --git a/include/config/general.h b/include/config/general.h index dc39f4919a..ac338a1f50 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -72,6 +72,9 @@ #define SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen. #define HQ_RANDOM TRUE // If TRUE, replaces the default RNG with an implementation of SFC32 RNG. May break code that relies on RNG. #define COMPETITIVE_PARTY_SYNTAX TRUE // If TRUE, parties are defined in "competitive syntax". +#define AUTO_SCROLL_TEXT FALSE // If TRUE, text will automatically scroll to the next line after NUM_FRAMES_AUTO_SCROLL_DELAY. Players can still press A_BUTTON or B_BUTTON to scroll on their own. +#define NUM_FRAMES_AUTO_SCROLL_DELAY 49 + // Measurement system constants to be used for UNITS #define UNITS_IMPERIAL 0 // Inches, feet, pounds From f0bd3c57daa2a32eca39e01b8f10c92d85d8e4bf Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 19 Sep 2024 05:45:11 -0700 Subject: [PATCH 216/544] Fixed spacing per https://github.com/rh-hideout/pokeemerald-expansion/pull/5044\#pullrequestreview-2315029773 --- src/field_control_avatar.c | 8 ++++---- src/field_message_box.c | 2 +- src/scrcmd.c | 2 +- src/script.c | 1 - 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index bad5974f16..cc1f95753c 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -161,7 +161,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) gSpecialVar_LastTalked = 0; gSelectedObjectEvent = 0; - gMsgIsSignPost = FALSE; + gMsgIsSignPost = FALSE; playerDirection = GetPlayerFacingDirection(); GetPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); @@ -1122,7 +1122,7 @@ static void SetMsgSignPostAndVarFacing(u32 playerDirection) { gWalkAwayFromSignpostTimer = WALK_AWAY_SIGNPOST_FRAMES; gMsgBoxIsCancelable = TRUE; - gMsgIsSignPost = TRUE; + gMsgIsSignPost = TRUE; gSpecialVar_Facing = playerDirection; } @@ -1168,8 +1168,8 @@ void CancelSignPostMessageBox(struct FieldInput *input) return; } - if (!gMsgBoxIsCancelable) - return; + if (!gMsgBoxIsCancelable) + return; if (IsDpadPushedToTurnOrMovePlayer(input)) { diff --git a/src/field_message_box.c b/src/field_message_box.c index 569f067caa..47c728f74d 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -32,7 +32,7 @@ static void Task_DrawFieldMessage(u8 taskId) switch (task->tState) { case 0: - if (gMsgIsSignPost) + if (gMsgIsSignPost) LoadSignPostWindowFrameGfx(); else LoadMessageBoxAndBorderGfx(); diff --git a/src/scrcmd.c b/src/scrcmd.c index dbe5fa5ee6..86be73404c 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1310,7 +1310,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); - gMsgBoxIsCancelable = FALSE; + gMsgBoxIsCancelable = FALSE; return FALSE; } diff --git a/src/script.c b/src/script.c index 7b1af3d542..e6e2aa264d 100644 --- a/src/script.c +++ b/src/script.c @@ -504,4 +504,3 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize) InitRamScript(script, scriptSize, MAP_GROUP(UNDEFINED), MAP_NUM(UNDEFINED), NO_OBJECT); #endif //FREE_MYSTERY_EVENT_BUFFERS } - From 64d4d7e570c85c00f653132c3ac27ffae126040a Mon Sep 17 00:00:00 2001 From: Rose Silicon Date: Thu, 19 Sep 2024 12:03:13 -0400 Subject: [PATCH 217/544] Simplify HP Logic (#5403) --- src/pokemon.c | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index d76d1df58c..faa1a65aef 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1800,29 +1800,19 @@ void CalculateMonStats(struct Pokemon *mon) CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, STAT_SPATK, MON_DATA_SPATK) CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, STAT_SPDEF, MON_DATA_SPDEF) - if (species == SPECIES_SHEDINJA) - { - if (currentHP != 0 || oldMaxHP == 0) - currentHP = 1; - else - return; - } - else - { - if (currentHP == 0 && oldMaxHP == 0) - currentHP = newMaxHP; - else if (currentHP != 0) - { - if (newMaxHP > oldMaxHP) - currentHP += newMaxHP - oldMaxHP; - if (currentHP <= 0) - currentHP = 1; - if (currentHP > newMaxHP) - currentHP = newMaxHP; - } - else - return; - } + // Since a pokemon's maxHP data could either not have + // been initialized at this point or this pokemon is + // just fainted, the check for oldMaxHP is important. + if (currentHP == 0 && oldMaxHP != 0) + return; + + // Only add to currentHP if newMaxHP went up. + if (newMaxHP > oldMaxHP) + currentHP += newMaxHP - oldMaxHP; + + // Ensure currentHP does not surpass newMaxHP. + if (currentHP > newMaxHP) + currentHP = newMaxHP; SetMonData(mon, MON_DATA_HP, ¤tHP); } From 4cd23a377db84f20d5520dc32e4115da1a202a89 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:19:45 -0400 Subject: [PATCH 218/544] anger shell use saveattacker (#5409) * anger shell use saveattacker * tabs instead of spaces * add BattleScript_RestoreAttackerButItFailed for anger shell failure * Update data/battle_scripts_1.s Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --------- Co-authored-by: ghoulslash Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- data/battle_scripts_1.s | 8 +++++++- src/battle_util.c | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 9af9d7fd27..a7295d9b53 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -4724,6 +4724,9 @@ BattleScript_ButItFailed:: resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_RestoreAttackerButItFailed: + restoreattacker + goto BattleScript_ButItFailed BattleScript_NotAffected:: pause B_WAIT_TIME_SHORT @@ -6460,12 +6463,14 @@ BattleScript_SeedSowerActivates:: return BattleScript_AngerShellActivates:: + saveattacker + copybyte gBattlerAttacker, gBattlerTarget call BattleScript_AbilityPopUp jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AngerShellTryDef jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_RestoreAttackerButItFailed BattleScript_AngerShellTryDef:: setbyte sSTAT_ANIM_PLAYED, FALSE modifybattlerstatstage BS_ATTACKER, STAT_DEF, DECREASE, 1, BattleScript_AngerShellTrySpDef, ANIM_ON @@ -6479,6 +6484,7 @@ BattleScript_AngerShellTrySpAtk: BattleScript_AngerShellTrySpeed: modifybattlerstatstage BS_ATTACKER, STAT_SPEED, INCREASE, 1, BattleScript_AngerShellRet, ANIM_ON BattleScript_AngerShellRet: + restoreattacker return BattleScript_WindPowerActivates:: diff --git a/src/battle_util.c b/src/battle_util.c index 035a2c981c..83af21cdcf 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5936,7 +5936,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && HadMoreThanHalfHpNowDoesnt(gBattlerTarget) && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove))) { - gBattlerAttacker = gBattlerTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AngerShellActivates; effect++; From f7d2e62cccd9e5b27829a31f280aa9b096d34d66 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 21 Sep 2024 11:51:08 -0500 Subject: [PATCH 219/544] Fix Switcheroo giving score even if the opponent has no held item (#5412) --- src/battle_ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 869f5dded3..1483c875ba 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -4065,7 +4065,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); // Force 'em out next turn break; default: - if (move != MOVE_BESTOW && aiData->items[battlerAtk] == ITEM_NONE) + if (move != MOVE_BESTOW && aiData->items[battlerAtk] == ITEM_NONE && aiData->items[battlerDef] != ITEM_NONE) { switch (aiData->holdEffects[battlerDef]) { From 39a8a77d3d74294b52ca5c81333132398126a952 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 21 Sep 2024 13:28:20 -0500 Subject: [PATCH 220/544] Play point animation when sending a follower into battle (#5406) * Add point animation when sending a follower into battle * Update trainers.h --- src/battle_controllers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 929aa2a59d..37e89d8acb 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -2903,7 +2903,7 @@ void BtlController_HandleIntroTrainerBallThrow(u32 battler, u16 tagTrainerPal, c if (side == B_SIDE_PLAYER) { StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[battler]], SpriteCB_FreePlayerSpriteLoadMonSprite); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 1); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], ShouldDoSlideInAnim() ? 2 : 1); paletteNum = AllocSpritePalette(tagTrainerPal); LoadCompressedPalette(trainerPal, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); From d1bb7770d30e8a97b6dca8418a27d89b9715debb Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Sat, 21 Sep 2024 14:44:25 -0400 Subject: [PATCH 221/544] Converted berry and PokeBlock strings to COMPOUND_STRINGs (#5324) * Converted bag pocket names to COMPOUND_STRINGs * Converted berry-related text to COMPOUND_STRINGs * Converted PokeBlock-related text to COMPOUND_STRINGs * Added indexes to BerryFirmnessStrings * Updated call to sBerryFirmnessStrings * Changed gText to sText --- include/strings.h | 44 --------------------------------- src/berry_tag_screen.c | 34 +++++++++++++++---------- src/pokeblock.c | 51 +++++++++++++++++++++----------------- src/pokeblock_feed.c | 10 +++++--- src/strings.c | 56 ++++-------------------------------------- 5 files changed, 61 insertions(+), 134 deletions(-) diff --git a/include/strings.h b/include/strings.h index 041f43d05b..8a035eb251 100644 --- a/include/strings.h +++ b/include/strings.h @@ -62,15 +62,6 @@ extern const u8 gText_MultiLink[]; extern const u8 gText_Single[]; extern const u8 gText_Double[]; -extern const u8 gText_Spicy[]; -extern const u8 gText_Dry[]; -extern const u8 gText_Sweet[]; -extern const u8 gText_Bitter[]; -extern const u8 gText_Sour[]; - -extern const u8 gText_StowCase[]; -extern const u8 gText_LvVar1[]; - extern const u8 gText_Spicy2[]; extern const u8 gText_Dry2[]; extern const u8 gText_Sweet2[]; @@ -117,9 +108,6 @@ extern const u8 gText_NoDecorationsInUse[]; extern const u8 gText_Exit[]; extern const u8 gText_Cancel[]; -extern const u8 gText_ThrowAwayVar1[]; -extern const u8 gText_Var1ThrownAway[]; - extern const u8 gText_Color161Shadow161[]; extern const u8 gText_GoBackPrevMenu[]; extern const u8 gText_CantPlaceInRoom[]; @@ -184,25 +172,6 @@ extern const u8 gText_Coins[]; extern const u8 gText_Silver[]; extern const u8 gText_Gold[]; -extern const u8 gText_Var1AteTheVar2[]; -extern const u8 gText_Var1HappilyAteVar2[]; -extern const u8 gText_Var1DisdainfullyAteVar2[]; - -extern const u8 gText_RedPokeblock[]; -extern const u8 gText_BluePokeblock[]; -extern const u8 gText_PinkPokeblock[]; -extern const u8 gText_GreenPokeblock[]; -extern const u8 gText_YellowPokeblock[]; -extern const u8 gText_PurplePokeblock[]; -extern const u8 gText_IndigoPokeblock[]; -extern const u8 gText_BrownPokeblock[]; -extern const u8 gText_LiteBluePokeblock[]; -extern const u8 gText_OlivePokeblock[]; -extern const u8 gText_GrayPokeblock[]; -extern const u8 gText_BlackPokeblock[]; -extern const u8 gText_WhitePokeblock[]; -extern const u8 gText_GoldPokeblock[]; - extern const u8 gMenuText_Use[]; extern const u8 gMenuText_Toss[]; extern const u8 gMenuText_Give[]; @@ -334,19 +303,6 @@ extern const u8 gText_LoadingEvent[]; extern const u8 gText_DontRemoveCableTurnOff[]; extern const u8 gText_LinkStandby2[]; -// berry tag screen text -extern const u8 gBerryFirmnessString_VerySoft[]; -extern const u8 gBerryFirmnessString_Soft[]; -extern const u8 gBerryFirmnessString_Hard[]; -extern const u8 gBerryFirmnessString_VeryHard[]; -extern const u8 gBerryFirmnessString_SuperHard[]; -extern const u8 gText_BerryTag[]; -extern const u8 gText_NumberVar1Var2[]; -extern const u8 gText_SizeSlash[]; -extern const u8 gText_Var1DotVar2[]; -extern const u8 gText_ThreeMarks[]; -extern const u8 gText_FirmSlash[]; - // item menu screen text extern const u8 gText_CloseBag[]; extern const u8 gText_NumberItem_HM[]; diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index c6eb731845..fcd322ce33 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -143,11 +143,12 @@ static const struct WindowTemplate sWindowTemplates[] = static const u8 *const sBerryFirmnessStrings[] = { - gBerryFirmnessString_VerySoft, - gBerryFirmnessString_Soft, - gBerryFirmnessString_Hard, - gBerryFirmnessString_VeryHard, - gBerryFirmnessString_SuperHard + [BERRY_FIRMNESS_UNKNOWN] = COMPOUND_STRING("???"), + [BERRY_FIRMNESS_VERY_SOFT] = COMPOUND_STRING("Very soft"), + [BERRY_FIRMNESS_SOFT] = COMPOUND_STRING("Soft"), + [BERRY_FIRMNESS_HARD] = COMPOUND_STRING("Hard"), + [BERRY_FIRMNESS_VERY_HARD] = COMPOUND_STRING("Very hard"), + [BERRY_FIRMNESS_SUPER_HARD] = COMPOUND_STRING("Super hard") }; // this file's functions @@ -172,6 +173,13 @@ static void Task_DisplayAnotherBerry(u8 taskId); static void TryChangeDisplayedBerry(u8 taskId, s8 toMove); static void HandleBagCursorPositionChange(s8 toMove); +static const u8 sText_SizeSlash[] = _("SIZE /"); +static const u8 sText_FirmSlash[] = _("FIRM /"); +static const u8 sText_Var1DotVar2[] = _("{STR_VAR_1}.{STR_VAR_2}”"); +static const u8 sText_NumberVar1Var2[] = _("{NO}{STR_VAR_1} {STR_VAR_2}"); +static const u8 sText_BerryTag[] = _("BERRY TAG"); +static const u8 sText_ThreeMarks[] = _("???"); + // code void DoBerryTagScreen(void) { @@ -386,7 +394,7 @@ static void AddBerryTagTextToBg0(void) { memcpy(GetBgTilemapBuffer(0), sBerryTag->tilemapBuffers[2], sizeof(sBerryTag->tilemapBuffers[2])); FillWindowPixelBuffer(WIN_BERRY_TAG, PIXEL_FILL(15)); - PrintTextInBerryTagScreen(WIN_BERRY_TAG, gText_BerryTag, GetStringCenterAlignXOffset(FONT_NORMAL, gText_BerryTag, 0x40), 1, 0, 1); + PrintTextInBerryTagScreen(WIN_BERRY_TAG, sText_BerryTag, GetStringCenterAlignXOffset(FONT_NORMAL, sText_BerryTag, 0x40), 1, 0, 1); PutWindowTilemap(WIN_BERRY_TAG); ScheduleBgCopyTilemapToVram(0); } @@ -405,14 +413,14 @@ static void PrintBerryNumberAndName(void) const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopy(gStringVar2, berry->name); - StringExpandPlaceholders(gStringVar4, gText_NumberVar1Var2); + StringExpandPlaceholders(gStringVar4, sText_NumberVar1Var2); PrintTextInBerryTagScreen(WIN_BERRY_NAME, gStringVar4, 0, 1, 0, 0); } static void PrintBerrySize(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL); if (berry->size != 0) { u32 inches, fraction; @@ -425,23 +433,23 @@ static void PrintBerrySize(void) ConvertIntToDecimalStringN(gStringVar1, inches, STR_CONV_MODE_LEFT_ALIGN, 2); ConvertIntToDecimalStringN(gStringVar2, fraction, STR_CONV_MODE_LEFT_ALIGN, 2); - StringExpandPlaceholders(gStringVar4, gText_Var1DotVar2); + StringExpandPlaceholders(gStringVar4, sText_Var1DotVar2); AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gStringVar4, 0x28, 1, 0, NULL); } else { - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_ThreeMarks, 0x28, 1, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_ThreeMarks, 0x28, 1, 0, NULL); } } static void PrintBerryFirmness(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_FirmSlash, 0, 0x11, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_FirmSlash, 0, 0x11, TEXT_SKIP_DRAW, NULL); if (berry->firmness != 0) - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berry->firmness - 1], 0x28, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berry->firmness], 0x28, 0x11, 0, NULL); else - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_ThreeMarks, 0x28, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_ThreeMarks, 0x28, 0x11, 0, NULL); } static void PrintBerryDescription1(void) diff --git a/src/pokeblock.c b/src/pokeblock.c index e01e821f7e..b68fe16ce3 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -130,6 +130,11 @@ static void ReturnToPokeblockCaseOnField(void); static void CreateTossPokeblockYesNoMenu(u8); static void TossPokeblock(u8); +static const u8 sText_StowCase[] = _("Stow CASE."); +static const u8 sText_LvVar1[] = _("{LV}{STR_VAR_1}"); +static const u8 sText_ThrowAwayVar1[] = _("Throw away this\n{STR_VAR_1}?"); +static const u8 sText_Var1ThrownAway[] = _("The {STR_VAR_1}\nwas thrown away."); + EWRAM_DATA static struct PokeblockSavedData sSavedPokeblockData = {0}; EWRAM_DATA static struct PokeblockMenuStruct *sPokeblockMenu = NULL; @@ -197,20 +202,20 @@ static const struct BgTemplate sBgTemplatesForPokeblockMenu[] = const u8 *const gPokeblockNames[] = { [PBLOCK_CLR_NONE] = NULL, - [PBLOCK_CLR_RED] = gText_RedPokeblock, - [PBLOCK_CLR_BLUE] = gText_BluePokeblock, - [PBLOCK_CLR_PINK] = gText_PinkPokeblock, - [PBLOCK_CLR_GREEN] = gText_GreenPokeblock, - [PBLOCK_CLR_YELLOW] = gText_YellowPokeblock, - [PBLOCK_CLR_PURPLE] = gText_PurplePokeblock, - [PBLOCK_CLR_INDIGO] = gText_IndigoPokeblock, - [PBLOCK_CLR_BROWN] = gText_BrownPokeblock, - [PBLOCK_CLR_LITE_BLUE] = gText_LiteBluePokeblock, - [PBLOCK_CLR_OLIVE] = gText_OlivePokeblock, - [PBLOCK_CLR_GRAY] = gText_GrayPokeblock, - [PBLOCK_CLR_BLACK] = gText_BlackPokeblock, - [PBLOCK_CLR_WHITE] = gText_WhitePokeblock, - [PBLOCK_CLR_GOLD] = gText_GoldPokeblock + [PBLOCK_CLR_RED] = COMPOUND_STRING("RED {POKEBLOCK}"), + [PBLOCK_CLR_BLUE] = COMPOUND_STRING("BLUE {POKEBLOCK}"), + [PBLOCK_CLR_PINK] = COMPOUND_STRING("PINK {POKEBLOCK}"), + [PBLOCK_CLR_GREEN] = COMPOUND_STRING("GREEN {POKEBLOCK}"), + [PBLOCK_CLR_YELLOW] = COMPOUND_STRING("YELLOW {POKEBLOCK}"), + [PBLOCK_CLR_PURPLE] = COMPOUND_STRING("PURPLE {POKEBLOCK}"), + [PBLOCK_CLR_INDIGO] = COMPOUND_STRING("INDIGO {POKEBLOCK}"), + [PBLOCK_CLR_BROWN] = COMPOUND_STRING("BROWN {POKEBLOCK}"), + [PBLOCK_CLR_LITE_BLUE] = COMPOUND_STRING("LITEBLUE {POKEBLOCK}"), + [PBLOCK_CLR_OLIVE] = COMPOUND_STRING("OLIVE {POKEBLOCK}"), + [PBLOCK_CLR_GRAY] = COMPOUND_STRING("GRAY {POKEBLOCK}"), + [PBLOCK_CLR_BLACK] = COMPOUND_STRING("BLACK {POKEBLOCK}"), + [PBLOCK_CLR_WHITE] = COMPOUND_STRING("WHITE {POKEBLOCK}"), + [PBLOCK_CLR_GOLD] = COMPOUND_STRING("GOLD {POKEBLOCK}") }; static const struct MenuAction sPokeblockMenuActions[] = @@ -702,11 +707,11 @@ static void DrawPokeblockMenuTitleText(void) const u8 *itemName = ItemId_GetName(ITEM_POKEBLOCK_CASE); PrintOnPokeblockWindow(WIN_TITLE, itemName, GetStringCenterAlignXOffset(FONT_NORMAL, itemName, 0x48)); - PrintOnPokeblockWindow(WIN_SPICY, gText_Spicy, 0); - PrintOnPokeblockWindow(WIN_DRY, gText_Dry, 0); - PrintOnPokeblockWindow(WIN_SWEET, gText_Sweet, 0); - PrintOnPokeblockWindow(WIN_BITTER, gText_Bitter, 0); - PrintOnPokeblockWindow(WIN_SOUR, gText_Sour, 0); + PrintOnPokeblockWindow(WIN_SPICY, COMPOUND_STRING("SPICY"), 0); + PrintOnPokeblockWindow(WIN_DRY, COMPOUND_STRING("DRY"), 0); + PrintOnPokeblockWindow(WIN_SWEET, COMPOUND_STRING("SWEET"), 0); + PrintOnPokeblockWindow(WIN_BITTER, COMPOUND_STRING("BITTER"), 0); + PrintOnPokeblockWindow(WIN_SOUR, COMPOUND_STRING("SOUR"), 0); for (i = 0; i < WIN_ACTIONS_TALL; i++) PutWindowTilemap(i); @@ -723,7 +728,7 @@ static void UpdatePokeblockList(void) sPokeblockMenu->items[i].id = i; } - StringCopy(sPokeblockMenu->menuItemsStrings[i], gText_StowCase); + StringCopy(sPokeblockMenu->menuItemsStrings[i], sText_StowCase); sPokeblockMenu->items[i].name = sPokeblockMenu->menuItemsStrings[i]; sPokeblockMenu->items[i].id = LIST_CANCEL; @@ -744,7 +749,7 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId) *(txtPtr++) = CHAR_BLOCK_1; ConvertIntToDecimalStringN(gStringVar1, GetHighestPokeblocksFlavorLevel(pkblock), STR_CONV_MODE_LEFT_ALIGN, 3); - StringExpandPlaceholders(txtPtr, gText_LvVar1); + StringExpandPlaceholders(txtPtr, sText_LvVar1); } static void MovePokeblockMenuCursor(s32 pkblId, bool8 onInit, struct ListMenu *list) @@ -1203,7 +1208,7 @@ static void PokeblockAction_Toss(u8 taskId) ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1Ptr->pokeblocks[gSpecialVar_ItemId].color]); - StringExpandPlaceholders(gStringVar4, gText_ThrowAwayVar1); + StringExpandPlaceholders(gStringVar4, sText_ThrowAwayVar1); DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, FONT_NORMAL, GetPlayerTextSpeedDelay(), gStringVar4, CreateTossPokeblockYesNoMenu); } @@ -1214,7 +1219,7 @@ static void CreateTossPokeblockYesNoMenu(u8 taskId) static void TossedPokeblockMessage(u8 taskId) { - StringExpandPlaceholders(gStringVar4, gText_Var1ThrownAway); + StringExpandPlaceholders(gStringVar4, sText_Var1ThrownAway); DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, FONT_NORMAL, GetPlayerTextSpeedDelay(), gStringVar4, TossPokeblock); } diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index f31896a4cb..f79f35a781 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -96,6 +96,10 @@ static u8 CreatePokeblockCaseSpriteForFeeding(void); static u8 CreateMonSprite(struct Pokemon *); static void SpriteCB_ThrownPokeblock(struct Sprite *); +static const u8 sText_Var1AteTheVar2[] = _("{STR_VAR_1} ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); +static const u8 sText_Var1HappilyAteVar2[] = _("{STR_VAR_1} happily ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); +static const u8 sText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); + EWRAM_DATA static struct PokeblockFeed *sPokeblockFeed = NULL; EWRAM_DATA static struct CompressedSpritePalette sPokeblockSpritePal = {0}; @@ -792,11 +796,11 @@ static void Task_PrintAtePokeblockMessage(u8 taskId) PokeblockCopyName(pokeblock, gStringVar2); if (gPokeblockGain == 0) - StringExpandPlaceholders(gStringVar4, gText_Var1AteTheVar2); + StringExpandPlaceholders(gStringVar4, sText_Var1AteTheVar2); else if (gPokeblockGain > 0) - StringExpandPlaceholders(gStringVar4, gText_Var1HappilyAteVar2); + StringExpandPlaceholders(gStringVar4, sText_Var1HappilyAteVar2); else - StringExpandPlaceholders(gStringVar4, gText_Var1DisdainfullyAteVar2); + StringExpandPlaceholders(gStringVar4, sText_Var1DisdainfullyAteVar2); gTextFlags.canABSpeedUpPrint = TRUE; AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); diff --git a/src/strings.c b/src/strings.c index 6009dbf5e6..3f21f86c47 100644 --- a/src/strings.c +++ b/src/strings.c @@ -141,7 +141,6 @@ const u8 gText_Store[] = _("STORE"); const u8 gMenuText_Check[] = _("CHECK"); const u8 gText_None[] = _("NONE"); const u8 gMenuText_Deselect[] = _("DESELECT"); -const u8 gText_ThreeMarks[] = _("???"); const u8 gText_FiveMarks[] = _("?????"); const u8 gText_Slash[] = _("/"); const u8 gText_OneDash[] = _("-"); @@ -224,64 +223,19 @@ const u8 *const gPyramidBagMenu_ReturnToStrings[] = }; const u8 gText_ReturnToVar1[] = _("Return to\n{STR_VAR_1}."); -const u8 gText_ItemsPocket[] = _("ITEMS"); -const u8 gText_PokeBallsPocket[] = _("POKé BALLS"); -const u8 gText_TMHMPocket[] = _("TMs & HMs"); -const u8 gText_BerriesPocket[] = _("BERRIES"); -const u8 gText_KeyItemsPocket[] = _("KEY ITEMS"); const u8 *const gPocketNamesStringsTable[] = { - [ITEMS_POCKET] = gText_ItemsPocket, - [BALLS_POCKET] = gText_PokeBallsPocket, - [TMHM_POCKET] = gText_TMHMPocket, - [BERRIES_POCKET] = gText_BerriesPocket, - [KEYITEMS_POCKET] = gText_KeyItemsPocket + [ITEMS_POCKET] = COMPOUND_STRING("ITEMS"), + [BALLS_POCKET] = COMPOUND_STRING("POKé BALLS"), + [TMHM_POCKET] = COMPOUND_STRING("TMs & HMs"), + [BERRIES_POCKET] = COMPOUND_STRING("BERRIES"), + [KEYITEMS_POCKET] = COMPOUND_STRING("KEY ITEMS") }; const u8 gText_NumberItem_TMBerry[] = _("{NO}{STR_VAR_1}{CLEAR 0x07}{STR_VAR_2}"); const u8 gText_NumberItem_HM[] = _("{CLEAR_TO 0x11}{STR_VAR_1}{CLEAR 0x05}{STR_VAR_2}"); -const u8 gText_SizeSlash[] = _("SIZE /"); -const u8 gText_FirmSlash[] = _("FIRM /"); -const u8 gText_Var1DotVar2[] = _("{STR_VAR_1}.{STR_VAR_2}”"); -// Berry firmness strings -const u8 gBerryFirmnessString_VerySoft[] = _("Very soft"); -const u8 gBerryFirmnessString_Soft[] = _("Soft"); -const u8 gBerryFirmnessString_Hard[] = _("Hard"); -const u8 gBerryFirmnessString_VeryHard[] = _("Very hard"); -const u8 gBerryFirmnessString_SuperHard[] = _("Super hard"); - -const u8 gText_NumberVar1Var2[] = _("{NO}{STR_VAR_1} {STR_VAR_2}"); -const u8 gText_BerryTag[] = _("BERRY TAG"); -const u8 gText_RedPokeblock[] = _("RED {POKEBLOCK}"); -const u8 gText_BluePokeblock[] = _("BLUE {POKEBLOCK}"); -const u8 gText_PinkPokeblock[] = _("PINK {POKEBLOCK}"); -const u8 gText_GreenPokeblock[] = _("GREEN {POKEBLOCK}"); -const u8 gText_YellowPokeblock[] = _("YELLOW {POKEBLOCK}"); -const u8 gText_PurplePokeblock[] = _("PURPLE {POKEBLOCK}"); -const u8 gText_IndigoPokeblock[] = _("INDIGO {POKEBLOCK}"); -const u8 gText_BrownPokeblock[] = _("BROWN {POKEBLOCK}"); -const u8 gText_LiteBluePokeblock[] = _("LITEBLUE {POKEBLOCK}"); -const u8 gText_OlivePokeblock[] = _("OLIVE {POKEBLOCK}"); -const u8 gText_GrayPokeblock[] = _("GRAY {POKEBLOCK}"); -const u8 gText_BlackPokeblock[] = _("BLACK {POKEBLOCK}"); -const u8 gText_WhitePokeblock[] = _("WHITE {POKEBLOCK}"); -const u8 gText_GoldPokeblock[] = _("GOLD {POKEBLOCK}"); -const u8 gText_Spicy[] = _("SPICY"); -const u8 gText_Dry[] = _("DRY"); -const u8 gText_Sweet[] = _("SWEET"); -const u8 gText_Bitter[] = _("BITTER"); -const u8 gText_Sour[] = _("SOUR"); -const u8 gText_Tasty[] = _("TASTY"); // Unused -const u8 gText_Feel[] = _("FEEL"); // Unused -const u8 gText_StowCase[] = _("Stow CASE."); -const u8 gText_LvVar1[] = _("{LV}{STR_VAR_1}"); -const u8 gText_ThrowAwayVar1[] = _("Throw away this\n{STR_VAR_1}?"); -const u8 gText_Var1ThrownAway[] = _("The {STR_VAR_1}\nwas thrown away."); -const u8 gText_Var1AteTheVar2[] = _("{STR_VAR_1} ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); -const u8 gText_Var1HappilyAteVar2[] = _("{STR_VAR_1} happily ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); -const u8 gText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); const u8 gText_ShopBuy[] = _("BUY"); const u8 gText_ShopSell[] = _("SELL"); const u8 gText_ShopQuit[] = _("QUIT"); From 832a7b286d3cedf202ae1af238b58abd66879511 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 21 Sep 2024 21:22:30 +0200 Subject: [PATCH 222/544] Update item_use.c (#5415) --- src/item_use.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/item_use.c b/src/item_use.c index fd74b7082b..d38c4b1f98 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1491,7 +1491,7 @@ void FieldUseFunc_VsSeeker(u8 taskId) SetUpItemUseOnFieldCallback(taskId); } else - DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]); + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); } void Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker(u8 taskId) From 16e8be12335695e5fdb7100f1706a292f1f60ed0 Mon Sep 17 00:00:00 2001 From: kleenxfeu <149011275+kleenxfeu@users.noreply.github.com> Date: Sat, 21 Sep 2024 23:47:19 +0200 Subject: [PATCH 223/544] Mega evolution animation is a little smoother (#4816) * Smoother primal/mega animation * Just to make the CI run. It needs to run * Update src/battle_anim_effects_3.c --------- Co-authored-by: kleeenexfeu <94004034+kleeenexfeu@users.noreply.github.com> Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- data/battle_anim_scripts.s | 8 ++-- src/battle_anim_effects_3.c | 82 +++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 4 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 2f1a3cb73c..0435eb8e77 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -28060,7 +28060,7 @@ General_MegaEvolution: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_TransformMon, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 waitforvisualfinish @@ -28251,7 +28251,7 @@ General_PrimalReversion_Alpha: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_TransformMon, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 waitforvisualfinish @@ -28278,7 +28278,7 @@ General_PrimalReversion_Omega: delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA waitforvisualfinish - createvisualtask AnimTask_TransformMon, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 waitforvisualfinish @@ -28314,7 +28314,7 @@ General_UltraBurst:: call LightThatBurnsTheSkyGreenSparks delay 20 createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA - createvisualtask AnimTask_TransformMon, 2, 1, 0 + createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 createsprite gUltraBurstSymbolSpriteTemplate, ANIM_ATTACKER, 0x0, 0x0, 0x0, 0x0, 0x0 waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ed2e7457f6..0b5f3fcf94 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2378,6 +2378,88 @@ void AnimTask_SwallowDeformMon(u8 taskId) } } +void AnimTask_HideSwapSprite(u8 taskId) +{ + int i, j; + u8 position; + struct BattleAnimBgData animBg; + u8 *dest; + u8 *src; + u16 *bgTilemap; + + u8 spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + + switch (gTasks[taskId].data[0]) + { + case 0: + gTasks[taskId].data[11] = gSprites[spriteId].x; // Save battler position + gSprites[spriteId].x = -64; // hide it from screen to avoid the blip/glitch effect when swapping the sprite. + gTasks[taskId].data[10] = gBattleAnimArgs[0]; + gTasks[taskId].data[0]++; + break; + case 1: + HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10], gBattleAnimArgs[1]); + GetBgDataForTransform(&animBg, gBattleAnimAttacker); + + if (IsContest()) + position = 0; + else + position = GetBattlerPosition(gBattleAnimAttacker); + + src = gMonSpritesGfxPtr->spritesGfx[position]; + dest = animBg.bgTiles; + CpuCopy32(src, dest, MON_PIC_SIZE); + LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset); + if (IsContest()) + { + if (IsSpeciesNotUnown(gContestResources->moveAnim->species) != IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies)) + { + bgTilemap = (u16 *)animBg.bgTilemap; + for (i = 0; i < 8; i++) + { + for (j = 0; j < 4; j++) + { + u16 temp = bgTilemap[j + i * 0x20]; + bgTilemap[j + i * 0x20] = bgTilemap[(7 - j) + i * 0x20]; + bgTilemap[(7 - j) + i * 0x20] = temp; + } + } + + for (i = 0; i < 8; i++) + { + for (j = 0; j < 8; j++) + { + bgTilemap[j + i * 0x20] ^= 0x400; + } + } + } + + if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies)) + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteContest; + else + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gAffineAnims_BattleSpriteOpponentSide; + + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], BATTLER_AFFINE_NORMAL); + } + + gTasks[taskId].data[0]++; + break; + case 2: + gSprites[spriteId].x = gTasks[taskId].data[11]; // restores battler position + if (!IsContest()) + { + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + { + if (gTasks[taskId].data[10] == 0) + SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies); + } + } + + DestroyAnimVisualTask(taskId); + break; + } +} + void AnimTask_TransformMon(u8 taskId) { int i, j; From 1ba0875654d8c9cc94da276d5dab2bf08b5734af Mon Sep 17 00:00:00 2001 From: Frank DeBlasio <35279583+fdeblasio@users.noreply.github.com> Date: Sun, 22 Sep 2024 03:54:01 -0400 Subject: [PATCH 224/544] Removed FRONTIER_BRAIN_SPRITES and updated TRAINER_SPRITE, TRAINER_BACK_SPRITE, and TRAINER_CLASS (#5166) * Removed FRONTIER_BRAIN_SPRITES * Updated TRAINER_SPRITE and TRAINER_BACK_SPRITE * Updated TRAINER_CLASS macro * Removed FRONTIER_BRAIN_TEXTS * Turned Frontier Brain text to COMPOUND_STRINGs * Removed frontier_brain.inc from event_scripts.s * Addressed front sprite comment * Addressed backsprite comments --- data/event_scripts.s | 1 - data/text/frontier_brain.inc | 108 ---------------- include/strings.h | 30 ----- src/battle_main.c | 134 ++++++++++---------- src/data/graphics/trainers.h | 230 +++++++++++++++++------------------ src/frontier_util.c | 128 +++++++++++++++---- 6 files changed, 288 insertions(+), 343 deletions(-) delete mode 100644 data/text/frontier_brain.inc diff --git a/data/event_scripts.s b/data/event_scripts.s index d7e82eb95c..2ef99d34fb 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1148,6 +1148,5 @@ EventScript_VsSeekerChargingDone:: .include "data/scripts/trainer_hill.inc" .include "data/scripts/test_signpost.inc" .include "data/scripts/follower.inc" - .include "data/text/frontier_brain.inc" .include "data/text/save.inc" .include "data/text/birch_speech.inc" diff --git a/data/text/frontier_brain.inc b/data/text/frontier_brain.inc deleted file mode 100644 index 1292f2a564..0000000000 --- a/data/text/frontier_brain.inc +++ /dev/null @@ -1,108 +0,0 @@ -@ Battle Tower -gText_AnabelWonSilver:: - .string "It's very disappointing…$" - -gText_AnabelDefeatSilver:: - .string "Okay, I understand…$" - -gText_AnabelWonGold:: - .string "I'm terribly sorry…$" - -gText_AnabelDefeatGold:: - .string "Thank you…$" - -@ Battle Dome -gText_TuckerWonSilver:: - .string "Ahahaha! Aren't you embarrassed?\n" - .string "Everyone's watching!$" - -gText_TuckerDefeatSilver:: - .string "Grr…\n" - .string "What the…$" - -gText_TuckerWonGold:: - .string "My DOME ACE title isn't just for show!$" - -gText_TuckerDefeatGold:: - .string "Ahahaha!\n" - .string "You're inspiring!$" - -@ Battle Factory -gText_NolandWonSilver:: - .string "Way to work!\n" - .string "That was a good lesson, eh?$" - -gText_NolandDefeatSilver:: - .string "Good job!\n" - .string "You know what you're doing!$" - -gText_NolandWonGold:: - .string "Hey, hey, hey!\n" - .string "You're finished already?$" - -gText_NolandDefeatGold:: - .string "What happened here?$" - -@ Battle Pike -gText_LucyWonSilver:: - .string "Humph…$" - -gText_LucyDefeatSilver:: - .string "Urk…$" - -gText_LucyWonGold:: - .string "Hah!$" - -gText_LucyDefeatGold:: - .string "Darn!$" - -@ Battle Arena -gText_GretaWonSilver:: - .string "Oh, come on!\n" - .string "You have to try harder than that!$" - -gText_GretaDefeatSilver:: - .string "No way!\n" - .string "Good job!$" - -gText_GretaWonGold:: - .string "Heheh!\n" - .string "What did you expect?$" - -gText_GretaDefeatGold:: - .string "Huh?\n" - .string "Are you serious?!$" - -@ Battle Palace -gText_SpenserWonSilver:: - .string "Your POKéMON are wimpy because\n" - .string "you're wimpy as a TRAINER!$" - -gText_SpenserDefeatSilver:: - .string "Ah…\n" - .string "Now this is something else…$" - -gText_SpenserWonGold:: - .string "Gwahahaha!\n" - .string "My brethren, we have nothing to fear!$" - -gText_SpenserDefeatGold:: - .string "Gwah!\n" - .string "Hahahaha!$" - -@ Battle Pyramid -gText_BrandonWonSilver:: - .string "Hey! What's wrong with you!\n" - .string "Let's see some effort! Get up!$" - -gText_BrandonDefeatSilver:: - .string "That's it! You've done great!\n" - .string "You've worked hard for this!$" - -gText_BrandonWonGold:: - .string "Hey! Don't you give up now!\n" - .string "Get up! Don't lose faith in yourself!$" - -gText_BrandonDefeatGold:: - .string "That's it! You've done it!\n" - .string "You kept working for this!$" diff --git a/include/strings.h b/include/strings.h index 8a035eb251..84f87ff491 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1219,36 +1219,6 @@ extern const u8 gText_FrontierFacilityRoomsCleared[]; extern const u8 gText_FrontierFacilityKOsStreak[]; extern const u8 gText_FrontierFacilityFloorsCleared[]; -// Frontier Brain -extern const u8 gText_AnabelWonSilver[]; -extern const u8 gText_TuckerWonSilver[]; -extern const u8 gText_SpenserWonSilver[]; -extern const u8 gText_GretaWonSilver[]; -extern const u8 gText_NolandWonSilver[]; -extern const u8 gText_LucyWonSilver[]; -extern const u8 gText_BrandonWonSilver[]; -extern const u8 gText_AnabelDefeatSilver[]; -extern const u8 gText_TuckerDefeatSilver[]; -extern const u8 gText_SpenserDefeatSilver[]; -extern const u8 gText_GretaDefeatSilver[]; -extern const u8 gText_NolandDefeatSilver[]; -extern const u8 gText_LucyDefeatSilver[]; -extern const u8 gText_BrandonDefeatSilver[]; -extern const u8 gText_AnabelWonGold[]; -extern const u8 gText_TuckerWonGold[]; -extern const u8 gText_SpenserWonGold[]; -extern const u8 gText_GretaWonGold[]; -extern const u8 gText_NolandWonGold[]; -extern const u8 gText_LucyWonGold[]; -extern const u8 gText_BrandonWonGold[]; -extern const u8 gText_AnabelDefeatGold[]; -extern const u8 gText_TuckerDefeatGold[]; -extern const u8 gText_SpenserDefeatGold[]; -extern const u8 gText_GretaDefeatGold[]; -extern const u8 gText_NolandDefeatGold[]; -extern const u8 gText_LucyDefeatGold[]; -extern const u8 gText_BrandonDefeatGold[]; - // Battle Tower. extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_Apprentice1Intro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_Apprentice1Mon1[]; diff --git a/src/battle_main.c b/src/battle_main.c index 78e44956a4..c7f6eeafda 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -304,7 +304,7 @@ static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; // extra args are money and ball #define TRAINER_CLASS(trainerClass, trainerName, ...) \ - [TRAINER_CLASS_##trainerClass] = \ + [trainerClass] = \ { \ .name = _(trainerName), \ .money = DEFAULT(5, __VA_ARGS__), \ @@ -313,72 +313,72 @@ static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = { - TRAINER_CLASS(PKMN_TRAINER_1, "{PKMN} TRAINER"), - TRAINER_CLASS(PKMN_TRAINER_2, "{PKMN} TRAINER"), - TRAINER_CLASS(HIKER, "HIKER", 10), - TRAINER_CLASS(TEAM_AQUA, "TEAM AQUA"), - TRAINER_CLASS(PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL), - TRAINER_CLASS(COOLTRAINER, "COOLTRAINER", 12, ITEM_ULTRA_BALL), - TRAINER_CLASS(BIRD_KEEPER, "BIRD KEEPER", 8), - TRAINER_CLASS(COLLECTOR, "COLLECTOR", 15, ITEM_PREMIER_BALL), - TRAINER_CLASS(SWIMMER_M, "SWIMMER♂", 2, ITEM_DIVE_BALL), - TRAINER_CLASS(TEAM_MAGMA, "TEAM MAGMA"), - TRAINER_CLASS(EXPERT, "EXPERT", 10), - TRAINER_CLASS(AQUA_ADMIN, "AQUA ADMIN", 10), - TRAINER_CLASS(BLACK_BELT, "BLACK BELT", 8, ITEM_ULTRA_BALL), - TRAINER_CLASS(AQUA_LEADER, "AQUA LEADER", 20, ITEM_MASTER_BALL), - TRAINER_CLASS(HEX_MANIAC, "HEX MANIAC", 6), - TRAINER_CLASS(AROMA_LADY, "AROMA LADY", 10), - TRAINER_CLASS(RUIN_MANIAC, "RUIN MANIAC", 15), - TRAINER_CLASS(INTERVIEWER, "INTERVIEWER", 12), - TRAINER_CLASS(TUBER_F, "TUBER", 1), - TRAINER_CLASS(TUBER_M, "TUBER", 1), - TRAINER_CLASS(LADY, "LADY", 50), - TRAINER_CLASS(BEAUTY, "BEAUTY", 20), - TRAINER_CLASS(RICH_BOY, "RICH BOY", 50), - TRAINER_CLASS(POKEMANIAC, "POKéMANIAC", 15), - TRAINER_CLASS(GUITARIST, "GUITARIST", 8), - TRAINER_CLASS(KINDLER, "KINDLER", 8), - TRAINER_CLASS(CAMPER, "CAMPER", 4), - TRAINER_CLASS(PICNICKER, "PICNICKER", 4), - TRAINER_CLASS(BUG_MANIAC, "BUG MANIAC", 15), - TRAINER_CLASS(PSYCHIC, "PSYCHIC", 6), - TRAINER_CLASS(GENTLEMAN, "GENTLEMAN", 20, ITEM_LUXURY_BALL), - TRAINER_CLASS(ELITE_FOUR, "ELITE FOUR", 25, ITEM_ULTRA_BALL), - TRAINER_CLASS(LEADER, "LEADER", 25), - TRAINER_CLASS(SCHOOL_KID, "SCHOOL KID"), - TRAINER_CLASS(SR_AND_JR, "SR. AND JR.", 4), - TRAINER_CLASS(WINSTRATE, "WINSTRATE", 10), - TRAINER_CLASS(POKEFAN, "POKéFAN", 20), - TRAINER_CLASS(YOUNGSTER, "YOUNGSTER", 4), - TRAINER_CLASS(CHAMPION, "CHAMPION", 50), - TRAINER_CLASS(FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_DIVE_BALL : ITEM_LURE_BALL), - TRAINER_CLASS(TRIATHLETE, "TRIATHLETE", 10), - TRAINER_CLASS(DRAGON_TAMER, "DRAGON TAMER", 12), - TRAINER_CLASS(NINJA_BOY, "NINJA BOY", 3), - TRAINER_CLASS(BATTLE_GIRL, "BATTLE GIRL", 6), - TRAINER_CLASS(PARASOL_LADY, "PARASOL LADY", 10), - TRAINER_CLASS(SWIMMER_F, "SWIMMER♀", 2, ITEM_DIVE_BALL), - TRAINER_CLASS(TWINS, "TWINS", 3), - TRAINER_CLASS(SAILOR, "SAILOR", 8), - TRAINER_CLASS(COOLTRAINER_2, "COOLTRAINER", 5, ITEM_ULTRA_BALL), - TRAINER_CLASS(MAGMA_ADMIN, "MAGMA ADMIN", 10), - TRAINER_CLASS(RIVAL, "{PKMN} TRAINER", 15), - TRAINER_CLASS(BUG_CATCHER, "BUG CATCHER", 4), - TRAINER_CLASS(PKMN_RANGER, "{PKMN} RANGER", 12), - TRAINER_CLASS(MAGMA_LEADER, "MAGMA LEADER", 20, ITEM_MASTER_BALL), - TRAINER_CLASS(LASS, "LASS", 4), - TRAINER_CLASS(YOUNG_COUPLE, "YOUNG COUPLE", 8), - TRAINER_CLASS(OLD_COUPLE, "OLD COUPLE", 10), - TRAINER_CLASS(SIS_AND_BRO, "SIS AND BRO", 3), - TRAINER_CLASS(SALON_MAIDEN, "SALON MAIDEN"), - TRAINER_CLASS(DOME_ACE, "DOME ACE"), - TRAINER_CLASS(PALACE_MAVEN, "PALACE MAVEN"), - TRAINER_CLASS(ARENA_TYCOON, "ARENA TYCOON"), - TRAINER_CLASS(FACTORY_HEAD, "FACTORY HEAD"), - TRAINER_CLASS(PIKE_QUEEN, "PIKE QUEEN"), - TRAINER_CLASS(PYRAMID_KING, "PYRAMID KING"), - TRAINER_CLASS(RS_PROTAG, "{PKMN} TRAINER"), + TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_1, "{PKMN} TRAINER"), + TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_2, "{PKMN} TRAINER"), + TRAINER_CLASS(TRAINER_CLASS_HIKER, "HIKER", 10), + TRAINER_CLASS(TRAINER_CLASS_TEAM_AQUA, "TEAM AQUA"), + TRAINER_CLASS(TRAINER_CLASS_PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL), + TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER, "COOLTRAINER", 12, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_BIRD_KEEPER, "BIRD KEEPER", 8), + TRAINER_CLASS(TRAINER_CLASS_COLLECTOR, "COLLECTOR", 15, ITEM_PREMIER_BALL), + TRAINER_CLASS(TRAINER_CLASS_SWIMMER_M, "SWIMMER♂", 2, ITEM_DIVE_BALL), + TRAINER_CLASS(TRAINER_CLASS_TEAM_MAGMA, "TEAM MAGMA"), + TRAINER_CLASS(TRAINER_CLASS_EXPERT, "EXPERT", 10), + TRAINER_CLASS(TRAINER_CLASS_AQUA_ADMIN, "AQUA ADMIN", 10), + TRAINER_CLASS(TRAINER_CLASS_BLACK_BELT, "BLACK BELT", 8, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_AQUA_LEADER, "AQUA LEADER", 20, ITEM_MASTER_BALL), + TRAINER_CLASS(TRAINER_CLASS_HEX_MANIAC, "HEX MANIAC", 6), + TRAINER_CLASS(TRAINER_CLASS_AROMA_LADY, "AROMA LADY", 10), + TRAINER_CLASS(TRAINER_CLASS_RUIN_MANIAC, "RUIN MANIAC", 15), + TRAINER_CLASS(TRAINER_CLASS_INTERVIEWER, "INTERVIEWER", 12), + TRAINER_CLASS(TRAINER_CLASS_TUBER_F, "TUBER", 1), + TRAINER_CLASS(TRAINER_CLASS_TUBER_M, "TUBER", 1), + TRAINER_CLASS(TRAINER_CLASS_LADY, "LADY", 50), + TRAINER_CLASS(TRAINER_CLASS_BEAUTY, "BEAUTY", 20), + TRAINER_CLASS(TRAINER_CLASS_RICH_BOY, "RICH BOY", 50), + TRAINER_CLASS(TRAINER_CLASS_POKEMANIAC, "POKéMANIAC", 15), + TRAINER_CLASS(TRAINER_CLASS_GUITARIST, "GUITARIST", 8), + TRAINER_CLASS(TRAINER_CLASS_KINDLER, "KINDLER", 8), + TRAINER_CLASS(TRAINER_CLASS_CAMPER, "CAMPER", 4), + TRAINER_CLASS(TRAINER_CLASS_PICNICKER, "PICNICKER", 4), + TRAINER_CLASS(TRAINER_CLASS_BUG_MANIAC, "BUG MANIAC", 15), + TRAINER_CLASS(TRAINER_CLASS_PSYCHIC, "PSYCHIC", 6), + TRAINER_CLASS(TRAINER_CLASS_GENTLEMAN, "GENTLEMAN", 20, ITEM_LUXURY_BALL), + TRAINER_CLASS(TRAINER_CLASS_ELITE_FOUR, "ELITE FOUR", 25, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_LEADER, "LEADER", 25), + TRAINER_CLASS(TRAINER_CLASS_SCHOOL_KID, "SCHOOL KID"), + TRAINER_CLASS(TRAINER_CLASS_SR_AND_JR, "SR. AND JR.", 4), + TRAINER_CLASS(TRAINER_CLASS_WINSTRATE, "WINSTRATE", 10), + TRAINER_CLASS(TRAINER_CLASS_POKEFAN, "POKéFAN", 20), + TRAINER_CLASS(TRAINER_CLASS_YOUNGSTER, "YOUNGSTER", 4), + TRAINER_CLASS(TRAINER_CLASS_CHAMPION, "CHAMPION", 50), + TRAINER_CLASS(TRAINER_CLASS_FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_DIVE_BALL : ITEM_LURE_BALL), + TRAINER_CLASS(TRAINER_CLASS_TRIATHLETE, "TRIATHLETE", 10), + TRAINER_CLASS(TRAINER_CLASS_DRAGON_TAMER, "DRAGON TAMER", 12), + TRAINER_CLASS(TRAINER_CLASS_NINJA_BOY, "NINJA BOY", 3), + TRAINER_CLASS(TRAINER_CLASS_BATTLE_GIRL, "BATTLE GIRL", 6), + TRAINER_CLASS(TRAINER_CLASS_PARASOL_LADY, "PARASOL LADY", 10), + TRAINER_CLASS(TRAINER_CLASS_SWIMMER_F, "SWIMMER♀", 2, ITEM_DIVE_BALL), + TRAINER_CLASS(TRAINER_CLASS_TWINS, "TWINS", 3), + TRAINER_CLASS(TRAINER_CLASS_SAILOR, "SAILOR", 8), + TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER_2, "COOLTRAINER", 5, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_MAGMA_ADMIN, "MAGMA ADMIN", 10), + TRAINER_CLASS(TRAINER_CLASS_RIVAL, "{PKMN} TRAINER", 15), + TRAINER_CLASS(TRAINER_CLASS_BUG_CATCHER, "BUG CATCHER", 4), + TRAINER_CLASS(TRAINER_CLASS_PKMN_RANGER, "{PKMN} RANGER", 12), + TRAINER_CLASS(TRAINER_CLASS_MAGMA_LEADER, "MAGMA LEADER", 20, ITEM_MASTER_BALL), + TRAINER_CLASS(TRAINER_CLASS_LASS, "LASS", 4), + TRAINER_CLASS(TRAINER_CLASS_YOUNG_COUPLE, "YOUNG COUPLE", 8), + TRAINER_CLASS(TRAINER_CLASS_OLD_COUPLE, "OLD COUPLE", 10), + TRAINER_CLASS(TRAINER_CLASS_SIS_AND_BRO, "SIS AND BRO", 3), + TRAINER_CLASS(TRAINER_CLASS_SALON_MAIDEN, "SALON MAIDEN"), + TRAINER_CLASS(TRAINER_CLASS_DOME_ACE, "DOME ACE"), + TRAINER_CLASS(TRAINER_CLASS_PALACE_MAVEN, "PALACE MAVEN"), + TRAINER_CLASS(TRAINER_CLASS_ARENA_TYCOON, "ARENA TYCOON"), + TRAINER_CLASS(TRAINER_CLASS_FACTORY_HEAD, "FACTORY HEAD"), + TRAINER_CLASS(TRAINER_CLASS_PIKE_QUEEN, "PIKE QUEEN"), + TRAINER_CLASS(TRAINER_CLASS_PYRAMID_KING, "PYRAMID KING"), + TRAINER_CLASS(TRAINER_CLASS_RS_PROTAG, "{PKMN} TRAINER"), }; static void (* const sTurnActionsFuncsTable[])(void) = diff --git a/src/data/graphics/trainers.h b/src/data/graphics/trainers.h index 2a7baf1bc8..613e5fcb14 100644 --- a/src/data/graphics/trainers.h +++ b/src/data/graphics/trainers.h @@ -297,110 +297,110 @@ const u32 gTrainerBackPicPalette_Leaf[] = INCBIN_U32("graphics/trainers/back_pic // gTrainerFrontPic/gTrainerPalette pointers, (e.g "gTrainerFrontPic_Hiker" and "gTrainerPalette_Hiker"). // The last three parameters control the X and Y coordinates and rotation of the mugshot on the screen. // They default to 0, 0, and 0x200 which are default values used by the majority of the game's trainer sprites. -#define TRAINER_SPRITE(trainerPic, file, ...) \ - [TRAINER_PIC_##trainerPic] = \ - { \ - .frontPic = {gTrainerFrontPic_##file, TRAINER_PIC_SIZE, TRAINER_PIC_##trainerPic},\ - .palette = {gTrainerPalette_##file, TRAINER_PIC_##trainerPic}, \ - .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ - .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ +#define TRAINER_SPRITE(trainerPic, picFile, paletteFile, ...) \ + [trainerPic] = \ + { \ + .frontPic = {picFile, TRAINER_PIC_SIZE, trainerPic}, \ + .palette = {paletteFile, trainerPic}, \ + .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ + .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ } const struct TrainerSprite gTrainerSprites[] = { - TRAINER_SPRITE(HIKER, Hiker), - TRAINER_SPRITE(AQUA_GRUNT_M, AquaGruntM), - TRAINER_SPRITE(POKEMON_BREEDER_F, PokemonBreederF), - TRAINER_SPRITE(COOLTRAINER_M, CoolTrainerM), - TRAINER_SPRITE(BIRD_KEEPER, BirdKeeper), - TRAINER_SPRITE(COLLECTOR, Collector), - TRAINER_SPRITE(AQUA_GRUNT_F, AquaGruntF), - TRAINER_SPRITE(SWIMMER_M, SwimmerM), - TRAINER_SPRITE(MAGMA_GRUNT_M, MagmaGruntM), - TRAINER_SPRITE(EXPERT_M, ExpertM), - TRAINER_SPRITE(AQUA_ADMIN_M, AquaAdminM), - TRAINER_SPRITE(BLACK_BELT, BlackBelt), - TRAINER_SPRITE(AQUA_ADMIN_F, AquaAdminF), - TRAINER_SPRITE(AQUA_LEADER_ARCHIE, AquaLeaderArchie), - TRAINER_SPRITE(HEX_MANIAC, HexManiac), - TRAINER_SPRITE(AROMA_LADY, AromaLady), - TRAINER_SPRITE(RUIN_MANIAC, RuinManiac), - TRAINER_SPRITE(INTERVIEWER, Interviewer), - TRAINER_SPRITE(TUBER_F, TuberF), - TRAINER_SPRITE(TUBER_M, TuberM), - TRAINER_SPRITE(COOLTRAINER_F, CoolTrainerF), - TRAINER_SPRITE(LADY, Lady), - TRAINER_SPRITE(BEAUTY, Beauty), - TRAINER_SPRITE(RICH_BOY, RichBoy), - TRAINER_SPRITE(EXPERT_F, ExpertF), - TRAINER_SPRITE(POKEMANIAC, Pokemaniac), - TRAINER_SPRITE(MAGMA_GRUNT_F, MagmaGruntF), - TRAINER_SPRITE(GUITARIST, Guitarist), - TRAINER_SPRITE(KINDLER, Kindler), - TRAINER_SPRITE(CAMPER, Camper), - TRAINER_SPRITE(PICNICKER, Picnicker), - TRAINER_SPRITE(BUG_MANIAC, BugManiac), - TRAINER_SPRITE(POKEMON_BREEDER_M, PokemonBreederM), - TRAINER_SPRITE(PSYCHIC_M, PsychicM), - TRAINER_SPRITE(PSYCHIC_F, PsychicF), - TRAINER_SPRITE(GENTLEMAN, Gentleman), - TRAINER_SPRITE(ELITE_FOUR_SIDNEY, EliteFourSidney), - TRAINER_SPRITE(ELITE_FOUR_PHOEBE, EliteFourPhoebe), - TRAINER_SPRITE(ELITE_FOUR_GLACIA, EliteFourGlacia, -4, 4, 0x1B0), - TRAINER_SPRITE(ELITE_FOUR_DRAKE, EliteFourDrake, 0, 5, 0x1A0), - TRAINER_SPRITE(LEADER_ROXANNE, LeaderRoxanne), - TRAINER_SPRITE(LEADER_BRAWLY, LeaderBrawly), - TRAINER_SPRITE(LEADER_WATTSON, LeaderWattson), - TRAINER_SPRITE(LEADER_FLANNERY, LeaderFlannery), - TRAINER_SPRITE(LEADER_NORMAN, LeaderNorman), - TRAINER_SPRITE(LEADER_WINONA, LeaderWinona), - TRAINER_SPRITE(LEADER_TATE_AND_LIZA, LeaderTateAndLiza), - TRAINER_SPRITE(LEADER_JUAN, LeaderJuan), - TRAINER_SPRITE(SCHOOL_KID_M, SchoolKidM), - TRAINER_SPRITE(SCHOOL_KID_F, SchoolKidF), - TRAINER_SPRITE(SR_AND_JR, SrAndJr), - TRAINER_SPRITE(POKEFAN_M, PokefanM), - TRAINER_SPRITE(POKEFAN_F, PokefanF), - TRAINER_SPRITE(YOUNGSTER, Youngster), - TRAINER_SPRITE(CHAMPION_WALLACE, ChampionWallace, -8, 7, 0x188), - TRAINER_SPRITE(FISHERMAN, Fisherman), - TRAINER_SPRITE(CYCLING_TRIATHLETE_M, CyclingTriathleteM), - TRAINER_SPRITE(CYCLING_TRIATHLETE_F, CyclingTriathleteF), - TRAINER_SPRITE(RUNNING_TRIATHLETE_M, RunningTriathleteM), - TRAINER_SPRITE(RUNNING_TRIATHLETE_F, RunningTriathleteF), - TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, SwimmingTriathleteM), - TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, SwimmingTriathleteF), - TRAINER_SPRITE(DRAGON_TAMER, DragonTamer), - TRAINER_SPRITE(NINJA_BOY, NinjaBoy), - TRAINER_SPRITE(BATTLE_GIRL, BattleGirl), - TRAINER_SPRITE(PARASOL_LADY, ParasolLady), - TRAINER_SPRITE(SWIMMER_F, SwimmerF), - TRAINER_SPRITE(TWINS, Twins), - TRAINER_SPRITE(SAILOR, Sailor), - TRAINER_SPRITE(MAGMA_ADMIN, MagmaAdmin), - TRAINER_SPRITE(WALLY, Wally), - TRAINER_SPRITE(BRENDAN, Brendan), - TRAINER_SPRITE(MAY, May), - TRAINER_SPRITE(BUG_CATCHER, BugCatcher), - TRAINER_SPRITE(POKEMON_RANGER_M, PokemonRangerM), - TRAINER_SPRITE(POKEMON_RANGER_F, PokemonRangerF), - TRAINER_SPRITE(MAGMA_LEADER_MAXIE, MagmaLeaderMaxie), - TRAINER_SPRITE(LASS, Lass), - TRAINER_SPRITE(YOUNG_COUPLE, YoungCouple), - TRAINER_SPRITE(OLD_COUPLE, OldCouple), - TRAINER_SPRITE(SIS_AND_BRO, SisAndBro), - TRAINER_SPRITE(STEVEN, Steven, 0, 7, 0x188), - TRAINER_SPRITE(SALON_MAIDEN_ANABEL, SalonMaidenAnabel), - TRAINER_SPRITE(DOME_ACE_TUCKER, DomeAceTucker), - TRAINER_SPRITE(PALACE_MAVEN_SPENSER, PalaceMavenSpenser), - TRAINER_SPRITE(ARENA_TYCOON_GRETA, ArenaTycoonGreta), - TRAINER_SPRITE(FACTORY_HEAD_NOLAND, FactoryHeadNoland), - TRAINER_SPRITE(PIKE_QUEEN_LUCY, PikeQueenLucy), - TRAINER_SPRITE(PYRAMID_KING_BRANDON, PyramidKingBrandon), - TRAINER_SPRITE(RED, Red), - TRAINER_SPRITE(LEAF, Leaf), - TRAINER_SPRITE(RS_BRENDAN, RubySapphireBrendan), - TRAINER_SPRITE(RS_MAY, RubySapphireMay), + TRAINER_SPRITE(TRAINER_PIC_HIKER, gTrainerFrontPic_Hiker, gTrainerPalette_Hiker), + TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM), + TRAINER_SPRITE(TRAINER_PIC_POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, gTrainerPalette_PokemonBreederF), + TRAINER_SPRITE(TRAINER_PIC_COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, gTrainerPalette_CoolTrainerM), + TRAINER_SPRITE(TRAINER_PIC_BIRD_KEEPER, gTrainerFrontPic_BirdKeeper, gTrainerPalette_BirdKeeper), + TRAINER_SPRITE(TRAINER_PIC_COLLECTOR, gTrainerFrontPic_Collector, gTrainerPalette_Collector), + TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_F, gTrainerFrontPic_AquaGruntF, gTrainerPalette_AquaGruntF), + TRAINER_SPRITE(TRAINER_PIC_SWIMMER_M, gTrainerFrontPic_SwimmerM, gTrainerPalette_SwimmerM), + TRAINER_SPRITE(TRAINER_PIC_MAGMA_GRUNT_M, gTrainerFrontPic_MagmaGruntM, gTrainerPalette_MagmaGruntM), + TRAINER_SPRITE(TRAINER_PIC_EXPERT_M, gTrainerFrontPic_ExpertM, gTrainerPalette_ExpertM), + TRAINER_SPRITE(TRAINER_PIC_AQUA_ADMIN_M, gTrainerFrontPic_AquaAdminM, gTrainerPalette_AquaAdminM), + TRAINER_SPRITE(TRAINER_PIC_BLACK_BELT, gTrainerFrontPic_BlackBelt, gTrainerPalette_BlackBelt), + TRAINER_SPRITE(TRAINER_PIC_AQUA_ADMIN_F, gTrainerFrontPic_AquaAdminF, gTrainerPalette_AquaAdminF), + TRAINER_SPRITE(TRAINER_PIC_AQUA_LEADER_ARCHIE, gTrainerFrontPic_AquaLeaderArchie, gTrainerPalette_AquaLeaderArchie), + TRAINER_SPRITE(TRAINER_PIC_HEX_MANIAC, gTrainerFrontPic_HexManiac, gTrainerPalette_HexManiac), + TRAINER_SPRITE(TRAINER_PIC_AROMA_LADY, gTrainerFrontPic_AromaLady, gTrainerPalette_AromaLady), + TRAINER_SPRITE(TRAINER_PIC_RUIN_MANIAC, gTrainerFrontPic_RuinManiac, gTrainerPalette_RuinManiac), + TRAINER_SPRITE(TRAINER_PIC_INTERVIEWER, gTrainerFrontPic_Interviewer, gTrainerPalette_Interviewer), + TRAINER_SPRITE(TRAINER_PIC_TUBER_F, gTrainerFrontPic_TuberF, gTrainerPalette_TuberF), + TRAINER_SPRITE(TRAINER_PIC_TUBER_M, gTrainerFrontPic_TuberM, gTrainerPalette_TuberM), + TRAINER_SPRITE(TRAINER_PIC_COOLTRAINER_F, gTrainerFrontPic_CoolTrainerF, gTrainerPalette_CoolTrainerF), + TRAINER_SPRITE(TRAINER_PIC_LADY, gTrainerFrontPic_Lady, gTrainerPalette_Lady), + TRAINER_SPRITE(TRAINER_PIC_BEAUTY, gTrainerFrontPic_Beauty, gTrainerPalette_Beauty), + TRAINER_SPRITE(TRAINER_PIC_RICH_BOY, gTrainerFrontPic_RichBoy, gTrainerPalette_RichBoy), + TRAINER_SPRITE(TRAINER_PIC_EXPERT_F, gTrainerFrontPic_ExpertF, gTrainerPalette_ExpertF), + TRAINER_SPRITE(TRAINER_PIC_POKEMANIAC, gTrainerFrontPic_Pokemaniac, gTrainerPalette_Pokemaniac), + TRAINER_SPRITE(TRAINER_PIC_MAGMA_GRUNT_F, gTrainerFrontPic_MagmaGruntF, gTrainerPalette_MagmaGruntF), + TRAINER_SPRITE(TRAINER_PIC_GUITARIST, gTrainerFrontPic_Guitarist, gTrainerPalette_Guitarist), + TRAINER_SPRITE(TRAINER_PIC_KINDLER, gTrainerFrontPic_Kindler, gTrainerPalette_Kindler), + TRAINER_SPRITE(TRAINER_PIC_CAMPER, gTrainerFrontPic_Camper, gTrainerPalette_Camper), + TRAINER_SPRITE(TRAINER_PIC_PICNICKER, gTrainerFrontPic_Picnicker, gTrainerPalette_Picnicker), + TRAINER_SPRITE(TRAINER_PIC_BUG_MANIAC, gTrainerFrontPic_BugManiac, gTrainerPalette_BugManiac), + TRAINER_SPRITE(TRAINER_PIC_POKEMON_BREEDER_M, gTrainerFrontPic_PokemonBreederM, gTrainerPalette_PokemonBreederM), + TRAINER_SPRITE(TRAINER_PIC_PSYCHIC_M, gTrainerFrontPic_PsychicM, gTrainerPalette_PsychicM), + TRAINER_SPRITE(TRAINER_PIC_PSYCHIC_F, gTrainerFrontPic_PsychicF, gTrainerPalette_PsychicF), + TRAINER_SPRITE(TRAINER_PIC_GENTLEMAN, gTrainerFrontPic_Gentleman, gTrainerPalette_Gentleman), + TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_SIDNEY, gTrainerFrontPic_EliteFourSidney, gTrainerPalette_EliteFourSidney), + TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_PHOEBE, gTrainerFrontPic_EliteFourPhoebe, gTrainerPalette_EliteFourPhoebe), + TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_GLACIA, gTrainerFrontPic_EliteFourGlacia, gTrainerPalette_EliteFourGlacia, -4, 4, 0x1B0), + TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_DRAKE, gTrainerFrontPic_EliteFourDrake, gTrainerPalette_EliteFourDrake, 0, 5, 0x1A0), + TRAINER_SPRITE(TRAINER_PIC_LEADER_ROXANNE, gTrainerFrontPic_LeaderRoxanne, gTrainerPalette_LeaderRoxanne), + TRAINER_SPRITE(TRAINER_PIC_LEADER_BRAWLY, gTrainerFrontPic_LeaderBrawly, gTrainerPalette_LeaderBrawly), + TRAINER_SPRITE(TRAINER_PIC_LEADER_WATTSON, gTrainerFrontPic_LeaderWattson, gTrainerPalette_LeaderWattson), + TRAINER_SPRITE(TRAINER_PIC_LEADER_FLANNERY, gTrainerFrontPic_LeaderFlannery, gTrainerPalette_LeaderFlannery), + TRAINER_SPRITE(TRAINER_PIC_LEADER_NORMAN, gTrainerFrontPic_LeaderNorman, gTrainerPalette_LeaderNorman), + TRAINER_SPRITE(TRAINER_PIC_LEADER_WINONA, gTrainerFrontPic_LeaderWinona, gTrainerPalette_LeaderWinona), + TRAINER_SPRITE(TRAINER_PIC_LEADER_TATE_AND_LIZA, gTrainerFrontPic_LeaderTateAndLiza, gTrainerPalette_LeaderTateAndLiza), + TRAINER_SPRITE(TRAINER_PIC_LEADER_JUAN, gTrainerFrontPic_LeaderJuan, gTrainerPalette_LeaderJuan), + TRAINER_SPRITE(TRAINER_PIC_SCHOOL_KID_M, gTrainerFrontPic_SchoolKidM, gTrainerPalette_SchoolKidM), + TRAINER_SPRITE(TRAINER_PIC_SCHOOL_KID_F, gTrainerFrontPic_SchoolKidF, gTrainerPalette_SchoolKidF), + TRAINER_SPRITE(TRAINER_PIC_SR_AND_JR, gTrainerFrontPic_SrAndJr, gTrainerPalette_SrAndJr), + TRAINER_SPRITE(TRAINER_PIC_POKEFAN_M, gTrainerFrontPic_PokefanM, gTrainerPalette_PokefanM), + TRAINER_SPRITE(TRAINER_PIC_POKEFAN_F, gTrainerFrontPic_PokefanF, gTrainerPalette_PokefanF), + TRAINER_SPRITE(TRAINER_PIC_YOUNGSTER, gTrainerFrontPic_Youngster, gTrainerPalette_Youngster), + TRAINER_SPRITE(TRAINER_PIC_CHAMPION_WALLACE, gTrainerFrontPic_ChampionWallace, gTrainerPalette_ChampionWallace, -8, 7, 0x188), + TRAINER_SPRITE(TRAINER_PIC_FISHERMAN, gTrainerFrontPic_Fisherman, gTrainerPalette_Fisherman), + TRAINER_SPRITE(TRAINER_PIC_CYCLING_TRIATHLETE_M, gTrainerFrontPic_CyclingTriathleteM, gTrainerPalette_CyclingTriathleteM), + TRAINER_SPRITE(TRAINER_PIC_CYCLING_TRIATHLETE_F, gTrainerFrontPic_CyclingTriathleteF, gTrainerPalette_CyclingTriathleteF), + TRAINER_SPRITE(TRAINER_PIC_RUNNING_TRIATHLETE_M, gTrainerFrontPic_RunningTriathleteM, gTrainerPalette_RunningTriathleteM), + TRAINER_SPRITE(TRAINER_PIC_RUNNING_TRIATHLETE_F, gTrainerFrontPic_RunningTriathleteF, gTrainerPalette_RunningTriathleteF), + TRAINER_SPRITE(TRAINER_PIC_SWIMMING_TRIATHLETE_M, gTrainerFrontPic_SwimmingTriathleteM, gTrainerPalette_SwimmingTriathleteM), + TRAINER_SPRITE(TRAINER_PIC_SWIMMING_TRIATHLETE_F, gTrainerFrontPic_SwimmingTriathleteF, gTrainerPalette_SwimmingTriathleteF), + TRAINER_SPRITE(TRAINER_PIC_DRAGON_TAMER, gTrainerFrontPic_DragonTamer, gTrainerPalette_DragonTamer), + TRAINER_SPRITE(TRAINER_PIC_NINJA_BOY, gTrainerFrontPic_NinjaBoy, gTrainerPalette_NinjaBoy), + TRAINER_SPRITE(TRAINER_PIC_BATTLE_GIRL, gTrainerFrontPic_BattleGirl, gTrainerPalette_BattleGirl), + TRAINER_SPRITE(TRAINER_PIC_PARASOL_LADY, gTrainerFrontPic_ParasolLady, gTrainerPalette_ParasolLady), + TRAINER_SPRITE(TRAINER_PIC_SWIMMER_F, gTrainerFrontPic_SwimmerF, gTrainerPalette_SwimmerF), + TRAINER_SPRITE(TRAINER_PIC_TWINS, gTrainerFrontPic_Twins, gTrainerPalette_Twins), + TRAINER_SPRITE(TRAINER_PIC_SAILOR, gTrainerFrontPic_Sailor, gTrainerPalette_Sailor), + TRAINER_SPRITE(TRAINER_PIC_MAGMA_ADMIN, gTrainerFrontPic_MagmaAdmin, gTrainerPalette_MagmaAdmin), + TRAINER_SPRITE(TRAINER_PIC_WALLY, gTrainerFrontPic_Wally, gTrainerPalette_Wally), + TRAINER_SPRITE(TRAINER_PIC_BRENDAN, gTrainerFrontPic_Brendan, gTrainerPalette_Brendan), + TRAINER_SPRITE(TRAINER_PIC_MAY, gTrainerFrontPic_May, gTrainerPalette_May), + TRAINER_SPRITE(TRAINER_PIC_BUG_CATCHER, gTrainerFrontPic_BugCatcher, gTrainerPalette_BugCatcher), + TRAINER_SPRITE(TRAINER_PIC_POKEMON_RANGER_M, gTrainerFrontPic_PokemonRangerM, gTrainerPalette_PokemonRangerM), + TRAINER_SPRITE(TRAINER_PIC_POKEMON_RANGER_F, gTrainerFrontPic_PokemonRangerF, gTrainerPalette_PokemonRangerF), + TRAINER_SPRITE(TRAINER_PIC_MAGMA_LEADER_MAXIE, gTrainerFrontPic_MagmaLeaderMaxie, gTrainerPalette_MagmaLeaderMaxie), + TRAINER_SPRITE(TRAINER_PIC_LASS, gTrainerFrontPic_Lass, gTrainerPalette_Lass), + TRAINER_SPRITE(TRAINER_PIC_YOUNG_COUPLE, gTrainerFrontPic_YoungCouple, gTrainerPalette_YoungCouple), + TRAINER_SPRITE(TRAINER_PIC_OLD_COUPLE, gTrainerFrontPic_OldCouple, gTrainerPalette_OldCouple), + TRAINER_SPRITE(TRAINER_PIC_SIS_AND_BRO, gTrainerFrontPic_SisAndBro, gTrainerPalette_SisAndBro), + TRAINER_SPRITE(TRAINER_PIC_STEVEN, gTrainerFrontPic_Steven, gTrainerPalette_Steven, 0, 7, 0x188), + TRAINER_SPRITE(TRAINER_PIC_SALON_MAIDEN_ANABEL, gTrainerFrontPic_SalonMaidenAnabel, gTrainerPalette_SalonMaidenAnabel), + TRAINER_SPRITE(TRAINER_PIC_DOME_ACE_TUCKER, gTrainerFrontPic_DomeAceTucker, gTrainerPalette_DomeAceTucker), + TRAINER_SPRITE(TRAINER_PIC_PALACE_MAVEN_SPENSER, gTrainerFrontPic_PalaceMavenSpenser, gTrainerPalette_PalaceMavenSpenser), + TRAINER_SPRITE(TRAINER_PIC_ARENA_TYCOON_GRETA, gTrainerFrontPic_ArenaTycoonGreta, gTrainerPalette_ArenaTycoonGreta), + TRAINER_SPRITE(TRAINER_PIC_FACTORY_HEAD_NOLAND, gTrainerFrontPic_FactoryHeadNoland, gTrainerPalette_FactoryHeadNoland), + TRAINER_SPRITE(TRAINER_PIC_PIKE_QUEEN_LUCY, gTrainerFrontPic_PikeQueenLucy, gTrainerPalette_PikeQueenLucy), + TRAINER_SPRITE(TRAINER_PIC_PYRAMID_KING_BRANDON, gTrainerFrontPic_PyramidKingBrandon, gTrainerPalette_PyramidKingBrandon), + TRAINER_SPRITE(TRAINER_PIC_RED, gTrainerFrontPic_Red, gTrainerPalette_Red), + TRAINER_SPRITE(TRAINER_PIC_LEAF, gTrainerFrontPic_Leaf, gTrainerPalette_Leaf), + TRAINER_SPRITE(TRAINER_PIC_RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan), + TRAINER_SPRITE(TRAINER_PIC_RS_MAY, gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay), }; static const union AnimCmd sAnimCmd_Hoenn[] = @@ -526,23 +526,23 @@ const struct SpriteFrameImage gTrainerBackPicTable_Steven[] = // .backPic goes functionally unused, since none of these pics are compressed // and the place they would get extracted to gets overwritten later anyway // the casts are so they'll play nice with the strict struct definition -#define TRAINER_BACK_SPRITE(trainerPic, yOffset, sprite, pal, anim) \ - [TRAINER_BACK_PIC_##trainerPic] = \ - { \ - .coordinates = {.size = 8, .y_offset = yOffset}, \ - .backPic = {(const u32 *)gTrainerBackPic_##sprite, TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_##sprite), TRAINER_BACK_PIC_##trainerPic}, \ - .palette = {gTrainer##pal, TRAINER_BACK_PIC_##trainerPic}, \ - .animation = sBackAnims_##anim, \ +#define TRAINER_BACK_SPRITE(trainerPic, yOffset, sprite, table, pal, anim) \ + [trainerPic] = \ + { \ + .coordinates = {.size = 8, .y_offset = yOffset}, \ + .backPic = {(const u32 *)sprite, TRAINER_PIC_SIZE * ARRAY_COUNT(table), trainerPic}, \ + .palette = {pal, trainerPic}, \ + .animation = anim, \ } const struct TrainerBacksprite gTrainerBacksprites[] = { - TRAINER_BACK_SPRITE(BRENDAN, 4, Brendan, Palette_Brendan, Hoenn), - TRAINER_BACK_SPRITE(MAY, 4, May, Palette_May, Hoenn), - TRAINER_BACK_SPRITE(RED, 5, Red, BackPicPalette_Red, Kanto), - TRAINER_BACK_SPRITE(LEAF, 5, Leaf, BackPicPalette_Leaf, Kanto), - TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_BRENDAN, 4, RubySapphireBrendan, Palette_RubySapphireBrendan, Hoenn), - TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_MAY, 4, RubySapphireMay, Palette_RubySapphireMay, Hoenn), - TRAINER_BACK_SPRITE(WALLY, 4, Wally, Palette_Wally, Hoenn), - TRAINER_BACK_SPRITE(STEVEN, 4, Steven, Palette_Steven, Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_BRENDAN, 4, gTrainerBackPic_Brendan, gTrainerBackPicTable_Brendan, gTrainerPalette_Brendan, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_MAY, 4, gTrainerBackPic_May, gTrainerBackPicTable_May, gTrainerPalette_May, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RED, 5, gTrainerBackPic_Red, gTrainerBackPicTable_Red, gTrainerBackPicPalette_Red, sBackAnims_Kanto), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_LEAF, 5, gTrainerBackPic_Leaf, gTrainerBackPicTable_Leaf, gTrainerBackPicPalette_Leaf, sBackAnims_Kanto), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN, 4, gTrainerBackPic_RubySapphireBrendan, gTrainerBackPicTable_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY, 4, gTrainerBackPic_RubySapphireMay, gTrainerBackPicTable_RubySapphireMay, gTrainerPalette_RubySapphireMay, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_WALLY, 4, gTrainerBackPic_Wally, gTrainerBackPicTable_Wally, gTrainerPalette_Wally, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_STEVEN, 4, gTrainerBackPic_Steven, gTrainerBackPicTable_Steven, gTrainerPalette_Steven, sBackAnims_Hoenn), }; diff --git a/src/frontier_util.c b/src/frontier_util.c index b9d4f29e32..4424676644 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -94,71 +94,155 @@ static void ShowPyramidResultsWindow(void); static void ShowLinkContestResultsWindow(void); static void CopyFrontierBrainText(bool8 playerWonText); -#define FRONTIER_BRAIN_SPRITES(Brain) \ - .trainerId = TRAINER_##Brain, \ - .objEventGfx = OBJ_EVENT_GFX_##Brain - -#define FRONTIER_BRAIN_TEXTS(Brain) \ - .lostTexts = {gText_##Brain##DefeatSilver, gText_##Brain##DefeatGold}, \ - .wonTexts = {gText_##Brain##WonSilver, gText_##Brain##WonGold} - // battledBit: Flags to change the conversation when the Frontier Brain is encountered for a battle // First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) const struct FrontierBrain gFrontierBrainInfo[NUM_FRONTIER_FACILITIES] = { [FRONTIER_FACILITY_TOWER] = { - FRONTIER_BRAIN_SPRITES(ANABEL), + .trainerId = TRAINER_ANABEL, + .objEventGfx = OBJ_EVENT_GFX_ANABEL, .isFemale = TRUE, - FRONTIER_BRAIN_TEXTS(Anabel), + .lostTexts = { + COMPOUND_STRING("Okay, I understand…"), //Silver + COMPOUND_STRING("Thank you…") //Gold + }, + .wonTexts = { + COMPOUND_STRING("It's very disappointing…"), //Silver + COMPOUND_STRING("I'm terribly sorry…") //Gold + }, .battledBit = {1 << 0, 1 << 1}, .streakAppearances = {35, 70, 35, 1}, }, [FRONTIER_FACILITY_DOME] = { - FRONTIER_BRAIN_SPRITES(TUCKER), + .trainerId = TRAINER_TUCKER, + .objEventGfx = OBJ_EVENT_GFX_TUCKER, .isFemale = FALSE, - FRONTIER_BRAIN_TEXTS(Tucker), + .lostTexts = { + COMPOUND_STRING( + "Grr…\n" + "What the…"), //Silver + COMPOUND_STRING( + "Ahahaha!\n" + "You're inspiring!") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Ahahaha! Aren't you embarrassed?\n" + "Everyone's watching!"), //Silver + COMPOUND_STRING("My DOME ACE title isn't just for show!") //Gold + }, .battledBit = {1 << 2, 1 << 3}, .streakAppearances = {1, 2, 5, 0}, }, [FRONTIER_FACILITY_PALACE] = { - FRONTIER_BRAIN_SPRITES(SPENSER), + .trainerId = TRAINER_SPENSER, + .objEventGfx = OBJ_EVENT_GFX_SPENSER, .isFemale = FALSE, - FRONTIER_BRAIN_TEXTS(Spenser), + .lostTexts = { + COMPOUND_STRING( + "Ah…\n" + "Now this is something else…"), //Silver + COMPOUND_STRING( + "Gwah!\n" + "Hahahaha!") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Your POKéMON are wimpy because\n" + "you're wimpy as a TRAINER!"), //Silver + COMPOUND_STRING( + "Gwahahaha!\n" + "My brethren, we have nothing to fear!") //Gold + }, .battledBit = {1 << 4, 1 << 5}, .streakAppearances = {21, 42, 21, 1}, }, [FRONTIER_FACILITY_ARENA] = { - FRONTIER_BRAIN_SPRITES(GRETA), + .trainerId = TRAINER_GRETA, + .objEventGfx = OBJ_EVENT_GFX_GRETA, .isFemale = TRUE, - FRONTIER_BRAIN_TEXTS(Greta), + .lostTexts = { + COMPOUND_STRING( + "No way!\n" + "Good job!"), //Silver + COMPOUND_STRING( + "Huh?\n" + "Are you serious?!") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Oh, come on!\n" + "You have to try harder than that!"), //Silver + COMPOUND_STRING( + "Heheh!\n" + "What did you expect?") //Gold + }, .battledBit = {1 << 6, 1 << 7}, .streakAppearances = {28, 56, 28, 1}, }, [FRONTIER_FACILITY_FACTORY] = { - FRONTIER_BRAIN_SPRITES(NOLAND), + .trainerId = TRAINER_NOLAND, + .objEventGfx = OBJ_EVENT_GFX_NOLAND, .isFemale = FALSE, - FRONTIER_BRAIN_TEXTS(Noland), + .lostTexts = { + COMPOUND_STRING( + "Good job!\n" + "You know what you're doing!"), //Silver + COMPOUND_STRING("What happened here?") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Way to work!\n" + "That was a good lesson, eh?"), //Silver + COMPOUND_STRING( + "Hey, hey, hey!\n" + "You're finished already?") //Gold + }, .battledBit = {1 << 8, 1 << 9}, .streakAppearances = {21, 42, 21, 1}, }, [FRONTIER_FACILITY_PIKE] = { - FRONTIER_BRAIN_SPRITES(LUCY), + .trainerId = TRAINER_LUCY, + .objEventGfx = OBJ_EVENT_GFX_LUCY, .isFemale = TRUE, - FRONTIER_BRAIN_TEXTS(Lucy), + .lostTexts = { + COMPOUND_STRING("Urk…"), //Silver + COMPOUND_STRING("Darn!") //Gold + }, + .wonTexts = { + COMPOUND_STRING("Humph…"), //Silver + COMPOUND_STRING("Hah!") //Gold + }, .battledBit = {1 << 10, 1 << 11}, .streakAppearances = {28, 140, 56, 1}, }, [FRONTIER_FACILITY_PYRAMID] = { - FRONTIER_BRAIN_SPRITES(BRANDON), + .trainerId = TRAINER_BRANDON, + .objEventGfx = OBJ_EVENT_GFX_BRANDON, .isFemale = FALSE, - FRONTIER_BRAIN_TEXTS(Brandon), + .lostTexts = { + COMPOUND_STRING( + "That's it! You've done great!\n" + "You've worked hard for this!"), //Silver + COMPOUND_STRING( + "That's it! You've done it!\n" + "You kept working for this!") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Hey! What's wrong with you!\n" + "Let's see some effort! Get up!"), //Silver + COMPOUND_STRING( + "Hey! Don't you give up now!\n" + "Get up! Don't lose faith in yourself!") //Gold + }, .battledBit = {1 << 12, 1 << 13}, .streakAppearances = {21, 70, 35, 0}, }, From d695a6240dbbd6bcdd7785fd172119efb3e49146 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sun, 22 Sep 2024 05:25:42 -0400 Subject: [PATCH 225/544] Convert settotemboost command to callnative (#5418) * settotemboost use callnative * Update src/battle_main.c --------- Co-authored-by: ghoulslash Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- asm/macros/event.inc | 18 +++++++++--------- data/specials.inc | 1 - src/battle_main.c | 16 ++++++++-------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 83338673cf..c5a83a28f7 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2105,15 +2105,15 @@ @ The rest of the arguments are the stat change values to each stat. @ For example, giving the first opponent +1 to atk and -2 to speed would be: settotemboost B_POSITION_OPPONENT_LEFT, 1, 0, -2 .macro settotemboost battler:req, atk=0,def=0,speed=0,spatk=0,spdef=0,acc=0,evas=0 - setvar VAR_0x8000, \battler - setvar VAR_0x8001, \atk - setvar VAR_0x8002, \def - setvar VAR_0x8003, \speed - setvar VAR_0x8004, \spatk - setvar VAR_0x8005, \spdef - setvar VAR_0x8006, \acc - setvar VAR_0x8007, \evas - special SetTotemBoost + callnative ScriptSetTotemBoost + .2byte \battler + .2byte \atk + .2byte \def + .2byte \speed + .2byte \spatk + .2byte \spdef + .2byte \acc + .2byte \evas .endm @ useful totem boost macros diff --git a/data/specials.inc b/data/specials.inc index f02497d603..5ebb3d0ee1 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -534,7 +534,6 @@ gSpecials:: def_special RemoveRecordsWindow def_special CloseDeptStoreElevatorWindow def_special TrySetBattleTowerLinkType - def_special SetTotemBoost def_special TrySpecialOverworldEvo def_special GetNumberSprayStrength def_special GetSprayId diff --git a/src/battle_main.c b/src/battle_main.c index d011cde1db..a9336c3f8b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -43,6 +43,7 @@ #include "roamer.h" #include "safari_zone.h" #include "scanline_effect.h" +#include "script.h" #include "sound.h" #include "sprite.h" #include "string_util.h" @@ -5935,21 +5936,20 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) } } -// special to set a field's totem boost(s) -// inputs: -// var8000: battler -// var8001 - var8007: stat changes -void SetTotemBoost(void) +// Queues stat boosts for a given battler for totem battles +void ScriptSetTotemBoost(struct ScriptContext *ctx) { - u32 battler = gSpecialVar_0x8000; + u32 battler = VarGet(ScriptReadHalfword(ctx)); + u32 stat; u32 i; for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) { - if (*(&gSpecialVar_0x8001 + i)) + stat = VarGet(ScriptReadHalfword(ctx)); + if (stat) { gQueuedStatBoosts[battler].stats |= (1 << i); - gQueuedStatBoosts[battler].statChanges[i] = *(&gSpecialVar_0x8001 + i); + gQueuedStatBoosts[battler].statChanges[i] = stat; gQueuedStatBoosts[battler].stats |= 0x80; // used as a flag for the "totem flared to life" script } } From 60e2c0f859bebfbbf9d5f6cfcd79e6e899cac0dc Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 22 Sep 2024 12:05:45 +0200 Subject: [PATCH 226/544] Merge item description branch history (#5419) * Recreated ghoul's item_desc_header branch Fixed tabs vs spaces Fixing whitespace * Fixed item in header not showing on maximum flash level * Fixed item icon being affected by thunderstorms * Shops now set the obtained item flag. * Fixed build * fix seashore house * better soda pop fix, thx asparagus * fix item icon showing in battle pyramid * fix hiding item desc in battle pyramid --------- Co-authored-by: Eduardo Quezada D'Ottone Co-authored-by: ghoulslash --- 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 a7295d9b53..04784ccdac 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -4725,8 +4725,8 @@ BattleScript_ButItFailed:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_RestoreAttackerButItFailed: - restoreattacker - goto BattleScript_ButItFailed + restoreattacker + goto BattleScript_ButItFailed BattleScript_NotAffected:: pause B_WAIT_TIME_SHORT From d122c0a22233c7a0097c58f9b1ff2fa1fbfc8633 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 22 Sep 2024 14:14:15 +0200 Subject: [PATCH 227/544] Fix affection check for exp multiplier --- 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 0048cf14e4..c65e1455d8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16193,7 +16193,7 @@ void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBat *expAmount = (*expAmount * 150) / 100; if (B_UNEVOLVED_EXP_MULTIPLIER >= GEN_6 && IsMonPastEvolutionLevel(&gPlayerParty[expGetterMonId])) *expAmount = (*expAmount * 4915) / 4096; - if (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(expGetterMonId) >= AFFECTION_FOUR_HEARTS) + if (B_AFFECTION_MECHANICS == TRUE && GetMonAffectionHearts(&gPlayerParty[expGetterMonId]) >= AFFECTION_FOUR_HEARTS) *expAmount = (*expAmount * 4915) / 4096; if (CheckBagHasItem(ITEM_EXP_CHARM, 1)) //is also for other exp boosting Powers if/when implemented *expAmount = (*expAmount * 150) / 100; From bfa020da08f5ed30e01bd7492a1b0b2344fe401b Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Sun, 22 Sep 2024 09:19:58 -0400 Subject: [PATCH 228/544] fix tile attributes --- src/metatile_behavior.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 0248c3cfee..7a447148e1 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -66,8 +66,6 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [MB_SLIDE_NORTH] = TILE_FLAG_UNUSED, [MB_SLIDE_SOUTH] = TILE_FLAG_UNUSED, [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_FLAG_UNUSED, - [MB_UNUSED_49] = TILE_FLAG_UNUSED, - [MB_UNUSED_4A] = TILE_FLAG_UNUSED, [MB_EASTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, [MB_WESTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, [MB_NORTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, From 918d45a6232ad2c29f93f655d001c68b12a7b9d8 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 22 Sep 2024 16:33:17 +0200 Subject: [PATCH 229/544] Fix default tera type changing upon evolution/form change (#5422) --- src/evolution_scene.c | 19 +++++++------------ src/pokemon.c | 2 ++ test/pokemon.c | 11 ++++++++--- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 98879430cb..6119494907 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -545,19 +545,13 @@ static void CB2_TradeEvolutionSceneUpdate(void) static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon) { u32 data = 0; - #if P_SHEDINJA_BALL >= GEN_4 - u16 ball = ITEM_POKE_BALL; - #endif + u16 ball = ITEM_POKE_BALL; const struct Evolution *evolutions = GetSpeciesEvolutions(preEvoSpecies); if (evolutions == NULL) return; - if (evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE - #if P_SHEDINJA_BALL >= GEN_4 - && (CheckBagHasItem(ball, 1)) - #endif - ) + if (evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE && (P_SHEDINJA_BALL < GEN_4 || CheckBagHasItem(ball, 1))) { s32 i; struct Pokemon *shedinja = &gPlayerParty[gPlayerPartyCount]; @@ -567,10 +561,11 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon) SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_NICKNAME, GetSpeciesName(evolutions[1].targetSpecies)); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_HELD_ITEM, &data); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MARKINGS, &data); - #if P_SHEDINJA_BALL >= GEN_4 - SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_POKEBALL, &ball); - RemoveBagItem(ball, 1); - #endif + if (P_SHEDINJA_BALL >= GEN_4) + { + SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_POKEBALL, &ball); + RemoveBagItem(ball, 1); + } for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + CONTEST_CATEGORIES_COUNT; i++) SetMonData(&gPlayerParty[gPlayerPartyCount], i, &data); diff --git a/src/pokemon.c b/src/pokemon.c index 0583939a85..e186ce4d51 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2791,6 +2791,8 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) { const u8 *types = gSpeciesInfo[substruct0->species].types; retVal = (boxMon->personality & 0x1) == 0 ? types[0] : types[1]; + // To avoid this value changing upon form change/evolution, we directly set it for future cases + SetBoxMonData(boxMon, MON_DATA_TERA_TYPE, &retVal); } else { diff --git a/test/pokemon.c b/test/pokemon.c index 8419b9c7e1..562b8b10a3 100644 --- a/test/pokemon.c +++ b/test/pokemon.c @@ -325,20 +325,25 @@ TEST("givemon [vars]") EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_TERA_TYPE), TYPE_FIRE); } -TEST("checkteratype/setteratype work") +TEST("checkteratype works") { CreateMon(&gPlayerParty[0], SPECIES_WOBBUFFET, 100, 0, FALSE, 0, OT_ID_PRESET, 0); RUN_OVERWORLD_SCRIPT( checkteratype 0; ); - EXPECT(VarGet(VAR_RESULT) == TYPE_PSYCHIC); + EXPECT_EQ(VarGet(VAR_RESULT), TYPE_PSYCHIC); +} + +TEST("setteratype works") +{ + CreateMon(&gPlayerParty[0], SPECIES_WOBBUFFET, 100, 0, FALSE, 0, OT_ID_PRESET, 0); RUN_OVERWORLD_SCRIPT( setteratype TYPE_FIRE, 0; checkteratype 0; ); - EXPECT(VarGet(VAR_RESULT) == TYPE_FIRE); + EXPECT_EQ(VarGet(VAR_RESULT), TYPE_FIRE); } TEST("createmon [simple]") From b924461ae3e48a3138cb07eb913279c3917d7c6d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:41:26 +0200 Subject: [PATCH 230/544] Clean up Unseen Fist Check (#5420) * Clean up Unseedn Fist Check * fix compiling --- src/battle_util.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 83af21cdcf..a54e8a12c8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8541,13 +8541,9 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) if (gProtectStructs[battlerDef].maxGuarded && IsMoveBlockedByMaxGuard(move)) return TRUE; - // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here. - // This means extra logic is needed to handle Shell Side Arm. - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST - && (gMovesInfo[move].makesContact - || (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM - && gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL)) - && !gProtectStructs[battlerDef].maxGuarded) // Max Guard cannot be bypassed by Unseen Fist + if (!gProtectStructs[battlerDef].maxGuarded // Max Guard cannot be bypassed by Unseen Fist + && IsMoveMakingContact(move, gBattlerAttacker) + && GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST) return FALSE; else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD && IS_MOVE_STATUS(move)) From ad0778722b34b21f0c5171b61187ff13c3ddd1b1 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Sun, 22 Sep 2024 10:07:17 -0700 Subject: [PATCH 231/544] Adds SAVE_TYPE_ERROR_SCREEN (#5188) * Original commit * Moved config from save to general https://github.com/rh-hideout/pokeemerald-expansion/pull/5188\#discussion_r1720747901 Reindent function per https://github.com/rh-hideout/pokeemerald-expansion/pull/5188\#discussion_r1720747984 Split Compound String into seperate lines per https://github.com/rh-hideout/pokeemerald-expansion/pull/5188\#discussion_r1720748104 Changed Rom to ROM per https://github.com/rh-hideout/pokeemerald-expansion/pull/5188\#discussion_r1720748104 Removed extra new line per https://github.com/rh-hideout/pokeemerald-expansion/pull/5188\#discussion_r1720748172 * fixed spacing per https://github.com/rh-hideout/pokeemerald-expansion/pull/5188\#issuecomment-2295134679 * Updated spacing per https://github.com/rh-hideout/pokeemerald-expansion/pull/5188\#issuecomment-2306527812 * Removed comment and made line breaks consistent per https://github.com/rh-hideout/pokeemerald-expansion/pull/5188\#pullrequestreview-2320266015 --- include/config/general.h | 1 + src/main.c | 3 ++- src/save_failed_screen.c | 52 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/include/config/general.h b/include/config/general.h index ac338a1f50..cff1432bb7 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -86,4 +86,5 @@ // Naming Screen #define AUTO_LOWERCASE_KEYBOARD GEN_LATEST // Starting in GEN_6, after entering the first uppercase character, the keyboard switches to lowercase letters. +#define SAVE_TYPE_ERROR_SCREEN FALSE // When enabled, this shows an error message when the game is loaded on a cart without a flash chip or on an emulator with the wrong save type setting instead of crashing. #endif // GUARD_CONFIG_GENERAL_H diff --git a/src/main.c b/src/main.c index 47907a0111..616c67800b 100644 --- a/src/main.c +++ b/src/main.c @@ -34,6 +34,7 @@ static void IntrDummy(void); // Defined in the linker script so that the test build can override it. extern void gInitialMainCB2(void); +extern void CB2_FlashNotDetectedScreen(void); const u8 gGameVersion = GAME_VERSION; @@ -114,7 +115,7 @@ void AgbMain() gSoftResetDisabled = FALSE; if (gFlashMemoryPresent != TRUE) - SetMainCallback2(NULL); + SetMainCallback2((SAVE_TYPE_ERROR_SCREEN) ? CB2_FlashNotDetectedScreen : NULL); gLinkTransferringData = FALSE; diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index e9257debf2..9bd981facc 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -399,3 +399,55 @@ static bool8 WipeSectors(u32 sectorBits) else return TRUE; } + +void CB2_FlashNotDetectedScreen(void) +{ + static const struct WindowTemplate textWin[] = + { + { + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 2, + .width = 24, + .height = 16, + .paletteNum = 15, + .baseBlock = 1, + } + }; + + if (gMain.state) + return; + + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG0CNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + LoadBgTiles(0, gTextWindowFrame1_Gfx, 0x120, 0x214); + DeactivateAllTextPrinters(); + ResetTasks(); + ResetPaletteFade(); + LoadPalette(gTextWindowFrame1_Pal, 0xE0, 0x20); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + InitWindows(textWin); + DrawStdFrameWithCustomTileAndPalette(0, TRUE, 0x214, 0xE); + static const u8 saveFailedMessage[] =_( + "{COLOR RED}ERROR! {COLOR DARK_GRAY}Flash memory not detected!\n" + "\n" + "If playing on an emulator, set your\n" + "save type setting to\n" + "Flash 1Mb/128K and reload the ROM.\n" + "\n" + "If playing on hardware, your cart\n" + "does not have a working flash chip."); + SaveFailedScreenTextPrint(saveFailedMessage, 1, 0); + TransferPlttBuffer(); + *(u16*)PLTT = RGB(17, 18, 31); + ShowBg(0); + gMain.state++; +} From acd07ccfc10adb701f015d6d8f9e061c5ba1add0 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sun, 22 Sep 2024 13:44:18 -0400 Subject: [PATCH 232/544] add rocky helmet dmg to tangling hair + defiant test to ensure original battler IDs from chaining effects (#5423) Co-authored-by: ghoulslash --- test/battle/ability/tangling_hair.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/battle/ability/tangling_hair.c b/test/battle/ability/tangling_hair.c index 0dbc0264ce..508678a037 100644 --- a/test/battle/ability/tangling_hair.c +++ b/test/battle/ability/tangling_hair.c @@ -50,10 +50,10 @@ SINGLE_BATTLE_TEST("Tangling Hair does not cause Rocky Helmet miss activation") } } -SINGLE_BATTLE_TEST("Tangling Hair Speed stat drop triggers defiant") +SINGLE_BATTLE_TEST("Tangling Hair Speed stat drop triggers defiant and keeps original attacker/target") { GIVEN { - PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_TANGLING_HAIR); } + PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_TANGLING_HAIR); Item(ITEM_ROCKY_HELMET); } OPPONENT(SPECIES_PAWNIARD) { Ability(ABILITY_DEFIANT); } } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } @@ -64,5 +64,7 @@ SINGLE_BATTLE_TEST("Tangling Hair Speed stat drop triggers defiant") MESSAGE("Foe Pawniard's Speed fell!"); ABILITY_POPUP(opponent, ABILITY_DEFIANT); MESSAGE("Foe Pawniard's Attack sharply rose!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Foe Pawniard was hurt by Dugtrio's Rocky Helmet!"); } } From 55086586c57cc867fa45f618669f53cca2aa8987 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:59:43 -0700 Subject: [PATCH 233/544] Revert 5422 (#5424) --- src/evolution_scene.c | 19 ++++++++++++------- src/pokemon.c | 2 -- test/pokemon.c | 11 +++-------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 6119494907..98879430cb 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -545,13 +545,19 @@ static void CB2_TradeEvolutionSceneUpdate(void) static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon) { u32 data = 0; - u16 ball = ITEM_POKE_BALL; + #if P_SHEDINJA_BALL >= GEN_4 + u16 ball = ITEM_POKE_BALL; + #endif const struct Evolution *evolutions = GetSpeciesEvolutions(preEvoSpecies); if (evolutions == NULL) return; - if (evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE && (P_SHEDINJA_BALL < GEN_4 || CheckBagHasItem(ball, 1))) + if (evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE + #if P_SHEDINJA_BALL >= GEN_4 + && (CheckBagHasItem(ball, 1)) + #endif + ) { s32 i; struct Pokemon *shedinja = &gPlayerParty[gPlayerPartyCount]; @@ -561,11 +567,10 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon) SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_NICKNAME, GetSpeciesName(evolutions[1].targetSpecies)); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_HELD_ITEM, &data); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MARKINGS, &data); - if (P_SHEDINJA_BALL >= GEN_4) - { - SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_POKEBALL, &ball); - RemoveBagItem(ball, 1); - } + #if P_SHEDINJA_BALL >= GEN_4 + SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_POKEBALL, &ball); + RemoveBagItem(ball, 1); + #endif for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + CONTEST_CATEGORIES_COUNT; i++) SetMonData(&gPlayerParty[gPlayerPartyCount], i, &data); diff --git a/src/pokemon.c b/src/pokemon.c index e186ce4d51..0583939a85 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2791,8 +2791,6 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) { const u8 *types = gSpeciesInfo[substruct0->species].types; retVal = (boxMon->personality & 0x1) == 0 ? types[0] : types[1]; - // To avoid this value changing upon form change/evolution, we directly set it for future cases - SetBoxMonData(boxMon, MON_DATA_TERA_TYPE, &retVal); } else { diff --git a/test/pokemon.c b/test/pokemon.c index 562b8b10a3..8419b9c7e1 100644 --- a/test/pokemon.c +++ b/test/pokemon.c @@ -325,25 +325,20 @@ TEST("givemon [vars]") EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_TERA_TYPE), TYPE_FIRE); } -TEST("checkteratype works") +TEST("checkteratype/setteratype work") { CreateMon(&gPlayerParty[0], SPECIES_WOBBUFFET, 100, 0, FALSE, 0, OT_ID_PRESET, 0); RUN_OVERWORLD_SCRIPT( checkteratype 0; ); - EXPECT_EQ(VarGet(VAR_RESULT), TYPE_PSYCHIC); -} - -TEST("setteratype works") -{ - CreateMon(&gPlayerParty[0], SPECIES_WOBBUFFET, 100, 0, FALSE, 0, OT_ID_PRESET, 0); + EXPECT(VarGet(VAR_RESULT) == TYPE_PSYCHIC); RUN_OVERWORLD_SCRIPT( setteratype TYPE_FIRE, 0; checkteratype 0; ); - EXPECT_EQ(VarGet(VAR_RESULT), TYPE_FIRE); + EXPECT(VarGet(VAR_RESULT) == TYPE_FIRE); } TEST("createmon [simple]") From e67d5a23ed54a0fc8a584199d99fe3019804bbbd Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:40:44 +0100 Subject: [PATCH 234/544] Adds some Snatch interactions, fixes for Dragon Darts, Trace, Primal Reversion, Protosynthesis/Quark Drive (#5430) * Fixes Electrified Dragon Darts sometimes targeting battlers with absorbing abilities (Volt Absorb, Motor Drive) * Add Snatch interactions with Dancer, Swallow * Trace fix + cleanup * Simplify Quash * Fixes multiple mons with Primal Reversion causing only one Primal Reversion, add tests * Fix Booster Energy Ability Popup * Accidentally removed healing from Swallow * More Trace cleanup --- data/battle_scripts_1.s | 12 +-- include/battle.h | 3 +- include/battle_scripts.h | 1 - include/battle_util.h | 2 +- src/battle_script_commands.c | 52 ++++++------ src/battle_util.c | 29 +++---- test/battle/ability/dancer.c | 79 +++++++++++++++++ test/battle/ability/trace.c | 15 ++++ test/battle/form_change/primal_reversion.c | 98 ++++++++++++++++++++++ test/battle/move_effect/dragon_darts.c | 77 +++++++++++++++++ 10 files changed, 313 insertions(+), 55 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 06b82f43b7..94f5736317 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6961,12 +6961,12 @@ BattleScript_WishMegaEvolution:: BattleScript_PrimalReversion:: call BattleScript_PrimalReversionRet - end2 + end3 BattleScript_PrimalReversionRestoreAttacker:: call BattleScript_PrimalReversionRet copybyte gBattlerAttacker, sSAVED_BATTLER - end2 + end3 BattleScript_PrimalReversionRet:: flushtextbox @@ -7675,15 +7675,11 @@ BattleScript_EmergencyExitWildNoPopUp:: BattleScript_TraceActivates:: pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting printstring STRINGID_PKMNTRACED waitmessage B_WAIT_TIME_LONG settracedability BS_SCRIPTING switchinabilities BS_SCRIPTING - return - -BattleScript_TraceActivatesEnd3:: - call BattleScript_TraceActivates end3 BattleScript_ReceiverActivates:: @@ -10011,7 +10007,7 @@ BattleScript_BerserkGeneRet_End: BattleScript_BoosterEnergyEnd2:: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 - call BattleScript_AbilityPopUpTarget + call BattleScript_AbilityPopUpScripting printstring STRINGID_BOOSTERENERGYACTIVATES waitmessage B_WAIT_TIME_MED printstring STRINGID_STATWASHEIGHTENED diff --git a/include/battle.h b/include/battle.h index 91233c8fe8..582dcedfc2 100644 --- a/include/battle.h +++ b/include/battle.h @@ -93,7 +93,7 @@ struct ResourceFlags #define RESOURCE_FLAG_ROOST 0x2 #define RESOURCE_FLAG_UNBURDEN 0x4 #define RESOURCE_FLAG_UNUSED 0x8 -#define RESOURCE_FLAG_TRACED 0x10 +#define RESOURCE_FLAG_UNUSED_2 0x10 #define RESOURCE_FLAG_EMERGENCY_EXIT 0x20 #define RESOURCE_FLAG_NEUTRALIZING_GAS 0x40 #define RESOURCE_FLAG_ICE_FACE 0x80 @@ -751,6 +751,7 @@ struct BattleStruct u8 blunderPolicy:1; // should blunder policy activate u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky u8 bouncedMoveIsUsed:1; + u8 snatchedMoveIsUsed:1; u8 descriptionSubmenu:1; // For Move Description window in move selection screen u8 ackBallUseBtn:1; // Used for the last used ball feature u8 ballSwapped:1; // Used for the last used ball feature diff --git a/include/battle_scripts.h b/include/battle_scripts.h index e98790764d..84c1b70cf4 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -166,7 +166,6 @@ extern const u8 BattleScript_ItemSteal[]; extern const u8 BattleScript_DrizzleActivates[]; extern const u8 BattleScript_SpeedBoostActivates[]; extern const u8 BattleScript_TraceActivates[]; -extern const u8 BattleScript_TraceActivatesEnd3[]; extern const u8 BattleScript_RainDishActivates[]; extern const u8 BattleScript_SandstreamActivates[]; extern const u8 BattleScript_ShedSkinActivates[]; diff --git a/include/battle_util.h b/include/battle_util.h index 3a64b84462..ec8c03a6bd 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -256,7 +256,7 @@ bool32 MoveHasAdditionalEffectSelf(u32 move, u32 moveEffect); bool32 MoveHasAdditionalEffectSelfArg(u32 move, u32 moveEffect, u32 argument); bool32 MoveHasChargeTurnAdditionalEffect(u32 move); bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef); -bool32 TargetFullyImmuneToCurrMove(u32 BattlerAtk, u32 battlerDef); +bool32 TargetFullyImmuneToCurrMove(u32 battlerAtk, u32 battlerDef); bool32 CanBeSlept(u32 battler, u32 ability); bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 defAbility); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c65e1455d8..b018535cbe 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1401,6 +1401,7 @@ static void Cmd_attackcanceler(void) if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gMovesInfo[gCurrentMove].snatchAffected) { gProtectStructs[gBattlerByTurnOrder[i]].stealMove = FALSE; + gBattleStruct->snatchedMoveIsUsed = TRUE; gBattleScripting.battler = gBattlerByTurnOrder[i]; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SnatchedMove; @@ -6287,7 +6288,7 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_DANCER: // Special case because it's so annoying - if (gMovesInfo[gCurrentMove].danceMove) + if (gMovesInfo[gCurrentMove].danceMove && !gBattleStruct->snatchedMoveIsUsed) { u32 battler, nextDancer = 0; bool32 hasDancerTriggered = FALSE; @@ -6431,6 +6432,7 @@ static void Cmd_moveend(void) gBattleStruct->swapDamageCategory = FALSE; gBattleStruct->categoryOverride = FALSE; gBattleStruct->bouncedMoveIsUsed = FALSE; + gBattleStruct->snatchedMoveIsUsed = FALSE; gBattleStruct->enduredDamage = 0; gBattleStruct->additionalEffectsCounter = 0; gBattleStruct->poisonPuppeteerConfusion = FALSE; @@ -11537,7 +11539,7 @@ static void Cmd_stockpiletohpheal(void) const u8 *failInstr = cmd->failInstr; - if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) + if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0 && !gBattleStruct->snatchedMoveIsUsed) { gBattlescriptCurrInstr = failInstr; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FAILED; @@ -11553,14 +11555,22 @@ static void Cmd_stockpiletohpheal(void) } else { - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter)); + if (gDisableStructs[gBattlerAttacker].stockpileCounter > 0) + { + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / (1 << (3 - gDisableStructs[gBattlerAttacker].stockpileCounter)); + gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; + gBattleStruct->moveEffect2 = MOVE_EFFECT_STOCKPILE_WORE_OFF; + } + else // Snatched move + { + gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; + gBattleScripting.animTurn = 1; + } if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - - gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; - gBattleStruct->moveEffect2 = MOVE_EFFECT_STOCKPILE_WORE_OFF; + gBattlescriptCurrInstr = cmd->nextInstr; gBattlerTarget = gBattlerAttacker; } @@ -17122,30 +17132,18 @@ void BS_TryQuash(void) // If the above condition is not true, it means we are faster than the foe, so we can set the quash bit gProtectStructs[gBattlerTarget].quash = TRUE; - - if (B_QUASH_TURN_ORDER < GEN_8) + + // this implementation assumes turn order is correct when using Quash + i = GetBattlerTurnOrderNum(gBattlerTarget); + for (j = i + 1; j < gBattlersCount; j++) { // Gen 7- config makes target go last so that the order of quash targets is kept for the correct turn order - j = GetBattlerTurnOrderNum(gBattlerTarget); - for (i = j + 1; i < gBattlersCount; i++) - { + // Gen 8+ config alters Turn Order of the target according to speed, dynamic speed should handle the rest + if (B_QUASH_TURN_ORDER < GEN_8 || GetWhichBattlerFaster(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE) == -1) SwapTurnOrder(i, j); - j++; - } - } - else - { - // Gen 8+ config only alters Turn Order of battlers affected by Quash, dynamic speed should handle the rest - for (i = gCurrentTurnActionNumber + 1; i < gBattlersCount - 1; i++) - { - for (j = i + 1; j < gBattlersCount; j++) - { - u32 battler1 = gBattlerByTurnOrder[i], battler2 = gBattlerByTurnOrder[j]; - if ((gProtectStructs[battler1].quash || gProtectStructs[battler2].quash) - && GetWhichBattlerFaster(battler1, battler2, FALSE) == -1) - SwapTurnOrder(i, j); - } - } + else + break; + i++; } gBattlescriptCurrInstr = cmd->nextInstr; } diff --git a/src/battle_util.c b/src/battle_util.c index 612965fff2..86e846d09c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4368,13 +4368,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (gSpecialStatuses[battler].switchInAbilityDone) break; - if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_TRACED) - break; side = (BATTLE_OPPOSITE(GetBattlerPosition(battler))) & BIT_SIDE; target1 = GetBattlerAtPosition(side); target2 = GetBattlerAtPosition(side + BIT_FLANK); - gSpecialStatuses[battler].switchInAbilityDone = TRUE; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0 @@ -4393,11 +4390,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (effect != 0) { - BattleScriptPushCursorAndCallback(BattleScript_TraceActivatesEnd3); - gBattleResources->flags->flags[battler] &= ~RESOURCE_FLAG_TRACED; + BattleScriptPushCursorAndCallback(BattleScript_TraceActivates); gBattleStruct->tracedAbility[battler] = gLastUsedAbility = gBattleMons[chosenTarget].ability; RecordAbilityBattle(chosenTarget, gLastUsedAbility); // Record the opposing battler has this ability - battler = gBattlerAbility = gBattleScripting.battler = battler; + gBattlerAbility = battler; PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, chosenTarget, gBattlerPartyIndexes[chosenTarget]) PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility) @@ -5214,7 +5210,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_GOOD_AS_GOLD: if (IS_MOVE_STATUS(gCurrentMove) - && !(moveTarget & MOVE_TARGET_USER) && !(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) effect = 3; @@ -6388,14 +6383,14 @@ bool32 TryPrimalReversion(u32 battler) { if (gBattlerAttacker == battler) { - BattleScriptExecute(BattleScript_PrimalReversion); + BattleScriptPushCursorAndCallback(BattleScript_PrimalReversion); } else { // edge case for scenarios like a switch-in after activated eject button gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; - BattleScriptExecute(BattleScript_PrimalReversionRestoreAttacker); + BattleScriptPushCursorAndCallback(BattleScript_PrimalReversionRestoreAttacker); } return TRUE; } @@ -8706,7 +8701,7 @@ u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc) u32 GetMoveTargetCount(u32 move, u32 battlerAtk, u32 battlerDef) { - switch (GetBattlerMoveTargetType(gBattlerAttacker, move)) + switch (GetBattlerMoveTargetType(battlerAtk, move)) { case MOVE_TARGET_BOTH: return !(gAbsentBattlerFlags & gBitTable[battlerDef]) @@ -11816,19 +11811,19 @@ bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef) && battlerDef != BATTLE_PARTNER(battlerAtk)); } -static inline bool32 DoesCurrentTargetHaveAbilityImmunity(void) +static inline bool32 DoesBattlerHaveAbilityImmunity(u32 battlerDef) { - return (AbilityBattleEffects(ABILITYEFFECT_WOULD_BLOCK, gBattlerTarget, 0, 0, 0) - || AbilityBattleEffects(ABILITYEFFECT_WOULD_ABSORB, gBattlerTarget, 0, 0, 0)); + return (AbilityBattleEffects(ABILITYEFFECT_WOULD_BLOCK, battlerDef, 0, 0, 0) + || AbilityBattleEffects(ABILITYEFFECT_WOULD_ABSORB, battlerDef, 0, 0, 0)); } -bool32 TargetFullyImmuneToCurrMove(u32 BattlerAtk, u32 battlerDef) +bool32 TargetFullyImmuneToCurrMove(u32 battlerAtk, u32 battlerDef) { u32 moveType = 0; GET_MOVE_TYPE(gCurrentMove, moveType); - return ((CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, BattlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) - || IsBattlerProtected(BattlerAtk, battlerDef, gCurrentMove) + return ((CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, battlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) + || IsBattlerProtected(battlerAtk, battlerDef, gCurrentMove) || IsSemiInvulnerable(battlerDef, gCurrentMove) - || DoesCurrentTargetHaveAbilityImmunity()); + || DoesBattlerHaveAbilityImmunity(battlerDef)); } diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index b39fa291c8..2132530958 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -146,6 +146,85 @@ SINGLE_BATTLE_TEST("Dancer-called attacks have their type updated") } } +DOUBLE_BATTLE_TEST("Dancer doesn't trigger on a snatched move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + ASSUME(gMovesInfo[MOVE_SNATCH].effect == EFFECT_SNATCH); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ORICORIO); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_SNATCH); MOVE(playerRight, MOVE_DRAGON_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNATCH, opponentRight); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + NONE_OF { + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } + } +} + +DOUBLE_BATTLE_TEST("Dancer triggers on Instructed dance moves") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].instructBanned == FALSE); + ASSUME(gMovesInfo[MOVE_INSTRUCT].effect == EFFECT_INSTRUCT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ORICORIO); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_DRAGON_DANCE); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } +} + +DOUBLE_BATTLE_TEST("Dancer-called move doesn't update move to be Instructed") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + ASSUME(gMovesInfo[MOVE_TACKLE].instructBanned == FALSE); + ASSUME(gMovesInfo[MOVE_INSTRUCT].effect == EFFECT_INSTRUCT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ORICORIO); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); MOVE(playerRight, MOVE_DRAGON_DANCE); MOVE(opponentRight, MOVE_INSTRUCT, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, opponentRight); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + } +} + DOUBLE_BATTLE_TEST("Dancer doesn't call a move that didn't execute due to Powder") { GIVEN { diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c index acc49bcf13..3042f8e22b 100644 --- a/test/battle/ability/trace.c +++ b/test/battle/ability/trace.c @@ -80,6 +80,21 @@ SINGLE_BATTLE_TEST("Trace will copy an opponent's ability whenever it has the ch } } + +SINGLE_BATTLE_TEST("Trace copies opponent's Intimidate and triggers it immediately") +{ + GIVEN { + PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); } + OPPONENT(SPECIES_MASQUERAIN) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(player, ABILITY_TRACE); + ABILITY_POPUP(player, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } +} + DOUBLE_BATTLE_TEST("Trace respects the turn order") { GIVEN { diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 2f2f406827..df19a1d0d6 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -234,3 +234,101 @@ SINGLE_BATTLE_TEST("Primal reversion happens immediately if it was brought in by EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } } + + +DOUBLE_BATTLE_TEST("Primal reversion triggers for multiple battlers if multiple fainted the previous turn") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CATERPIE) { HP(1); } + PLAYER(SPECIES_RESHIRAM); + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); + SEND_OUT(opponentRight, 3); + SEND_OUT(opponentLeft, 2); + SEND_OUT(playerRight, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, playerLeft); + ABILITY_POPUP(opponentLeft, ABILITY_PRIMORDIAL_SEA); + ABILITY_POPUP(opponentRight, ABILITY_DESOLATE_LAND); + } +} + +DOUBLE_BATTLE_TEST("Primal reversion triggers for all battlers if multiple fainted the previous turn") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + ASSUME(gMovesInfo[MOVE_EXPLOSION].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CATERPIE) { HP(1); } + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_EXPLOSION); + SEND_OUT(opponentRight, 3); + SEND_OUT(opponentLeft, 2); + SEND_OUT(playerRight, 3); + SEND_OUT(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + ABILITY_POPUP(playerLeft, ABILITY_PRIMORDIAL_SEA); + ABILITY_POPUP(playerRight, ABILITY_DESOLATE_LAND); + ABILITY_POPUP(opponentLeft, ABILITY_PRIMORDIAL_SEA); + ABILITY_POPUP(opponentRight, ABILITY_DESOLATE_LAND); + } +} + +DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all battlers if multiple fainted the previous turn") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + ASSUME(gMovesInfo[MOVE_EXPLOSION].target == MOVE_TARGET_FOES_AND_ALLY); + ASSUME(gMovesInfo[MOVE_STICKY_WEB].effect == EFFECT_STICKY_WEB); + ASSUME(gMovesInfo[MOVE_SPIKES].effect == EFFECT_SPIKES); + ASSUME(gMovesInfo[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CATERPIE) { HP(1); } + PLAYER(SPECIES_SCRAFTY) { Ability(ABILITY_INTIMIDATE); } + PLAYER(SPECIES_RESHIRAM); + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_STICKY_WEB); + MOVE(opponentLeft, MOVE_SPIKES); + MOVE(playerRight, MOVE_TOXIC_SPIKES); } + TURN { MOVE(playerLeft, MOVE_EXPLOSION); + SEND_OUT(opponentRight, 3); + SEND_OUT(opponentLeft, 2); + SEND_OUT(playerRight, 3); + SEND_OUT(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + ABILITY_POPUP(playerRight, ABILITY_TURBOBLAZE); + ABILITY_POPUP(opponentLeft, ABILITY_PRIMORDIAL_SEA); + ABILITY_POPUP(opponentRight, ABILITY_DESOLATE_LAND); + } THEN { + EXPECT_NE(playerLeft->hp, playerLeft->maxHP); + EXPECT_NE(playerRight->hp, playerRight->maxHP); + EXPECT_EQ(opponentLeft->status1, STATUS1_POISON); + EXPECT_EQ(opponentRight->status1, STATUS1_POISON); + EXPECT_EQ(opponentLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(opponentLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); + } +} diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c index 8190f0f4bd..08913d6011 100644 --- a/test/battle/move_effect/dragon_darts.c +++ b/test/battle/move_effect/dragon_darts.c @@ -94,6 +94,83 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the left ally twice if the target is a } } +DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if electrified and right ally has Volt Absorb") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }; + } WHEN { + TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); + HP_BAR(opponentLeft); + MESSAGE("Hit 2 time(s)!"); + } +} + +DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if electrified and left ally has Volt Absorb") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); + HP_BAR(opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); + HP_BAR(opponentRight); + MESSAGE("Hit 2 time(s)!"); + } +} + +DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if electrified and right ally has Motor Drive") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ELECTIVIRE) { Ability(ABILITY_MOTOR_DRIVE); }; + } WHEN { + TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); + HP_BAR(opponentLeft); + MESSAGE("Hit 2 time(s)!"); + } +} + +DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if electrified and left ally has Motor Drive") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ELECTIVIRE) { Ability(ABILITY_MOTOR_DRIVE); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); + HP_BAR(opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); + HP_BAR(opponentRight); + MESSAGE("Hit 2 time(s)!"); + } +} + + DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target is in a semi-invulnerable turn") { GIVEN { From 80a37c16beb71698903836e7bf583a03ea78c112 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 25 Sep 2024 13:35:52 -0400 Subject: [PATCH 235/544] Remove explicit symbol sizes in sym_common.txt --- common_syms/ereader_screen.txt | 1 + src/ereader_screen.c | 3 +++ sym_common.txt | 48 +++++----------------------------- 3 files changed, 11 insertions(+), 41 deletions(-) diff --git a/common_syms/ereader_screen.txt b/common_syms/ereader_screen.txt index 2189eedbc9..26b01f678d 100644 --- a/common_syms/ereader_screen.txt +++ b/common_syms/ereader_screen.txt @@ -1 +1,2 @@ +gUnknownSpace gEReaderData diff --git a/src/ereader_screen.c b/src/ereader_screen.c index c625c78a9e..cb048d2ae3 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -40,6 +40,9 @@ struct EReaderData static void Task_EReader(u8); +// This belongs in COMMON somewhere between party_menu and ereader_screen, but it's unused so it's unclear where. +UNUSED u8 gUnknownSpace[64]; + struct EReaderData gEReaderData; extern const u8 gMultiBootProgram_EReader_Start[]; diff --git a/sym_common.txt b/sym_common.txt index 335af85a30..e001c2ca59 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -1,37 +1,10 @@ - .space 0x8 + .align 4 .include "main.o" - @ ../src/bg.o - .align 2 -gWindowTileAutoAllocEnabled: - .space 4 - @ ../src/window.o - .align 4 -gTransparentTileNumber: - .space 1 - .align 4 -gWindowBgTilemapBuffers: - .space 16 - @ ../src/text.o - .align 4 -gFonts: - .space 4 - .align 2 -gDisableTextPrinters: - .space 1 - .align 4 -gCurGlyph: - .space 132 - .align 2 -gTextFlags: - .space 4 - @ ../src/sprite.o - .align 2 -gOamMatrixAllocBitmap: - .space 4 - .align 2 -gReservedSpritePaletteCount: - .space 1 + .include "bg.o" .align 4 + .include "window.o" + .include "text.o" + .include "sprite.o" .include "link.o" .include "AgbRfu_LinkManager.o" .include "link_rfu_2.o" @@ -53,9 +26,7 @@ gReservedSpritePaletteCount: .include "tv.o" .include "mauville_old_man.o" .include "image_processing_effects.o" - - .space 0x4 - + .align 4 .include "contest_painting.o" .include "field_specials.o" .include "evolution_scene.o" @@ -66,14 +37,9 @@ gReservedSpritePaletteCount: .include "battle_anim_throw.o" .include "battle_factory_screen.o" .include "apprentice.o" - - .space 0x8 - + .align 4 .include "list_menu.o" .include "party_menu.o" - - .space 0x44 - .include "ereader_screen.o" .include "m4a.o" .include "agb_flash.o" From c1dffc694e29e2a104a5b97312b367a8514aa7f8 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 27 Sep 2024 16:40:49 -0500 Subject: [PATCH 236/544] Merge level_caps and ev_caps into one caps file (#5429) * Merge level_caps and ev_caps into one caps file * Update caps.h --- include/{level_caps.h => caps.h} | 11 +++++-- include/config/{level_caps.h => caps.h} | 22 ++++++++++--- include/config/ev_caps.h | 16 ---------- include/constants/global.h | 3 +- include/ev_caps.h | 10 ------ src/battle_controller_player.c | 2 +- src/battle_interface.c | 2 +- src/battle_script_commands.c | 2 +- src/{level_caps.c => caps.c} | 38 ++++++++++++++++++++++- src/daycare.c | 2 +- src/ev_caps.c | 41 ------------------------- src/party_menu.c | 2 +- src/pokemon.c | 11 +++---- 13 files changed, 73 insertions(+), 89 deletions(-) rename include/{level_caps.h => caps.h} (68%) rename include/config/{level_caps.h => caps.h} (55%) delete mode 100644 include/config/ev_caps.h delete mode 100644 include/ev_caps.h rename src/{level_caps.c => caps.c} (69%) delete mode 100644 src/ev_caps.c diff --git a/include/level_caps.h b/include/caps.h similarity index 68% rename from include/level_caps.h rename to include/caps.h index c455408079..f6dd61b632 100644 --- a/include/level_caps.h +++ b/include/caps.h @@ -1,5 +1,5 @@ -#ifndef GUARD_LEVEL_CAP_H -#define GUARD_LEVEL_CAP_H +#ifndef GUARD_CAPS_H +#define GUARD_CAPS_H #if B_EXP_CAP_TYPE != EXP_CAP_NONE && B_EXP_CAP_TYPE != EXP_CAP_HARD && B_EXP_CAP_TYPE != EXP_CAP_SOFT #error "Invalid choice for B_EXP_CAP_TYPE, must be of [EXP_CAP_NONE, EXP_CAP_HARD, EXP_CAP_SOFT]" @@ -14,7 +14,12 @@ #endif #endif +#if B_EV_CAP_TYPE != EV_CAP_NONE && B_EV_CAP_TYPE != EV_CAP_FLAG_LIST && B_EV_CAP_TYPE != EV_CAP_VARIABLE && B_EV_CAP_TYPE != EV_CAP_NO_GAIN +#error "Invalid choice for B_EV_CAP_TYPE, must be one of [EV_CAP_NONE, EV_CAP_FLAG_LIST, EV_CAP_VARIABLE, EV_CAP_NO_GAIN]" +#endif + u32 GetCurrentLevelCap(void); u32 GetSoftLevelCapExpValue(u32 level, u32 expValue); +u32 GetCurrentEVCap(void); -#endif /* GUARD_LEVEL_CAP_H */ +#endif /* GUARD_CAPS_H */ diff --git a/include/config/level_caps.h b/include/config/caps.h similarity index 55% rename from include/config/level_caps.h rename to include/config/caps.h index e8d7b8818e..2debe442cf 100644 --- a/include/config/level_caps.h +++ b/include/config/caps.h @@ -1,7 +1,7 @@ -#ifndef GUARD_CONFIG_LEVEL_CAP_H -#define GUARD_CONFIG_LEVEL_CAP_H +#ifndef GUARD_CONFIG_CAPS_H +#define GUARD_CONFIG_CAPS_H -// Constants +// Level Cap Constants #define EXP_CAP_NONE 0 // Regular behavior, no level caps are applied #define EXP_CAP_HARD 1 // Pokémon with a level >= the level cap cannot gain any experience #define EXP_CAP_SOFT 2 // Pokémon with a level >= the level cap will gain reduced experience @@ -10,7 +10,7 @@ #define LEVEL_CAP_FLAG_LIST 1 // Level cap is chosen according to the first unset flag in `sLevelCapFlagMap` #define LEVEL_CAP_VARIABLE 2 // Level cap is chosen according to the contents of the event variable specified by B_LEVEL_CAP_VARIABLE -// Configs +// Level Cap Configs #define B_EXP_CAP_TYPE EXP_CAP_NONE // [EXP_CAP_NONE, EXP_CAP_HARD, EXP_CAP_SOFT] choose the type of level cap to apply #define B_LEVEL_CAP_TYPE LEVEL_CAP_NONE // [LEVEL_CAP_NONE, LEVEL_CAP_FLAG_LIST, LEVEL_CAP_VARIABLE] choose the method to derive the level cap #define B_LEVEL_CAP_VARIABLE 0 // event variable used to derive level cap if B_LEVEL_CAP_TYPE is set to LEVEL_CAP_VARIABLE @@ -18,4 +18,16 @@ #define B_RARE_CANDY_CAP FALSE // If set to true, Rare Candies can't be used to go over the level cap #define B_LEVEL_CAP_EXP_UP FALSE // If set to true, mons under level cap will receive more experience -#endif /* GUARD_CONFIG_LEVEL_CAP_H */ +// EV Cap Constants +#define EV_CAP_NONE 0 // Regular behavior, no EV caps are applied +#define EV_CAP_FLAG_LIST 1 // EV cap is chosen according to the first unset flag in `sEVCapFlagMap` +#define EV_CAP_VARIABLE 2 // EV cap is chosen according to the contents of the event variable specified by B_EV_CAP_VARIABLE +#define EV_CAP_NO_GAIN 3 // No EVs can be gained + +// EV Cap Configs +#define B_EV_CAP_TYPE EV_CAP_NONE // [EV_CAP_NONE, EV_CAP_FLAG_LIST, EV_CAP_VARIABLE, EV_CAP_NO_GAIN] choose the type of EV cap to apply#define B_EV_CAP_VARIABLE 12 // event variable used to derive EV cap if B_EV_CAP_TYPE is set to EV_CAP_VARIABLE +#define B_EV_CAP_VARIABLE 8 // event variable used to derive EV cap if B_EV_CAP_TYPE is set to EV_CAP_VARIABLE + +#define B_EV_ITEMS_CAP FALSE // If set to true, EV-boosting items can't be used to go over the EV cap + +#endif /* GUARD_CONFIG_CAPS_H */ diff --git a/include/config/ev_caps.h b/include/config/ev_caps.h deleted file mode 100644 index 0513ff086e..0000000000 --- a/include/config/ev_caps.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef GUARD_CONFIG_EV_CAP_H -#define GUARD_CONFIG_EV_CAP_H - -// Constants for EV Cap Types -#define EV_CAP_NONE 0 // Regular behavior, no EV caps are applied -#define EV_CAP_FLAG_LIST 1 // EV cap is chosen according to the first unset flag in `sEVCapFlagMap` -#define EV_CAP_VARIABLE 2 // EV cap is chosen according to the contents of the event variable specified by B_EV_CAP_VARIABLE -#define EV_CAP_NO_GAIN 3 // No EVs can be gained - -// Configs for EV Cap -#define B_EV_CAP_TYPE EV_CAP_NONE // [EV_CAP_NONE, EV_CAP_FLAG_LIST, EV_CAP_VARIABLE, EV_CAP_NO_GAIN] choose the type of EV cap to apply#define B_EV_CAP_VARIABLE 12 // event variable used to derive EV cap if B_EV_CAP_TYPE is set to EV_CAP_VARIABLE -#define B_EV_CAP_VARIABLE 8 // event variable used to derive EV cap if B_EV_CAP_TYPE is set to EV_CAP_VARIABLE - -#define B_EV_ITEMS_CAP FALSE // If set to true, EV-boosting items can't be used to go over the EV cap - -#endif /*GUARD_CONFIG_EV_CAP_H*/ diff --git a/include/constants/global.h b/include/constants/global.h index a4623c9d8b..89508e374d 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -5,10 +5,9 @@ #include "config/battle.h" #include "config/debug.h" #include "config/item.h" -#include "config/level_caps.h" +#include "config/caps.h" #include "config/pokemon.h" #include "config/overworld.h" -#include "config/ev_caps.h" // Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen. // In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen. diff --git a/include/ev_caps.h b/include/ev_caps.h deleted file mode 100644 index 2b2dd0b02b..0000000000 --- a/include/ev_caps.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef GUARD_EV_CAP_H -#define GUARD_EV_CAP_H - -#if B_EV_CAP_TYPE != EV_CAP_NONE && B_EV_CAP_TYPE != EV_CAP_FLAG_LIST && B_EV_CAP_TYPE != EV_CAP_VARIABLE && B_EV_CAP_TYPE != EV_CAP_NO_GAIN -#error "Invalid choice for B_EV_CAP_TYPE, must be one of [EV_CAP_NONE, EV_CAP_FLAG_LIST, EV_CAP_VARIABLE, EV_CAP_NO_GAIN]" -#endif - -u32 GetCurrentEVCap(void); - -#endif /* GUARD_EV_CAP_H */ diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index afff143266..cc5454ad54 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -41,7 +41,7 @@ #include "constants/songs.h" #include "constants/trainers.h" #include "constants/rgb.h" -#include "level_caps.h" +#include "caps.h" #include "menu.h" #include "pokemon_summary_screen.h" #include "type_icons.h" diff --git a/src/battle_interface.c b/src/battle_interface.c index 4c17322b53..5c514a0d80 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -33,7 +33,7 @@ #include "constants/rgb.h" #include "constants/songs.h" #include "constants/items.h" -#include "level_caps.h" +#include "caps.h" enum { // Corresponds to gHealthboxElementsGfxTable (and the tables after it) in graphics.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 283f42a23b..8bbe5ba89f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -27,7 +27,7 @@ #include "bg.h" #include "string_util.h" #include "pokemon_icon.h" -#include "level_caps.h" +#include "caps.h" #include "m4a.h" #include "mail.h" #include "event_data.h" diff --git a/src/level_caps.c b/src/caps.c similarity index 69% rename from src/level_caps.c rename to src/caps.c index 61b4c8dc8f..9c30e55527 100644 --- a/src/level_caps.c +++ b/src/caps.c @@ -1,7 +1,7 @@ #include "global.h" #include "battle.h" #include "event_data.h" -#include "level_caps.h" +#include "caps.h" #include "pokemon.h" @@ -81,3 +81,39 @@ u32 GetSoftLevelCapExpValue(u32 level, u32 expValue) return expValue; } } + +u32 GetCurrentEVCap(void) +{ + + static const u16 sEvCapFlagMap[][2] = { + // Define EV caps for each milestone + {FLAG_BADGE01_GET, 30}, + {FLAG_BADGE02_GET, 90}, + {FLAG_BADGE03_GET, 150}, + {FLAG_BADGE04_GET, 210}, + {FLAG_BADGE05_GET, 270}, + {FLAG_BADGE06_GET, 330}, + {FLAG_BADGE07_GET, 390}, + {FLAG_BADGE08_GET, 450}, + {FLAG_IS_CHAMPION, MAX_TOTAL_EVS}, + }; + + if (B_EV_CAP_TYPE == EV_CAP_FLAG_LIST) + { + for (u32 evCap = 0; evCap < ARRAY_COUNT(sEvCapFlagMap); evCap++) + { + if (!FlagGet(sEvCapFlagMap[evCap][0])) + return sEvCapFlagMap[evCap][1]; + } + } + else if (B_EV_CAP_TYPE == EV_CAP_VARIABLE) + { + return VarGet(B_EV_CAP_VARIABLE); + } + else if (B_EV_CAP_TYPE == EV_CAP_NO_GAIN) + { + return 0; + } + + return MAX_TOTAL_EVS; +} diff --git a/src/daycare.c b/src/daycare.c index e13f993c3f..7a31f15b27 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -3,7 +3,7 @@ #include "battle.h" #include "daycare.h" #include "string_util.h" -#include "level_caps.h" +#include "caps.h" #include "mail.h" #include "pokemon_storage_system.h" #include "event_data.h" diff --git a/src/ev_caps.c b/src/ev_caps.c deleted file mode 100644 index 8eb3531ca4..0000000000 --- a/src/ev_caps.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "event_data.h" -#include "ev_caps.h" -#include "pokemon.h" - -u32 GetCurrentEVCap(void) -{ - - static const u16 sEvCapFlagMap[][2] = { - // Define EV caps for each milestone - {FLAG_BADGE01_GET, 30}, - {FLAG_BADGE02_GET, 90}, - {FLAG_BADGE03_GET, 150}, - {FLAG_BADGE04_GET, 210}, - {FLAG_BADGE05_GET, 270}, - {FLAG_BADGE06_GET, 330}, - {FLAG_BADGE07_GET, 390}, - {FLAG_BADGE08_GET, 450}, - {FLAG_IS_CHAMPION, MAX_TOTAL_EVS}, - }; - - if (B_EV_CAP_TYPE == EV_CAP_FLAG_LIST) - { - for (u32 evCap = 0; evCap < ARRAY_COUNT(sEvCapFlagMap); evCap++) - { - if (!FlagGet(sEvCapFlagMap[evCap][0])) - return sEvCapFlagMap[evCap][1]; - } - } - else if (B_EV_CAP_TYPE == EV_CAP_VARIABLE) - { - return VarGet(B_EV_CAP_VARIABLE); - } - else if (B_EV_CAP_TYPE == EV_CAP_NO_GAIN) - { - return 0; - } - - return MAX_TOTAL_EVS; -} diff --git a/src/party_menu.c b/src/party_menu.c index 5def34b3eb..ecee16d0af 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -32,7 +32,7 @@ #include "item.h" #include "item_menu.h" #include "item_use.h" -#include "level_caps.h" +#include "caps.h" #include "link.h" #include "link_rfu.h" #include "mail.h" diff --git a/src/pokemon.c b/src/pokemon.c index faa1a65aef..43199c8538 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -19,7 +19,7 @@ #include "field_weather.h" #include "graphics.h" #include "item.h" -#include "level_caps.h" +#include "caps.h" #include "link.h" #include "main.h" #include "overworld.h" @@ -60,7 +60,6 @@ #include "constants/union_room.h" #include "constants/weather.h" #include "wild_encounter.h" -#include "ev_caps.h" #define FRIENDSHIP_EVO_THRESHOLD ((P_FRIENDSHIP_EVO_THRESHOLD >= GEN_9) ? 160 : 220) @@ -3879,11 +3878,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Ensure the increase does not exceed the max EV per stat (252) evCap = (itemEffect[10] & ITEM10_IS_VITAMIN) ? EV_ITEM_RAISE_LIMIT : MAX_PER_STAT_EVS; - + // Check if the per-stat limit is reached if (dataSigned >= evCap) return TRUE; // Prevents item use if the per-stat cap is already reached - + if (dataSigned + evChange > evCap) temp2 = evCap - dataSigned; else @@ -4068,11 +4067,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov // Ensure the increase does not exceed the max EV per stat (252) evCap = (itemEffect[10] & ITEM10_IS_VITAMIN) ? EV_ITEM_RAISE_LIMIT : MAX_PER_STAT_EVS; - + // Check if the per-stat limit is reached if (dataSigned >= evCap) return TRUE; // Prevents item use if the per-stat cap is already reached - + if (dataSigned + evChange > evCap) temp2 = evCap - dataSigned; else From cf2f85bdd71588b0c6fc25b299295b3c87edfd64 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Fri, 27 Sep 2024 17:08:24 -0700 Subject: [PATCH 237/544] Fixed identation per https://github.com/rh-hideout/pokeemerald-expansion/pull/5278\#discussion_r1779192846 https://github.com/rh-hideout/pokeemerald-expansion/pull/5278#discussion_r1779195689 https://github.com/rh-hideout/pokeemerald-expansion/pull/5278#discussion_r1779196484 --- src/field_screen_effect.c | 148 +++++++++++++++++++------------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 0839dc6bb2..cd1dfdf032 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1316,21 +1316,21 @@ static bool32 PrintWhiteOutRecoveryMessage(u8 taskId, const u8 *text, u32 x, u32 switch (gTasks[taskId].tPrintState) { - case 0: - FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); - StringExpandPlaceholders(gStringVar4, text); - AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 1, 0, sWhiteoutTextColors, 1, gStringVar4); - gTextFlags.canABSpeedUpPrint = FALSE; - gTasks[taskId].tPrintState = 1; - break; - case 1: - RunTextPrinters(); - if (!IsTextPrinterActive(windowId)) - { - gTasks[taskId].tPrintState = 0; - return TRUE; - } - break; + case 0: + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + StringExpandPlaceholders(gStringVar4, text); + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 1, 0, sWhiteoutTextColors, 1, gStringVar4); + gTextFlags.canABSpeedUpPrint = FALSE; + gTasks[taskId].tPrintState = 1; + break; + case 1: + RunTextPrinters(); + if (!IsTextPrinterActive(windowId)) + { + gTasks[taskId].tPrintState = 0; + return TRUE; + } + break; } return FALSE; } @@ -1489,25 +1489,25 @@ static void Task_ExitStairs(u8 taskId) s16 * data = gTasks[taskId].data; switch (tState) { - default: - if (WaitForWeatherFadeIn() == TRUE) - { - CameraObjectReset(); - UnlockPlayerFieldControls(); - DestroyTask(taskId); - } - break; - case 0: - Overworld_PlaySpecialMapMusic(); - WarpFadeInScreen(); - LockPlayerFieldControls(); - ExitStairsMovement(&tSpeedX, &tSpeedY, &tOffsetX, &tOffsetY, &tTimer); + default: + if (WaitForWeatherFadeIn() == TRUE) + { + CameraObjectReset(); + UnlockPlayerFieldControls(); + DestroyTask(taskId); + } + break; + case 0: + Overworld_PlaySpecialMapMusic(); + WarpFadeInScreen(); + LockPlayerFieldControls(); + ExitStairsMovement(&tSpeedX, &tSpeedY, &tOffsetX, &tOffsetY, &tTimer); + tState++; + break; + case 1: + if (!WaitStairExitMovementFinished(&tSpeedX, &tSpeedY, &tOffsetX, &tOffsetY, &tTimer)) tState++; - break; - case 1: - if (!WaitStairExitMovementFinished(&tSpeedX, &tSpeedY, &tOffsetX, &tOffsetY, &tTimer)) - tState++; - break; + break; } } @@ -1554,48 +1554,48 @@ static void Task_StairWarp(u8 taskId) switch (tState) { - case 0: - LockPlayerFieldControls(); - FreezeObjectEvents(); - CameraObjectFreeze(); + case 0: + LockPlayerFieldControls(); + FreezeObjectEvents(); + CameraObjectFreeze(); + tState++; + break; + case 1: + if (!ObjectEventIsMovementOverridden(playerObjectEvent) || ObjectEventClearHeldMovementIfFinished(playerObjectEvent)) + { + if (tDelay != 0) + tDelay--; + else + { + TryFadeOutOldMapMusic(); + PlayRainStoppingSoundEffect(); + playerSprite->oam.priority = 1; + ForceStairsMovement(tMetatileBehavior, &tSpeedX, &tSpeedY); + PlaySE(SE_EXIT); + tState++; + } + } + break; + case 2: + UpdateStairsMovement(tSpeedX, tSpeedY, &tOffsetX, &tOffsetY, &tTimer); + tDelay++; + if (tDelay >= 12) + { + WarpFadeOutScreen(); tState++; - break; - case 1: - if (!ObjectEventIsMovementOverridden(playerObjectEvent) || ObjectEventClearHeldMovementIfFinished(playerObjectEvent)) - { - if (tDelay != 0) - tDelay--; - else - { - TryFadeOutOldMapMusic(); - PlayRainStoppingSoundEffect(); - playerSprite->oam.priority = 1; - ForceStairsMovement(tMetatileBehavior, &tSpeedX, &tSpeedY); - PlaySE(SE_EXIT); - tState++; - } - } - break; - case 2: - UpdateStairsMovement(tSpeedX, tSpeedY, &tOffsetX, &tOffsetY, &tTimer); - tDelay++; - if (tDelay >= 12) - { - WarpFadeOutScreen(); - tState++; - } - break; - case 3: - UpdateStairsMovement(tSpeedX, tSpeedY, &tOffsetX, &tOffsetY, &tTimer); - if (!PaletteFadeActive() && BGMusicStopped()) - tState++; - break; - default: - gFieldCallback = FieldCB_DefaultWarpExit; - WarpIntoMap(); - SetMainCallback2(CB2_LoadMap); - DestroyTask(taskId); - break; + } + break; + case 3: + UpdateStairsMovement(tSpeedX, tSpeedY, &tOffsetX, &tOffsetY, &tTimer); + if (!PaletteFadeActive() && BGMusicStopped()) + tState++; + break; + default: + gFieldCallback = FieldCB_DefaultWarpExit; + WarpIntoMap(); + SetMainCallback2(CB2_LoadMap); + DestroyTask(taskId); + break; } } From 796a5985497985d54ae9720f81e6907c51677f73 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Fri, 27 Sep 2024 17:10:38 -0700 Subject: [PATCH 238/544] Combined lines per https://github.com/rh-hideout/pokeemerald-expansion/pull/5278\#discussion_r1779193552 --- src/field_screen_effect.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index cd1dfdf032..bb49519820 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1432,8 +1432,7 @@ static void GetStairsMovementDirection(u32 metatileBehavior, s16 *speedX, s16 *s static bool8 WaitStairExitMovementFinished(s16 *speedX, s16 *speedY, s16 *offsetX, s16 *offsetY, s16 *timer) { - struct Sprite *sprite; - sprite = &gSprites[gPlayerAvatar.spriteId]; + struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId]; if (*timer != 0) { *offsetX += *speedX; From eb1469af1dfd0c0c83aab862a6322bd44256d17e Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Fri, 27 Sep 2024 17:15:05 -0700 Subject: [PATCH 239/544] added curly braces per https://github.com/rh-hideout/pokeemerald-expansion/pull/5278\#discussion_r1779196726 --- src/field_screen_effect.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index bb49519820..cd7f51b3da 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1563,7 +1563,9 @@ static void Task_StairWarp(u8 taskId) if (!ObjectEventIsMovementOverridden(playerObjectEvent) || ObjectEventClearHeldMovementIfFinished(playerObjectEvent)) { if (tDelay != 0) + { tDelay--; + } else { TryFadeOutOldMapMusic(); From 874d4d047002a7651a4767e145c8b71a98996a84 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Fri, 27 Sep 2024 17:19:58 -0700 Subject: [PATCH 240/544] Removed switch case per https://github.com/rh-hideout/pokeemerald-expansion/pull/5278\#discussion_r1779197182 --- src/field_screen_effect.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index cd7f51b3da..073c92f3e0 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1618,20 +1618,19 @@ void DoStairWarp(u16 metatileBehavior, u16 delay) bool32 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection) { - switch (playerDirection) + if (playerDirection == DIR_WEST) { - case DIR_WEST: - if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior)) - return TRUE; - if (MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) - return TRUE; - break; - case DIR_EAST: - if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) - return TRUE; - if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) - return TRUE; - break; + if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior)) + return TRUE; + if (MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) + return TRUE; + } + else if (playerDirection == DIR_EAST) + { + if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) + return TRUE; + if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) + return TRUE; } return FALSE; } From 1956376e0e633c3cadbafae746f985fee16dfe33 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 28 Sep 2024 07:46:52 +0200 Subject: [PATCH 241/544] Use move effect for some moves instead of ids (#5433) --- src/battle_main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index c7f6eeafda..d492919850 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5184,15 +5184,15 @@ static bool32 TryDoMoveEffectsBeforeMoves(void) { gBattleStruct->focusPunchBattlers |= 1u << battlers[i]; gBattlerAttacker = battlers[i]; - switch (gChosenMoveByBattler[gBattlerAttacker]) + switch (gMovesInfo[gChosenMoveByBattler[gBattlerAttacker]].effect) { - case MOVE_FOCUS_PUNCH: + case EFFECT_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); return TRUE; - case MOVE_BEAK_BLAST: + case EFFECT_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return TRUE; - case MOVE_SHELL_TRAP: + case EFFECT_SHELL_TRAP: BattleScriptExecute(BattleScript_ShellTrapSetUp); return TRUE; } From 580b9e3b84db7a02d58d5ca722f5df5f568059b4 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 28 Sep 2024 15:02:51 +0200 Subject: [PATCH 242/544] Update src/metatile_behavior.c --- src/metatile_behavior.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 9d96fc4a64..ef349be7cf 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1406,7 +1406,7 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) bool8 MetatileBehavior_IsDirectionalUpRightStairWarp(u8 metatileBehavior) { - if(metatileBehavior == MB_UP_RIGHT_STAIR_WARP) + if (metatileBehavior == MB_UP_RIGHT_STAIR_WARP) return TRUE; else return FALSE; From 8e2c3ca3f2238765e993d005a00dbe4a6abf4a83 Mon Sep 17 00:00:00 2001 From: Scyrous <74797764+Scyrous@users.noreply.github.com> Date: Sun, 29 Sep 2024 14:13:50 +0200 Subject: [PATCH 243/544] Bugfix for cable car sprite array count --- src/cable_car.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cable_car.c b/src/cable_car.c index 8a666a536e..9a6166b599 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -880,8 +880,12 @@ static void CreateCableCarSprites(void) // 1/64 chance for an NPC to appear hiking on the ground below the Cable Car if ((rval % 64) == 0) { - // Unclear if this was intentional, but the - 1 in the below ARRAY_COUNT means the Zigzagoon is never used + // BUGFIX: The - 1 in the below ARRAY_COUNT means the Zigzagoon is never used +#ifdef #BUGFIX + spriteId = CreateObjectGraphicsSprite(hikerGraphicsIds[rval % ARRAY_COUNT(hikerGraphicsIds)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106); +#else spriteId = CreateObjectGraphicsSprite(hikerGraphicsIds[rval % (ARRAY_COUNT(hikerGraphicsIds) - 1)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106); +#endif if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = 2; From 1dc85df1f0ab617dc402ee2da1f37097e3758461 Mon Sep 17 00:00:00 2001 From: Scyrous <74797764+Scyrous@users.noreply.github.com> Date: Sun, 29 Sep 2024 14:38:08 +0200 Subject: [PATCH 244/544] Update cable_car.c --- src/cable_car.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cable_car.c b/src/cable_car.c index 9a6166b599..522ea01a97 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -881,7 +881,7 @@ static void CreateCableCarSprites(void) if ((rval % 64) == 0) { // BUGFIX: The - 1 in the below ARRAY_COUNT means the Zigzagoon is never used -#ifdef #BUGFIX +#ifdef BUGFIX spriteId = CreateObjectGraphicsSprite(hikerGraphicsIds[rval % ARRAY_COUNT(hikerGraphicsIds)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106); #else spriteId = CreateObjectGraphicsSprite(hikerGraphicsIds[rval % (ARRAY_COUNT(hikerGraphicsIds) - 1)], hikerCallbacks[GOING_DOWN], hikerCoords[GOING_DOWN][0], hikerCoords[GOING_DOWN][1], 106); From 5e027754c707881f62d66adb1fc22e12ca435622 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sun, 29 Sep 2024 12:16:33 -0400 Subject: [PATCH 245/544] Add ShouldSwitch result to AiLogicData (#5440) * Add ShouldSwitch to AiLogicData * Convert shouldSwitch to bitfield * Update include/battle.h Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Update include/battle.h --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/battle.h | 3 ++- src/battle_ai_main.c | 6 +++--- src/battle_ai_switch_items.c | 4 ++-- src/battle_ai_util.c | 8 +++----- src/battle_main.c | 2 ++ 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/include/battle.h b/include/battle.h index 3b3c42e054..f1628ddd9b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -366,11 +366,12 @@ struct AiLogicData u8 effectiveness[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 moveAccuracy[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 moveLimitations[MAX_BATTLERS_COUNT]; - bool8 shouldSwitchMon; // Because all available moves have no/little effect. Each bit per battler. + u8 shouldSwitchIfBadMoves; // Because all available moves have no/little effect. Each bit per battler. u8 monToSwitchId[MAX_BATTLERS_COUNT]; // ID of the mon to switch. bool8 weatherHasEffect; // The same as WEATHER_HAS_EFFECT. Stored here, so it's called only once. u8 mostSuitableMonId[MAX_BATTLERS_COUNT]; // Stores result of GetMostSuitableMonToSwitchInto, which decides which generic mon the AI would switch into if they decide to switch. This can be overruled by specific mons found in ShouldSwitch; the final resulting mon is stored in AI_monToSwitchIntoId. struct SwitchinCandidate switchinCandidate; // Struct used for deciding which mon to switch to in battle_ai_switch_items.c + u8 shouldSwitch; // Stores result of ShouldSwitch, which decides whether a mon should be switched out }; struct AI_ThinkingStruct diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 8848ac2c17..acc13a7378 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -504,12 +504,12 @@ static bool32 AI_SwitchMonIfSuitable(u32 battler, bool32 doubleBattle) if (doubleBattle) { u32 partner = BATTLE_PARTNER(battler); - if (AI_DATA->shouldSwitchMon & (1u << partner) && AI_DATA->monToSwitchId[partner] == monToSwitchId) + if (AI_DATA->shouldSwitchIfBadMoves & (1u << partner) && AI_DATA->monToSwitchId[partner] == monToSwitchId) { return FALSE; } } - AI_DATA->shouldSwitchMon |= 1 << battler; + AI_DATA->shouldSwitchIfBadMoves |= 1 << battler; AI_DATA->monToSwitchId[battler] = monToSwitchId; return TRUE; } @@ -3679,7 +3679,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } break; case EFFECT_BATON_PASS: - if (ShouldSwitch(battlerAtk, FALSE) && (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE + if ((AI_DATA->shouldSwitch & (1u << battlerAtk)) && (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) || AnyStatIsRaised(battlerAtk))) ADJUST_SCORE(BEST_EFFECT); diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index b46fe29631..3f13a8c3f4 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -218,9 +218,9 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) static bool32 ShouldSwitchIfAllBadMoves(u32 battler, bool32 emitResult) { - if (AI_DATA->shouldSwitchMon & (1u << battler)) + if (AI_DATA->shouldSwitchIfBadMoves & (1u << battler)) { - AI_DATA->shouldSwitchMon &= ~(1u << battler); + AI_DATA->shouldSwitchIfBadMoves &= ~(1u << battler); gBattleStruct->AI_monToSwitchIntoId[battler] = AI_DATA->monToSwitchId[battler]; if (emitResult) BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 3f08ace393..14f5c44ffc 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2699,10 +2699,8 @@ enum { bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex) { bool32 hasStatBoost = AnyUsefulStatIsRaised(battlerAtk) || gBattleMons[battlerDef].statStages[STAT_EVASION] >= 9; //Significant boost in evasion for any class - bool32 shouldSwitch; u32 battlerToSwitch; - shouldSwitch = ShouldSwitch(battlerAtk, FALSE); battlerToSwitch = gBattleStruct->AI_monToSwitchIntoId[battlerAtk]; if (PartyBattlerShouldAvoidHazards(battlerAtk, battlerToSwitch)) @@ -2727,7 +2725,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 if (CanTargetFaintAi(battlerDef, battlerAtk)) return PIVOT; // Won't get the two turns, pivot - if (!IS_MOVE_STATUS(move) && (shouldSwitch + if (!IS_MOVE_STATUS(move) && ((AI_DATA->shouldSwitch & (1u << battlerAtk)) || (AtMaxHp(battlerDef) && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH || (B_STURDY >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE @@ -2742,7 +2740,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 || defAbility == ABILITY_SHADOW_SHIELD))) return PIVOT; // pivot to break sash/sturdy/multiscale - if (shouldSwitch) + if (AI_DATA->shouldSwitch & (1u << battlerAtk)) return PIVOT; /* TODO - check if switchable mon unafffected by/will remove hazards @@ -2813,7 +2811,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 else if (CanAIFaintTarget(battlerAtk, battlerDef, 2)) { // can knock out foe in 2 hits - if (IS_MOVE_STATUS(move) && (shouldSwitch //Damaging move + if (IS_MOVE_STATUS(move) && ((AI_DATA->shouldSwitch & (1u << battlerAtk)) //Damaging move //&& (switchScore >= SWITCHING_INCREASE_RESIST_ALL_MOVES + SWITCHING_INCREASE_KO_FOE //remove hazards || (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH && AtMaxHp(battlerDef)))) return DONT_PIVOT; // Pivot to break the sash diff --git a/src/battle_main.c b/src/battle_main.c index e8c37c60b0..92e1618fc7 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4178,6 +4178,8 @@ static void HandleTurnActionSelectionState(void) if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && (BattlerHasAi(battler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + if (ShouldSwitch(battler, FALSE)) + AI_DATA->shouldSwitch |= (1u << battler); if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY) // Risky AI switches aggressively even mid battle AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, TRUE); else From 5908fbef9cbdf42f26128e69396d5ab8106a8832 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sun, 29 Sep 2024 12:34:34 -0400 Subject: [PATCH 246/544] Wake-Up Slap test typo (#5442) * Wake-Up Slap test typo * Update test/battle/move_effect/wake_up_slap.c Co-authored-by: Eduardo Quezada --------- Co-authored-by: Eduardo Quezada --- test/battle/move_effect/wake_up_slap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/battle/move_effect/wake_up_slap.c b/test/battle/move_effect/wake_up_slap.c index 2c9dd7ed24..20b22ca660 100644 --- a/test/battle/move_effect/wake_up_slap.c +++ b/test/battle/move_effect/wake_up_slap.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Wake-Up Slap does not cure paralyzed pokemons behind substit } } -SINGLE_BATTLE_TEST("Wake-Up Slap get incread power vs. sleeping targets") +SINGLE_BATTLE_TEST("Wake-Up Slap gets increased power against sleeping targets") { u32 status1; PARAMETRIZE { status1 = STATUS1_SLEEP; } From c8afe9bbde880294095c0a31681b4c24856ee33d Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Sun, 29 Sep 2024 13:34:11 -0400 Subject: [PATCH 247/544] some formatting fixes --- include/config/overworld.h | 2 +- src/event_object_movement.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/config/overworld.h b/include/config/overworld.h index 7439ebc5ad..3298a03209 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -4,7 +4,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. #define OW_AUTO_SIGNPOST FALSE // When enabled, if the tile that the player is facing has MB_SIGNPOST, MB_POKEMART_SIGN, or MB_POKEMON_CENTER_SIGN, the player will automatically read the signpost, as seen in FRLG. -#define SLOW_MOVEMENT_ON_STAIRS FALSE // If enabled, the player will move slower up/down stairs like in FR +#define SLOW_MOVEMENT_ON_STAIRS FALSE // If enabled, the player will move slower up/down stairs like in FR // 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. diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 93bd3ba7ea..7f913cde28 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -9812,7 +9812,7 @@ static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, st gFieldEffectArguments[2] = 149; gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = - bikeTireTracks_Transitions[movementDir][objEvent->facingDirection - 5]; + bikeTireTracks_Transitions[movementDir][objEvent->facingDirection - 5]; FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS); } } From 4183fa9d5067199a4a601bc4947ed430b0f641de Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Sep 2024 14:40:37 -0300 Subject: [PATCH 248/544] Fixed test assumption fail summary fields using more memory than needed (#5443) --- tools/mgba-rom-test-hydra/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index d9d8417e18..2c49b1dde8 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -65,8 +65,8 @@ struct Runner char failed_TestFilenameLine[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; char knownFailingPassed_TestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; char knownFailingPassed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; - char assumeFailed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; - char assumeFailed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH]; + char assumeFailed_TestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; + char assumeFailed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH]; }; static unsigned nrunners = 0; From 8d331691006942b13df2759e4f1a318fe4ac13fe Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sun, 29 Sep 2024 15:54:03 -0400 Subject: [PATCH 249/544] Add Gen 1 Crit Chance (#5439) Adds GEN_1 config to B_CRIT_CHANGE, only affects the chance, not multiplier or other Gen 1 quirks. --- src/battle_script_commands.c | 94 +++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8b65b76cd0..ec5d2f61a0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1948,6 +1948,79 @@ s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordA u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); return CalcCritChanceStageArgs(battlerAtk, battlerDef, move, recordAbility, abilityAtk, abilityDef, holdEffectAtk); } + +// Bulbapedia: https://bulbapedia.bulbagarden.net/wiki/Critical_hit#Generation_I +// Crit chance = Threshold / 256, Threshold maximum of 255 +// Threshold = Base Speed / 2 +// High crit move = 8 * (Base Speed / 2) +// Focus Energy = 4 * (Base Speed / 2) +s32 CalcCritChanceStageGen1(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility) +{ + // Vanilla + u32 focusEnergyScaler = 4; + u32 highCritRatioScaler = 8; + + // Not vanilla + u32 superLuckScaler = 4; + u32 scopeLensScaler = 4; + u32 luckyPunchScaler = 8; + u32 farfetchedLeekScaler = 8; + + s32 critChance = 0; + s32 moveCritStage = gMovesInfo[gCurrentMove].criticalHitStage; + s32 bonusCritStage = gBattleStruct->bonusCritStages[gBattlerAttacker]; // G-Max Chi Strike + u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); + u32 abilityDef = GetBattlerAbility(gBattlerTarget); + u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); + u16 baseSpeed = gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed; + + critChance = baseSpeed / 2; + + // Crit scaling + if (moveCritStage > 0) + critChance = critChance * highCritRatioScaler * moveCritStage; + + if (bonusCritStage > 0) + critChance = critChance * bonusCritStage; + + if ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY_ANY) != 0) + critChance = critChance * focusEnergyScaler; + + if (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS) + critChance = critChance * scopeLensScaler; + + if (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY) + critChance = critChance * luckyPunchScaler; + + if (BENEFITS_FROM_LEEK(battlerAtk, holdEffectAtk)) + critChance = critChance * farfetchedLeekScaler; + + if (abilityAtk == ABILITY_SUPER_LUCK) + critChance = critChance * superLuckScaler; + + if (critChance > 255) + critChance = 255; + + // Prevented crits + if (gSideStatuses[battlerDef] & SIDE_STATUS_LUCKY_CHANT) + critChance = -1; + else if (abilityDef == ABILITY_BATTLE_ARMOR || abilityDef == ABILITY_SHELL_ARMOR) + { + if (recordAbility) + RecordAbilityBattle(battlerDef, abilityDef); + critChance = -1; + } + + // Guaranteed crits + else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS + || gMovesInfo[move].alwaysCriticalHit == TRUE + || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) + { + critChance = -2; + } + + return critChance; +} #undef BENEFITS_FROM_LEEK s32 GetCritHitOdds(s32 critChanceIndex) @@ -1963,7 +2036,13 @@ static void Cmd_critcalc(void) CMD_ARGS(); u16 partySlot; - s32 critChance = CalcCritChanceStage(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE); + s32 critChance; + + if (B_CRIT_CHANCE == GEN_1) + critChance = CalcCritChanceStageGen1(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE); + else + critChance = CalcCritChanceStage(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE); + gPotentialItemEffectBattler = gBattlerAttacker; if (gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) @@ -1973,7 +2052,18 @@ static void Cmd_critcalc(void) else if (critChance == -2) gIsCriticalHit = TRUE; else - gIsCriticalHit = RandomChance(RNG_CRITICAL_HIT, 1, sCriticalHitOdds[critChance]); + { + if (B_CRIT_CHANCE == GEN_1) + { + u8 critRoll = RandomUniform(RNG_CRITICAL_HIT, 1, 256); + if (critRoll <= critChance) + gIsCriticalHit = 1; + else + gIsCriticalHit = 0; + } + else + gIsCriticalHit = RandomChance(RNG_CRITICAL_HIT, 1, sCriticalHitOdds[critChance]); + } // Counter for EVO_CRITICAL_HITS. partySlot = gBattlerPartyIndexes[gBattlerAttacker]; From 42c43a3f8fefcf65b9c1f60c826bbd286da63dce Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 29 Sep 2024 22:45:50 +0200 Subject: [PATCH 250/544] Adds Commander and Order Up (#5246) * Adds Commander * review points * new line * correction * regression / double targeting still broken * fix wrong target order * transform fixes * haze test * fixes, tests * bring back wrongly removed else if case * Eject Pack / Button test + fix * red card fix * test fixes * Fixes Tatsu being hit by multi hit move * change transform check * fix test + revert change * Fix Tatsugiri attacking after freed up from Dozo in the same turn * Dragon Darts tests * fix test * review comments * assumtion in wrong file * Order Up test fixes --------- Co-authored-by: hedara90 <90hedara@gmail.com> --- asm/macros/battle_script.inc | 6 +- data/battle_scripts_1.s | 52 ++- include/battle.h | 7 + include/battle_script_commands.h | 2 + include/battle_scripts.h | 2 + include/constants/battle.h | 8 +- include/constants/battle_move_effects.h | 1 + include/constants/battle_string_ids.h | 3 +- src/battle_ai_main.c | 3 + src/battle_ai_util.c | 5 + src/battle_main.c | 16 +- src/battle_message.c | 4 +- src/battle_script_commands.c | 139 ++++-- src/battle_util.c | 35 +- src/data/abilities.h | 1 + src/data/battle_move_effects.h | 6 + src/data/moves_info.h | 7 +- test/battle/ability/commander.c | 423 +++++++++++++++++++ test/battle/hold_effect/eject_button.c | 24 ++ test/battle/move_effect_secondary/order_up.c | 172 ++++++++ 20 files changed, 872 insertions(+), 44 deletions(-) create mode 100644 test/battle/ability/commander.c create mode 100644 test/battle/move_effect_secondary/order_up.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 5982716bc9..d45487e644 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1351,7 +1351,6 @@ .4byte \func .endm -@ callnative macros .macro savetarget callnative BS_SaveTarget .endm @@ -1727,6 +1726,11 @@ .4byte \failInstr .endm + .macro jumpifcommanderactive jumpInstr:req + callnative BS_JumpIfCommanderActive + .4byte \jumpInstr + .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_1.s b/data/battle_scripts_1.s index 16168ca124..05eb64d15a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3265,6 +3265,7 @@ BattleScript_EffectRoar:: attackstring ppreduce jumpifroarfails BattleScript_ButItFailed + jumpifcommanderactive BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted @@ -8008,11 +8009,52 @@ BattleScript_CostarActivates:: BattleScript_ZeroToHeroActivates:: pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting printstring STRINGID_ZEROTOHEROTRANSFORMATION waitmessage B_WAIT_TIME_LONG end3 +BattleScript_CommanderActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUpScripting + printstring STRINGID_COMMANDERACTIVATES + waitmessage B_WAIT_TIME_LONG +BattleScript_CommanderAtkIncrease: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPATK | BIT_SPDEF | BIT_SPEED, STAT_CHANGE_BY_TWO + setstatchanger STAT_ATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderDefIncrease + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderDefIncrease + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CommanderDefIncrease: + setstatchanger STAT_DEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpAtkIncrease + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderSpAtkIncrease + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CommanderSpAtkIncrease: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpDefIncrease + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderSpDefIncrease + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CommanderSpDefIncrease: + setstatchanger STAT_SPDEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderSpeedIncrease + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderSpeedIncrease + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CommanderSpeedIncrease: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CommanderEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CommanderEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CommanderEnd: + restoreattacker + end3 + BattleScript_HospitalityActivates:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -9533,6 +9575,14 @@ BattleScript_StickyBarbTransfer:: removeitem BS_TARGET return +BattleScript_RedCardActivationNoSwitch:: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_REDCARDACTIVATE + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + restoretarget + return + BattleScript_RedCardActivates:: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_REDCARDACTIVATE diff --git a/include/battle.h b/include/battle.h index f1628ddd9b..16df7c500a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -201,10 +201,13 @@ struct ProtectStruct u16 eatMirrorHerb:1; u16 activateOpportunist:2; // 2 - to copy stats. 1 - stats copied (do not repeat). 0 - no stats to copy u16 usedAllySwitch:1; + u16 padding:2; + // End of 16-bit bitfield u32 physicalDmg; u32 specialDmg; u8 physicalBattlerId; u8 specialBattlerId; + }; struct SpecialStatus @@ -818,9 +821,13 @@ struct BattleStruct u8 boosterEnergyActivates; u8 distortedTypeMatchups; u8 categoryOverride; // for Z-Moves and Max Moves + u8 commandingDondozo; + u16 commanderActive[NUM_BATTLE_SIDES]; u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side u8 fickleBeamBoosted:1; u8 obedienceResult:3; + u8 padding:4; + u8 usedEjectItem; u8 usedMicleBerry; }; diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 4f1593d4d8..7326647d41 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -57,6 +57,8 @@ bool32 IsMoveNotAllowedInSkyBattles(u32 move); bool32 DoSwitchInAbilities(u32 battlerId); u8 GetFirstFaintedPartyIndex(u8 battlerId); bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler); +void SaveBattlerTarget(u32 battler); +void SaveBattlerAttacker(u32 battler); extern void (* const gBattleScriptingCommandsTable[])(void); extern const struct StatFractions gAccuracyStageRatios[]; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 84c1b70cf4..9e2fb84485 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -412,6 +412,7 @@ extern const u8 BattleScript_BattlerGotOverItsInfatuation[]; extern const u8 BattleScript_Pickpocket[]; extern const u8 BattleScript_StickyBarbTransfer[]; extern const u8 BattleScript_AttackerItemStatRaise[]; +extern const u8 BattleScript_RedCardActivationNoSwitch[]; extern const u8 BattleScript_RedCardActivates[]; extern const u8 BattleScript_EjectButtonActivates[]; extern const u8 BattleScript_EjectPackActivate_Ret[]; @@ -477,6 +478,7 @@ extern const u8 BattleScript_CudChewActivates[]; extern const u8 BattleScript_SupremeOverlordActivates[]; extern const u8 BattleScript_CostarActivates[]; extern const u8 BattleScript_ZeroToHeroActivates[]; +extern const u8 BattleScript_CommanderActivates[]; extern const u8 BattleScript_HospitalityActivates[]; extern const u8 BattleScript_ToxicDebrisActivates[]; extern const u8 BattleScript_EarthEaterActivates[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index f9800ef4b3..560448159a 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -166,7 +166,7 @@ #define STATUS3_YAWN_TURN(num) (((num) << 11) & STATUS3_YAWN) #define STATUS3_IMPRISONED_OTHERS (1 << 13) #define STATUS3_GRUDGE (1 << 14) -#define STATUS3___UNUSED (1 << 15) +#define STATUS3_COMMANDER (1 << 15) #define STATUS3_GASTRO_ACID (1 << 16) #define STATUS3_EMBARGO (1 << 17) #define STATUS3_UNDERWATER (1 << 18) @@ -183,7 +183,8 @@ #define STATUS3_LASER_FOCUS (1 << 29) #define STATUS3_POWER_TRICK (1 << 30) #define STATUS3_SKY_DROPPED (1 << 31) // Target of Sky Drop -#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER | STATUS3_PHANTOM_FORCE) +#define STATUS3_SEMI_INVULNERABLE_NO_COMMANDER (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER | STATUS3_PHANTOM_FORCE) // Exception for Transform / Imposter +#define STATUS3_SEMI_INVULNERABLE (STATUS3_SEMI_INVULNERABLE_NO_COMMANDER | STATUS3_COMMANDER) #define STATUS4_ELECTRIFIED (1 << 0) #define STATUS4_MUD_SPORT (1 << 1) // Only used if B_SPORT_TURNS < GEN_6 @@ -401,8 +402,9 @@ #define MOVE_EFFECT_SECRET_POWER 77 #define MOVE_EFFECT_PSYCHIC_NOISE 78 #define MOVE_EFFECT_TERA_BLAST 79 +#define MOVE_EFFECT_ORDER_UP 80 -#define NUM_MOVE_EFFECTS 80 +#define NUM_MOVE_EFFECTS 81 #define MOVE_EFFECT_AFFECTS_USER 0x2000 #define MOVE_EFFECT_CERTAIN 0x4000 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 5da278110f..770e773f80 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -354,6 +354,7 @@ enum { EFFECT_DRAGON_DARTS, EFFECT_GUARDIAN_OF_ALOLA, EFFECT_SHELL_SIDE_ARM, + EFFECT_ORDER_UP, NUM_BATTLE_MOVE_EFFECTS, }; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 9fbb70a223..08c80248fe 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -712,8 +712,9 @@ #define STRINGID_FOGLIFTED 710 #define STRINGID_PKMNMADESHELLGLEAM 711 #define STRINGID_FICKLEBEAMDOUBLED 712 +#define STRINGID_COMMANDERACTIVATES 713 -#define BATTLESTRINGS_COUNT 713 +#define BATTLESTRINGS_COUNT 714 // 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_ai_main.c b/src/battle_ai_main.c index acc13a7378..e686b52071 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -835,6 +835,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsTwoTurnNotSemiInvulnerableMove(battlerAtk, move) && CanTargetFaintAi(battlerDef, battlerAtk)) RETURN_SCORE_MINUS(10); + if (gBattleStruct->commandingDondozo & (1u << battlerDef)) + RETURN_SCORE_MINUS(20); + // check if negates type switch (effectiveness) { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 14f5c44ffc..05dbbe916a 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -412,6 +412,9 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) if (battlerDef == BATTLE_PARTNER(battlerAtk)) battlerDefAbility = aiData->abilities[battlerDef]; + if (gBattleStruct->commandingDondozo & (1u << battlerDef)) + return TRUE; + switch (battlerDefAbility) { case ABILITY_LIGHTNING_ROD: @@ -1508,6 +1511,8 @@ bool32 IsSemiInvulnerable(u32 battlerDef, u32 move) { if (gStatuses3[battlerDef] & STATUS3_PHANTOM_FORCE) return TRUE; + else if (gBattleStruct->commandingDondozo & (1u << battlerDef)) + return TRUE; else if (!gMovesInfo[move].damagesAirborne && gStatuses3[battlerDef] & STATUS3_ON_AIR) return TRUE; else if (!gMovesInfo[move].damagesUnderwater && gStatuses3[battlerDef] & STATUS3_UNDERWATER) diff --git a/src/battle_main.c b/src/battle_main.c index 92e1618fc7..d30d7a927f 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3343,6 +3343,16 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->palaceFlags &= ~(1u << battler); gBattleStruct->boosterEnergyActivates &= ~(1u << battler); + if (gBattleStruct->commanderActive[battler] != SPECIES_NONE) + { + u32 partner = BATTLE_PARTNER(battler); + if (IsBattlerAlive(partner)) + { + BtlController_EmitSpriteInvisibility(partner, BUFFER_A, FALSE); + MarkBattlerForControllerExec(partner); + } + } + for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) { // User of sticky web fainted, so reset the stored battler ID @@ -4194,7 +4204,7 @@ static void HandleTurnActionSelectionState(void) || gBattleStruct->absentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(position))) || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) { - if (gBattleStruct->absentBattlerFlags & (1u << battler)) + if ((gBattleStruct->absentBattlerFlags & (1u << battler)) || (gBattleStruct->commandingDondozo & (1u << battler))) { gChosenActionByBattler[battler] = B_ACTION_NOTHING_FAINTED; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -5116,6 +5126,9 @@ static void TurnValuesCleanUp(bool8 var0) if (gDisableStructs[i].substituteHP == 0) gBattleMons[i].status2 &= ~STATUS2_SUBSTITUTE; + if (!(gStatuses3[i] & STATUS3_COMMANDER)) + gBattleStruct->commandingDondozo &= ~(1u << i); + gSpecialStatuses[i].parentalBondState = PARENTAL_BOND_OFF; } @@ -5124,6 +5137,7 @@ static void TurnValuesCleanUp(bool8 var0) gSideTimers[B_SIDE_PLAYER].followmeTimer = 0; gSideTimers[B_SIDE_OPPONENT].followmeTimer = 0; + gBattleStruct->usedEjectItem = 0; gBattleStruct->pledgeMove = FALSE; // combined pledge move may not have been used due to a canceller } diff --git a/src/battle_message.c b/src/battle_message.c index 727091cec6..d90113b5ea 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -830,7 +830,8 @@ static const u8 sText_TargetIsBeingSaltCured[] = _("{B_DEF_NAME_WITH_PREFIX} is static const u8 sText_TargetIsHurtBySaltCure[] = _("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky syrup!"); static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing to tell a\nchillingly bad joke!"); -static const u8 sText_ZeroToHeroTransformation[] = _("{B_ATK_NAME_WITH_PREFIX} underwent a heroic\ntransformation!"); +static const u8 sText_ZeroToHeroTransformation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} underwent a heroic\ntransformation!"); +static const u8 sText_CommanderActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was swallowed by Dondozo\nand became Dondozo's commander!"); static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves become one!\nIt's a combined move!{PAUSE 16}"); static const u8 sText_ARainbowAppearedOnSide[] = _("A rainbow appeared in the sky\non {B_ATK_TEAM2} team's side!"); static const u8 sText_TheRainbowDisappeared[] = _("The rainbow on {B_ATK_TEAM2}\nside disappeared!"); @@ -869,6 +870,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ARAINBOWAPPEAREDONSIDE - BATTLESTRINGS_TABLE_START] = sText_ARainbowAppearedOnSide, [STRINGID_THETWOMOVESBECOMEONE - BATTLESTRINGS_TABLE_START] = sText_TheTwoMovesBecomeOne, [STRINGID_ZEROTOHEROTRANSFORMATION - BATTLESTRINGS_TABLE_START] = sText_ZeroToHeroTransformation, + [STRINGID_COMMANDERACTIVATES - BATTLESTRINGS_TABLE_START] = sText_CommanderActivates, [STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE - BATTLESTRINGS_TABLE_START] = sText_PkmnTellChillingReceptionJoke, [STRINGID_MOVEBLOCKEDBYDYNAMAX - BATTLESTRINGS_TABLE_START] = sText_MoveBlockedByDynamax, [STRINGID_TARGETISHURTBYSALTCURE - BATTLESTRINGS_TABLE_START] = sText_TargetIsHurtBySaltCure, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ec5d2f61a0..897bf1dab3 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -337,8 +337,6 @@ static bool8 CanBurnHitThaw(u16 move); static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent); static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove); static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move); -static void SaveBattlerAttacker(u32 battler); -static void SaveBattlerTarget(u32 battler); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -1197,6 +1195,13 @@ static void Cmd_attackcanceler(void) u16 attackerAbility = GetBattlerAbility(gBattlerAttacker); u32 moveType = GetMoveType(gCurrentMove); + if (gBattleStruct->usedEjectItem & (1u << gBattlerAttacker)) + { + gBattleStruct->usedEjectItem = 0; + gCurrentActionFuncId = B_ACTION_TRY_FINISH; + return; + } + // Weight-based moves are blocked by Dynamax. if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && IsMoveBlockedByDynamax(gCurrentMove)) { @@ -1516,14 +1521,17 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } // If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits. - else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD + && !(gStatuses3[gBattlerTarget] & STATUS3_COMMANDER) + && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { if (!JumpIfMoveFailed(7, move)) RecordAbilityBattle(gBattlerAttacker, ABILITY_NO_GUARD); return TRUE; } // If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits. - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD + && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { if (!JumpIfMoveFailed(7, move)) RecordAbilityBattle(gBattlerTarget, ABILITY_NO_GUARD); @@ -1531,8 +1539,8 @@ static bool32 AccuracyCalcHelper(u16 move) } // If the target is under the effects of Telekinesis, and the move isn't a OH-KO move, move hits. else if (gStatuses3[gBattlerTarget] & STATUS3_TELEKINESIS - && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE) - && gMovesInfo[move].effect != EFFECT_OHKO) + && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE) + && gMovesInfo[move].effect != EFFECT_OHKO) { JumpIfMoveFailed(7, move); return TRUE; @@ -1544,10 +1552,11 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } - if ((gStatuses3[gBattlerTarget] & STATUS3_PHANTOM_FORCE) - || ((gStatuses3[gBattlerTarget] & STATUS3_ON_AIR) && !(gMovesInfo[move].damagesAirborne || gMovesInfo[move].damagesAirborneDoubleDamage)) - || ((gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND) && !gMovesInfo[move].damagesUnderground) - || ((gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER) && !gMovesInfo[move].damagesUnderwater)) + if ((gStatuses3[gBattlerTarget] & STATUS3_COMMANDER) + || (gStatuses3[gBattlerTarget] & STATUS3_PHANTOM_FORCE) + || ((gStatuses3[gBattlerTarget] & STATUS3_ON_AIR) && !(gMovesInfo[move].damagesAirborne || gMovesInfo[move].damagesAirborneDoubleDamage)) + || ((gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND) && !gMovesInfo[move].damagesUnderground) + || ((gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER) && !gMovesInfo[move].damagesUnderwater)) { gMoveResultFlags |= MOVE_RESULT_MISSED; JumpIfMoveFailed(7, move); @@ -2943,9 +2952,10 @@ void SetMoveEffect(bool32 primary, bool32 certain) INCREMENT_RESET_RETURN if (!(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT) - && TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove) - && !primary - && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) + && TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove) + && !(gMovesInfo[gCurrentMove].effect == EFFECT_ORDER_UP && gBattleStruct->commanderActive[gBattlerAttacker]) + && !primary + && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) INCREMENT_RESET_RETURN if (!IsBattlerAlive(gEffectBattler) && !activateAfterFaint) @@ -3919,6 +3929,43 @@ void SetMoveEffect(bool32 primary, bool32 certain) gBattlescriptCurrInstr = BattleScript_LowerAtkSpAtk; } break; + case MOVE_EFFECT_ORDER_UP: + { + u32 stat = 0; + bool32 commanderAffected = TRUE; + switch (gBattleStruct->commanderActive[gEffectBattler]) + { + case SPECIES_TATSUGIRI_CURLY: + stat = STAT_ATK; + break; + case SPECIES_TATSUGIRI_DROOPY: + stat = STAT_DEF; + break; + case SPECIES_TATSUGIRI_STRETCHY: + stat = STAT_SPEED; + break; + default: + commanderAffected = FALSE; + break; + } + if (!commanderAffected + || NoAliveMonsForEitherParty() + || ChangeStatBuffs(SET_STAT_BUFF_VALUE(1), + stat, + affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, + 0) == STAT_CHANGE_DIDNT_WORK) + { + gBattlescriptCurrInstr++; + } + else + { + gBattleScripting.animArg1 = gBattleScripting.moveEffect & ~(MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN); + gBattleScripting.animArg2 = 0; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_StatUp; + } + } + break; } } } @@ -5482,17 +5529,17 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef) static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent) { - u32 i; - for (i = 0; i < MAX_BATTLERS_COUNT; i++) + u32 battler; + for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) { - if (i != gBattlerAttacker - && !(excludeCurrent && i == gBattlerTarget) - && IsBattlerAlive(i) - && !(gBattleStruct->targetsDone[gBattlerAttacker] & (1u << i)) - && (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) - break; + if (battler != gBattlerAttacker + && !(excludeCurrent && battler == gBattlerTarget) + && IsBattlerAlive(battler) + && !(gBattleStruct->targetsDone[gBattlerAttacker] & (1u << battler)) + && (GetBattlerSide(battler) != GetBattlerSide(gBattlerAttacker) || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) + break; } - return i; + return battler; } static void Cmd_moveend(void) @@ -6245,6 +6292,7 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection effect = TRUE; BattleScriptPushCursor(); + gBattleStruct->usedEjectItem |= 1u << battler; if (ejectButtonBattlers & (1u << battler)) { gBattlescriptCurrInstr = BattleScript_EjectButtonActivates; @@ -6314,8 +6362,15 @@ static void Cmd_moveend(void) if (gMovesInfo[gCurrentMove].effect == EFFECT_HIT_ESCAPE) gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_RedCardActivates; - gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage = TRUE; + if (gBattleStruct->commanderActive[gBattlerAttacker] != SPECIES_NONE) + { + gBattlescriptCurrInstr = BattleScript_RedCardActivationNoSwitch; + } + else + { + gBattlescriptCurrInstr = BattleScript_RedCardActivates; + gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage = TRUE; + } effect = TRUE; break; // Only fastest red card activates } @@ -6478,8 +6533,6 @@ static void Cmd_moveend(void) && (gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) != STATUS2_LOCK_CONFUSE_TURN(1)) // And won't end this turn CancelMultiTurnMoves(gBattlerAttacker); // Cancel it - - if (gBattleStruct->savedAttackerCount > 0) { // #if TESTING @@ -6525,6 +6578,18 @@ static void Cmd_moveend(void) if (B_CHARGE <= GEN_8 || moveType == TYPE_ELECTRIC) gStatuses3[gBattlerAttacker] &= ~(STATUS3_CHARGED_UP); memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); + + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleStruct->commanderActive[i] != SPECIES_NONE && !IsBattlerAlive(i)) + { + u32 partner = BATTLE_PARTNER(i); + gBattleStruct->commanderActive[i] = SPECIES_NONE; + if (IsBattlerAlive(partner)) + gStatuses3[partner] &= ~STATUS3_COMMANDER; + } + } + gBattleScripting.moveendState++; break; case MOVEEND_COUNT: @@ -7425,6 +7490,7 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) switch (GetBattlerAbility(i)) { case ABILITY_TRACE: + case ABILITY_COMMANDER: if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0)) return TRUE; break; @@ -12567,7 +12633,7 @@ static void Cmd_transformdataexecution(void) gBattlescriptCurrInstr = cmd->nextInstr; if (gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED || gBattleStruct->illusion[gBattlerTarget].on - || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE) + || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE_NO_COMMANDER) { gMoveResultFlags |= MOVE_RESULT_FAILED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TRANSFORM_FAILED; @@ -13357,7 +13423,8 @@ static void Cmd_trysetperishsong(void) { if (gStatuses3[i] & STATUS3_PERISH_SONG || GetBattlerAbility(i) == ABILITY_SOUNDPROOF - || BlocksPrankster(gCurrentMove, gBattlerAttacker, i, TRUE)) + || BlocksPrankster(gCurrentMove, gBattlerAttacker, i, TRUE) + || gStatuses3[i] & STATUS3_COMMANDER) { notAffectedCount++; } @@ -15767,7 +15834,7 @@ static void Cmd_callnative(void) // Callnative Funcs -static void SaveBattlerTarget(u32 battler) +void SaveBattlerTarget(u32 battler) { if (gBattleStruct->savedTargetCount < NELEMS(gBattleStruct->savedBattlerTarget)) gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount++] = battler; @@ -15775,7 +15842,7 @@ static void SaveBattlerTarget(u32 battler) DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerTarget array size!"); } -static void SaveBattlerAttacker(u32 battler) +void SaveBattlerAttacker(u32 battler) { if (gBattleStruct->savedAttackerCount < NELEMS(gBattleStruct->savedBattlerAttacker)) gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount++] = battler; @@ -17344,3 +17411,15 @@ void BS_TryRevivalBlessing(void) MarkBattlerForControllerExec(gBattlerAttacker); } } + +void BS_JumpIfCommanderActive(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + + if (gBattleStruct->commanderActive[gBattlerTarget] != SPECIES_NONE) + gBattlescriptCurrInstr = cmd->jumpInstr; + else if (gStatuses3[gBattlerTarget] & STATUS3_COMMANDER) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/battle_util.c b/src/battle_util.c index e0e5fe2485..e32e21cf2a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -130,7 +130,9 @@ void HandleAction_UseMove(void) u16 moveTarget; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - if (gBattleStruct->absentBattlerFlags & (1u << gBattlerAttacker) || !IsBattlerAlive(gBattlerAttacker)) + if (gBattleStruct->absentBattlerFlags & (1u << gBattlerAttacker) + || gBattleStruct->commandingDondozo & (1u << gBattlerAttacker) + || !IsBattlerAlive(gBattlerAttacker)) { gCurrentActionFuncId = B_ACTION_FINISHED; return; @@ -4113,7 +4115,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 u32 moveType, move; u32 side; u32 i, j; - u32 partner; + u32 partner = 0; struct Pokemon *mon; if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) @@ -4404,7 +4406,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !(gBattleMons[BATTLE_OPPOSITE(battler)].status2 & (STATUS2_TRANSFORMED | STATUS2_SUBSTITUTE)) && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && !(gBattleStruct->illusion[BATTLE_OPPOSITE(battler)].on) - && !(gStatuses3[BATTLE_OPPOSITE(battler)] & STATUS3_SEMI_INVULNERABLE)) + && !(gStatuses3[BATTLE_OPPOSITE(battler)] & STATUS3_SEMI_INVULNERABLE_NO_COMMANDER)) { gBattlerAttacker = battler; gBattlerTarget = BATTLE_OPPOSITE(battler); @@ -4907,7 +4909,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !(gBattleStruct->transformZeroToHero[side] & (1u << gBattlerPartyIndexes[battler]))) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattlerAttacker = battler; gBattleStruct->transformZeroToHero[side] |= 1u << gBattlerPartyIndexes[battler]; BattleScriptPushCursorAndCallback(BattleScript_ZeroToHeroActivates); effect++; @@ -4980,6 +4981,28 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect++; } break; + case ABILITY_COMMANDER: + partner = BATTLE_PARTNER(battler); + if (!gSpecialStatuses[battler].switchInAbilityDone + && gBattleStruct->commanderActive[partner] == SPECIES_NONE + && gBattleMons[partner].species == SPECIES_DONDOZO + && GET_BASE_SPECIES_ID(GetMonData(GetPartyBattlerData(battler), MON_DATA_SPECIES)) == SPECIES_TATSUGIRI) + { + SaveBattlerAttacker(gBattlerAttacker); + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + gBattlerAttacker = partner; + gBattleStruct->commandingDondozo |= 1u << battler; + gBattleStruct->commanderActive[partner] = gBattleMons[battler].species; + gStatuses3[battler] |= STATUS3_COMMANDER; + if (gBattleMons[battler].status2 & STATUS2_CONFUSION + && !(gStatuses4[battler] & STATUS4_INFINITE_CONFUSION)) + gBattleMons[battler].status2 -= STATUS2_CONFUSION_TURN(1); + BtlController_EmitSpriteInvisibility(battler, BUFFER_A, TRUE); + MarkBattlerForControllerExec(battler); + BattleScriptPushCursorAndCallback(BattleScript_CommanderActivates); + effect++; + } + break; } break; case ABILITYEFFECT_ENDTURN: @@ -6519,7 +6542,9 @@ u32 IsAbilityPreventingEscape(u32 battler) bool32 CanBattlerEscape(u32 battler) // no ability check { - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_SHED_SHELL) + if (gBattleStruct->commanderActive[battler] != SPECIES_NONE) + return FALSE; + else if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_SHED_SHELL) return TRUE; else if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return TRUE; diff --git a/src/data/abilities.h b/src/data/abilities.h index 7c67f2da17..30a34ffe90 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -2141,6 +2141,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = .cantBeSwapped = TRUE, .cantBeTraced = TRUE, .cantBeSuppressed = TRUE, + .cantBeOverwritten = TRUE, }, [ABILITY_ELECTROMORPHOSIS] = diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index ead7cee6f1..776563bbec 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -2255,4 +2255,10 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, + + [EFFECT_ORDER_UP] = + { + .battleScript = BattleScript_EffectHit, + .battleTvScore = 0, // TODO: Assign points + }, }; diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 74e12c4e7a..0d754f479d 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -19325,7 +19325,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Boosts a user's stats\n" "depending on Tatsugiri."), - .effect = EFFECT_PLACEHOLDER, // EFFECT_ORDER_UP + .effect = EFFECT_ORDER_UP, .power = 80, .type = TYPE_DRAGON, .accuracy = 100, @@ -19335,6 +19335,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_ORDER_UP, + .self = TRUE, + .chance = 100, + }), .battleAnimScript = gBattleAnimMove_OrderUp, }, diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c new file mode 100644 index 0000000000..af02f971a3 --- /dev/null +++ b/test/battle/ability/commander.c @@ -0,0 +1,423 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Commander will activate once Dondozo switches in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(playerLeft, 2); } + } SCENE { + ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + } +} + +DOUBLE_BATTLE_TEST("Commander increases all stats by 2 stages once it is triggered") +{ + GIVEN { + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Dondozo's Attack sharply rose!"); + MESSAGE("Dondozo's Defense sharply rose!"); + MESSAGE("Dondozo's Sp. Atk sharply rose!"); + MESSAGE("Dondozo's Sp. Def sharply rose!"); + MESSAGE("Dondozo's Speed sharply rose!"); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri avoids moves targetted towards it") +{ + GIVEN { + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); MOVE(opponentRight, MOVE_POUND, target: playerRight); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + MESSAGE("Foe Wobbuffet's attack missed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take residual damage from a field effect while inside Dondozo") +{ + GIVEN { + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_TYRANITAR) { Ability(ABILITY_SAND_STREAM); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ABILITY_POPUP(opponentLeft, ABILITY_SAND_STREAM); + MESSAGE("Dondozo is buffeted by the sandstorm!"); + MESSAGE("Tatsugiri is buffeted by the sandstorm!"); + MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take poison damage if while inside Dondozo") +{ + GIVEN { + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); Status1(STATUS1_POISON); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + MESSAGE("Tatsugiri is hurt by poison!"); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri still avoids moves even when the attacker has No Guard") +{ + GIVEN { + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_MACHAMP) { Ability(ABILITY_NO_GUARD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + MESSAGE("Foe Machamp's attack missed!"); + } +} + +DOUBLE_BATTLE_TEST("Commander cannot affect a Dondozo that was previously affected by Commander until it faints and revived") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_DONDOZO); + PLAYER(SPECIES_TATSUGIRI) { HP(1); Ability(ABILITY_COMMANDER); Status1(STATUS1_POISON); } + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_CELEBRATE); SWITCH(playerLeft, 2); SEND_OUT(playerLeft, 3); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + MESSAGE("Tatsugiri is hurt by poison!"); + NONE_OF { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + } + } +} + +DOUBLE_BATTLE_TEST("Commander prevents Whirlwind from working against Dondozo or Tatsugiri while it's active") +{ + GIVEN { + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_WHIRLWIND, target: playerLeft); } + TURN { MOVE(opponentRight, MOVE_WHIRLWIND, target: playerRight); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("But it failed!"); + MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("But it failed!"); + } +} + +DOUBLE_BATTLE_TEST("Commander prevents Red Card from working while Commander is active") +{ + GIVEN { + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + } THEN { + EXPECT(opponentLeft->item == ITEM_NONE); + EXPECT(playerRight->species == SPECIES_DONDOZO); + } + +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri is not damaged by a double target move if Dondozo faints") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_DONDOZO) { HP(1); }; + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SURF); SEND_OUT(playerLeft, 2); } + } SCENE { + ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + HP_BAR(playerLeft); + MESSAGE("Dondozo fainted!"); + NOT HP_BAR(playerRight); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri takes no damage from multi-target damaging moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SURF); MOVE(opponentRight, MOVE_SURF); SWITCH(playerLeft, 2); } + } SCENE { + ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); + HP_BAR(playerLeft); + NOT HP_BAR(playerRight); + HP_BAR(opponentRight); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentRight); + HP_BAR(playerLeft); + HP_BAR(opponentLeft); + NOT HP_BAR(playerRight); + } +} + +DOUBLE_BATTLE_TEST("Commander doesn't prevent Transform from working on a Commander Tatsugiri") +{ + GIVEN { + PLAYER(SPECIES_DONDOZO); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_TRANSFORM, target: playerRight); } + } SCENE { + ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Commander doesn't prevent Imposter from working on a Commander Tatsugiri") +{ + GIVEN { + PLAYER(SPECIES_DONDOZO); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_DITTO) { Ability(ABILITY_IMPOSTER); } + } WHEN { + TURN { } + TURN { SWITCH(opponentRight, 2); } + } SCENE { + ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ABILITY_POPUP(opponentRight, ABILITY_IMPOSTER); + MESSAGE("Foe Ditto transformed into Tatsugiri using Imposter!"); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri is still affected by Haze while controlling Dondozo") +{ + GIVEN { + PLAYER(SPECIES_DONDOZO); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_PERISH_SONG); } + TURN {} + TURN {} + TURN {} + } SCENE { + ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PERISH_SONG, opponentLeft); + MESSAGE("All affected POKéMON will faint in three turns!"); + MESSAGE("Dondozo's PERISH count fell to 0!"); + MESSAGE("Dondozo fainted!"); + MESSAGE("Foe Wobbuffet's PERISH count fell to 0!"); + MESSAGE("Foe Wobbuffet fainted!"); + NONE_OF { + MESSAGE("Tatsugiri's PERISH count fell to 0!"); + MESSAGE("Tatsugiri fainted!"); + } + MESSAGE("Foe Wynaut's PERISH count fell to 0!"); + MESSAGE("Foe Wynaut fainted!"); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri is still affected by Haze while controlling Dondozo") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_SWORDS_DANCE); } + TURN { SWITCH(playerLeft, 2); MOVE(opponentRight, MOVE_HAZE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, playerRight); + ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HAZE, opponentRight); + } THEN { + EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } +} + +DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Left Slot)") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_TACKLE, target: opponentLeft); } + TURN { SWITCH(playerLeft, 2); MOVE(opponentLeft, MOVE_SURF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + ABILITY_POPUP(playerRight, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); + HP_BAR(playerLeft); + MESSAGE("Foe Wobbuffet's attack missed!"); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Right Slot)") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentRight, MOVE_TACKLE, target: opponentLeft); } + TURN { SWITCH(playerRight, 2); MOVE(opponentLeft, MOVE_SURF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + MESSAGE("Foe Wobbuffet's attack missed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); + HP_BAR(playerRight); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri does not attack if Dondozo faints the same turn it's switched in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + SWITCH(playerLeft, 2); + MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); + MOVE(opponentRight, MOVE_TACKLE, target: playerRight); + MOVE(playerRight, MOVE_CELEBRATE); + SEND_OUT(playerLeft, 0); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + HP_BAR(playerLeft); + MESSAGE("Dondozo fainted!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + HP_BAR(playerRight); + NOT MESSAGE("Tatsugiri used Celebrate!"); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri does not get hit by Dragon Darts when a commanded Dondozo faints") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_DARTS].effect == EFFECT_DRAGON_DARTS); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_DONDOZO) { HP(1); } + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { SWITCH(playerLeft, 2); MOVE(opponentRight, MOVE_DRAGON_DARTS, target: playerRight); SEND_OUT(playerRight, 0); } + } SCENE { + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, opponentRight); + MESSAGE("Dondozo fainted!"); + NOT HP_BAR(playerLeft); + } +} + +DOUBLE_BATTLE_TEST("Commander Tatsugiri does not get hit by Dragon Darts when commanding Dondozo") +{ + bool32 targetPlayerRight; + PARAMETRIZE { targetPlayerRight = TRUE; } + PARAMETRIZE { targetPlayerRight = FALSE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_DARTS].effect == EFFECT_DRAGON_DARTS); + PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + if (targetPlayerRight == TRUE) + TURN { MOVE(opponentRight, MOVE_DRAGON_DARTS, target: playerRight); } + else + TURN { MOVE(opponentRight, MOVE_DRAGON_DARTS, target: playerLeft); } + } SCENE { + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, opponentRight); + HP_BAR(playerRight); + NOT HP_BAR(playerLeft); + HP_BAR(playerRight); + NOT HP_BAR(playerLeft); + } +} diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index da358c2aa9..f53a270d82 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -208,3 +208,27 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered after High Jump Kick crash dam } } } + +DOUBLE_BATTLE_TEST("Eject Button activation will not trigger an attack from the incoming mon") +{ + GIVEN { + PLAYER(SPECIES_TATSUGIRI) { Speed(10); Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_WOBBUFFET) { Speed(100); Item(ITEM_EJECT_BUTTON); } + PLAYER(SPECIES_DONDOZO) { Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Item(ITEM_EJECT_PACK); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WYNAUT) { Speed(1); } + } WHEN { + TURN { MOVE(opponentRight, MOVE_MAKE_IT_RAIN); SEND_OUT(playerRight, 2); SEND_OUT(opponentRight, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, opponentRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + MESSAGE("Wobbuffet is switched out with the Eject Button!"); + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("Wobbuffet is switched out with the Eject Pack!"); + } + } +} diff --git a/test/battle/move_effect_secondary/order_up.c b/test/battle/move_effect_secondary/order_up.c new file mode 100644 index 0000000000..ea1980062c --- /dev/null +++ b/test/battle/move_effect_secondary/order_up.c @@ -0,0 +1,172 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_ORDER_UP].additionalEffects[0].moveEffect == MOVE_EFFECT_ORDER_UP); +} + +DOUBLE_BATTLE_TEST("Order Up increases a stat based on Tatsugiri's form") +{ + u32 species = 0; + PARAMETRIZE { species = SPECIES_TATSUGIRI_CURLY; } + PARAMETRIZE { species = SPECIES_TATSUGIRI_DROOPY; } + PARAMETRIZE { species = SPECIES_TATSUGIRI_STRETCHY; } + + GIVEN { + PLAYER(species) { Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }; + } WHEN { + TURN { MOVE(opponentRight, MOVE_HAZE); MOVE(playerRight, MOVE_ORDER_UP, target: opponentLeft); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HAZE, opponentRight); // Remove previous stat boosts + ANIMATION(ANIM_TYPE_MOVE, MOVE_ORDER_UP, playerRight); + switch (species) + { + case SPECIES_TATSUGIRI_CURLY: + MESSAGE("Dondozo's Attack rose!"); + break; + case SPECIES_TATSUGIRI_DROOPY: + MESSAGE("Dondozo's Defense rose!"); + break; + case SPECIES_TATSUGIRI_STRETCHY: + MESSAGE("Dondozo's Speed rose!"); + break; + } + } THEN { + switch (species) + { + case SPECIES_TATSUGIRI_CURLY: + EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + break; + case SPECIES_TATSUGIRI_DROOPY: + EXPECT_EQ(playerRight->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); + break; + case SPECIES_TATSUGIRI_STRETCHY: + EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + break; + } + } +} + +DOUBLE_BATTLE_TEST("Order Up increases a stat based on Tatsugiri's form even if Tatsugiri fainted inside Dondozo") +{ + u32 species = 0; + PARAMETRIZE { species = SPECIES_TATSUGIRI_CURLY; } + PARAMETRIZE { species = SPECIES_TATSUGIRI_DROOPY; } + PARAMETRIZE { species = SPECIES_TATSUGIRI_STRETCHY; } + + GIVEN { + PLAYER(species) { HP(1); Status1(STATUS1_POISON); Ability(ABILITY_COMMANDER); } + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }; + } WHEN { + TURN { } + TURN { MOVE(opponentRight, MOVE_HAZE); MOVE(playerRight, MOVE_ORDER_UP, target: opponentLeft); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); + MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Tatsugiri is hurt by poison!"); + MESSAGE("Tatsugiri fainted!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HAZE, opponentRight); // Remove previous stat boosts + ANIMATION(ANIM_TYPE_MOVE, MOVE_ORDER_UP, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + switch (species) + { + case SPECIES_TATSUGIRI_CURLY: + MESSAGE("Dondozo's Attack rose!"); + break; + case SPECIES_TATSUGIRI_DROOPY: + MESSAGE("Dondozo's Defense rose!"); + break; + case SPECIES_TATSUGIRI_STRETCHY: + MESSAGE("Dondozo's Speed rose!"); + break; + } + } THEN { + switch (species) + { + case SPECIES_TATSUGIRI_CURLY: + EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + break; + case SPECIES_TATSUGIRI_DROOPY: + EXPECT_EQ(playerRight->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); + break; + case SPECIES_TATSUGIRI_STRETCHY: + EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + break; + } + } +} + +DOUBLE_BATTLE_TEST("Order up does not boosts any stats if Dondozo is not affected by Commander") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_DONDOZO); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_ORDER_UP, target: opponentLeft); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + } +} + +DOUBLE_BATTLE_TEST("Order Up is boosted by Sheer Force without removing the stat boosting effect") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ENTRAINMENT].effect == EFFECT_ENTRAINMENT); + PLAYER(SPECIES_DONDOZO) { Speed(10); } + PLAYER(SPECIES_TATSUGIRI_CURLY) { Speed(9); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_TAUROS) { Speed(21); Ability(ABILITY_SHEER_FORCE); } + } WHEN { + TURN { MOVE(opponentRight, MOVE_ENTRAINMENT, target: playerLeft); MOVE(playerLeft, MOVE_ORDER_UP, target: opponentLeft); } + } SCENE { + MESSAGE("Foe Tauros used Entrainment!"); + MESSAGE("Dondozo acquired Sheer Force!"); + MESSAGE("Dondozo used Order Up!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + } +} +DOUBLE_BATTLE_TEST("Order Up is always boosted by Sheer Force", s16 damage) +{ + u32 move; + u32 ability; + PARAMETRIZE(move = MOVE_CELEBRATE, ability = ABILITY_STORM_DRAIN); + PARAMETRIZE(move = MOVE_ENTRAINMENT, ability = ABILITY_STORM_DRAIN); + PARAMETRIZE(move = MOVE_ENTRAINMENT, ability = ABILITY_COMMANDER); + + GIVEN { + ASSUME(gMovesInfo[MOVE_HAZE].effect == EFFECT_HAZE); + ASSUME(gMovesInfo[MOVE_ENTRAINMENT].effect == EFFECT_ENTRAINMENT); + PLAYER(SPECIES_DONDOZO) { Speed(10); } + PLAYER(SPECIES_TATSUGIRI_CURLY) { Speed(9); Ability(ability); } + OPPONENT(SPECIES_TAUROS) { Speed(21); Ability(ABILITY_SHEER_FORCE); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(22); } + } WHEN { + TURN { MOVE(opponentRight, MOVE_HAZE); + MOVE(opponentLeft, move, target: playerLeft); + MOVE(playerLeft, MOVE_ORDER_UP, target: opponentRight); } + } SCENE { + MESSAGE("Foe Wobbuffet used Haze!"); + if (move == MOVE_ENTRAINMENT) + { + MESSAGE("Foe Tauros used Entrainment!"); + MESSAGE("Dondozo acquired Sheer Force!"); + } + MESSAGE("Dondozo used Order Up!"); + HP_BAR(opponentRight, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(1.3), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(1.3), results[2].damage); + } +} From 1c022f4d34ef4fdf6a894815fd4b4617b15932ed Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sun, 29 Sep 2024 16:05:54 -0500 Subject: [PATCH 251/544] Fix Jubilife Muffin full heal effect + better full heal tests (#5444) --- src/data/items.h | 1 + test/battle/item_effect/cure_status.c | 81 +++++++++++++++++++-------- 2 files changed, 60 insertions(+), 22 deletions(-) diff --git a/src/data/items.h b/src/data/items.h index adfb1914a2..75629d579f 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -13867,6 +13867,7 @@ const struct Item gItemsInfo[] = .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, .battleUsage = EFFECT_ITEM_CURE_STATUS, + .effect = gItemEffect_FullHeal, .flingPower = 30, .iconPic = gItemIcon_JubilifeMuffin, .iconPalette = gItemIconPalette_JubilifeMuffin, diff --git a/test/battle/item_effect/cure_status.c b/test/battle/item_effect/cure_status.c index 6c7cc2e64d..7f5601ab3c 100644 --- a/test/battle/item_effect/cure_status.c +++ b/test/battle/item_effect/cure_status.c @@ -94,11 +94,14 @@ SINGLE_BATTLE_TEST("Burn Heal heals a battler from being burned") } } -SINGLE_BATTLE_TEST("Ice Heal heals a battler from being frozen") +SINGLE_BATTLE_TEST("Ice Heal heals a battler from being frozen or frostbite") { + u16 status; + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_ICE_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); - PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { USE_ITEM(player, ITEM_ICE_HEAL, partyIndex: 0); } @@ -112,12 +115,13 @@ SINGLE_BATTLE_TEST("Ice Heal heals a battler from being frozen") SINGLE_BATTLE_TEST("Full Heal heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_FULL_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -134,12 +138,13 @@ SINGLE_BATTLE_TEST("Full Heal heals a battler from any primary status") SINGLE_BATTLE_TEST("Heal Powder heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_HEAL_POWDER].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -156,12 +161,13 @@ SINGLE_BATTLE_TEST("Heal Powder heals a battler from any primary status") SINGLE_BATTLE_TEST("Pewter Crunchies heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_PEWTER_CRUNCHIES].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -178,12 +184,13 @@ SINGLE_BATTLE_TEST("Pewter Crunchies heals a battler from any primary status") SINGLE_BATTLE_TEST("Lava Cookies heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_LAVA_COOKIE].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -200,12 +207,13 @@ SINGLE_BATTLE_TEST("Lava Cookies heals a battler from any primary status") SINGLE_BATTLE_TEST("Rage Candy Bar heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_RAGE_CANDY_BAR].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -222,12 +230,13 @@ SINGLE_BATTLE_TEST("Rage Candy Bar heals a battler from any primary status") SINGLE_BATTLE_TEST("Old Gateu heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_OLD_GATEAU].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -244,12 +253,13 @@ SINGLE_BATTLE_TEST("Old Gateu heals a battler from any primary status") SINGLE_BATTLE_TEST("Casteliacone heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_CASTELIACONE].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -266,12 +276,13 @@ SINGLE_BATTLE_TEST("Casteliacone heals a battler from any primary status") SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_LUMIOSE_GALETTE].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -288,12 +299,13 @@ SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") SINGLE_BATTLE_TEST("Shalour Sable heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_SHALOUR_SABLE].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -310,12 +322,13 @@ SINGLE_BATTLE_TEST("Shalour Sable heals a battler from any primary status") SINGLE_BATTLE_TEST("Big Malasada heals a battler from any primary status") { u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_BURN; } PARAMETRIZE { status = STATUS1_FREEZE; } PARAMETRIZE { status = STATUS1_PARALYSIS; } - PARAMETRIZE { status = STATUS1_POISON; } PARAMETRIZE { status = STATUS1_TOXIC_POISON; } - PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } GIVEN { ASSUME(gItemsInfo[ITEM_BIG_MALASADA].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET) { Status1(status); } @@ -329,6 +342,29 @@ SINGLE_BATTLE_TEST("Big Malasada heals a battler from any primary status") } } +SINGLE_BATTLE_TEST("Jubilife Muffin heals a battler from any primary status") +{ + u16 status; + PARAMETRIZE { status = STATUS1_SLEEP; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_FROSTBITE; } + GIVEN { + ASSUME(gItemsInfo[ITEM_JUBILIFE_MUFFIN].battleUsage == EFFECT_ITEM_CURE_STATUS); + PLAYER(SPECIES_WOBBUFFET) { Status1(status); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { USE_ITEM(player, ITEM_JUBILIFE_MUFFIN, partyIndex: 0); } + } SCENE { + MESSAGE("Wobbuffet had its status healed!"); + } THEN { + EXPECT_EQ(player->status1, STATUS1_NONE); + } +} + SINGLE_BATTLE_TEST("Full Heal, Heal Powder and Local Specialties heal a battler from being confused") { u16 item; @@ -342,6 +378,7 @@ SINGLE_BATTLE_TEST("Full Heal, Heal Powder and Local Specialties heal a battler PARAMETRIZE { item = ITEM_LUMIOSE_GALETTE; } PARAMETRIZE { item = ITEM_SHALOUR_SABLE; } PARAMETRIZE { item = ITEM_BIG_MALASADA; } + PARAMETRIZE { item = ITEM_JUBILIFE_MUFFIN; } GIVEN { ASSUME(gItemsInfo[item].battleUsage == EFFECT_ITEM_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET); From c8cc0fa5a34f15b2ff1841dc380f215da677ff1f Mon Sep 17 00:00:00 2001 From: Jaizu Date: Tue, 1 Oct 2024 10:07:45 +0200 Subject: [PATCH 252/544] Ignore mGBA screenshots Everytime I make a new project I suffer, please merge. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 9fa431e143..f940d26b21 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,5 @@ prefabs.json *.diff *.sym *.js +/pokeemerald-*.png +/pokeemerald_modern-*.png From b93e58266e03e9c9a9592ededa40629b67604bdd Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:43:58 +0200 Subject: [PATCH 253/544] Fixes recoil moves not triggering berries if possible (#5449) * Fixes recoil moves not triggering berries if possible * Update battle_script_commands.h --- include/constants/battle_script_commands.h | 84 +++++++++++----------- src/battle_script_commands.c | 7 +- test/battle/hold_effect/restore_hp.c | 36 ++++++++++ 3 files changed, 86 insertions(+), 41 deletions(-) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 03173c43cf..901a76c1a8 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -273,46 +273,50 @@ #define PARTY_SCREEN_OPTIONAL (1 << 7) // Flag for first argument to openpartyscreen // cases for Cmd_moveend -#define MOVEEND_SUM_DAMAGE 0 -#define MOVEEND_PROTECT_LIKE_EFFECT 1 -#define MOVEEND_RAGE 2 -#define MOVEEND_SYNCHRONIZE_TARGET 3 -#define MOVEEND_ABILITIES 4 -#define MOVEEND_ABILITIES_ATTACKER 5 -#define MOVEEND_STATUS_IMMUNITY_ABILITIES 6 -#define MOVEEND_SYNCHRONIZE_ATTACKER 7 -#define MOVEEND_CHOICE_MOVE 8 -#define MOVEEND_ATTACKER_INVISIBLE 9 -#define MOVEEND_ATTACKER_VISIBLE 10 -#define MOVEEND_TARGET_VISIBLE 11 -#define MOVEEND_ITEM_EFFECTS_TARGET 12 -#define MOVEEND_MOVE_EFFECTS2 13 -#define MOVEEND_ITEM_EFFECTS_ALL 14 -#define MOVEEND_KINGSROCK 15 // These item effects will occur each strike of a multi-hit move -#define MOVEEND_NUM_HITS 16 -#define MOVEEND_SUBSTITUTE 17 -#define MOVEEND_SKY_DROP_CONFUSE 18 -#define MOVEEND_UPDATE_LAST_MOVES 19 -#define MOVEEND_MIRROR_MOVE 20 -#define MOVEEND_NEXT_TARGET 21 // Everything up until here is handled for each strike of a multi-hit move -#define MOVEEND_MULTIHIT_MOVE 22 -#define MOVEEND_DEFROST 23 -#define MOVEEND_RECOIL 24 -#define MOVEEND_MAGICIAN 25 // Occurs after final multi-hit strike, and after other items/abilities would activate -#define MOVEEND_EJECT_ITEMS 26 -#define MOVEEND_WHITE_HERB 27 -#define MOVEEND_RED_CARD 28 -#define MOVEEND_LIFEORB_SHELLBELL 29 // Includes shell bell, throat spray, etc -#define MOVEEND_CHANGED_ITEMS 30 -#define MOVEEND_PICKPOCKET 31 -#define MOVEEND_DANCER 32 -#define MOVEEND_EMERGENCY_EXIT 33 -#define MOVEEND_SYMBIOSIS 34 -#define MOVEEND_OPPORTUNIST 35 // Occurs after other stat change items/abilities to try and copy the boosts -#define MOVEEND_SAME_MOVE_TURNS 36 -#define MOVEEND_SET_EVOLUTION_TRACKER 37 -#define MOVEEND_CLEAR_BITS 38 -#define MOVEEND_COUNT 39 +enum MoveEndEffects +{ + MOVEEND_SUM_DAMAGE, + MOVEEND_PROTECT_LIKE_EFFECT, + MOVEEND_RAGE, + MOVEEND_SYNCHRONIZE_TARGET, + MOVEEND_ABILITIES, + MOVEEND_ABILITIES_ATTACKER, + MOVEEND_STATUS_IMMUNITY_ABILITIES, + MOVEEND_SYNCHRONIZE_ATTACKER, + MOVEEND_CHOICE_MOVE, + MOVEEND_ATTACKER_INVISIBLE, + MOVEEND_ATTACKER_VISIBLE, + MOVEEND_TARGET_VISIBLE, + MOVEEND_ITEM_EFFECTS_TARGET, + MOVEEND_MOVE_EFFECTS2, + MOVEEND_ITEM_EFFECTS_ALL, + MOVEEND_KINGSROCK, // These item effects will occur each strike of a multi-hit move + MOVEEND_NUM_HITS, + MOVEEND_SUBSTITUTE, + MOVEEND_SKY_DROP_CONFUSE, + MOVEEND_UPDATE_LAST_MOVES, + MOVEEND_MIRROR_MOVE, + MOVEEND_NEXT_TARGET, // Everything up until here is handled for each strike of a multi-hit move + MOVEEND_MULTIHIT_MOVE, + MOVEEND_DEFROST, + MOVEEND_RECOIL, + MOVEEND_ITEM_EFFECTS_ATTACKER, + MOVEEND_MAGICIAN, // Occurs after final multi-hit strike, and after other items/abilities would activate + MOVEEND_EJECT_ITEMS, + MOVEEND_WHITE_HERB, + MOVEEND_RED_CARD, + MOVEEND_LIFEORB_SHELLBELL, // Includes shell bell, throat spray, etc + MOVEEND_CHANGED_ITEMS, + MOVEEND_PICKPOCKET, + MOVEEND_DANCER, + MOVEEND_EMERGENCY_EXIT, + MOVEEND_SYMBIOSIS, + MOVEEND_OPPORTUNIST, // Occurs after other stat change items/abilities to try and copy the boosts + MOVEEND_SAME_MOVE_TURNS, + MOVEEND_SET_EVOLUTION_TRACKER, + MOVEEND_CLEAR_BITS, + MOVEEND_COUNT, +}; // switch cases #define B_SWITCH_NORMAL 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b018535cbe..aa92a7b884 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5614,6 +5614,11 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; + case MOVEEND_ITEM_EFFECTS_ATTACKER: + if (ItemBattleEffects(ITEMEFFECT_MOVE_END, gBattlerAttacker, FALSE)) + effect = TRUE; + gBattleScripting.moveendState++; + break; case MOVEEND_SYNCHRONIZE_TARGET: // target synchronize if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBattlerTarget, 0, 0, 0)) effect = TRUE; @@ -11570,7 +11575,7 @@ static void Cmd_stockpiletohpheal(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - + gBattlescriptCurrInstr = cmd->nextInstr; gBattlerTarget = gBattlerAttacker; } diff --git a/test/battle/hold_effect/restore_hp.c b/test/battle/hold_effect/restore_hp.c index 09daecc860..c19433751c 100644 --- a/test/battle/hold_effect/restore_hp.c +++ b/test/battle/hold_effect/restore_hp.c @@ -27,3 +27,39 @@ DOUBLE_BATTLE_TEST("Restore HP Item effects do not miss timing") MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); } } + +DOUBLE_BATTLE_TEST("Restore HP Item effects do not miss timing after a recoil move") +{ + u16 item; + + PARAMETRIZE { item = ITEM_BERRY_JUICE; } + PARAMETRIZE { item = ITEM_ORAN_BERRY; } + PARAMETRIZE { item = ITEM_SITRUS_BERRY; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_TAKE_DOWN].recoil == 25); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_BERRY_JUICE].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_SITRUS_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PCT_HP); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { MaxHP(100); HP(51); Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_TAKE_DOWN, target: playerLeft); + MOVE(opponentRight, MOVE_CELEBRATE); + MOVE(playerLeft, MOVE_CELEBRATE); + MOVE(playerRight, MOVE_CELEBRATE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, opponentLeft); + HP_BAR(playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + } +} From ded97e529664fc816a12a042ff5d94fb7a2cf4f1 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Tue, 1 Oct 2024 17:10:02 -0400 Subject: [PATCH 254/544] Switch AI refactor + considers free switches (#5379) * Switch AI considers free switches from pivot move * Fix Baton Pass refactor * Some cleanup and comments * Mon fainting to hazards is a 0HKO * Revert "Mon fainting to hazards is a 0HKO" This reverts commit 446f73822651af55ee1a36aeb61f3f0c9317d244. * Cleanup speed check / Eject Pack * Move eject trackers to AiLogicData * Review feedback and WhoStrikesFirst changes * This linebreak will bug me lol * Also this comment, heck * Last bit of comment cleanup --- include/battle.h | 2 + include/battle_ai_util.h | 3 + src/battle_ai_main.c | 2 +- src/battle_ai_switch_items.c | 185 +++++++++++++++++----------------- src/battle_ai_util.c | 32 +++++- src/battle_main.c | 4 + src/battle_script_commands.c | 2 + test/battle/ai/ai_switching.c | 84 ++++++++++++++- 8 files changed, 211 insertions(+), 103 deletions(-) diff --git a/include/battle.h b/include/battle.h index 16df7c500a..f463a2440b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -374,6 +374,8 @@ struct AiLogicData bool8 weatherHasEffect; // The same as WEATHER_HAS_EFFECT. Stored here, so it's called only once. u8 mostSuitableMonId[MAX_BATTLERS_COUNT]; // Stores result of GetMostSuitableMonToSwitchInto, which decides which generic mon the AI would switch into if they decide to switch. This can be overruled by specific mons found in ShouldSwitch; the final resulting mon is stored in AI_monToSwitchIntoId. struct SwitchinCandidate switchinCandidate; // Struct used for deciding which mon to switch to in battle_ai_switch_items.c + bool8 ejectButtonSwitch; // Tracks whether current switch out was from Eject Button + bool8 ejectPackSwitch; // Tracks whether current switch out was from Eject Pack u8 shouldSwitch; // Stores result of ShouldSwitch, which decides whether a mon should be switched out }; diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 5fecdd5f47..69cf92ed0d 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -31,6 +31,7 @@ void RecordItemEffectBattle(u32 battlerId, u32 itemEffect); void ClearBattlerItemEffectHistory(u32 battlerId); void SaveBattlerData(u32 battlerId); void SetBattlerData(u32 battlerId); +void SetBattlerAiData(u32 battlerId, struct AiLogicData *aiData); void RestoreBattlerData(u32 battlerId); u32 GetAIChosenMove(u32 battlerId); u32 GetTotalBaseStat(u32 species); @@ -140,6 +141,7 @@ bool32 HasThawingMove(u32 battler); bool32 IsStatRaisingEffect(u32 effect); bool32 IsStatLoweringEffect(u32 effect); bool32 IsSelfStatLoweringEffect(u32 effect); +bool32 IsSwitchOutEffect(u32 effect); bool32 IsAttackBoostMoveEffect(u32 effect); bool32 IsUngroundingEffect(u32 effect); bool32 IsSemiInvulnerable(u32 battlerDef, u32 move); @@ -201,6 +203,7 @@ void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker, enum DamageRollType rollType); +u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 moveConsidered); s32 AI_TryToClearStats(u32 battlerAtk, u32 battlerDef, bool32 isDoubleBattle); bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef); bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index e686b52071..a47d17839f 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -389,7 +389,7 @@ void Ai_UpdateFaintData(u32 battler) aiMon->isFainted = TRUE; } -static void SetBattlerAiData(u32 battler, struct AiLogicData *aiData) +void SetBattlerAiData(u32 battler, struct AiLogicData *aiData) { u32 ability, holdEffect; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 3f13a8c3f4..f4ff355967 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1789,30 +1789,60 @@ static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent) return FALSE; } -// This function splits switching behaviour mid-battle from after a KO. -// Mid battle, it integrates GetBestMonTypeMatchup (vanilla with modifications), GetBestMonDefensive (custom), and GetBestMonBatonPass (vanilla with modifications) -// After a KO, integrates GetBestMonRevengeKiller (custom), GetBestMonTypeMatchup (vanilla with modifications), GetBestMonBatonPass (vanilla with modifications), and GetBestMonDmg (vanilla) -// the Type Matchup code will prioritize switching into a mon with the best type matchup and also a super effective move, or just best type matchup if no super effective move is found -// the Most Defensive code will prioritize switching into the mon that takes the most hits to KO, with a minimum of 4 hits required to be considered a valid option -// the Baton Pass code will prioritize switching into a mon with Baton Pass if it can get in, boost, and BP out without being KO'd, and randomizes between multiple valid options -// the Revenge Killer code will prioritize, in order, OHKO and outspeeds / OHKO, slower but not 2HKO'd / 2HKO, outspeeds and not OHKO'd / 2HKO, slower but not 3HKO'd -// the Most Damage code will prioritize switching into whatever mon deals the most damage, which is generally not as good as having a good Type Matchup -// Everything runs in the same loop to minimize computation time. This makes it harder to read, but hopefully the comments can guide you! +static inline bool32 IsFreeSwitch(bool32 isSwitchAfterKO, u32 battlerSwitchingOut, u32 opposingBattler) +{ + bool32 movedSecond = GetBattlerTurnOrderNum(battlerSwitchingOut) > GetBattlerTurnOrderNum(opposingBattler) ? TRUE : FALSE; + + // Switch out effects + if (!IsDoubleBattle()) // Not handling doubles' additional complexity + { + if (IsSwitchOutEffect(gMovesInfo[gLastUsedMove].effect) && movedSecond) + return TRUE; + if (AI_DATA->ejectButtonSwitch) + return TRUE; + if (AI_DATA->ejectPackSwitch) + { + // If faster, not a free switch; likely lowered own stats + if (!movedSecond) + return FALSE; + // Otherwise, free switch + return TRUE; + } + } + // Post KO check has to be last because the GetMostSuitableMonToSwitchInto call in OpponentHandleChoosePokemon assumes a KO rather than a forced switch choice + if (isSwitchAfterKO) + return TRUE; + else + return FALSE; +} + +static inline bool32 CanSwitchinWin1v1(u32 hitsToKOAI, u32 hitsToKOPlayer, bool32 isSwitchinFirst, bool32 isFreeSwitch) +{ + // Free switch, need to outspeed or take 1 extra hit + if (isFreeSwitch) + { + if (hitsToKOAI > hitsToKOPlayer || (hitsToKOAI == hitsToKOPlayer && isSwitchinFirst)) + return TRUE; + } + // Mid battle switch, need to take 1 or 2 extra hits depending on speed + if (hitsToKOAI > hitsToKOPlayer + 1 || (hitsToKOAI == hitsToKOPlayer + 1 && isSwitchinFirst)) + return TRUE; + return FALSE; +} + +// This function splits switching behaviour depending on whether the switch is free. +// Everything runs in the same loop to minimize computation time. This makes it harder to read, but hopefully the comments can guide you! static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u32 battlerIn1, u32 battlerIn2, bool32 isSwitchAfterKO) { int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE; int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE, trapperId = PARTY_SIZE; int i, j, aliveCount = 0, bits = 0; s32 defensiveMonHitKOThreshold = 3; // 3HKO threshold that candidate defensive mons must exceed - u32 aiMove, hitsToKOAI, hitsToKOPlayer, hitsToKOAIThreshold, maxHitsToKO = 0; - s32 playerMonSpeed = gBattleMons[opposingBattler].speed, playerMonHP = gBattleMons[opposingBattler].hp, aiMonSpeed, aiMovePriority = 0, maxDamageDealt = 0, damageDealt = 0; + s32 playerMonHP = gBattleMons[opposingBattler].hp, maxDamageDealt = 0, damageDealt = 0; + u32 aiMove, hitsToKOAI, maxHitsToKO = 0; u16 bestResist = UQ_4_12(1.0), bestResistEffective = UQ_4_12(1.0), typeMatchup; - - if (isSwitchAfterKO) - hitsToKOAIThreshold = 1; // After a KO, mons at minimum need to not be 1-shot, as they switch in for free - else - hitsToKOAIThreshold = 2; // When switching in otherwise need to not be 2-shot, as they do not switch in for free + bool32 isFreeSwitch = IsFreeSwitch(isSwitchAfterKO, battlerIn1, opposingBattler), isSwitchinFirst, canSwitchinWin1v1; // Iterate through mons for (i = firstId; i < lastId; i++) @@ -1841,10 +1871,11 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (AI_DATA->switchinCandidate.battleMon.ability == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler)) continue; - // Get max number of hits for player to KO AI mon + // Get max number of hits for player to KO AI mon and type matchup for defensive switching hitsToKOAI = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon), battler); + typeMatchup = GetSwitchinTypeMatchup(opposingBattler, AI_DATA->switchinCandidate.battleMon); - // Track max hits to KO and set GetBestMonDefensive if applicable + // Track max hits to KO and set defensive mon if(hitsToKOAI > maxHitsToKO) { maxHitsToKO = hitsToKOAI; @@ -1852,28 +1883,12 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, defensiveMonId = i; } - typeMatchup = GetSwitchinTypeMatchup(opposingBattler, AI_DATA->switchinCandidate.battleMon); - - // Check that good type matchups gets at least two turns and set GetBestMonTypeMatchup if applicable - if (typeMatchup < bestResist) - { - if ((hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed) || hitsToKOAI > hitsToKOAIThreshold + 1) // Need to take an extra hit if slower - { - bestResist = typeMatchup; - typeMatchupId = i; - } - } - - aiMonSpeed = AI_DATA->switchinCandidate.battleMon.speed; - // Check through current mon's moves for (j = 0; j < MAX_MON_MOVES; j++) { aiMove = AI_DATA->switchinCandidate.battleMon.moves[j]; - aiMovePriority = gMovesInfo[aiMove].priority; - // Only do damage calc if switching after KO, don't need it otherwise and saves ~0.02s per turn - if (isSwitchAfterKO && aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) + if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) { if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_CONSERVATIVE) damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST); @@ -1881,19 +1896,35 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); } - // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not - if (aiMove == MOVE_BATON_PASS && ((hitsToKOAI > hitsToKOAIThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) - bits |= 1u << i; + // Offensive switchin decisions are based on which whether switchin moves first and whether it can win a 1v1 + isSwitchinFirst = AI_WhoStrikesFirstPartyMon(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, aiMove); + canSwitchinWin1v1 = CanSwitchinWin1v1(hitsToKOAI, GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler), isSwitchinFirst, isFreeSwitch); - // Check for mon with resistance and super effective move for GetBestMonTypeMatchup + // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not + if (aiMove == MOVE_BATON_PASS) + { + if ((isSwitchinFirst && hitsToKOAI > 1) || hitsToKOAI > 2) // Need to take an extra hit if slower + bits |= 1u << i; + } + + // Check that good type matchups get at least two turns and set best type matchup mon + if (typeMatchup < bestResist) + { + if (canSwitchinWin1v1) + { + bestResist = typeMatchup; + typeMatchupId = i; + } + } + + // Check for mon with resistance and super effective move for best type matchup mon with effective move if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) { if (typeMatchup < bestResistEffective) { if (AI_GetTypeEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) { - // Assuming a super effective move would do significant damage or scare the player out, so not being as conservative here - if (hitsToKOAI > hitsToKOAIThreshold) + if (canSwitchinWin1v1) { bestResistEffective = typeMatchup; typeMatchupEffectiveId = i; @@ -1905,10 +1936,10 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (gMovesInfo[aiMove].effect == EFFECT_EXPLOSION && damageDealt < playerMonHP) continue; - // Check that mon isn't one shot and set GetBestMonDmg if applicable + // Check that mon isn't one shot and set best damage mon if (damageDealt > maxDamageDealt) { - if(hitsToKOAI > hitsToKOAIThreshold) + if((isFreeSwitch && hitsToKOAI > 1) || hitsToKOAI > 2) // This is a "default", we have uniquely low standards { maxDamageDealt = damageDealt; damageMonId = i; @@ -1919,74 +1950,40 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // If AI mon can one shot if (damageDealt > playerMonHP) { - // If AI mon outspeeds and doesn't die to hazards - if ((((aiMonSpeed > playerMonSpeed && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM)) || aiMovePriority > 0) // Outspeed if not Trick Room - || ((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) // Trick Room - && (aiMonSpeed < playerMonSpeed || (ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item) == HOLD_EFFECT_ROOM_SERVICE && aiMonSpeed * 2 / 3 < playerMonSpeed)))) // Trick Room speeds - && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon)) // Hazards + if (canSwitchinWin1v1) { - // We have a revenge killer - revengeKillerId = i; - } - - // If AI mon is outsped - else - { - // If AI mon can't be OHKO'd - if (hitsToKOAI > hitsToKOAIThreshold) - { - // We have a slow revenge killer + if (isSwitchinFirst) + revengeKillerId = i; + else slowRevengeKillerId = i; - } } } // If AI mon can two shot if (damageDealt > playerMonHP / 2) { - // If AI mon outspeeds - if (((aiMonSpeed > playerMonSpeed && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM)) || aiMovePriority > 0) // Outspeed if not Trick Room - || (((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && gFieldTimers.trickRoomTimer > 1) // Trick Room has at least 2 turns left - && (aiMonSpeed < playerMonSpeed || (ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item) == HOLD_EFFECT_ROOM_SERVICE && aiMonSpeed * 2/ 3 < playerMonSpeed)))) // Trick Room speeds + if (canSwitchinWin1v1) { - // If AI mon can't be OHKO'd - if (hitsToKOAI > hitsToKOAIThreshold) - { - // We have a fast threaten + if (isSwitchinFirst) fastThreatenId = i; - } - } - // If AI mon is outsped - else - { - // If AI mon can't be 2HKO'd - if (hitsToKOAI > hitsToKOAIThreshold + 1) - { - // We have a slow threaten + else slowThreatenId = i; - } } } // If mon can trap - if (CanAbilityTrapOpponent(AI_DATA->switchinCandidate.battleMon.ability, opposingBattler)) - { - hitsToKOPlayer = GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler); - if (CountUsablePartyMons(opposingBattler) > 0 - && (((hitsToKOAI > hitsToKOPlayer && isSwitchAfterKO) // If can 1v1 after a KO - || (hitsToKOAI == hitsToKOPlayer && isSwitchAfterKO && (aiMonSpeed > playerMonSpeed || aiMovePriority > 0))) - || ((hitsToKOAI > hitsToKOPlayer + 1 && !isSwitchAfterKO) // If can 1v1 after mid battle - || (hitsToKOAI == hitsToKOPlayer + 1 && !isSwitchAfterKO && (aiMonSpeed > playerMonSpeed || aiMovePriority > 0))))) - trapperId = i; - } + if (CanAbilityTrapOpponent(AI_DATA->switchinCandidate.battleMon.ability, opposingBattler) + && CountUsablePartyMons(opposingBattler) > 0 + && canSwitchinWin1v1) + trapperId = i; } } } batonPassId = GetRandomSwitchinWithBatonPass(aliveCount, bits, firstId, lastId, i); - // Different switching priorities depending on switching mid battle vs switching after a KO - if (isSwitchAfterKO) + // Different switching priorities depending on switching mid battle vs switching after a KO or slow switch + if (isFreeSwitch) { // Return Trapper > Revenge Killer > Type Matchup > Baton Pass > Best Damage if (trapperId != PARTY_SIZE) return trapperId; @@ -2009,8 +2006,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else if (batonPassId != PARTY_SIZE) return batonPassId; } // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. - if (aceMonId != PARTY_SIZE - && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS || gMovesInfo[gLastUsedMove].effect == EFFECT_CHILLY_RECEPTION || gMovesInfo[gLastUsedMove].effect == EFFECT_SHED_TAIL)) + if (aceMonId != PARTY_SIZE && IsSwitchOutEffect(gMovesInfo[gLastUsedMove].effect)) return aceMonId; return PARTY_SIZE; @@ -2082,7 +2078,6 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) return bestMonId; } - // Split ideal mon decision between after previous mon KO'd (prioritize offensive options) and after switching active mon out (prioritize defensive options), and expand the scope of both. // Only use better mon selection if AI_FLAG_SMART_MON_CHOICES is set for the trainer. if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !IsDoubleBattle()) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic { @@ -2103,11 +2098,11 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) || gBattlerPartyIndexes[battlerIn2] == i || i == gBattleStruct->monToSwitchIntoId[battlerIn1] || i == gBattleStruct->monToSwitchIntoId[battlerIn2] - || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))) // While not really invalid per se, not really wise to switch into this mon.) + || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))) // While not really invalid per se, not really wise to switch into this mon. { invalidMons |= 1u << i; } - else if (IsAceMon(battler, i))// Save Ace Pokemon for last. + else if (IsAceMon(battler, i)) // Save Ace Pokemon for last. { aceMonId = i; invalidMons |= 1u << i; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 05dbbe916a..3ef613d1fc 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2375,6 +2375,22 @@ bool32 IsSelfStatLoweringEffect(u32 effect) } } +bool32 IsSwitchOutEffect(u32 effect) +{ + // Switch out effects like U-Turn, Volt Switch, etc. + switch (effect) + { + case EFFECT_HIT_ESCAPE: + case EFFECT_PARTING_SHOT: + case EFFECT_BATON_PASS: + case EFFECT_CHILLY_RECEPTION: + case EFFECT_SHED_TAIL: + return TRUE; + default: + return FALSE; + } +} + bool32 HasDamagingMove(u32 battlerId) { u32 i; @@ -3492,14 +3508,14 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl { gBattleMons[battlerAtk] = switchinCandidate; AI_THINKING_STRUCT->saved[battlerDef].saved = TRUE; - SetBattlerData(battlerDef); // set known opposing battler data + SetBattlerAiData(battlerDef, AI_DATA); // set known opposing battler data AI_THINKING_STRUCT->saved[battlerDef].saved = FALSE; } else { gBattleMons[battlerDef] = switchinCandidate; AI_THINKING_STRUCT->saved[battlerAtk].saved = TRUE; - SetBattlerData(battlerAtk); // set known opposing battler data + SetBattlerAiData(battlerAtk, AI_DATA); // set known opposing battler data AI_THINKING_STRUCT->saved[battlerAtk].saved = FALSE; } @@ -3509,6 +3525,18 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl return dmg.expected; } +u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 moveConsidered) +{ + struct BattlePokemon *savedBattleMons = AllocSaveBattleMons(); + gBattleMons[battlerAtk] = switchinCandidate; + + SetBattlerAiData(battlerAtk, AI_DATA); + u32 aiMonFaster = AI_IsFaster(battlerAtk, battlerDef, moveConsidered); + FreeRestoreBattleMons(savedBattleMons); + + return aiMonFaster; +} + s32 CountUsablePartyMons(u32 battlerId) { s32 battlerOnField1, battlerOnField2, i, ret; diff --git a/src/battle_main.c b/src/battle_main.c index d30d7a927f..9a430952c3 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3239,6 +3239,10 @@ void SwitchInClearSetData(u32 battler) gSpecialStatuses[battler].specialDmg = 0; gBattleStruct->enduredDamage &= ~(1u << battler); + // Reset Eject Button / Eject Pack switch detection + AI_DATA->ejectButtonSwitch = FALSE; + AI_DATA->ejectPackSwitch = FALSE; + // Reset G-Max Chi Strike boosts. gBattleStruct->bonusCritStages[battler] = 0; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 897bf1dab3..a13e84265a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6296,10 +6296,12 @@ static void Cmd_moveend(void) if (ejectButtonBattlers & (1u << battler)) { gBattlescriptCurrInstr = BattleScript_EjectButtonActivates; + AI_DATA->ejectButtonSwitch = TRUE; } else // Eject Pack { gBattlescriptCurrInstr = BattleScript_EjectPackActivates; + AI_DATA->ejectPackSwitch = TRUE; // Are these 2 lines below needed? gProtectStructs[battler].statFell = FALSE; gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage = TRUE; diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 6fb9b499d9..cc5c7aafa9 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -215,23 +215,97 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize { GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); SpAttack(50); } OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron - OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53);} } WHEN { TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); } } } +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize offensive options after slow U-Turn") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_FALSE_SWIPE].effect == EFFECT_FALSE_SWIPE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_FALSE_SWIPE, MOVE_BOOMBURST); Speed(5); SpAttack(50); } + OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_U_TURN); Speed(4); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } + } WHEN { + TURN { MOVE(player, MOVE_FALSE_SWIPE); EXPECT_SEND_OUT(opponent, 2); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize offensive options after Eject Button") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); + ASSUME(gMovesInfo[MOVE_FALSE_SWIPE].effect == EFFECT_FALSE_SWIPE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_FALSE_SWIPE, MOVE_BOOMBURST); Speed(5); SpAttack(50); } + OPPONENT(SPECIES_PONYTA) { Level(1); Item(ITEM_EJECT_BUTTON); Moves(MOVE_TACKLE); Speed(4); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } + } WHEN { + TURN { MOVE(player, MOVE_FALSE_SWIPE); EXPECT_SEND_OUT(opponent, 2); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize offensive options after Eject Pack") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_EJECT_PACK].holdEffect == HOLD_EFFECT_EJECT_PACK); + ASSUME(gMovesInfo[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_GROWL, MOVE_BOOMBURST); Speed(5); SpAttack(50); } + OPPONENT(SPECIES_PONYTA) { Level(1); Item(ITEM_EJECT_PACK); Moves(MOVE_TACKLE); Speed(4); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL); EXPECT_SEND_OUT(opponent, 2); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize defensive options after Eject Pack if mon outspeeds") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_EJECT_PACK].holdEffect == HOLD_EFFECT_EJECT_PACK); + ASSUME(MoveHasAdditionalEffectSelf(MOVE_OVERHEAT, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); SpAttack(50); } + OPPONENT(SPECIES_PONYTA) { Level(1); Item(ITEM_EJECT_PACK); Moves(MOVE_OVERHEAT); Speed(6); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize offensive options after Eject Pack if mon outspeeds but was Intimidate'd") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_EJECT_PACK].holdEffect == HOLD_EFFECT_EJECT_PACK); + ASSUME(MoveHasAdditionalEffectSelf(MOVE_OVERHEAT, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_STARAPTOR) { Level(30); Ability(ABILITY_INTIMIDATE); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); SpAttack(50); } + OPPONENT(SPECIES_PONYTA) { Level(1); Item(ITEM_EJECT_PACK); Moves(MOVE_OVERHEAT); Speed(6); } // Forces switchout + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } + } WHEN { + TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 2); } + } +} + AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize offensive options") { GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); } OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); } - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron - OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); } // Mid battle, AI sends out Aron + OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); } } WHEN { TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 2); } } From d5560bbc87715e660d09dd8911f3b4671f5a49ec Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 2 Oct 2024 14:20:02 -0500 Subject: [PATCH 255/544] Remove trailing whitespace pass 10-2-2024 (Master) (#5455) --- src/battle_ai_main.c | 2 +- src/data/graphics/pokemon.h | 2 +- src/data/pokemon/species_info/gen_9_families.h | 2 +- test/battle/ai/ai_switching.c | 2 +- test/battle/gimmick/dynamax.c | 2 +- test/battle/move_effect/pledge.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 1483c875ba..903b0c7d9f 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2869,7 +2869,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (atkPartnerAbility) { case ABILITY_ANGER_POINT: - if (gMovesInfo[move].alwaysCriticalHit == TRUE + if (gMovesInfo[move].alwaysCriticalHit == TRUE && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) && AI_IsFaster(battlerAtk, battlerAtkPartner, move) && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index a1c1a20108..284977bcc2 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -21882,7 +21882,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gShinyOverworldPalette_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/overworld_shiny.gbapal.lz"); const u32 gOverworldPalette_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/overworld_normal.gbapal.lz"); const u32 gShinyOverworldPalette_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/overworld_shiny.gbapal.lz"); - + const u32 gObjectEventPic_OgerponTealMaskTeraTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/overworld.4bpp"); const u32 gObjectEventPic_OgerponWellspringMaskTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/wellspring/overworld.4bpp"); const u32 gObjectEventPic_OgerponHearthflameMaskTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/hearthflame/overworld.4bpp"); diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 650b3c5a07..5a616bf4ff 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -7237,7 +7237,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = TRACKS_FOOT, gOverworldPalette_Fezandipiti, gShinyOverworldPalette_Fezandipiti - ) + ) .isLegendary = TRUE, .levelUpLearnset = sFezandipitiLevelUpLearnset, .teachableLearnset = sFezandipitiTeachableLearnset, diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 6fb9b499d9..3e97ec1f61 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -420,5 +420,5 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it can't d OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SHADOW_BALL); } } WHEN { TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); } - } + } } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index f9865f7b6c..3df3cc4cdf 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -1505,7 +1505,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass absorbing abilities") PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_DRY_SKIN; species = SPECIES_PARASECT; } PARAMETRIZE { move = MOVE_MUD_BOMB; ability = ABILITY_EARTH_EATER; species = SPECIES_ORTHWORM; } PARAMETRIZE { move = MOVE_VINE_WHIP; ability = ABILITY_SAP_SIPPER; species = SPECIES_MILTANK; } - + GIVEN { ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); ASSUME(gMovesInfo[MOVE_SPARK].type == TYPE_ELECTRIC); diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index 2098217827..bd68b1e733 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -823,7 +823,7 @@ DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move OPPONENT(SPECIES_WYNAUT) { Speed(5); Status1(STATUS1_SLEEP_TURN(2)); } } WHEN { TURN { MOVE(opponentLeft, MOVE_FIRE_PLEDGE, target: playerLeft); - MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } } SCENE { NONE_OF { From a135876dc0dac52403dc308fe51e09965e6cc208 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 2 Oct 2024 14:20:23 -0500 Subject: [PATCH 256/544] Remove trailing whitespace pass 10-2-2024 (Upcoming) (#5456) --- src/battle_ai_switch_items.c | 2 +- src/battle_anim_rock.c | 2 +- src/battle_script_commands.c | 4 +-- src/berry.c | 2 +- src/bike.c | 8 ++--- src/data/graphics/pokemon.h | 2 +- src/data/heal_locations_pkm_center.h | 2 +- .../pokemon/species_info/gen_9_families.h | 2 +- src/event_object_movement.c | 30 +++++++++---------- src/field_control_avatar.c | 4 +-- src/field_player_avatar.c | 16 +++++----- src/heal_location.c | 8 ++--- src/metatile_behavior.c | 2 +- src/overworld.c | 4 +-- src/pokemon_sprite_visualizer.c | 2 +- test/battle/ai/ai_switching.c | 12 ++++---- test/battle/gimmick/dynamax.c | 2 +- test/battle/move_effect/pledge.c | 2 +- 18 files changed, 53 insertions(+), 53 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index f4ff355967..867d1ab29d 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1792,7 +1792,7 @@ static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent) static inline bool32 IsFreeSwitch(bool32 isSwitchAfterKO, u32 battlerSwitchingOut, u32 opposingBattler) { bool32 movedSecond = GetBattlerTurnOrderNum(battlerSwitchingOut) > GetBattlerTurnOrderNum(opposingBattler) ? TRUE : FALSE; - + // Switch out effects if (!IsDoubleBattle()) // Not handling doubles' additional complexity { diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index b6239ca063..354fb21014 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -479,7 +479,7 @@ void AnimRockFragment(struct Sprite *sprite) void AnimParticleInVortex(struct Sprite *sprite) { if (IsDoubleBattle() //got a little lazy here will fix later - && (gAnimMoveIndex == MOVE_BLEAKWIND_STORM + && (gAnimMoveIndex == MOVE_BLEAKWIND_STORM || gAnimMoveIndex == MOVE_SANDSEAR_STORM || gAnimMoveIndex == MOVE_SPRINGTIDE_STORM || gAnimMoveIndex == MOVE_WILDBOLT_STORM)) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a13e84265a..4946b185b5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1988,7 +1988,7 @@ s32 CalcCritChanceStageGen1(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recor // Crit scaling if (moveCritStage > 0) critChance = critChance * highCritRatioScaler * moveCritStage; - + if (bonusCritStage > 0) critChance = critChance * bonusCritStage; @@ -11604,7 +11604,7 @@ static void Cmd_stockpiletohpheal(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - + gBattlescriptCurrInstr = cmd->nextInstr; gBattlerTarget = gBattlerAttacker; } diff --git a/src/berry.c b/src/berry.c index 5c23623e3b..d8d1033fc6 100644 --- a/src/berry.c +++ b/src/berry.c @@ -2144,7 +2144,7 @@ void ObjectEventInteractionGetBerryCountString(void) u8 treeId = GetObjectEventBerryTreeId(gSelectedObjectEvent); u8 berry = GetBerryTypeByBerryTreeId(treeId); u8 count = GetBerryCountByBerryTreeId(treeId); - + gSpecialVar_0x8006 = BerryTypeToItemId(berry); CopyItemNameHandlePlural(BerryTypeToItemId(berry), gStringVar1, count); berry = GetTreeMutationValue(treeId); diff --git a/src/bike.c b/src/bike.c index 427dfdfcf2..b369883093 100644 --- a/src/bike.c +++ b/src/bike.c @@ -142,7 +142,7 @@ static u8 GetMachBikeTransition(u8 *dirTraveling) { // if the dir updated before this function, get the relevent new direction to check later. u8 direction = GetPlayerMovementDirection(); - + // fix direction when moving on sideways stairs switch (direction) { @@ -249,7 +249,7 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) // we did not hit anything that can slow us down, so perform the advancement callback depending on the bikeFrameCounter and try to increase the mach bike's speed. if (ObjectMovingOnRockStairs(playerObjEvent, direction) && gPlayerAvatar.bikeFrameCounter > 1) gPlayerAvatar.bikeFrameCounter--; - + sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array @@ -384,7 +384,7 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16 struct ObjectEvent *playerObjEvent; direction = GetPlayerMovementDirection(); - + playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; gPlayerAvatar.runningState = NOT_MOVING; @@ -716,7 +716,7 @@ static void AcroBikeTransition_WheelieMoving(u8 direction) } return; } - + PlayerWheelieMove(direction); gPlayerAvatar.runningState = MOVING; } diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index a1c1a20108..284977bcc2 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -21882,7 +21882,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gShinyOverworldPalette_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/overworld_shiny.gbapal.lz"); const u32 gOverworldPalette_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/overworld_normal.gbapal.lz"); const u32 gShinyOverworldPalette_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/overworld_shiny.gbapal.lz"); - + const u32 gObjectEventPic_OgerponTealMaskTeraTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/overworld.4bpp"); const u32 gObjectEventPic_OgerponWellspringMaskTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/wellspring/overworld.4bpp"); const u32 gObjectEventPic_OgerponHearthflameMaskTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/hearthflame/overworld.4bpp"); diff --git a/src/data/heal_locations_pkm_center.h b/src/data/heal_locations_pkm_center.h index 58be0be05e..278f5d68b0 100644 --- a/src/data/heal_locations_pkm_center.h +++ b/src/data/heal_locations_pkm_center.h @@ -24,7 +24,7 @@ static const struct HealLocation sHealLocationsPokemonCenter[HEAL_LOCATION_COUNT }, [HEAL_LOCATION_SLATEPORT_CITY - 1] = { - .group = MAP_GROUP(SLATEPORT_CITY_POKEMON_CENTER_1F), + .group = MAP_GROUP(SLATEPORT_CITY_POKEMON_CENTER_1F), .map = MAP_NUM(SLATEPORT_CITY_POKEMON_CENTER_1F), DEFAULT_POKEMON_CENTER_COORDS, }, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 427090cef6..3b0dcdbe15 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -7361,7 +7361,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = TRACKS_FOOT, gOverworldPalette_Fezandipiti, gShinyOverworldPalette_Fezandipiti - ) + ) .isLegendary = TRUE, .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sFezandipitiLevelUpLearnset, diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 7f913cde28..978d5b0bac 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -5469,7 +5469,7 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri s16 targetX; s16 targetY; u32 playerAction = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId; - + targetX = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x; targetY = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y; x = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x; @@ -6022,11 +6022,11 @@ u8 GetSidewaysStairsCollision(struct ObjectEvent *objectEvent, u8 dir, u8 curren { if ((dir == DIR_SOUTH || dir == DIR_NORTH) && collision != COLLISION_NONE) return collision; - + // cant descend stairs into water if (MetatileBehavior_IsSurfableFishableWater(nextBehavior)) return collision; - + if (MetatileBehavior_IsSidewaysStairsLeftSide(nextBehavior)) { //moving ONTO left side stair @@ -6059,12 +6059,12 @@ u8 GetSidewaysStairsCollision(struct ObjectEvent *objectEvent, u8 dir, u8 curren else return collision; } - + return collision; } static u8 GetVanillaCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction) -{ +{ if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y)) return COLLISION_OUTSIDE_RANGE; else if (MapGridGetCollisionAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(objectEvent, x, y, direction)) @@ -6075,7 +6075,7 @@ static u8 GetVanillaCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 return COLLISION_ELEVATION_MISMATCH; else if (DoesObjectCollideWithObjectAt(objectEvent, x, y)) return COLLISION_OBJECT_EVENT; - + return COLLISION_NONE; } @@ -6114,14 +6114,14 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) u8 currentBehavior = MapGridGetMetatileBehaviorAt(objectEvent->currentCoords.x, objectEvent->currentCoords.y); u8 nextBehavior = MapGridGetMetatileBehaviorAt(x, y); u8 collision; - + #if OW_FLAG_NO_COLLISION != 0 if (FlagGet(OW_FLAG_NO_COLLISION)) return COLLISION_NONE; #endif - + objectEvent->directionOverwrite = DIR_NONE; - + //sideways stairs checks if (MetatileBehavior_IsSidewaysStairsLeftSideTop(nextBehavior) && dir == DIR_EAST) return COLLISION_IMPASSABLE; //moving onto left-side top edge east from regular ground -> nope @@ -6140,10 +6140,10 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) else if (!(MetatileBehavior_IsSidewaysStairsLeftSideBottom(currentBehavior) || MetatileBehavior_IsSidewaysStairsRightSideBottom(currentBehavior)) && dir == DIR_NORTH && (MetatileBehavior_IsSidewaysStairsLeftSideBottom(nextBehavior) || MetatileBehavior_IsSidewaysStairsRightSideBottom(nextBehavior))) return COLLISION_IMPASSABLE; //trying to move north onto top stair tile at same level from non-stair -> no - + // regular checks collision = GetVanillaCollision(objectEvent, x, y, dir); - + //sideways stairs direction change checks collision = GetSidewaysStairsCollision(objectEvent, dir, currentBehavior, nextBehavior, collision); switch (collision) @@ -6159,7 +6159,7 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) objectEvent->directionOverwrite = GetRightSideStairsDirection(dir); return COLLISION_NONE; } - + return collision; } @@ -6367,10 +6367,10 @@ static u8 TryUpdateMovementActionOnStairs(struct ObjectEvent *objectEvent, u8 mo { if (objectEvent->isPlayer || objectEvent->localId == OBJ_EVENT_ID_FOLLOWER) return movementActionId; // handled separately - + if (!ObjectMovingOnRockStairs(objectEvent, objectEvent->movementDirection)) return movementActionId; - + switch (movementActionId) { case MOVEMENT_ACTION_WALK_NORMAL_DOWN: @@ -6390,7 +6390,7 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementAct { if (ObjectEventIsMovementOverridden(objectEvent)) return TRUE; - + movementActionId = TryUpdateMovementActionOnStairs(objectEvent, movementActionId); UnfreezeObjectEvent(objectEvent); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 51952c3627..2a20ae5a78 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -335,7 +335,7 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 s16 currX = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x; s16 currY = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y; u8 currBehavior = MapGridGetMetatileBehaviorAt(currX, currY); - + switch (direction) { case DIR_EAST: @@ -364,7 +364,7 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 objectEventId = GetObjectEventIdByPosition(position->x, position->y, position->elevation); break; } - + if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER) { if (MetatileBehavior_IsCounter(metatileBehavior) != TRUE) diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 5f1710dbff..6cb46cb378 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -460,7 +460,7 @@ static bool8 DoForcedMovement(u8 direction, void (*moveFunc)(u8)) { struct PlayerAvatar *playerAvatar = &gPlayerAvatar; u8 collision; - + // Check for sideways stairs onto ice movement. switch (direction) { @@ -473,7 +473,7 @@ static bool8 DoForcedMovement(u8 direction, void (*moveFunc)(u8)) direction = DIR_EAST; break; } - + collision = CheckForPlayerAvatarCollision(direction); playerAvatar->flags |= PLAYER_AVATAR_FLAG_FORCED_MOVE; @@ -679,7 +679,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) PlayerRunSlow(direction); else PlayerRun(direction); - + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH; return; } @@ -720,7 +720,7 @@ static u8 CheckForPlayerAvatarStaticCollision(u8 direction) u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) { u8 collision = GetCollisionAtCoords(objectEvent, x, y, direction); - + if (collision == COLLISION_ELEVATION_MISMATCH && CanStopSurfing(x, y, direction)) return COLLISION_STOP_SURFING; @@ -738,7 +738,7 @@ u8 CheckForObjectEventCollision(struct ObjectEvent *objectEvent, s16 x, s16 y, u return COLLISION_ROTATING_GATE; CheckAcroBikeCollision(x, y, metatileBehavior, &collision); } - + return collision; } @@ -2481,7 +2481,7 @@ u8 GetRightSideStairsDirection(u8 direction) if (direction > DIR_EAST) direction -= DIR_EAST; return direction; - } + } } u8 GetLeftSideStairsDirection(u8 direction) @@ -2504,11 +2504,11 @@ bool8 ObjectMovingOnRockStairs(struct ObjectEvent *objectEvent, u8 direction) #if SLOW_MOVEMENT_ON_STAIRS == TRUE s16 x = objectEvent->currentCoords.x; s16 y = objectEvent->currentCoords.y; - + // TODO followers on sideways stairs if (IsFollowerVisible() && GetFollowerObject() != NULL && (objectEvent->isPlayer || objectEvent->localId == OBJ_EVENT_ID_FOLLOWER)) return FALSE; - + switch (direction) { case DIR_NORTH: diff --git a/src/heal_location.c b/src/heal_location.c index 7193ea338e..1743925885 100644 --- a/src/heal_location.c +++ b/src/heal_location.c @@ -34,9 +34,9 @@ u32 GetHealLocationIndexByWarpData(struct WarpData *warp) u32 i; for (i = 0; i < ARRAY_COUNT(sHealLocations); i++) { - if (sHealLocations[i].group == warp->mapGroup - && sHealLocations[i].map == warp->mapNum - && sHealLocations[i].x == warp->x + if (sHealLocations[i].group == warp->mapGroup + && sHealLocations[i].map == warp->mapNum + && sHealLocations[i].x == warp->x && sHealLocations[i].y == warp->y) return i + 1; } @@ -89,7 +89,7 @@ void SetWhiteoutRespawnWarpAndHealerNPC(struct WarpData *warp) u32 healLocationId = GetHealLocationIndexByWarpData(&gSaveBlock1Ptr->lastHealLocation); u32 healNpcLocalId = GetHealNpcLocalId(healLocationId); struct HealLocation pkmCenterHealLocation; - + if (!healNpcLocalId) { *(warp) = gSaveBlock1Ptr->lastHealLocation; diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 98914ae5e8..e432827f31 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -1527,7 +1527,7 @@ bool8 MetatileBehavior_IsSidewaysStairsRightSideAny(u8 metatileBehavior) bool8 MetatileBehavior_IsSidewaysStairsLeftSideAny(u8 metatileBehavior) { - if (metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE + if (metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE || metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM || metatileBehavior == MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP) return TRUE; diff --git a/src/overworld.c b/src/overworld.c index 8b06037d73..7dea410395 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -3311,7 +3311,7 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) #define ITEM_TAG 0x2722 //same as money label bool8 GetSetItemObtained(u16 item, enum ItemObtainFlags caseId) -{ +{ #if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_FIRST_TIME u8 index = item / 8; u8 bit = item % 8; @@ -3436,7 +3436,7 @@ void ScriptHideItemDescription(struct ScriptContext *ctx) static void ShowItemIconSprite(u16 item, bool8 firstTime, bool8 flash) { s16 x = 0, y = 0; - u8 iconSpriteId; + u8 iconSpriteId; u8 spriteId2 = MAX_SPRITES; if (flash) diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index fea6324129..87e97fe11c 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -1621,7 +1621,7 @@ static void UpdateShadowSizeValue(u8 taskId, bool8 increment) else { update = 1; - data->shadowSettings.overrideSize += 1; + data->shadowSettings.overrideSize += 1; } } else diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index cc5c7aafa9..a1d2096ff3 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -231,7 +231,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_FALSE_SWIPE, MOVE_BOOMBURST); Speed(5); SpAttack(50); } OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_U_TURN); Speed(4); } // Forces switchout - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } } WHEN { TURN { MOVE(player, MOVE_FALSE_SWIPE); EXPECT_SEND_OUT(opponent, 2); } @@ -246,7 +246,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_FALSE_SWIPE, MOVE_BOOMBURST); Speed(5); SpAttack(50); } OPPONENT(SPECIES_PONYTA) { Level(1); Item(ITEM_EJECT_BUTTON); Moves(MOVE_TACKLE); Speed(4); } // Forces switchout - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } } WHEN { TURN { MOVE(player, MOVE_FALSE_SWIPE); EXPECT_SEND_OUT(opponent, 2); } @@ -261,7 +261,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_GROWL, MOVE_BOOMBURST); Speed(5); SpAttack(50); } OPPONENT(SPECIES_PONYTA) { Level(1); Item(ITEM_EJECT_PACK); Moves(MOVE_TACKLE); Speed(4); } // Forces switchout - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } } WHEN { TURN { MOVE(player, MOVE_GROWL); EXPECT_SEND_OUT(opponent, 2); } @@ -276,7 +276,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); SpAttack(50); } OPPONENT(SPECIES_PONYTA) { Level(1); Item(ITEM_EJECT_PACK); Moves(MOVE_OVERHEAT); Speed(6); } // Forces switchout - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } } WHEN { TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 1); } @@ -291,7 +291,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_STARAPTOR) { Level(30); Ability(ABILITY_INTIMIDATE); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); SpAttack(50); } OPPONENT(SPECIES_PONYTA) { Level(1); Item(ITEM_EJECT_PACK); Moves(MOVE_OVERHEAT); Speed(6); } // Forces switchout - OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } + OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } } WHEN { TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 2); } @@ -494,5 +494,5 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it can't d OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SHADOW_BALL); } } WHEN { TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); } - } + } } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index f9865f7b6c..3df3cc4cdf 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -1505,7 +1505,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass absorbing abilities") PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_DRY_SKIN; species = SPECIES_PARASECT; } PARAMETRIZE { move = MOVE_MUD_BOMB; ability = ABILITY_EARTH_EATER; species = SPECIES_ORTHWORM; } PARAMETRIZE { move = MOVE_VINE_WHIP; ability = ABILITY_SAP_SIPPER; species = SPECIES_MILTANK; } - + GIVEN { ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); ASSUME(gMovesInfo[MOVE_SPARK].type == TYPE_ELECTRIC); diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index 2098217827..bd68b1e733 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -823,7 +823,7 @@ DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move OPPONENT(SPECIES_WYNAUT) { Speed(5); Status1(STATUS1_SLEEP_TURN(2)); } } WHEN { TURN { MOVE(opponentLeft, MOVE_FIRE_PLEDGE, target: playerLeft); - MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } } SCENE { NONE_OF { From 7852dc3e47e797578adf881d012f33d4a61d1648 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 2 Oct 2024 22:36:20 +0200 Subject: [PATCH 257/544] Update commander.c (#5458) --- test/battle/ability/commander.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c index af02f971a3..e6a85b0681 100644 --- a/test/battle/ability/commander.c +++ b/test/battle/ability/commander.c @@ -254,7 +254,7 @@ DOUBLE_BATTLE_TEST("Commander doesn't prevent Imposter from working on a Command } } -DOUBLE_BATTLE_TEST("Commander Tatsugiri is still affected by Haze while controlling Dondozo") +DOUBLE_BATTLE_TEST("Commander Tatsugiri is still affected by Perish Song while controlling Dondozo") { GIVEN { PLAYER(SPECIES_DONDOZO); From 2597d8a35a3666410b6d9706498b89e6f5063040 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Wed, 2 Oct 2024 14:24:57 -0700 Subject: [PATCH 258/544] Updated species defines (#5075) * First version of new defines * Fixed cloaks * Fixed cloaks * Fixed cloaks * Fixed cloaks * Fixed cloaks * Removed old defines * Removed old defines * Removed old defines and cleaned up some macros * Undid changes to documentation Deleted unused defines Updated defines Fixed tests fixed docs * moved note to top per https://github.com/rh-hideout/pokeemerald-expansion/pull/5075\#discussion_r1783641599 * fixed alignment per https://github.com/rh-hideout/pokeemerald-expansion/pull/5075\#pullrequestreview-2341613591 --- include/constants/cries.h | 16 +- include/constants/species.h | 554 +++++++----------- src/battle_ai_util.c | 2 +- src/battle_controller_player.c | 6 +- src/battle_dynamax.c | 68 +-- src/battle_main.c | 12 +- src/battle_script_commands.c | 8 +- src/battle_util.c | 8 +- src/battle_z_move.c | 20 +- src/berry.c | 2 +- src/data/pokemon/form_change_table_pointers.h | 4 +- src/data/pokemon/form_change_tables.h | 144 ++--- src/data/pokemon/form_species_tables.h | 358 +++++------ src/data/pokemon/pokedex_orders.h | 16 +- .../pokemon/species_info/gen_1_families.h | 164 +++--- .../pokemon/species_info/gen_2_families.h | 68 +-- .../pokemon/species_info/gen_3_families.h | 6 +- .../pokemon/species_info/gen_4_families.h | 42 +- .../pokemon/species_info/gen_5_families.h | 54 +- .../pokemon/species_info/gen_6_families.h | 68 +-- .../pokemon/species_info/gen_7_families.h | 10 +- .../pokemon/species_info/gen_8_families.h | 82 +-- .../pokemon/species_info/gen_9_families.h | 44 +- src/pokemon_jump.c | 54 +- test/battle/ability/cud_chew.c | 4 +- test/battle/ability/embody_aspect.c | 10 +- test/battle/ability/galvanize.c | 4 +- test/battle/ability/grim_neigh.c | 6 +- test/battle/ability/moxie.c | 8 +- test/battle/ability/mummy.c | 4 +- test/battle/ability/pastel_veil.c | 20 +- test/battle/ability/quick_draw.c | 4 +- test/battle/ability/storm_drain.c | 4 +- test/battle/ability/switch_in_abilities.c | 4 +- test/battle/ability/volt_absorb.c | 4 +- test/battle/ability/zen_mode.c | 12 +- test/battle/ai/ai_switching.c | 6 +- test/battle/crit_chance.c | 2 +- test/battle/form_change/begin_battle.c | 20 +- test/battle/gimmick/dynamax.c | 2 +- test/battle/gimmick/terastal.c | 8 +- test/battle/hold_effect/ogerpon_mask.c | 8 +- test/battle/hold_effect/protective_pads.c | 2 +- test/battle/hold_effect/restore_stats.c | 4 +- test/battle/move_effect/chilly_reception.c | 16 +- test/battle/move_effect/explosion.c | 2 +- test/battle/move_effect/gastro_acid.c | 4 +- test/battle/move_effect/ivy_cudgel.c | 8 +- test/battle/move_effect/raging_bull.c | 6 +- test/battle/move_effect/role_play.c | 2 +- test/battle/move_effect_secondary/freeze.c | 6 +- test/battle/terrain/electric.c | 2 +- test/battle/terrain/grassy.c | 2 +- test/battle/terrain/misty.c | 2 +- test/battle/terrain/psychic.c | 2 +- 55 files changed, 934 insertions(+), 1064 deletions(-) diff --git a/include/constants/cries.h b/include/constants/cries.h index 3213f62d3f..ca1529bbdf 100644 --- a/include/constants/cries.h +++ b/include/constants/cries.h @@ -1636,7 +1636,7 @@ enum { #if P_FAMILY_FLABEBE CRY_FLABEBE, CRY_FLOETTE, - CRY_FLOETTE_ETERNAL_FLOWER, + CRY_FLOETTE_ETERNAL, CRY_FLORGES, #endif //P_FAMILY_FLABEBE #if P_FAMILY_SKIDDO @@ -2084,12 +2084,12 @@ enum { CRY_STONJOURNER, #endif //P_FAMILY_STONJOURNER #if P_FAMILY_EISCUE - CRY_EISCUE_ICE_FACE, + CRY_EISCUE_ICE, CRY_EISCUE_NOICE_FACE, #endif //P_FAMILY_EISCUE #if P_FAMILY_INDEEDEE - CRY_INDEEDEE_MALE, - CRY_INDEEDEE_FEMALE, + CRY_INDEEDEE_M, + CRY_INDEEDEE_F, #endif //P_FAMILY_INDEEDEE #if P_FAMILY_MORPEKO CRY_MORPEKO_FULL_BELLY, @@ -2123,11 +2123,11 @@ enum { CRY_DRAGAPULT, #endif //P_FAMILY_DREEPY #if P_FAMILY_ZACIAN - CRY_ZACIAN_HERO_OF_MANY_BATTLES, + CRY_ZACIAN_HERO, CRY_ZACIAN_CROWNED_SWORD, #endif //P_FAMILY_ZACIAN #if P_FAMILY_ZAMAZENTA - CRY_ZAMAZENTA_HERO_OF_MANY_BATTLES, + CRY_ZAMAZENTA_HERO, CRY_ZAMAZENTA_CROWNED_SHIELD, #endif //P_FAMILY_ZAMAZENTA #if P_FAMILY_ETERNATUS @@ -2182,8 +2182,8 @@ enum { #endif //P_FAMILY_QUAXLY #if P_FAMILY_LECHONK CRY_LECHONK, - CRY_OINKOLOGNE_MALE, - CRY_OINKOLOGNE_FEMALE, + CRY_OINKOLOGNE_M, + CRY_OINKOLOGNE_F, #endif //P_FAMILY_LECHONK #if P_FAMILY_TAROUNTULA CRY_TAROUNTULA, diff --git a/include/constants/species.h b/include/constants/species.h index a0cce51398..4c9a32bb13 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -1,6 +1,11 @@ #ifndef GUARD_CONSTANTS_SPECIES_H #define GUARD_CONSTANTS_SPECIES_H +// NOTE: The defines here are named in order to match Pokémon Showdown's naming conventions. This is done to avoid issues with trainerproc parsing species names. If a Pokémon does not have an entry on Showdown, use your best judgement. +// Additionally, we have tried to reduce down to as few defines as possible, because programs like porymap does not always properly handle having multiple defines. +// Discussion: https://github.com/rh-hideout/pokeemerald-expansion/pull/5075#issuecomment-2384088602 +// Showdown: https://github.com/smogon/Pokemon-Showdown/blob/master/data/pokedex.ts + #define SPECIES_NONE 0 #define SPECIES_BULBASAUR 1 #define SPECIES_IVYSAUR 2 @@ -415,12 +420,12 @@ #define SPECIES_RAMPARDOS 409 #define SPECIES_SHIELDON 410 #define SPECIES_BASTIODON 411 -#define SPECIES_BURMY SPECIES_BURMY_PLANT_CLOAK -#define SPECIES_BURMY_PLANT_CLOAK 412 -#define SPECIES_WORMADAM SPECIES_WORMADAM_PLANT_CLOAK -#define SPECIES_WORMADAM_PLANT_CLOAK 413 -#define SPECIES_MOTHIM SPECIES_MOTHIM_PLANT_CLOAK -#define SPECIES_MOTHIM_PLANT_CLOAK 414 +#define SPECIES_BURMY_PLANT 412 +#define SPECIES_BURMY SPECIES_BURMY_PLANT +#define SPECIES_WORMADAM_PLANT 413 +#define SPECIES_WORMADAM SPECIES_WORMADAM_PLANT +#define SPECIES_MOTHIM_PLANT 414 +#define SPECIES_MOTHIM SPECIES_MOTHIM_PLANT #define SPECIES_COMBEE 415 #define SPECIES_VESPIQUEN 416 #define SPECIES_PACHIRISU 417 @@ -429,10 +434,10 @@ #define SPECIES_CHERUBI 420 #define SPECIES_CHERRIM SPECIES_CHERRIM_OVERCAST #define SPECIES_CHERRIM_OVERCAST 421 -#define SPECIES_SHELLOS SPECIES_SHELLOS_WEST_SEA -#define SPECIES_SHELLOS_WEST_SEA 422 -#define SPECIES_GASTRODON SPECIES_GASTRODON_WEST_SEA -#define SPECIES_GASTRODON_WEST_SEA 423 +#define SPECIES_SHELLOS_WEST 422 +#define SPECIES_SHELLOS SPECIES_SHELLOS_WEST +#define SPECIES_GASTRODON_WEST 423 +#define SPECIES_GASTRODON SPECIES_GASTRODON_WEST #define SPECIES_AMBIPOM 424 #define SPECIES_DRIFLOON 425 #define SPECIES_DRIFBLIM 426 @@ -568,8 +573,8 @@ #define SPECIES_KROKOROK 552 #define SPECIES_KROOKODILE 553 #define SPECIES_DARUMAKA 554 -#define SPECIES_DARMANITAN SPECIES_DARMANITAN_STANDARD_MODE -#define SPECIES_DARMANITAN_STANDARD_MODE 555 +#define SPECIES_DARMANITAN SPECIES_DARMANITAN_STANDARD +#define SPECIES_DARMANITAN_STANDARD 555 #define SPECIES_MARACTUS 556 #define SPECIES_DWEBBLE 557 #define SPECIES_CRUSTLE 558 @@ -693,12 +698,12 @@ #define SPECIES_VIVILLON_ICY_SNOW 666 #define SPECIES_LITLEO 667 #define SPECIES_PYROAR 668 -#define SPECIES_FLABEBE SPECIES_FLABEBE_RED_FLOWER -#define SPECIES_FLABEBE_RED_FLOWER 669 -#define SPECIES_FLOETTE SPECIES_FLOETTE_RED_FLOWER -#define SPECIES_FLOETTE_RED_FLOWER 670 -#define SPECIES_FLORGES SPECIES_FLORGES_RED_FLOWER -#define SPECIES_FLORGES_RED_FLOWER 671 +#define SPECIES_FLABEBE SPECIES_FLABEBE_RED +#define SPECIES_FLABEBE_RED 669 +#define SPECIES_FLOETTE SPECIES_FLOETTE_RED +#define SPECIES_FLOETTE_RED 670 +#define SPECIES_FLORGES SPECIES_FLORGES_RED +#define SPECIES_FLORGES_RED 671 #define SPECIES_SKIDDO 672 #define SPECIES_GOGOAT 673 #define SPECIES_PANCHAM 674 @@ -706,8 +711,8 @@ #define SPECIES_FURFROU SPECIES_FURFROU_NATURAL #define SPECIES_FURFROU_NATURAL 676 #define SPECIES_ESPURR 677 -#define SPECIES_MEOWSTIC SPECIES_MEOWSTIC_MALE -#define SPECIES_MEOWSTIC_MALE 678 +#define SPECIES_MEOWSTIC SPECIES_MEOWSTIC_M +#define SPECIES_MEOWSTIC_M 678 #define SPECIES_HONEDGE 679 #define SPECIES_DOUBLADE 680 #define SPECIES_AEGISLASH SPECIES_AEGISLASH_SHIELD @@ -752,8 +757,7 @@ #define SPECIES_XERNEAS_NEUTRAL 716 #define SPECIES_YVELTAL 717 #define SPECIES_ZYGARDE SPECIES_ZYGARDE_50 -#define SPECIES_ZYGARDE_50 SPECIES_ZYGARDE_50_AURA_BREAK -#define SPECIES_ZYGARDE_50_AURA_BREAK 718 +#define SPECIES_ZYGARDE_50 718 #define SPECIES_DIANCIE 719 #define SPECIES_HOOPA SPECIES_HOOPA_CONFINED #define SPECIES_HOOPA_CONFINED 720 @@ -925,10 +929,10 @@ #define SPECIES_SNOM 872 #define SPECIES_FROSMOTH 873 #define SPECIES_STONJOURNER 874 -#define SPECIES_EISCUE SPECIES_EISCUE_ICE_FACE -#define SPECIES_EISCUE_ICE_FACE 875 -#define SPECIES_INDEEDEE SPECIES_INDEEDEE_MALE -#define SPECIES_INDEEDEE_MALE 876 +#define SPECIES_EISCUE SPECIES_EISCUE_ICE +#define SPECIES_EISCUE_ICE 875 +#define SPECIES_INDEEDEE SPECIES_INDEEDEE_M +#define SPECIES_INDEEDEE_M 876 #define SPECIES_MORPEKO SPECIES_MORPEKO_FULL_BELLY #define SPECIES_MORPEKO_FULL_BELLY 877 #define SPECIES_CUFANT 878 @@ -941,14 +945,14 @@ #define SPECIES_DREEPY 885 #define SPECIES_DRAKLOAK 886 #define SPECIES_DRAGAPULT 887 -#define SPECIES_ZACIAN SPECIES_ZACIAN_HERO_OF_MANY_BATTLES -#define SPECIES_ZACIAN_HERO_OF_MANY_BATTLES 888 -#define SPECIES_ZAMAZENTA SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES -#define SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES 889 +#define SPECIES_ZACIAN SPECIES_ZACIAN_HERO +#define SPECIES_ZACIAN_HERO 888 +#define SPECIES_ZAMAZENTA SPECIES_ZAMAZENTA_HERO +#define SPECIES_ZAMAZENTA_HERO 889 #define SPECIES_ETERNATUS 890 #define SPECIES_KUBFU 891 -#define SPECIES_URSHIFU SPECIES_URSHIFU_SINGLE_STRIKE_STYLE -#define SPECIES_URSHIFU_SINGLE_STRIKE_STYLE 892 +#define SPECIES_URSHIFU SPECIES_URSHIFU_SINGLE_STRIKE +#define SPECIES_URSHIFU_SINGLE_STRIKE 892 #define SPECIES_ZARUDE 893 #define SPECIES_REGIELEKI 894 #define SPECIES_REGIDRAGO 895 @@ -958,8 +962,8 @@ #define SPECIES_WYRDEER 899 #define SPECIES_KLEAVOR 900 #define SPECIES_URSALUNA 901 -#define SPECIES_BASCULEGION SPECIES_BASCULEGION_MALE -#define SPECIES_BASCULEGION_MALE 902 +#define SPECIES_BASCULEGION SPECIES_BASCULEGION_M +#define SPECIES_BASCULEGION_M 902 #define SPECIES_SNEASLER 903 #define SPECIES_OVERQWIL 904 #define SPECIES_ENAMORUS SPECIES_ENAMORUS_INCARNATE @@ -1014,78 +1018,78 @@ #define SPECIES_RAYQUAZA_MEGA 953 #define SPECIES_KYOGRE_PRIMAL 954 #define SPECIES_GROUDON_PRIMAL 955 -#define SPECIES_RATTATA_ALOLAN 956 -#define SPECIES_RATICATE_ALOLAN 957 -#define SPECIES_RAICHU_ALOLAN 958 -#define SPECIES_SANDSHREW_ALOLAN 959 -#define SPECIES_SANDSLASH_ALOLAN 960 -#define SPECIES_VULPIX_ALOLAN 961 -#define SPECIES_NINETALES_ALOLAN 962 -#define SPECIES_DIGLETT_ALOLAN 963 -#define SPECIES_DUGTRIO_ALOLAN 964 -#define SPECIES_MEOWTH_ALOLAN 965 -#define SPECIES_PERSIAN_ALOLAN 966 -#define SPECIES_GEODUDE_ALOLAN 967 -#define SPECIES_GRAVELER_ALOLAN 968 -#define SPECIES_GOLEM_ALOLAN 969 -#define SPECIES_GRIMER_ALOLAN 970 -#define SPECIES_MUK_ALOLAN 971 -#define SPECIES_EXEGGUTOR_ALOLAN 972 -#define SPECIES_MAROWAK_ALOLAN 973 -#define SPECIES_MEOWTH_GALARIAN 974 -#define SPECIES_PONYTA_GALARIAN 975 -#define SPECIES_RAPIDASH_GALARIAN 976 -#define SPECIES_SLOWPOKE_GALARIAN 977 -#define SPECIES_SLOWBRO_GALARIAN 978 -#define SPECIES_FARFETCHD_GALARIAN 979 -#define SPECIES_WEEZING_GALARIAN 980 -#define SPECIES_MR_MIME_GALARIAN 981 -#define SPECIES_ARTICUNO_GALARIAN 982 -#define SPECIES_ZAPDOS_GALARIAN 983 -#define SPECIES_MOLTRES_GALARIAN 984 -#define SPECIES_SLOWKING_GALARIAN 985 -#define SPECIES_CORSOLA_GALARIAN 986 -#define SPECIES_ZIGZAGOON_GALARIAN 987 -#define SPECIES_LINOONE_GALARIAN 988 -#define SPECIES_DARUMAKA_GALARIAN 989 -#define SPECIES_DARMANITAN_GALARIAN SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE -#define SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE 990 -#define SPECIES_YAMASK_GALARIAN 991 -#define SPECIES_STUNFISK_GALARIAN 992 +#define SPECIES_RATTATA_ALOLA 956 +#define SPECIES_RATICATE_ALOLA 957 +#define SPECIES_RAICHU_ALOLA 958 +#define SPECIES_SANDSHREW_ALOLA 959 +#define SPECIES_SANDSLASH_ALOLA 960 +#define SPECIES_VULPIX_ALOLA 961 +#define SPECIES_NINETALES_ALOLA 962 +#define SPECIES_DIGLETT_ALOLA 963 +#define SPECIES_DUGTRIO_ALOLA 964 +#define SPECIES_MEOWTH_ALOLA 965 +#define SPECIES_PERSIAN_ALOLA 966 +#define SPECIES_GEODUDE_ALOLA 967 +#define SPECIES_GRAVELER_ALOLA 968 +#define SPECIES_GOLEM_ALOLA 969 +#define SPECIES_GRIMER_ALOLA 970 +#define SPECIES_MUK_ALOLA 971 +#define SPECIES_EXEGGUTOR_ALOLA 972 +#define SPECIES_MAROWAK_ALOLA 973 +#define SPECIES_MEOWTH_GALAR 974 +#define SPECIES_PONYTA_GALAR 975 +#define SPECIES_RAPIDASH_GALAR 976 +#define SPECIES_SLOWPOKE_GALAR 977 +#define SPECIES_SLOWBRO_GALAR 978 +#define SPECIES_FARFETCHD_GALAR 979 +#define SPECIES_WEEZING_GALAR 980 +#define SPECIES_MR_MIME_GALAR 981 +#define SPECIES_ARTICUNO_GALAR 982 +#define SPECIES_ZAPDOS_GALAR 983 +#define SPECIES_MOLTRES_GALAR 984 +#define SPECIES_SLOWKING_GALAR 985 +#define SPECIES_CORSOLA_GALAR 986 +#define SPECIES_ZIGZAGOON_GALAR 987 +#define SPECIES_LINOONE_GALAR 988 +#define SPECIES_DARUMAKA_GALAR 989 +#define SPECIES_DARMANITAN_GALAR_STANDARD 990 +#define SPECIES_DARMANITAN_GALAR SPECIES_DARMANITAN_GALAR_STANDARD +#define SPECIES_YAMASK_GALAR 991 +#define SPECIES_STUNFISK_GALAR 992 //Hisuian Forms -#define SPECIES_GROWLITHE_HISUIAN 993 -#define SPECIES_ARCANINE_HISUIAN 994 -#define SPECIES_VOLTORB_HISUIAN 995 -#define SPECIES_ELECTRODE_HISUIAN 996 -#define SPECIES_TYPHLOSION_HISUIAN 997 -#define SPECIES_QWILFISH_HISUIAN 998 -#define SPECIES_SNEASEL_HISUIAN 999 -#define SPECIES_SAMUROTT_HISUIAN 1000 -#define SPECIES_LILLIGANT_HISUIAN 1001 -#define SPECIES_ZORUA_HISUIAN 1002 -#define SPECIES_ZOROARK_HISUIAN 1003 -#define SPECIES_BRAVIARY_HISUIAN 1004 -#define SPECIES_SLIGGOO_HISUIAN 1005 -#define SPECIES_GOODRA_HISUIAN 1006 -#define SPECIES_AVALUGG_HISUIAN 1007 -#define SPECIES_DECIDUEYE_HISUIAN 1008 +#define SPECIES_GROWLITHE_HISUI 993 +#define SPECIES_ARCANINE_HISUI 994 +#define SPECIES_VOLTORB_HISUI 995 +#define SPECIES_ELECTRODE_HISUI 996 +#define SPECIES_TYPHLOSION_HISUI 997 +#define SPECIES_QWILFISH_HISUI 998 +#define SPECIES_SNEASEL_HISUI 999 +#define SPECIES_SAMUROTT_HISUI 1000 +#define SPECIES_LILLIGANT_HISUI 1001 +#define SPECIES_ZORUA_HISUI 1002 +#define SPECIES_ZOROARK_HISUI 1003 +#define SPECIES_BRAVIARY_HISUI 1004 +#define SPECIES_SLIGGOO_HISUI 1005 +#define SPECIES_GOODRA_HISUI 1006 +#define SPECIES_AVALUGG_HISUI 1007 +#define SPECIES_DECIDUEYE_HISUI 1008 // Misc Forms #define SPECIES_PIKACHU_COSPLAY 1009 #define SPECIES_PIKACHU_ROCK_STAR 1010 #define SPECIES_PIKACHU_BELLE 1011 #define SPECIES_PIKACHU_POP_STAR 1012 -#define SPECIES_PIKACHU_PH_D 1013 +#define SPECIES_PIKACHU_PHD 1013 #define SPECIES_PIKACHU_LIBRE 1014 -#define SPECIES_PIKACHU_ORIGINAL_CAP 1015 -#define SPECIES_PIKACHU_HOENN_CAP 1016 -#define SPECIES_PIKACHU_SINNOH_CAP 1017 -#define SPECIES_PIKACHU_UNOVA_CAP 1018 -#define SPECIES_PIKACHU_KALOS_CAP 1019 -#define SPECIES_PIKACHU_ALOLA_CAP 1020 +#define SPECIES_PIKACHU_ORIGINAL 1015 +#define SPECIES_PIKACHU_HOENN 1016 +#define SPECIES_PIKACHU_SINNOH 1017 +#define SPECIES_PIKACHU_UNOVA 1018 +#define SPECIES_PIKACHU_KALOS 1019 +#define SPECIES_PIKACHU_ALOLA 1020 #define SPECIES_PIKACHU_PARTNER_CAP 1021 -#define SPECIES_PIKACHU_WORLD_CAP 1022 +#define SPECIES_PIKACHU_WORLD 1022 #define SPECIES_PICHU_SPIKY_EARED 1023 #define SPECIES_UNOWN_B 1024 #define SPECIES_UNOWN_C 1025 @@ -1112,21 +1116,21 @@ #define SPECIES_UNOWN_X 1046 #define SPECIES_UNOWN_Y 1047 #define SPECIES_UNOWN_Z 1048 -#define SPECIES_UNOWN_EMARK 1049 -#define SPECIES_UNOWN_QMARK 1050 +#define SPECIES_UNOWN_EXCLAMATION 1049 +#define SPECIES_UNOWN_QUESTION 1050 #define SPECIES_CASTFORM_SUNNY 1051 #define SPECIES_CASTFORM_RAINY 1052 #define SPECIES_CASTFORM_SNOWY 1053 #define SPECIES_DEOXYS_ATTACK 1054 #define SPECIES_DEOXYS_DEFENSE 1055 #define SPECIES_DEOXYS_SPEED 1056 -#define SPECIES_BURMY_SANDY_CLOAK 1057 -#define SPECIES_BURMY_TRASH_CLOAK 1058 -#define SPECIES_WORMADAM_SANDY_CLOAK 1059 -#define SPECIES_WORMADAM_TRASH_CLOAK 1060 +#define SPECIES_BURMY_SANDY 1057 +#define SPECIES_BURMY_TRASH 1058 +#define SPECIES_WORMADAM_SANDY 1059 +#define SPECIES_WORMADAM_TRASH 1060 #define SPECIES_CHERRIM_SUNSHINE 1061 -#define SPECIES_SHELLOS_EAST_SEA 1062 -#define SPECIES_GASTRODON_EAST_SEA 1063 +#define SPECIES_SHELLOS_EAST 1062 +#define SPECIES_GASTRODON_EAST 1063 #define SPECIES_ROTOM_HEAT 1064 #define SPECIES_ROTOM_WASH 1065 #define SPECIES_ROTOM_FROST 1066 @@ -1155,8 +1159,8 @@ #define SPECIES_ARCEUS_FAIRY 1089 #define SPECIES_BASCULIN_BLUE_STRIPED 1090 #define SPECIES_BASCULIN_WHITE_STRIPED 1091 -#define SPECIES_DARMANITAN_ZEN_MODE 1092 -#define SPECIES_DARMANITAN_GALARIAN_ZEN_MODE 1093 +#define SPECIES_DARMANITAN_ZEN 1092 +#define SPECIES_DARMANITAN_GALAR_ZEN 1093 #define SPECIES_DEERLING_SUMMER 1094 #define SPECIES_DEERLING_AUTUMN 1095 #define SPECIES_DEERLING_WINTER 1096 @@ -1171,11 +1175,12 @@ #define SPECIES_KYUREM_BLACK 1105 #define SPECIES_KELDEO_RESOLUTE 1106 #define SPECIES_MELOETTA_PIROUETTE 1107 -#define SPECIES_GENESECT_DOUSE_DRIVE 1108 -#define SPECIES_GENESECT_SHOCK_DRIVE 1109 -#define SPECIES_GENESECT_BURN_DRIVE 1110 -#define SPECIES_GENESECT_CHILL_DRIVE 1111 -#define SPECIES_GRENINJA_BATTLE_BOND 1112 +#define SPECIES_GENESECT_DOUSE 1108 +#define SPECIES_GENESECT_SHOCK 1109 +#define SPECIES_GENESECT_BURN 1110 +#define SPECIES_GENESECT_CHILL 1111 +#define SPECIES_GRENINJA_BOND 1112 +#define SPECIES_GRENINJA_BATTLE_BOND SPECIES_GRENINJA_BOND #define SPECIES_GRENINJA_ASH 1113 #define SPECIES_VIVILLON_POLAR 1114 #define SPECIES_VIVILLON_TUNDRA 1115 @@ -1195,20 +1200,20 @@ #define SPECIES_VIVILLON_OCEAN 1129 #define SPECIES_VIVILLON_JUNGLE 1130 #define SPECIES_VIVILLON_FANCY 1131 -#define SPECIES_VIVILLON_POKE_BALL 1132 -#define SPECIES_FLABEBE_YELLOW_FLOWER 1133 -#define SPECIES_FLABEBE_ORANGE_FLOWER 1134 -#define SPECIES_FLABEBE_BLUE_FLOWER 1135 -#define SPECIES_FLABEBE_WHITE_FLOWER 1136 -#define SPECIES_FLOETTE_YELLOW_FLOWER 1137 -#define SPECIES_FLOETTE_ORANGE_FLOWER 1138 -#define SPECIES_FLOETTE_BLUE_FLOWER 1139 -#define SPECIES_FLOETTE_WHITE_FLOWER 1140 -#define SPECIES_FLOETTE_ETERNAL_FLOWER 1141 -#define SPECIES_FLORGES_YELLOW_FLOWER 1142 -#define SPECIES_FLORGES_ORANGE_FLOWER 1143 -#define SPECIES_FLORGES_BLUE_FLOWER 1144 -#define SPECIES_FLORGES_WHITE_FLOWER 1145 +#define SPECIES_VIVILLON_POKEBALL 1132 +#define SPECIES_FLABEBE_YELLOW 1133 +#define SPECIES_FLABEBE_ORANGE 1134 +#define SPECIES_FLABEBE_BLUE 1135 +#define SPECIES_FLABEBE_WHITE 1136 +#define SPECIES_FLOETTE_YELLOW 1137 +#define SPECIES_FLOETTE_ORANGE 1138 +#define SPECIES_FLOETTE_BLUE 1139 +#define SPECIES_FLOETTE_WHITE 1140 +#define SPECIES_FLOETTE_ETERNAL 1141 +#define SPECIES_FLORGES_YELLOW 1142 +#define SPECIES_FLORGES_ORANGE 1143 +#define SPECIES_FLORGES_BLUE 1144 +#define SPECIES_FLORGES_WHITE 1145 #define SPECIES_FURFROU_HEART_TRIM 1146 #define SPECIES_FURFROU_STAR_TRIM 1147 #define SPECIES_FURFROU_DIAMOND_TRIM 1148 @@ -1218,7 +1223,7 @@ #define SPECIES_FURFROU_LA_REINE_TRIM 1152 #define SPECIES_FURFROU_KABUKI_TRIM 1153 #define SPECIES_FURFROU_PHARAOH_TRIM 1154 -#define SPECIES_MEOWSTIC_FEMALE 1155 +#define SPECIES_MEOWSTIC_F 1155 #define SPECIES_AEGISLASH_BLADE 1156 #define SPECIES_PUMPKABOO_SMALL 1157 #define SPECIES_PUMPKABOO_LARGE 1158 @@ -1281,7 +1286,7 @@ #define SPECIES_NECROZMA_DUSK_MANE 1207 #define SPECIES_NECROZMA_DAWN_WINGS 1208 #define SPECIES_NECROZMA_ULTRA 1209 -#define SPECIES_MAGEARNA_ORIGINAL_COLOR 1210 +#define SPECIES_MAGEARNA_ORIGINAL 1210 #define SPECIES_CRAMORANT_GULPING 1211 #define SPECIES_CRAMORANT_GORGING 1212 #define SPECIES_TOXTRICITY_LOW_KEY 1213 @@ -1303,17 +1308,17 @@ #define SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL 1221 #define SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL 1222 #define SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL 1223 -#define SPECIES_EISCUE_NOICE_FACE 1224 -#define SPECIES_INDEEDEE_FEMALE 1225 +#define SPECIES_EISCUE_NOICE 1224 +#define SPECIES_INDEEDEE_F 1225 #define SPECIES_MORPEKO_HANGRY 1226 -#define SPECIES_ZACIAN_CROWNED_SWORD 1227 -#define SPECIES_ZAMAZENTA_CROWNED_SHIELD 1228 +#define SPECIES_ZACIAN_CROWNED 1227 +#define SPECIES_ZAMAZENTA_CROWNED 1228 #define SPECIES_ETERNATUS_ETERNAMAX 1229 -#define SPECIES_URSHIFU_RAPID_STRIKE_STYLE 1230 +#define SPECIES_URSHIFU_RAPID_STRIKE 1230 #define SPECIES_ZARUDE_DADA 1231 -#define SPECIES_CALYREX_ICE_RIDER 1232 -#define SPECIES_CALYREX_SHADOW_RIDER 1233 -#define SPECIES_BASCULEGION_FEMALE 1234 +#define SPECIES_CALYREX_ICE 1232 +#define SPECIES_CALYREX_SHADOW 1233 +#define SPECIES_BASCULEGION_F 1234 #define SPECIES_ALCREMIE_BERRY SPECIES_ALCREMIE_BERRY_VANILLA_CREAM #define SPECIES_ALCREMIE_BERRY_VANILLA_CREAM 1235 #define SPECIES_ALCREMIE_BERRY_RUBY_CREAM 1236 @@ -1387,9 +1392,9 @@ #define SPECIES_QUAXWELL 1296 #define SPECIES_QUAQUAVAL 1297 #define SPECIES_LECHONK 1298 -#define SPECIES_OINKOLOGNE SPECIES_OINKOLOGNE_MALE -#define SPECIES_OINKOLOGNE_MALE 1299 -#define SPECIES_OINKOLOGNE_FEMALE 1300 +#define SPECIES_OINKOLOGNE SPECIES_OINKOLOGNE_M +#define SPECIES_OINKOLOGNE_M 1299 +#define SPECIES_OINKOLOGNE_F 1300 #define SPECIES_TAROUNTULA 1301 #define SPECIES_SPIDOPS 1302 #define SPECIES_NYMBLE 1303 @@ -1398,19 +1403,19 @@ #define SPECIES_PAWMO 1306 #define SPECIES_PAWMOT 1307 #define SPECIES_TANDEMAUS 1308 -#define SPECIES_MAUSHOLD SPECIES_MAUSHOLD_FAMILY_OF_THREE -#define SPECIES_MAUSHOLD_FAMILY_OF_THREE 1309 -#define SPECIES_MAUSHOLD_FAMILY_OF_FOUR 1310 +#define SPECIES_MAUSHOLD SPECIES_MAUSHOLD_THREE +#define SPECIES_MAUSHOLD_THREE 1309 +#define SPECIES_MAUSHOLD_FOUR 1310 #define SPECIES_FIDOUGH 1311 #define SPECIES_DACHSBUN 1312 #define SPECIES_SMOLIV 1313 #define SPECIES_DOLLIV 1314 #define SPECIES_ARBOLIVA 1315 -#define SPECIES_SQUAWKABILLY SPECIES_SQUAWKABILLY_GREEN_PLUMAGE -#define SPECIES_SQUAWKABILLY_GREEN_PLUMAGE 1316 -#define SPECIES_SQUAWKABILLY_BLUE_PLUMAGE 1317 -#define SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE 1318 -#define SPECIES_SQUAWKABILLY_WHITE_PLUMAGE 1319 +#define SPECIES_SQUAWKABILLY SPECIES_SQUAWKABILLY_GREEN +#define SPECIES_SQUAWKABILLY_GREEN 1316 +#define SPECIES_SQUAWKABILLY_BLUE 1317 +#define SPECIES_SQUAWKABILLY_YELLOW 1318 +#define SPECIES_SQUAWKABILLY_WHITE 1319 #define SPECIES_NACLI 1320 #define SPECIES_NACLSTACK 1321 #define SPECIES_GARGANACL 1322 @@ -1498,10 +1503,10 @@ #define SPECIES_KORAIDON 1400 #define SPECIES_MIRAIDON 1401 // Paldean Forms -#define SPECIES_TAUROS_PALDEAN_COMBAT_BREED 1402 -#define SPECIES_TAUROS_PALDEAN_BLAZE_BREED 1403 -#define SPECIES_TAUROS_PALDEAN_AQUA_BREED 1404 -#define SPECIES_WOOPER_PALDEAN 1405 +#define SPECIES_TAUROS_PALDEA_COMBAT 1402 +#define SPECIES_TAUROS_PALDEA_BLAZE 1403 +#define SPECIES_TAUROS_PALDEA_AQUA 1404 +#define SPECIES_WOOPER_PALDEA 1405 // Scarlet and Violet 1.2.0 #define SPECIES_WALKING_WAKE 1406 #define SPECIES_IRON_LEAVES 1407 @@ -1516,15 +1521,15 @@ #define SPECIES_OKIDOGI 1413 #define SPECIES_MUNKIDORI 1414 #define SPECIES_FEZANDIPITI 1415 -#define SPECIES_OGERPON SPECIES_OGERPON_TEAL_MASK -#define SPECIES_OGERPON_TEAL_MASK 1416 -#define SPECIES_OGERPON_WELLSPRING_MASK 1417 -#define SPECIES_OGERPON_HEARTHFLAME_MASK 1418 -#define SPECIES_OGERPON_CORNERSTONE_MASK 1419 -#define SPECIES_OGERPON_TEAL_MASK_TERA 1420 -#define SPECIES_OGERPON_WELLSPRING_MASK_TERA 1421 -#define SPECIES_OGERPON_HEARTHFLAME_MASK_TERA 1422 -#define SPECIES_OGERPON_CORNERSTONE_MASK_TERA 1423 +#define SPECIES_OGERPON SPECIES_OGERPON_TEAL +#define SPECIES_OGERPON_TEAL 1416 +#define SPECIES_OGERPON_WELLSPRING 1417 +#define SPECIES_OGERPON_HEARTHFLAME 1418 +#define SPECIES_OGERPON_CORNERSTONE 1419 +#define SPECIES_OGERPON_TEAL_TERA 1420 +#define SPECIES_OGERPON_WELLSPRING_TERA 1421 +#define SPECIES_OGERPON_HEARTHFLAME_TERA 1422 +#define SPECIES_OGERPON_CORNERSTONE_TERA 1423 #define SPECIES_URSALUNA_BLOODMOON 1424 // Indigo Disk #define SPECIES_ARCHALUDON 1425 @@ -1539,8 +1544,8 @@ #define SPECIES_TERAPAGOS_STELLAR 1433 #define SPECIES_PECHARUNT 1434 #define SPECIES_LUGIA_SHADOW 1435 -#define SPECIES_MOTHIM_SANDY_CLOAK 1436 -#define SPECIES_MOTHIM_TRASH_CLOAK 1437 +#define SPECIES_MOTHIM_SANDY 1436 +#define SPECIES_MOTHIM_TRASH 1437 #define SPECIES_SCATTERBUG_POLAR 1438 #define SPECIES_SCATTERBUG_TUNDRA 1439 #define SPECIES_SCATTERBUG_CONTINENTAL 1440 @@ -1559,7 +1564,7 @@ #define SPECIES_SCATTERBUG_OCEAN 1453 #define SPECIES_SCATTERBUG_JUNGLE 1454 #define SPECIES_SCATTERBUG_FANCY 1455 -#define SPECIES_SCATTERBUG_POKE_BALL 1456 +#define SPECIES_SCATTERBUG_POKEBALL 1456 #define SPECIES_SPEWPA_POLAR 1457 #define SPECIES_SPEWPA_TUNDRA 1458 #define SPECIES_SPEWPA_CONTINENTAL 1459 @@ -1578,8 +1583,8 @@ #define SPECIES_SPEWPA_OCEAN 1472 #define SPECIES_SPEWPA_JUNGLE 1473 #define SPECIES_SPEWPA_FANCY 1474 -#define SPECIES_SPEWPA_POKE_BALL 1475 -#define SPECIES_RATICATE_ALOLAN_TOTEM 1476 +#define SPECIES_SPEWPA_POKEBALL 1475 +#define SPECIES_RATICATE_ALOLA_TOTEM 1476 #define SPECIES_GUMSHOOS_TOTEM 1477 #define SPECIES_VIKAVOLT_TOTEM 1478 #define SPECIES_LURANTIS_TOTEM 1479 @@ -1587,191 +1592,56 @@ #define SPECIES_MIMIKYU_TOTEM SPECIES_MIMIKYU_TOTEM_DISGUISED #define SPECIES_MIMIKYU_TOTEM_DISGUISED 1481 #define SPECIES_KOMMO_O_TOTEM 1482 -#define SPECIES_MAROWAK_ALOLAN_TOTEM 1483 +#define SPECIES_MAROWAK_ALOLA_TOTEM 1483 #define SPECIES_RIBOMBEE_TOTEM 1484 #define SPECIES_ARAQUANID_TOTEM 1485 #define SPECIES_TOGEDEMARU_TOTEM 1486 -#define SPECIES_PIKACHU_PARTNER 1487 -#define SPECIES_EEVEE_PARTNER 1488 -#define SPECIES_VENUSAUR_GIGANTAMAX 1489 -#define SPECIES_BLASTOISE_GIGANTAMAX 1490 -#define SPECIES_CHARIZARD_GIGANTAMAX 1491 -#define SPECIES_BUTTERFREE_GIGANTAMAX 1492 -#define SPECIES_PIKACHU_GIGANTAMAX 1493 -#define SPECIES_MEOWTH_GIGANTAMAX 1494 -#define SPECIES_MACHAMP_GIGANTAMAX 1495 -#define SPECIES_GENGAR_GIGANTAMAX 1496 -#define SPECIES_KINGLER_GIGANTAMAX 1497 -#define SPECIES_LAPRAS_GIGANTAMAX 1498 -#define SPECIES_EEVEE_GIGANTAMAX 1499 -#define SPECIES_SNORLAX_GIGANTAMAX 1500 -#define SPECIES_GARBODOR_GIGANTAMAX 1501 -#define SPECIES_MELMETAL_GIGANTAMAX 1502 -#define SPECIES_RILLABOOM_GIGANTAMAX 1503 -#define SPECIES_CINDERACE_GIGANTAMAX 1504 -#define SPECIES_INTELEON_GIGANTAMAX 1505 -#define SPECIES_CORVIKNIGHT_GIGANTAMAX 1506 -#define SPECIES_ORBEETLE_GIGANTAMAX 1507 -#define SPECIES_DREDNAW_GIGANTAMAX 1508 -#define SPECIES_COALOSSAL_GIGANTAMAX 1509 -#define SPECIES_FLAPPLE_GIGANTAMAX 1510 -#define SPECIES_APPLETUN_GIGANTAMAX 1511 -#define SPECIES_SANDACONDA_GIGANTAMAX 1512 -#define SPECIES_TOXTRICITY_AMPED_GIGANTAMAX 1513 -#define SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX 1514 -#define SPECIES_CENTISKORCH_GIGANTAMAX 1515 -#define SPECIES_HATTERENE_GIGANTAMAX 1516 -#define SPECIES_GRIMMSNARL_GIGANTAMAX 1517 -#define SPECIES_ALCREMIE_GIGANTAMAX 1518 -#define SPECIES_COPPERAJAH_GIGANTAMAX 1519 -#define SPECIES_DURALUDON_GIGANTAMAX 1520 -#define SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX 1521 -#define SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX 1522 -#define SPECIES_MIMIKYU_TOTEM_BUSTED 1523 +#define SPECIES_PIKACHU_STARTER 1487 +#define SPECIES_EEVEE_STARTER 1488 +#define SPECIES_VENUSAUR_GMAX 1489 +#define SPECIES_BLASTOISE_GMAX 1490 +#define SPECIES_CHARIZARD_GMAX 1491 +#define SPECIES_BUTTERFREE_GMAX 1492 +#define SPECIES_PIKACHU_GMAX 1493 +#define SPECIES_MEOWTH_GMAX 1494 +#define SPECIES_MACHAMP_GMAX 1495 +#define SPECIES_GENGAR_GMAX 1496 +#define SPECIES_KINGLER_GMAX 1497 +#define SPECIES_LAPRAS_GMAX 1498 +#define SPECIES_EEVEE_GMAX 1499 +#define SPECIES_SNORLAX_GMAX 1500 +#define SPECIES_GARBODOR_GMAX 1501 +#define SPECIES_MELMETAL_GMAX 1502 +#define SPECIES_RILLABOOM_GMAX 1503 +#define SPECIES_CINDERACE_GMAX 1504 +#define SPECIES_INTELEON_GMAX 1505 +#define SPECIES_CORVIKNIGHT_GMAX 1506 +#define SPECIES_ORBEETLE_GMAX 1507 +#define SPECIES_DREDNAW_GMAX 1508 +#define SPECIES_COALOSSAL_GMAX 1509 +#define SPECIES_FLAPPLE_GMAX 1510 +#define SPECIES_APPLETUN_GMAX 1511 +#define SPECIES_SANDACONDA_GMAX 1512 +#define SPECIES_TOXTRICITY_AMPED_GMAX 1513 +#define SPECIES_TOXTRICITY_LOW_KEY_GMAX 1514 +#define SPECIES_CENTISKORCH_GMAX 1515 +#define SPECIES_HATTERENE_GMAX 1516 +#define SPECIES_GRIMMSNARL_GMAX 1517 +#define SPECIES_ALCREMIE_GMAX 1518 +#define SPECIES_COPPERAJAH_GMAX 1519 +#define SPECIES_DURALUDON_GMAX 1520 +#define SPECIES_URSHIFU_SINGLE_STRIKE_GMAX 1521 +#define SPECIES_URSHIFU_GMAX SPECIES_URSHIFU_SINGLE_STRIKE_GMAX +#define SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GMAX SPECIES_URSHIFU_SINGLE_STRIKE_GMAX +#define SPECIES_URSHIFU_RAPID_STRIKE_GMAX 1522 +#define SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GMAX SPECIES_URSHIFU_RAPID_STRIKE_GMAX +#define SPECIES_MIMIKYU_BUSTED_TOTEM 1523 +#define SPECIES_MIMIKYU_TOTEM_BUSTED SPECIES_MIMIKYU_BUSTED_TOTEM -#define SPECIES_EGG (SPECIES_MIMIKYU_TOTEM_BUSTED + 1) +#define SPECIES_EGG (SPECIES_MIMIKYU_BUSTED_TOTEM + 1) #define NUM_SPECIES SPECIES_EGG #define SPECIES_SHINY_TAG 5000 -// Competitive format aliases -#define SPECIES_ALCREMIE_GMAX SPECIES_ALCREMIE_GIGANTAMAX -#define SPECIES_APPLETUN_GMAX SPECIES_APPLETUN_GIGANTAMAX -#define SPECIES_ARCANINE_HISUI SPECIES_ARCANINE_HISUIAN -#define SPECIES_ARTICUNO_GALAR SPECIES_ARTICUNO_GALARIAN -#define SPECIES_AVALUGG_HISUI SPECIES_AVALUGG_HISUIAN -#define SPECIES_BLASTOISE_GMAX SPECIES_BLASTOISE_GIGANTAMAX -#define SPECIES_BRAVIARY_HISUI SPECIES_BRAVIARY_HISUIAN -#define SPECIES_BURMY_SANDY SPECIES_BURMY_SANDY_CLOAK -#define SPECIES_BURMY_TRASH SPECIES_BURMY_TRASH_CLOAK -#define SPECIES_BUTTERFREE_GMAX SPECIES_BUTTERFREE_GIGANTAMAX -#define SPECIES_CALYREX_ICE SPECIES_CALYREX_ICE_RIDER -#define SPECIES_CALYREX_SHADOW SPECIES_CALYREX_SHADOW_RIDER -#define SPECIES_CENTISKORCH_GMAX SPECIES_CENTISKORCH_GIGANTAMAX -#define SPECIES_CHARIZARD_GMAX SPECIES_CHARIZARD_GIGANTAMAX -#define SPECIES_CINDERACE_GMAX SPECIES_CINDERACE_GIGANTAMAX -#define SPECIES_COALOSSAL_GMAX SPECIES_COALOSSAL_GIGANTAMAX -#define SPECIES_COPPERAJAH_GMAX SPECIES_COPPERAJAH_GIGANTAMAX -#define SPECIES_CORSOLA_GALAR SPECIES_CORSOLA_GALARIAN -#define SPECIES_CORVIKNIGHT_GMAX SPECIES_CORVIKNIGHT_GIGANTAMAX -#define SPECIES_DARMANITAN_GALAR SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE -#define SPECIES_DARMANITAN_GALAR_ZEN SPECIES_DARMANITAN_GALARIAN_ZEN_MODE -#define SPECIES_DARMANITAN_ZEN SPECIES_DARMANITAN_ZEN_MODE -#define SPECIES_DARUMAKA_GALAR SPECIES_DARUMAKA_GALARIAN -#define SPECIES_DECIDUEYE_HISUI SPECIES_DECIDUEYE_HISUIAN -#define SPECIES_DIGLETT_ALOLA SPECIES_DIGLETT_ALOLAN -#define SPECIES_DREDNAW_GMAX SPECIES_DREDNAW_GIGANTAMAX -#define SPECIES_DUGTRIO_ALOLA SPECIES_DUGTRIO_ALOLAN -#define SPECIES_DURALUDON_GMAX SPECIES_DURALUDON_GIGANTAMAX -#define SPECIES_EEVEE_GMAX SPECIES_EEVEE_GIGANTAMAX -#define SPECIES_EEVEE_STARTER SPECIES_EEVEE_PARTNER -#define SPECIES_EISCUE_NOICE SPECIES_EISCUE_NOICE_FACE -#define SPECIES_ELECTRODE_HISUI SPECIES_ELECTRODE_HISUIAN -#define SPECIES_EXEGGUTOR_ALOLA SPECIES_EXEGGUTOR_ALOLAN -#define SPECIES_FARFETCHD_GALAR SPECIES_FARFETCHD_GALARIAN -#define SPECIES_FLAPPLE_GMAX SPECIES_FLAPPLE_GIGANTAMAX -#define SPECIES_FLOETTE_ETERNAL SPECIES_FLOETTE_ETERNAL_FLOWER -#define SPECIES_GARBODOR_GMAX SPECIES_GARBODOR_GIGANTAMAX -#define SPECIES_GASTRODON_EAST SPECIES_GASTRODON_EAST_SEA -#define SPECIES_GENESECT_BURN SPECIES_GENESECT_BURN_DRIVE -#define SPECIES_GENESECT_CHILL SPECIES_GENESECT_CHILL_DRIVE -#define SPECIES_GENESECT_DOUSE SPECIES_GENESECT_DOUSE_DRIVE -#define SPECIES_GENESECT_SHOCK SPECIES_GENESECT_SHOCK_DRIVE -#define SPECIES_GENGAR_GMAX SPECIES_GENGAR_GIGANTAMAX -#define SPECIES_GEODUDE_ALOLA SPECIES_GEODUDE_ALOLAN -#define SPECIES_GOLEM_ALOLA SPECIES_GOLEM_ALOLAN -#define SPECIES_GOODRA_HISUI SPECIES_GOODRA_HISUIAN -#define SPECIES_GRAVELER_ALOLA SPECIES_GRAVELER_ALOLAN -#define SPECIES_GRENINJA_BOND SPECIES_GRENINJA_BATTLE_BOND -#define SPECIES_GRIMER_ALOLA SPECIES_GRIMER_ALOLAN -#define SPECIES_GRIMMSNARL_GMAX SPECIES_GRIMMSNARL_GIGANTAMAX -#define SPECIES_GROWLITHE_HISUI SPECIES_GROWLITHE_HISUIAN -#define SPECIES_HATTERENE_GMAX SPECIES_HATTERENE_GIGANTAMAX -#define SPECIES_INTELEON_GMAX SPECIES_INTELEON_GIGANTAMAX -#define SPECIES_KINGLER_GMAX SPECIES_KINGLER_GIGANTAMAX -#define SPECIES_LAPRAS_GMAX SPECIES_LAPRAS_GIGANTAMAX -#define SPECIES_LILLIGANT_HISUI SPECIES_LILLIGANT_HISUIAN -#define SPECIES_LINOONE_GALAR SPECIES_LINOONE_GALARIAN -#define SPECIES_MACHAMP_GMAX SPECIES_MACHAMP_GIGANTAMAX -#define SPECIES_MAGEARNA_ORIGINAL SPECIES_MAGEARNA_ORIGINAL_COLOR -#define SPECIES_MAROWAK_ALOLA SPECIES_MAROWAK_ALOLAN -#define SPECIES_MAROWAK_ALOLA_TOTEM SPECIES_MAROWAK_ALOLAN_TOTEM -#define SPECIES_MAUSHOLD_FOUR SPECIES_MAUSHOLD_FAMILY_OF_FOUR -#define SPECIES_MELMETAL_GMAX SPECIES_MELMETAL_GIGANTAMAX -#define SPECIES_MEOWTH_ALOLA SPECIES_MEOWTH_ALOLAN -#define SPECIES_MEOWTH_GALAR SPECIES_MEOWTH_GALARIAN -#define SPECIES_MEOWTH_GMAX SPECIES_MEOWTH_GIGANTAMAX -#define SPECIES_MOLTRES_GALAR SPECIES_MOLTRES_GALARIAN -#define SPECIES_MR_MIME_GALAR SPECIES_MR_MIME_GALARIAN -#define SPECIES_MUK_ALOLA SPECIES_MUK_ALOLAN -#define SPECIES_NINETALES_ALOLA SPECIES_NINETALES_ALOLAN -#define SPECIES_OGERPON_TEAL SPECIES_OGERPON_TEAL_MASK -#define SPECIES_OGERPON_WELLSPRING SPECIES_OGERPON_WELLSPRING_MASK -#define SPECIES_OGERPON_HEARTHFLAME SPECIES_OGERPON_HEARTHFLAME_MASK -#define SPECIES_OGERPON_CORNERSTONE SPECIES_OGERPON_CORNERSTONE_MASK -#define SPECIES_ORBEETLE_GMAX SPECIES_ORBEETLE_GIGANTAMAX -#define SPECIES_PERSIAN_ALOLA SPECIES_PERSIAN_ALOLAN -#define SPECIES_PIKACHU_ALOLA SPECIES_PIKACHU_ALOLA_CAP -#define SPECIES_PIKACHU_GMAX SPECIES_PIKACHU_GIGANTAMAX -#define SPECIES_PIKACHU_HOENN SPECIES_PIKACHU_HOENN_CAP -#define SPECIES_PIKACHU_KALOS SPECIES_PIKACHU_KALOS_CAP -#define SPECIES_PIKACHU_ORIGINAL SPECIES_PIKACHU_ORIGINAL_CAP -//#define SPECIES_PIKACHU_PARTNER SPECIES_PIKACHU_PARTNER_CAP -#define SPECIES_PIKACHU_PHD SPECIES_PIKACHU_PH_D -#define SPECIES_PIKACHU_SINNOH SPECIES_PIKACHU_SINNOH_CAP -#define SPECIES_PIKACHU_STARTER SPECIES_PIKACHU_PARTNER -#define SPECIES_PIKACHU_UNOVA SPECIES_PIKACHU_UNOVA_CAP -#define SPECIES_PIKACHU_WORLD SPECIES_PIKACHU_WORLD_CAP -#define SPECIES_PONYTA_GALAR SPECIES_PONYTA_GALARIAN -#define SPECIES_QWILFISH_HISUI SPECIES_QWILFISH_HISUIAN -#define SPECIES_RAICHU_ALOLA SPECIES_RAICHU_ALOLAN -#define SPECIES_RAPIDASH_GALAR SPECIES_RAPIDASH_GALARIAN -#define SPECIES_RATICATE_ALOLA SPECIES_RATICATE_ALOLAN -#define SPECIES_RATICATE_ALOLA_TOTEM SPECIES_RATICATE_ALOLAN_TOTEM -#define SPECIES_RATTATA_ALOLA SPECIES_RATTATA_ALOLAN -#define SPECIES_RILLABOOM_GMAX SPECIES_RILLABOOM_GIGANTAMAX -#define SPECIES_SAMUROTT_HISUI SPECIES_SAMUROTT_HISUIAN -#define SPECIES_SANDACONDA_GMAX SPECIES_SANDACONDA_GIGANTAMAX -#define SPECIES_SANDSHREW_ALOLA SPECIES_SANDSHREW_ALOLAN -#define SPECIES_SANDSLASH_ALOLA SPECIES_SANDSLASH_ALOLAN -#define SPECIES_SHELLOS_EAST SPECIES_SHELLOS_EAST_SEA -#define SPECIES_SIRFETCH_D SPECIES_SIRFETCHD -#define SPECIES_SLIGGOO_HISUI SPECIES_SLIGGOO_HISUIAN -#define SPECIES_SLOWBRO_GALAR SPECIES_SLOWBRO_GALARIAN -#define SPECIES_SLOWKING_GALAR SPECIES_SLOWKING_GALARIAN -#define SPECIES_SLOWPOKE_GALAR SPECIES_SLOWPOKE_GALARIAN -#define SPECIES_SNEASEL_HISUI SPECIES_SNEASEL_HISUIAN -#define SPECIES_SNORLAX_GMAX SPECIES_SNORLAX_GIGANTAMAX -#define SPECIES_SQUAWKABILLY_BLUE SPECIES_SQUAWKABILLY_BLUE_PLUMAGE -#define SPECIES_SQUAWKABILLY_WHITE SPECIES_SQUAWKABILLY_WHITE_PLUMAGE -#define SPECIES_SQUAWKABILLY_YELLOW SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE -#define SPECIES_STUNFISK_GALAR SPECIES_STUNFISK_GALARIAN -#define SPECIES_TAUROS_PALDEA_AQUA SPECIES_TAUROS_PALDEAN_AQUA_BREED -#define SPECIES_TAUROS_PALDEA_BLAZE SPECIES_TAUROS_PALDEAN_BLAZE_BREED -#define SPECIES_TAUROS_PALDEA_COMBAT SPECIES_TAUROS_PALDEAN_COMBAT_BREED -#define SPECIES_TOXTRICITY_AMPED_GMAX SPECIES_TOXTRICITY_AMPED_GIGANTAMAX -#define SPECIES_TOXTRICITY_LOW_KEY_GMAX SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX -#define SPECIES_TYPHLOSION_HISUI SPECIES_TYPHLOSION_HISUIAN -#define SPECIES_UNOWN_EXCLAMATION SPECIES_UNOWN_EMARK -#define SPECIES_UNOWN_QUESTION SPECIES_UNOWN_QMARK -#define SPECIES_URSHIFU_GMAX SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX -#define SPECIES_URSHIFU_RAPID_STRIKE SPECIES_URSHIFU_RAPID_STRIKE_STYLE -#define SPECIES_URSHIFU_RAPID_STRIKE_GMAX SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX -#define SPECIES_VENUSAUR_GMAX SPECIES_VENUSAUR_GIGANTAMAX -#define SPECIES_VIVILLON_POKEBALL SPECIES_VIVILLON_POKE_BALL -#define SPECIES_VOLTORB_HISUI SPECIES_VOLTORB_HISUIAN -#define SPECIES_VULPIX_ALOLA SPECIES_VULPIX_ALOLAN -#define SPECIES_WEEZING_GALAR SPECIES_WEEZING_GALARIAN -#define SPECIES_WOOPER_PALDEA SPECIES_WOOPER_PALDEAN -#define SPECIES_WORMADAM_SANDY SPECIES_WORMADAM_SANDY_CLOAK -#define SPECIES_WORMADAM_TRASH SPECIES_WORMADAM_TRASH_CLOAK -#define SPECIES_YAMASK_GALAR SPECIES_YAMASK_GALARIAN -#define SPECIES_ZACIAN_CROWNED SPECIES_ZACIAN_CROWNED_SWORD -#define SPECIES_ZAMAZENTA_CROWNED SPECIES_ZAMAZENTA_CROWNED_SHIELD -#define SPECIES_ZAPDOS_GALAR SPECIES_ZAPDOS_GALARIAN -#define SPECIES_ZIGZAGOON_GALAR SPECIES_ZIGZAGOON_GALARIAN -#define SPECIES_ZOROARK_HISUI SPECIES_ZOROARK_HISUIAN -#define SPECIES_ZORUA_HISUI SPECIES_ZORUA_HISUIAN - #endif // GUARD_CONSTANTS_SPECIES_H diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 3ef613d1fc..612e89c9ce 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3981,7 +3981,7 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) return FALSE; // Don't waste a Z-Move busting disguise if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && !gMovesInfo[zMove].ignoresTargetAbility - && gBattleMons[battlerDef].species == SPECIES_EISCUE_ICE_FACE && IS_MOVE_PHYSICAL(chosenMove)) + && gBattleMons[battlerDef].species == SPECIES_EISCUE_ICE && IS_MOVE_PHYSICAL(chosenMove)) return FALSE; // Don't waste a Z-Move busting Ice Face if (IS_MOVE_STATUS(chosenMove) && !IS_MOVE_STATUS(zMove)) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index cc5454ad54..6d383a1af3 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1725,9 +1725,9 @@ static void MoveSelectionDisplayMoveType(u32 battler) { speciesId = gBattleMons[battler].species; - if (speciesId == SPECIES_OGERPON_WELLSPRING_MASK || speciesId == SPECIES_OGERPON_WELLSPRING_MASK_TERA - || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA - || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK_TERA) + if (speciesId == SPECIES_OGERPON_WELLSPRING || speciesId == SPECIES_OGERPON_WELLSPRING_TERA + || speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA + || speciesId == SPECIES_OGERPON_CORNERSTONE || speciesId == SPECIES_OGERPON_CORNERSTONE_TERA) type = gBattleMons[battler].types[1]; } else if (gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].category == DAMAGE_CATEGORY_STATUS diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 073e2c55bc..75ea78460c 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -34,40 +34,40 @@ struct GMaxMove static const struct GMaxMove sGMaxMoveTable[] = { - {SPECIES_VENUSAUR_GIGANTAMAX, TYPE_GRASS, MOVE_G_MAX_VINE_LASH}, - {SPECIES_BLASTOISE_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_CANNONADE}, - {SPECIES_CHARIZARD_GIGANTAMAX, TYPE_FIRE, MOVE_G_MAX_WILDFIRE}, - {SPECIES_BUTTERFREE_GIGANTAMAX, TYPE_BUG, MOVE_G_MAX_BEFUDDLE}, - {SPECIES_PIKACHU_GIGANTAMAX, TYPE_ELECTRIC, MOVE_G_MAX_VOLT_CRASH}, - {SPECIES_MEOWTH_GIGANTAMAX, TYPE_NORMAL, MOVE_G_MAX_GOLD_RUSH}, - {SPECIES_MACHAMP_GIGANTAMAX, TYPE_FIGHTING, MOVE_G_MAX_CHI_STRIKE}, - {SPECIES_GENGAR_GIGANTAMAX, TYPE_GHOST, MOVE_G_MAX_TERROR}, - {SPECIES_KINGLER_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_FOAM_BURST}, - {SPECIES_LAPRAS_GIGANTAMAX, TYPE_ICE, MOVE_G_MAX_RESONANCE}, - {SPECIES_EEVEE_GIGANTAMAX, TYPE_NORMAL, MOVE_G_MAX_CUDDLE}, - {SPECIES_SNORLAX_GIGANTAMAX, TYPE_NORMAL, MOVE_G_MAX_REPLENISH}, - {SPECIES_GARBODOR_GIGANTAMAX, TYPE_POISON, MOVE_G_MAX_MALODOR}, - {SPECIES_MELMETAL_GIGANTAMAX, TYPE_STEEL, MOVE_G_MAX_MELTDOWN}, - {SPECIES_RILLABOOM_GIGANTAMAX, TYPE_GRASS, MOVE_G_MAX_DRUM_SOLO}, - {SPECIES_CINDERACE_GIGANTAMAX, TYPE_FIRE, MOVE_G_MAX_FIREBALL}, - {SPECIES_INTELEON_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_HYDROSNIPE}, - {SPECIES_CORVIKNIGHT_GIGANTAMAX, TYPE_FLYING, MOVE_G_MAX_WIND_RAGE}, - {SPECIES_ORBEETLE_GIGANTAMAX, TYPE_PSYCHIC, MOVE_G_MAX_GRAVITAS}, - {SPECIES_DREDNAW_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_STONESURGE}, - {SPECIES_COALOSSAL_GIGANTAMAX, TYPE_ROCK, MOVE_G_MAX_VOLCALITH}, - {SPECIES_FLAPPLE_GIGANTAMAX, TYPE_GRASS, MOVE_G_MAX_TARTNESS}, - {SPECIES_APPLETUN_GIGANTAMAX, TYPE_GRASS, MOVE_G_MAX_SWEETNESS}, - {SPECIES_SANDACONDA_GIGANTAMAX, TYPE_GROUND, MOVE_G_MAX_SANDBLAST}, - {SPECIES_TOXTRICITY_AMPED_GIGANTAMAX, TYPE_ELECTRIC, MOVE_G_MAX_STUN_SHOCK}, - {SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX, TYPE_ELECTRIC, MOVE_G_MAX_STUN_SHOCK}, - {SPECIES_CENTISKORCH_GIGANTAMAX, TYPE_FIRE, MOVE_G_MAX_CENTIFERNO}, - {SPECIES_HATTERENE_GIGANTAMAX, TYPE_FAIRY, MOVE_G_MAX_SMITE}, - {SPECIES_GRIMMSNARL_GIGANTAMAX, TYPE_DARK, MOVE_G_MAX_SNOOZE}, - {SPECIES_ALCREMIE_GIGANTAMAX, TYPE_FAIRY, MOVE_G_MAX_FINALE}, - {SPECIES_COPPERAJAH_GIGANTAMAX, TYPE_STEEL, MOVE_G_MAX_STEELSURGE}, - {SPECIES_DURALUDON_GIGANTAMAX, TYPE_DRAGON, MOVE_G_MAX_DEPLETION}, - {SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX,TYPE_DARK, MOVE_G_MAX_ONE_BLOW}, - {SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_RAPID_FLOW}, + {SPECIES_VENUSAUR_GMAX, TYPE_GRASS, MOVE_G_MAX_VINE_LASH}, + {SPECIES_BLASTOISE_GMAX, TYPE_WATER, MOVE_G_MAX_CANNONADE}, + {SPECIES_CHARIZARD_GMAX, TYPE_FIRE, MOVE_G_MAX_WILDFIRE}, + {SPECIES_BUTTERFREE_GMAX, TYPE_BUG, MOVE_G_MAX_BEFUDDLE}, + {SPECIES_PIKACHU_GMAX, TYPE_ELECTRIC, MOVE_G_MAX_VOLT_CRASH}, + {SPECIES_MEOWTH_GMAX, TYPE_NORMAL, MOVE_G_MAX_GOLD_RUSH}, + {SPECIES_MACHAMP_GMAX, TYPE_FIGHTING, MOVE_G_MAX_CHI_STRIKE}, + {SPECIES_GENGAR_GMAX, TYPE_GHOST, MOVE_G_MAX_TERROR}, + {SPECIES_KINGLER_GMAX, TYPE_WATER, MOVE_G_MAX_FOAM_BURST}, + {SPECIES_LAPRAS_GMAX, TYPE_ICE, MOVE_G_MAX_RESONANCE}, + {SPECIES_EEVEE_GMAX, TYPE_NORMAL, MOVE_G_MAX_CUDDLE}, + {SPECIES_SNORLAX_GMAX, TYPE_NORMAL, MOVE_G_MAX_REPLENISH}, + {SPECIES_GARBODOR_GMAX, TYPE_POISON, MOVE_G_MAX_MALODOR}, + {SPECIES_MELMETAL_GMAX, TYPE_STEEL, MOVE_G_MAX_MELTDOWN}, + {SPECIES_RILLABOOM_GMAX, TYPE_GRASS, MOVE_G_MAX_DRUM_SOLO}, + {SPECIES_CINDERACE_GMAX, TYPE_FIRE, MOVE_G_MAX_FIREBALL}, + {SPECIES_INTELEON_GMAX, TYPE_WATER, MOVE_G_MAX_HYDROSNIPE}, + {SPECIES_CORVIKNIGHT_GMAX, TYPE_FLYING, MOVE_G_MAX_WIND_RAGE}, + {SPECIES_ORBEETLE_GMAX, TYPE_PSYCHIC, MOVE_G_MAX_GRAVITAS}, + {SPECIES_DREDNAW_GMAX, TYPE_WATER, MOVE_G_MAX_STONESURGE}, + {SPECIES_COALOSSAL_GMAX, TYPE_ROCK, MOVE_G_MAX_VOLCALITH}, + {SPECIES_FLAPPLE_GMAX, TYPE_GRASS, MOVE_G_MAX_TARTNESS}, + {SPECIES_APPLETUN_GMAX, TYPE_GRASS, MOVE_G_MAX_SWEETNESS}, + {SPECIES_SANDACONDA_GMAX, TYPE_GROUND, MOVE_G_MAX_SANDBLAST}, + {SPECIES_TOXTRICITY_AMPED_GMAX, TYPE_ELECTRIC, MOVE_G_MAX_STUN_SHOCK}, + {SPECIES_TOXTRICITY_LOW_KEY_GMAX, TYPE_ELECTRIC, MOVE_G_MAX_STUN_SHOCK}, + {SPECIES_CENTISKORCH_GMAX, TYPE_FIRE, MOVE_G_MAX_CENTIFERNO}, + {SPECIES_HATTERENE_GMAX, TYPE_FAIRY, MOVE_G_MAX_SMITE}, + {SPECIES_GRIMMSNARL_GMAX, TYPE_DARK, MOVE_G_MAX_SNOOZE}, + {SPECIES_ALCREMIE_GMAX, TYPE_FAIRY, MOVE_G_MAX_FINALE}, + {SPECIES_COPPERAJAH_GMAX, TYPE_STEEL, MOVE_G_MAX_STEELSURGE}, + {SPECIES_DURALUDON_GMAX, TYPE_DRAGON, MOVE_G_MAX_DEPLETION}, + {SPECIES_URSHIFU_SINGLE_STRIKE_GMAX,TYPE_DARK, MOVE_G_MAX_ONE_BLOW}, + {SPECIES_URSHIFU_RAPID_STRIKE_GMAX, TYPE_WATER, MOVE_G_MAX_RAPID_FLOW}, }; // Returns whether a battler can Dynamax. diff --git a/src/battle_main.c b/src/battle_main.c index 9a430952c3..acc1249f36 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5915,16 +5915,16 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) return TYPE_MYSTERY; } else if (moveEffect == EFFECT_RAGING_BULL - && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED - || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED - || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) + && (species == SPECIES_TAUROS_PALDEA_COMBAT + || species == SPECIES_TAUROS_PALDEA_BLAZE + || species == SPECIES_TAUROS_PALDEA_AQUA)) { return type2; } else if (moveEffect == EFFECT_IVY_CUDGEL - && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA - || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA - || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) + && (species == SPECIES_OGERPON_WELLSPRING || species == SPECIES_OGERPON_WELLSPRING_TERA + || species == SPECIES_OGERPON_HEARTHFLAME || species == SPECIES_OGERPON_HEARTHFLAME_TERA + || species == SPECIES_OGERPON_CORNERSTONE || species == SPECIES_OGERPON_CORNERSTONE_TERA)) { return type2; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4946b185b5..9412d63088 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2432,7 +2432,7 @@ static void Cmd_datahpupdate(void) if (gBattleStruct->changedSpecies[side][gBattlerPartyIndexes[battler]] == SPECIES_NONE) gBattleStruct->changedSpecies[side][gBattlerPartyIndexes[battler]] = gBattleMons[battler].species; if (gBattleMons[battler].species == SPECIES_MIMIKYU_TOTEM_DISGUISED) - gBattleMons[battler].species = SPECIES_MIMIKYU_TOTEM_BUSTED; + gBattleMons[battler].species = SPECIES_MIMIKYU_BUSTED_TOTEM; else gBattleMons[battler].species = SPECIES_MIMIKYU_BUSTED; if (B_DISGUISE_HP_LOSS >= GEN_8) @@ -2617,7 +2617,7 @@ static void Cmd_resultmessage(void) if (gBattleResources->flags->flags[gBattlerTarget] & RESOURCE_FLAG_ICE_FACE) { gBattleResources->flags->flags[gBattlerTarget] &= ~(RESOURCE_FLAG_ICE_FACE); - gBattleMons[gBattlerTarget].species = SPECIES_EISCUE_NOICE_FACE; + gBattleMons[gBattlerTarget].species = SPECIES_EISCUE_NOICE; gBattleScripting.battler = gBattlerTarget; // For STRINGID_PKMNTRANSFORMED BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_IceFaceNullsDamage; @@ -15715,8 +15715,8 @@ static const u16 sTelekinesisBanList[] = { SPECIES_DIGLETT, SPECIES_DUGTRIO, - SPECIES_DIGLETT_ALOLAN, - SPECIES_DUGTRIO_ALOLAN, + SPECIES_DIGLETT_ALOLA, + SPECIES_DUGTRIO_ALOLA, SPECIES_SANDYGAST, SPECIES_PALOSSAND, SPECIES_GENGAR_MEGA, diff --git a/src/battle_util.c b/src/battle_util.c index e32e21cf2a..81cc13b8aa 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4972,11 +4972,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_ICE_FACE: if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW) - && gBattleMons[battler].species == SPECIES_EISCUE_NOICE_FACE + && gBattleMons[battler].species == SPECIES_EISCUE_NOICE && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) { // TODO: Convert this to a proper FORM_CHANGE type. - gBattleMons[battler].species = SPECIES_EISCUE_ICE_FACE; + gBattleMons[battler].species = SPECIES_EISCUE_ICE; BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; } @@ -6339,12 +6339,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_ICE_FACE: if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW) - && gBattleMons[battler].species == SPECIES_EISCUE_NOICE_FACE + && gBattleMons[battler].species == SPECIES_EISCUE_NOICE && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) { // TODO: Convert this to a proper FORM_CHANGE type. gBattleScripting.battler = battler; - gBattleMons[battler].species = SPECIES_EISCUE_ICE_FACE; + gBattleMons[battler].species = SPECIES_EISCUE_ICE; BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; } diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 5a5816142c..436ffb8428 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -56,10 +56,10 @@ static const struct SignatureZMove sSignatureZMoves[] = {SPECIES_PIKACHU_ROCK_STAR, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, {SPECIES_PIKACHU_BELLE, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, {SPECIES_PIKACHU_POP_STAR, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, - {SPECIES_PIKACHU_PH_D, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, + {SPECIES_PIKACHU_PHD, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, {SPECIES_PIKACHU_LIBRE, ITEM_PIKANIUM_Z, MOVE_VOLT_TACKLE, MOVE_CATASTROPIKA}, - {SPECIES_RAICHU_ALOLAN, ITEM_ALORAICHIUM_Z, MOVE_THUNDERBOLT, MOVE_STOKED_SPARKSURFER}, + {SPECIES_RAICHU_ALOLA, ITEM_ALORAICHIUM_Z, MOVE_THUNDERBOLT, MOVE_STOKED_SPARKSURFER}, {SPECIES_DECIDUEYE, ITEM_DECIDIUM_Z, MOVE_SPIRIT_SHACKLE, MOVE_SINISTER_ARROW_RAID}, {SPECIES_INCINEROAR, ITEM_INCINIUM_Z, MOVE_DARKEST_LARIAT, MOVE_MALICIOUS_MOONSAULT}, {SPECIES_KOMMO_O, ITEM_KOMMONIUM_Z, MOVE_CLANGING_SCALES, MOVE_CLANGOROUS_SOULBLAZE}, @@ -72,15 +72,15 @@ static const struct SignatureZMove sSignatureZMoves[] = {SPECIES_MIMIKYU_DISGUISED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, {SPECIES_MIMIKYU_BUSTED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, {SPECIES_MIMIKYU_TOTEM_DISGUISED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, - {SPECIES_MIMIKYU_TOTEM_BUSTED, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, - {SPECIES_PIKACHU_ORIGINAL_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, - {SPECIES_PIKACHU_HOENN_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, - {SPECIES_PIKACHU_SINNOH_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, - {SPECIES_PIKACHU_UNOVA_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, - {SPECIES_PIKACHU_KALOS_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, - {SPECIES_PIKACHU_ALOLA_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_MIMIKYU_BUSTED_TOTEM, ITEM_MIMIKIUM_Z, MOVE_PLAY_ROUGH, MOVE_LETS_SNUGGLE_FOREVER}, + {SPECIES_PIKACHU_ORIGINAL, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_HOENN, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_SINNOH, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_UNOVA, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_KALOS, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_ALOLA, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, {SPECIES_PIKACHU_PARTNER_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, - {SPECIES_PIKACHU_WORLD_CAP, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, + {SPECIES_PIKACHU_WORLD, ITEM_PIKASHUNIUM_Z, MOVE_THUNDERBOLT, MOVE_10000000_VOLT_THUNDERBOLT}, {SPECIES_PRIMARINA, ITEM_PRIMARIUM_Z, MOVE_SPARKLING_ARIA, MOVE_OCEANIC_OPERETTA}, {SPECIES_SOLGALEO, ITEM_SOLGANIUM_Z, MOVE_SUNSTEEL_STRIKE, MOVE_SEARING_SUNRAZE_SMASH}, {SPECIES_NECROZMA_DUSK_MANE, ITEM_SOLGANIUM_Z, MOVE_SUNSTEEL_STRIKE, MOVE_SEARING_SUNRAZE_SMASH}, diff --git a/src/berry.c b/src/berry.c index d8d1033fc6..1f41973e74 100644 --- a/src/berry.c +++ b/src/berry.c @@ -2422,7 +2422,7 @@ static u16 GetBerryPestSpecies(u8 berryId) return P_FAMILY_VOLBEAT_ILLUMISE ? SPECIES_ILLUMISE : SPECIES_NONE; break; case BERRY_COLOR_GREEN: - return P_FAMILY_BURMY ? SPECIES_BURMY_PLANT_CLOAK : SPECIES_NONE; + return P_FAMILY_BURMY ? SPECIES_BURMY_PLANT : SPECIES_NONE; break; case BERRY_COLOR_YELLOW: return P_FAMILY_COMBEE ? SPECIES_COMBEE : SPECIES_NONE; diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 4d26837b28..ea2cdfd2a2 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -24,11 +24,11 @@ const struct Fusion *const gFusionTablePointers[NUM_SPECIES] = #if P_FAMILY_CALYREX [SPECIES_CALYREX] = sCalyrexFusionTable, #if P_FAMILY_SPECTRIER - [SPECIES_CALYREX_SHADOW_RIDER] = sCalyrexFusionTable, + [SPECIES_CALYREX_SHADOW] = sCalyrexFusionTable, [SPECIES_SPECTRIER] = sCalyrexFusionTable, #endif //P_FAMILY_SPECTRIER #if P_FAMILY_GLASTRIER - [SPECIES_CALYREX_ICE_RIDER] = sCalyrexFusionTable, + [SPECIES_CALYREX_ICE] = sCalyrexFusionTable, [SPECIES_GLASTRIER] = sCalyrexFusionTable, #endif //P_FAMILY_GLASTRIER #endif //P_FAMILY_CALYREX diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 52f888a55b..5316427b4c 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -4,7 +4,7 @@ static const struct FormChange sVenusaurFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_VENUSAUR_MEGA, ITEM_VENUSAURITE}, #endif #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_VENUSAUR_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_VENUSAUR_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -17,7 +17,7 @@ static const struct FormChange sCharizardFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_CHARIZARD_MEGA_Y, ITEM_CHARIZARDITE_Y}, #endif #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CHARIZARD_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CHARIZARD_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -29,7 +29,7 @@ static const struct FormChange sBlastoiseFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_BLASTOISE_MEGA, ITEM_BLASTOISINITE}, #endif #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BLASTOISE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BLASTOISE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -39,7 +39,7 @@ static const struct FormChange sBlastoiseFormChangeTable[] = { static const struct FormChange sButterfreeFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BUTTERFREE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_BUTTERFREE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -67,7 +67,7 @@ static const struct FormChange sPidgeotFormChangeTable[] = { static const struct FormChange sPikachuFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_PIKACHU_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_PIKACHU_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -77,7 +77,7 @@ static const struct FormChange sPikachuFormChangeTable[] = static const struct FormChange sMeowthFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MEOWTH_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MEOWTH_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -96,7 +96,7 @@ static const struct FormChange sAlakazamFormChangeTable[] = { static const struct FormChange sMachampFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MACHAMP_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MACHAMP_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -117,7 +117,7 @@ static const struct FormChange sGengarFormChangeTable[] = { {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, #endif #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -138,7 +138,7 @@ static const struct FormChange sSteelixFormChangeTable[] = { static const struct FormChange sKinglerFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_KINGLER_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_KINGLER_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -185,7 +185,7 @@ static const struct FormChange sGyaradosFormChangeTable[] = { #if P_FAMILY_LAPRAS static const struct FormChange sLaprasFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_LAPRAS_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_LAPRAS_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -194,7 +194,7 @@ static const struct FormChange sLaprasFormChangeTable[] = { #if P_FAMILY_EEVEE static const struct FormChange sEeveeFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_EEVEE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_EEVEE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -212,7 +212,7 @@ static const struct FormChange sAerodactylFormChangeTable[] = { #if P_FAMILY_SNORLAX static const struct FormChange sSnorlaxFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_SNORLAX_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_SNORLAX_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -517,14 +517,14 @@ static const struct FormChange sDeoxysSpeedFormChangeTable[] = { #if P_FAMILY_BURMY static const struct FormChange sBurmyFormChangeTable[] = { - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_GRASS}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_LONG_GRASS}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_POND}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_MOUNTAIN}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT_CLOAK, BATTLE_TERRAIN_PLAIN}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY_CLOAK, BATTLE_TERRAIN_CAVE}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY_CLOAK, BATTLE_TERRAIN_SAND}, - {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_TRASH_CLOAK, BATTLE_TERRAIN_BUILDING}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT, BATTLE_TERRAIN_GRASS}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT, BATTLE_TERRAIN_LONG_GRASS}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT, BATTLE_TERRAIN_POND}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT, BATTLE_TERRAIN_MOUNTAIN}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_PLANT, BATTLE_TERRAIN_PLAIN}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY, BATTLE_TERRAIN_CAVE}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_SANDY, BATTLE_TERRAIN_SAND}, + {FORM_CHANGE_END_BATTLE_TERRAIN, SPECIES_BURMY_TRASH, BATTLE_TERRAIN_BUILDING}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_FAMILY_BURMY @@ -684,19 +684,19 @@ static const struct FormChange sAudinoFormChangeTable[] = { #if P_FAMILY_DARUMAKA static const struct FormChange sDarmanitanFormChangeTable[] = { - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_STANDARD_MODE, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN_MODE, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, - {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_STANDARD_MODE}, - {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_STANDARD_MODE}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_STANDARD, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_ZEN, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_STANDARD}, + {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_STANDARD}, {FORM_CHANGE_TERMINATOR}, }; #if P_GALARIAN_FORMS static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, - {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALARIAN_ZEN_MODE, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, - {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE}, - {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALAR_STANDARD, ABILITY_ZEN_MODE, HP_HIGHER_THAN, 50}, + {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_DARMANITAN_GALAR_ZEN, ABILITY_ZEN_MODE, HP_LOWER_EQ_THAN, 50}, + {FORM_CHANGE_FAINT, SPECIES_DARMANITAN_GALAR_STANDARD}, + {FORM_CHANGE_END_BATTLE, SPECIES_DARMANITAN_GALAR_STANDARD}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_GALARIAN_FORMS @@ -706,7 +706,7 @@ static const struct FormChange sDarmanitanGalarianFormChangeTable[] = { static const struct FormChange sGarbodorFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GARBODOR_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GARBODOR_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -763,10 +763,10 @@ static const struct FormChange sMeloettaFormChangeTable[] = { #if P_FAMILY_GENESECT static const struct FormChange sGenesectFormChangeTable[] = { {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT, ITEM_NONE}, - {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_DOUSE_DRIVE, ITEM_DOUSE_DRIVE}, - {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_SHOCK_DRIVE, ITEM_SHOCK_DRIVE}, - {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_BURN_DRIVE, ITEM_BURN_DRIVE}, - {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_CHILL_DRIVE, ITEM_CHILL_DRIVE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_DOUSE, ITEM_DOUSE_DRIVE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_SHOCK, ITEM_SHOCK_DRIVE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_BURN, ITEM_BURN_DRIVE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_GENESECT_CHILL, ITEM_CHILL_DRIVE}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_FAMILY_GENESECT @@ -812,14 +812,14 @@ static const struct FormChange sZygarde50AuraBreakFormChangeTable[] = { }; static const struct FormChange sZygarde10AuraBreakFormChangeTable[] = { - {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50_AURA_BREAK, ITEM_ZYGARDE_CUBE, 0}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50, ITEM_ZYGARDE_CUBE, 0}, {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 1}, {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sZygarde50PowerConstructFormChangeTable[] = { {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_10_POWER_CONSTRUCT, ITEM_ZYGARDE_CUBE, 0}, - {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50_AURA_BREAK, ITEM_ZYGARDE_CUBE, 1}, + {FORM_CHANGE_ITEM_USE_MULTICHOICE, SPECIES_ZYGARDE_50, ITEM_ZYGARDE_CUBE, 1}, {FORM_CHANGE_BATTLE_HP_PERCENT, SPECIES_ZYGARDE_COMPLETE, ABILITY_POWER_CONSTRUCT, HP_LOWER_EQ_THAN, 50}, {FORM_CHANGE_TERMINATOR}, }; @@ -999,7 +999,7 @@ static const struct FormChange sNecrozmaDawnWingsFormChangeTable[] = { static const struct FormChange sMelmetalFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MELMETAL_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_MELMETAL_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1009,7 +1009,7 @@ static const struct FormChange sMelmetalFormChangeTable[] = static const struct FormChange sRillaboomFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_RILLABOOM_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_RILLABOOM_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1019,7 +1019,7 @@ static const struct FormChange sRillaboomFormChangeTable[] = static const struct FormChange sCinderaceFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CINDERACE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CINDERACE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1029,7 +1029,7 @@ static const struct FormChange sCinderaceFormChangeTable[] = static const struct FormChange sInteleonFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_INTELEON_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_INTELEON_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1039,7 +1039,7 @@ static const struct FormChange sInteleonFormChangeTable[] = static const struct FormChange sCorviknightFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CORVIKNIGHT_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CORVIKNIGHT_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1049,7 +1049,7 @@ static const struct FormChange sCorviknightFormChangeTable[] = static const struct FormChange sOrbeetleFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_ORBEETLE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_ORBEETLE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1059,7 +1059,7 @@ static const struct FormChange sOrbeetleFormChangeTable[] = static const struct FormChange sDrednawFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_DREDNAW_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_DREDNAW_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1069,7 +1069,7 @@ static const struct FormChange sDrednawFormChangeTable[] = static const struct FormChange sCoalossalFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_COALOSSAL_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_COALOSSAL_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1079,7 +1079,7 @@ static const struct FormChange sCoalossalFormChangeTable[] = static const struct FormChange sFlappleFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_FLAPPLE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_FLAPPLE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1087,7 +1087,7 @@ static const struct FormChange sFlappleFormChangeTable[] = static const struct FormChange sAppletunFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_APPLETUN_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_APPLETUN_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1097,7 +1097,7 @@ static const struct FormChange sAppletunFormChangeTable[] = static const struct FormChange sSandacondaFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_SANDACONDA_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_SANDACONDA_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1119,7 +1119,7 @@ static const struct FormChange sCramorantFormChangeTable[] = { static const struct FormChange sToxtricityAmpedFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_TOXTRICITY_AMPED_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_TOXTRICITY_AMPED_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1127,7 +1127,7 @@ static const struct FormChange sToxtricityAmpedFormChangeTable[] = static const struct FormChange sToxtricityLowKeyFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_TOXTRICITY_LOW_KEY_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1137,7 +1137,7 @@ static const struct FormChange sToxtricityLowKeyFormChangeTable[] = static const struct FormChange sCentiskorchFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CENTISKORCH_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_CENTISKORCH_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1147,7 +1147,7 @@ static const struct FormChange sCentiskorchFormChangeTable[] = static const struct FormChange sHattereneFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_HATTERENE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_HATTERENE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1157,7 +1157,7 @@ static const struct FormChange sHattereneFormChangeTable[] = static const struct FormChange sGrimmsnarlFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GRIMMSNARL_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GRIMMSNARL_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1167,7 +1167,7 @@ static const struct FormChange sGrimmsnarlFormChangeTable[] = static const struct FormChange sAlcremieFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_ALCREMIE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_ALCREMIE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1175,8 +1175,8 @@ static const struct FormChange sAlcremieFormChangeTable[] = #if P_FAMILY_EISCUE static const struct FormChange sEiscueFormChangeTable[] = { - {FORM_CHANGE_FAINT, SPECIES_EISCUE_ICE_FACE}, - {FORM_CHANGE_END_BATTLE, SPECIES_EISCUE_ICE_FACE}, + {FORM_CHANGE_FAINT, SPECIES_EISCUE_ICE}, + {FORM_CHANGE_END_BATTLE, SPECIES_EISCUE_ICE}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_FAMILY_EISCUE @@ -1195,7 +1195,7 @@ static const struct FormChange sMorpekoFormChangeTable[] = { #if P_FAMILY_CUFANT static const struct FormChange sCopperajahFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_COPPERAJAH_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_COPPERAJAH_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1204,7 +1204,7 @@ static const struct FormChange sCopperajahFormChangeTable[] = { #if P_FAMILY_DURALUDON static const struct FormChange sDuraludonFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_DURALUDON_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_DURALUDON_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1212,16 +1212,16 @@ static const struct FormChange sDuraludonFormChangeTable[] = { #if P_FAMILY_ZACIAN static const struct FormChange sZacianFormChangeTable[] = { - {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZACIAN_CROWNED_SWORD, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, - {FORM_CHANGE_END_BATTLE, SPECIES_ZACIAN_HERO_OF_MANY_BATTLES, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, + {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZACIAN_CROWNED, ITEM_RUSTED_SWORD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BLADE}, + {FORM_CHANGE_END_BATTLE, SPECIES_ZACIAN_HERO, ITEM_RUSTED_SWORD, MOVE_BEHEMOTH_BLADE, MOVE_IRON_HEAD}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_FAMILY_ZACIAN #if P_FAMILY_ZAMAZENTA static const struct FormChange sZamazentaFormChangeTable[] = { - {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZAMAZENTA_CROWNED_SHIELD, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH}, - {FORM_CHANGE_END_BATTLE, SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD}, + {FORM_CHANGE_BEGIN_BATTLE, SPECIES_ZAMAZENTA_CROWNED, ITEM_RUSTED_SHIELD, MOVE_IRON_HEAD, MOVE_BEHEMOTH_BASH}, + {FORM_CHANGE_END_BATTLE, SPECIES_ZAMAZENTA_HERO, ITEM_RUSTED_SHIELD, MOVE_BEHEMOTH_BASH, MOVE_IRON_HEAD}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_FAMILY_ZAMAZENTA @@ -1229,14 +1229,14 @@ static const struct FormChange sZamazentaFormChangeTable[] = { #if P_FAMILY_KUBFU static const struct FormChange sUrshifuSingleStrikeFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_URSHIFU_SINGLE_STRIKE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; static const struct FormChange sUrshifuRapidStrikeFormChangeTable[] = { #if P_GIGANTAMAX_FORMS - {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_URSHIFU_RAPID_STRIKE_GMAX}, #endif {FORM_CHANGE_TERMINATOR}, }; @@ -1244,8 +1244,8 @@ static const struct FormChange sUrshifuRapidStrikeFormChangeTable[] = { #if P_FAMILY_CALYREX static const struct Fusion sCalyrexFusionTable[] = { - {3, ITEM_REINS_OF_UNITY, SPECIES_CALYREX, SPECIES_GLASTRIER, SPECIES_CALYREX_ICE_RIDER, MOVE_GLACIAL_LANCE, MOVE_CONFUSION}, - {3, ITEM_REINS_OF_UNITY, SPECIES_CALYREX, SPECIES_SPECTRIER, SPECIES_CALYREX_SHADOW_RIDER, MOVE_ASTRAL_BARRAGE, MOVE_CONFUSION}, + {3, ITEM_REINS_OF_UNITY, SPECIES_CALYREX, SPECIES_GLASTRIER, SPECIES_CALYREX_ICE, MOVE_GLACIAL_LANCE, MOVE_CONFUSION}, + {3, ITEM_REINS_OF_UNITY, SPECIES_CALYREX, SPECIES_SPECTRIER, SPECIES_CALYREX_SHADOW, MOVE_ASTRAL_BARRAGE, MOVE_CONFUSION}, {FUSION_TERMINATOR}, }; #endif //P_FAMILY_CALYREX @@ -1268,15 +1268,15 @@ static const struct FormChange sPalafinZeroFormChangeTable[] = #if P_FAMILY_OGERPON static const struct FormChange sOgerponFormChangeTable[] = { - {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_TEAL_MASK, ITEM_NONE}, - {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_WELLSPRING_MASK, ITEM_WELLSPRING_MASK}, - {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_HEARTHFLAME_MASK, ITEM_HEARTHFLAME_MASK}, - {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_CORNERSTONE_MASK, ITEM_CORNERSTONE_MASK}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_TEAL, ITEM_NONE}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_WELLSPRING, ITEM_WELLSPRING_MASK}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_HEARTHFLAME, ITEM_HEARTHFLAME_MASK}, + {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_CORNERSTONE, ITEM_CORNERSTONE_MASK}, #if P_TERA_FORMS - {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_TEAL_MASK_TERA, TYPE_GRASS}, - {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_WELLSPRING_MASK_TERA, TYPE_WATER}, - {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_HEARTHFLAME_MASK_TERA, TYPE_FIRE}, - {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_CORNERSTONE_MASK_TERA, TYPE_ROCK}, + {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_TEAL_TERA, TYPE_GRASS}, + {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_WELLSPRING_TERA, TYPE_WATER}, + {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_HEARTHFLAME_TERA, TYPE_FIRE}, + {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_CORNERSTONE_TERA, TYPE_ROCK}, #endif {FORM_CHANGE_TERMINATOR}, }; diff --git a/src/data/pokemon/form_species_tables.h b/src/data/pokemon/form_species_tables.h index f099f8665f..1a8e1818ef 100644 --- a/src/data/pokemon/form_species_tables.h +++ b/src/data/pokemon/form_species_tables.h @@ -5,7 +5,7 @@ static const u16 sVenusaurFormSpeciesIdTable[] = { SPECIES_VENUSAUR_MEGA, #endif #if P_GIGANTAMAX_FORMS - SPECIES_VENUSAUR_GIGANTAMAX, + SPECIES_VENUSAUR_GMAX, #endif FORM_SPECIES_END, }; @@ -19,7 +19,7 @@ static const u16 sCharizardFormSpeciesIdTable[] = { SPECIES_CHARIZARD_MEGA_Y, #endif #if P_GIGANTAMAX_FORMS - SPECIES_CHARIZARD_GIGANTAMAX, + SPECIES_CHARIZARD_GMAX, #endif FORM_SPECIES_END, }; @@ -32,7 +32,7 @@ static const u16 sBlastoiseFormSpeciesIdTable[] = { SPECIES_BLASTOISE_MEGA, #endif #if P_GIGANTAMAX_FORMS - SPECIES_BLASTOISE_GIGANTAMAX, + SPECIES_BLASTOISE_GMAX, #endif FORM_SPECIES_END, }; @@ -42,7 +42,7 @@ static const u16 sBlastoiseFormSpeciesIdTable[] = { static const u16 sButterfreeFormSpeciesIdTable[] = { SPECIES_BUTTERFREE, #if P_GIGANTAMAX_FORMS - SPECIES_BUTTERFREE_GIGANTAMAX, + SPECIES_BUTTERFREE_GMAX, #endif FORM_SPECIES_END, }; @@ -72,7 +72,7 @@ static const u16 sPidgeotFormSpeciesIdTable[] = { static const u16 sRattataFormSpeciesIdTable[] = { SPECIES_RATTATA, #if P_ALOLAN_FORMS - SPECIES_RATTATA_ALOLAN, + SPECIES_RATTATA_ALOLA, #endif FORM_SPECIES_END, }; @@ -80,8 +80,8 @@ static const u16 sRattataFormSpeciesIdTable[] = { static const u16 sRaticateFormSpeciesIdTable[] = { SPECIES_RATICATE, #if P_ALOLAN_FORMS - SPECIES_RATICATE_ALOLAN, - SPECIES_RATICATE_ALOLAN_TOTEM, + SPECIES_RATICATE_ALOLA, + SPECIES_RATICATE_ALOLA_TOTEM, #endif FORM_SPECIES_END, }; @@ -103,30 +103,30 @@ static const u16 sPikachuFormSpeciesIdTable[] = { SPECIES_PIKACHU_ROCK_STAR, SPECIES_PIKACHU_BELLE, SPECIES_PIKACHU_POP_STAR, - SPECIES_PIKACHU_PH_D, + SPECIES_PIKACHU_PHD, SPECIES_PIKACHU_LIBRE, #endif #if P_CAP_PIKACHU_FORMS - SPECIES_PIKACHU_ORIGINAL_CAP, - SPECIES_PIKACHU_HOENN_CAP, - SPECIES_PIKACHU_SINNOH_CAP, - SPECIES_PIKACHU_UNOVA_CAP, - SPECIES_PIKACHU_KALOS_CAP, - SPECIES_PIKACHU_ALOLA_CAP, + SPECIES_PIKACHU_ORIGINAL, + SPECIES_PIKACHU_HOENN, + SPECIES_PIKACHU_SINNOH, + SPECIES_PIKACHU_UNOVA, + SPECIES_PIKACHU_KALOS, + SPECIES_PIKACHU_ALOLA, SPECIES_PIKACHU_PARTNER_CAP, - SPECIES_PIKACHU_WORLD_CAP, + SPECIES_PIKACHU_WORLD, #endif #if P_GIGANTAMAX_FORMS - SPECIES_PIKACHU_GIGANTAMAX, + SPECIES_PIKACHU_GMAX, #endif - SPECIES_PIKACHU_PARTNER, + SPECIES_PIKACHU_STARTER, FORM_SPECIES_END, }; static const u16 sRaichuFormSpeciesIdTable[] = { SPECIES_RAICHU, #if P_ALOLAN_FORMS - SPECIES_RAICHU_ALOLAN, + SPECIES_RAICHU_ALOLA, #endif FORM_SPECIES_END, }; @@ -136,7 +136,7 @@ static const u16 sRaichuFormSpeciesIdTable[] = { static const u16 sSandshrewFormSpeciesIdTable[] = { SPECIES_SANDSHREW, #if P_ALOLAN_FORMS - SPECIES_SANDSHREW_ALOLAN, + SPECIES_SANDSHREW_ALOLA, #endif FORM_SPECIES_END, }; @@ -144,7 +144,7 @@ static const u16 sSandshrewFormSpeciesIdTable[] = { static const u16 sSandslashFormSpeciesIdTable[] = { SPECIES_SANDSLASH, #if P_ALOLAN_FORMS - SPECIES_SANDSLASH_ALOLAN, + SPECIES_SANDSLASH_ALOLA, #endif FORM_SPECIES_END, }; @@ -154,7 +154,7 @@ static const u16 sSandslashFormSpeciesIdTable[] = { static const u16 sVulpixFormSpeciesIdTable[] = { SPECIES_VULPIX, #if P_ALOLAN_FORMS - SPECIES_VULPIX_ALOLAN, + SPECIES_VULPIX_ALOLA, #endif FORM_SPECIES_END, }; @@ -162,7 +162,7 @@ static const u16 sVulpixFormSpeciesIdTable[] = { static const u16 sNinetalesFormSpeciesIdTable[] = { SPECIES_NINETALES, #if P_ALOLAN_FORMS - SPECIES_NINETALES_ALOLAN, + SPECIES_NINETALES_ALOLA, #endif FORM_SPECIES_END, }; @@ -172,7 +172,7 @@ static const u16 sNinetalesFormSpeciesIdTable[] = { static const u16 sDiglettFormSpeciesIdTable[] = { SPECIES_DIGLETT, #if P_ALOLAN_FORMS - SPECIES_DIGLETT_ALOLAN, + SPECIES_DIGLETT_ALOLA, #endif FORM_SPECIES_END, }; @@ -180,7 +180,7 @@ static const u16 sDiglettFormSpeciesIdTable[] = { static const u16 sDugtrioFormSpeciesIdTable[] = { SPECIES_DUGTRIO, #if P_ALOLAN_FORMS - SPECIES_DUGTRIO_ALOLAN, + SPECIES_DUGTRIO_ALOLA, #endif FORM_SPECIES_END, }; @@ -190,13 +190,13 @@ static const u16 sDugtrioFormSpeciesIdTable[] = { static const u16 sMeowthFormSpeciesIdTable[] = { SPECIES_MEOWTH, #if P_ALOLAN_FORMS - SPECIES_MEOWTH_ALOLAN, + SPECIES_MEOWTH_ALOLA, #endif #if P_GALARIAN_FORMS - SPECIES_MEOWTH_GALARIAN, + SPECIES_MEOWTH_GALAR, #endif #if P_GIGANTAMAX_FORMS - SPECIES_MEOWTH_GIGANTAMAX, + SPECIES_MEOWTH_GMAX, #endif FORM_SPECIES_END, }; @@ -204,7 +204,7 @@ static const u16 sMeowthFormSpeciesIdTable[] = { static const u16 sPersianFormSpeciesIdTable[] = { SPECIES_PERSIAN, #if P_ALOLAN_FORMS - SPECIES_PERSIAN_ALOLAN, + SPECIES_PERSIAN_ALOLA, #endif FORM_SPECIES_END, }; @@ -214,7 +214,7 @@ static const u16 sPersianFormSpeciesIdTable[] = { static const u16 sGrowlitheFormSpeciesIdTable[] = { SPECIES_GROWLITHE, #if P_HISUIAN_FORMS - SPECIES_GROWLITHE_HISUIAN, + SPECIES_GROWLITHE_HISUI, #endif FORM_SPECIES_END, }; @@ -222,7 +222,7 @@ static const u16 sGrowlitheFormSpeciesIdTable[] = { static const u16 sArcanineFormSpeciesIdTable[] = { SPECIES_ARCANINE, #if P_HISUIAN_FORMS - SPECIES_ARCANINE_HISUIAN, + SPECIES_ARCANINE_HISUI, #endif FORM_SPECIES_END, }; @@ -242,7 +242,7 @@ static const u16 sAlakazamFormSpeciesIdTable[] = { static const u16 sMachampFormSpeciesIdTable[] = { SPECIES_MACHAMP, #if P_GIGANTAMAX_FORMS - SPECIES_MACHAMP_GIGANTAMAX, + SPECIES_MACHAMP_GMAX, #endif FORM_SPECIES_END, }; @@ -252,7 +252,7 @@ static const u16 sMachampFormSpeciesIdTable[] = { static const u16 sGeodudeFormSpeciesIdTable[] = { SPECIES_GEODUDE, #if P_ALOLAN_FORMS - SPECIES_GEODUDE_ALOLAN, + SPECIES_GEODUDE_ALOLA, #endif FORM_SPECIES_END, }; @@ -260,7 +260,7 @@ static const u16 sGeodudeFormSpeciesIdTable[] = { static const u16 sGravelerFormSpeciesIdTable[] = { SPECIES_GRAVELER, #if P_ALOLAN_FORMS - SPECIES_GRAVELER_ALOLAN, + SPECIES_GRAVELER_ALOLA, #endif FORM_SPECIES_END, }; @@ -268,7 +268,7 @@ static const u16 sGravelerFormSpeciesIdTable[] = { static const u16 sGolemFormSpeciesIdTable[] = { SPECIES_GOLEM, #if P_ALOLAN_FORMS - SPECIES_GOLEM_ALOLAN, + SPECIES_GOLEM_ALOLA, #endif FORM_SPECIES_END, }; @@ -278,7 +278,7 @@ static const u16 sGolemFormSpeciesIdTable[] = { static const u16 sPonytaFormSpeciesIdTable[] = { SPECIES_PONYTA, #if P_GALARIAN_FORMS - SPECIES_PONYTA_GALARIAN, + SPECIES_PONYTA_GALAR, #endif FORM_SPECIES_END, }; @@ -286,7 +286,7 @@ static const u16 sPonytaFormSpeciesIdTable[] = { static const u16 sRapidashFormSpeciesIdTable[] = { SPECIES_RAPIDASH, #if P_GALARIAN_FORMS - SPECIES_RAPIDASH_GALARIAN, + SPECIES_RAPIDASH_GALAR, #endif FORM_SPECIES_END, }; @@ -296,7 +296,7 @@ static const u16 sRapidashFormSpeciesIdTable[] = { static const u16 sSlowpokeFormSpeciesIdTable[] = { SPECIES_SLOWPOKE, #if P_GALARIAN_FORMS - SPECIES_SLOWPOKE_GALARIAN, + SPECIES_SLOWPOKE_GALAR, #endif FORM_SPECIES_END, }; @@ -307,7 +307,7 @@ static const u16 sSlowbroFormSpeciesIdTable[] = { SPECIES_SLOWBRO_MEGA, #endif #if P_GALARIAN_FORMS - SPECIES_SLOWBRO_GALARIAN, + SPECIES_SLOWBRO_GALAR, #endif FORM_SPECIES_END, }; @@ -316,7 +316,7 @@ static const u16 sSlowbroFormSpeciesIdTable[] = { static const u16 sSlowkingFormSpeciesIdTable[] = { SPECIES_SLOWKING, #if P_GALARIAN_FORMS - SPECIES_SLOWKING_GALARIAN, + SPECIES_SLOWKING_GALAR, #endif FORM_SPECIES_END, }; @@ -327,7 +327,7 @@ static const u16 sSlowkingFormSpeciesIdTable[] = { static const u16 sFarfetchdFormSpeciesIdTable[] = { SPECIES_FARFETCHD, #if P_GALARIAN_FORMS - SPECIES_FARFETCHD_GALARIAN, + SPECIES_FARFETCHD_GALAR, #endif FORM_SPECIES_END, }; @@ -337,7 +337,7 @@ static const u16 sFarfetchdFormSpeciesIdTable[] = { static const u16 sGrimerFormSpeciesIdTable[] = { SPECIES_GRIMER, #if P_ALOLAN_FORMS - SPECIES_GRIMER_ALOLAN, + SPECIES_GRIMER_ALOLA, #endif FORM_SPECIES_END, }; @@ -345,7 +345,7 @@ static const u16 sGrimerFormSpeciesIdTable[] = { static const u16 sMukFormSpeciesIdTable[] = { SPECIES_MUK, #if P_ALOLAN_FORMS - SPECIES_MUK_ALOLAN, + SPECIES_MUK_ALOLA, #endif FORM_SPECIES_END, }; @@ -358,7 +358,7 @@ static const u16 sGengarFormSpeciesIdTable[] = { SPECIES_GENGAR_MEGA, #endif #if P_GIGANTAMAX_FORMS - SPECIES_GENGAR_GIGANTAMAX, + SPECIES_GENGAR_GMAX, #endif FORM_SPECIES_END, }; @@ -380,7 +380,7 @@ static const u16 sSteelixFormSpeciesIdTable[] = { static const u16 sKinglerFormSpeciesIdTable[] = { SPECIES_KINGLER, #if P_GIGANTAMAX_FORMS - SPECIES_KINGLER_GIGANTAMAX, + SPECIES_KINGLER_GMAX, #endif FORM_SPECIES_END, }; @@ -390,7 +390,7 @@ static const u16 sKinglerFormSpeciesIdTable[] = { static const u16 sVoltorbFormSpeciesIdTable[] = { SPECIES_VOLTORB, #if P_HISUIAN_FORMS - SPECIES_VOLTORB_HISUIAN, + SPECIES_VOLTORB_HISUI, #endif FORM_SPECIES_END, }; @@ -398,7 +398,7 @@ static const u16 sVoltorbFormSpeciesIdTable[] = { static const u16 sElectrodeFormSpeciesIdTable[] = { SPECIES_ELECTRODE, #if P_HISUIAN_FORMS - SPECIES_ELECTRODE_HISUIAN, + SPECIES_ELECTRODE_HISUI, #endif FORM_SPECIES_END, }; @@ -408,7 +408,7 @@ static const u16 sElectrodeFormSpeciesIdTable[] = { static const u16 sExeggutorFormSpeciesIdTable[] = { SPECIES_EXEGGUTOR, #if P_ALOLAN_FORMS - SPECIES_EXEGGUTOR_ALOLAN, + SPECIES_EXEGGUTOR_ALOLA, #endif FORM_SPECIES_END, }; @@ -418,8 +418,8 @@ static const u16 sExeggutorFormSpeciesIdTable[] = { static const u16 sMarowakFormSpeciesIdTable[] = { SPECIES_MAROWAK, #if P_ALOLAN_FORMS - SPECIES_MAROWAK_ALOLAN, - SPECIES_MAROWAK_ALOLAN_TOTEM, + SPECIES_MAROWAK_ALOLA, + SPECIES_MAROWAK_ALOLA_TOTEM, #endif FORM_SPECIES_END, }; @@ -429,7 +429,7 @@ static const u16 sMarowakFormSpeciesIdTable[] = { static const u16 sWeezingFormSpeciesIdTable[] = { SPECIES_WEEZING, #if P_GALARIAN_FORMS - SPECIES_WEEZING_GALARIAN, + SPECIES_WEEZING_GALAR, #endif FORM_SPECIES_END, }; @@ -449,7 +449,7 @@ static const u16 sKangaskhanFormSpeciesIdTable[] = { static const u16 sMrMimeFormSpeciesIdTable[] = { SPECIES_MR_MIME, #if P_GALARIAN_FORMS - SPECIES_MR_MIME_GALARIAN, + SPECIES_MR_MIME_GALAR, #endif FORM_SPECIES_END, }; @@ -481,9 +481,9 @@ static const u16 sPinsirFormSpeciesIdTable[] = { static const u16 sTaurosFormSpeciesIdTable[] = { SPECIES_TAUROS, #if P_PALDEAN_FORMS - SPECIES_TAUROS_PALDEAN_COMBAT_BREED, - SPECIES_TAUROS_PALDEAN_BLAZE_BREED, - SPECIES_TAUROS_PALDEAN_AQUA_BREED, + SPECIES_TAUROS_PALDEA_COMBAT, + SPECIES_TAUROS_PALDEA_BLAZE, + SPECIES_TAUROS_PALDEA_AQUA, #endif FORM_SPECIES_END, }; @@ -503,7 +503,7 @@ static const u16 sGyaradosFormSpeciesIdTable[] = { static const u16 sLaprasFormSpeciesIdTable[] = { SPECIES_LAPRAS, #if P_GIGANTAMAX_FORMS - SPECIES_LAPRAS_GIGANTAMAX, + SPECIES_LAPRAS_GMAX, #endif FORM_SPECIES_END, }; @@ -513,9 +513,9 @@ static const u16 sLaprasFormSpeciesIdTable[] = { static const u16 sEeveeFormSpeciesIdTable[] = { SPECIES_EEVEE, #if P_GIGANTAMAX_FORMS - SPECIES_EEVEE_GIGANTAMAX, + SPECIES_EEVEE_GMAX, #endif - SPECIES_EEVEE_PARTNER, + SPECIES_EEVEE_STARTER, FORM_SPECIES_END, }; #endif //P_FAMILY_EEVEE @@ -534,7 +534,7 @@ static const u16 sAerodactylFormSpeciesIdTable[] = { static const u16 sSnorlaxFormSpeciesIdTable[] = { SPECIES_SNORLAX, #if P_GIGANTAMAX_FORMS - SPECIES_SNORLAX_GIGANTAMAX, + SPECIES_SNORLAX_GMAX, #endif FORM_SPECIES_END, }; @@ -544,7 +544,7 @@ static const u16 sSnorlaxFormSpeciesIdTable[] = { static const u16 sArticunoFormSpeciesIdTable[] = { SPECIES_ARTICUNO, #if P_GALARIAN_FORMS - SPECIES_ARTICUNO_GALARIAN, + SPECIES_ARTICUNO_GALAR, #endif FORM_SPECIES_END, }; @@ -554,7 +554,7 @@ static const u16 sArticunoFormSpeciesIdTable[] = { static const u16 sZapdosFormSpeciesIdTable[] = { SPECIES_ZAPDOS, #if P_GALARIAN_FORMS - SPECIES_ZAPDOS_GALARIAN, + SPECIES_ZAPDOS_GALAR, #endif FORM_SPECIES_END, }; @@ -564,7 +564,7 @@ static const u16 sZapdosFormSpeciesIdTable[] = { static const u16 sMoltresFormSpeciesIdTable[] = { SPECIES_MOLTRES, #if P_GALARIAN_FORMS - SPECIES_MOLTRES_GALARIAN, + SPECIES_MOLTRES_GALAR, #endif FORM_SPECIES_END, }; @@ -585,7 +585,7 @@ static const u16 sMewtwoFormSpeciesIdTable[] = { static const u16 sTyphlosionFormSpeciesIdTable[] = { SPECIES_TYPHLOSION, #if P_HISUIAN_FORMS - SPECIES_TYPHLOSION_HISUIAN, + SPECIES_TYPHLOSION_HISUI, #endif FORM_SPECIES_END, }; @@ -605,7 +605,7 @@ static const u16 sAmpharosFormSpeciesIdTable[] = { static const u16 sWooperFormSpeciesIdTable[] = { SPECIES_WOOPER, #if P_PALDEAN_FORMS - SPECIES_WOOPER_PALDEAN, + SPECIES_WOOPER_PALDEA, #endif FORM_SPECIES_END, }; @@ -639,8 +639,8 @@ static const u16 sUnownFormSpeciesIdTable[] = { SPECIES_UNOWN_X, SPECIES_UNOWN_Y, SPECIES_UNOWN_Z, - SPECIES_UNOWN_EMARK, - SPECIES_UNOWN_QMARK, + SPECIES_UNOWN_EXCLAMATION, + SPECIES_UNOWN_QUESTION, FORM_SPECIES_END, }; #endif //P_FAMILY_UNOWN @@ -657,7 +657,7 @@ static const u16 sDudunsparceFormSpeciesIdTable[] = { static const u16 sQwilfishFormSpeciesIdTable[] = { SPECIES_QWILFISH, #if P_HISUIAN_FORMS - SPECIES_QWILFISH_HISUIAN, + SPECIES_QWILFISH_HISUI, #endif FORM_SPECIES_END, }; @@ -677,7 +677,7 @@ static const u16 sHeracrossFormSpeciesIdTable[] = { static const u16 sSneaselFormSpeciesIdTable[] = { SPECIES_SNEASEL, #if P_HISUIAN_FORMS - SPECIES_SNEASEL_HISUIAN, + SPECIES_SNEASEL_HISUI, #endif FORM_SPECIES_END, }; @@ -695,7 +695,7 @@ static const u16 sUrsalunaFormSpeciesIdTable[] = { static const u16 sCorsolaFormSpeciesIdTable[] = { SPECIES_CORSOLA, #if P_GALARIAN_FORMS - SPECIES_CORSOLA_GALARIAN, + SPECIES_CORSOLA_GALAR, #endif FORM_SPECIES_END, }; @@ -755,7 +755,7 @@ static const u16 sSwampertFormSpeciesIdTable[] = { static const u16 sZigzagoonFormSpeciesIdTable[] = { SPECIES_ZIGZAGOON, #if P_GALARIAN_FORMS - SPECIES_ZIGZAGOON_GALARIAN, + SPECIES_ZIGZAGOON_GALAR, #endif FORM_SPECIES_END, }; @@ -763,7 +763,7 @@ static const u16 sZigzagoonFormSpeciesIdTable[] = { static const u16 sLinooneFormSpeciesIdTable[] = { SPECIES_LINOONE, #if P_GALARIAN_FORMS - SPECIES_LINOONE_GALARIAN, + SPECIES_LINOONE_GALAR, #endif FORM_SPECIES_END, }; @@ -991,23 +991,23 @@ static const u16 sDeoxysFormSpeciesIdTable[] = { #if P_FAMILY_BURMY static const u16 sBurmyFormSpeciesIdTable[] = { - SPECIES_BURMY_PLANT_CLOAK, - SPECIES_BURMY_SANDY_CLOAK, - SPECIES_BURMY_TRASH_CLOAK, + SPECIES_BURMY_PLANT, + SPECIES_BURMY_SANDY, + SPECIES_BURMY_TRASH, FORM_SPECIES_END, }; static const u16 sWormadamFormSpeciesIdTable[] = { - SPECIES_WORMADAM_PLANT_CLOAK, - SPECIES_WORMADAM_SANDY_CLOAK, - SPECIES_WORMADAM_TRASH_CLOAK, + SPECIES_WORMADAM_PLANT, + SPECIES_WORMADAM_SANDY, + SPECIES_WORMADAM_TRASH, FORM_SPECIES_END, }; static const u16 sMothimFormSpeciesIdTable[] = { - SPECIES_MOTHIM_PLANT_CLOAK, - SPECIES_MOTHIM_SANDY_CLOAK, - SPECIES_MOTHIM_TRASH_CLOAK, + SPECIES_MOTHIM_PLANT, + SPECIES_MOTHIM_SANDY, + SPECIES_MOTHIM_TRASH, FORM_SPECIES_END, }; #endif //P_FAMILY_BURMY @@ -1022,14 +1022,14 @@ static const u16 sCherrimFormSpeciesIdTable[] = { #if P_FAMILY_SHELLOS static const u16 sShellosFormSpeciesIdTable[] = { - SPECIES_SHELLOS_WEST_SEA, - SPECIES_SHELLOS_EAST_SEA, + SPECIES_SHELLOS_WEST, + SPECIES_SHELLOS_EAST, FORM_SPECIES_END, }; static const u16 sGastrodonFormSpeciesIdTable[] = { - SPECIES_GASTRODON_WEST_SEA, - SPECIES_GASTRODON_EAST_SEA, + SPECIES_GASTRODON_WEST, + SPECIES_GASTRODON_EAST, FORM_SPECIES_END, }; #endif //P_FAMILY_SHELLOS @@ -1146,7 +1146,7 @@ static const u16 sArceusFormSpeciesIdTable[] = { static const u16 sSamurottFormSpeciesIdTable[] = { SPECIES_SAMUROTT, #if P_HISUIAN_FORMS - SPECIES_SAMUROTT_HISUIAN, + SPECIES_SAMUROTT_HISUI, #endif FORM_SPECIES_END, }; @@ -1166,7 +1166,7 @@ static const u16 sAudinoFormSpeciesIdTable[] = { static const u16 sLilligantFormSpeciesIdTable[] = { SPECIES_LILLIGANT, #if P_HISUIAN_FORMS - SPECIES_LILLIGANT_HISUIAN, + SPECIES_LILLIGANT_HISUI, #endif FORM_SPECIES_END, }; @@ -1181,8 +1181,8 @@ static const u16 sBasculinFormSpeciesIdTable[] = { }; static const u16 sBasculegionFormSpeciesIdTable[] = { - SPECIES_BASCULEGION_MALE, - SPECIES_BASCULEGION_FEMALE, + SPECIES_BASCULEGION_M, + SPECIES_BASCULEGION_F, FORM_SPECIES_END, }; #endif //P_FAMILY_BASCULIN @@ -1191,17 +1191,17 @@ static const u16 sBasculegionFormSpeciesIdTable[] = { static const u16 sDarumakaFormSpeciesIdTable[] = { SPECIES_DARUMAKA, #if P_GALARIAN_FORMS - SPECIES_DARUMAKA_GALARIAN, + SPECIES_DARUMAKA_GALAR, #endif FORM_SPECIES_END, }; static const u16 sDarmanitanFormSpeciesIdTable[] = { - SPECIES_DARMANITAN_STANDARD_MODE, - SPECIES_DARMANITAN_ZEN_MODE, + SPECIES_DARMANITAN_STANDARD, + SPECIES_DARMANITAN_ZEN, #if P_GALARIAN_FORMS - SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE, - SPECIES_DARMANITAN_GALARIAN_ZEN_MODE, + SPECIES_DARMANITAN_GALAR_STANDARD, + SPECIES_DARMANITAN_GALAR_ZEN, #endif FORM_SPECIES_END, }; @@ -1211,7 +1211,7 @@ static const u16 sDarmanitanFormSpeciesIdTable[] = { static const u16 sYamaskFormSpeciesIdTable[] = { SPECIES_YAMASK, #if P_GALARIAN_FORMS - SPECIES_YAMASK_GALARIAN, + SPECIES_YAMASK_GALAR, #endif FORM_SPECIES_END, }; @@ -1221,7 +1221,7 @@ static const u16 sYamaskFormSpeciesIdTable[] = { static const u16 sGarbodorFormSpeciesIdTable[] = { SPECIES_GARBODOR, #if P_GIGANTAMAX_FORMS - SPECIES_GARBODOR_GIGANTAMAX, + SPECIES_GARBODOR_GMAX, #endif FORM_SPECIES_END, }; @@ -1231,7 +1231,7 @@ static const u16 sGarbodorFormSpeciesIdTable[] = { static const u16 sZoruaFormSpeciesIdTable[] = { SPECIES_ZORUA, #if P_HISUIAN_FORMS - SPECIES_ZORUA_HISUIAN, + SPECIES_ZORUA_HISUI, #endif FORM_SPECIES_END, }; @@ -1239,7 +1239,7 @@ static const u16 sZoruaFormSpeciesIdTable[] = { static const u16 sZoroarkFormSpeciesIdTable[] = { SPECIES_ZOROARK, #if P_HISUIAN_FORMS - SPECIES_ZOROARK_HISUIAN, + SPECIES_ZOROARK_HISUI, #endif FORM_SPECIES_END, }; @@ -1267,7 +1267,7 @@ static const u16 sSawsbuckFormSpeciesIdTable[] = { static const u16 sStunfiskFormSpeciesIdTable[] = { SPECIES_STUNFISK, #if P_GALARIAN_FORMS - SPECIES_STUNFISK_GALARIAN, + SPECIES_STUNFISK_GALAR, #endif FORM_SPECIES_END, }; @@ -1277,7 +1277,7 @@ static const u16 sStunfiskFormSpeciesIdTable[] = { static const u16 sBraviaryFormSpeciesIdTable[] = { SPECIES_BRAVIARY, #if P_HISUIAN_FORMS - SPECIES_BRAVIARY_HISUIAN, + SPECIES_BRAVIARY_HISUI, #endif FORM_SPECIES_END, }; @@ -1335,10 +1335,10 @@ static const u16 sMeloettaFormSpeciesIdTable[] = { #if P_FAMILY_GENESECT static const u16 sGenesectFormSpeciesIdTable[] = { SPECIES_GENESECT, - SPECIES_GENESECT_DOUSE_DRIVE, - SPECIES_GENESECT_SHOCK_DRIVE, - SPECIES_GENESECT_BURN_DRIVE, - SPECIES_GENESECT_CHILL_DRIVE, + SPECIES_GENESECT_DOUSE, + SPECIES_GENESECT_SHOCK, + SPECIES_GENESECT_BURN, + SPECIES_GENESECT_CHILL, FORM_SPECIES_END, }; #endif //P_FAMILY_GENESECT @@ -1373,7 +1373,7 @@ static const u16 sScatterbugFormSpeciesIdTable[] = { SPECIES_SCATTERBUG_OCEAN, SPECIES_SCATTERBUG_JUNGLE, SPECIES_SCATTERBUG_FANCY, - SPECIES_SCATTERBUG_POKE_BALL, + SPECIES_SCATTERBUG_POKEBALL, FORM_SPECIES_END, }; @@ -1397,7 +1397,7 @@ static const u16 sSpewpaFormSpeciesIdTable[] = { SPECIES_SPEWPA_OCEAN, SPECIES_SPEWPA_JUNGLE, SPECIES_SPEWPA_FANCY, - SPECIES_SPEWPA_POKE_BALL, + SPECIES_SPEWPA_POKEBALL, FORM_SPECIES_END, }; @@ -1421,37 +1421,37 @@ static const u16 sVivillonFormSpeciesIdTable[] = { SPECIES_VIVILLON_OCEAN, SPECIES_VIVILLON_JUNGLE, SPECIES_VIVILLON_FANCY, - SPECIES_VIVILLON_POKE_BALL, + SPECIES_VIVILLON_POKEBALL, FORM_SPECIES_END, }; #endif //P_FAMILY_SCATTERBUG #if P_FAMILY_FLABEBE static const u16 sFlabebeFormSpeciesIdTable[] = { - SPECIES_FLABEBE_RED_FLOWER, - SPECIES_FLABEBE_YELLOW_FLOWER, - SPECIES_FLABEBE_ORANGE_FLOWER, - SPECIES_FLABEBE_BLUE_FLOWER, - SPECIES_FLABEBE_WHITE_FLOWER, + SPECIES_FLABEBE_RED, + SPECIES_FLABEBE_YELLOW, + SPECIES_FLABEBE_ORANGE, + SPECIES_FLABEBE_BLUE, + SPECIES_FLABEBE_WHITE, FORM_SPECIES_END, }; static const u16 sFloetteFormSpeciesIdTable[] = { - SPECIES_FLOETTE_RED_FLOWER, - SPECIES_FLOETTE_YELLOW_FLOWER, - SPECIES_FLOETTE_ORANGE_FLOWER, - SPECIES_FLOETTE_BLUE_FLOWER, - SPECIES_FLOETTE_WHITE_FLOWER, - SPECIES_FLOETTE_ETERNAL_FLOWER, + SPECIES_FLOETTE_RED, + SPECIES_FLOETTE_YELLOW, + SPECIES_FLOETTE_ORANGE, + SPECIES_FLOETTE_BLUE, + SPECIES_FLOETTE_WHITE, + SPECIES_FLOETTE_ETERNAL, FORM_SPECIES_END, }; static const u16 sFlorgesFormSpeciesIdTable[] = { - SPECIES_FLORGES_RED_FLOWER, - SPECIES_FLORGES_YELLOW_FLOWER, - SPECIES_FLORGES_ORANGE_FLOWER, - SPECIES_FLORGES_BLUE_FLOWER, - SPECIES_FLORGES_WHITE_FLOWER, + SPECIES_FLORGES_RED, + SPECIES_FLORGES_YELLOW, + SPECIES_FLORGES_ORANGE, + SPECIES_FLORGES_BLUE, + SPECIES_FLORGES_WHITE, FORM_SPECIES_END, }; #endif //P_FAMILY_FLABEBE @@ -1474,8 +1474,8 @@ static const u16 sFurfrouFormSpeciesIdTable[] = { #if P_FAMILY_ESPURR static const u16 sMeowsticFormSpeciesIdTable[] = { - SPECIES_MEOWSTIC_MALE, - SPECIES_MEOWSTIC_FEMALE, + SPECIES_MEOWSTIC_M, + SPECIES_MEOWSTIC_F, FORM_SPECIES_END, }; #endif //P_FAMILY_ESPURR @@ -1492,7 +1492,7 @@ static const u16 sAegislashFormSpeciesIdTable[] = { static const u16 sSliggooFormSpeciesIdTable[] = { SPECIES_SLIGGOO, #if P_HISUIAN_FORMS - SPECIES_SLIGGOO_HISUIAN, + SPECIES_SLIGGOO_HISUI, #endif FORM_SPECIES_END, }; @@ -1500,7 +1500,7 @@ static const u16 sSliggooFormSpeciesIdTable[] = { static const u16 sGoodraFormSpeciesIdTable[] = { SPECIES_GOODRA, #if P_HISUIAN_FORMS - SPECIES_GOODRA_HISUIAN, + SPECIES_GOODRA_HISUI, #endif FORM_SPECIES_END, }; @@ -1528,7 +1528,7 @@ static const u16 sGourgeistFormSpeciesIdTable[] = { static const u16 sAvaluggFormSpeciesIdTable[] = { SPECIES_AVALUGG, #if P_HISUIAN_FORMS - SPECIES_AVALUGG_HISUIAN, + SPECIES_AVALUGG_HISUI, #endif FORM_SPECIES_END, }; @@ -1544,7 +1544,7 @@ static const u16 sXerneasFormSpeciesIdTable[] = { #if P_FAMILY_ZYGARDE static const u16 sZygardeFormSpeciesIdTable[] = { - SPECIES_ZYGARDE_50_AURA_BREAK, + SPECIES_ZYGARDE_50, SPECIES_ZYGARDE_10_AURA_BREAK, SPECIES_ZYGARDE_10_POWER_CONSTRUCT, SPECIES_ZYGARDE_50_POWER_CONSTRUCT, @@ -1575,7 +1575,7 @@ static const u16 sHoopaFormSpeciesIdTable[] = { static const u16 sDecidueyeFormSpeciesIdTable[] = { SPECIES_DECIDUEYE, #if P_HISUIAN_FORMS - SPECIES_DECIDUEYE_HISUIAN, + SPECIES_DECIDUEYE_HISUI, #endif FORM_SPECIES_END, }; @@ -1719,7 +1719,7 @@ static const u16 sMimikyuFormSpeciesIdTable[] = { SPECIES_MIMIKYU_DISGUISED, SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU_TOTEM_DISGUISED, - SPECIES_MIMIKYU_TOTEM_BUSTED, + SPECIES_MIMIKYU_BUSTED_TOTEM, FORM_SPECIES_END, }; #endif //P_FAMILY_MIMIKYU @@ -1747,7 +1747,7 @@ static const u16 sNecrozmaFormSpeciesIdTable[] = { #if P_FAMILY_MAGEARNA static const u16 sMagearnaFormSpeciesIdTable[] = { SPECIES_MAGEARNA, - SPECIES_MAGEARNA_ORIGINAL_COLOR, + SPECIES_MAGEARNA_ORIGINAL, FORM_SPECIES_END, }; #endif //P_FAMILY_MAGEARNA @@ -1756,7 +1756,7 @@ static const u16 sMagearnaFormSpeciesIdTable[] = { static const u16 sMelmetalFormSpeciesIdTable[] = { SPECIES_MELMETAL, #if P_GIGANTAMAX_FORMS - SPECIES_MELMETAL_GIGANTAMAX, + SPECIES_MELMETAL_GMAX, #endif FORM_SPECIES_END, }; @@ -1766,7 +1766,7 @@ static const u16 sMelmetalFormSpeciesIdTable[] = { static const u16 sRillaboomFormSpeciesIdTable[] = { SPECIES_RILLABOOM, #if P_GIGANTAMAX_FORMS - SPECIES_RILLABOOM_GIGANTAMAX, + SPECIES_RILLABOOM_GMAX, #endif FORM_SPECIES_END, }; @@ -1776,7 +1776,7 @@ static const u16 sRillaboomFormSpeciesIdTable[] = { static const u16 sCinderaceFormSpeciesIdTable[] = { SPECIES_CINDERACE, #if P_GIGANTAMAX_FORMS - SPECIES_CINDERACE_GIGANTAMAX, + SPECIES_CINDERACE_GMAX, #endif FORM_SPECIES_END, }; @@ -1786,7 +1786,7 @@ static const u16 sCinderaceFormSpeciesIdTable[] = { static const u16 sInteleonFormSpeciesIdTable[] = { SPECIES_INTELEON, #if P_GIGANTAMAX_FORMS - SPECIES_INTELEON_GIGANTAMAX, + SPECIES_INTELEON_GMAX, #endif FORM_SPECIES_END, }; @@ -1796,7 +1796,7 @@ static const u16 sInteleonFormSpeciesIdTable[] = { static const u16 sCorviknightFormSpeciesIdTable[] = { SPECIES_CORVIKNIGHT, #if P_GIGANTAMAX_FORMS - SPECIES_CORVIKNIGHT_GIGANTAMAX, + SPECIES_CORVIKNIGHT_GMAX, #endif FORM_SPECIES_END, }; @@ -1806,7 +1806,7 @@ static const u16 sCorviknightFormSpeciesIdTable[] = { static const u16 sOrbeetleFormSpeciesIdTable[] = { SPECIES_ORBEETLE, #if P_GIGANTAMAX_FORMS - SPECIES_ORBEETLE_GIGANTAMAX, + SPECIES_ORBEETLE_GMAX, #endif FORM_SPECIES_END, }; @@ -1816,7 +1816,7 @@ static const u16 sOrbeetleFormSpeciesIdTable[] = { static const u16 sDrednawFormSpeciesIdTable[] = { SPECIES_DREDNAW, #if P_GIGANTAMAX_FORMS - SPECIES_DREDNAW_GIGANTAMAX, + SPECIES_DREDNAW_GMAX, #endif FORM_SPECIES_END, }; @@ -1826,7 +1826,7 @@ static const u16 sDrednawFormSpeciesIdTable[] = { static const u16 sCoalossalFormSpeciesIdTable[] = { SPECIES_COALOSSAL, #if P_GIGANTAMAX_FORMS - SPECIES_COALOSSAL_GIGANTAMAX, + SPECIES_COALOSSAL_GMAX, #endif FORM_SPECIES_END, }; @@ -1836,7 +1836,7 @@ static const u16 sCoalossalFormSpeciesIdTable[] = { static const u16 sFlappleFormSpeciesIdTable[] = { SPECIES_FLAPPLE, #if P_GIGANTAMAX_FORMS - SPECIES_FLAPPLE_GIGANTAMAX, + SPECIES_FLAPPLE_GMAX, #endif FORM_SPECIES_END, }; @@ -1844,7 +1844,7 @@ static const u16 sFlappleFormSpeciesIdTable[] = { static const u16 sAppletunFormSpeciesIdTable[] = { SPECIES_APPLETUN, #if P_GIGANTAMAX_FORMS - SPECIES_APPLETUN_GIGANTAMAX, + SPECIES_APPLETUN_GMAX, #endif FORM_SPECIES_END, }; @@ -1854,7 +1854,7 @@ static const u16 sAppletunFormSpeciesIdTable[] = { static const u16 sSandacondaFormSpeciesIdTable[] = { SPECIES_SANDACONDA, #if P_GIGANTAMAX_FORMS - SPECIES_SANDACONDA_GIGANTAMAX, + SPECIES_SANDACONDA_GMAX, #endif FORM_SPECIES_END, }; @@ -1874,10 +1874,10 @@ static const u16 sToxtricityFormSpeciesIdTable[] = { SPECIES_TOXTRICITY_AMPED, SPECIES_TOXTRICITY_LOW_KEY, #if P_GIGANTAMAX_FORMS - SPECIES_TOXTRICITY_AMPED_GIGANTAMAX, + SPECIES_TOXTRICITY_AMPED_GMAX, #endif #if P_GIGANTAMAX_FORMS - SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX, + SPECIES_TOXTRICITY_LOW_KEY_GMAX, #endif FORM_SPECIES_END, }; @@ -1887,7 +1887,7 @@ static const u16 sToxtricityFormSpeciesIdTable[] = { static const u16 sCentiskorchFormSpeciesIdTable[] = { SPECIES_CENTISKORCH, #if P_GIGANTAMAX_FORMS - SPECIES_CENTISKORCH_GIGANTAMAX, + SPECIES_CENTISKORCH_GMAX, #endif FORM_SPECIES_END, }; @@ -1911,7 +1911,7 @@ static const u16 sPolteageistFormSpeciesIdTable[] = { static const u16 sHattereneFormSpeciesIdTable[] = { SPECIES_HATTERENE, #if P_GIGANTAMAX_FORMS - SPECIES_HATTERENE_GIGANTAMAX, + SPECIES_HATTERENE_GMAX, #endif FORM_SPECIES_END, }; @@ -1921,7 +1921,7 @@ static const u16 sHattereneFormSpeciesIdTable[] = { static const u16 sGrimmsnarlFormSpeciesIdTable[] = { SPECIES_GRIMMSNARL, #if P_GIGANTAMAX_FORMS - SPECIES_GRIMMSNARL_GIGANTAMAX, + SPECIES_GRIMMSNARL_GMAX, #endif FORM_SPECIES_END, }; @@ -1993,7 +1993,7 @@ static const u16 sAlcremieFormSpeciesIdTable[] = { SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL, SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL, #if P_GIGANTAMAX_FORMS - SPECIES_ALCREMIE_GIGANTAMAX, + SPECIES_ALCREMIE_GMAX, #endif FORM_SPECIES_END, }; @@ -2001,16 +2001,16 @@ static const u16 sAlcremieFormSpeciesIdTable[] = { #if P_FAMILY_EISCUE static const u16 sEiscueFormSpeciesIdTable[] = { - SPECIES_EISCUE_ICE_FACE, - SPECIES_EISCUE_NOICE_FACE, + SPECIES_EISCUE_ICE, + SPECIES_EISCUE_NOICE, FORM_SPECIES_END, }; #endif //P_FAMILY_EISCUE #if P_FAMILY_INDEEDEE static const u16 sIndeedeeFormSpeciesIdTable[] = { - SPECIES_INDEEDEE_MALE, - SPECIES_INDEEDEE_FEMALE, + SPECIES_INDEEDEE_M, + SPECIES_INDEEDEE_F, FORM_SPECIES_END, }; #endif //P_FAMILY_INDEEDEE @@ -2027,7 +2027,7 @@ static const u16 sMorpekoFormSpeciesIdTable[] = { static const u16 sCopperajahFormSpeciesIdTable[] = { SPECIES_COPPERAJAH, #if P_GIGANTAMAX_FORMS - SPECIES_COPPERAJAH_GIGANTAMAX, + SPECIES_COPPERAJAH_GMAX, #endif FORM_SPECIES_END, }; @@ -2037,7 +2037,7 @@ static const u16 sCopperajahFormSpeciesIdTable[] = { static const u16 sDuraludonFormSpeciesIdTable[] = { SPECIES_DURALUDON, #if P_GIGANTAMAX_FORMS - SPECIES_DURALUDON_GIGANTAMAX, + SPECIES_DURALUDON_GMAX, #endif FORM_SPECIES_END, }; @@ -2045,16 +2045,16 @@ static const u16 sDuraludonFormSpeciesIdTable[] = { #if P_FAMILY_ZACIAN static const u16 sZacianFormSpeciesIdTable[] = { - SPECIES_ZACIAN_HERO_OF_MANY_BATTLES, - SPECIES_ZACIAN_CROWNED_SWORD, + SPECIES_ZACIAN_HERO, + SPECIES_ZACIAN_CROWNED, FORM_SPECIES_END, }; #endif //P_FAMILY_ZACIAN #if P_FAMILY_ZAMAZENTA static const u16 sZamazentaFormSpeciesIdTable[] = { - SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES, - SPECIES_ZAMAZENTA_CROWNED_SHIELD, + SPECIES_ZAMAZENTA_HERO, + SPECIES_ZAMAZENTA_CROWNED, FORM_SPECIES_END, }; #endif //P_FAMILY_ZAMAZENTA @@ -2069,11 +2069,11 @@ static const u16 sEternatusFormSpeciesIdTable[] = { #if P_FAMILY_KUBFU static const u16 sUrshifuFormSpeciesIdTable[] = { - SPECIES_URSHIFU_SINGLE_STRIKE_STYLE, - SPECIES_URSHIFU_RAPID_STRIKE_STYLE, + SPECIES_URSHIFU_SINGLE_STRIKE, + SPECIES_URSHIFU_RAPID_STRIKE, #if P_GIGANTAMAX_FORMS - SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX, - SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, + SPECIES_URSHIFU_SINGLE_STRIKE_GMAX, + SPECIES_URSHIFU_RAPID_STRIKE_GMAX, #endif FORM_SPECIES_END, }; @@ -2090,8 +2090,8 @@ static const u16 sZarudeFormSpeciesIdTable[] = { #if P_FAMILY_CALYREX static const u16 sCalyrexFormSpeciesIdTable[] = { SPECIES_CALYREX, - SPECIES_CALYREX_ICE_RIDER, - SPECIES_CALYREX_SHADOW_RIDER, + SPECIES_CALYREX_ICE, + SPECIES_CALYREX_SHADOW, FORM_SPECIES_END, }; #endif //P_FAMILY_CALYREX @@ -2106,26 +2106,26 @@ static const u16 sEnamorusFormSpeciesIdTable[] = { #if P_FAMILY_LECHONK static const u16 sOinkologneFormSpeciesIdTable[] = { - SPECIES_OINKOLOGNE_MALE, - SPECIES_OINKOLOGNE_FEMALE, + SPECIES_OINKOLOGNE_M, + SPECIES_OINKOLOGNE_F, FORM_SPECIES_END, }; #endif //P_FAMILY_LECHONK #if P_FAMILY_TANDEMAUS static const u16 sMausholdFormSpeciesIdTable[] = { - SPECIES_MAUSHOLD_FAMILY_OF_THREE, - SPECIES_MAUSHOLD_FAMILY_OF_FOUR, + SPECIES_MAUSHOLD_THREE, + SPECIES_MAUSHOLD_FOUR, FORM_SPECIES_END, }; #endif //P_FAMILY_TANDEMAUS #if P_FAMILY_SQUAWKABILLY static const u16 sSquawkabillyFormSpeciesIdTable[] = { - SPECIES_SQUAWKABILLY_GREEN_PLUMAGE, - SPECIES_SQUAWKABILLY_BLUE_PLUMAGE, - SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE, - SPECIES_SQUAWKABILLY_WHITE_PLUMAGE, + SPECIES_SQUAWKABILLY_GREEN, + SPECIES_SQUAWKABILLY_BLUE, + SPECIES_SQUAWKABILLY_YELLOW, + SPECIES_SQUAWKABILLY_WHITE, FORM_SPECIES_END, }; #endif //P_FAMILY_SQUAWKABILLY @@ -2157,15 +2157,15 @@ static const u16 sGimmighoulFormSpeciesIdTable[] = { #if P_FAMILY_OGERPON static const u16 sOgerponFormSpeciesIdTable[] = { - SPECIES_OGERPON_TEAL_MASK, - SPECIES_OGERPON_WELLSPRING_MASK, - SPECIES_OGERPON_HEARTHFLAME_MASK, - SPECIES_OGERPON_CORNERSTONE_MASK, + SPECIES_OGERPON_TEAL, + SPECIES_OGERPON_WELLSPRING, + SPECIES_OGERPON_HEARTHFLAME, + SPECIES_OGERPON_CORNERSTONE, #if P_TERA_FORMS - SPECIES_OGERPON_TEAL_MASK_TERA, - SPECIES_OGERPON_WELLSPRING_MASK_TERA, - SPECIES_OGERPON_HEARTHFLAME_MASK_TERA, - SPECIES_OGERPON_CORNERSTONE_MASK_TERA, + SPECIES_OGERPON_TEAL_TERA, + SPECIES_OGERPON_WELLSPRING_TERA, + SPECIES_OGERPON_HEARTHFLAME_TERA, + SPECIES_OGERPON_CORNERSTONE_TERA, #endif FORM_SPECIES_END, }; diff --git a/src/data/pokemon/pokedex_orders.h b/src/data/pokemon/pokedex_orders.h index 21968dd6ea..9cbca9ba63 100644 --- a/src/data/pokemon/pokedex_orders.h +++ b/src/data/pokemon/pokedex_orders.h @@ -1366,16 +1366,16 @@ const u16 gPokedexOrder_Weight[] = //NATIONAL_DEX_PIKACHU_ROCK_STAR, //NATIONAL_DEX_PIKACHU_BELLE, //NATIONAL_DEX_PIKACHU_POP_STAR, - //NATIONAL_DEX_PIKACHU_PH_D, + //NATIONAL_DEX_PIKACHU_PHD, //NATIONAL_DEX_PIKACHU_LIBRE, - //NATIONAL_DEX_PIKACHU_ORIGINAL_CAP, - //NATIONAL_DEX_PIKACHU_HOENN_CAP, - //NATIONAL_DEX_PIKACHU_SINNOH_CAP, - //NATIONAL_DEX_PIKACHU_UNOVA_CAP, - //NATIONAL_DEX_PIKACHU_KALOS_CAP, - //NATIONAL_DEX_PIKACHU_ALOLA_CAP, + //NATIONAL_DEX_PIKACHU_ORIGINAL, + //NATIONAL_DEX_PIKACHU_HOENN, + //NATIONAL_DEX_PIKACHU_SINNOH, + //NATIONAL_DEX_PIKACHU_UNOVA, + //NATIONAL_DEX_PIKACHU_KALOS, + //NATIONAL_DEX_PIKACHU_ALOLA, //NATIONAL_DEX_PIKACHU_PARTNER_CAP, - //NATIONAL_DEX_PIKACHU_WORLD_CAP, + //NATIONAL_DEX_PIKACHU_WORLD, NATIONAL_DEX_MAGNEMITE, NATIONAL_DEX_SENTRET, NATIONAL_DEX_SMOOCHUM, diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index 6f5dfeb054..3d3ac89168 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -263,7 +263,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_MEGA_EVOLUTIONS #if P_GIGANTAMAX_FORMS - [SPECIES_VENUSAUR_GIGANTAMAX] = + [SPECIES_VENUSAUR_GMAX] = { .baseHP = 80, .baseAttack = 82, @@ -632,7 +632,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_MEGA_EVOLUTIONS #if P_GIGANTAMAX_FORMS - [SPECIES_CHARIZARD_GIGANTAMAX] = + [SPECIES_CHARIZARD_GMAX] = { .baseHP = 78, .baseAttack = 84, @@ -946,7 +946,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_MEGA_EVOLUTIONS #if P_GIGANTAMAX_FORMS - [SPECIES_BLASTOISE_GIGANTAMAX] = + [SPECIES_BLASTOISE_GMAX] = { .baseHP = 79, .baseAttack = 83, @@ -1212,7 +1212,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_BUTTERFREE_GIGANTAMAX] = + [SPECIES_BUTTERFREE_GMAX] = { .baseHP = 60, .baseAttack = 45, @@ -1948,7 +1948,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_RATTATA_ALOLAN] = + [SPECIES_RATTATA_ALOLA] = { .baseHP = 30, .baseAttack = 56, @@ -2011,11 +2011,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sRattataAlolanTeachableLearnset, .eggMoveLearnset = sRattataAlolanEggMoveLearnset, .formSpeciesIdTable = sRattataFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL_NIGHT, 20, SPECIES_RATICATE_ALOLAN}, - {EVO_NONE, 0, SPECIES_RATICATE_ALOLAN_TOTEM}), + .evolutions = EVOLUTION({EVO_LEVEL_NIGHT, 20, SPECIES_RATICATE_ALOLA}, + {EVO_NONE, 0, SPECIES_RATICATE_ALOLA_TOTEM}), }, - [SPECIES_RATICATE_ALOLAN] = + [SPECIES_RATICATE_ALOLA] = { .baseHP = 75, .baseAttack = 71, @@ -2075,7 +2075,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sRaticateFormSpeciesIdTable, }, - [SPECIES_RATICATE_ALOLAN_TOTEM] = + [SPECIES_RATICATE_ALOLA_TOTEM] = { .baseHP = 75, .baseAttack = 71, @@ -2602,7 +2602,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sPikachuFormSpeciesIdTable, .formChangeTable = sPikachuFormChangeTable, .evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, - {EVO_NONE, 0, SPECIES_RAICHU_ALOLAN}), + {EVO_NONE, 0, SPECIES_RAICHU_ALOLA}), }, #if P_COSPLAY_PIKACHU_FORMS @@ -2812,7 +2812,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sPikachuFormSpeciesIdTable, }, - [SPECIES_PIKACHU_PH_D] = + [SPECIES_PIKACHU_PHD] = { .baseHP = 35, .baseAttack = 55, @@ -2917,7 +2917,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_COSPLAY_PIKACHU_FORMS #if P_CAP_PIKACHU_FORMS - [SPECIES_PIKACHU_ORIGINAL_CAP] = + [SPECIES_PIKACHU_ORIGINAL] = { .baseHP = 35, .baseAttack = 55, @@ -2973,7 +2973,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sPikachuFormSpeciesIdTable, }, - [SPECIES_PIKACHU_HOENN_CAP] = + [SPECIES_PIKACHU_HOENN] = { .baseHP = 35, .baseAttack = 55, @@ -3028,7 +3028,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sPikachuFormSpeciesIdTable, }, - [SPECIES_PIKACHU_SINNOH_CAP] = + [SPECIES_PIKACHU_SINNOH] = { .baseHP = 35, .baseAttack = 55, @@ -3083,7 +3083,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sPikachuFormSpeciesIdTable, }, - [SPECIES_PIKACHU_UNOVA_CAP] = + [SPECIES_PIKACHU_UNOVA] = { .baseHP = 35, .baseAttack = 55, @@ -3138,7 +3138,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sPikachuFormSpeciesIdTable, }, - [SPECIES_PIKACHU_KALOS_CAP] = + [SPECIES_PIKACHU_KALOS] = { .baseHP = 35, .baseAttack = 55, @@ -3193,7 +3193,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sPikachuFormSpeciesIdTable, }, - [SPECIES_PIKACHU_ALOLA_CAP] = + [SPECIES_PIKACHU_ALOLA] = { .baseHP = 35, .baseAttack = 55, @@ -3304,7 +3304,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sPikachuFormSpeciesIdTable, }, - [SPECIES_PIKACHU_WORLD_CAP] = + [SPECIES_PIKACHU_WORLD] = { .baseHP = 35, .baseAttack = 55, @@ -3362,7 +3362,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_CAP_PIKACHU_FORMS #if P_GIGANTAMAX_FORMS - [SPECIES_PIKACHU_GIGANTAMAX] = + [SPECIES_PIKACHU_GMAX] = { .baseHP = 35, .baseAttack = 55, @@ -3420,7 +3420,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #endif //P_GIGANTAMAX_FORMS - [SPECIES_PIKACHU_PARTNER] = + [SPECIES_PIKACHU_STARTER] = { .baseHP = 45, .baseAttack = 80, @@ -3567,7 +3567,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_RAICHU_ALOLAN] = + [SPECIES_RAICHU_ALOLA] = { .baseHP = 60, .baseAttack = 85, @@ -3763,7 +3763,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_SANDSHREW_ALOLAN] = + [SPECIES_SANDSHREW_ALOLA] = { .baseHP = 50, .baseAttack = 75, @@ -3826,10 +3826,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sSandshrewAlolanTeachableLearnset, .eggMoveLearnset = sSandshrewAlolanEggMoveLearnset, .formSpeciesIdTable = sSandshrewFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_ALOLAN}), + .evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_ALOLA}), }, - [SPECIES_SANDSLASH_ALOLAN] = + [SPECIES_SANDSLASH_ALOLA] = { .baseHP = 75, .baseAttack = 100, @@ -4664,7 +4664,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_VULPIX_ALOLAN] = + [SPECIES_VULPIX_ALOLA] = { .baseHP = 38, .baseAttack = 41, @@ -4727,10 +4727,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sVulpixAlolanTeachableLearnset, .eggMoveLearnset = sVulpixAlolanEggMoveLearnset, .formSpeciesIdTable = sVulpixFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_NINETALES_ALOLAN}), + .evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_NINETALES_ALOLA}), }, - [SPECIES_NINETALES_ALOLAN] = + [SPECIES_NINETALES_ALOLA] = { .baseHP = 73, .baseAttack = 67, @@ -5927,7 +5927,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_DIGLETT_ALOLAN] = + [SPECIES_DIGLETT_ALOLA] = { .baseHP = 10, .baseAttack = 55, @@ -5990,10 +5990,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sDiglettAlolanTeachableLearnset, .eggMoveLearnset = sDiglettAlolanEggMoveLearnset, .formSpeciesIdTable = sDiglettFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_DUGTRIO_ALOLAN}), + .evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_DUGTRIO_ALOLA}), }, - [SPECIES_DUGTRIO_ALOLAN] = + [SPECIES_DUGTRIO_ALOLA] = { .baseHP = 35, .baseAttack = DUGTRIO_ATTACK, @@ -6201,7 +6201,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_MEOWTH_ALOLAN] = + [SPECIES_MEOWTH_ALOLA] = { .baseHP = 40, .baseAttack = 35, @@ -6264,10 +6264,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sMeowthAlolanTeachableLearnset, .eggMoveLearnset = sMeowthAlolanEggMoveLearnset, .formSpeciesIdTable = sMeowthFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_PERSIAN_ALOLAN}), + .evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_PERSIAN_ALOLA}), }, - [SPECIES_PERSIAN_ALOLAN] = + [SPECIES_PERSIAN_ALOLA] = { .baseHP = 65, .baseAttack = 60, @@ -6333,7 +6333,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_ALOLAN_FORMS #if P_GALARIAN_FORMS - [SPECIES_MEOWTH_GALARIAN] = + [SPECIES_MEOWTH_GALAR] = { .baseHP = 50, .baseAttack = 65, @@ -6460,7 +6460,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_GALARIAN_FORMS #if P_GIGANTAMAX_FORMS - [SPECIES_MEOWTH_GIGANTAMAX] = + [SPECIES_MEOWTH_GMAX] = { .baseHP = 40, .baseAttack = 45, @@ -6975,7 +6975,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_HISUIAN_FORMS - [SPECIES_GROWLITHE_HISUIAN] = + [SPECIES_GROWLITHE_HISUI] = { .baseHP = 60, .baseAttack = 75, @@ -7036,10 +7036,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .levelUpLearnset = sGrowlitheHisuianLevelUpLearnset, .teachableLearnset = sGrowlitheHisuianTeachableLearnset, .formSpeciesIdTable = sGrowlitheFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE_HISUIAN}), + .evolutions = EVOLUTION({EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE_HISUI}), }, - [SPECIES_ARCANINE_HISUIAN] = + [SPECIES_ARCANINE_HISUI] = { .baseHP = 95, .baseAttack = 115, @@ -7883,7 +7883,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_MACHAMP_GIGANTAMAX] = + [SPECIES_MACHAMP_GMAX] = { .baseHP = 90, .baseAttack = 130, @@ -8488,7 +8488,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_GEODUDE_ALOLAN] = + [SPECIES_GEODUDE_ALOLA] = { .baseHP = 40, .baseAttack = 80, @@ -8552,10 +8552,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sGeodudeAlolanTeachableLearnset, .eggMoveLearnset = sGeodudeAlolanEggMoveLearnset, .formSpeciesIdTable = sGeodudeFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_GRAVELER_ALOLAN}), + .evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_GRAVELER_ALOLA}), }, - [SPECIES_GRAVELER_ALOLAN] = + [SPECIES_GRAVELER_ALOLA] = { .baseHP = 55, .baseAttack = 95, @@ -8617,11 +8617,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .levelUpLearnset = sGravelerAlolanLevelUpLearnset, .teachableLearnset = sGravelerAlolanTeachableLearnset, .formSpeciesIdTable = sGravelerFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_GOLEM_ALOLAN}, - {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOLEM_ALOLAN}), + .evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_GOLEM_ALOLA}, + {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOLEM_ALOLA}), }, - [SPECIES_GOLEM_ALOLAN] = + [SPECIES_GOLEM_ALOLA] = { .baseHP = 80, .baseAttack = GOLEM_ATTACK, @@ -8816,7 +8816,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GALARIAN_FORMS - [SPECIES_PONYTA_GALARIAN] = + [SPECIES_PONYTA_GALAR] = { .baseHP = 50, .baseAttack = 85, @@ -8878,10 +8878,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sPonytaGalarianTeachableLearnset, .eggMoveLearnset = sPonytaGalarianEggMoveLearnset, .formSpeciesIdTable = sPonytaFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_RAPIDASH_GALARIAN}), + .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_RAPIDASH_GALAR}), }, - [SPECIES_RAPIDASH_GALARIAN] = + [SPECIES_RAPIDASH_GALAR] = { .baseHP = 65, .baseAttack = 100, @@ -9203,7 +9203,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_MEGA_EVOLUTIONS #if P_GALARIAN_FORMS - [SPECIES_SLOWPOKE_GALARIAN] = + [SPECIES_SLOWPOKE_GALAR] = { .baseHP = 90, .baseAttack = 65, @@ -9265,11 +9265,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sSlowpokeGalarianTeachableLearnset, .eggMoveLearnset = sSlowpokeGalarianEggMoveLearnset, .formSpeciesIdTable = sSlowpokeFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_ITEM, ITEM_GALARICA_CUFF, SPECIES_SLOWBRO_GALARIAN}, - {EVO_ITEM, ITEM_GALARICA_WREATH, SPECIES_SLOWKING_GALARIAN}), + .evolutions = EVOLUTION({EVO_ITEM, ITEM_GALARICA_CUFF, SPECIES_SLOWBRO_GALAR}, + {EVO_ITEM, ITEM_GALARICA_WREATH, SPECIES_SLOWKING_GALAR}), }, - [SPECIES_SLOWBRO_GALARIAN] = + [SPECIES_SLOWBRO_GALAR] = { .baseHP = 95, .baseAttack = 100, @@ -9335,7 +9335,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GEN_2_CROSS_EVOS - [SPECIES_SLOWKING_GALARIAN] = + [SPECIES_SLOWKING_GALAR] = { .baseHP = 95, .baseAttack = 65, @@ -9680,7 +9680,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GALARIAN_FORMS - [SPECIES_FARFETCHD_GALARIAN] = + [SPECIES_FARFETCHD_GALAR] = { .baseHP = 52, .baseAttack = FARFETCHD_ATTACK + 5, @@ -10218,7 +10218,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_GRIMER_ALOLAN] = + [SPECIES_GRIMER_ALOLA] = { .baseHP = 80, .baseAttack = 80, @@ -10281,10 +10281,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sGrimerAlolanTeachableLearnset, .eggMoveLearnset = sGrimerAlolanEggMoveLearnset, .formSpeciesIdTable = sGrimerFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_MUK_ALOLAN}), + .evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_MUK_ALOLA}), }, - [SPECIES_MUK_ALOLAN] = + [SPECIES_MUK_ALOLA] = { .baseHP = 105, .baseAttack = 105, @@ -10755,7 +10755,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif //P_MEGA_EVOLUTIONS #if P_GIGANTAMAX_FORMS - [SPECIES_GENGAR_GIGANTAMAX] = + [SPECIES_GENGAR_GMAX] = { .baseHP = 60, .baseAttack = 65, @@ -11279,7 +11279,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_KINGLER_GIGANTAMAX] = + [SPECIES_KINGLER_GMAX] = { .baseHP = 55, .baseAttack = 130, @@ -11473,7 +11473,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_HISUIAN_FORMS - [SPECIES_VOLTORB_HISUIAN] = + [SPECIES_VOLTORB_HISUI] = { .baseHP = 40, .baseAttack = 30, @@ -11534,10 +11534,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .levelUpLearnset = sVoltorbHisuianLevelUpLearnset, .teachableLearnset = sVoltorbHisuianTeachableLearnset, .formSpeciesIdTable = sVoltorbFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_ELECTRODE_HISUIAN}), + .evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_ELECTRODE_HISUI}), }, - [SPECIES_ELECTRODE_HISUIAN] = + [SPECIES_ELECTRODE_HISUI] = { .baseHP = 60, .baseAttack = 50, @@ -11665,7 +11665,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sExeggcuteTeachableLearnset, .eggMoveLearnset = sExeggcuteEggMoveLearnset, .evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR}, - {EVO_NONE, 0, SPECIES_EXEGGUTOR_ALOLAN}), + {EVO_NONE, 0, SPECIES_EXEGGUTOR_ALOLA}), }, #if P_UPDATED_EXP_YIELDS >= GEN_7 @@ -11741,7 +11741,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_EXEGGUTOR_ALOLAN] = + [SPECIES_EXEGGUTOR_ALOLA] = { .baseHP = 95, .baseAttack = 105, @@ -11870,8 +11870,8 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sCuboneTeachableLearnset, .eggMoveLearnset = sCuboneEggMoveLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_MAROWAK}, - {EVO_NONE, 0, SPECIES_MAROWAK_ALOLAN}, - {EVO_NONE, 0, SPECIES_MAROWAK_ALOLAN_TOTEM}), + {EVO_NONE, 0, SPECIES_MAROWAK_ALOLA}, + {EVO_NONE, 0, SPECIES_MAROWAK_ALOLA_TOTEM}), }, [SPECIES_MAROWAK] = @@ -11938,7 +11938,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_ALOLAN_FORMS - [SPECIES_MAROWAK_ALOLAN] = + [SPECIES_MAROWAK_ALOLA] = { .baseHP = 60, .baseAttack = 80, @@ -11998,7 +11998,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sMarowakFormSpeciesIdTable, }, - [SPECIES_MAROWAK_ALOLAN_TOTEM] = + [SPECIES_MAROWAK_ALOLA_TOTEM] = { .baseHP = 60, .baseAttack = 80, @@ -12530,7 +12530,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sKoffingTeachableLearnset, .eggMoveLearnset = sKoffingEggMoveLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_WEEZING}, - {EVO_NONE, 0, SPECIES_WEEZING_GALARIAN}), + {EVO_NONE, 0, SPECIES_WEEZING_GALAR}), }, [SPECIES_WEEZING] = @@ -12603,7 +12603,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GALARIAN_FORMS - [SPECIES_WEEZING_GALARIAN] = + [SPECIES_WEEZING_GALAR] = { .baseHP = 65, .baseAttack = 90, @@ -13888,7 +13888,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .teachableLearnset = sMimeJrTeachableLearnset, .eggMoveLearnset = sMimeJrEggMoveLearnset, .evolutions = EVOLUTION({EVO_MOVE, MOVE_MIMIC, SPECIES_MR_MIME}, - {EVO_NONE, 0, SPECIES_MR_MIME_GALARIAN}), + {EVO_NONE, 0, SPECIES_MR_MIME_GALAR}), }, #endif //P_GEN_4_CROSS_EVOS @@ -13960,7 +13960,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GALARIAN_FORMS - [SPECIES_MR_MIME_GALARIAN] = + [SPECIES_MR_MIME_GALAR] = { .baseHP = 50, .baseAttack = 65, @@ -15099,7 +15099,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_PALDEAN_FORMS - [SPECIES_TAUROS_PALDEAN_COMBAT_BREED] = + [SPECIES_TAUROS_PALDEA_COMBAT] = { .baseHP = 75, .baseAttack = 110, @@ -15163,7 +15163,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sTaurosFormSpeciesIdTable, }, - [SPECIES_TAUROS_PALDEAN_BLAZE_BREED] = + [SPECIES_TAUROS_PALDEA_BLAZE] = { .baseHP = 75, .baseAttack = 110, @@ -15227,7 +15227,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .formSpeciesIdTable = sTaurosFormSpeciesIdTable, }, - [SPECIES_TAUROS_PALDEAN_AQUA_BREED] = + [SPECIES_TAUROS_PALDEA_AQUA] = { .baseHP = 75, .baseAttack = 110, @@ -15556,7 +15556,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_LAPRAS_GIGANTAMAX] = + [SPECIES_LAPRAS_GMAX] = { .baseHP = 130, .baseAttack = 85, @@ -15763,7 +15763,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_EEVEE_GIGANTAMAX] = + [SPECIES_EEVEE_GMAX] = { .baseHP = 55, .baseAttack = 55, @@ -15821,7 +15821,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #endif //P_GIGANTAMAX_FORMS - [SPECIES_EEVEE_PARTNER] = + [SPECIES_EEVEE_STARTER] = { .baseHP = 65, .baseAttack = 75, @@ -17126,7 +17126,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_SNORLAX_GIGANTAMAX] = + [SPECIES_SNORLAX_GMAX] = { .baseHP = 160, .baseAttack = 110, @@ -17259,7 +17259,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GALARIAN_FORMS - [SPECIES_ARTICUNO_GALARIAN] = + [SPECIES_ARTICUNO_GALAR] = { .baseHP = 90, .baseAttack = 85, @@ -17404,7 +17404,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GALARIAN_FORMS - [SPECIES_ZAPDOS_GALARIAN] = + [SPECIES_ZAPDOS_GALAR] = { .baseHP = 90, .baseAttack = 125, @@ -17543,7 +17543,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = }, #if P_GALARIAN_FORMS - [SPECIES_MOLTRES_GALARIAN] = + [SPECIES_MOLTRES_GALAR] = { .baseHP = 90, .baseAttack = 85, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index f59e8a5417..d9c83c3255 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -328,7 +328,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .levelUpLearnset = sQuilavaLevelUpLearnset, .teachableLearnset = sQuilavaTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_TYPHLOSION}, - {EVO_NONE, 0, SPECIES_TYPHLOSION_HISUIAN}), + {EVO_NONE, 0, SPECIES_TYPHLOSION_HISUI}), }, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -403,7 +403,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = }, #if P_HISUIAN_FORMS - [SPECIES_TYPHLOSION_HISUIAN] = + [SPECIES_TYPHLOSION_HISUI] = { .baseHP = 73, .baseAttack = 84, @@ -3002,7 +3002,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = }, #if P_PALDEAN_FORMS - [SPECIES_WOOPER_PALDEAN] = + [SPECIES_WOOPER_PALDEA] = { .baseHP = 55, .baseAttack = 45, @@ -3462,34 +3462,34 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .formSpeciesIdTable = sUnownFormSpeciesIdTable, \ } - [SPECIES_UNOWN] = UNOWN_MISC_INFO(A, FALSE, 24, 40, 24, 48, 8 ), - [SPECIES_UNOWN_B] = UNOWN_MISC_INFO(B, TRUE, 24, 32, 40, 48, 9 ), - [SPECIES_UNOWN_C] = UNOWN_MISC_INFO(C, TRUE, 32, 32, 48, 56, 6 ), - [SPECIES_UNOWN_D] = UNOWN_MISC_INFO(D, TRUE, 32, 32, 40, 48, 8 ), - [SPECIES_UNOWN_E] = UNOWN_MISC_INFO(E, TRUE, 32, 32, 40, 48, 10 ), - [SPECIES_UNOWN_F] = UNOWN_MISC_INFO(F, TRUE, 32, 32, 48, 48, 10 ), - [SPECIES_UNOWN_G] = UNOWN_MISC_INFO(G, TRUE, 24, 40, 40, 56, 5 ), - [SPECIES_UNOWN_H] = UNOWN_MISC_INFO(H, TRUE, 32, 32, 48, 48, 8 ), - [SPECIES_UNOWN_I] = UNOWN_MISC_INFO(I, FALSE, 24, 32, 24, 56, 7 ), - [SPECIES_UNOWN_J] = UNOWN_MISC_INFO(J, TRUE, 24, 32, 32, 48, 9 ), - [SPECIES_UNOWN_K] = UNOWN_MISC_INFO(K, TRUE, 32, 32, 40, 56, 7 ), - [SPECIES_UNOWN_L] = UNOWN_MISC_INFO(L, TRUE, 24, 32, 32, 48, 10 ), - [SPECIES_UNOWN_M] = UNOWN_MISC_INFO(M, FALSE, 32, 32, 48, 40, 13 ), - [SPECIES_UNOWN_N] = UNOWN_MISC_INFO(N, TRUE, 32, 24, 48, 40, 13 ), - [SPECIES_UNOWN_O] = UNOWN_MISC_INFO(O, FALSE, 32, 32, 48, 48, 8 ), - [SPECIES_UNOWN_P] = UNOWN_MISC_INFO(P, TRUE, 24, 32, 32, 48, 10 ), - [SPECIES_UNOWN_Q] = UNOWN_MISC_INFO(Q, TRUE, 32, 24, 40, 40, 15 ), - [SPECIES_UNOWN_R] = UNOWN_MISC_INFO(R, TRUE, 24, 32, 32, 40, 12 ), - [SPECIES_UNOWN_S] = UNOWN_MISC_INFO(S, TRUE, 32, 40, 40, 56, 4 ), - [SPECIES_UNOWN_T] = UNOWN_MISC_INFO(T, FALSE, 24, 32, 32, 40, 13 ), - [SPECIES_UNOWN_U] = UNOWN_MISC_INFO(U, FALSE, 32, 32, 48, 40, 13 ), - [SPECIES_UNOWN_V] = UNOWN_MISC_INFO(V, TRUE, 32, 32, 40, 48, 11 ), - [SPECIES_UNOWN_W] = UNOWN_MISC_INFO(W, FALSE, 32, 32, 40, 40, 13 ), - [SPECIES_UNOWN_X] = UNOWN_MISC_INFO(X, FALSE, 24, 24, 40, 40, 15 ), - [SPECIES_UNOWN_Y] = UNOWN_MISC_INFO(Y, FALSE, 24, 32, 32, 48, 10 ), - [SPECIES_UNOWN_Z] = UNOWN_MISC_INFO(Z, TRUE, 24, 32, 32, 48, 10 ), - [SPECIES_UNOWN_EMARK] = UNOWN_MISC_INFO(ExclamationMark, FALSE, 24, 40, 24, 56, 6 ), - [SPECIES_UNOWN_QMARK] = UNOWN_MISC_INFO(QuestionMark, TRUE, 24, 40, 32, 56, 6 ), + [SPECIES_UNOWN] = UNOWN_MISC_INFO(A, FALSE, 24, 40, 24, 48, 8 ), + [SPECIES_UNOWN_B] = UNOWN_MISC_INFO(B, TRUE, 24, 32, 40, 48, 9 ), + [SPECIES_UNOWN_C] = UNOWN_MISC_INFO(C, TRUE, 32, 32, 48, 56, 6 ), + [SPECIES_UNOWN_D] = UNOWN_MISC_INFO(D, TRUE, 32, 32, 40, 48, 8 ), + [SPECIES_UNOWN_E] = UNOWN_MISC_INFO(E, TRUE, 32, 32, 40, 48, 10 ), + [SPECIES_UNOWN_F] = UNOWN_MISC_INFO(F, TRUE, 32, 32, 48, 48, 10 ), + [SPECIES_UNOWN_G] = UNOWN_MISC_INFO(G, TRUE, 24, 40, 40, 56, 5 ), + [SPECIES_UNOWN_H] = UNOWN_MISC_INFO(H, TRUE, 32, 32, 48, 48, 8 ), + [SPECIES_UNOWN_I] = UNOWN_MISC_INFO(I, FALSE, 24, 32, 24, 56, 7 ), + [SPECIES_UNOWN_J] = UNOWN_MISC_INFO(J, TRUE, 24, 32, 32, 48, 9 ), + [SPECIES_UNOWN_K] = UNOWN_MISC_INFO(K, TRUE, 32, 32, 40, 56, 7 ), + [SPECIES_UNOWN_L] = UNOWN_MISC_INFO(L, TRUE, 24, 32, 32, 48, 10 ), + [SPECIES_UNOWN_M] = UNOWN_MISC_INFO(M, FALSE, 32, 32, 48, 40, 13 ), + [SPECIES_UNOWN_N] = UNOWN_MISC_INFO(N, TRUE, 32, 24, 48, 40, 13 ), + [SPECIES_UNOWN_O] = UNOWN_MISC_INFO(O, FALSE, 32, 32, 48, 48, 8 ), + [SPECIES_UNOWN_P] = UNOWN_MISC_INFO(P, TRUE, 24, 32, 32, 48, 10 ), + [SPECIES_UNOWN_Q] = UNOWN_MISC_INFO(Q, TRUE, 32, 24, 40, 40, 15 ), + [SPECIES_UNOWN_R] = UNOWN_MISC_INFO(R, TRUE, 24, 32, 32, 40, 12 ), + [SPECIES_UNOWN_S] = UNOWN_MISC_INFO(S, TRUE, 32, 40, 40, 56, 4 ), + [SPECIES_UNOWN_T] = UNOWN_MISC_INFO(T, FALSE, 24, 32, 32, 40, 13 ), + [SPECIES_UNOWN_U] = UNOWN_MISC_INFO(U, FALSE, 32, 32, 48, 40, 13 ), + [SPECIES_UNOWN_V] = UNOWN_MISC_INFO(V, TRUE, 32, 32, 40, 48, 11 ), + [SPECIES_UNOWN_W] = UNOWN_MISC_INFO(W, FALSE, 32, 32, 40, 40, 13 ), + [SPECIES_UNOWN_X] = UNOWN_MISC_INFO(X, FALSE, 24, 24, 40, 40, 15 ), + [SPECIES_UNOWN_Y] = UNOWN_MISC_INFO(Y, FALSE, 24, 32, 32, 48, 10 ), + [SPECIES_UNOWN_Z] = UNOWN_MISC_INFO(Z, TRUE, 24, 32, 32, 48, 10 ), + [SPECIES_UNOWN_EXCLAMATION] = UNOWN_MISC_INFO(ExclamationMark, FALSE, 24, 40, 24, 56, 6 ), + [SPECIES_UNOWN_QUESTION] = UNOWN_MISC_INFO(QuestionMark, TRUE, 24, 40, 32, 56, 6 ), #endif //P_FAMILY_UNOWN #if P_FAMILY_WOBBUFFET @@ -4436,7 +4436,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = }, #if P_HISUIAN_FORMS - [SPECIES_QWILFISH_HISUIAN] = + [SPECIES_QWILFISH_HISUI] = { .baseHP = 65, .baseAttack = 95, @@ -4907,7 +4907,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = #endif //P_GEN_4_CROSS_EVOS #if P_HISUIAN_FORMS - [SPECIES_SNEASEL_HISUIAN] = + [SPECIES_SNEASEL_HISUI] = { .baseHP = 55, .baseAttack = 95, @@ -5721,7 +5721,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = }, #if P_GALARIAN_FORMS - [SPECIES_CORSOLA_GALARIAN] = + [SPECIES_CORSOLA_GALAR] = { .baseHP = CORSOLA_HP - 5, .baseAttack = 55, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index e9d566096a..08fcce3dc3 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -1064,7 +1064,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = }, #if P_GALARIAN_FORMS - [SPECIES_ZIGZAGOON_GALARIAN] = + [SPECIES_ZIGZAGOON_GALAR] = { .baseHP = 38, .baseAttack = 30, @@ -1126,10 +1126,10 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .teachableLearnset = sZigzagoonGalarianTeachableLearnset, .eggMoveLearnset = sZigzagoonGalarianEggMoveLearnset, .formSpeciesIdTable = sZigzagoonFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_LINOONE_GALARIAN}), + .evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_LINOONE_GALAR}), }, - [SPECIES_LINOONE_GALARIAN] = + [SPECIES_LINOONE_GALAR] = { .baseHP = 78, .baseAttack = 70, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index da7eaee7e9..28584f70ea 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -1542,7 +1542,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = #endif //P_FAMILY_SHIELDON #if P_FAMILY_BURMY - [SPECIES_BURMY_PLANT_CLOAK] = + [SPECIES_BURMY_PLANT] = { .baseHP = 40, .baseAttack = 29, @@ -1605,11 +1605,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .teachableLearnset = sBurmyTeachableLearnset, .formSpeciesIdTable = sBurmyFormSpeciesIdTable, .formChangeTable = sBurmyFormChangeTable, - .evolutions = EVOLUTION({EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_PLANT_CLOAK}, - {EVO_LEVEL_MALE, 20, SPECIES_MOTHIM_PLANT_CLOAK}), + .evolutions = EVOLUTION({EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_PLANT}, + {EVO_LEVEL_MALE, 20, SPECIES_MOTHIM_PLANT}), }, - [SPECIES_BURMY_SANDY_CLOAK] = + [SPECIES_BURMY_SANDY] = { .baseHP = 40, .baseAttack = 29, @@ -1672,11 +1672,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .teachableLearnset = sBurmyTeachableLearnset, .formSpeciesIdTable = sBurmyFormSpeciesIdTable, .formChangeTable = sBurmyFormChangeTable, - .evolutions = EVOLUTION({EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_SANDY_CLOAK}, - {EVO_LEVEL_MALE, 20, SPECIES_MOTHIM_SANDY_CLOAK}), + .evolutions = EVOLUTION({EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_SANDY}, + {EVO_LEVEL_MALE, 20, SPECIES_MOTHIM_SANDY}), }, - [SPECIES_BURMY_TRASH_CLOAK] = + [SPECIES_BURMY_TRASH] = { .baseHP = 40, .baseAttack = 29, @@ -1739,11 +1739,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .teachableLearnset = sBurmyTeachableLearnset, .formSpeciesIdTable = sBurmyFormSpeciesIdTable, .formChangeTable = sBurmyFormChangeTable, - .evolutions = EVOLUTION({EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_TRASH_CLOAK}, - {EVO_LEVEL_MALE, 20, SPECIES_MOTHIM_TRASH_CLOAK}), + .evolutions = EVOLUTION({EVO_LEVEL_FEMALE, 20, SPECIES_WORMADAM_TRASH}, + {EVO_LEVEL_MALE, 20, SPECIES_MOTHIM_TRASH}), }, - [SPECIES_WORMADAM_PLANT_CLOAK] = + [SPECIES_WORMADAM_PLANT] = { .baseHP = 60, .baseAttack = 59, @@ -1807,7 +1807,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .formSpeciesIdTable = sWormadamFormSpeciesIdTable, }, - [SPECIES_WORMADAM_SANDY_CLOAK] = + [SPECIES_WORMADAM_SANDY] = { .baseHP = 60, .baseAttack = 79, @@ -1871,7 +1871,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .formSpeciesIdTable = sWormadamFormSpeciesIdTable, }, - [SPECIES_WORMADAM_TRASH_CLOAK] = + [SPECIES_WORMADAM_TRASH] = { .baseHP = 60, .baseAttack = 69, @@ -1997,9 +1997,9 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .formSpeciesIdTable = sMothimFormSpeciesIdTable, \ } - [SPECIES_MOTHIM_PLANT_CLOAK] = MOTHIM_SPECIES_INFO, - [SPECIES_MOTHIM_SANDY_CLOAK] = MOTHIM_SPECIES_INFO, - [SPECIES_MOTHIM_TRASH_CLOAK] = MOTHIM_SPECIES_INFO, + [SPECIES_MOTHIM_PLANT] = MOTHIM_SPECIES_INFO, + [SPECIES_MOTHIM_SANDY] = MOTHIM_SPECIES_INFO, + [SPECIES_MOTHIM_TRASH] = MOTHIM_SPECIES_INFO, #endif //P_FAMILY_BURMY #if P_FAMILY_COMBEE @@ -2518,7 +2518,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = #endif //P_FAMILY_CHERUBI #if P_FAMILY_SHELLOS - [SPECIES_SHELLOS_WEST_SEA] = + [SPECIES_SHELLOS_WEST] = { .baseHP = 76, .baseAttack = 48, @@ -2579,10 +2579,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .teachableLearnset = sShellosTeachableLearnset, .eggMoveLearnset = sShellosEggMoveLearnset, .formSpeciesIdTable = sShellosFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_GASTRODON_WEST_SEA}), + .evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_GASTRODON_WEST}), }, - [SPECIES_SHELLOS_EAST_SEA] = + [SPECIES_SHELLOS_EAST] = { .baseHP = 76, .baseAttack = 48, @@ -2643,10 +2643,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .teachableLearnset = sShellosTeachableLearnset, .eggMoveLearnset = sShellosEggMoveLearnset, .formSpeciesIdTable = sShellosFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_GASTRODON_EAST_SEA}), + .evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_GASTRODON_EAST}), }, - [SPECIES_GASTRODON_WEST_SEA] = + [SPECIES_GASTRODON_WEST] = { .baseHP = 111, .baseAttack = 83, @@ -2708,7 +2708,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .formSpeciesIdTable = sGastrodonFormSpeciesIdTable, }, - [SPECIES_GASTRODON_EAST_SEA] = + [SPECIES_GASTRODON_EAST] = { .baseHP = 111, .baseAttack = 83, diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index dca0676af6..9feade7f4e 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -570,7 +570,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .levelUpLearnset = sDewottLevelUpLearnset, .teachableLearnset = sDewottTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SAMUROTT}, - {EVO_NONE, 0, SPECIES_SAMUROTT_HISUIAN}), + {EVO_NONE, 0, SPECIES_SAMUROTT_HISUI}), }, [SPECIES_SAMUROTT] = @@ -636,7 +636,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = }, #if P_HISUIAN_FORMS - [SPECIES_SAMUROTT_HISUIAN] = + [SPECIES_SAMUROTT_HISUI] = { .baseHP = 90, .baseAttack = 108, @@ -3698,7 +3698,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .teachableLearnset = sPetililTeachableLearnset, .eggMoveLearnset = sPetililEggMoveLearnset, .evolutions = EVOLUTION({EVO_ITEM, ITEM_SUN_STONE, SPECIES_LILLIGANT}, - {EVO_NONE, 0, SPECIES_LILLIGANT_HISUIAN}), + {EVO_NONE, 0, SPECIES_LILLIGANT_HISUI}), }, [SPECIES_LILLIGANT] = @@ -3766,7 +3766,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = }, #if P_HISUIAN_FORMS - [SPECIES_LILLIGANT_HISUIAN] = + [SPECIES_LILLIGANT_HISUI] = { .baseHP = 70, .baseAttack = 105, @@ -4028,11 +4028,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .levelUpLearnset = sBasculinWhiteStripedLevelUpLearnset, .teachableLearnset = sBasculinWhiteStripedTeachableLearnset, .formSpeciesIdTable = sBasculinFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_RECOIL_DAMAGE_MALE, 294, SPECIES_BASCULEGION_MALE}, - {EVO_RECOIL_DAMAGE_FEMALE, 294, SPECIES_BASCULEGION_FEMALE}), + .evolutions = EVOLUTION({EVO_RECOIL_DAMAGE_MALE, 294, SPECIES_BASCULEGION_M}, + {EVO_RECOIL_DAMAGE_FEMALE, 294, SPECIES_BASCULEGION_F}), }, - [SPECIES_BASCULEGION_MALE] = + [SPECIES_BASCULEGION_M] = { .baseHP = 120, .baseAttack = 112, @@ -4095,7 +4095,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .formSpeciesIdTable = sBasculegionFormSpeciesIdTable, }, - [SPECIES_BASCULEGION_FEMALE] = + [SPECIES_BASCULEGION_F] = { .baseHP = 120, .baseAttack = 92, @@ -4418,10 +4418,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .teachableLearnset = sDarumakaTeachableLearnset, .eggMoveLearnset = sDarumakaEggMoveLearnset, .formSpeciesIdTable = sDarumakaFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_DARMANITAN_STANDARD_MODE}), + .evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_DARMANITAN_STANDARD}), }, - [SPECIES_DARMANITAN_STANDARD_MODE] = + [SPECIES_DARMANITAN_STANDARD] = { .baseHP = 105, .baseAttack = 140, @@ -4484,7 +4484,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .formChangeTable = sDarmanitanFormChangeTable, }, - [SPECIES_DARMANITAN_ZEN_MODE] = + [SPECIES_DARMANITAN_ZEN] = { .baseHP = 105, .baseAttack = 30, @@ -4539,7 +4539,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = }, #if P_GALARIAN_FORMS - [SPECIES_DARUMAKA_GALARIAN] = + [SPECIES_DARUMAKA_GALAR] = { .baseHP = 70, .baseAttack = 90, @@ -4601,10 +4601,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .teachableLearnset = sDarumakaGalarianTeachableLearnset, .eggMoveLearnset = sDarumakaGalarianEggMoveLearnset, .formSpeciesIdTable = sDarumakaFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE}), + .evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_DARMANITAN_GALAR_STANDARD}), }, - [SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE] = + [SPECIES_DARMANITAN_GALAR_STANDARD] = { .baseHP = 105, .baseAttack = 140, @@ -4668,7 +4668,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .formChangeTable = sDarmanitanGalarianFormChangeTable, }, - [SPECIES_DARMANITAN_GALARIAN_ZEN_MODE] = + [SPECIES_DARMANITAN_GALAR_ZEN] = { .baseHP = 105, .baseAttack = 160, @@ -5243,7 +5243,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = }, #if P_GALARIAN_FORMS - [SPECIES_YAMASK_GALARIAN] = + [SPECIES_YAMASK_GALAR] = { .baseHP = 38, .baseAttack = 55, @@ -5757,7 +5757,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_GARBODOR_GIGANTAMAX] = + [SPECIES_GARBODOR_GMAX] = { .baseHP = 80, .baseAttack = 95, @@ -5946,7 +5946,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = }, #if P_HISUIAN_FORMS - [SPECIES_ZORUA_HISUIAN] = + [SPECIES_ZORUA_HISUI] = { .baseHP = 35, .baseAttack = 60, @@ -6007,10 +6007,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .levelUpLearnset = sZoruaHisuianLevelUpLearnset, .teachableLearnset = sZoruaHisuianTeachableLearnset, .formSpeciesIdTable = sZoruaFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_ZOROARK_HISUIAN}), + .evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_ZOROARK_HISUI}), }, - [SPECIES_ZOROARK_HISUIAN] = + [SPECIES_ZOROARK_HISUI] = { .baseHP = 55, .baseAttack = 100, @@ -9509,7 +9509,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = }, #if P_GALARIAN_FORMS - [SPECIES_STUNFISK_GALARIAN] = + [SPECIES_STUNFISK_GALAR] = { .baseHP = 109, .baseAttack = 81, @@ -10211,7 +10211,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .levelUpLearnset = sRuffletLevelUpLearnset, .teachableLearnset = sRuffletTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 54, SPECIES_BRAVIARY}, - {EVO_NONE, 0, SPECIES_BRAVIARY_HISUIAN}), + {EVO_NONE, 0, SPECIES_BRAVIARY_HISUI}), }, [SPECIES_BRAVIARY] = @@ -10278,7 +10278,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = }, #if P_HISUIAN_FORMS - [SPECIES_BRAVIARY_HISUIAN] = + [SPECIES_BRAVIARY_HISUI] = { .baseHP = 110, .baseAttack = 83, @@ -12198,10 +12198,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = } [SPECIES_GENESECT] = GENESECT_SPECIES_INFO(Genesect), - [SPECIES_GENESECT_DOUSE_DRIVE] = GENESECT_SPECIES_INFO(GenesectDouseDrive), - [SPECIES_GENESECT_SHOCK_DRIVE] = GENESECT_SPECIES_INFO(GenesectShockDrive), - [SPECIES_GENESECT_BURN_DRIVE] = GENESECT_SPECIES_INFO(GenesectBurnDrive), - [SPECIES_GENESECT_CHILL_DRIVE] = GENESECT_SPECIES_INFO(GenesectChillDrive), + [SPECIES_GENESECT_DOUSE] = GENESECT_SPECIES_INFO(GenesectDouseDrive), + [SPECIES_GENESECT_SHOCK] = GENESECT_SPECIES_INFO(GenesectShockDrive), + [SPECIES_GENESECT_BURN] = GENESECT_SPECIES_INFO(GenesectBurnDrive), + [SPECIES_GENESECT_CHILL] = GENESECT_SPECIES_INFO(GenesectChillDrive), #endif //P_FAMILY_GENESECT #ifdef __INTELLISENSE__ diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index ec81e16e7e..14d1bcf552 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -1078,7 +1078,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = [SPECIES_SCATTERBUG_OCEAN] = SCATTERBUG_SPECIES_INFO(OCEAN), [SPECIES_SCATTERBUG_JUNGLE] = SCATTERBUG_SPECIES_INFO(JUNGLE), [SPECIES_SCATTERBUG_FANCY] = SCATTERBUG_SPECIES_INFO(FANCY), - [SPECIES_SCATTERBUG_POKE_BALL] = SCATTERBUG_SPECIES_INFO(POKE_BALL), + [SPECIES_SCATTERBUG_POKEBALL] = SCATTERBUG_SPECIES_INFO(POKEBALL), #define SPEWPA_SPECIES_INFO(evolution) \ { \ @@ -1159,7 +1159,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = [SPECIES_SPEWPA_OCEAN] = SPEWPA_SPECIES_INFO(OCEAN), [SPECIES_SPEWPA_JUNGLE] = SPEWPA_SPECIES_INFO(JUNGLE), [SPECIES_SPEWPA_FANCY] = SPEWPA_SPECIES_INFO(FANCY), - [SPECIES_SPEWPA_POKE_BALL] = SPEWPA_SPECIES_INFO(POKE_BALL), + [SPECIES_SPEWPA_POKEBALL] = SPEWPA_SPECIES_INFO(POKEBALL), #define VIVILLON_MISC_INFO(form, color, iconPal) \ .baseHP = 80, \ @@ -1390,7 +1390,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "This form is from a mysterious land.\n" "It scatters toxic color scales in battle."), }, - [SPECIES_VIVILLON_POKE_BALL] = + [SPECIES_VIVILLON_POKEBALL] = { VIVILLON_MISC_INFO(PokeBall, BODY_COLOR_RED, 2), .description = COMPOUND_STRING( @@ -1590,9 +1590,9 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .teachableLearnset = sFlabebeTeachableLearnset, \ .eggMoveLearnset = sFlabebeEggMoveLearnset, \ .formSpeciesIdTable = sFlabebeFormSpeciesIdTable, \ - .evolutions = EVOLUTION({EVO_LEVEL, 19, SPECIES_FLOETTE_ ##FORM##_FLOWER}) + .evolutions = EVOLUTION({EVO_LEVEL, 19, SPECIES_FLOETTE_ ##FORM}) - [SPECIES_FLABEBE_RED_FLOWER] = + [SPECIES_FLABEBE_RED] = { FLABEBE_MISC_INFO(Red, RED, 1), .description = COMPOUND_STRING( @@ -1601,7 +1601,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "begins flying around in search of a\n" "flower it likes."), }, - [SPECIES_FLABEBE_YELLOW_FLOWER] = + [SPECIES_FLABEBE_YELLOW] = { FLABEBE_MISC_INFO(Yellow, YELLOW, 1), .description = COMPOUND_STRING( @@ -1610,7 +1610,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "within flowers. This Pokémon is\n" "particularly fond of yellow flowers."), }, - [SPECIES_FLABEBE_ORANGE_FLOWER] = + [SPECIES_FLABEBE_ORANGE] = { FLABEBE_MISC_INFO(Orange, ORANGE, 0), .description = COMPOUND_STRING( @@ -1619,7 +1619,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "return. This Pokémon likes orange\n" "flowers best of all."), }, - [SPECIES_FLABEBE_BLUE_FLOWER] = + [SPECIES_FLABEBE_BLUE] = { FLABEBE_MISC_INFO(Blue, BLUE, 0), .description = COMPOUND_STRING( @@ -1628,7 +1628,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "power emanating from its flower\n" "and bobs along lightly through the air."), }, - [SPECIES_FLABEBE_WHITE_FLOWER] = + [SPECIES_FLABEBE_WHITE] = { FLABEBE_MISC_INFO(White, WHITE, 1), .description = COMPOUND_STRING( @@ -1695,10 +1695,10 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .backPicYOffset = 2, \ .levelUpLearnset = sFloetteLevelUpLearnset, \ .teachableLearnset = sFloetteTeachableLearnset, \ - .evolutions = EVOLUTION({EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES_ ##FORM##_FLOWER}),\ + .evolutions = EVOLUTION({EVO_ITEM, ITEM_SHINY_STONE, SPECIES_FLORGES_ ##FORM}),\ FLOETTE_MISC_INFO(form, FORM, iconPal) - [SPECIES_FLOETTE_RED_FLOWER] = + [SPECIES_FLOETTE_RED] = { FLOETTE_NORMAL_INFO(Red, RED, 1), .description = COMPOUND_STRING( @@ -1707,7 +1707,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "into flowers and draw forth their\n" "latent potential."), }, - [SPECIES_FLOETTE_YELLOW_FLOWER] = + [SPECIES_FLOETTE_YELLOW] = { FLOETTE_NORMAL_INFO(Yellow, YELLOW, 1), .description = COMPOUND_STRING( @@ -1716,7 +1716,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "This power then becomes the moves\n" "Floette uses to protect itself."), }, - [SPECIES_FLOETTE_ORANGE_FLOWER] = + [SPECIES_FLOETTE_ORANGE] = { FLOETTE_NORMAL_INFO(Orange, ORANGE, 0), .description = COMPOUND_STRING( @@ -1725,7 +1725,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "flowers, compared to flowers of other\n" "colors."), }, - [SPECIES_FLOETTE_BLUE_FLOWER] = + [SPECIES_FLOETTE_BLUE] = { FLOETTE_NORMAL_INFO(Blue, BLUE, 0), .description = COMPOUND_STRING( @@ -1734,7 +1734,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "will bring them back to its territory\n" "and care for them."), }, - [SPECIES_FLOETTE_WHITE_FLOWER] = + [SPECIES_FLOETTE_WHITE] = { FLOETTE_NORMAL_INFO(White, WHITE, 1), .description = COMPOUND_STRING( @@ -1743,7 +1743,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "without mercy. This Floette takes\n" "particularly good care of white flowers."), }, - [SPECIES_FLOETTE_ETERNAL_FLOWER] = + [SPECIES_FLOETTE_ETERNAL] = { FLOETTE_MISC_INFO(Eternal, ETERNAL, 0), .baseHP = 74, @@ -1754,7 +1754,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .baseSpDefense = 128, .expYield = 243, .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), - .cryId = CRY_FLOETTE_ETERNAL_FLOWER, + .cryId = CRY_FLOETTE_ETERNAL, .description = COMPOUND_STRING( "The flower it's holding can no\n" "longer be found blooming anywhere. It's\n" @@ -1826,7 +1826,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .teachableLearnset = sFlorgesTeachableLearnset, \ .formSpeciesIdTable = sFlorgesFormSpeciesIdTable - [SPECIES_FLORGES_RED_FLOWER] = + [SPECIES_FLORGES_RED] = { FLORGES_MISC_INFO(Red, 0), .description = COMPOUND_STRING( @@ -1835,7 +1835,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "draws forth the power of the red\n" "flowers around its neck."), }, - [SPECIES_FLORGES_YELLOW_FLOWER] = + [SPECIES_FLORGES_YELLOW] = { FLORGES_MISC_INFO(Yellow, 1), .description = COMPOUND_STRING( @@ -1844,7 +1844,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "ruthlessly punishes anyone who\n" "tramples on flowering plants."), }, - [SPECIES_FLORGES_ORANGE_FLOWER] = + [SPECIES_FLORGES_ORANGE] = { FLORGES_MISC_INFO(Orange, 0), .description = COMPOUND_STRING( @@ -1853,7 +1853,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "care for their castles' exquisite\n" "gardens."), }, - [SPECIES_FLORGES_BLUE_FLOWER] = + [SPECIES_FLORGES_BLUE] = { FLORGES_MISC_INFO(Blue, 0), .description = COMPOUND_STRING( @@ -1861,7 +1861,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = "expensive in the past, so paintings\n" "of blue Florges are highly valuable."), }, - [SPECIES_FLORGES_WHITE_FLOWER] = + [SPECIES_FLORGES_WHITE] = { FLORGES_MISC_INFO(White, 0), .description = COMPOUND_STRING( @@ -2261,11 +2261,11 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .levelUpLearnset = sEspurrLevelUpLearnset, .teachableLearnset = sEspurrTeachableLearnset, .eggMoveLearnset = sEspurrEggMoveLearnset, - .evolutions = EVOLUTION({EVO_LEVEL_MALE, 25, SPECIES_MEOWSTIC_MALE}, - {EVO_LEVEL_FEMALE, 25, SPECIES_MEOWSTIC_FEMALE}), + .evolutions = EVOLUTION({EVO_LEVEL_MALE, 25, SPECIES_MEOWSTIC_M}, + {EVO_LEVEL_FEMALE, 25, SPECIES_MEOWSTIC_F}), }, - [SPECIES_MEOWSTIC_MALE] = + [SPECIES_MEOWSTIC_M] = { .baseHP = 74, .baseAttack = 48, @@ -2327,7 +2327,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .formSpeciesIdTable = sMeowsticFormSpeciesIdTable, }, - [SPECIES_MEOWSTIC_FEMALE] = + [SPECIES_MEOWSTIC_F] = { .baseHP = 74, .baseAttack = 48, @@ -4051,7 +4051,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .teachableLearnset = sGoomyTeachableLearnset, .eggMoveLearnset = sGoomyEggMoveLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_SLIGGOO}, - {EVO_NONE, 0, SPECIES_SLIGGOO_HISUIAN}), + {EVO_NONE, 0, SPECIES_SLIGGOO_HISUI}), }, [SPECIES_SLIGGOO] = @@ -4182,7 +4182,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = }, #if P_HISUIAN_FORMS - [SPECIES_SLIGGOO_HISUIAN] = + [SPECIES_SLIGGOO_HISUI] = { .baseHP = 58, .baseAttack = 75, @@ -4244,11 +4244,11 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .levelUpLearnset = sSliggooHisuianLevelUpLearnset, .teachableLearnset = sSliggooHisuianTeachableLearnset, .formSpeciesIdTable = sSliggooFormSpeciesIdTable, - .evolutions = EVOLUTION({EVO_LEVEL_RAIN, 50, SPECIES_GOODRA_HISUIAN}, - {EVO_LEVEL_FOG, 50, SPECIES_GOODRA_HISUIAN}), + .evolutions = EVOLUTION({EVO_LEVEL_RAIN, 50, SPECIES_GOODRA_HISUI}, + {EVO_LEVEL_FOG, 50, SPECIES_GOODRA_HISUI}), }, - [SPECIES_GOODRA_HISUIAN] = + [SPECIES_GOODRA_HISUI] = { .baseHP = 80, .baseAttack = 100, @@ -5086,7 +5086,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .teachableLearnset = sBergmiteTeachableLearnset, .eggMoveLearnset = sBergmiteEggMoveLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_AVALUGG}, - {EVO_NONE, 0, SPECIES_AVALUGG_HISUIAN}), + {EVO_NONE, 0, SPECIES_AVALUGG_HISUI}), }, [SPECIES_AVALUGG] = @@ -5152,7 +5152,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = }, #if P_HISUIAN_FORMS - [SPECIES_AVALUGG_HISUIAN] = + [SPECIES_AVALUGG_HISUI] = { .baseHP = 95, .baseAttack = 127, @@ -5545,7 +5545,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = #endif //P_FAMILY_YVELTAL #if P_FAMILY_ZYGARDE - [SPECIES_ZYGARDE_50_AURA_BREAK] = + [SPECIES_ZYGARDE_50] = { .baseHP = 108, .baseAttack = 100, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index 2bbe9e646a..c6f0e0faf3 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -128,7 +128,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .levelUpLearnset = sDartrixLevelUpLearnset, .teachableLearnset = sDartrixTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_DECIDUEYE}, - {EVO_NONE, 0, SPECIES_DECIDUEYE_HISUIAN}), + {EVO_NONE, 0, SPECIES_DECIDUEYE_HISUI}), }, [SPECIES_DECIDUEYE] = @@ -194,7 +194,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = }, #if P_HISUIAN_FORMS - [SPECIES_DECIDUEYE_HISUIAN] = + [SPECIES_DECIDUEYE_HISUI] = { .baseHP = 88, .baseAttack = 112, @@ -4745,7 +4745,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .formChangeTable = sMimikyuTotemFormChangeTable, }, - [SPECIES_MIMIKYU_TOTEM_BUSTED] = + [SPECIES_MIMIKYU_BUSTED_TOTEM] = { .baseHP = 55, .baseAttack = 90, @@ -6577,7 +6577,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, }, - [SPECIES_MAGEARNA_ORIGINAL_COLOR] = + [SPECIES_MAGEARNA_ORIGINAL] = { .baseHP = 80, .baseAttack = 95, @@ -7165,7 +7165,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_MELMETAL_GIGANTAMAX] = + [SPECIES_MELMETAL_GMAX] = { .baseHP = 135, .baseAttack = 143, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index d4473fa5d4..0794527921 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -191,7 +191,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_RILLABOOM_GIGANTAMAX] = + [SPECIES_RILLABOOM_GMAX] = { .baseHP = 100, .baseAttack = 125, @@ -437,7 +437,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_CINDERACE_GIGANTAMAX] = + [SPECIES_CINDERACE_GMAX] = { .baseHP = 80, .baseAttack = 116, @@ -685,7 +685,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_INTELEON_GIGANTAMAX] = + [SPECIES_INTELEON_GMAX] = { .baseHP = 70, .baseAttack = 85, @@ -1061,7 +1061,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_CORVIKNIGHT_GIGANTAMAX] = + [SPECIES_CORVIKNIGHT_GMAX] = { .baseHP = 98, .baseAttack = 87, @@ -1312,7 +1312,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_ORBEETLE_GIGANTAMAX] = + [SPECIES_ORBEETLE_GMAX] = { .baseHP = 60, .baseAttack = 45, @@ -1875,7 +1875,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_DREDNAW_GIGANTAMAX] = + [SPECIES_DREDNAW_GMAX] = { .baseHP = 90, .baseAttack = 115, @@ -2248,7 +2248,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_COALOSSAL_GIGANTAMAX] = + [SPECIES_COALOSSAL_GMAX] = { .baseHP = 110, .baseAttack = 80, @@ -2437,7 +2437,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_FLAPPLE_GIGANTAMAX] = + [SPECIES_FLAPPLE_GMAX] = { .baseHP = 70, .baseAttack = 110, @@ -2557,7 +2557,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_APPLETUN_GIGANTAMAX] = + [SPECIES_APPLETUN_GMAX] = { .baseHP = 110, .baseAttack = 85, @@ -2866,7 +2866,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_SANDACONDA_GIGANTAMAX] = + [SPECIES_SANDACONDA_GMAX] = { .baseHP = 72, .baseAttack = 107, @@ -3356,7 +3356,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_TOXTRICITY_AMPED_GIGANTAMAX] = + [SPECIES_TOXTRICITY_AMPED_GMAX] = { .baseHP = 75, .baseAttack = 98, @@ -3472,7 +3472,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX] = + [SPECIES_TOXTRICITY_LOW_KEY_GMAX] = { .baseHP = 75, .baseAttack = 98, @@ -3653,7 +3653,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_CENTISKORCH_GIGANTAMAX] = + [SPECIES_CENTISKORCH_GMAX] = { .baseHP = 100, .baseAttack = 115, @@ -4278,7 +4278,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_HATTERENE_GIGANTAMAX] = + [SPECIES_HATTERENE_GMAX] = { .baseHP = 57, .baseAttack = 90, @@ -4525,7 +4525,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_GRIMMSNARL_GIGANTAMAX] = + [SPECIES_GRIMMSNARL_GMAX] = { .baseHP = 95, .baseAttack = 120, @@ -4781,7 +4781,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = [SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL] = ALCREMIE_REGULAR_SPECIES_INFO(Ribbon, CaramelSwirl, BODY_COLOR_BROWN), [SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL] = ALCREMIE_REGULAR_SPECIES_INFO(Ribbon, RainbowSwirl, BODY_COLOR_YELLOW), #if P_GIGANTAMAX_FORMS - [SPECIES_ALCREMIE_GIGANTAMAX] = + [SPECIES_ALCREMIE_GMAX] = { ALCREMIE_MISC_INFO(BODY_COLOR_YELLOW), .speciesName = _("Alcremie"), @@ -5141,7 +5141,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = #endif //P_FAMILY_STONJOURNER #if P_FAMILY_EISCUE - [SPECIES_EISCUE_ICE_FACE] = + [SPECIES_EISCUE_ICE] = { .baseHP = 75, .baseAttack = 80, @@ -5161,7 +5161,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .abilities = { ABILITY_ICE_FACE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Eiscue"), - .cryId = CRY_EISCUE_ICE_FACE, + .cryId = CRY_EISCUE_ICE, .natDexNum = NATIONAL_DEX_EISCUE, .categoryName = _("Penguin"), .height = 14, @@ -5205,7 +5205,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .formChangeTable = sEiscueFormChangeTable, }, - [SPECIES_EISCUE_NOICE_FACE] = + [SPECIES_EISCUE_NOICE] = { .baseHP = 75, .baseAttack = 80, @@ -5263,7 +5263,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = #endif //P_FAMILY_EISCUE #if P_FAMILY_INDEEDEE - [SPECIES_INDEEDEE_MALE] = + [SPECIES_INDEEDEE_M] = { .baseHP = 60, .baseAttack = 65, @@ -5283,7 +5283,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .abilities = { ABILITY_INNER_FOCUS, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE }, .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Indeedee"), - .cryId = CRY_INDEEDEE_MALE, + .cryId = CRY_INDEEDEE_M, .natDexNum = NATIONAL_DEX_INDEEDEE, .categoryName = _("Emotion"), .height = 9, @@ -5325,7 +5325,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .formSpeciesIdTable = sIndeedeeFormSpeciesIdTable, }, - [SPECIES_INDEEDEE_FEMALE] = + [SPECIES_INDEEDEE_F] = { .baseHP = 70, .baseAttack = 55, @@ -5345,7 +5345,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .abilities = { ABILITY_OWN_TEMPO, ABILITY_SYNCHRONIZE, ABILITY_PSYCHIC_SURGE }, .bodyColor = BODY_COLOR_PURPLE, .speciesName = _("Indeedee"), - .cryId = CRY_INDEEDEE_FEMALE, + .cryId = CRY_INDEEDEE_F, .natDexNum = NATIONAL_DEX_INDEEDEE, .categoryName = _("Emotion"), .height = 9, @@ -5640,7 +5640,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_COPPERAJAH_GIGANTAMAX] = + [SPECIES_COPPERAJAH_GMAX] = { .baseHP = 122, .baseAttack = 130, @@ -6016,7 +6016,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_DURALUDON_GIGANTAMAX] = + [SPECIES_DURALUDON_GMAX] = { .baseHP = 70, .baseAttack = 95, @@ -6329,7 +6329,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = #endif //P_FAMILY_DREEPY #if P_FAMILY_ZACIAN - [SPECIES_ZACIAN_HERO_OF_MANY_BATTLES] = + [SPECIES_ZACIAN_HERO] = { .baseHP = 92, .baseAttack = P_UPDATED_STATS >= GEN_9 ? 120 : 130, @@ -6349,7 +6349,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .abilities = { ABILITY_INTREPID_SWORD, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BLUE, .speciesName = _("Zacian"), - .cryId = CRY_ZACIAN_HERO_OF_MANY_BATTLES, + .cryId = CRY_ZACIAN_HERO, .natDexNum = NATIONAL_DEX_ZACIAN, .categoryName = _("Warrior"), .height = 28, @@ -6394,7 +6394,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .formChangeTable = sZacianFormChangeTable, }, - [SPECIES_ZACIAN_CROWNED_SWORD] = + [SPECIES_ZACIAN_CROWNED] = { .baseHP = 92, .baseAttack = P_UPDATED_STATS >= GEN_9 ? 150 : 170, @@ -6462,7 +6462,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = #endif //P_FAMILY_ZACIAN #if P_FAMILY_ZAMAZENTA - [SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES] = + [SPECIES_ZAMAZENTA_HERO] = { .baseHP = 92, .baseAttack = P_UPDATED_STATS >= GEN_9 ? 120 : 130, @@ -6482,7 +6482,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .abilities = { ABILITY_DAUNTLESS_SHIELD, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_RED, .speciesName = _("Zamazenta"), - .cryId = CRY_ZAMAZENTA_HERO_OF_MANY_BATTLES, + .cryId = CRY_ZAMAZENTA_HERO, .natDexNum = NATIONAL_DEX_ZAMAZENTA, .categoryName = _("Warrior"), .height = 29, @@ -6528,7 +6528,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .formChangeTable = sZamazentaFormChangeTable, }, - [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = + [SPECIES_ZAMAZENTA_CROWNED] = { .baseHP = 92, .baseAttack = P_UPDATED_STATS >= GEN_9 ? 120 : 130, @@ -6782,13 +6782,13 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKubfuLevelUpLearnset, .teachableLearnset = sKubfuTeachableLearnset, - .evolutions = EVOLUTION({EVO_DARK_SCROLL, 0, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE}, - {EVO_ITEM, ITEM_SCROLL_OF_DARKNESS, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE}, - {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}, - {EVO_ITEM, ITEM_SCROLL_OF_WATERS, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}), + .evolutions = EVOLUTION({EVO_DARK_SCROLL, 0, SPECIES_URSHIFU_SINGLE_STRIKE}, + {EVO_ITEM, ITEM_SCROLL_OF_DARKNESS, SPECIES_URSHIFU_SINGLE_STRIKE}, + {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE}, + {EVO_ITEM, ITEM_SCROLL_OF_WATERS, SPECIES_URSHIFU_RAPID_STRIKE}), }, - [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE] = + [SPECIES_URSHIFU_SINGLE_STRIKE] = { .baseHP = 100, .baseAttack = 130, @@ -6854,7 +6854,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX] = + [SPECIES_URSHIFU_SINGLE_STRIKE_GMAX] = { .baseHP = 100, .baseAttack = 130, @@ -6912,7 +6912,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #endif //P_GIGANTAMAX_FORMS - [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = + [SPECIES_URSHIFU_RAPID_STRIKE] = { .baseHP = 100, .baseAttack = 130, @@ -6978,7 +6978,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_GIGANTAMAX_FORMS - [SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX] = + [SPECIES_URSHIFU_RAPID_STRIKE_GMAX] = { .baseHP = 100, .baseAttack = 130, @@ -7489,7 +7489,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = }, #if P_FUSION_FORMS - [SPECIES_CALYREX_ICE_RIDER] = + [SPECIES_CALYREX_ICE] = { .baseHP = 100, .baseAttack = 165, @@ -7555,7 +7555,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, }, - [SPECIES_CALYREX_SHADOW_RIDER] = + [SPECIES_CALYREX_SHADOW] = { .baseHP = 100, .baseAttack = 85, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 3b0dcdbe15..e0346d63a9 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -628,11 +628,11 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .levelUpLearnset = sLechonkLevelUpLearnset, .teachableLearnset = sLechonkTeachableLearnset, .eggMoveLearnset = sLechonkEggMoveLearnset, - .evolutions = EVOLUTION({EVO_LEVEL_MALE, 18, SPECIES_OINKOLOGNE_MALE}, - {EVO_LEVEL_FEMALE, 18, SPECIES_OINKOLOGNE_FEMALE}), + .evolutions = EVOLUTION({EVO_LEVEL_MALE, 18, SPECIES_OINKOLOGNE_M}, + {EVO_LEVEL_FEMALE, 18, SPECIES_OINKOLOGNE_F}), }, - [SPECIES_OINKOLOGNE_MALE] = + [SPECIES_OINKOLOGNE_M] = { .baseHP = 110, .baseAttack = 100, @@ -652,7 +652,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .abilities = { ABILITY_LINGERING_AROMA, ABILITY_GLUTTONY, ABILITY_THICK_FAT }, .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Oinkologne"), - .cryId = CRY_OINKOLOGNE_MALE, + .cryId = CRY_OINKOLOGNE_M, .natDexNum = NATIONAL_DEX_OINKOLOGNE, .categoryName = _("Hog"), .height = 10, @@ -693,7 +693,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .formSpeciesIdTable = sOinkologneFormSpeciesIdTable, }, - [SPECIES_OINKOLOGNE_FEMALE] = + [SPECIES_OINKOLOGNE_F] = { .baseHP = 115, .baseAttack = 90, @@ -713,7 +713,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .abilities = { ABILITY_AROMA_VEIL, ABILITY_GLUTTONY, ABILITY_THICK_FAT }, .bodyColor = BODY_COLOR_GRAY, .speciesName = _("Oinkologne"), - .cryId = CRY_OINKOLOGNE_FEMALE, + .cryId = CRY_OINKOLOGNE_F, .natDexNum = NATIONAL_DEX_OINKOLOGNE, .categoryName = _("Hog"), .height = 10, @@ -1257,11 +1257,11 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .levelUpLearnset = sTandemausLevelUpLearnset, .teachableLearnset = sTandemausTeachableLearnset, .eggMoveLearnset = sTandemausEggMoveLearnset, - .evolutions = EVOLUTION({EVO_LEVEL_FAMILY_OF_FOUR, 25, SPECIES_MAUSHOLD_FAMILY_OF_FOUR}, - {EVO_LEVEL_FAMILY_OF_THREE, 25, SPECIES_MAUSHOLD_FAMILY_OF_THREE}), + .evolutions = EVOLUTION({EVO_LEVEL_FAMILY_OF_FOUR, 25, SPECIES_MAUSHOLD_FOUR}, + {EVO_LEVEL_FAMILY_OF_THREE, 25, SPECIES_MAUSHOLD_THREE}), }, - [SPECIES_MAUSHOLD_FAMILY_OF_THREE] = + [SPECIES_MAUSHOLD_THREE] = { .baseHP = 74, .baseAttack = 75, @@ -1322,7 +1322,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .teachableLearnset = sMausholdTeachableLearnset, .formSpeciesIdTable = sMausholdFormSpeciesIdTable, }, - [SPECIES_MAUSHOLD_FAMILY_OF_FOUR] = + [SPECIES_MAUSHOLD_FOUR] = { .baseHP = 74, .baseAttack = 75, @@ -1700,7 +1700,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = #endif //P_FAMILY_SMOLIV #if P_FAMILY_SQUAWKABILLY - [SPECIES_SQUAWKABILLY_GREEN_PLUMAGE] = + [SPECIES_SQUAWKABILLY_GREEN] = { .baseHP = 82, .baseAttack = 96, @@ -1763,7 +1763,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .formSpeciesIdTable = sSquawkabillyFormSpeciesIdTable, }, - [SPECIES_SQUAWKABILLY_BLUE_PLUMAGE] = + [SPECIES_SQUAWKABILLY_BLUE] = { .baseHP = 82, .baseAttack = 96, @@ -1826,7 +1826,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .formSpeciesIdTable = sSquawkabillyFormSpeciesIdTable, }, - [SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE] = + [SPECIES_SQUAWKABILLY_YELLOW] = { .baseHP = 82, .baseAttack = 96, @@ -1889,7 +1889,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .formSpeciesIdTable = sSquawkabillyFormSpeciesIdTable, }, - [SPECIES_SQUAWKABILLY_WHITE_PLUMAGE] = + [SPECIES_SQUAWKABILLY_WHITE] = { .baseHP = 82, .baseAttack = 96, @@ -7433,15 +7433,15 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } - [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), - [SPECIES_OGERPON_WELLSPRING_MASK] = OGERPON_SPECIES_INFO(Wellspring, Mask, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 0, FALSE), - [SPECIES_OGERPON_HEARTHFLAME_MASK] = OGERPON_SPECIES_INFO(Hearthflame, Mask, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 0, FALSE), - [SPECIES_OGERPON_CORNERSTONE_MASK] = OGERPON_SPECIES_INFO(Cornerstone, Mask, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 0, FALSE), + [SPECIES_OGERPON_TEAL] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), + [SPECIES_OGERPON_WELLSPRING] = OGERPON_SPECIES_INFO(Wellspring, Mask, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 0, FALSE), + [SPECIES_OGERPON_HEARTHFLAME] = OGERPON_SPECIES_INFO(Hearthflame, Mask, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 0, FALSE), + [SPECIES_OGERPON_CORNERSTONE] = OGERPON_SPECIES_INFO(Cornerstone, Mask, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 0, FALSE), #if P_TERA_FORMS - [SPECIES_OGERPON_TEAL_MASK_TERA] = OGERPON_SPECIES_INFO(Teal, MaskTera, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 1, TRUE), - [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = OGERPON_SPECIES_INFO(Wellspring, MaskTera, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0, TRUE), - [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = OGERPON_SPECIES_INFO(Hearthflame, MaskTera, TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK, BODY_COLOR_RED, 0, TRUE), - [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = OGERPON_SPECIES_INFO(Cornerstone, MaskTera, TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK, BODY_COLOR_GRAY, 0, TRUE), + [SPECIES_OGERPON_TEAL_TERA] = OGERPON_SPECIES_INFO(Teal, MaskTera, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 1, TRUE), + [SPECIES_OGERPON_WELLSPRING_TERA] = OGERPON_SPECIES_INFO(Wellspring, MaskTera, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0, TRUE), + [SPECIES_OGERPON_HEARTHFLAME_TERA] = OGERPON_SPECIES_INFO(Hearthflame, MaskTera, TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK, BODY_COLOR_RED, 0, TRUE), + [SPECIES_OGERPON_CORNERSTONE_TERA] = OGERPON_SPECIES_INFO(Cornerstone, MaskTera, TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK, BODY_COLOR_GRAY, 0, TRUE), #endif //P_TERA_FORMS #endif //P_FAMILY_OGERPON diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index c2a0a4170a..0f21e7b282 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -435,38 +435,38 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_WEEDLE, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_KAKUNA, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_RATTATA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATTATA_ALOLAN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RATTATA_ALOLA, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_RATICATE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATICATE_ALOLAN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_RATICATE_ALOLA, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_PIKACHU, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_PIKACHU_COSPLAY, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_PIKACHU_ROCK_STAR, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_PIKACHU_BELLE, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_PIKACHU_POP_STAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_PH_D, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_PHD, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_PIKACHU_LIBRE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_ORIGINAL_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_HOENN_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_SINNOH_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_UNOVA_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_KALOS_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_ALOLA_CAP, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_ORIGINAL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_HOENN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_SINNOH, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_UNOVA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_KALOS, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_ALOLA, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_PIKACHU_PARTNER_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_WORLD_CAP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_PARTNER, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_WORLD, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_PIKACHU_STARTER, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SANDSHREW, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SANDSHREW_ALOLAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SANDSHREW_ALOLA, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_NIDORAN_F, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_NIDORAN_M, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_CLEFAIRY, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_VULPIX, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_VULPIX_ALOLAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_VULPIX_ALOLA, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_JIGGLYPUFF, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_ODDISH, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_PARAS, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_MEOWTH, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWTH_ALOLAN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWTH_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWTH_ALOLA, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWTH_GALAR, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_PSYDUCK, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_MANKEY, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_GROWLITHE, .jumpType = JUMP_TYPE_FAST, }, @@ -478,7 +478,7 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_CUBONE, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_DITTO, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_EEVEE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_EEVEE_PARTNER, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_EEVEE_STARTER, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_OMANYTE, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_KABUTO, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_CHIKORITA, .jumpType = JUMP_TYPE_SLOW, }, @@ -495,7 +495,7 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_MARILL, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_SUNKERN, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_WOOPER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_WOOPER_PALDEAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_WOOPER_PALDEA, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_PINECO, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_SNUBBULL, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SHUCKLE, .jumpType = JUMP_TYPE_SLOW, }, @@ -516,9 +516,9 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_MARSHTOMP, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_POOCHYENA, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_ZIGZAGOON, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ZIGZAGOON_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_ZIGZAGOON_GALAR, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_LINOONE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LINOONE_GALARIAN, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_LINOONE_GALAR, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_WURMPLE, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_SILCOON, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_CASCOON, .jumpType = JUMP_TYPE_SLOW, }, @@ -567,8 +567,8 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_CHERUBI, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_CHERRIM_OVERCAST, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_CHERRIM_SUNSHINE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHELLOS_WEST_SEA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHELLOS_EAST_SEA, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SHELLOS_WEST, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_SHELLOS_EAST, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_BUNEARY, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_GLAMEOW, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_STUNKY, .jumpType = JUMP_TYPE_NORMAL, }, @@ -599,7 +599,7 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_PETILIL, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_SANDILE, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_DARUMAKA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DARUMAKA_GALARIAN, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_DARUMAKA_GALAR, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_DWEBBLE, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_SCRAGGY, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_ARCHEN, .jumpType = JUMP_TYPE_NORMAL, }, @@ -622,7 +622,7 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_CUBCHOO, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_SHELMET, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_STUNFISK, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_STUNFISK_GALARIAN, .jumpType = JUMP_TYPE_SLOW, }, + { .species = SPECIES_STUNFISK_GALAR, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_PAWNIARD, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_DURANT, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_CHESPIN, .jumpType = JUMP_TYPE_SLOW, }, @@ -649,7 +649,7 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_SCATTERBUG_OCEAN, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_SCATTERBUG_JUNGLE, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_SCATTERBUG_FANCY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_POKE_BALL, .jumpType = JUMP_TYPE_FAST, }, + { .species = SPECIES_SCATTERBUG_POKEBALL, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_SPEWPA_POLAR, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SPEWPA_TUNDRA, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SPEWPA_CONTINENTAL, .jumpType = JUMP_TYPE_NORMAL, }, @@ -668,12 +668,12 @@ static const struct PokemonJumpMons sPokeJumpMons[] = { .species = SPECIES_SPEWPA_OCEAN, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SPEWPA_JUNGLE, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_SPEWPA_FANCY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_POKE_BALL, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_SPEWPA_POKEBALL, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_LITLEO, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_PANCHAM, .jumpType = JUMP_TYPE_FAST, }, { .species = SPECIES_ESPURR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWSTIC_MALE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWSTIC_FEMALE, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWSTIC_M, .jumpType = JUMP_TYPE_NORMAL, }, + { .species = SPECIES_MEOWSTIC_F, .jumpType = JUMP_TYPE_NORMAL, }, { .species = SPECIES_BINACLE, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_CLAUNCHER, .jumpType = JUMP_TYPE_SLOW, }, { .species = SPECIES_HELIOPTILE, .jumpType = JUMP_TYPE_NORMAL, }, diff --git a/test/battle/ability/cud_chew.c b/test/battle/ability/cud_chew.c index 305969aa93..297635c9f3 100644 --- a/test/battle/ability/cud_chew.c +++ b/test/battle/ability/cud_chew.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Kee Berry effect again on the next tu ASSUME(gItemsInfo[ITEM_KEE_BERRY].holdEffect == HOLD_EFFECT_KEE_BERRY); ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_TAUROS_PALDEAN_COMBAT_BREED) { Ability(ABILITY_CUD_CHEW); Item(ITEM_KEE_BERRY); } + OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { Ability(ABILITY_CUD_CHEW); Item(ITEM_KEE_BERRY); } } WHEN { TURN { MOVE(player, MOVE_TACKLE); } TURN { MOVE(player, MOVE_CELEBRATE);} @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next t ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG); ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_TAUROS_PALDEAN_COMBAT_BREED) { MaxHP(60); HP(60); Ability(ABILITY_CUD_CHEW); Item(ITEM_ORAN_BERRY); } + OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { MaxHP(60); HP(60); Ability(ABILITY_CUD_CHEW); Item(ITEM_ORAN_BERRY); } } WHEN { TURN { MOVE(player, MOVE_DRAGON_RAGE); } TURN { MOVE(player, MOVE_CELEBRATE);} diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c index a2427875f6..c5c8f5d610 100644 --- a/test/battle/ability/embody_aspect.c +++ b/test/battle/ability/embody_aspect.c @@ -6,10 +6,10 @@ SINGLE_BATTLE_TEST("Embody Aspect raises a stat depending on the users form by o { u16 species, ability; - PARAMETRIZE { species = SPECIES_OGERPON_TEAL_MASK_TERA; ability = ABILITY_EMBODY_ASPECT_TEAL_MASK; } - PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_MASK_TERA; ability = ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK; } - PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_MASK_TERA; ability = ABILITY_EMBODY_ASPECT_WELLSPRING_MASK; } - PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_MASK_TERA; ability = ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_TEAL_TERA; ability = ABILITY_EMBODY_ASPECT_TEAL_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_TERA; ability = ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_TERA; ability = ABILITY_EMBODY_ASPECT_WELLSPRING_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_TERA; ability = ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK; } GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Embody Aspect activates when it's no longer effected by Neut GIVEN { PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_OGERPON_TEAL_MASK_TERA) { Ability(ABILITY_EMBODY_ASPECT_TEAL_MASK); } + OPPONENT(SPECIES_OGERPON_TEAL_TERA) { Ability(ABILITY_EMBODY_ASPECT_TEAL_MASK); } } WHEN { TURN { SWITCH(player, 1); } } SCENE { diff --git a/test/battle/ability/galvanize.c b/test/battle/ability/galvanize.c index 7f604f3dac..1da82e861d 100644 --- a/test/battle/ability/galvanize.c +++ b/test/battle/ability/galvanize.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Galvanize turns a normal type move into Electric") { GIVEN { PLAYER(SPECIES_KRABBY); - OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + OPPONENT(SPECIES_GEODUDE_ALOLA) { Ability(ABILITY_GALVANIZE); } } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Galvanize can not turn certain moves into Electric type move ASSUME(gMovesInfo[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); ASSUME(gMovesInfo[MOVE_MULTI_ATTACK].effect == EFFECT_CHANGE_TYPE_ON_ITEM); PLAYER(SPECIES_KRABBY); - OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + OPPONENT(SPECIES_GEODUDE_ALOLA) { Ability(ABILITY_GALVANIZE); } } WHEN { TURN { MOVE(opponent, move); } } SCENE { diff --git a/test/battle/ability/grim_neigh.c b/test/battle/ability/grim_neigh.c index b4d82487d8..1d1e50ee12 100644 --- a/test/battle/ability/grim_neigh.c +++ b/test/battle/ability/grim_neigh.c @@ -5,7 +5,7 @@ DOUBLE_BATTLE_TEST("Grim Neigh raises Sp. Attack by one stage after directly cau { u32 species = 0, ability = 0, abilityPopUp = 0; PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } - PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } GIVEN { ASSUME(gMovesInfo[MOVE_DISCHARGE].target == MOVE_TARGET_FOES_AND_ALLY); PLAYER(species) { Ability(ability); } @@ -41,7 +41,7 @@ DOUBLE_BATTLE_TEST("Grim Neigh does not trigger if Pokemon faint to indirect dam { u32 species = 0, ability = 0, abilityPopUp = 0; PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } - PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } GIVEN { PLAYER(species) { Ability(ability); } PLAYER(SPECIES_SNORUNT) { HP(1); Status1(STATUS1_POISON); } @@ -78,7 +78,7 @@ DOUBLE_BATTLE_TEST("Grim Neigh does not increase damage done by the same move th s16 damage[2]; u32 species = 0, ability = 0, abilityPopUp = 0; PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } - PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } KNOWN_FAILING; // Requires simultaneous damage implementation GIVEN { diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c index 79b1fc989f..28fb9333fe 100644 --- a/test/battle/ability/moxie.c +++ b/test/battle/ability/moxie.c @@ -6,7 +6,7 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after direct u32 species = 0, ability = 0, abilityPopUp = 0; PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } - PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); PLAYER(species) { Ability(ability); } @@ -45,7 +45,7 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to in u32 species = 0, ability = 0, abilityPopUp = 0; PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } - PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { PLAYER(species) { Ability(ability); } PLAYER(SPECIES_SNORUNT) { HP(1); Status1(STATUS1_POISON); } @@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger when already at maximu u32 species = 0, ability = 0, abilityPopUp = 0; PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } - PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); PLAYER(species) { Ability(ability); } @@ -120,7 +120,7 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not increase damage done by the sa u32 species = 0, ability = 0, abilityPopUp = 0; PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } - PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } KNOWN_FAILING; // Requires simultaneous damage implementation GIVEN { diff --git a/test/battle/ability/mummy.c b/test/battle/ability/mummy.c index ed80a178e6..b6323e83ee 100644 --- a/test/battle/ability/mummy.c +++ b/test/battle/ability/mummy.c @@ -81,8 +81,8 @@ SINGLE_BATTLE_TEST("Mummy doesn't replace abilities that can't be suppressed") PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; } PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; } PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; } - PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; } - PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; } GIVEN { PLAYER(SPECIES_YAMASK); diff --git a/test/battle/ability/pastel_veil.c b/test/battle/ability/pastel_veil.c index ebf9d74645..8ea83bbf86 100644 --- a/test/battle/ability/pastel_veil.c +++ b/test/battle/ability/pastel_veil.c @@ -6,7 +6,7 @@ SINGLE_BATTLE_TEST("Pastel Veil prevents Poison Sting poison") GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON) == TRUE); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } } WHEN { TURN { MOVE(player, MOVE_POISON_STING); } } SCENE { @@ -21,7 +21,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil prevents Poison Sting poison on partner") ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON) == TRUE); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(playerLeft, MOVE_POISON_STING, target: opponentRight); } @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Pastel Veil immediately cures Mold Breaker poison") GIVEN { ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } } WHEN { TURN { MOVE(player, MOVE_TOXIC); MOVE(opponent, MOVE_TACKLE); } } SCENE { @@ -56,7 +56,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil does not cure Mold Breaker poison on partner") ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(playerLeft, MOVE_TOXIC, target: opponentRight); } @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison") GIVEN { ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } } WHEN { TURN { MOVE(player, MOVE_TOXIC); } } SCENE { @@ -89,7 +89,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison on partner") ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(playerLeft, MOVE_TOXIC, target: opponentRight); } @@ -107,7 +107,7 @@ SINGLE_BATTLE_TEST("Pastel Veil prevents Toxic Spikes poison") ASSUME(gMovesInfo[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } } WHEN { TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { SWITCH(opponent, 1); } @@ -123,7 +123,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil prevents Toxic Spikes poison on partner") ASSUME(gMovesInfo[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { @@ -141,7 +141,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil cures partner's poison on initial switch in") PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } } WHEN { TURN {} } SCENE { @@ -159,7 +159,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil cures partner's poison on switch in") PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); - OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } + OPPONENT(SPECIES_PONYTA_GALAR) { Ability(ABILITY_PASTEL_VEIL); } } WHEN { TURN { SWITCH(opponentRight, 2); } } SCENE { diff --git a/test/battle/ability/quick_draw.c b/test/battle/ability/quick_draw.c index cdf237475b..9c5afb6193 100644 --- a/test/battle/ability/quick_draw.c +++ b/test/battle/ability/quick_draw.c @@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Quick Draw has a 30% chance of going first") { PASSES_RANDOMLY(3, 10, RNG_QUICK_DRAW); GIVEN { - PLAYER(SPECIES_SLOWBRO_GALARIAN) { Ability(ABILITY_QUICK_DRAW); Speed(1); } + PLAYER(SPECIES_SLOWBRO_GALAR) { Ability(ABILITY_QUICK_DRAW); Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(player, MOVE_TACKLE); } @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Quick Draw does not activate 70% of the time") { PASSES_RANDOMLY(7, 10, RNG_QUICK_DRAW); GIVEN { - PLAYER(SPECIES_SLOWBRO_GALARIAN) { Ability(ABILITY_QUICK_DRAW); Speed(1); } + PLAYER(SPECIES_SLOWBRO_GALAR) { Ability(ABILITY_QUICK_DRAW); Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_TACKLE); } diff --git a/test/battle/ability/storm_drain.c b/test/battle/ability/storm_drain.c index 38d4a9be75..01f97de6fc 100644 --- a/test/battle/ability/storm_drain.c +++ b/test/battle/ability/storm_drain.c @@ -6,7 +6,7 @@ SINGLE_BATTLE_TEST("Storm Drain absorbs Water-type moves and increases the Sp. A GIVEN { ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GASTRODON_EAST_SEA) { Ability(ABILITY_STORM_DRAIN); } + OPPONENT(SPECIES_GASTRODON_EAST) { Ability(ABILITY_STORM_DRAIN); } } WHEN { TURN { MOVE(player, MOVE_WATER_GUN); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { @@ -37,7 +37,7 @@ DOUBLE_BATTLE_TEST("Storm Drain forces single-target Water-type moves to target ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GASTRODON_EAST_SEA) { Ability(ABILITY_STORM_DRAIN); } + OPPONENT(SPECIES_GASTRODON_EAST) { Ability(ABILITY_STORM_DRAIN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { diff --git a/test/battle/ability/switch_in_abilities.c b/test/battle/ability/switch_in_abilities.c index 79cf2b2dc9..c8a8c54dd3 100644 --- a/test/battle/ability/switch_in_abilities.c +++ b/test/battle/ability/switch_in_abilities.c @@ -101,8 +101,8 @@ DOUBLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO swi PLAYER(SPECIES_GYARADOS) { Speed(spdPlayer2); Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); } - OPPONENT(SPECIES_WEEZING_GALARIAN) { Speed(spdOpponent1); Ability(ABILITY_MISTY_SURGE); } - OPPONENT(SPECIES_VULPIX_ALOLAN) { Speed(spdOpponent2); Ability(ABILITY_SNOW_WARNING); } + OPPONENT(SPECIES_WEEZING_GALAR) { Speed(spdOpponent1); Ability(ABILITY_MISTY_SURGE); } + OPPONENT(SPECIES_VULPIX_ALOLA) { Speed(spdOpponent2); Ability(ABILITY_SNOW_WARNING); } } WHEN { TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(playerRight, 3); SEND_OUT(opponentRight, 3); } TURN { ; } diff --git a/test/battle/ability/volt_absorb.c b/test/battle/ability/volt_absorb.c index b438e794f0..93498bd1c7 100644 --- a/test/battle/ability/volt_absorb.c +++ b/test/battle/ability/volt_absorb.c @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Volt Absorb is only triggered once on multi strike moves") ASSUME(gMovesInfo[MOVE_FURY_SWIPES].type == TYPE_NORMAL); ASSUME(gMovesInfo[MOVE_FURY_SWIPES].effect == EFFECT_MULTI_HIT); PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(100); } - OPPONENT(SPECIES_GRAVELER_ALOLAN) { Ability(ABILITY_GALVANIZE); } + OPPONENT(SPECIES_GRAVELER_ALOLA) { Ability(ABILITY_GALVANIZE); } } WHEN { TURN { MOVE(opponent, MOVE_FURY_SWIPES); } } SCENE { @@ -69,7 +69,7 @@ DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from dama ASSUME(gMovesInfo[MOVE_EXPLOSION].type == TYPE_NORMAL); PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(100); } PLAYER(SPECIES_ABRA); - OPPONENT(SPECIES_GRAVELER_ALOLAN) { Ability(ABILITY_GALVANIZE); } + OPPONENT(SPECIES_GRAVELER_ALOLA) { Ability(ABILITY_GALVANIZE); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(opponentLeft, MOVE_EXPLOSION); } diff --git a/test/battle/ability/zen_mode.c b/test/battle/ability/zen_mode.c index 2734f7a9ec..728921a484 100644 --- a/test/battle/ability/zen_mode.c +++ b/test/battle/ability/zen_mode.c @@ -4,8 +4,8 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less at the end of the turn") { u16 standardSpecies, zenSpecies; - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_GALARIAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD; zenSpecies = SPECIES_DARMANITAN_ZEN; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALAR_STANDARD; zenSpecies = SPECIES_DARMANITAN_GALAR_ZEN; } GIVEN { ASSUME(gSpeciesInfo[standardSpecies].baseHP == 105); @@ -33,8 +33,8 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less before the first turn") { u16 standardSpecies, zenSpecies; - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_GALARIAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD; zenSpecies = SPECIES_DARMANITAN_ZEN; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALAR_STANDARD; zenSpecies = SPECIES_DARMANITAN_GALAR_ZEN; } GIVEN { ASSUME(gSpeciesInfo[standardSpecies].baseHP == 105); @@ -61,8 +61,8 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is healed above half") { u16 standardSpecies, zenSpecies; - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_ZEN_MODE; } - PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE; zenSpecies = SPECIES_DARMANITAN_GALARIAN_ZEN_MODE; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_STANDARD; zenSpecies = SPECIES_DARMANITAN_ZEN; } + PARAMETRIZE { standardSpecies = SPECIES_DARMANITAN_GALAR_STANDARD; zenSpecies = SPECIES_DARMANITAN_GALAR_ZEN; } GIVEN { ASSUME(gSpeciesInfo[standardSpecies].baseHP == 105); diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index a1d2096ff3..ed4d677d94 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -88,7 +88,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculati PLAYER(SPECIES_VENUSAUR) { Level(30); Moves(MOVE_TACKLE); } // Opponent party courtesy of Skolgrahd, who triggered the bug in the first place OPPONENT(SPECIES_PIKACHU) { Level(100); Moves(MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); } - OPPONENT(SPECIES_NINETALES_ALOLAN) { Level(100); Moves(MOVE_AURORA_VEIL, MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_DISABLE); } + OPPONENT(SPECIES_NINETALES_ALOLA) { Level(100); Moves(MOVE_AURORA_VEIL, MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_DISABLE); } OPPONENT(SPECIES_WEAVILE) { Level(100); Moves(MOVE_NIGHT_SLASH, MOVE_TRIPLE_AXEL, MOVE_ICE_SHARD, MOVE_FAKE_OUT); } OPPONENT(SPECIES_DITTO) { Level(100); Moves(MOVE_TRANSFORM); } OPPONENT(SPECIES_TYPHLOSION) { Level(100); Moves(MOVE_ERUPTION, MOVE_HEAT_WAVE, MOVE_FOCUS_BLAST, MOVE_EXTRASENSORY); } @@ -122,9 +122,9 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage GIVEN { ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_MON_CHOICES); - PLAYER(SPECIES_MEOWTH_GALARIAN) { Level(100); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } + PLAYER(SPECIES_MEOWTH_GALAR) { Level(100); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } // Scenario courtesy of Duke, who triggered the bug in the first place - OPPONENT(SPECIES_MEOWTH_GALARIAN) { Level(5); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } + OPPONENT(SPECIES_MEOWTH_GALAR) { Level(5); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); } OPPONENT(SPECIES_NOSEPASS) { Level(5); Moves(MOVE_DOUBLE_EDGE); } diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c index d4c8e2b1a0..2f057cc99b 100644 --- a/test/battle/crit_chance.c +++ b/test/battle/crit_chance.c @@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Signature items Leek and Lucky Punch increase t PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); PARAMETRIZE { species = SPECIES_FARFETCHD; item = ITEM_LEEK; } - PARAMETRIZE { species = SPECIES_FARFETCHD_GALARIAN; item = ITEM_LEEK; } + PARAMETRIZE { species = SPECIES_FARFETCHD_GALAR; item = ITEM_LEEK; } PARAMETRIZE { species = SPECIES_SIRFETCHD; item = ITEM_LEEK; } PARAMETRIZE { species = SPECIES_CHANSEY; item = ITEM_LUCKY_PUNCH; } diff --git a/test/battle/form_change/begin_battle.c b/test/battle/form_change/begin_battle.c index f240b5ca07..bee9c4fe6b 100644 --- a/test/battle/form_change/begin_battle.c +++ b/test/battle/form_change/begin_battle.c @@ -19,27 +19,27 @@ SINGLE_BATTLE_TEST("Zacian changes into its Crowned Form when holding the Rusted PARAMETRIZE { item = ITEM_NONE; } PARAMETRIZE { item = ITEM_RUSTED_SWORD; } GIVEN { - PLAYER(SPECIES_ZACIAN_HERO_OF_MANY_BATTLES) { Item(item); } + PLAYER(SPECIES_ZACIAN_HERO) { Item(item); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } THEN { if (item == ITEM_NONE) - EXPECT_EQ(player->species, SPECIES_ZACIAN_HERO_OF_MANY_BATTLES); + EXPECT_EQ(player->species, SPECIES_ZACIAN_HERO); else - EXPECT_EQ(player->species, SPECIES_ZACIAN_CROWNED_SWORD); + EXPECT_EQ(player->species, SPECIES_ZACIAN_CROWNED); } } SINGLE_BATTLE_TEST("Zacian's Iron Head becomes Behemoth Blade upon form change") { GIVEN { - PLAYER(SPECIES_ZACIAN_HERO_OF_MANY_BATTLES) { Item(ITEM_RUSTED_SWORD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } + PLAYER(SPECIES_ZACIAN_HERO) { Item(ITEM_RUSTED_SWORD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } THEN { - ASSUME(player->species == SPECIES_ZACIAN_CROWNED_SWORD); // Assumes form change worked. + ASSUME(player->species == SPECIES_ZACIAN_CROWNED); // Assumes form change worked. EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BLADE); } } @@ -50,27 +50,27 @@ SINGLE_BATTLE_TEST("Zamazenta changes into its Crowned Form when holding the Rus PARAMETRIZE { item = ITEM_NONE; } PARAMETRIZE { item = ITEM_RUSTED_SHIELD; } GIVEN { - PLAYER(SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES) { Item(item); } + PLAYER(SPECIES_ZAMAZENTA_HERO) { Item(item); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } THEN { if (item == ITEM_NONE) - EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES); + EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_HERO); else - EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_CROWNED_SHIELD); + EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_CROWNED); } } SINGLE_BATTLE_TEST("Zamazenta's Iron Head becomes Behemoth Bash upon form change") { GIVEN { - PLAYER(SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES) { Item(ITEM_RUSTED_SHIELD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } + PLAYER(SPECIES_ZAMAZENTA_HERO) { Item(ITEM_RUSTED_SHIELD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } THEN { - ASSUME(player->species == SPECIES_ZAMAZENTA_CROWNED_SHIELD); // Assumes form change worked. + ASSUME(player->species == SPECIES_ZAMAZENTA_CROWNED); // Assumes form change worked. EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BASH); } } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 3df3cc4cdf..036706190d 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -457,7 +457,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms change upon Dynamaxi u32 species; bool32 gigantamaxFactor; PARAMETRIZE { gigantamaxFactor = FALSE; species = SPECIES_VENUSAUR; } - PARAMETRIZE { gigantamaxFactor = TRUE; species = SPECIES_VENUSAUR_GIGANTAMAX; } + PARAMETRIZE { gigantamaxFactor = TRUE; species = SPECIES_VENUSAUR_GMAX; } GIVEN { PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(gigantamaxFactor); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 1b50bc4bcc..df4d5612f2 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -790,10 +790,10 @@ SINGLE_BATTLE_TEST("(TERA) Transformed pokemon can't Terastalize") SINGLE_BATTLE_TEST("(TERA) Pokemon with Tera forms change upon Terastallizing") { u32 species, targetSpecies; - PARAMETRIZE { species = SPECIES_OGERPON_TEAL_MASK; targetSpecies = SPECIES_OGERPON_TEAL_MASK_TERA; } - PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_MASK; targetSpecies = SPECIES_OGERPON_WELLSPRING_MASK_TERA; } - PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_MASK; targetSpecies = SPECIES_OGERPON_HEARTHFLAME_MASK_TERA; } - PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_MASK; targetSpecies = SPECIES_OGERPON_CORNERSTONE_MASK_TERA; } + PARAMETRIZE { species = SPECIES_OGERPON_TEAL; targetSpecies = SPECIES_OGERPON_TEAL_TERA; } + PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; targetSpecies = SPECIES_OGERPON_WELLSPRING_TERA; } + PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; targetSpecies = SPECIES_OGERPON_HEARTHFLAME_TERA; } + PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; targetSpecies = SPECIES_OGERPON_CORNERSTONE_TERA; } PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; targetSpecies = SPECIES_TERAPAGOS_STELLAR; } GIVEN { PLAYER(species); diff --git a/test/battle/hold_effect/ogerpon_mask.c b/test/battle/hold_effect/ogerpon_mask.c index 31fb0511f4..209b854d66 100644 --- a/test/battle/hold_effect/ogerpon_mask.c +++ b/test/battle/hold_effect/ogerpon_mask.c @@ -15,10 +15,10 @@ SINGLE_BATTLE_TEST("Ogerpon Masks increase the base power of moves by 20%", s16 { u32 species; u32 item; - PARAMETRIZE { species = SPECIES_OGERPON_TEAL_MASK; item = ITEM_NONE; } - PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_MASK; item = ITEM_CORNERSTONE_MASK; } - PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_MASK; item = ITEM_WELLSPRING_MASK; } - PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_MASK; item = ITEM_HEARTHFLAME_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_TEAL; item = ITEM_NONE; } + PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; item = ITEM_CORNERSTONE_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_WELLSPRING_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; item = ITEM_HEARTHFLAME_MASK; } GIVEN { ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); diff --git a/test/battle/hold_effect/protective_pads.c b/test/battle/hold_effect/protective_pads.c index 914118d2d8..22032112f4 100644 --- a/test/battle/hold_effect/protective_pads.c +++ b/test/battle/hold_effect/protective_pads.c @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Protective Pads doesn't reduce tough claws damage", s16 dama SINGLE_BATTLE_TEST("Protective Pads doesn't invalid unseen fist") { GIVEN { - PLAYER(SPECIES_URSHIFU_RAPID_STRIKE_STYLE) { Ability(ABILITY_UNSEEN_FIST); Item(ITEM_PROTECTIVE_PADS); } + PLAYER(SPECIES_URSHIFU_RAPID_STRIKE) { Ability(ABILITY_UNSEEN_FIST); Item(ITEM_PROTECTIVE_PADS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_TACKLE); } diff --git a/test/battle/hold_effect/restore_stats.c b/test/battle/hold_effect/restore_stats.c index fb455f47c6..2958cdacae 100644 --- a/test/battle/hold_effect/restore_stats.c +++ b/test/battle/hold_effect/restore_stats.c @@ -99,8 +99,8 @@ SINGLE_BATTLE_TEST("White Herb restores stats after all hits of a multi hit move u16 species; u16 ability; - PARAMETRIZE { species = SPECIES_SLIGGOO_HISUIAN; ability = ABILITY_GOOEY; } - PARAMETRIZE { species = SPECIES_DUGTRIO_ALOLAN; ability = ABILITY_TANGLING_HAIR; } + PARAMETRIZE { species = SPECIES_SLIGGOO_HISUI; ability = ABILITY_GOOEY; } + PARAMETRIZE { species = SPECIES_DUGTRIO_ALOLA; ability = ABILITY_TANGLING_HAIR; } GIVEN { ASSUME(gMovesInfo[MOVE_DUAL_WINGBEAT].strikeCount == 2); diff --git a/test/battle/move_effect/chilly_reception.c b/test/battle/move_effect/chilly_reception.c index 8b64a30f28..7e821abe3d 100644 --- a/test/battle/move_effect/chilly_reception.c +++ b/test/battle/move_effect/chilly_reception.c @@ -9,8 +9,8 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Chilly Reception sets up snow and switches the user out") { GIVEN { - PLAYER(SPECIES_SLOWKING_GALARIAN); - PLAYER(SPECIES_SLOWPOKE_GALARIAN); + PLAYER(SPECIES_SLOWKING_GALAR); + PLAYER(SPECIES_SLOWPOKE_GALAR); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CHILLY_RECEPTION); SEND_OUT(player, 1); } @@ -27,8 +27,8 @@ SINGLE_BATTLE_TEST("Chilly Reception sets up snow and switches the user out") SINGLE_BATTLE_TEST("Chilly Reception switches the user out, even if the weather does not change") { GIVEN { - PLAYER(SPECIES_SLOWKING_GALARIAN); - PLAYER(SPECIES_SLOWPOKE_GALARIAN); + PLAYER(SPECIES_SLOWKING_GALAR); + PLAYER(SPECIES_SLOWPOKE_GALAR); OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } } WHEN { TURN { MOVE(player, MOVE_CHILLY_RECEPTION); SEND_OUT(player, 1); } @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Chilly Reception switches the user out, even if the weather SINGLE_BATTLE_TEST("Chilly Reception does not switch the user out if no replacements") { GIVEN { - PLAYER(SPECIES_SLOWKING_GALARIAN); + PLAYER(SPECIES_SLOWKING_GALAR); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CHILLY_RECEPTION); } @@ -60,8 +60,8 @@ SINGLE_BATTLE_TEST("Chilly Reception does not switch the user out if no replacem SINGLE_BATTLE_TEST("Chilly Reception does not switch the user out if replacements fainted") { GIVEN { - PLAYER(SPECIES_SLOWKING_GALARIAN); - PLAYER(SPECIES_SLOWPOKE_GALARIAN) { HP(0); } + PLAYER(SPECIES_SLOWKING_GALAR); + PLAYER(SPECIES_SLOWPOKE_GALAR) { HP(0); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CHILLY_RECEPTION); } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Chilly Reception does not switch the user out if replacement SINGLE_BATTLE_TEST("Chilly Reception changes the weather, even if the user cannot switch out") { GIVEN { - PLAYER(SPECIES_SLOWKING_GALARIAN); + PLAYER(SPECIES_SLOWKING_GALAR); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CHILLY_RECEPTION); } diff --git a/test/battle/move_effect/explosion.c b/test/battle/move_effect/explosion.c index a45a465ba2..a0825aac62 100644 --- a/test/battle/move_effect/explosion.c +++ b/test/battle/move_effect/explosion.c @@ -127,7 +127,7 @@ SINGLE_BATTLE_TEST("Explosion does not trigger Destiny Bond") DOUBLE_BATTLE_TEST("Explosion boosted by Galvanize is correctly blocked by Volt Absorb") { GIVEN { - PLAYER(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + PLAYER(SPECIES_GEODUDE_ALOLA) { Ability(ABILITY_GALVANIZE); } PLAYER(SPECIES_WYNAUT) { HP(1); } OPPONENT(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); } diff --git a/test/battle/move_effect/gastro_acid.c b/test/battle/move_effect/gastro_acid.c index e4f1aa5354..b3ce378794 100644 --- a/test/battle/move_effect/gastro_acid.c +++ b/test/battle/move_effect/gastro_acid.c @@ -26,8 +26,8 @@ SINGLE_BATTLE_TEST("Gastro Acid fails if target has a banned ability") // Needs confirmation since those abilities can be suppressed by Neutralizing Gas // PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; } // PARAMETRIZE { species = SPECIES_WALKING_WAKE; ability = ABILITY_PROTOSYNTHESIS; } - PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; } - PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; } GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/ivy_cudgel.c b/test/battle/move_effect/ivy_cudgel.c index 1693c439c0..095f4d8eff 100644 --- a/test/battle/move_effect/ivy_cudgel.c +++ b/test/battle/move_effect/ivy_cudgel.c @@ -12,10 +12,10 @@ SINGLE_BATTLE_TEST("Ivy Cudgel changes the move type depending on the form of Og u16 ogerpon; u16 item; - PARAMETRIZE { species = SPECIES_BLASTOISE; ogerpon = SPECIES_OGERPON_TEAL_MASK; item = ITEM_NONE; } - PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_CORNERSTONE_MASK; item = ITEM_CORNERSTONE_MASK; } - PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_WELLSPRING_MASK; item = ITEM_WELLSPRING_MASK; } - PARAMETRIZE { species = SPECIES_VENUSAUR; ogerpon = SPECIES_OGERPON_HEARTHFLAME_MASK; item = ITEM_HEARTHFLAME_MASK; } + PARAMETRIZE { species = SPECIES_BLASTOISE; ogerpon = SPECIES_OGERPON_TEAL; item = ITEM_NONE; } + PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_CORNERSTONE; item = ITEM_CORNERSTONE_MASK; } + PARAMETRIZE { species = SPECIES_CHARIZARD; ogerpon = SPECIES_OGERPON_WELLSPRING; item = ITEM_WELLSPRING_MASK; } + PARAMETRIZE { species = SPECIES_VENUSAUR; ogerpon = SPECIES_OGERPON_HEARTHFLAME; item = ITEM_HEARTHFLAME_MASK; } GIVEN { PLAYER(ogerpon) { Item(item); } diff --git a/test/battle/move_effect/raging_bull.c b/test/battle/move_effect/raging_bull.c index 23b138ca41..7e72ca8273 100644 --- a/test/battle/move_effect/raging_bull.c +++ b/test/battle/move_effect/raging_bull.c @@ -143,9 +143,9 @@ SINGLE_BATTLE_TEST("Move Raging Bull changes it's type depending on the Tauros F u16 speciesPlayer; u16 speciesOpponent; - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_COMBAT_BREED; speciesOpponent = SPECIES_CHARIZARD; } - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_BLAZE_BREED; speciesOpponent = SPECIES_BLASTOISE; } - PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEAN_AQUA_BREED; speciesOpponent = SPECIES_VENUSAUR; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEA_COMBAT; speciesOpponent = SPECIES_CHARIZARD; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEA_BLAZE; speciesOpponent = SPECIES_BLASTOISE; } + PARAMETRIZE { speciesPlayer = SPECIES_TAUROS_PALDEA_AQUA; speciesOpponent = SPECIES_VENUSAUR; } GIVEN { PLAYER(speciesPlayer); diff --git a/test/battle/move_effect/role_play.c b/test/battle/move_effect/role_play.c index 46452ec3ff..cf82632fd8 100644 --- a/test/battle/move_effect/role_play.c +++ b/test/battle/move_effect/role_play.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Role Play fails if target has a banned ability") PARAMETRIZE { species = SPECIES_DARMANITAN; ability = ABILITY_ZEN_MODE; } PARAMETRIZE { species = SPECIES_DITTO; ability = ABILITY_IMPOSTER; } PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } - PARAMETRIZE { species = SPECIES_MUK_ALOLAN; ability = ABILITY_POWER_OF_ALCHEMY; } + PARAMETRIZE { species = SPECIES_MUK_ALOLA; ability = ABILITY_POWER_OF_ALCHEMY; } PARAMETRIZE { species = SPECIES_PASSIMIAN; ability = ABILITY_RECEIVER; } PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } diff --git a/test/battle/move_effect_secondary/freeze.c b/test/battle/move_effect_secondary/freeze.c index 1539c8a25b..45005cf5d7 100644 --- a/test/battle/move_effect_secondary/freeze.c +++ b/test/battle/move_effect_secondary/freeze.c @@ -90,11 +90,11 @@ SINGLE_BATTLE_TEST("Freezing Glare shouldn't freeze Psychic-types") #endif { GIVEN { - ASSUME(gSpeciesInfo[SPECIES_ARTICUNO_GALARIAN].types[0] == TYPE_PSYCHIC); + ASSUME(gSpeciesInfo[SPECIES_ARTICUNO_GALAR].types[0] == TYPE_PSYCHIC); ASSUME(MoveHasAdditionalEffect(MOVE_FREEZING_GLARE, MOVE_EFFECT_FREEZE_OR_FROSTBITE) == TRUE); ASSUME(gMovesInfo[MOVE_FREEZING_GLARE].type == TYPE_PSYCHIC); - PLAYER(SPECIES_ARTICUNO_GALARIAN); - OPPONENT(SPECIES_ARTICUNO_GALARIAN); + PLAYER(SPECIES_ARTICUNO_GALAR); + OPPONENT(SPECIES_ARTICUNO_GALAR); } WHEN { TURN { MOVE(player, MOVE_FREEZING_GLARE); } } SCENE { diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index c39bfbbb71..bb72efdcb7 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ELECTRIC_SEED); } - OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } } WHEN { TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); } } SCENE { diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index 5840f0310c..5508255afd 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffect == HOLD_EFFECT_SEEDS); ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_GRASSY_TERRAIN); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSY_SEED); } - OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } } WHEN { TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } } SCENE { diff --git a/test/battle/terrain/misty.c b/test/battle/terrain/misty.c index fbf04fcba9..d6fde8fb7d 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/terrain/misty.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffect == HOLD_EFFECT_SEEDS); ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_MISTY_TERRAIN); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MISTY_SEED); } - OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } } WHEN { TURN { MOVE(player, MOVE_MISTY_TERRAIN); } } SCENE { diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index 44a89598d2..9a015a2c89 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PSYCHIC_SEED); } - OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } } WHEN { TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } } SCENE { From 9a24c031bb21e5f9d198a93ef7b8acb66bbcdec7 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:48:54 -0700 Subject: [PATCH 259/544] Replaced copyright magic numbers in intro.c with constants (#2035) --- src/intro.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/intro.c b/src/intro.c index 195374bba0..02c3a1f948 100644 --- a/src/intro.c +++ b/src/intro.c @@ -112,6 +112,12 @@ extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; extern const struct SpriteTemplate gAncientPowerRockSpriteTemplate[]; +enum { + COPYRIGHT_INITIALIZE, + COPYRIGHT_START_FADE = 140, + COPYRIGHT_START_INTRO, +}; + #define TAG_VOLBEAT 1500 #define TAG_TORCHIC 1501 #define TAG_MANECTRIC 1502 @@ -1067,7 +1073,7 @@ static u8 SetUpCopyrightScreen(void) { switch (gMain.state) { - case 0: + case COPYRIGHT_INITIALIZE: SetVBlankCallback(NULL); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -1101,7 +1107,7 @@ static u8 SetUpCopyrightScreen(void) gMain.state++; GameCubeMultiBoot_Main(&gMultibootProgramStruct); break; - case 140: + case COPYRIGHT_START_FADE: GameCubeMultiBoot_Main(&gMultibootProgramStruct); if (gMultibootProgramStruct.gcmb_field_2 != 1) { @@ -1109,7 +1115,7 @@ static u8 SetUpCopyrightScreen(void) gMain.state++; } break; - case 141: + case COPYRIGHT_START_INTRO: if (UpdatePaletteFade()) break; CreateTask(Task_Scene1_Load, 0); From f082fe7e4290eeae4ab0d50912b6f1ea92ee4616 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:36:35 +0200 Subject: [PATCH 260/544] Fixes Hidden Power dynamic type bug (#5463) --- src/battle_main.c | 159 ++++++++++++++++++++++++---------------------- src/pokemon.c | 19 ------ 2 files changed, 84 insertions(+), 94 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index acc1249f36..6cb32782d9 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5829,8 +5829,9 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) type3 = TYPE_MYSTERY; } - if (moveEffect == EFFECT_WEATHER_BALL) + switch (moveEffect) { + case EFFECT_WEATHER_BALL: if (gMain.inBattle && WEATHER_HAS_EFFECT) { if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) @@ -5864,79 +5865,86 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) } return moveType; } - } - else if (moveEffect == EFFECT_HIDDEN_POWER) - { - u8 typeBits; - if (gMain.inBattle) + break; + case EFFECT_HIDDEN_POWER: { - typeBits = ((gBattleMons[battler].hpIV & 1) << 0) - | ((gBattleMons[battler].attackIV & 1) << 1) - | ((gBattleMons[battler].defenseIV & 1) << 2) - | ((gBattleMons[battler].speedIV & 1) << 3) - | ((gBattleMons[battler].spAttackIV & 1) << 4) - | ((gBattleMons[battler].spDefenseIV & 1) << 5); - } - else - { - typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) - | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) - | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) - | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) - | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) - | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); - } + u32 typeBits = 0; + if (gMain.inBattle) + { + typeBits = ((gBattleMons[battler].hpIV & 1) << 0) + | ((gBattleMons[battler].attackIV & 1) << 1) + | ((gBattleMons[battler].defenseIV & 1) << 2) + | ((gBattleMons[battler].speedIV & 1) << 3) + | ((gBattleMons[battler].spAttackIV & 1) << 4) + | ((gBattleMons[battler].spDefenseIV & 1) << 5); + } + else + { + typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) + | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) + | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) + | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) + | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) + | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); + } - // Subtract 6 instead of 1 below because 5 types are excluded (TYPE_NONE, TYPE_NORMAL, TYPE_MYSTERY, TYPE_FAIRY and TYPE_STELLAR) - // The final + 2 skips past TYPE_NONE and Normal. - moveType = ((NUMBER_OF_MON_TYPES - 6) * typeBits) / 63 + 2; - if (moveType >= TYPE_MYSTERY) - moveType++; - return (moveType | F_DYNAMIC_TYPE_IGNORE_PHYSICALITY); - } - else if (moveEffect == EFFECT_CHANGE_TYPE_ON_ITEM && holdEffect == gMovesInfo[move].argument) - { - return ItemId_GetSecondaryId(heldItem); - } - else if (moveEffect == EFFECT_REVELATION_DANCE && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) - { - u8 teraType; - if (GetActiveGimmick(battler) == GIMMICK_TERA && ((teraType = GetMonData(mon, MON_DATA_TERA_TYPE)) != TYPE_STELLAR)) - return teraType; - else if (type1 != TYPE_MYSTERY && !(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST && type1 == TYPE_FLYING)) - return type1; - else if (type2 != TYPE_MYSTERY && !(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST && type2 == TYPE_FLYING)) + // Subtract 6 instead of 1 below because 5 types are excluded (TYPE_NONE, TYPE_NORMAL, TYPE_MYSTERY, TYPE_FAIRY and TYPE_STELLAR) + // The final + 2 skips past TYPE_NONE and Normal. + moveType = ((NUMBER_OF_MON_TYPES - 6) * typeBits) / 63 + 2; + if (moveType >= TYPE_MYSTERY) + moveType++; + return ((moveType | F_DYNAMIC_TYPE_IGNORE_PHYSICALITY) & 0x3F); + } + break; + case EFFECT_CHANGE_TYPE_ON_ITEM: + if (holdEffect == gMovesInfo[move].argument) + return ItemId_GetSecondaryId(heldItem); + break; + case EFFECT_REVELATION_DANCE: + if (GetActiveGimmick(battler) != GIMMICK_Z_MOVE) + { + u32 teraType; + if (GetActiveGimmick(battler) == GIMMICK_TERA && ((teraType = GetMonData(mon, MON_DATA_TERA_TYPE)) != TYPE_STELLAR)) + return teraType; + else if (type1 != TYPE_MYSTERY && !(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST && type1 == TYPE_FLYING)) + return type1; + else if (type2 != TYPE_MYSTERY && !(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST && type2 == TYPE_FLYING)) + return type2; + else if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST) + return (B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY); + else if (type3 != TYPE_MYSTERY) + return type3; + else + return TYPE_MYSTERY; + } + break; + case EFFECT_RAGING_BULL: + switch (species) + { + case SPECIES_TAUROS_PALDEA_COMBAT: + case SPECIES_TAUROS_PALDEA_BLAZE: + case SPECIES_TAUROS_PALDEA_AQUA: return type2; - else if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST) - return (B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY); - else if (type3 != TYPE_MYSTERY) - return type3; - else - return TYPE_MYSTERY; - } - else if (moveEffect == EFFECT_RAGING_BULL - && (species == SPECIES_TAUROS_PALDEA_COMBAT - || species == SPECIES_TAUROS_PALDEA_BLAZE - || species == SPECIES_TAUROS_PALDEA_AQUA)) - { - return type2; - } - else if (moveEffect == EFFECT_IVY_CUDGEL - && (species == SPECIES_OGERPON_WELLSPRING || species == SPECIES_OGERPON_WELLSPRING_TERA - || species == SPECIES_OGERPON_HEARTHFLAME || species == SPECIES_OGERPON_HEARTHFLAME_TERA - || species == SPECIES_OGERPON_CORNERSTONE || species == SPECIES_OGERPON_CORNERSTONE_TERA)) - { - return type2; - } - else if (moveEffect == EFFECT_NATURAL_GIFT) - { + } + break; + case EFFECT_IVY_CUDGEL: + switch (species) + { + case SPECIES_OGERPON_WELLSPRING: + case SPECIES_OGERPON_HEARTHFLAME: + case SPECIES_OGERPON_CORNERSTONE: + case SPECIES_OGERPON_WELLSPRING_TERA: + case SPECIES_OGERPON_HEARTHFLAME_TERA: + case SPECIES_OGERPON_CORNERSTONE_TERA: + return type2; + } + break; + case EFFECT_NATURAL_GIFT: if (ItemId_GetPocket(heldItem) == POCKET_BERRIES) return gNaturalGiftTable[ITEM_TO_BERRY(heldItem)].type; else return moveType; - } - else if (moveEffect == EFFECT_TERRAIN_PULSE) - { + case EFFECT_TERRAIN_PULSE: if (gMain.inBattle) { if (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY)) @@ -5969,14 +5977,15 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) } return moveType; } - } - else if (moveEffect == EFFECT_TERA_BLAST && GetActiveGimmick(battler) == GIMMICK_TERA) - { - return GetMonData(mon, MON_DATA_TERA_TYPE); - } - else if (moveEffect == EFFECT_TERA_STARSTORM && species == SPECIES_TERAPAGOS_STELLAR) - { - return TYPE_STELLAR; + break; + case EFFECT_TERA_BLAST: + if (GetActiveGimmick(battler) == GIMMICK_TERA) + return GetMonData(mon, MON_DATA_TERA_TYPE); + break; + case EFFECT_TERA_STARSTORM: + if (species == SPECIES_TERAPAGOS_STELLAR) + return TYPE_STELLAR; + break; } if (moveType == TYPE_NORMAL diff --git a/src/pokemon.c b/src/pokemon.c index 3929303e70..91df0fc59f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6931,25 +6931,6 @@ void UpdateDaysPassedSinceFormChange(u16 days) } } -static inline u32 CalculateHiddenPowerType(struct Pokemon *mon) -{ - u32 typehp; - u32 type; - u8 typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) - | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) - | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) - | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) - | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) - | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); - - type = (15 * typeBits) / 63 + 2; - if (type >= TYPE_MYSTERY) - type++; - type |= 0xC0; - typehp = type & 0x3F; - return typehp; -} - u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) { u32 moveType = GetDynamicMoveType(mon, move, battler, NULL); From 44bf14e6fd7454056f5f8007290ab023752db97b Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 3 Oct 2024 03:52:59 -0500 Subject: [PATCH 261/544] =?UTF-8?q?Add=20functionality=20to=20Pok=C3=A9=20?= =?UTF-8?q?Flute=20and=20Town=20Map=20(#5405)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add functionality to Poké Flute and Town Map * Poke flute in-battle * Address reviews * Update item_use.c * Update battle_message.c * Update battle_script_commands.c * Update battle_script_commands.c * Update battle_script_commands.c * Update battle_script_commands.c * Update battle_script_commands.c * Update battle_script_commands.c --- asm/macros/battle_script.inc | 8 +++ data/battle_scripts_2.s | 20 +++++++ include/constants/battle_string_ids.h | 5 +- include/constants/items.h | 1 + include/item_use.h | 2 + include/strings.h | 3 + src/battle_ai_switch_items.c | 4 ++ src/battle_message.c | 6 ++ src/battle_script_commands.c | 81 +++++++++++++++++++++++++-- src/data/items.h | 5 +- src/item_use.c | 61 +++++++++++++++++++- src/strings.c | 3 + 12 files changed, 190 insertions(+), 9 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index d45487e644..f533853142 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1731,6 +1731,14 @@ .4byte \jumpInstr .endm + .macro checkpokeflute + callnative BS_CheckPokeFlute + .endm + + .macro waitfanfare + callnative BS_WaitFanfare + .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 be6c04e32e..b68a570664 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -25,6 +25,7 @@ gBattlescriptsForUsingItem:: .4byte BattleScript_ItemRestoreHP @ EFFECT_ITEM_REVIVE .4byte BattleScript_ItemRestorePP @ EFFECT_ITEM_RESTORE_PP .4byte BattleScript_ItemIncreaseAllStats @ EFFECT_ITEM_INCREASE_ALL_STATS + .4byte BattleScript_UsePokeFlute @ EFFECT_ITEM_USE_POKE_FLUTE .align 2 gBattlescriptsForSafariActions:: @@ -110,6 +111,25 @@ BattleScript_ItemIncreaseStat:: waitmessage B_WAIT_TIME_LONG end +BattleScript_UsePokeFlute:: + checkpokeflute + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 1, BattleScript_PokeFluteWakeUp + printstring STRINGID_POKEFLUTECATCHY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_PokeFluteEnd + +BattleScript_PokeFluteWakeUp:: + printstring STRINGID_POKEFLUTE + waitmessage B_WAIT_TIME_LONG + fanfare MUS_RG_POKE_FLUTE + waitfanfare + printstring STRINGID_MONHEARINGFLUTEAWOKE + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_PLAYER2 + waitstate +BattleScript_PokeFluteEnd:: + finishaction + BattleScript_ItemSetMist:: call BattleScript_UseItemMessage setmist diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 08c80248fe..1cb5657391 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -713,8 +713,11 @@ #define STRINGID_PKMNMADESHELLGLEAM 711 #define STRINGID_FICKLEBEAMDOUBLED 712 #define STRINGID_COMMANDERACTIVATES 713 +#define STRINGID_POKEFLUTECATCHY 714 +#define STRINGID_POKEFLUTE 715 +#define STRINGID_MONHEARINGFLUTEAWOKE 716 -#define BATTLESTRINGS_COUNT 714 +#define BATTLESTRINGS_COUNT 717 // 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/items.h b/include/constants/items.h index bc9fdf2dc4..c5bd7096a9 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -1077,6 +1077,7 @@ #define EFFECT_ITEM_REVIVE 9 #define EFFECT_ITEM_RESTORE_PP 10 #define EFFECT_ITEM_INCREASE_ALL_STATS 11 +#define EFFECT_ITEM_USE_POKE_FLUTE 12 // Enigma Berry dummy constant #define EFFECT_ITEM_ENIGMA_BERRY_EREADER 1 diff --git a/include/item_use.h b/include/item_use.h index c5a21862fd..d7871fd6f2 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -47,6 +47,8 @@ u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId); void FieldUseFunc_VsSeeker(u8 taskId); void Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker(u8 taskId); void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField); +void ItemUseOutOfBattle_PokeFlute(u8 taskId); +void ItemUseOutOfBattle_TownMap(u8 taskId); enum { BALL_THROW_UNABLE_TWO_MONS, diff --git a/include/strings.h b/include/strings.h index 84f87ff491..b1078bed0a 100644 --- a/include/strings.h +++ b/include/strings.h @@ -833,6 +833,9 @@ extern const u8 gText_UsedVar2WildRepelled[]; extern const u8 gText_BoxFull[]; extern const u8 gText_WontHaveEffect[]; extern const u8 gText_NextFusionMon[]; +extern const u8 gText_PlayedPokeFluteCatchy[]; +extern const u8 gText_PlayedPokeFlute[]; +extern const u8 gText_PokeFluteAwakenedMon[]; extern const u8 gText_LevelSymbol[]; extern const u8 gText_PkmnInfo[]; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 867d1ab29d..9731a6393b 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -2244,6 +2244,10 @@ static bool32 ShouldUseItem(u32 battler) if (gBattleStruct->itemPartyIndex[battler] != PARTY_SIZE) // Revive if possible. shouldUse = TRUE; break; + case EFFECT_ITEM_USE_POKE_FLUTE: + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + shouldUse = TRUE; + break; default: return FALSE; } diff --git a/src/battle_message.c b/src/battle_message.c index d90113b5ea..30f83b14c4 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -517,6 +517,9 @@ static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_ static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); +static const u8 sText_PlayedFluteCatchyTune[] = _("{B_PLAYER_NAME} played the {B_LAST_ITEM}.\pNow, that's a catchy tune!"); +static const u8 sText_PlayedThe[] = _("{B_PLAYER_NAME} played the\n{B_LAST_ITEM}."); +static const u8 sText_PkmnHearingFluteAwoke[] = _("The POKéMON hearing the FLUTE\nawoke!"); static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I'll do my best!"); // early declaration of strings @@ -1555,6 +1558,9 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ITEMWASUSEDUP - BATTLESTRINGS_TABLE_START] = sText_ItemWasUsedUp, [STRINGID_ATTACKERLOSTITSTYPE - BATTLESTRINGS_TABLE_START] = sText_AttackerLostItsType, [STRINGID_CLOAKEDINAHARSHLIGHT - BATTLESTRINGS_TABLE_START] = sText_PkmnIsCloakedInAHarshLight, + [STRINGID_POKEFLUTECATCHY - BATTLESTRINGS_TABLE_START] = sText_PlayedFluteCatchyTune, + [STRINGID_POKEFLUTE - BATTLESTRINGS_TABLE_START] = sText_PlayedThe, + [STRINGID_MONHEARINGFLUTEAWOKE - BATTLESTRINGS_TABLE_START] = sText_PkmnHearingFluteAwoke, }; const u16 gTrainerUsedItemStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9412d63088..ba963bc6aa 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12556,14 +12556,19 @@ static void Cmd_updatestatusicon(void) if (gBattleControllerExecFlags) return; - if (cmd->battler != BS_ATTACKER_WITH_PARTNER) + if (cmd->battler == BS_PLAYER2) { - battler = GetBattlerForBattleScript(cmd->battler); - BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); - MarkBattlerForControllerExec(battler); + for (battler = gBattleControllerExecFlags; battler < gBattlersCount; battler++) + { + if (!(gAbsentBattlerFlags & (1u << battler))) + { + BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); + MarkBattlerForControllerExec(battler); + } + } gBattlescriptCurrInstr = cmd->nextInstr; } - else + else if (cmd->battler == BS_ATTACKER_WITH_PARTNER) { battler = gBattlerAttacker; if (!(gAbsentBattlerFlags & (1u << battler))) @@ -12582,6 +12587,13 @@ static void Cmd_updatestatusicon(void) } gBattlescriptCurrInstr = cmd->nextInstr; } + else + { + battler = GetBattlerForBattleScript(cmd->battler); + BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); + MarkBattlerForControllerExec(battler); + gBattlescriptCurrInstr = cmd->nextInstr; + } } static void Cmd_setmist(void) @@ -17425,3 +17437,62 @@ void BS_JumpIfCommanderActive(void) else gBattlescriptCurrInstr = cmd->nextInstr; } + +static void UpdatePokeFlutePartyStatus(struct Pokemon* party, u8 position) +{ + s32 i; + u8 battler; + u32 monToCheck, status; + u16 species, abilityNum; + monToCheck = 0; + for (i = 0; i < PARTY_SIZE; i++) + { + species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); + abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); + status = GetMonData(&party[i], MON_DATA_STATUS); + if (species != SPECIES_NONE + && species != SPECIES_EGG + && status & AILMENT_FNT + && GetAbilityBySpecies(species, abilityNum) != ABILITY_SOUNDPROOF) + monToCheck |= (1 << i); + } + if (monToCheck) + { + battler = GetBattlerAtPosition(position); + status = 0; + BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, monToCheck, 4, &status); + MarkBattlerForControllerExec(battler); + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } +} + +void BS_CheckPokeFlute(void) +{ + NATIVE_ARGS(); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + + s32 i; + for (i = 0; i < gBattlersCount; i++) + { + if (GetBattlerAbility(i) != ABILITY_SOUNDPROOF) + { + gBattleMons[i].status1 &= ~STATUS1_SLEEP; + gBattleMons[i].status2 &= ~STATUS2_NIGHTMARE; + } + } + + UpdatePokeFlutePartyStatus(gPlayerParty, B_POSITION_PLAYER_LEFT); + UpdatePokeFlutePartyStatus(gEnemyParty, B_POSITION_OPPONENT_LEFT); + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_WaitFanfare(void) +{ + NATIVE_ARGS(); + + if (!IsFanfareTaskInactive()) + return; + + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/data/items.h b/src/data/items.h index 4c56c015b9..13bff20c4e 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -12262,7 +12262,7 @@ const struct Item gItemsInfo[] = .importance = 1, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_TownMap, .iconPic = gItemIcon_TownMap, .iconPalette = gItemIconPalette_TownMap, }, @@ -12442,7 +12442,8 @@ const struct Item gItemsInfo[] = .importance = 1, .pocket = POCKET_KEY_ITEMS, .type = ITEM_USE_BAG_MENU, - .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .fieldUseFunc = ItemUseOutOfBattle_PokeFlute, + .battleUsage = EFFECT_ITEM_USE_POKE_FLUTE, .iconPic = gItemIcon_PokeFlute, .iconPalette = gItemIconPalette_PokeFlute, }, diff --git a/src/item_use.c b/src/item_use.c index d38c4b1f98..c04d9b9911 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1284,7 +1284,7 @@ void ItemUseInBattle_BagMenu(u8 taskId) else { PlaySE(SE_SELECT); - if (!(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (ItemId_GetBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) + if (!ItemId_GetImportance(gSpecialVar_ItemId) && !(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (ItemId_GetBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) RemoveUsedItem(); ScheduleBgCopyTilemapToVram(2); if (!InBattlePyramid()) @@ -1499,4 +1499,63 @@ void Task_ItemUse_CloseMessageBoxAndReturnToField_VsSeeker(u8 taskId) Task_CloseCantUseKeyItemMessage(taskId); } +static void Task_DisplayPokeFluteMessage(u8 taskId) +{ + if (WaitFanfare(FALSE)) + { + if (gTasks[taskId].data[3] == 0) + DisplayItemMessage(taskId, FONT_NORMAL, gText_PokeFluteAwakenedMon, CloseItemMessage); + else + DisplayItemMessageOnField(taskId, gText_PokeFluteAwakenedMon, Task_CloseCantUseKeyItemMessage); + } +} + +static void Task_PlayPokeFlute(u8 taskId) +{ + PlayFanfareByFanfareNum(FANFARE_RG_POKE_FLUTE); + gTasks[taskId].func = Task_DisplayPokeFluteMessage; +} + +void ItemUseOutOfBattle_PokeFlute(u8 taskId) +{ + bool32 wokeSomeoneUp = FALSE; + u32 i; + + for (i = 0; i < CalculatePlayerPartyCount(); i++) + { + if (!ExecuteTableBasedItemEffect(&gPlayerParty[i], ITEM_AWAKENING, i, 0)) + wokeSomeoneUp = TRUE; + } + + if (wokeSomeoneUp) + { + if (gTasks[taskId].data[3] == 0) + DisplayItemMessage(taskId, FONT_NORMAL, gText_PlayedPokeFlute, Task_PlayPokeFlute); + else + DisplayItemMessageOnField(taskId, gText_PlayedPokeFlute, Task_PlayPokeFlute); + } + else + { + if (gTasks[taskId].data[3] == 0) + DisplayItemMessage(taskId, FONT_NORMAL, gText_PlayedPokeFluteCatchy, CloseItemMessage); + else + DisplayItemMessageOnField(taskId, gText_PlayedPokeFluteCatchy, Task_CloseCantUseKeyItemMessage); + } +} + +static void ItemUseOnFieldCB_TownMap(u8 taskId) +{ + LockPlayerFieldControls(); + ScriptContext_SetupScript(EventScript_RegionMap); + DestroyTask(taskId); +} + +void ItemUseOutOfBattle_TownMap(u8 taskId) +{ + sItemUseOnFieldCB = ItemUseOnFieldCB_TownMap; + gFieldCallback = FieldCB_UseItemOnField; + gBagMenu->newScreenCallback = CB2_ReturnToField; + Task_FadeAndCloseBagMenu(taskId); +} + #undef tUsingRegisteredKeyItem diff --git a/src/strings.c b/src/strings.c index 3f21f86c47..ff1dde2cce 100644 --- a/src/strings.c +++ b/src/strings.c @@ -196,6 +196,9 @@ const u8 gText_TheBattle[] = _("the battle"); const u8 gText_ThePokemonList[] = _("the POKéMON LIST"); const u8 gText_TheShop[] = _("the shop"); const u8 gText_ThePC[] = _("the PC"); +const u8 gText_PlayedPokeFluteCatchy[] = _("Played the POKé FLUTE.\pNow, that's a catchy tune!{PAUSE_UNTIL_PRESS}"); +const u8 gText_PlayedPokeFlute[] = _("Played the POKé FLUTE."); +const u8 gText_PokeFluteAwakenedMon[] = _("The POKé FLUTE awakened sleeping\nPOKéMON.{PAUSE_UNTIL_PRESS}"); const u8 *const gBagMenu_ReturnToStrings[] = { From be5f2e095e7fc0e45f33e87a3a83c4df53ff5a28 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Thu, 3 Oct 2024 07:01:18 -0400 Subject: [PATCH 262/544] fix duplicating flute glitch (#5436) Co-authored-by: ghoulslash --- include/party_menu.h | 1 + src/battle_controller_player.c | 4 ++-- src/party_menu.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/party_menu.h b/include/party_menu.h index a34f06cec6..abea29b6bb 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -102,5 +102,6 @@ void MoveDeleterForgetMove(void); void BufferMoveDeleterNicknameAndMove(void); void GetNumMovesSelectedMonHas(void); void MoveDeleterChooseMoveToForget(void); +bool32 IsItemFlute(u16 item); #endif // GUARD_PARTY_MENU_H diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index bcdab75081..8907d94733 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -387,8 +387,8 @@ static void HandleInputChooseAction(u32 battler) && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - // Return item to bag if partner had selected one. - if (gBattleResources->bufferA[battler][1] == B_ACTION_USE_ITEM) + // Return item to bag if partner had selected one (except flutes). + if (gBattleResources->bufferA[battler][1] == B_ACTION_USE_ITEM && !IsItemFlute(itemId)) { AddBagItem(itemId, 1); } diff --git a/src/party_menu.c b/src/party_menu.c index 32ccd6ca19..3fef465804 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4578,7 +4578,7 @@ static bool8 NotUsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item) return TRUE; } -static bool8 IsItemFlute(u16 item) +bool32 IsItemFlute(u16 item) { if (item == ITEM_BLUE_FLUTE || item == ITEM_RED_FLUTE || item == ITEM_YELLOW_FLUTE) return TRUE; From 077bbd34427a1d8a0e74db4fd73e80d55ef8db54 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 4 Oct 2024 04:11:54 +0200 Subject: [PATCH 263/544] Adds padding in AiLogicData (#5468) * Adds padding in AiLogicData * Update battle.h * Update battle.h * Update battle.h --- include/battle.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/battle.h b/include/battle.h index f463a2440b..245f08782b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -371,11 +371,12 @@ struct AiLogicData u8 moveLimitations[MAX_BATTLERS_COUNT]; u8 shouldSwitchIfBadMoves; // Because all available moves have no/little effect. Each bit per battler. u8 monToSwitchId[MAX_BATTLERS_COUNT]; // ID of the mon to switch. - bool8 weatherHasEffect; // The same as WEATHER_HAS_EFFECT. Stored here, so it's called only once. u8 mostSuitableMonId[MAX_BATTLERS_COUNT]; // Stores result of GetMostSuitableMonToSwitchInto, which decides which generic mon the AI would switch into if they decide to switch. This can be overruled by specific mons found in ShouldSwitch; the final resulting mon is stored in AI_monToSwitchIntoId. struct SwitchinCandidate switchinCandidate; // Struct used for deciding which mon to switch to in battle_ai_switch_items.c - bool8 ejectButtonSwitch; // Tracks whether current switch out was from Eject Button - bool8 ejectPackSwitch; // Tracks whether current switch out was from Eject Pack + u8 weatherHasEffect:1; // The same as WEATHER_HAS_EFFECT. Stored here, so it's called only once. + u8 ejectButtonSwitch:1; // Tracks whether current switch out was from Eject Button + u8 ejectPackSwitch:1; // Tracks whether current switch out was from Eject Pack + u8 padding:5; u8 shouldSwitch; // Stores result of ShouldSwitch, which decides whether a mon should be switched out }; From 91325e83c185700d5cc65ef2f01dbba4b9c61bd4 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:00:12 +0100 Subject: [PATCH 264/544] Fixes to Protosynthesis, Quark Drive, Beast Boost, Orichalcum Pulse, Hadron Engine (#5447) * Protosynthesis & Quark Drive interactions; Fixes to Beast Boost/Protosynthesis/Quark Drive stat tie priority, Orichalcum Pulse and Hadron Engine stat boost * Protosynthesis + Quark Drive tests * Update src/battle_util.c * Update src/battle_util.c * Update src/battle_util.c * Update src/battle_util.c * Update src/battle_util.c * Update src/battle_util.c --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- src/battle_main.c | 4 +- src/battle_script_commands.c | 5 +- src/battle_util.c | 40 ++++++--- test/battle/ability/protosynthesis.c | 125 ++++++++++++++++++++++++++- test/battle/ability/quark_drive.c | 106 +++++++++++++++++++++++ 5 files changed, 260 insertions(+), 20 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index a9336c3f8b..3f4f140f65 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4743,9 +4743,9 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) speed *= 2; else if (ability == ABILITY_SLOW_START && gDisableStructs[battler].slowStartTimer != 0) speed /= 2; - else if (ability == ABILITY_PROTOSYNTHESIS && (gBattleWeather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battler])) + else if (ability == ABILITY_PROTOSYNTHESIS && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && ((gBattleWeather & B_WEATHER_SUN && WEATHER_HAS_EFFECT) || gBattleStruct->boosterEnergyActivates & (1u << battler))) speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; - else if (ability == ABILITY_QUARK_DRIVE && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battler])) + else if (ability == ABILITY_QUARK_DRIVE && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battler))) speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; // stat stages diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index aa92a7b884..f16ee0bf76 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8777,12 +8777,15 @@ u32 GetHighestStatId(u32 battler) for (i = STAT_DEF; i < NUM_STATS; i++) { u16 *statVal = &gBattleMons[battler].attack + (i - 1); - if (*statVal > highestStat) + if (*statVal > highestStat && i != STAT_SPEED) { highestStat = *statVal; highestId = i; } } + if (gBattleMons[battler].speed > highestStat) + highestId = STAT_SPEED; + return highestId; } diff --git a/src/battle_util.c b/src/battle_util.c index 86e846d09c..2e463eaf58 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6329,7 +6329,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_PROTOSYNTHESIS: - if (!gDisableStructs[battler].weatherAbilityDone && IsBattlerWeatherAffected(battler, B_WEATHER_SUN)) + if (!gDisableStructs[battler].weatherAbilityDone + && (gBattleWeather & B_WEATHER_SUN) && WEATHER_HAS_EFFECT + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + && !(gBattleStruct->boosterEnergyActivates & (1u << battler))) { gDisableStructs[battler].weatherAbilityDone = TRUE; PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); @@ -6355,7 +6358,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_QUARK_DRIVE: - if (!gDisableStructs[battler].terrainAbilityDone && IsBattlerTerrainAffected(battler, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (!gDisableStructs[battler].terrainAbilityDone + && gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + && !(gBattleStruct->boosterEnergyActivates & (1u << battler))) { gDisableStructs[battler].terrainAbilityDone = TRUE; PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); @@ -7594,7 +7600,8 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_BOOSTER_ENERGY: if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler]) - && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN)) + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !((gBattleWeather & B_WEATHER_SUN) && WEATHER_HAS_EFFECT)) || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)))) { PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); @@ -7861,7 +7868,8 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_BOOSTER_ENERGY: if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler]) - && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN)) + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) + && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !((gBattleWeather & B_WEATHER_SUN) && WEATHER_HAS_EFFECT)) || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)))) { PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); @@ -9285,25 +9293,27 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_PROTOSYNTHESIS: { u8 atkHighestStat = GetHighestStatId(battlerAtk); - if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerAtk]) - && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK))) + if (((weather & B_WEATHER_SUN && WEATHER_HAS_EFFECT) || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) + && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK)) + && !(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); } break; case ABILITY_QUARK_DRIVE: { u8 atkHighestStat = GetHighestStatId(battlerAtk); - if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerAtk]) - && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK))) + if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) + && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK)) + && !(gBattleMons[battlerAtk].status2 & STATUS2_TRANSFORMED)) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); } break; case ABILITY_ORICHALCUM_PULSE: - if (weather & B_WEATHER_SUN) + if (weather & B_WEATHER_SUN && WEATHER_HAS_EFFECT && IS_MOVE_PHYSICAL(move)) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); break; case ABILITY_HADRON_ENGINE: - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && IS_MOVE_SPECIAL(move)) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); break; case ABILITY_SHARPNESS: @@ -9363,16 +9373,18 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_PROTOSYNTHESIS: { u8 defHighestStat = GetHighestStatId(battlerDef); - if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerDef]) - && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF))) + if (((weather & B_WEATHER_SUN && WEATHER_HAS_EFFECT) || gBattleStruct->boosterEnergyActivates & (1u << battlerDef)) + && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF)) + && !(gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED)) modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); } break; case ABILITY_QUARK_DRIVE: { u8 defHighestStat = GetHighestStatId(battlerDef); - if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerDef]) - && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF))) + if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battlerDef)) + && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF)) + && !(gBattleMons[battlerDef].status2 & STATUS2_TRANSFORMED)) modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); } break; diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c index 58f10b366f..2be9f81d28 100644 --- a/test/battle/ability/protosynthesis.c +++ b/test/battle/ability/protosynthesis.c @@ -100,6 +100,125 @@ SINGLE_BATTLE_TEST("Protosynthesis activates on switch-in") } } -TO_DO_BATTLE_TEST("Protosynthesis activates in sun before Booster Energy"); -TO_DO_BATTLE_TEST("Protosynthesis activates even if the Pokémon is holding an Utility Umbrella"); -TO_DO_BATTLE_TEST("Protosynthesis doesn't activate if Cloud Nine/Air Lock is on the field"); +SINGLE_BATTLE_TEST("Protosynthesis boosts Attack 1st in case of a stat tie") +{ + GIVEN { + PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Attack(5); Defense(5); SpAttack(5); SpDefense(5); Speed(5); } + OPPONENT(SPECIES_GROUDON) { Ability(ABILITY_DROUGHT); Speed(5); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); + MESSAGE("Great Tusk's Attack was heightened!"); + } +} + +SINGLE_BATTLE_TEST("Protosynthesis boosts Defense 2nd in case of a stat tie") +{ + GIVEN { + PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Attack(4); Defense(5); SpAttack(5); SpDefense(5); Speed(5); } + OPPONENT(SPECIES_GROUDON) { Ability(ABILITY_DROUGHT); Speed(5); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); + MESSAGE("Great Tusk's Defense was heightened!"); + } +} + +SINGLE_BATTLE_TEST("Protosynthesis boosts Special Attack 3rd in case of a stat tie") +{ + GIVEN { + PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Attack(4); Defense(4); SpAttack(5); SpDefense(5); Speed(5); } + OPPONENT(SPECIES_GROUDON) { Ability(ABILITY_DROUGHT); Speed(5); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); + MESSAGE("Great Tusk's Sp. Atk was heightened!"); + } +} + +SINGLE_BATTLE_TEST("Protosynthesis boosts Special Defense 4th in case of a stat tie") +{ + GIVEN { + PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Attack(4); Defense(4); SpAttack(4); SpDefense(5); Speed(5); } + OPPONENT(SPECIES_GROUDON) { Ability(ABILITY_DROUGHT); Speed(5); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); + MESSAGE("Great Tusk's Sp. Def was heightened!"); + } +} + +SINGLE_BATTLE_TEST("Protosynthesis activates in Sun before Booster Energy") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); } + OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); } + } WHEN { + TURN { SWITCH(player, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); + } THEN { + EXPECT_EQ(player->item, ITEM_BOOSTER_ENERGY); + } +} + +SINGLE_BATTLE_TEST("Protosynthesis doesn't activate for a transformed battler") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); } + OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); Item(ITEM_BOOSTER_ENERGY); } + } WHEN { + TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TRANSFORM); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponent); + NOT ABILITY_POPUP(opponent, ABILITY_PROTOSYNTHESIS); + } THEN { + EXPECT_EQ(player->item, ITEM_BOOSTER_ENERGY); + EXPECT_EQ(opponent->item, ITEM_BOOSTER_ENERGY); + EXPECT_EQ(opponent->ability, ABILITY_PROTOSYNTHESIS); + } +} + +SINGLE_BATTLE_TEST("Protosynthesis activates even if the Pokémon is holding an Utility Umbrella") +{ + GIVEN { + PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_UTILITY_UMBRELLA); } + OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DROUGHT); + ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); + } +} + +SINGLE_BATTLE_TEST("Protosynthesis doesn't activate if Cloud Nine/Air Lock is on the field") +{ + u32 species, ability; + PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } + PARAMETRIZE { species = SPECIES_GOLDUCK; ability = ABILITY_CLOUD_NINE; } + + GIVEN { + PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); } + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(opponent, MOVE_SUNNY_DAY); } + } SCENE { + ABILITY_POPUP(opponent, ability); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent); + NOT ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); + } +} diff --git a/test/battle/ability/quark_drive.c b/test/battle/ability/quark_drive.c index 4e81b012ae..928ee45eb5 100644 --- a/test/battle/ability/quark_drive.c +++ b/test/battle/ability/quark_drive.c @@ -100,3 +100,109 @@ SINGLE_BATTLE_TEST("Quark Drive activates on switch-in") MESSAGE("Iron Moth's Sp. Atk was heightened!"); } } + +SINGLE_BATTLE_TEST("Quark Drive activates on Electric Terrain even if not grounded") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_IRON_JUGULIS].types[0] == TYPE_FLYING || gSpeciesInfo[SPECIES_IRON_JUGULIS].types[1] == TYPE_FLYING); + PLAYER(SPECIES_IRON_JUGULIS) { Ability(ABILITY_QUARK_DRIVE); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); + } +} + +SINGLE_BATTLE_TEST("Quark Drive boosts Attack 1st in case of a stat tie") +{ + GIVEN { + PLAYER(SPECIES_IRON_TREADS) { Ability(ABILITY_QUARK_DRIVE); Attack(5); Defense(5); SpAttack(5); SpDefense(5); Speed(5); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Speed(5); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); + MESSAGE("Iron Treads's Attack was heightened!"); + } +} + +SINGLE_BATTLE_TEST("Quark Drive boosts Defense 2nd in case of a stat tie") +{ + GIVEN { + PLAYER(SPECIES_IRON_TREADS) { Ability(ABILITY_QUARK_DRIVE); Attack(4); Defense(5); SpAttack(5); SpDefense(5); Speed(5); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Speed(5); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); + MESSAGE("Iron Treads's Defense was heightened!"); + } +} + +SINGLE_BATTLE_TEST("Quark Drive boosts Special Attack 3rd in case of a stat tie") +{ + GIVEN { + PLAYER(SPECIES_IRON_TREADS) { Ability(ABILITY_QUARK_DRIVE); Attack(4); Defense(4); SpAttack(5); SpDefense(5); Speed(5); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Speed(5); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); + MESSAGE("Iron Treads's Sp. Atk was heightened!"); + } +} + +SINGLE_BATTLE_TEST("Quark Drive boosts Special Defense 4th in case of a stat tie") +{ + GIVEN { + PLAYER(SPECIES_IRON_TREADS) { Ability(ABILITY_QUARK_DRIVE); Attack(4); Defense(4); SpAttack(4); SpDefense(5); Speed(5); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Speed(5); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); + MESSAGE("Iron Treads's Sp. Def was heightened!"); + } +} + +SINGLE_BATTLE_TEST("Quark Drive activates in Electric Terrain before Booster Energy") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_IRON_TREADS) { Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } + } WHEN { + TURN { SWITCH(player, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); + } THEN { + EXPECT_EQ(player->item, ITEM_BOOSTER_ENERGY); + } +} + +SINGLE_BATTLE_TEST("Quark Drive doesn't activate for a transformed battler") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_IRON_TREADS) { Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Item(ITEM_BOOSTER_ENERGY); } + } WHEN { + TURN { SWITCH(player, 1); MOVE(opponent, MOVE_TRANSFORM); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponent); + NOT ABILITY_POPUP(opponent, ABILITY_QUARK_DRIVE); + } THEN { + EXPECT_EQ(player->item, ITEM_BOOSTER_ENERGY); + EXPECT_EQ(opponent->item, ITEM_BOOSTER_ENERGY); + EXPECT_EQ(opponent->ability, ABILITY_QUARK_DRIVE); + } +} From 19009c6d21ea9eaa9379b49aae8f5d5b10de8a5f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 4 Oct 2024 10:56:21 -0500 Subject: [PATCH 265/544] Add support for overworld sprite gender differences + add all the sprites (#5394) --- graphics/pokemon/abomasnow/overworldf.png | Bin 0 -> 1120 bytes graphics/pokemon/aipom/overworldf.png | Bin 0 -> 848 bytes graphics/pokemon/alakazam/overworldf.png | Bin 0 -> 842 bytes graphics/pokemon/ambipom/overworld.png | Bin 1286 -> 1233 bytes graphics/pokemon/ambipom/overworldf.png | Bin 0 -> 1286 bytes graphics/pokemon/beautifly/overworld.png | Bin 1122 -> 997 bytes graphics/pokemon/beautifly/overworldf.png | Bin 0 -> 1122 bytes graphics/pokemon/bibarel/overworld.png | Bin 924 -> 894 bytes graphics/pokemon/bibarel/overworldf.png | Bin 0 -> 924 bytes graphics/pokemon/bidoof/overworld.png | Bin 718 -> 626 bytes graphics/pokemon/bidoof/overworldf.png | Bin 0 -> 718 bytes graphics/pokemon/blaziken/overworldf.png | Bin 0 -> 963 bytes graphics/pokemon/buizel/overworldf.png | Bin 0 -> 801 bytes graphics/pokemon/butterfree/overworld.png | Bin 1053 -> 911 bytes .../pokemon/butterfree/overworld_normal.pal | 2 +- .../pokemon/butterfree/overworld_shiny.pal | 2 +- graphics/pokemon/butterfree/overworldf.png | Bin 0 -> 911 bytes graphics/pokemon/cacturne/overworldf.png | Bin 0 -> 644 bytes graphics/pokemon/camerupt/overworldf.png | Bin 0 -> 1081 bytes graphics/pokemon/combee/followerf.png | Bin 491 -> 0 bytes graphics/pokemon/combee/overworld.png | Bin 702 -> 578 bytes graphics/pokemon/combee/overworld_normal.pal | 2 +- graphics/pokemon/combee/overworld_shiny.pal | 2 +- graphics/pokemon/combee/overworldf.png | Bin 0 -> 549 bytes graphics/pokemon/combusken/overworld.png | Bin 762 -> 649 bytes graphics/pokemon/combusken/overworldf.png | Bin 0 -> 762 bytes graphics/pokemon/croagunk/overworldf.png | Bin 0 -> 581 bytes graphics/pokemon/dodrio/overworldf.png | Bin 0 -> 1175 bytes graphics/pokemon/doduo/overworldf.png | Bin 0 -> 569 bytes graphics/pokemon/donphan/overworldf.png | Bin 0 -> 803 bytes graphics/pokemon/dustox/overworldf.png | Bin 0 -> 846 bytes graphics/pokemon/eevee/overworldf.png | Bin 0 -> 637 bytes graphics/pokemon/finneon/overworldf.png | Bin 0 -> 657 bytes graphics/pokemon/floatzel/overworldf.png | Bin 0 -> 991 bytes .../pokemon/frillish/overworld_normalf.pal | 19 ++ .../pokemon/frillish/overworld_shinyf.pal | 19 ++ .../{followerf.png => overworldf.png} | Bin graphics/pokemon/gabite/overworldf.png | Bin 0 -> 880 bytes graphics/pokemon/garchomp/overworldf.png | Bin 0 -> 1253 bytes graphics/pokemon/gible/overworldf.png | Bin 0 -> 681 bytes graphics/pokemon/girafarig/overworldf.png | Bin 0 -> 814 bytes graphics/pokemon/gligar/overworldf.png | Bin 0 -> 994 bytes graphics/pokemon/gloom/overworldf.png | Bin 0 -> 550 bytes graphics/pokemon/golbat/overworld.png | Bin 859 -> 866 bytes graphics/pokemon/golbat/overworldf.png | Bin 0 -> 859 bytes graphics/pokemon/goldeen/overworldf.png | Bin 0 -> 856 bytes graphics/pokemon/gulpin/overworldf.png | Bin 0 -> 586 bytes graphics/pokemon/gyarados/overworld.png | Bin 1650 -> 1571 bytes graphics/pokemon/gyarados/overworldf.png | Bin 0 -> 1650 bytes graphics/pokemon/heracross/overworldf.png | Bin 0 -> 923 bytes graphics/pokemon/hippopotas/followerf.png | Bin 628 -> 0 bytes graphics/pokemon/hippopotas/overworldf.png | Bin 0 -> 724 bytes graphics/pokemon/hippowdon/followerf.png | Bin 701 -> 0 bytes .../pokemon/hippowdon/overworld_normalf.pal | 19 ++ .../pokemon/hippowdon/overworld_shinyf.pal | 19 ++ graphics/pokemon/houndoom/overworldf.png | Bin 0 -> 847 bytes graphics/pokemon/hypno/overworldf.png | Bin 0 -> 767 bytes graphics/pokemon/jellicent/followerf.png | Bin 742 -> 0 bytes .../pokemon/jellicent/overworld_normalf.pal | 19 ++ .../pokemon/jellicent/overworld_shinyf.pal | 19 ++ graphics/pokemon/jellicent/overworldf.png | Bin 0 -> 759 bytes graphics/pokemon/kadabra/overworldf.png | Bin 0 -> 840 bytes graphics/pokemon/kricketot/overworldf.png | Bin 0 -> 580 bytes graphics/pokemon/kricketune/overworldf.png | Bin 0 -> 935 bytes graphics/pokemon/ledian/overworldf.png | Bin 0 -> 958 bytes graphics/pokemon/ledyba/overworldf.png | Bin 0 -> 986 bytes graphics/pokemon/ludicolo/overworld.png | Bin 1019 -> 884 bytes graphics/pokemon/ludicolo/overworldf.png | Bin 0 -> 1019 bytes graphics/pokemon/lumineon/overworldf.png | Bin 0 -> 847 bytes graphics/pokemon/luxio/overworldf.png | Bin 0 -> 803 bytes graphics/pokemon/luxray/overworldf.png | Bin 0 -> 868 bytes graphics/pokemon/magikarp/overworld.png | Bin 1003 -> 895 bytes graphics/pokemon/magikarp/overworldf.png | Bin 0 -> 1003 bytes graphics/pokemon/mamoswine/overworldf.png | Bin 0 -> 881 bytes graphics/pokemon/medicham/overworldf.png | Bin 0 -> 742 bytes graphics/pokemon/meditite/overworld.png | Bin 693 -> 596 bytes graphics/pokemon/meditite/overworldf.png | Bin 0 -> 693 bytes graphics/pokemon/meganium/overworldf.png | Bin 0 -> 905 bytes graphics/pokemon/milotic/overworldf.png | Bin 0 -> 1091 bytes graphics/pokemon/murkrow/overworld.png | Bin 674 -> 596 bytes graphics/pokemon/murkrow/overworldf.png | Bin 0 -> 674 bytes graphics/pokemon/numel/overworldf.png | Bin 0 -> 884 bytes graphics/pokemon/nuzleaf/overworldf.png | Bin 0 -> 676 bytes graphics/pokemon/octillery/overworldf.png | Bin 0 -> 758 bytes graphics/pokemon/pachirisu/overworldf.png | Bin 0 -> 592 bytes graphics/pokemon/pikachu/overworldf.png | Bin 0 -> 605 bytes graphics/pokemon/piloswine/overworldf.png | Bin 0 -> 692 bytes graphics/pokemon/politoed/overworldf.png | Bin 0 -> 761 bytes graphics/pokemon/pyroar/followerf.png | Bin 733 -> 0 bytes graphics/pokemon/pyroar/overworldf.png | Bin 0 -> 679 bytes graphics/pokemon/quagsire/overworld.png | Bin 787 -> 662 bytes graphics/pokemon/quagsire/overworldf.png | Bin 0 -> 787 bytes graphics/pokemon/raichu/overworldf.png | Bin 0 -> 852 bytes graphics/pokemon/raticate/overworldf.png | Bin 0 -> 651 bytes graphics/pokemon/rattata/overworldf.png | Bin 0 -> 584 bytes graphics/pokemon/relicanth/overworldf.png | Bin 0 -> 925 bytes graphics/pokemon/rhydon/overworldf.png | Bin 0 -> 893 bytes graphics/pokemon/rhyhorn/overworldf.png | Bin 0 -> 760 bytes graphics/pokemon/rhyperior/overworldf.png | Bin 0 -> 1055 bytes graphics/pokemon/roselia/overworld.png | Bin 472 -> 510 bytes graphics/pokemon/roselia/overworldf.png | Bin 0 -> 520 bytes graphics/pokemon/roserade/overworldf.png | Bin 0 -> 812 bytes graphics/pokemon/scizor/overworldf.png | Bin 0 -> 968 bytes graphics/pokemon/scyther/overworldf.png | Bin 0 -> 855 bytes graphics/pokemon/seaking/overworldf.png | Bin 0 -> 1114 bytes graphics/pokemon/shiftry/overworld.png | Bin 986 -> 970 bytes graphics/pokemon/shiftry/overworldf.png | Bin 0 -> 986 bytes graphics/pokemon/shinx/overworldf.png | Bin 0 -> 642 bytes .../pokemon/sneasel/hisuian/overworldf.png | Bin 0 -> 616 bytes graphics/pokemon/sneasel/overworldf.png | Bin 0 -> 632 bytes graphics/pokemon/snover/overworldf.png | Bin 0 -> 781 bytes graphics/pokemon/staraptor/overworldf.png | Bin 0 -> 1187 bytes graphics/pokemon/staravia/overworldf.png | Bin 0 -> 1032 bytes graphics/pokemon/starly/overworldf.png | Bin 0 -> 534 bytes graphics/pokemon/steelix/overworldf.png | Bin 0 -> 1549 bytes graphics/pokemon/sudowoodo/overworldf.png | Bin 0 -> 702 bytes graphics/pokemon/swalot/overworld.png | Bin 971 -> 858 bytes graphics/pokemon/swalot/overworldf.png | Bin 0 -> 971 bytes graphics/pokemon/tangrowth/overworldf.png | Bin 0 -> 1107 bytes graphics/pokemon/torchic/overworld.png | Bin 408 -> 445 bytes graphics/pokemon/torchic/overworld_normal.pal | 2 +- graphics/pokemon/torchic/overworld_shiny.pal | 2 +- graphics/pokemon/torchic/overworldf.png | Bin 0 -> 442 bytes graphics/pokemon/toxicroak/overworldf.png | Bin 0 -> 726 bytes .../pokemon/unfezant/overworld_normalf.pal | 19 ++ .../pokemon/unfezant/overworld_shinyf.pal | 19 ++ .../{followerf.png => overworldf.png} | Bin graphics/pokemon/unfezant_f/overworld.png | Bin 891 -> 0 bytes graphics/pokemon/ursaring/overworldf.png | Bin 0 -> 918 bytes graphics/pokemon/venusaur/overworldf.png | Bin 0 -> 854 bytes graphics/pokemon/vileplume/overworldf.png | Bin 0 -> 655 bytes graphics/pokemon/weavile/overworldf.png | Bin 0 -> 728 bytes graphics/pokemon/wobbuffet/overworld.png | Bin 690 -> 588 bytes .../pokemon/wobbuffet/overworld_normal.pal | 4 +- .../pokemon/wobbuffet/overworld_shiny.pal | 4 +- graphics/pokemon/wobbuffet/overworldf.png | Bin 0 -> 564 bytes graphics/pokemon/wooper/overworldf.png | Bin 0 -> 456 bytes graphics/pokemon/xatu/overworld.png | Bin 743 -> 717 bytes graphics/pokemon/xatu/overworldf.png | Bin 0 -> 743 bytes graphics/pokemon/zubat/overworld.png | Bin 702 -> 668 bytes graphics/pokemon/zubat/overworldf.png | Bin 0 -> 702 bytes include/pokemon.h | 3 + spritesheet_rules.mk | 297 +++++++++++++++++ src/data/graphics/pokemon.h | 313 ++++++++++++++++-- .../object_event_pic_tables_followers.h | 285 +++++++++++++++- src/data/pokemon/species_info.h | 29 ++ .../pokemon/species_info/gen_1_families.h | 168 ++++++++++ .../pokemon/species_info/gen_2_families.h | 138 ++++++++ .../pokemon/species_info/gen_3_families.h | 114 +++++++ .../pokemon/species_info/gen_4_families.h | 148 +++++++++ .../pokemon/species_info/gen_5_families.h | 24 ++ .../pokemon/species_info/gen_6_families.h | 6 + src/event_object_movement.c | 64 +++- src/pokemon.c | 2 +- src/pokemon_sprite_visualizer.c | 5 +- 155 files changed, 1706 insertions(+), 62 deletions(-) create mode 100644 graphics/pokemon/abomasnow/overworldf.png create mode 100644 graphics/pokemon/aipom/overworldf.png create mode 100644 graphics/pokemon/alakazam/overworldf.png create mode 100644 graphics/pokemon/ambipom/overworldf.png create mode 100644 graphics/pokemon/beautifly/overworldf.png create mode 100644 graphics/pokemon/bibarel/overworldf.png create mode 100644 graphics/pokemon/bidoof/overworldf.png create mode 100644 graphics/pokemon/blaziken/overworldf.png create mode 100644 graphics/pokemon/buizel/overworldf.png create mode 100644 graphics/pokemon/butterfree/overworldf.png create mode 100644 graphics/pokemon/cacturne/overworldf.png create mode 100644 graphics/pokemon/camerupt/overworldf.png delete mode 100644 graphics/pokemon/combee/followerf.png create mode 100644 graphics/pokemon/combee/overworldf.png create mode 100644 graphics/pokemon/combusken/overworldf.png create mode 100644 graphics/pokemon/croagunk/overworldf.png create mode 100644 graphics/pokemon/dodrio/overworldf.png create mode 100644 graphics/pokemon/doduo/overworldf.png create mode 100644 graphics/pokemon/donphan/overworldf.png create mode 100644 graphics/pokemon/dustox/overworldf.png create mode 100644 graphics/pokemon/eevee/overworldf.png create mode 100644 graphics/pokemon/finneon/overworldf.png create mode 100644 graphics/pokemon/floatzel/overworldf.png create mode 100644 graphics/pokemon/frillish/overworld_normalf.pal create mode 100644 graphics/pokemon/frillish/overworld_shinyf.pal rename graphics/pokemon/frillish/{followerf.png => overworldf.png} (100%) create mode 100644 graphics/pokemon/gabite/overworldf.png create mode 100644 graphics/pokemon/garchomp/overworldf.png create mode 100644 graphics/pokemon/gible/overworldf.png create mode 100644 graphics/pokemon/girafarig/overworldf.png create mode 100644 graphics/pokemon/gligar/overworldf.png create mode 100644 graphics/pokemon/gloom/overworldf.png create mode 100644 graphics/pokemon/golbat/overworldf.png create mode 100644 graphics/pokemon/goldeen/overworldf.png create mode 100644 graphics/pokemon/gulpin/overworldf.png create mode 100644 graphics/pokemon/gyarados/overworldf.png create mode 100644 graphics/pokemon/heracross/overworldf.png delete mode 100644 graphics/pokemon/hippopotas/followerf.png create mode 100644 graphics/pokemon/hippopotas/overworldf.png delete mode 100644 graphics/pokemon/hippowdon/followerf.png create mode 100644 graphics/pokemon/hippowdon/overworld_normalf.pal create mode 100644 graphics/pokemon/hippowdon/overworld_shinyf.pal create mode 100644 graphics/pokemon/houndoom/overworldf.png create mode 100644 graphics/pokemon/hypno/overworldf.png delete mode 100644 graphics/pokemon/jellicent/followerf.png create mode 100644 graphics/pokemon/jellicent/overworld_normalf.pal create mode 100644 graphics/pokemon/jellicent/overworld_shinyf.pal create mode 100644 graphics/pokemon/jellicent/overworldf.png create mode 100644 graphics/pokemon/kadabra/overworldf.png create mode 100644 graphics/pokemon/kricketot/overworldf.png create mode 100644 graphics/pokemon/kricketune/overworldf.png create mode 100644 graphics/pokemon/ledian/overworldf.png create mode 100644 graphics/pokemon/ledyba/overworldf.png create mode 100644 graphics/pokemon/ludicolo/overworldf.png create mode 100644 graphics/pokemon/lumineon/overworldf.png create mode 100644 graphics/pokemon/luxio/overworldf.png create mode 100644 graphics/pokemon/luxray/overworldf.png create mode 100644 graphics/pokemon/magikarp/overworldf.png create mode 100644 graphics/pokemon/mamoswine/overworldf.png create mode 100644 graphics/pokemon/medicham/overworldf.png create mode 100644 graphics/pokemon/meditite/overworldf.png create mode 100644 graphics/pokemon/meganium/overworldf.png create mode 100644 graphics/pokemon/milotic/overworldf.png create mode 100644 graphics/pokemon/murkrow/overworldf.png create mode 100644 graphics/pokemon/numel/overworldf.png create mode 100644 graphics/pokemon/nuzleaf/overworldf.png create mode 100644 graphics/pokemon/octillery/overworldf.png create mode 100644 graphics/pokemon/pachirisu/overworldf.png create mode 100644 graphics/pokemon/pikachu/overworldf.png create mode 100644 graphics/pokemon/piloswine/overworldf.png create mode 100644 graphics/pokemon/politoed/overworldf.png delete mode 100644 graphics/pokemon/pyroar/followerf.png create mode 100644 graphics/pokemon/pyroar/overworldf.png create mode 100644 graphics/pokemon/quagsire/overworldf.png create mode 100644 graphics/pokemon/raichu/overworldf.png create mode 100644 graphics/pokemon/raticate/overworldf.png create mode 100644 graphics/pokemon/rattata/overworldf.png create mode 100644 graphics/pokemon/relicanth/overworldf.png create mode 100644 graphics/pokemon/rhydon/overworldf.png create mode 100644 graphics/pokemon/rhyhorn/overworldf.png create mode 100644 graphics/pokemon/rhyperior/overworldf.png create mode 100644 graphics/pokemon/roselia/overworldf.png create mode 100644 graphics/pokemon/roserade/overworldf.png create mode 100644 graphics/pokemon/scizor/overworldf.png create mode 100644 graphics/pokemon/scyther/overworldf.png create mode 100644 graphics/pokemon/seaking/overworldf.png create mode 100644 graphics/pokemon/shiftry/overworldf.png create mode 100644 graphics/pokemon/shinx/overworldf.png create mode 100644 graphics/pokemon/sneasel/hisuian/overworldf.png create mode 100644 graphics/pokemon/sneasel/overworldf.png create mode 100644 graphics/pokemon/snover/overworldf.png create mode 100644 graphics/pokemon/staraptor/overworldf.png create mode 100644 graphics/pokemon/staravia/overworldf.png create mode 100644 graphics/pokemon/starly/overworldf.png create mode 100644 graphics/pokemon/steelix/overworldf.png create mode 100644 graphics/pokemon/sudowoodo/overworldf.png create mode 100644 graphics/pokemon/swalot/overworldf.png create mode 100644 graphics/pokemon/tangrowth/overworldf.png create mode 100644 graphics/pokemon/torchic/overworldf.png create mode 100644 graphics/pokemon/toxicroak/overworldf.png create mode 100644 graphics/pokemon/unfezant/overworld_normalf.pal create mode 100644 graphics/pokemon/unfezant/overworld_shinyf.pal rename graphics/pokemon/unfezant/{followerf.png => overworldf.png} (100%) delete mode 100644 graphics/pokemon/unfezant_f/overworld.png create mode 100644 graphics/pokemon/ursaring/overworldf.png create mode 100644 graphics/pokemon/venusaur/overworldf.png create mode 100644 graphics/pokemon/vileplume/overworldf.png create mode 100644 graphics/pokemon/weavile/overworldf.png create mode 100644 graphics/pokemon/wobbuffet/overworldf.png create mode 100644 graphics/pokemon/wooper/overworldf.png create mode 100644 graphics/pokemon/xatu/overworldf.png create mode 100644 graphics/pokemon/zubat/overworldf.png diff --git a/graphics/pokemon/abomasnow/overworldf.png b/graphics/pokemon/abomasnow/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f07b6323e1d60eaf1a26e2c1fd82363155522a GIT binary patch literal 1120 zcmV-m1fTnfP)Px#Fi=cXMVQc_P*6|+008Ld_;`4jxWLfZ*yy0B$S`<7ka(CdNI1ZV&@h-t00000 z0000005k5E3jhEB5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg}!bwCyR9J=Wm)#Ph zAPj}g2!y51#Pgb?hq{MxVm+OPc=P2}q4Gk!VxDHl84 z*hIh`UjxS3mL;s;bIyqG6~5=fmkL|$f5%0Vip7*tG|@B!>yEpHb$|V(!gpLC>S=)e zZ+VK*(#n=B#`G=6jJQfPyNvP;msMAF3(3$MLVU+fHSGE@BdFS!+%v=&nTcX$;UEU+mB~$2UAk@(Ebw6edsK@xuVK zx1gTTX+earof4hwZO4v^=nPBdjkYCyf=r1=*(jDc~h=PZ2VS z+g4v7=tWkc6K@=31OsLuI_euWmrnl;hd@P4koTgh!h8=HIXiI2DKMl`z)L|7C;oPX z$ue9)1kap%ZaXcZh7}U=!w8QD^}#)dU|V|!HVO>U_Zox-3Tz@ct)2u-c@^MNl+x-7QKm{R&*w{? zaJu~zi0B9_eW9%q`Y*Q1cM1<$z6)f84uOb}QYDisZtjRVus?K>3~lg@<|PAjc4eZ7V@2uzQ@MrSjtGWsMDN zQydbIh)5|5K+Yr2*PI55KptAW6mak|a(H0I#NJ$IU&!fTesUY|!U)m?Uv2F5hb004R> z004l5008;`004mK004C_008P=0026d000+od=;~)%#tW@Ep$k%_}7G zo_WR{0ZgPi)>z#!I1dF7?FE?3U~R@Z8b##9W#O;qjYI^Eiq>YKWxR%+d)hSU+<>1X z3V|sJJ1%#A;*eOP1P`JR8^6vAUQ8?p?!wPMoOM}X0RO$;6-CK1Qwi*xT#Q^bf!NHJoOz-&4^ zp>Wd5W$8J3VRKlpO8wn()4!**ytuQmErfTM4iDTpRMU;>7LFpvUcj91>iqtHQ+flk z$x}_TxpaB&5EYJlM$y>Mz&W>(A2u#Ow5E1k4k?}io14wRIX^no#2m3nErmJY+Zveh zQXA}YTOAeyen?4;KElB38cT1RD7ZZ3twVvVHRm-(Yaz9{GN!z252Y$Um5tK#xTW;m zj+LBw#rigZ+%BM&cMc`7bCfS)4-vq zWGw>GigtJQ1)gwJ*&O4p@wlyF9dcqD7{VBnBb~n^Uj`2GC+DZFt!Hlc&qWS}MIQ8d zyk-o!gq(3cayf5%0|!1#u*)Vq5n*)6T;h`KzHs#K4wE`u-Iso_@RJEK+~T zT;eGGZxq;MdR$JpNwim;^0qMH;{+UUWsUhWFyoMBpAUJhQBp_Vh70!+a7c0RR=^dG zvE3Ck=L=bJ)qm?RwLjtZHm520{X?=0xBJ%LH!$rVLVrHJ$K-8y6Y&}QlK%4tT#<0c a|BOGc10H2;;fnwO0000Px#Fi=cXMVQc_NH`ey*kIVGFpzjS0002!==hL$V6d>bXizx#@W2270000000000 z000000304h1^@s65MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|tVu*cR9J=Wm(jMP zAPhx~FerV=|Nrfr6RcGX&^yjrGY@9n-U>UyNeF1C>9NNid+f3Q!9?1vZ}>N;%kK)1 zSsIP+_>Mw9fF{2yK;}>1@%mf7>x&IC;a3zUi|BtLo4BT>+<^o$_z07q#N*^cH?XF z+XAe#iuotqfXhJNkc)tL1J3nLp&9*{FVL6D1PKZk`58xmR2WQN z5HA5;4t;A%WTCYI`keYgTB&cPU!`!w;jk>G(DboUPtfIp^lI9$dqnp6BzeK{5)?U3 z{MIGQPxz$JL=T(58t413{Cs2YRsjjM30>*P*QItz!Z))~~eMk&8FJNFk3*H)QOVC+O7 z?jie*ZrUa=fi<=O-{tL|)bCDL;1*!zdL3mA;X3(u)YCHR{Ok9#NZNjV`q)3Q-}jp( UOi?Ir(EtDd07*qoM6N<$f)x^ksQ>@~ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ambipom/overworld.png b/graphics/pokemon/ambipom/overworld.png index 1f47b4d3e17c466c3d7fd260fde1dddf86030138..24389b6a9a9d2b2ad1a1af830c1a72e4827152cc 100644 GIT binary patch delta 1128 zcmV-u1eg1U3egFWBnkm@Qb$4nuFf3kkxf{CHc3Q5R9J=WnC+UKDh!2*iUip9{x7#l z_(~A%wC9}X%#YHUUA9Z`T_gls=l-_u+5p!5Z`l@rux(H-(_hs8%9#JDEdh5p{3(}7 zJpBRtJgOV~Pmq4+<`v++ZQ(o*&j$Q)o?+Xj8@j=Nzwv_3>own@zpMcFaGb{x_S&a^ zFTv`=;BCS$V?GHRgzas{*kA?ms5&oraaCxaCb z_%19rBgcgt_+o&2cfA`dDF{t&H{6PV(ZQx*OgJzhggsaTTAvM8Kw8WkQ>M=p>C>Iw z`<6n~J)PC}VX&qk#Kbb+kfH+Y2DJ`}LokFChT; zB!iT04AvCHW)L0Ri-6Tt3Rc1lsq+!xK0C0wGN=F@M8sHoITJ4fBYvFd&zpY(gT1os8BOK0lI^>(|b?rW0a&|xkg!vMPC&G8INszPr>Re(cnr5KzO$5 zXtJdfqc?yf^GG9?AAj$n%b;55FcVBt$K(iVx>0VjT?)B1ZV zr8+S#K$SX!Uy$nDm~4+^{NArYfK|pmnwvz*~c~!x@l1$`5yk z1L42xU6y1j7b~F#R0frv)Xo}wT;UdglYYQ)O#Bq1ZHos5m`q0M&^K$~RR^YtaXcn! zz-G|uY3wluWDVf~(CD>3n75$@=snS8+I|lP9(3wp&F+dPiEfI(UB_B~R2c9ONA$A> zwEE7kIes$0gwcO49(sLz6uw~~uk>yJGcQtRs@kZJZUAOj=`LdjJTBg(R9TjQR;L=O z3s?oDWs3g#!GJ$5A9?YNfp?uBf`c$;IjkBWKItQcXwnkaC7{(^IVa{2a1bt_SRHT` z(U#E{y)HH6f|#2#WAH_PC&CLVpj!eO9XLCC0UJxqr9OPF>l09tH){i>ymj3fy$0QlDDaead^kUGg zkc0>O!&d(Q;-S?a#=BlDay8`omX{WD(|HanasU~S-&XNC1&hu%&ir&wf;T`;s`}`d z7yR->;`5#eC%kU4={e6D*^|0Dy!50Qvv`0D$NK0Cg__0P0@=06Lcd02gq4 z6}kbDE?9p|NklzbT63`7xNEaN8c|G3e`Hwi;#H`#CJN1RE=O<_1?mj#(+ z`P;s01DN-}Wt#xPx`H02f2jYJG5=GW0&cK}Lk^R8gdH|Nsu}!Gkp9WZGr(S>5)N)X6FPy^h% z>&>7>5YDsSg-$q=F9ONxU?PZgZ4pq3;uehoqkDq|kR~&yGt=jp=yN$j2sJ{~Jr=8P z-C%!-AS3cXI)M%PBES>Sb+8d!7QQs*l(X1Dw+JdN)`isM#QcvH|Wz z07iZ35v+iq6T|0=0~lg&bZ^iA=7brFFAjgI?G5^1uNn9;HK9I7K(%?DB;Eq zHckC9(<6W}IG|>_12hM9r?=jy_fZl-Jw_=-)$c{X>U=`z5u)p!9C0NCAUqQxqf31l z4GJI`qJ5T9roR+d8lL;~@YeD=v?8Msv^s(<0$ha6_!dFsqkT_XBw+(|{DV&OAEO#q#~!@fIyTBCJMJ1sDoOw^%o*1)R{Op{W-O&S5K zL93sAk1-%?2oHcpFZIE^4OPGph%SHA_Ioh!pi>7+x(l8J-4ublj-{wD;4Y5nXAWrf zjbC$uGr)u?d@de(eL@nxZXnO}W&kr!Qf8{ssEwFXJggMK@ssiGZ-Xla8)n%OmT7A*ygkJ()gbROYt#-In zv}N=~FH;R!5p#8B48G_@ctHVNrhrBVPG>7%eTuo%$Io?rB1(AkXh6$b(-)(c;ryJE zR-Zx6fY*l`5aB20wLau;fK~^39d`d;;K|{aRgfkx7USj1E}%ow_^mdNdL=|2D>^Pd zf_(X^TYowf`}2MRIO@YY!a#q>j{;d;nIW1h_b3ECDvgVz(S;DDalDH;7eSsR)zzSx zAz2=5H=F&Efrl1004R> z004l5008;`004mK004C_008P=0026d000+od===fk@VCW?l7XSbN5MyCZb^rhXAOHXW zAOHXW000000AjiB`Tzg~Oi4sRR9J=WnCqIHI1EG)U@YS%@Bg^b#Wx8M!n%SUrhlmal`;QQn*wgIheHmNc!V7`KdKr0Pmun} z$uq!hUE^`=fenQHIO4jx6Pm$4-*`g(eEBoRFEhX`?#I5zt@PS>5) zN)X6FPy^h%>&>7>5YDsSg-$q=F9ONxU?PZgZ4pq3;uehoqkDq|kR~&yGt=jp=yN$j z2sJ{~Jr=8P-C&6zBl18xferd1z!T7Qun}AqzBJ~Pv+z@M5gPQH!3L;=$`9KS3=V(`B*avDITJ4foYM7rH&`O5 z*&u_m0q#WrMt$iKtbm{s!{>_w7-Da9Z_ohdgc*u24yx@9`e3l^k#e*e^hMyN*9aDh zgeNHB#tt@3{W8-dfH63rX1W732X&{n-l+Fc5z*8OB?KTm z6CtBZeHaZ2AQ_^4mQtp_6jvIa`}FYE@;bC4qY<<^f-M4Egw6OCLFJ=;Pg^8m19bd@ zPV*nAl#UBTfD|OD6Wr(y91dgPS+5ba`n?D^y+x247DdWb0UQmCI@^m7tU=o03`igP z!`<#c`0sj?B}{s-5RQO@!9hQVoz?lc!c733zQevdep;h-O*<_xnM~B7Z`Q!84os6$ zzfBqet3j)ueUC99YX}d3MlbcjybV>r5Qr|*_Ioh!pi>7+x(l8J-4ublj-{wD;4Y5n zXAWrfjbC$uGr)u?d@de(eL@nxZXnO}W&kr!Qf8{ssEwFXJggMK@ssiGZ-Xla8)n%OmT7A*ygkJ()gbQe` zcDPiuW%NZaQw>=Wb9H76zUV}FK>=K*fJO&SXDeWRin-Ls&vktwN_g{VK+9Xx7o(Tq z{G5_jpFz%m*M}Pr;V0&`KICtJRtI_=cK=`C$>En(kR~q{xQV^L_$2>ccz2K*)~*SzVbSnk)Ax1U)K^i=@$o5T$Xvi#ZoTo+Q=P zpqU|A9&9(8{gQ!)7Jr!Tx?1FF$n`BxE#|5NpnX+j2h5H9wu;XYRGm-s{B+I!Cdk&Z>U=w=DVzEv-Jg8 wzZXDW{#W+lPXA8(&GEm!^!NEy;NLd3pL?)9-1Ft%NB{r;07*qoM6N<$f_b<>_y7O^ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/beautifly/overworld.png b/graphics/pokemon/beautifly/overworld.png index 36c31fed279ab51b808df97969d5fc69f1732727..d0727723a917d40d019225f9253c6f7fa08caf33 100644 GIT binary patch delta 882 zcmV-&1C9LR2;~Qm7zqdi0001UMu)eNF&hyt008P=0026d000+od=2l;C41@=e@G->i|G3*Nu+5chWh+0jRVIli_>-U;;bUH}r#HH#4{$k)$u5nqs2&5{=PiBl>vWd6<&Xz`jPxopIKBL)~@0)&K#&)*PdPDo?MxLRuuRS5 zbhCt>1>=gf9lLimuPc0{Clzy!ERP(JFwhFXwda4S_~LZfMVM?j;6Su8$&bZg9P&9T28RLYAIe*Cly{`3 z0^Jyd$W2`z5%3hOxpV!)i06s{*Za@;?y8XM@T$Oj)_pG0_?h0^mA)Y@cpdfuv;ro9hO)I1opAMni zS~^aD<=bUs$6la~ns%1YdpEplG<>N2*@7m0Z?e7dImRdrTzu-l;XDi=Zt_lm`lgGg zuEwGqHSOHtadMZx`Lw#10Zp>&E|_O#0P~-mQbzqMN5aD<9ayNDf#XQV({XeL%w5{K z!<8oc!Ef#-^fHii3z&Z(Y??*`T)3O-R3bFuKy@>FbYR@{*ZJ5o*c)mMLWf&G!^a!M zIYUqkkDD~6(9r9{#?#~C2cD^e1DnC+iAES~6P~=yry|`jsl(984I7~5)9qn1ILr|C zV1L@b+On$`XTb3Ci@sq7%pls$UroMJBF^(I3%@)w0n2ZR07*qo IM6N<$g6!qNF#rGn delta 1006 zcmV0026e z000+ooVrmwkxe`u0b)x>L;#2d9Y_EG00(qQO+^Rh0SyKt9Bt5Xyqm{)b9rL-`Fo-_Z z)QaGz`ZVF_eDUSVG-u_@+7}-6085GP0 z9>xHr(vv)E7@Vp}CI$fKO|PIaIBXV}uC(@iG0=7a((R>PF;crFedBQtkT;ygHuZHz z#toVkXzw)&MhNBlfiD_vZUf`oE*33EEu0vk8MpA`oQqJbjG_H&qfEWLrT1?9>P{tTMSOBz|M+Y!dNJtO)tsZBXkTlNsp zA}dhtYTrv6T2kJ{e;BPNJFR^WG`BZ2rU~rLGko4g@}`j@<=j$2LM2ng4vVv53 ze1244-)O`K(x*)3G^RaS{iBusS4%x3BpA&qj}R+>GLO=UiqcOn_xmT79XI5Jf+_B1 z1%Q0$_m4fjKoZW0URbA=XZJKZcF*!==xkLaJU_lY322?le-D9k6x$Qu1(@G2`&WYu z3FmBw+3p5(0trn#ny7^RtKnHNQ&dNXUks{x0>YW-mZt_mK(4caS5qF! zk*7B=hTrC>e(gC=%*zXORz9whtiUkk&Oq<6)^5TdUS9jP`3$Ae{Dw>usWPcmN6QUyKEpU8jr~MPI|{ggplF2dItn+Yj3i(`%4<(JOYg&Gh_>#nP-?-0aH0S*!_)ATs6!V4Nx9~$g{k~Pt+r4_YC8aD zc}n}fx$xc`DJwYmna}d4`y8Xne<@M0TwoV=I1_d1f2SAD(z^z*&AL6orjOuXh2iSK zCi&r?&~yALegSeq2jWC~9ZmoM03~!qSaf7zbY(hYa%Ew3WdJfTGBPbNF)cANR5CI; zGc`IgI4dwXIxsN5uY6np001R)MObuXVRU6WZEs|0W_bWIFfuYNFflDLGE_1$Ix{so cGB_(R6gWCCFwXMC-~a#s07*qoM6N<$g56fZwg3PC diff --git a/graphics/pokemon/beautifly/overworldf.png b/graphics/pokemon/beautifly/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..36c31fed279ab51b808df97969d5fc69f1732727 GIT binary patch literal 1122 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNU@|l`Z_W&Z0zU$lgJ8^O!f%! zWnidMV_;}#VPN7Zx};cqDiz zXlNKDBxC@E53DfwaU>II z|F(lfLwwSn=M2%ZlUMj&3$UKrWhGGM$K-nA*gl0-9GVkrU-e|noG9>!zl6hw!|DUG zgoK2^sisT++PzYofAZSipC0U@-KICSLj3j4=b!3+JZAbJbN-{ufA0l=KK6Vr9qog=YOa{GtJ^Bg(U-tG+&m3aP0 zwKt*c@x0gj`gV6pyf|97`N6KMTy`$|KHMn2E47YWe(Sf{cAuqx1cb0mx1Ch9e$(s| zEj`7BZ90r!4ZcZjYWR7wPxzQ&?Zg#quLSuvd@G(&t+TgrBkR*seE)c6o%WWBTytCS z*bZCeUxq7vErX-K30zRp4tSS!-&;B==-yF@wd&SuYxzyKo0}}-d~?>g=APT9WfPU2 z-U%(A_;j0%OZUw8o0>u@YwAMc?`IrgzqH)vnaMKS$iIuH{tNfERaTKWtJN={-C)#z zsk7^nzy9~%>eFP+pR_b-zDr|msCn_d-*&Hq(7DdIh~?ALznfTRXn-E14q?y^0&tp7oL>%&(E)qXylf1&t~W*uXZ6Z<2VYFR&E zMo}$sjVMV;EJ?LWE=mPb3`Pb?ZE;$N0xvp#~{=+h=}d`C;Zn@1X7L|27KYVL5wj0K#I|S z=sw}Uk0x+tK>mj9DKkRFh=JUl0I@q>rAYjuDMu;h<+zfAGp@)Fae3xc z&1#s<_PnK70%Uvm9K#W|4sFps-iQw3ul8U_vU8h*W&}mya>$Z zlqBcGgTfVq?1}DBW{E7K>^RMU%1;JGAm%{=Gz<(mq$5Qxl=~kkM0a@5pK5(7KdSyB zQ0JY&EU-&b)xeNTj&WK#CI2dK26X+cP-T52FdteBei+P+PK8=o12djn*(RKSX`mW> zXaIR#bOQ68f_Fn6`*S78G88O}>>_Z+lUr(N4o(Ko93sRuQf`5~NtA^WzII{G#W`H&~%Ntcgqz%oevcHE#;xw;P>X*T1B zz_j5`BSfu@LO$dv<;-RMssZBJ-~-3q!{*BfcLCqz#}gv8TfP>*K~xnCx$F%&bFX#& zmiLLq&)xa*dJzZ{eyxLuu?%5Ebq$O;mYo{3O(JtX?xMQQW0bvxWu>}$TdEvP{gS2V z_dh$2k*;9Kv7B?9Q^sE!Faq_Q!V)1*4V`qdRh0`CpV~VG^8E4`di9lsFbLPN2oyee zC#EnB-srhvO%hF~GVEY$C`}CsTH-ti9P(+aiu5M^)qnV(floXee*y2cJp0^rVJrXu N002ovPDHLkV1m*WdH?_b delta 813 zcmV+|1JeBd2Al_wBq<0Dy!50Qvv`0D$NK0Cg__0P0@=06Lcd02gq4 z6}kbDE?a-!NklvH2D426RMp``Y{|KqMCF2=S5O`DzUk7y>D)E}60KnT0H z+b2Hpi7p()&+*&CxrM@88l7kSA6sC7A^2!Ga702F7<_k#z!>PuFhJgjn+D$=ERb_# z37~QaLQR7J(7u1de;q|2<%nUx7p@zG7!x9<7>$4K6aM>X0%rzvjw#(aQbM)+jK3g? zLJx+5#?{V{^^rm~NoM>7fe1kQXe4!xXa);M1p^7I0`K>$!Wn--$P&{QGgdigfN%}N z9h*Q@4UD-GPac{zMXfZQaD*<$l^mRLMSh6OGfxGbz?7~EkuTZ?XkAd6NZ)IYFmG7l zTwQ17oD&ZVR}8Wzx z7!-k!CkeqYFyxr_6uD6Dzo!u0;iNy+`c!^Y{Y9Y8JA+wZm!ztJA(tHEv~)`TRo)Ef z`dgvO`bc1YXfgP1FgH3BYGn`1cyi^KaHfBOYVgzm^SpE2Jinqv=<9XD|m9>iA%VD2*=)CY%iTB2Zld+aP?!_;|>z z+ZqE)EC;s9102gJAT=Ya+*mK^Uqxu3MC2v~E_ZcQbw*gfo9+ zTQ^ci-$o%H@&vr-^3e@g2C3f$E0!u(&!IidW_%ZzR@i8UsI^hZhdia6xvXC`Ks*~f zao9YrKIIwi0>8<-5vbkrwfI%5k~1!6L(bf5oxkOCqVZ#QzML)sal)^4knUWjkVew> zz?efhsZq6`CjiSiep$YJ$}q!JPfK}~qp4rA6#VvQ<2lk53^|nN9Osnzmj;YbeNJJC zn3sm0bh1^I3l^W+I|cCi@*H~gm4z@0*Rco`K6odlFb&?2*ESENj388|9c>MzsUbm2 roRh#IpSG$004R> z004l5008;`004mK004C_008P=0026d000+od=t=;%0000GV_{Bq0000W z0000W0000000000V!7`60008tNklvH2D426RMp``Y{|KqMCF2=S5O`DzU zk7y>D)E}60KnT0H+b2Hpi7p()&+*&CxrM@88l7kSA6sC7A^2!Ga702F7<_k#z!>Pu zFhJgjn+D$=ERb_#37~QaLQR7J(7u1de;q|2<%nUx7p@zG7!x9<7>(`|{`+VGX9jeR zDcw0zLbdyhzaWZ24~Bxq)y|OhkwP^|X8Z+#2tfL1Bz2Bx1`9_80|~1F@As?18Gk{@ z64MqlRyk*Ya1Fy9n?O_zjJXm|9-1{ptu&o*gf7RG9Gr1Qeu&F6PX(R8l&%VqFWLrZ zT~L}x-)oLAZ&=}6UHKYH@ZVIgsVX{?yKpoJa&K-{ew_yx^CB>tQ<9t$4+~cevM0Jj zStYUva^f@tDnA$$fsiK&!7wo7nD!L8Q0~8{5Z&RVKh^qFepLNMpw2skSzwo>s(~Sw z9OJZfO8!;e4Cwk>q00J5V18&Z_--&aIuvSU56pOS<(P1$foky70Q0`+1m-&h?}j|~ z&y^_KP_S&Wi@+IAZmFR;I2b%~j2Iu0YAd8BkfZ5Wd1o*O73%n4g(!_L3MQNk_##kU z0^1;b#rSy0t=k#{ODqSr$pakAC?GW>tK3*Gg68|*nOKCWAoW3+Bo zsdqDe9E3AuTQ^ci-$o%H@&vr-^3e@g2C3f$E0!u(&!IidW_%ZzR@i8UsI^hZhdia6 zxvXC`Ks*~fao9YrKIIwi0>8<-5vbkrwfI%5k~1!6L(bf5oxkOCqVZ#QzML)sal)^4 zknUWjkVew>z?efhsZq6`CjiSiep$YJ$}q!JPfL}fsb8`b{Pt(#InosjIh5xd=al)E z28>XBPGO0dmxi8nvQ?D}7N6QX1@QXv9D4PYg)j=&u?Q4CcqgVX4c?H~HV>qXAXKIu yZ4ITVAwf%=lfWULwyH>P(qH|D{~7qiv+);wkua#LWwKfT0000V1@Z)t7zqdi0001UMu)eNF&hyt008P=0026d000+od=| zA|krX0mU*vPOk6|h=>yh7DJAdz$qoxlMDO=AnZNi9ah3o+y)yRkw$-M>0 zTP8;Q{U(GqNEe;wR$s7>*65SV5ntYKLhzqXbISXb?MRPBHsY$cn@}?hs86?tTuvny zbM~7fI>nd0$#ThI6Z%~JLGz;)4|_D=bgSiFY<=h%dMJ?*S3%vSQskSRCJcYM7(~*` zleEfl06s^n8KtMDmk3VrK8Pep)x9`P7;}>QtMwuFoB(`|RU8(pZP+@2b9|dXf~>U` zWXHgWYl<~FehIl8t=S?ATWy~QjCdc!t<_tVq0T-q;F@B)xZA`5*UqqodS7W{emDb3 zm?k&|23#+mbC!v`|8M*_0kT<1=~ihG9y#os$-#XFtm_Ii2e*y8TcO5=;9(hRLI%12 z=f2g-iIXD%O2aAq$8}@TgXBvO`eA^&JVtK}2EO+`F?B&d1Yi!*pgBTi00000NkvXX Hu0mjf>)!E! delta 608 zcmeywa*lO^gd__y0|UdhZCTrZ6id3JuOkD)#(wTUiL4V9r3DQb7+xhXFj&oCU=S~u zvn$YMqOY+mW0JSK3quF1tOrmFdx@v7EBiA>UN&X(gHgPF6Kmz`yFFbTLp+YZz3T0E z*g$|S;dYF|I&bkcLh2h%`RP9KqFuJ$(vD1d!+K7^+(yk?Yt(8j_80|R6pK)rX8KZ@ zOJmEVZzn}!MKZTPDsX4g{$B5@rewP{&#qfARqgLV<}|4#I!TvizU4~tiM-|cXnxlP z_SqU!3TFm9>xk?X@I2H$TVvNxAIG0tej6&~eAoFR=o{j;e6QSBo7sy);xy=i}|in37c6@0z|{6>0K4PMG=gqC=~`aedLbw_dtCxTWgG-NiSH>NiIC zc@!5!^EpJ+*qJs+=Jm(E$UE@#=(75z-mrHNj^(hzhGJk*C)|Z*zm+BI^ zgmu~7SxnW;YPq-9eX}qvH*fua@8+MH1`iX78=^0ArhMWq`1^HYwOz4a-3gc38TpRy z*3WyQ{r_*2_sr)14$oL$_jYWxS9o{+xCwXt<^6nHQvPx~ZN7h3yx!veU!D4uZ-f5K z1ICtWiEBhjN@7W>RdP`(kYX@0Ff!6LFw`|P3NbRWGB&j`HPtq-ure^XvR9-PMMG|W bN@iLmZVgKxtg!@YVDNNh^K)6}l+XkKjtl_S diff --git a/graphics/pokemon/bidoof/overworldf.png b/graphics/pokemon/bidoof/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe63802b4e4c041f49ae2e93057c1a3378fd07c GIT binary patch literal 718 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNU@|l`Z_W&Z0zU$lgJ8^O!f%! zWnidMV_;}#VPN7Z!L}C;)jI z8XQh6NI0;-;l+i984?;10S+%-{IIYv*s`sf zGe%xEW%GkkynR3+f#gKLG9ax0#XyRIA!+A3pd%Q&JzX3_JdVG;>g{*fK!7dbc8tP0 zZ}Bxk>KjhvJt}B8a+tN^3(GII;itq+7z( zF*7$BCLinh=|1tIUAErRj!b#OdQQRIM$KDm)M_pE7zJDui%^=p1l)IM8d*H0hEpId$#D&>6F`6B2W;GzFie*@;y$N`SYSftG;o4(Yd!?x;wa~>c-v0H;Xn#_<0l;MDsaB)YzFe zNapp&zQ{Z9^yur)mKV(4-O#x7bC*kR+Vv?H^fG^c+SZqu-ng$OOi5sFXa;ALZF8KR(VzphdU)>3p*%|qc@7B+IqW%AGl=sZ$ z{|?VsU-x!wwO4p|{ zRdP`(kYX@0Ff!6LFw`|P3NbRWGB&j`HPtq-ure^XvR9-PMMG|WN@iLmZVgKxtg!?o N08dvxmvv4FO#t!48|eT5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/blaziken/overworldf.png b/graphics/pokemon/blaziken/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..951d9bce61a724dec54e971327857d4ddb00c5c1 GIT binary patch literal 963 zcmV;!13dhRP)Px#Fi=cXMVQc_a9BWS5CHJ#;OH5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg}B}qgps>!}slqz9&JNwzxjCYd%?2pDs{=hfZif`Mu6Wd17L zIKII`r`qAhF}8c0@}f3Lw|l%1=+hVlcXbYZ5*4-`d{Uom6xMmth4+#^h`Ym)!NNn^ zwi@l_3QxIFP_JPy?K-s~Xivd*nNuIu2Df+L=;1U@EJ_<1wEO-l+UadJ^zPL3x*TC9h@lxQ8y?M|rXJCK! zikFMR{Wc(Hn(du`tiJ@3^8_B1Ejs2l-_6g$iH|r0 z(woH*;wbMhMt{XKgXT@Svg7br$Q|J9dUJd%>Epm-6bNxPjz)8a!(xN^ z{N|a#7l%diOyE*K@vMFn$PFT0Ve%FpacS;m0Z8g0Shio zKoW@M5%^1oi>29)V0@#AkD0-S-wcq2-x^q_Pm`U%Xi#t^55kkC$$ybeP+$l0lZDC3 zvy%j3gN_r9$uLgkq-o^(n2=_BgR@NZVAD8_wiif)20(7v*uU!^b$uy=T^o}iu*hlf zl~&?Y004R> z004l5008;`004mK004C_008P=0026d000+od=w{007940QkTl*tkfbU?}M5_(+JraBy%yV0f^=&|d>J?J zF#v;MLXYnbl^7fFsU}ED5}lzA-ye_|DePdu`X)&HDt|+e#0wO1h@*r}^2)5o_XiOR zw%9MBnAh`@LIWW`?d<_HPQpp1(Gw7JNslm#q{oT0z(ihu2zfKWG|d91$yC_m5JUgr->*G4wwbHhgPP1ujW& zX&Z>SIvk4(Rib5}${(bR7Jt;2OeI4ima3Ft5RY#S>hR+;X>6zHaZM;CL*ZcJI)K7l zO3T-wl|gr|TW#on@U6jhfrt9Bmbk}p#0wz06c*X)wIsSdz?iye1ERy$8kw-db(@)9 z&TGp*8e9bOS${vXXCUJBmQ7i|BwegidPx=P^jm`p&Wk`@2YCE&KwA!jvS~;(()p_B zdM2w;_BaGW8P{HMvkcspHiERRLH*lR6{1tm`Y7gH+8Y6??zPn9?imQV3RDBQtJv;B zob)N8V>AZQQRJR8n&i5`6ms)HgAQA(D~o+o(UW@up-}JI;3-kLVNfLJ>s9qJb3Fk* zH}ITuBW;3%SOqXA%$%GAsv|f1|H{>Y!%@;Sj#LWcuyN}VTq+lf&MBlP!?}j$1at;% z4~{@(>_1qwfHc8-4+>u{H(4gJH@Vad&w#r0w0|x~XZJ@xsX+? zNl8h7j=i%0000nUVNP}c001BW001BW000000001Dx$gP^00PxXL_t(oh3%KwcIq$; zMUiDEhJ^qB-K!(ni3b54?pvdF1)QT{OLhaj-7dTAvdb>J?2i~x|N31Ep@03KM$A1R z^Gr$RKu!Z1-vWB^!5o6yKzGwA(dx5*N*p7%fLJ?oMi#HU#W#Sj;*X1y`n*pmO)WG! zi#*j&AUFV}ergGH!1_jiHA^Sg_yYJcJ{%m*7F9w3dIM;59vYBx2>=z4^~RAw2Mjq- zkY6p|Rjd>k`^KhYOYV(0-y}0G%%UnfqfV{yFO*FhI6-b+7?{LtbcI zX;Fu^LII9sfXA|rC*{`;D2{}{2?288%)6wNJPy%m00kMjy9dOFR|F}b!mk@JmN1S458G0E< zA8#ET4fb1P7FHu%Xc*wE^Ed&2@&Nk{lKvji^!Tt2hj_VD8o>KD9{t&#lm=~?#s(z! z{Yc<6P<7p*+)hAq4uG)-kQ4N%4L(BbMqE9#gId19EB#?pmj&BBbZC5AK=R8?fz|9RO4JCp7DSnqUA>;s&sb z*EIr`xbJa6Kch#|dpR+q)ilh{4$-MQ2S^B`O*qWyCw=PBm@1&r_A*)sq!x71184_a zY~;rir07Id_r7Y#8JA1YX}s5`1_|jaAWt9GWcs#bn z^nys+vMQnL(CVWD@}Gcz9suy5Q}%TExRQ-kKshK*c@^+Msjn`-x=95LlE14XZv}KK zh{JQo2JKH5Ko5xmzL+1rq6KX8i}4l<^dz31QD4wM0m>dc_vh^<7ykf!1Vn1YfB1hw z9Qf54daHi|MC@_-8Q}Z)1MqqC&gfV4FBN!K`>mop9LB&>`H=ts N002ovPDHLkV1i;_Znppc delta 950 zcmeBYpUW{pLXw4Z>Ma`zw97#?EJYH&Azu=m_0UT&JLO;u{`Mdg!GpVI$^az*GfE&-r%tf^=a*X zvePLf^$lAxdql*92<@l*FXRtf-~ai>Wyyxplat>(`TYEM?fZGc!kgBWu6;f6RMx8G z(3`TQf6{l_vgWv`9Z)=y8McopY@e)^bfIFH3lK|5+ol8vdZ%~9XS$^{4cogc5ZVW~RodiV0F)0=?ulTrd0 z6xGVKUrdltddshJ!MM)l&E(B~A6@M?8oV(Hy4!G#eepcGS?)&zn0|-wbakd&xP8~g zHqRlbeoIS2#@soq3e8jQ-+B7y#w9zx`|m!zOk5+aQ7ZRRw{i-f>IVG~hEH*|&;Hys z6Y6F-vGD9q345>l3r}laWyah2pZhs)xs=JTLzkmJY1T|QU@Neag+ciI{-S?RCmBs( zkT;lF{DyhT{8TN0$t4cu!dvq$ypZ@ZZ4K8A9fqcN`=9-(zudckm7!LPx#gR2SF|JV zPLERzb!YuGLl}dqP0oifOmVotaASI-`2vPdO*f{z7CkTTIB(1GNWRS>|11toC8e91L`Z?84nJgE7i|}7DLE%n^Q)S}~`}6l>eBBq#nQ@6J?brGT zjZCX-rf_EO|7)8zb6@>~%{_9m9WKuw_O)EO;?t3neB7ERA@F&XEt3P&LKXuLrsJ8Z z3#2zlbZ?CKdA%gST`%ji(T3gEA5PhLaM8I_4&6tEB*Ghh98D>bmTq`_Ogy?UrJ}ET z#xHs8-XjmJ?;E~v3kv5J*|1DsZSq>LX!goi&)w7Zn$FtVbaBn2#I5R$^_QcU{*7V! zyoKqG^|@Hq1Cm>r!m=;;&)@syveo<>{&ypHdFeBE7Te$7vD!C5GQ)Oe{-3BD42s|N zyu)9mD%?~^@snfF`^j1$XBz%`zfQ!8`k$|+v47nqxAq^y;^Z%rKZ+P!2PS;g64!{5 zl*E!$tK_0oAjM#0U}U6gV5n;tXcS^(WMyn(Wo)KxU}0roaOOwOLKGdj`6-!cl?WZ^ V8ul)|A`8^O;OXk;vd$@?2>`_sokIWs diff --git a/graphics/pokemon/butterfree/overworld_normal.pal b/graphics/pokemon/butterfree/overworld_normal.pal index 1ce5a15e5d..4756c9d723 100644 --- a/graphics/pokemon/butterfree/overworld_normal.pal +++ b/graphics/pokemon/butterfree/overworld_normal.pal @@ -15,5 +15,5 @@ JASC-PAL 104 200 248 80 144 224 48 64 144 -0 0 0 +73 73 73 0 0 0 diff --git a/graphics/pokemon/butterfree/overworld_shiny.pal b/graphics/pokemon/butterfree/overworld_shiny.pal index 222adecce1..1db4b73433 100644 --- a/graphics/pokemon/butterfree/overworld_shiny.pal +++ b/graphics/pokemon/butterfree/overworld_shiny.pal @@ -15,5 +15,5 @@ JASC-PAL 248 112 136 176 72 96 112 40 56 -0 0 0 +73 73 73 0 0 0 diff --git a/graphics/pokemon/butterfree/overworldf.png b/graphics/pokemon/butterfree/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..4402aaf2631276f6ce2a98526963b178b2222231 GIT binary patch literal 911 zcmV;A191F_P)004R> z004l5008;`004mK004C_008P=0026d000+od=|p-K#)mENq~;Mvj6}95MyCZb^rhXAOHXW zAOHXW000000AjiB`Tzg|)k#D_R9J=Wm)myhAPht!1U88;|NptwNMLhw(w?5TTJ3Uz zM}j?qChp^L#~pXvamO8hB#7$QpN4bw>;DX5t^t{QO0onR7|{9>a8&Os!3_;mHwR0U zdan|D&m|zngFa)H(ehSb0AAG}m%-HMeF~woQ0Odjw|)S@0VwN-l0X}*Z}eAZspMRr z059v^!7tiPQG3p^OK(=vCum(e(Xr5`(gmQ%h?8yL+VO>wkuMWt!gurnQ zvg62216w^tCaOE=qx^6NWF4LW#^c@70G`g*Ee4M|Ha+#Dt0x5z1ZwItW0E7)4eazt zO$R7|H=ckP`A{}EMB#ruq05W&F_bM1K3RsI+ELe=gTr9GMHX&0!iky&_Byv6pb=ob zLE`V_P4_Qz*wo9NWB~8Wdib+FNd|2gS_3lo^O#^@AnUqAvFw1(*#P<)Ku*vr8+o!m;7N6zYk8?dbC9RNf1C)DdYK?9(~1z=ULV-!q&UHt?V|=+p-X zNC>@k*!9zQdgsuXGN94cGAuaKa5|^~)B&ex`SA&obfT<}9yR2Q%f)Fo-s_z~!t@!C zyDw`peVHT{)4LBjpzTDvV)jof(03Tvhk8P!Wtx?6m{96%0_HyfM*zTsPWwogud9#& z!{|9kS|G9@@P2`3X|e(u$v@R8#61Jj7fT%q#{|5NJ{s7z_qci#){aXvX lTl<&w#Vo(j@3`Yn#TVb)9TYRUqBZ~k002ovPDHLkV1lCtmSz9| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cacturne/overworldf.png b/graphics/pokemon/cacturne/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..cceeea05fbac53ca0c0246351ca58c5d4e335018 GIT binary patch literal 644 zcmV-~0(004R> z004l5008;`004mK004C_008P=0026d000+od= z!`U4AQp&+5#ayHmOaPC5#@QTqDD**K9wfwEM8_`ci<5CSS9xU<=t_(^=bSV!fxYLK z)9P$ao4vb0aDI#H@vzNdUDoy4QJz2KP>4I69}CS%xoCs`^ssxHH0YR0Sa`YDG+ z-Q%Ib83(o%)_3m|+3{2AEeQ^TU#f_UG^~yCTAOsgHuz@GJ%La4uaoese$A?i$Ip8K zSAn)hdbQR%1Nz;A_XZ)bnnaaXTk8z8w&T6QyFkcm<1Jvr?hcCT!vsia=m2kpcf2d8z_{!$*uhy_mLclGm> eLn5yDyZ8aovl5Ca0000004R> z004l5008;`004mK004C_008P=0026d000+od=>!V&*?er=y{@BAnH(?(&Mrf@yOh{M6I>*5jrv{4Kp z#LfbGT=!-b*xscP|A|IXTWiZn` zJTWD0xcV|rM_fH5SX4?87P(Qb#~h4bfseqFi#dgC##>9npy;dNh%0 z`Z5~vHAVfd(sHcafdSX#NIEpePnIf$i%b6Ae;wFqiNmu7hm|DAbwn)P<0ine%nU8Z zWI73$Dqh9_I~_4o)*Nw-1#~!V`UrU{v*dseRLt`NI@|;zJ7;e(?q_a#@XV)@v&<-v z_SPR&|7%VzK%UpVb+5)6^tZU#EKEgBwh*uBQD5MxJRE8I(DNB7yQ*&vvDH-7P; zVha)d((Dh1D(CZq48=7@-PNpztdl?y>GQV**eN~OaraW-!5b%fy~p~rccsA70+qw= z)F0>bn4T%1mw(CoI*dB}EfDm8i4{f^S=G`McyOst!*&<6c8n!GdxA@S{dzF9xa3YPtLW#X}x{%xAfJ&De!f>_qTRh z=bomf20CtE7@U>dyZy8MccbALx7GY_f4cnwus<|;z40k!00000NkvXXu0mjfrD*R2 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/combee/followerf.png b/graphics/pokemon/combee/followerf.png deleted file mode 100644 index e39109ce825f6eb2ddfb89b8eb339e6f191a57f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmV0zni9@E5!D0i;im9=$BPsaO}GHDON!xdvVX>l$ti3LQjSq^k!RuPLF>#g2Z3 zy$5}oTt;`Ei#rh!MC>~Z{9xw2|2%-S(n>3>e_WYgZg_C?oyVFX&wU0vlh0Mcc+;o7%L^kMU@98BiH=rn3595u`f%K*ZwXn_9I zUl!1SwX?|K&YLs5b72{v#JexNEdvN!(S5zq%kB(l^bQ}9!C|i-Y?@@vaF}JWsSF^D zR^ks2DPEE9-(Ul2J-oN5!dK-{QDJahw*m@7{qnA=@EOCQha-QKvQ@+|=y9wJgB&Bn;Oi7A zV9%8jL^?RBTR1$W7+ZymmOC5;i<}x(=ax9q$so=1Gso{2gWPuBl$uHaJy!xqm>>qN zlJ7hOmBY|NZCx=#Mp{k=XLcR4N^k$KI# z9N&3j#_%@ZT5=Jg!z126v9Ze~BW5$7I~@JE+Q1{_qAPz6-)DT14-F0dRA0V76BySp RI6eRX002ovPDHLkV1o6{*4Y36 delta 627 zcmX@avX6Cwgd__y0|UdhZCTrZ6id3JuOkD)#(wTUiL4V9r9}-G7+xhXFj&oCU=S~u zvn$XBs7QTcpmu#}$Pxu0n=#4T-G!lpRn`N@VK4FYb!C6X$jhc|wf}XYF;GY#Inl2S zNGm`wkYZp++WGDmP-}&!i(`n#@wXQZvky6luzv`j^qb+5e}HVPQ;_Iw*Nin2UM@J+ zlzp&FcbV-YwOb0YvWIqtXI`;YTX%e(!<=~m0B_lEVh3r7oWE^ zJ7Zc){n<6m0F^ z1h&3^b$QjH2fOl^McTf-4Gw-PZNFwkjjd$h)W$pZ!ArAix5kQx^xgkr{QPVCYvHo! zMUU8RH^%~FL$$;;q9i4;B-JXpC>2OC7#SED=^7a78XAQd8Ce;dTA5mC8(3Hw7;Mcd ib%km$gXqZ3PsvQH#I56q`PrYK825Dbb6Mw<&;$V6NcOb= diff --git a/graphics/pokemon/combee/overworld_normal.pal b/graphics/pokemon/combee/overworld_normal.pal index ae404c0112..d2eb1abe83 100644 --- a/graphics/pokemon/combee/overworld_normal.pal +++ b/graphics/pokemon/combee/overworld_normal.pal @@ -14,6 +14,6 @@ JASC-PAL 200 104 40 152 184 232 248 216 120 -0 0 0 +160 32 56 0 0 0 0 0 0 diff --git a/graphics/pokemon/combee/overworld_shiny.pal b/graphics/pokemon/combee/overworld_shiny.pal index 01483e8cd6..8db856dbe4 100644 --- a/graphics/pokemon/combee/overworld_shiny.pal +++ b/graphics/pokemon/combee/overworld_shiny.pal @@ -14,6 +14,6 @@ JASC-PAL 200 104 40 152 184 232 248 176 128 -0 0 0 +160 32 56 0 0 0 0 0 0 diff --git a/graphics/pokemon/combee/overworldf.png b/graphics/pokemon/combee/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..de523067d81e88abf1bbc02d1513f0915c6127a0 GIT binary patch literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzQjEnx?oJHr&dIz4a`Y=di8FB>CJlXSLVO}6mP+xk`&2jdv00Z z<&POM3r?&5cs9#^y8ndo=9@N+ht+jjBXwLimp30iSz6EcJm6ED;NbKDZy>7-nL9uSmDS-M-=qbH>iH ziEciY5p4c)3bW_LC)_oY{Mx_axGIC%ZvTf-47%4_ET78w{I~W$`Q^ND(4ySMQ`Tf( zc^YH9?)vUI`ce}s&+eYHzgXqb!`yw_mk2LBth~Q5CwaQJn@gHqxyARz+Z#{2+Sc>g gr`1g2=jHty65sA8Y@z$8xdRkIp00i_>zopr0OwrfcmMzZ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/combusken/overworld.png b/graphics/pokemon/combusken/overworld.png index b4302f91aa974867bca8d41c623401491549930c..8b4e71d03a791e45fc8d73f968e4a1a7bfaf8b3b 100644 GIT binary patch delta 540 zcmV+%0^|Mq1&IZa7zqdi0001UMu)eNF&hyt008P=0026d000+od=#n=*y6YcR zyqF)YnED;g<{=*96ghFE%Xp0afF2K&&>(dToXlf#0y-QGO7#q!%i}u%J3I(ueU{63 zbOSmYl*<<3c@Ym1yZ&5GIpc_O$H0HNTyh5P9H7Io{!(^_v$=Gs&(VPA3EVW`@y`V8 z9H18F@=?Z_S!8MW9@&J!PTV^0WW+GG=4uQ8EM#XGk^@`i0~f7)Ni=$p$x+Z z5!wH-NyTdMYEYC1oDx=e&<_I`p_SVK3Fj+}Hx?Rq`cXD~r>~nprA;PgJHYHKlURH< zI0+bwOcHj#rx=ixTLEE^n5J-P!jnw>hVKH_;uvXc`Y(LOCNCWYCL$&@FJhpG<`PVU zvpzZc)X*=BAc3^MvlJY;@dNgBQ5%?547PeNdckek(@VLHoBBYbc|UC$cr$`y(9s^& ee`3a6e_LPR(G_oq^bJJ-0000e$ucFTZ)@w#k4iEJ zL^Uqg{DQ#HUY1;&U76c?_c3GsqivxX(!cr+&)$(NdaJGTvb1^O zalI{Pf|k!VGniu?yTW+#@xc092Xt@lZj^FX`1;}g??tEl+Y}}lJu?00rWh+xqjh8I zcI!RIyt$QDD{SK0WwcgjOKkjsZTaPCD%*G!#Qgk!%DdMk7P&6^es-CfzKt38+!Frd zAC?|;&&gk?^IzQOT+#jFNw1YdQu|tc`R*|ZyNXqHSF2p(c0Tgqph!YqaEI6W`j90H zvTB92I={%a9_*Rn+3N5A>f?vME7$RH&34*z#JXmWNo8Wud0mm99m^IhZ3>Zm-Fot7 zrp~kX+>dsi@Z~z3GD+oM@yzsA{!=mcoA%3BFn?l6n&;Q^_~*rvk|JBN)HCagXCLz6 ziH~o)^Q6_D>no4hJond6lzI4Ula58te9c?$dCqO!{6>Y!`=@@ZTvxtTH~YzhyqsNE zentId{={c|u0pkc`Bj@fZOhYISKgnnI+4FQio^c&booCwE19RrZ>el+snY?*tZIpC zL`h0wNvc(HQ7VvPFfuSQ(ls#DH8ct_GO{u@wK6i(Hn6ZVFnB+Koe@ccQL0sLeoAIq XC2k$_&hFm})WP8C>gTe~DWM4fV&fB2 diff --git a/graphics/pokemon/combusken/overworldf.png b/graphics/pokemon/combusken/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..b4302f91aa974867bca8d41c623401491549930c GIT binary patch literal 762 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNU@|l`Z_W&Z0zU$lgJ8^O!f%! zWnidMV_;}#VPN7Zwy4aC~SG z017M!5b$si_;DfO#fu+17DN`sf zGe%xEWvQ0dz~4Y2f#gKLG9ax0#XyRIA!+A3pd%Q!d%8G=cpQIw$=dI*g8YW5)bP+d?y>fAt-ny(3xlR$J#~Y4gJ4dRxu}EuU>> zFvmJ}h4JL$fwvCm-rU_N<*e}a!~NfjPWiVfOfq_8`p-=)Z9UjC z!?V@j|JBD2e^;*KrB_&0+VyS1=7tcQA!xJChcIQc}J=a$r zvw7~XpD6S2*(M!}p81;B^PJnd`Hc#d_fP#+xvqSxZuXN0c{#hT{EGU^{E5%_T!m`? z@~bv|+LouauDm~Cbs~Rr6o>uk>GFSWRx(eK-%{DuQl|rqN!1e9h?11Vl2ohYqEsNo zU}Ruqq-$WPYiJZ=WMpM*YGq`mZD3(#VDNqdJ0psQ-29Zxv`X9>=AGTY7nE2$UHx3v IIVCg!072X?`Tzg` literal 0 HcmV?d00001 diff --git a/graphics/pokemon/croagunk/overworldf.png b/graphics/pokemon/croagunk/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..feeb323df1c72cd4de82928a932b066afa2acd69 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzagsfPd>I(3)EF2VS{N990fib~ zFff$rGcdf0XJD|J&cGmEP$RmF5h$S^;1l9H3Q!EB7#Navz609BIMLI^F(jh(?KH=- z!wNhux}1@nkAKhKE~IwSjd|_eFQo@{HvMEuOX1KteFYBw3kVut6xAzgt#%aex0t#p zic9CG#dM7WeC~6+h37x1O0YedZFiK<{ZCax_MEI87cBQpuoFLFTsLcb&4mXYznRYa z_wdwADL#BL$?~9h)LXahL4S^4OKBD4Z@v}gz*sfsXwzX^qepocWTQ0yZGOi1>&}1W zEuNnkYR^?IkJk2J=Bco#Dbx6B{zSih=YK`@o$I5IKj^rg?Iq9ub+wl619Nva-86H@ z$MH7u=l868B<(BrKtw)9q>wki@TQm8#LyoP7BH{bGCTXb>86jLo-Jtho;x?N;Z*HA z+vg9x%cf7ry(xL4hi{&G!T&P{ZPn86+>=o&cw)Hu&)Jq_MjM_@J0$j)FS2F#XWr$Q zuBXos-NFA()+s#J^u}lXhm7)!ow`at1mt97nzGiW9eKR;-2B=FVhNk`8oI1)qK>DX zXmEXQbw2Rf`=0i1ix=%HS1fP8_H^xw=TEjD004R> z004l5008;`004mK004C_008P=0026d000+od=cSfB*mh zKrkSPU?{kNNO({v=;-*cu$cI;FoG2{Kv>{_kieio?U7>L0000GV_{Bq0000W z0000W0000000000V!7`6000BpNklfqKUwE=(t%G`cH+81=-JvJ6HV4+V84h{o)-&tfp1O%-!TQ` z6b4x7C4k@+2C+P@3J6XDTniBM!xInmUmDRCnEm$yFjWrRfllP=x-q~)F9G#qVGyf* zHn$Yuban-p%6c3JRmU{|8L%G^8_RJ*3IP|}8PLv322A=5Fxp85iwOlFePDXD6*Hjb zhXW*{^{;?92mnVRjys$EAsMrF#v7pN9YE=PHFyI^^$r(8IIsakIap4*l-6%ffC1tl zfP7I|zXbp|3jss|XaG$w0J9x42)WrSz;J~PS^!P&An*@YXzm~bWStjj?jUZhc(%x2 zxa_=Pa$ta_SAb9eM1$H(I=!$f0e3)6PX!L7USU*U0tg$1Hh>mD-j_=*aP~(TzG%*o zDrA6JF8~WWYA_PmDTNwf+iJj=Uh)TI|AYFne~#(`#;u{svOjKO_IoHm0cd&!SlEep z)CNGU8j_yt9rX%O)3Zbs2@p@yd8;qyk2>6R=^Ob*0bUjmOtP#588GP;Ae~Y1A2*OI zsGHdWs$K!wkz{xZiVvjM&uJD7kWKaU0^|~Np1K^>d7UBaH$dK6kY93%95sU8niXKU z>8V9EiUU0Nro-3kB#TvjH)*eqUar8eO3p*NrVs{t1sF?2Cy*16M~`)%DxhFjdfn~R z9{}2H?C{WGsx;CgAf^)OarHNFYx04vgUI4xp=~~2=h-|B7J717bkPKT`Y9MQf@y{A*adH(#+@ft2L)%iKj#|7a<4bpbVO4kSu z==)piWREtNz6=0X`pyHWzSJN+e+!-Vn&f@}yfrY02dMu=)M}ZPyPSQoQtN?d;3G8D@fi(@Ivc#XJvN8?`m- z>Z*1ThM2HBkqsSX`*uD$#&knq``Hub!BdViyNHF&PyTv4La>3~CB@Vr*rDg;#}j22 z91p(r_$nPC=wY>ULt(u-mtC$^;XOGkjUBR*b)wmIby`0UUE@yD@+y#GUvNvj*Lum^ z_@k@tpOu=S$)LQD#p8A|v;LjFD#x0iiyP;vtzhh7(_yXXf6CNx&$*wo+q{>r$)R_C zQoxg) zF+A1y!&lyP;pbri^M4o28P>*ko{-hpbF6RcROP&%0U!3+zh~N{ko8?6M{g3x&vNPh z%vCkBlYJ_7@XdX^Q?DRZ)bi+4Z_WAfwg)%wEYaXHd3RuO<-7%gUynX{xkqE)^v^}w zsXoD--@88?|1&4RYiTgwo(H=ROWkC9a<$!_DWvXVys4PU{|TPun;XvUU=9E4`M5Xy pNYieSdUyHH{&5S18N>eO|7GaW5=)mo^IZTGU7oIfF6*2UngEEJ>Fodj literal 0 HcmV?d00001 diff --git a/graphics/pokemon/donphan/overworldf.png b/graphics/pokemon/donphan/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..709d1cbbd3925afb0233e4bbcacea6110168062d GIT binary patch literal 803 zcmV+;1Kj+HP)Px#Do{*RMVQc_7$`U}NKkl)m=F*UNLX-4KuCCafS8z|SO^G+7#O&?$oTm9xVXT5 z=zQt`000nUVNP}c001BW001BW000000001Dx$gP^00N6iL_t(oh3%Hnma8xbMMK0; ztNs7qy$8^=MoqLcv+j#Lv@sjWfkZTf+ittYR~U2W>rmY3H!F_*>tB z!Zx2h4z{SlkzMZsBXaC1(j|_Kp?Qaqs9uFjT(M58`RE$A?LlsDf&Kbfsd5C3np-y; zj#?M_y+)fu6Kha2(($Lp77w<)8W&Mx#F%4|K$T+-st_@s5It-iJWq4XC7BBhxsu>} znww9j0wat>n3JCO&xTv&h^VnCE(=7v%q2R<5jXFUu5q3RKj2#2*mwL;(-d)3&+;%l zhr#l5;{g+&C$PbBB@mT&2p21d7FU5DUhDjrC9V^w@(_|PFqb&$0x7Jl%@K3iAq#(r zlb%R~AD&Bz;i6sRBsYO0Eq$8Cy#%VA37dRjyK?52A+WyTp{Ak`}iWc;cl` z>o647;1<-kDDqJPha3VSX43f~pK_6`uf=tNDe<)Q>50=+3aInsqO4DnkJAOtopy*x z^mO4hw+Q63+yqW9UbdKD(>8%BPb}*SOPN5Go4`@{^-_hiyfT3me@K~t04^1Vqm&8M zc|vl6)T~9xQ3B$PJi?XM9Iq$@*CI)lFDV`IN6CY~ZKEA>{oi{AsyulDmY)eMn?RkD z3RHdmrV=61(U$Ao>Od>(KBJ7B7bx|IkOg2b$DL1lO#8ODz!G}`=7@&2tq)$T2%VxY zLO$B^l&qan+9sei=2^*}Kuhq`Z=+$ke^1~?g8TQ|=VA7-Vd9dzN7~X|A!p}*^ZxZ0 hWX0p8mfQZ`{s9?yBN6H_7$^V$002ovPDHLkV1kZdb-n-q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dustox/overworldf.png b/graphics/pokemon/dustox/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..a92edca30b6cc7498c02db5f5fd12d4268d65d76 GIT binary patch literal 846 zcmV-U1F`&xP)Px#Do{*RMUasA0000$SRiPaC}2n+@YraOa5zXfaG;RbsMuI|V5snDXt*#)I5;@7 z)0_DK000nUVNP}c001BW001BW000000001Dx$gP^00Op2L_t(oh3%KylG`8*h9h7t zL&*ETZgn8FB@uJc&Sa*wF0%Ii68a>-#*fEsx7~KzZU2-3{Hep24blQ|>F`~Hyx?0p zeAyr`0Mp9h%eLa90y9jvLE--*BJYy&S9MJnbWb4;%y$LI1!hRI8sTRH-1i+}`>`^} zfKG=ai(Z8ILr>Fq2T`;*=BqQnv+gEIS;|HkC;^SX6$_YZrLLWIfLfCU4Dsn4pOVp2 zI>n12HUI=(L3Or@tZp3?@B!OMu+g;z%$aWwodQl{D4>ZqfD~Utyz3$~t_&I~U#Q?x zAAr=yosD|u0dsyn^GWAhTYyyX)`h>i_kolfH7T|Te%N4MfG5|{H22cpQ(Yr}80JQ{O zeGX9LX_iH&*>&*`(7LHNG`TqdM&0jXPC!#sxW}!~R5?I)FgnWtFjJ2k^*2YrB=gR* z2)YE^8hFobYZ4m(y`KDINC1I0No(}$0okJ)y*qUP=G1;)IggQ8bh@-HMx9s&)OZKz z_4t@2z+Sf3MjrG_OT;fS%6isAiw0np7f}G@H72s^d=pw+WRKD+?>z-Tr{};g@3*qS ztG$4p@^PEzcu}zNrM#m67n%E1HQ(S_B;H^*3T1+U9$tj-}sb`@NpH#?W_riQLz@;t# zwAMZXNSoWFxrdIpBVK&+iT+XLV``^He~e%2a@@W8=ESS~GQ{F@YN=m;^RD#UZu|f2 Y7jmy1t(Ef5WB>pF07*qoM6N<$f)Wpa0{{R3 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/eevee/overworldf.png b/graphics/pokemon/eevee/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe402bbe8c61db1a46ff2677677d023314384cc GIT binary patch literal 637 zcmV-@0)qXCP)004R> z004l5008;`004mK004C_008P=0026d000+od=}5 zUj?X=RPhA_9NKEdAiUPM#{vmo0xQ<1x%y)cRa&5~0)|mizS!-0ovXg4kQia>4>?>> zZ$ah+Vty(-!_=4YqPwg5yba3umqJrt$_uwsqBMH}GrrQ3n?B_~7tk1!#11Op z3y`NT| zO;bzLed0RieW%WNp}~jFkPaSZfs}X1LtZGo!ePlI~Ii2(2uO{PTsy#8mIm|k=JEcA13vn_j4$OzlD&(5vUwV zJYIBXTJSu|dIGEl_BjBJJ`jlH}P literal 0 HcmV?d00001 diff --git a/graphics/pokemon/finneon/overworldf.png b/graphics/pokemon/finneon/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..53aa2a1a1211a367c6b8a3b111dda45c4bfae4c2 GIT binary patch literal 657 zcmV;C0&e|@P)004R> z004l5008;`004mK004C_008P=0026d000+od=FbG5gwqvLN|G_&FN6lIvOjE0Fl2N-!dx#xiL$WN>rcIkR zZQ8WIVItRG40DH%na1{J`X$$xBL*c>JVz;SRf#D^Mio{Js=SnWD~40#BLfCFBVN+^=wypy@ltF!T?1&7G43r4;*+@F7QoOdp-2 z0Y`!s9qH+C*IYOf90f54D>5mNNayrfBSB#v$KK<2PEOd~9!#-p`ciw0a^>S)w4dNpJJc-5jFEg?Q^vWAf^uj2D|2w4=#bUy0^Fzfs1rb8-P`v`J(nYg5P?9s7q8SjH7(AnL6xA9qgKKoQ=^YwIDsd2LkSI@_-8@R`XC( zJ2)U0K6J4Ekl^7wEQj3RB~x#CM2Z rI9#s#?RSr$%Rg?xD{085{Y(1-Z7B=^yVYj400000NkvXXu0mjf?KT)! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/floatzel/overworldf.png b/graphics/pokemon/floatzel/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4483fc557fdc5848ad318bc336dbfb9a583651 GIT binary patch literal 991 zcmV<510ei~P)Px#Fi=cXMVQc_I4~&aa4-M>0JumXfIuM7xM1+$fcU^5=;-*+fB;xnSg5$jKwx-C zh`^v=0B$e$vH$=85MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg}K}keGR9J=WnA>vO zIt)b(0U%|ivi|>X&jx9y5(yGh`%L>1%tVuT@v?Ct#Q1jmu^;bXs^i%q=S5`_zKEMRT9#$FMZghX zvtf)Q&VtoNgx};;H;_@5LT)tK<2}x(FGYx#fx?JC<6{wiix+_@r>O%07gc$ef9n&! zLLy!V;2xLj@Ixy!&--ZI&1|9^QDJ4d1tj&4?BYvZ8<Wt!@d-F3 z5jaN77__b;IiCkn&JAxIgnkn!=u%<=Q|CasaNh&?t*ev%m_uNa68Ka?jg2m&h&q08 zutZpei$E6LAKW;=kNw2E3_Z6=xUI0F4u7gR5}Tyy%|IJ&gI(E(dlv^RcnmO$R^1+tCSVx#s{1L(3C`+xeLCoBIx6Z9=Ex2itk?8r_rQe38Qu zAca8Ob@5Pyu$>)n#?q({oKUNh&2iwu-3mg2={Sl)wIXfmwDKqJIa_N$ePlaHPL~V0 zm6((_CH4Aaek)BziwB66b=>w4RBqVi=2tzWewVHu6z;_jIYNvDOG9dxpn|`-gTJ>R z%e5&)w7N3T;(-o%F&zl>6L*<@u-#PfwsUWz__*+6@}&a05OEcu-uvoRTLb<*Xpn*U z>keCcGG8bDmj!B!yqCav#Dv$a1~-+_KjYoF(foJ;KY4$;%8&g``ws&GAdv)J%kuyL N002ovPDHLkV1l&&#&7@t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/frillish/overworld_normalf.pal b/graphics/pokemon/frillish/overworld_normalf.pal new file mode 100644 index 0000000000..dbe974dc05 --- /dev/null +++ b/graphics/pokemon/frillish/overworld_normalf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +184 128 160 +140 83 98 +208 176 184 +248 216 224 +248 176 208 +120 56 80 +11 11 11 +229 229 247 +168 48 64 +88 160 192 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/frillish/overworld_shinyf.pal b/graphics/pokemon/frillish/overworld_shinyf.pal new file mode 100644 index 0000000000..271de05df9 --- /dev/null +++ b/graphics/pokemon/frillish/overworld_shinyf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +192 120 120 +120 56 80 +208 176 232 +232 224 248 +248 152 152 +120 56 80 +11 11 11 +248 248 248 +128 24 136 +72 152 136 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/frillish/followerf.png b/graphics/pokemon/frillish/overworldf.png similarity index 100% rename from graphics/pokemon/frillish/followerf.png rename to graphics/pokemon/frillish/overworldf.png diff --git a/graphics/pokemon/gabite/overworldf.png b/graphics/pokemon/gabite/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c5f2892df2ddbe8f54536c0c39d143f6033e07 GIT binary patch literal 880 zcmV-$1CRWPP)004R> z004l5008;`004mK004C_008P=0026d000+od=EJOd>DAqPZkc5iVR8Gt10;qP;8GK>Q?95gu)Bhw^d55)}M z=4MgMHB;Q;Fpi9q1@btS0=~>up4qFFSeFmOxK1z*Ln+|P9LZr#VUJ&sWo5ky>+>f( z&p{t>bZuH9p}-#3CJ5jY#D(??PQJ+WK6h_O<1m%pf59yPu0FvvJ|w!F?TkSpew$-n z*>O~X<@i0GC%B>H81PmT(B@JlqEFIP%Ta@iK;Ww?lw%UgGVk%MaMm>@nm^=H+A5I4 z9LbvZy2uGo3ih>3?QdLp*ca3R=piX{%*QH6oMGcp5kQ)C zbgb!Xa~Fu5B;>TvYJD{zFPK(d8Z?2Z6+)UT-R`gbZR>BmFlZ@|`~YJu!AKSy$#={-&#?iP69(D_oLA&Y8+dS4;L5r7n*bjV z)SrA@v#)*iJ}B)%gMzg}Af6xhJl1bxFgAYFH00?Nn2ppPx#Do{*RMVQc_0001BaG*#~crY+fc$moe;0VB&0Dv$MXlQ7tsHo`Z_{hl6xIh>U zaw@a{000nUVNP}c001BW001BW000000001Dx$gP^00d1*L_t(oh3%N@lH({0g(Gx` z9cS|Xue-W{3>e#;nysB5vvgJ3@dxJUg1~t^{%`+cBck8pf4C7P<_n2e94P+~SN|zD zeThY2;xh}bIC3U^Xws(7rkwE&Psw@C*|~K4g1bPq?#h634zY|$VAhrxB;T7E?s?7w zSD`=V*2k>Nz={4#4%P|$@iv7{!1y`W&{ln>FdZCl#fy#Jj=6Qum6i_AGRMJ#mt5@; zNyWn&ucHGlxb#?_OEqt*@P^C!Af4rDe_3Ok=;z!7iic}sOboc-p-;->WO3YctxykF z_;h`bp<3N=((={_B)#zk$Ff*{v#yV+0oS}}TzC;n<#SqVFS*{K5J-=S1FpD5M-r9g zFU_jV4KI^CWo<69TA%YSx17VlUvsUqPw{U)tMfO!%pg0(k|Mk7z8(Abz$fFw!9MQM zUktn-yRI)PDKcH97d!-FgVYE4B%kj6)(d*SeM$;GjH?YrpmX~5i~5V6A5^ScB7&|` zOwK&#yb;K&>~*VDX-!focf|lHf0n|*I|IYRqyjBjZJ2HyexGe0ANXOJh?7fzY{xln zSZ90}n9^rm*H22D*eHu7Z7iI{aOnVS!8-%1hb=*n;7LMK_^VKfn@rI2CNO&hS5xQB zjUIX6hVKILF@YbXP4y$z0JOuFf_DbGhshs}jN&AwSZ#8}Y2dU+s1YbmB80@z0!R`e z@XlQzOrSN*GdV3puFA%5cY;fZS_9R?>?MY>yGY7B$4&+NHt;<{kqTsCmf1DOX;=qF z)j-R^o>zhD-H&=%J8)+J>-gY?DR~w(5h}C1)h_5hJ*iVl z4ZG9E?H6P6zG+i8sc&EXxYHqJshF z+&$c!)qJ<7#sK@?ci1D;+Mq9uw&Z;)p*gKHji#F?Iyc*#154<%1y}ndJSPj5q z!Z9%bu90lb(Ba$`wC6A(;Fsix=!0HSOk9Of#}VVIhjr3YrBOpr4JZK!ZVsTC0jvv2 zHOgYqH@9IeRLUJksWEy^;>A84#71GbLY+R#PpioqjoG`6!3ihY z>e;0V>>nL>NlRLX>eN=~JcEzp(eOS(L$?xsl{x8P55kP^$No{^VBpCQe0mr4H@Xe>$dz?PzT;N@Ut&0l-F@G6oJ6(79L66^R)7A3@{|nncU#cVM?$dBJ P00000NkvXXu0mjfQuABZ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gible/overworldf.png b/graphics/pokemon/gible/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..4481b2870f430a15f857c6d5b7bed6d5160ddd4d GIT binary patch literal 681 zcmV;a0#^NrP)004R> z004l5008;`004mK004C_008P=0026d000+od=6_dsJMv0*Z=?kn3$M2I5^_`jG$HDD@Ra{O1MuG=Yx`pgyptoH%hWIO1REAW_cQcM3S=)Cs=9nS%lZ zoKk{5*C*r|0(5lf5MwSh29Abd70k==VA!B!CC7Ap-=e45Qr4#*_qLZ%bbL>X33IfdBpQ> z&$tc<1`GmCg%O7XFIBVTx^S{K2st`5xAmX##Ig{T!sd`f93HfarYW+L7$b1vW<09X zj7jPR*Aq9wnXz&ka=QZo*Bb&{M`VTX#Rq5b$c+S>L~uw&7P$Pck6NIRu2OR%}%mlg|E!q}Y)rssOfAL(3*#b0}^16x0wxUhO zjM9N$hd{8k=B3+nG2@S%jUlSrwzUz@xmsi1xHg(h4r%J4R-K3B&EacRfZI#qeJ-51 zb%<1<){%v)(}SvzJWjkTtX6qc;+s3S0F-goA1}Vop|GOGO{2X-t$0L4kD#MKDhxWW zcgP;jyMwp?9$&dS34nCtb&q!0xSvZ}11u1H(RKv(1HTe)jptoD>=*V2vIG&Y(F(2v P00000NkvXXu0mjf+Vmyu literal 0 HcmV?d00001 diff --git a/graphics/pokemon/girafarig/overworldf.png b/graphics/pokemon/girafarig/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..057145b098ce8d5f7e31a6bb794897dccd025dd6 GIT binary patch literal 814 zcmV+}1JV46P)Px#Fi=cXMVQc_NKjY+008Ld_@J=JU~rgdP&i015XhiV_|RaOcu=@dXgF}7=y13o zKzJxHI5@1MzW@LL5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|kV!;AR9J=Wm(g;p zAPj~jup~fr-~Vl!p!B$!fZI9Ky)omAJN+X32}!imblYvW-FDl5GUs0Jf6Z-hjf3~q z!Fdm#;FAlXt8m0W9{@ltoKIbETc>gdDdcZ*zj~#h^ z4v6TyY~UULJZT(qHl|_^`TZ`h6&5g}DR9IoWmq?WoaiiI#8V;+f&)@Y?{hB#Q%Z)y z5uYHIBC;lQ4*lUWf3yxRk{8Ftm04gZM}Z2*6jDC464Js&<`=y}#+(kaJF;6wvI`vI^uB*BrxMpvDPPJkA1sXr6=y z<}%Q{c)UQfGDmn*`NG-h^FFR0~Y|(ph<0xfMXnTs?dpr`w(b ze~uYk1d>zb}1gt>&QoF+`>B|Hh`8h2~-B sXt&LKPx#Fi=cXMVQc_SSVn~aIgRX0Pw)r;F!>$ScvH8_y9OqD3GWSV1UTb*oYuFut<2& zXqW&10R64J;Q#;t5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg}L`g(JR9J=Wm+Nxl zAPj{gVlXCY_5N?$BLOx7;wGD&{jn1|b!~t0K{~>hUM`>U8K3bPpYeYUBKorcn(V#8 z-xp9q&Ycth^eBKA9`;`0?+ZwN{+Ikcg)js#ld6U+%R%*t>?}QRWoa%z&kC3V=%fNE zU?`FO;z|B^DnXuQyLh%?hW|~0BR_}amdE!%;eCZrhBOE0!ZjShDNM4@QVcfS82q+C zlOQb%DVx<;xDCKz_C~e~ev5zD<{65?mNy2s0uBN0MBw0KhvZxcB(XEraudLg*p>Oi zviMNucU)VQ4et4FFf{@m0e&xF6fk_u-z{=ldNj|!@L&SixgfWNAg}T=8pk_6R^A$sQKmk zqyS+2E3D&+mKcG2i?3@=PgtM-!N-7@ zwk>if4xu`x4K?kUv_&n~2E{``*SENe)8e*o3(yW3ewD*uS2<^IpsxzUP2BL{LKhG> zseo_yFZ|q?_1NH)T23jM04+d_SLZ1&7P43(DzA648OTeU2Y-$Bz)^YXA}DS#B~B`geP*E+Mx zll(HLGmW!J43Eau# Q`~Uy|07*qoM6N<$f~E1&5dZ)H literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gloom/overworldf.png b/graphics/pokemon/gloom/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5ba180a5ae7bb52e3e2efc073bf7afa1a6e2bf GIT binary patch literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzQjEnx?oJHr&dIz4ats1|LR@ED zSWuxLup&SJD6qo7<3>WkjR_Ne6i65Z6ew6^I26nX&}dk(Vg*nZ0$8Z zbGONEsi%!hA>b=Ni}}y>tZhatmt5<1ShY3E^fGQa7rE!yed{sQ@pONi!Gl&U$HHBvDVzfn;Q6*oBJNl@Z)>cyR^4& z+OLv%muD|aG)d=vDEjiaS!#E=#f)u$AZ#ivz=lP4|CyH(# zV;|Z{pDPUdVCXVwN#q57i$KE@5?nIHaSue!Z&vS?`~S%6&!IW?{FNqm9xEmt`s1Q| za85QSm(Qvr`zs~=eQ$lYJyyl&|1O*L6W8t;TfPRf`L8Qui2nIpbj8O#XXP%%+u9T! ztNOQzN&n-4TP*WGR?O^HHZdqX#w+(^!c{GsyvAQF<&R$~hc|EbwCY2I2;giGRdNL_t(oh3#0;a^oNjj9>uSe$fB_?Mawm5-qez`_Q?GW}38K zR@wy%?A~sl_{1kZ@rnN~NaMBPFJ1p_zUPJTlKvPYC`I-9YkaXUk|}@0VXBIUl=1=x zmvd>Qh5}l?bU3X4F{1+Nq?qbC_pil@;nbS0T(~$ ztcL}^<4AvuEJjTt(Six$&_OCyK&b^v6;S*-4mjcq$1_+Uf5f5wsKSMUewO0w-*If9 z6gB~+<}W6I!2}LC<_`uS|0@Gg=fMmFum8eV2Hq9W_@Uup!XI#GVAIrrNLX(_w|*T* z22?>}lC2fkgnu-Lzk@Cu^TX+o!-Rj~$iPl}WY!&&LjmjyhXzs#EIXORjdo$Ql?^!N zhrkvgU_M9 zBtA9~*$zvQvJ=1^cMeW|7YO*e`<9NwUX)!-VJi*{RDXP8pi0pG*D?AN2*}r&;fCvP zPC(_~!}0A{E`z}W4u3hS0W^0Pt}3Qa2U&v1ao8{c@;T*>=fuE*bb-%&V%ymVT>pAL zr*1b*tyrEtM^t=eKzE7b4A*27ZDDiA?S^4@Bg=gW{KJOzWgc)lyPW|!4a`p4id%H}YQE$0BbA8~X(j)n9l7wZ(KzX`Z-6W|<7`Fu9!$VW?XgX|G!bi|DUsDC~h zC`~}eGg^WvpU=j8z%wvlXWi;8$ewW*O{@ck&t3-s&Gv}r;ss3k8Q>WiSii(o1FHcu zUO>y1zy03V4LtIJfiE+~=_b3R{m_74lf~6_qW28^o`4?*#kUOnp`dU5qv0>dQ=9(- X=A<5+BK|*E00000NkvXXu0mjfxb9*Z delta 734 zcmV<40wMk42HOUZiGRIGL_t(oh3#0;a^oNjj6i_w{Qv)+1OyXnahtRcotx;vop@Pk z7c8)QyM5vlpZLTl{<|QJ*M`4z|F`*`7s5;WV~n5_)%&mU+5QkO`7;hvRXn7WFK}=> zmtJZrpyf+GkH-QApQEikMPBe{9Lf`$c{5PQovU{oL@p(nf`6$1#Z=099##Sle$ZJD z7yN-E{V@s~H8DpEA&5fOGX=et;_N?gY@ie| z0j1_ICP2UhPB`XI1|a_{15xL}3g3$HRg@;n2XQsRI#;s1eQVPO5nZ%8D7POU3IOc~S z79n6h9XQfJ4GRPpV8Ry$QcvH8B_v?rE=T2C_7;Np6bBB^7v9+9ss03Zuz@cOn1Uqt zjhVN*rAXNckbye~jXwkezV5zd;IJ1pwJGeyfq{xI41ZJ!+W##A0r@&J1J?&0SfC-$ z@$FbHlfeQGf4)}(XzmVNRV?2QGONJ*-G(ucFDVZ^Cjl0C2t4yiY-gWv{dGR4ZZ}P> zSYEwHRQ$?-?h^MFuE{9c!sdb710(K1=EoBFmksO7JmGeBI|JMdtWMjCTZb$SsDoYQ z?S7N6bAMGQ=D^iK@tydXV$YY_(-W=Hs8wK>qQ4kSct!?ReCoUE z6JK{N=K#8&adbY;g+lLPr@sq0a1-DhEcwzJbLOKZxIy-e3p(Ov0W_}921*w&@QjvV z$(PocPk06f?5w-`3bJ?Hize0q)AdO}w>{&zcvk^Seg=3(2ChHis)4HkD_%g$mcRYo zHw--Ufq^eG#pNb@N&BGzza|%VuM@pz;P(XlI4Hhl;130T>mLn&IZkc<4+LHou;Io? QF8}}l07*qoM6N<$f)=k(m;e9( diff --git a/graphics/pokemon/golbat/overworldf.png b/graphics/pokemon/golbat/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..658023601d46e08e40802f7bf8764850edf6b7d9 GIT binary patch literal 859 zcmV-h1ElPx#Fi=cXMVQc_5I8_UaClI-umAu6U_gL47+8p4xJZzg=;-*kxWG6#Pyhe`00000 z0000004&i?egFUf5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|y-7qtR9J=WSkZFh zAPkH^fb9JL|DFT{6Kipsv=5z|=)s+MS!ow6uzS0G;uD|v#3%l{AdT0CzjXh%`JNZT zOZsDspcK{nukqRb5HI;N4pUV;q?9jka66Y?YAT@ROFoas0tTO>tvy9v@Mj##6PtN6 zP{*CCcN|16C7FV$0L4_wc^*~*4t~&C4;TD_BmFT78#OUU3n7R@2dPv6r4}evK=JE1 z;fT)?TL?q`j6?lVg);@cmg4L`aBQFyF#)CKFD5|11Wq{SPX-|WD+5vI!3+ei|G=*d zyepvdL&w8{KjF~8rl|uFi#~pC{RWN;s1eQVPO5nZ%8D7POU3IOc~S79n6h9XQfJ4GRPpV8Ry$QcvH8B_v?rE=T2C z_7;Np6bBB^7v9+9ss03Zuz@cOn1UqtjhVN*rAXNckbye~jXwkezV5zd;IJ1pwJGey zfq{xI3{(l)|1AOm`8qQL*9RV0pdrxl?N~08!2%9{zE=Zi?hag4EZ+_?tHAr+hB1&Y zDGxj+0Ty@&Jo8CxXPw=7HM-Bkn=w#}fFL z4eQH1;dXXA1KbR(PTPuGhb#@KgI(qAev`0sRVU`a)j{!{_?TkPm)g@4t_i$>y$)E; zu;Mlo7Y3+RV3(r57)*FZ23CCPyXq5PcP-}tx}R}$KF)Ucif96)&bM?NkF$fqNV{tpCR7O>&QNG|{Y002ovPDHLkV1ka=Y<>U$ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/goldeen/overworldf.png b/graphics/pokemon/goldeen/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc987e9e6e19448aa47b890712b8fd9104eab03 GIT binary patch literal 856 zcmV-e1E>6nP)004R> z004l5008;`004mK004C_008P=0026d000+od={bC*e?Fh_Jrx}Wo$4*s)1}kASXg7c@EXL=s+#b~8x1B^HhTYb=;tqjhV&)Y6 zK?AhogF(%O>O+sHz`$*C@Tk<`NnCZfbrwXKw^7K6y96tOlm4xa?TNR=BUM%soJxvS z=gD9fAD*KrGEPzhBcs7P!dYXt!W4AL1*ax~08$lLdnBdn-2q95i)Y}&%A-j#1JWC~ z$0<?A!d2VoZ|@iWROP}|KE?zrmf z9ALfF3W=@13S>*r1qWfAbP0PP#TYdan&KycOrPzeA9WX%u7}YgSG;YJA`nl&h;zwH zCy=)ecaCH&QO;E$^pVgMm$O7v1ZLeVpez@G*9_|h)ZpE$vmLWwMMZRgoUH)zfhTvD z*sMYraaD-S>X;MH@iT{Imq-e#KD+Lkl&QgK+(^-1(GEHs=H45Voq}pm&q7Ckeu4lD()R36@Pub?q=)_9E5NS&kY`7o8|OZ1KsN1v`l%nc8M>3u*?jeoE2qB i_?PjEkAC6_H~s+L3=`5=88%A*0000I(3)EF2VS{N990fib~ zFff$rGcdf0XJD|J&cGmEP$RmF5h$S&;1lA?u;E2Pga(lJVuyo8g20Lf3k3s#j2R9c z2MRnQ5&|kTEIb12x>vjest`y{^eY3>3Q!EB7#Navz5`mqIMdU`F(jh(?bO?S%?3O! z(#dZQ{QLiZU9N`fq3PRJXZ@Z~sWH{>#F-fv?&UcnK>R|suTmNEd=n)@7!$QFZ++Q0 zX{M{TPEfN}!t7NQ2BEUizd9BaG}JU+dQ;aT*_q_mV*Eg!$)o9td}Nx8wZe(di9D8t z>~Cbu1o|d?kUnU0-qYzJ@1xrbzw>RbVT(S{C%o^auO4e4QyR0tImPXN8J*gfS4`UQ z=vRY8^>bB^h{76)9qmgVxOh!-wZHrQ!I|b7t!GF5BMKk5JCwPF6gpk2nKj{J;ffz& z0nBX5>nuJ@obZ=Pll{V6-%m$>u3cnYE|k+A{Q2XieFvYayVbmHICa%h`2_#DaK6=f zf0Zx2uF_0k<*(D_sNjjnub=ta`dF3M2|d2)P3+&fF5Nr8vrf3_>zTPtu`%Ck_B=X$ zN9$F_l=A7f&mOzmWR{##zc1>;nZ4yl+=QR6-oc{aFwJst%}0Z8*5%w$tdWc#>r2nA zUGV4ZPxci1mR$-D%DZpOdv`~-B1d4;r0j$9_z#FJ;rqYF=x+J(dguM+nZi~VCLX^G OiY!l8KbLh*2~7aU*7NlM literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gyarados/overworld.png b/graphics/pokemon/gyarados/overworld.png index 7c0400b1e5b7c40125191ded554f49d34140cf63..e2ab6d3ac5228fe9bcea770d9164af213ef7b744 100644 GIT binary patch delta 1458 zcmV;j1x@<$45JK?7zqdi0001UMu)eNF&hyt008P=0026d000+od=#+Y5ISL$e-cOP?=PJ z1Akofb;z6;-VyzVw?r0Mo@QO*I_b*2<=(`zK$%sriQbw1hF2pP+x@IN98cGmtO`F} zFa9DBgE1mav;lIju$^VN$aVsBly%WNS7QP?wL7+`ibB|GU?!w3et}oDIayjPLWdI%p zGO$>PeaUdT5Fi}4c-my9bA%Kfe0(dG1W&9yjiwC_t2HHgX&V4tP(HTT_73Vubq==Y#_<0$EurdIX$6 zelTJT4--k?Jr4BsGWK*ZcSWKP{0D&pJ{<(XFXzbOwjw|YTjpxUTY*J@(7$OLrb*+T z8@$Ysw{c?pm7#Iq-^Fhbc*1{Mf=;}%d;tAU032=#HRDAfc3fdxtxgzb` z@DO<5A>fC>r~>vm@?WNg3s{RsO$v7c;egQUyCN98KtSpf3>nnDbVV;_kt2x`o&|=~ zQS2`UGE7^7RbY=R?H_*;*muvIk&UY9Ahi3?2xtW+yz09msGb#=w#UUo-HbkrFPRa> zCE-ONndMMogy4Noun27M5I6x1y*9(Re>^=I8Gg*L4Bd{iBH>ve@kZYTL4*evrV=4! zWmtBoTxDMZydcD@z)3?+B@Pe|1Hmk?!CeSOW;sgW^NApc`qO`M#<5ET?eHv+c%$!v zUGQFaMDORnILA21UrET9#raKr0;z};9PX3AUzMqS(or6Fyn{5 zD}r?Jwq^aix~O||I7M&&+wl2eV^ZfW;4Fk0D~+PXh^AZBA5i8@b0Yy|G+NmH&uXT zM$it=0)6po3DAik2no-IP|q<5e&>Mek%S4a0w;-#Tzb`FijM?~z#bPjbpwG#b4V4y z7fw{Ej1y{w&>vfKj`aj1YZx|~4I~;KCBls1t-u&XbCQ3DltUfCEbzd2265I&fH4%i zwn}He$BV%BI@l9LJ;d1HPIv$F^W%3$FyXDhbVp>8hbw|fV1ttiQyLo|6mS8+&e7g_ zaqDYJxDk->BJcn~aQ}QhI|xQHhtDKtez3!1XaT-RWFbk$k0ydL6<%{K&ApBUO<;rb zK(L)#jy!)|f{Whn-bjx)WDo@w90H{-&IHZFnPA}RvObv+j~b`%c$+r7F`yJ}H$_n7 z88;A20uQ{dYkh1f9xVC9{*Lc^2~IewHVy=nhYP_Fjs(eXEgbYMPg6Us8Ut+5w8<_L z&jd~21wJzL!R`@c1Hamxgm#;KjDR;xgo|rz6~Cq@XUl9?>{{( z`1x}IvE099_YJo>>>!ekit9aSI^5#b(xaJg_@4~VRS*M{y|#200000 MNks-uM6N<$g7D3lp8x;= delta 1535 zcmV0026e z000+ooVrmwkxf4x0b)x>L;#2d9Y_EG00(qQO+^Rh0SyKt0D0%Afsu(Hep;yCA6g=6S0O~vci~!u!k*#o+WBC z#LcCrF7zUww%(?}Iuv(BzChR(c26N2e}O>r71H+|Nw(!=Q%a$NJv=MT?|J8)k;a<# zzg+YmSY5;r7c#NlF1T!ze?wO}3u(13VyjLyLpPT0tq3o3OSIm?I7En`bpaExUE%L< zECj1UZnwOR9qmHK49D--!39j}`+j?K%hE0o>fXnjJ`F5l@Di6+g;)HjXS|sq&-c0u z{i@JxZ`FOXY7wt)lsFfHQe0-d(ivE9WO8p`h{#?n`Kr+I?Yi_re{C+Hw6e?)@zKT( z*bKUACvm~N5kRuFP2=Mg2Y`~E(aoHMH| zEI1D|4RYIbV2Ez^eQ7F2q28`o4(&NUGo=~G(zNMxkn6;4y7Q!nbrj@0W&0?IzrWG<1oe6?3tzB82wVuVz%`4=5O<(rHd?b#s7K*V3ks-r zvOpy)_!`zo4us^@4=Y}mM%d!HuuC=j4pb&=K5m4}Qpx%Nt4f!_p-t~Bx3kQQpm%cAW7N~@Z zYe`M`D7gMvz1?dKYX(s*&V{mOI0*{ofk&}^%hCw#RK987Gd%{3!l|_2Pu}OQ3RJ?J zT}SQ2>rYHke`Vs(5O9PS`8kew00b4fhf#4 zO-0y6!SfeYcDi;y)|`QQGoHUdVIwB?Zzz}tI+G3DmBH6vR{HOK(cW<;DAZhNla!G= z$pb-{@o*}to4Clo{#9+BIj~-2FtjoTp$v)K#TLy2e_=|nbM+lD^}IXVMprNPGqtdG+=|ds$=uOQ>|)3KsEUN)00n<-Wo6piECRfw5JFJ zp;mBqf9mN*Qd~)(+LPxHlg!oz$nzRz&~G}*t2u~bbSIh?*#f+FI#7OJHSfVoSIyu>8J>#(osyQMtZ75GCFz? zTP$c!GQp(=@|B*cHWdUudKE)pa$dtV>{3d<<6nEUvjJpN}BV9;R+4gcCkZ-N%c2`phjcTx;X>S#nr(2!tz4snMK?bh1~xjcya0nP-+PT=BhDu7Wa+0XozZks z{wb@kj9KNkU;1k`{JZi0;rbhhbSO$K(LM11001R)MObuXVRU6WV{&C-bY%cCFfuYN zFflDLGE_1$Ix{soFfc1HI65#e&Sf=50000bbVXQnWMOn=I&E)cX=Zr`0RVuw zkzD;16erwpt(s=``U~o`FjCCrX>L6FabcWDCN8XfD|ME zNW%fZfeiqLNt|v!tfGPR^$ftXC+fb27~eN^|5*D7r z0(P^)VO>tK;v}|Kh%;FsP>S#%x&kaU6Otm)V7PhVH5Qa0>gGVkVoR=~1dXJ4rz!~h z*AxJNh`a9<1F4z2xjF}sM($nqDS1ZNUDRa1W-#FyaV#Xw+3u!3WvFPozH!2|x6Gom z38vd#7|Iv13wTA=%o>Y0yTP%h>o#lqY6X(!0SCP_e4mrpAk}BD@!4FbPx@0ECT@b) z)F0jJ^NwJx##S;GtILP4e(oo)nFXI1gc_pSB{p3rD_oA*YtnApM6`LMUB18k{#Ve! zWRFgX2;<7COHtBoKQXtGh)`|ACEV#PHCe_DYmKak2h=>JUw+O?zCUFHl}bjgIYJN- zA9hs*6&%}aiRrzvcYLE;bE|dYWa8uOj<}t-5-Ko;dH&?+-l=bb6RGsXFxF@&;;+_; z)#dIr+$o#7PW}Vv>g2HY{8nseMDg!}5A}5kw*7(ik^!OP^yo6UgXfZcG=Q^%olq_f zg3|Xd?zG^3*>=v*;bh*IYsXkHtGwU)!#q4p}L-Ftr^C{fyf}f5M43~O{zyBvrb7w}LxU-L zyP5LY9)Veb!dtrA({k-T# z=d6!pkqZtGaZV7I2jBX5`bE8*fTmT#bO}X;M}UESNqV~JHJuzC!JT`?XObJ4KS4}? z=}g@dlM8=<@xqJo1D^~7Q@c}-KH=nM+ST+sQOqqrC&Jkp4woP^l>>i-1<6;kCncvX z;g86%mnzDC_+7=By_$5O^;*|x|90T18hc(S71@bWuh%M`88R4Cp}6ys*G+8KMc$%Z zzZUd$W#uS;)o9$1&B%_jTF02IEaey7v48C`G$wW^Y6AseiHupYaGrAE!&#D9Ho++Om+=Xkz z!@$YfE3a-z(;0A=d-(SYW<|rGs=<9y&;80~+E*BlRo;I0-PxNLa_#2M)0+1*pEhOT zhRSuH6@()i2YR9pJI3fm*Y;qMS}}2jE9A3lQbS{VT~SfH<#YxNlrl8mPKl4xt}@aw z^IdjNG#V=q!XNR4N5g8w9m(5_Y~}A)ROQDG9*@cTLFg{#TqQRywSXF@{5)?EGFx3y z4w=y7h*)pbK$H5%%9R=dExT=hfa)ueNg4T{YpQZNhp zB{V%gE#OQok*lh0I-jn^JZFmxG}$S8$v;i@n7V4@6wPH!FJO5YeY2Z!dx{C)8oQmI zEhV07IHMJ`iQwMdUwZ*IZrYq+$<%f9dOlK;C4XRTOOBsk3!w)yKujyo8AF?*B*TAu zf7`9|A+PU*$>Y(RJ*$7u$&FbIxV!b_kyXXjv|!+a8B_`*${~^-r2v3JqEOaITWecX t01D+`hju_Bt&kXne;9=({6}yqkxGls_004R> z004l5008;`004mK004C_008P=0026d000+od=q$k>>uxFhi&Q~&?~5MyCZb^rhXAOHXW zAOHXW000000AjiB`Tzg|;Ymb6R9J=Wmw|HHFbsx~WD6HI-v4p;O9?cIlF&+((irQk&ec$Ip9A2!xfiuO}9=C#xV{J4o0l|#I~ z#r<#8Uz!pBHmdtxe}|Jmp;YZXJL0ohd-(*NK6{Gm8=Q&@)Skc*f4Ef=^6#|Ip5TmJ z(TQK>GS!v1B~Om{eS%s^rHa~{_c&q$lUF%%Yr2S3;S(i}_+ti3uT9eFmNCaBQz}aJ zRW4$SgB7l3u>ePWHb#c4jo)z@bLcaLuXF59Yztd^5e)c!{4-X!$~kv=f>+OQXNp}8 z$gNHKYEmR4ZbtR|bpgJ7ojWzW&$)hEH-H|;5vT3ae|*Hv1p>(h5(Fkg4EV7Cu)lg{ zx{r@IhF8+d74&*RmFs4&=D@=Y)E@d8+H^GlK5Tgqz?K;|l`KE|oLQk+{iwG$P`k)7 z}r18}Wv(1Dpib zHd$rg?H>c!lYy5Q0j9x3Hd)%H&V@5R3sjk!9NJNGs}eu~t@$!Q2qfgiYGeM!EQ<(z z0RxX^h}_s_?_p#SV4dwYkZ}m~DAb{8Lxz?dhyR){1B5`PlOGbz_2JS&n;wW<<4!Q0 z@-|Dp)ys4nNH_$du-YuJ;r(WG4!mrdlr3|fU;IvYu{BR_e7}gKI8!N zsK735V4`7p7Z{tkWEE-wKE{N=I6hf`(Rcm)6d+bJOMstdcehlbi?kK)QL7Z>q3!+K xx-0NWqqK>idY*1=AaCsPqejC-jXnM^`vbj+8f+vKyeR+x002ovPDHLkV1l+*n3(_o literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hippopotas/followerf.png b/graphics/pokemon/hippopotas/followerf.png deleted file mode 100644 index e8802de5c4968b6a717b30442c4ffb0a37e1e4c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)ecu?r*__(;hh=_>oe952y00Ia}L_t(|obA;? zZ`v>v0AR<5o^2ci(l{gzXq(mxF&*?6$ka~SB@AnDTZM#nMNoNHTH0niwnCk++iibf ze_%gsNmVtDYg6sI@ot~(y!Y(L2>`p;#V-Dva1h?=r-OQ1P1+1?^V9iR=xs9zwF2Sa z6@UXw`df^Hkom}NK=p<-w+6H6k!Lq~ah3+iZpf6yCU@rqi=oxPNz-%%?1orNs9R(& zjf7T%)`Y&~p4~n}R6P~lfymCZ`QEb`@@p1ulpSiOD^_Wfq9BdR1_Xco{&Q7~=!Qvv ziLVqWo8GQ}xUZ+!W&m9Bs{Sl+kUG&m( zR&2TKJ@QuG23>YA@{GPq$mGqTTA*zAoCzU1$ZUs<62<^V3*-?j3j*S2^dybbWlLILYq1a@DFS9~TWiGUTH; zy%^f;RC&_uw;l@QcKf6Bp&Px#Cs0gOMVQc_0000;I3T!qP>_H)(6Bf#Ffh=tP>5JK=;-+1$Z)v0z=(*5;fIrL z0000GV_{Bq0000W0000W0000000000V!7`60006%NklNqj5H3*rBxIpw5#q~@0=FQPA7rtCtn38b_>~{yFiGc;j!qg@gB_A_=pYn{m zKp5mJHM-(4@}7}#tZ=P;$kA${fdvOE#pqh8iDH*{y?@4sK%uJIRI6Y9nr~#)@2;ZN z!U`=oS1C}~D&tBjn)SKUGv4oiBP$~e*YD3y_=WKri?l9J$avW6VGwMl`gKWX6OC%OyymP%7 zxN~fPA?~q{B%8f)@PqH6KarzK!r=&&cA;q3E4k&Q~vP}KT12}kHilmi5JNhUM1=P0000ePZwRh;#Z?6!$sZ3v8J_4}4=V2@pt%)pk2Vk$w~S&xgkbLVoPWek>U0 zoIT?&>q{w9w$20q3i5ovC2j^O{&aW)qqo6cwjY)0Y$&ON<^H&4V8rLKN zvc|70%DR^5bcG4!7;z`a8uw0sHKrS7WNs?4!mrl|SDaQ-!U}sqv`K(5zigp+|6t0y zie-jOVNYYoR+y+>aKJg!`rwWm@5&aLDA?iHHCh$R90kFWEO8`i=iKQgIA>pxNxUo8 zY?+@2*qGlp!Mu26tf(~tUB_7WduPrsrcC5muCp=VqWZ4Q83k=A-<+$`Is}+8i8nrF zQ^jn7={`Rk!C8=1CY65RUhuCMJl_LM*b8=3H41QNFIdUiRy@P2ePC~ObN=OAdLB0a zoUtX|#x1%t<@sCnFKHClc(uix{VlpJYj-N4)qMpsCJFB{E)%xEkyJ^Ef?zhOQEf5j zZY*_z$8Rkl1TfI^FzAVGVq>_qY=JT3q$zEpAl-mw#gq##5drwEX>Ni__Y7e!RbyKK z+x!Xt#}h8|owcO}trgVlkukvKvpc+a5R9Pg`SLjg~b)el~5+E8UdwC&W#Q=Q;`{+i9wKy zo`#&7?s_(uB=_i@?gbC|%L00000NkvXXu0mjf?5jb$ diff --git a/graphics/pokemon/hippowdon/overworld_normalf.pal b/graphics/pokemon/hippowdon/overworld_normalf.pal new file mode 100644 index 0000000000..64198bd35c --- /dev/null +++ b/graphics/pokemon/hippowdon/overworld_normalf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +0 0 0 +96 96 96 +48 48 48 +72 72 72 +88 88 104 +136 136 144 +192 56 80 +168 168 168 +200 200 208 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/hippowdon/overworld_shinyf.pal b/graphics/pokemon/hippowdon/overworld_shinyf.pal new file mode 100644 index 0000000000..022b4b542c --- /dev/null +++ b/graphics/pokemon/hippowdon/overworld_shinyf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +0 0 0 +136 136 104 +48 48 48 +96 96 72 +160 160 128 +184 192 152 +192 56 80 +152 208 160 +200 200 208 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/houndoom/overworldf.png b/graphics/pokemon/houndoom/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..85091448d9eef233ee06f8dea4a14d2cae33bcf0 GIT binary patch literal 847 zcmV-V1F-ywP)004R> z004l5008;`004mK004C_008P=0026d000+od=T7$1MU$N#rMN>f-&3I2kAZl7fka-PCSXwJ_HJ#NkX8vihZ zkZC|c#6ox(fXxrjW&|dO!ik{?I8|jKz~KQxEG2II2+IUGT=XR{c9+eekg~XKTO^&! z0Bp`f0EmM+hsR@zW_>uEGQ@kIE)#6iQ~@>*txjueY;)*TUU94Vtr*_n zVJ`9L!`uQEry5DLNB~-^Gx!+2&+OcM!`*L}i($=m?>jv)tjyz)Pb%rN%0Z~}*2!uX zfma9{!mIq40P=;#U9yrwmnT{q(pQz!#^A8`zF+d-?RgFFzTJBK@DH_1q)=80JWflL zc!Q+0ULcdVHg+;D@EjvV(RP<%j|VyGYsDTr@}T8az~rotb~qQQ5`n`3#$eYu)=U#n zzxk=qXIk(4#EQYmbwA+T#_; zZCW>ahw~IuUrqe$d6PRF=#Zuy5n7+tE}u=F1S%($!)1viL5VIst05jISXydDyKOmq z3Y@!K4?yQZs)TGDk-p8jI={*n*Xr86$8qiuJA-0TyUY_fN04 zMg^eNAT>xFx%DbBcY5~jujc+0_1zrO*9DL^$)ItKC9@7{f4AuwV)pUWNrsmnd)+qp97INA@ Zu|FhS91Vbo{doWY002ovPDHLkV1mVLZZ-e_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hypno/overworldf.png b/graphics/pokemon/hypno/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..0120f60a908f43edfd4a17efc343258058580e0e GIT binary patch literal 767 zcmV004R> z004l5008;`004mK004C_008P=0026d000+od=Kl&aDJ|-sHu|b_OmNfiZ;WCE)VV zxt)N=o4jaG(1P;=;l-krz=DU)tpt2789Mb@a|%zJFTxd%9nZUT#aVd@4@2OJzv9nF z_;0=!C`Mc0f^&GYiOZ+Bba{64S^Vz;-Ya~aKf{Z_GAdkg8K8EbIv23wuO7e7MPHOv z4t*()0#_WCQ)HD`87@~j5%?}qhq%fiFs3iAx=)sRnL{6RAu^V^xQre?r@+daUFJ~8 zth;YsrUwf_x5v!kawsLywGn+=p_3M#8TQub<$Ai77=_N_+S* z0)^yqeIIevdvrAtdQrgRjTwF^5(J5QznokeobFfVI17l8=MS|ZdJ zH^%fsAX;zpxNK}Yui%0BAW(Ve9Q`#_iNdff6!X4pa}|g-VJ$B_G7s}avGXwUtkbB= zlfy({*1JUG^ShK@_p+>V`-{cptnDQ`1&TY{r}Pli^JvcXu8i6nJ-jK}y)1>PWLy7| zvwSO%T)KF6)=7f$JtB)}dKN;Ue6U!HP~r3$e)nX#izClCW9-PLQR%datp;vjStjmmP(+Z_-}ORUJuD66r~W6 zwL`ZM2My)^g8Z6ZeOy_(l9Se6I^;l19-gE3oO_W?$YcE{B`Hd6AATs0NS#h+FBTUN zJRx;Z_TfUH*k4gW+lR$K(MwH$Zf$oK0}H-|Z~GHec4jfKh3}r{JmTCy{IDyF1Er5= zqQCr#-!9UQBFD9j#X#xPD%7tt0~SB=S2jT8xnUUFSqyA0&JbBg>YI4E!qba+Z3{OH zgVI|=-@=8!#)^?P(m1zAh>KV3USBHZd_<=vET?n}7XlBy>zWRh$-f#;M-yC}vK@|; zQf}Np0MNgIbvcuRRX(sWQu`|Op&xq*tnfnTh8}km_|OCsfc-5?xfp0#5Ot*djNY<4 zrEB+yJR5M&mbQb8k9l@i9!P%&c3|`U3GtmOwe2Nk z|AgowoKT5#alJS5J;uI^(QoiWJ~~r2kjOopd!Cby zW3Qw?H;%nzBdOjYW5z=XYNNCa-VnMJnM-=d~zTEbIE%?|5%&) Y149N=*+~K>XaE2J07*qoM6N<$f&}$h#{d8T diff --git a/graphics/pokemon/jellicent/overworld_normalf.pal b/graphics/pokemon/jellicent/overworld_normalf.pal new file mode 100644 index 0000000000..8d94142d60 --- /dev/null +++ b/graphics/pokemon/jellicent/overworld_normalf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +7 7 7 +247 212 238 +109 46 69 +203 117 168 +247 151 194 +185 151 177 +185 151 177 +247 247 247 +214 53 26 +45 20 29 +32 69 142 +0 0 0 +247 212 238 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/jellicent/overworld_shinyf.pal b/graphics/pokemon/jellicent/overworld_shinyf.pal new file mode 100644 index 0000000000..d8bd8e5c4b --- /dev/null +++ b/graphics/pokemon/jellicent/overworld_shinyf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +7 7 7 +240 216 248 +88 64 112 +160 120 224 +208 176 248 +168 152 184 +185 151 177 +247 247 247 +200 32 192 +45 20 29 +32 69 142 +0 0 0 +247 212 238 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/jellicent/overworldf.png b/graphics/pokemon/jellicent/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..1a0cd24b020051b9c2d66718df94d15504f50065 GIT binary patch literal 759 zcmVPx#Do{*RMVQc_2L}iD)b4FAMay-l_m{%Cm$A8*vG@1))-@U}6dfQ%jsO4v_tfs2 z2&$w200MhSL_t(oh3%K^c7q@chJ^qd8N2`6T@tM2)0Fk}_{Z#2oloBI5|o~9+Z}h@ z@eE@&!-uQ*yZ$y~&~4vDOZKX%C1u)@WlKQTxZ zb|e+}Q`Kkkcsg?%suDWSy|p=VpBK1lke0AOxk$aj^!*`goc1GB8L#jz7WhjBE3FOn z1XBpd8t+#jt?}0064wlx=K^L6wVX#tP}bmguEaRt*y*2-$XH+VQm-1M8zHwZ$mCPw zUn~T9dH59y4M%Hz!@afG>T{oYq_Mu_-u{+))gax$oD{n5^9YEN69ltb?i}OG%Uf{y zznHv_hx)%v=3Yg9hNIaXbS_nQ`e5 zkiS3004R> z004l5008;`004mK004C_008P=0026d000+od=h#k??xGNWdmD+xCa)#C811 z;v5i|Ow--&cDK9T?QVDbFBLAJe|B@pwB0smByyP5!Viufq*6lehPE~MjTT-Yx3L@IN<1DO<`W^Z-v?Tw1hBkqLSDG@dWJ&Q zMJhM@{+fXH{e|0QOe|xp7hGvtSL*Uwq3FZVs701vdfXa>z+8$%3nbTtrcW-sHYf>p z#ukYng8iK;10ya1Bd=wWSY>v&H3)$iBFu7-4$xCQP5SJ~%}NqayL8NYmwBr@sJJx{ zQ!3NL$u-dDc+6i39~=C9L8+}^x^T9iL*^ndNd3X$W-6%5(LvM-!&H$w14GWD>pOjm z6XQVjU$|os-}tPFvwSek`xQ3^P}YnJlUmL)#Ac;mxivsCGpM7-g{pmqrEtKW+z3QO z-jNsOAzN1cJ~p-|Z)`-93>}0j_d-r?3_{Sht*mR6BYA58ReN$HKm4 zKyspA8IV?hVj#u9khJsNFQ6UEJY5_^B3j>0J6LpBfyX7$fa$To-~ac^6!T^=PZGNG za^c}~5`6q0yiQ0wp9TZ}x|vE^VH~D?6%=^c&;~P`7y>9bA+co+xN@Bsrx(6eW9;zw-~1$mv4S7bj9-h zaa~8t{=boXR5gl?JNi>(8jdD^jWs=2aD3;|?O`jA=-dku$-Ez!l*Idb&!@u**EQd1 zlvk^AEnjoi*;?^K%B;u#uE>gei@gRj5GF7M-=A;b4^{sWui=i^h?GMVj6UiGoA{}BVrean-76q~(2$L`q9(*4ip zo_^PwJKt}8%Pv1@H-F2|CFh=-U;7@!xVP`uoIjUpuKt~^JndgZyitjK|JCEMmq0P+ M>FVdQ&MBb@03PTCKL7v# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kricketune/overworldf.png b/graphics/pokemon/kricketune/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb57067b0544bf6507f165c73a67de4b107b9b1 GIT binary patch literal 935 zcmV;Y16cftP)004R> z004l5008;`004mK004C_008P=0026d000+od=^P*9La7+^pkxL6?IpiuD8kg$MATwOS*0000GV_{Bq0000W z0000W0000000000V!7`60008&Nklj2cRBGc6H>F^?zVYk*xu>6`I^RvKV_K`aQS>SwwzYuS8FVKo_!vlBuyc_HVT7JVr zXTauX9@}epA7BG$5`sXIq}~86ck+dbLZaSaQBZM5;C-RnJhInvHvl0zFUvBk+y5(^ zO8X&~MI{Z2{40DCndScHj&Fa2E3N=0Pv(Awa{kT-4s=$c`^f$k4>BiJ5m8OEctx(} zo<0ay3E;j%opJ2!wBZVpK<=VO)b~#BF|{PjOUyzmHC*9i8SdY|HvDM>kvuJrDK509@hcq z(wCq}K!1?>;cgHdZzA-wRL|-TkpFl*Hh%Dz^K0H7spYQ*_0Rb=ddRmh)F}yl#3lv| zjoXJ+6Mi9|#mir(z`x@>gW2o;sA3#(g8onb^#CtP__W__e*w2^8iS5lE3*Iq002ov JPDHLkV1obJr-%Rm literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ledian/overworldf.png b/graphics/pokemon/ledian/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..61d46f847742f87da41db8b9acfce1c4ad71c6ed GIT binary patch literal 958 zcmV;v13~Px#El^BUMVQc_0000$Kwz*aF!*42hyXa?AUF_!zyLUy(6CVG==iwE;Ba6_sF+yr z&`>|aJsto601#tgPIdqQ03ZMW03ZMW00000003gS?)m@#10zX9K~z|U?U(CvoG=W9 zk&P@c%fA2PMv@I{`2uOu>GTKcG)ev0^3jnX+i7~@i6@?T;)(wu;Fmmy_x|S`s_%cq z|4ISi=Xv(ytv4Lpgou+H7I49t$@0*kJFekjmVnWoJ3e7x9B_ES1y_My4eF+^IEoXE zz8M^Ea4`23-th_N6r&0*Id~TmcCIJTaC9!TMsRs5a2^(L%@2K}3a&W|oUa6y90Nzw z0$!bEMqus~_YJNBgW5DMV9axWbx%)V#XA!ur}To*2-JpJ-uBotW_S3O5ULg-092e; z?0KB$^oU9Np1&pMgl2=P0V&%_??M105akpaF75ajDG5d3$wgp!o|nO#2dTtJ$P*sI zA+XY4@|3F)=xNal7V<_Q|GchiFkDxTMil~s3ynZY&;JT=atM4Pm{G!1S@;OFJt#RG zKUV^mxUj;o@OL8+aV4VFa9zn)7=fV`2>IzfH$Z-!AXEYuG6JzKAn}CxQ9ep!ffBF~ zTP(YX1xlPA(6()4xUOV+FAy<}K4h#9L+x--YYKs;f|BPh(TBcX;wbEk3S4#&e_yWy zQ{1$Ig3CfYGu#OzNTM(qtMZJ1GzSYU%lZ*$UlS*XM7J1=1jLFs=eqK*YVL(|toMT{ zN(B`+39>-dh9L_q(#H(|3yvb7F2FCW?-WQD8_uWg{bDG@$d}3}fr}A}5s?CTrQ*>h z$O7T~zLox{156Uf`u^NT8C!iBh`=#d`DTOW2X;x+$(Jocy&+cI>Q4dztuhOS|WOMc`Fg6urz9Y%NRQF2-;MVuL^Iw-7D0j#sQgT_S9p;|t^iplmk%2NN zd%6rBy&aMI1)LnIxj$L#-tYbWcFEv6f#Ei7a$uwUkdE%h%*P*BWjI+QXK3#)dHsQ0 z1ds?^+2K_LQhVO;PJ&37-ydvH_xh8M3((|rouC-0sH?|Hub@V{L5T;DQ3=6M(EyV`Qa)!L4~-{vwL7Y5&P gbI&jM6aO&20Kl3lbpMO8w*UYD07*qoM6N<$f+W7LWB>pF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ledyba/overworldf.png b/graphics/pokemon/ledyba/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..a46f3549c6465ac212751136acc9e8bb8327949b GIT binary patch literal 986 zcmV<0110>4P)Px#El^BUMVQc_Xdo!4AP6`(IQVcd;5Z-v002-}$mrl$@B?o1Xy=U%6TAg5io z#v%9#IQ6F0sUJW@0pYl(z>Wizh9{AIdZ)Ks)obGbXx^zm2S8M{KJnCbfI|u#3~>V3 z>cpOl-+K?)wpf^$)__0lqtnH0lRZT|@PF+ED(IfM|+Bolc_ZJyUoBdOf?G9|5WEsh3`Ebc9a5 zvFt{`L9eoZ>6QUfpxe#(ZZ~|7FaFK+*y+*qxG5X;ov~&i&O%aCbB1y^s%t`mh)&m-T6w}Ms5zrTZ zw8TpR_dOcj3V3{8A@nfKIqLx$j%WD?y%d>9N;%(iPD!LGu-Zc>t-9C_8VDTx@j5o_ zjq$Ywk9w7d=fmxW*Cb}h2`@`DM*a`Fol?S&^o$3Kv{RI0B65{^!nXu<27He_!@ftO zPcu-al(bm&W1hfU9p%K4Ict8HKQmh0F0x}lc3lp5Mwqd*BHBYHJsMr64g^@Jqh}a6 zEuoJ(Tn#Ck!8u_+bC;m;H@Y0>UzW!M2Q{bC>mf3hd85lL0a&OaWEeO};6&G(Y!0(_ z?L}RpUO(X38~~Jny(HmrR6AWJOIQ#MZ}xlaOvf6ql^75Hf2o%_7F|7D^WUtEK63yv z-ayL~?+bmmef0lJy-tD`C9bzWy3h1~AL`Fr55Lf_xZ-#513DflS<|y4L;wH)07*qo IM6N<$f<|k=oB#j- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ludicolo/overworld.png b/graphics/pokemon/ludicolo/overworld.png index 28a1e23d8ba5524261682fdc7fb51cf96c4186f7..0414f960c1de33050e6e925089ef4db636e2826d 100644 GIT binary patch delta 788 zcmV+v1MB?z2lNJz7#0Wv0001UMu)cm0004VQb$4nuFf3kkzGHLyc~blNkl`?>O&}+QaJ{fnNGaD;Hyu(Sc;j6sWKDdKi<3#L*TW5^ta-5VKCmPpzt9>i= zFL7oMA#yTA^3|`yn7Mx^XP`n?d8_>wIBAi=3<+e6sxJrX$pgKYxB9R1j_^p#6jbCJ zs?Y~{{~AXJo+3dlg^+N=gI^o)X5RNwI&q|mKgXqm7=7ROoD$hs4Mq<};WKJjX=^i8+5aPqlUU-Q34%Xk@)S z&7t9Lce;Cz%dPghZgZOD5?_d`C^UI+@#pq447fxW$_TW0atle@*FA4}QC}nDXN_=@ z!$3;(L*s}`qGF7sWWfsuutp~vf;Js&3gp*sO26eB2WcGch>W+w_5U0f0}+-{1qLG9 z){{sIp4@F6R0DtU7c8ty^0KKoaKJlhnt8Co^<`B!Fpk4;z{Nmh)&Mn0*2pUlfH_L) zX6_0HVIZ1L+B)J}?l^hN{dNdQI??#br?v<%hdn+S7+juVx>&`f19-$bnCBrTz}7)c zA>As6=~kITYrfqQqixT4+geSuN_~kM=OHZl!@wy=Wz~O<>lBKza!)y2Iw%@RLYq?r zv93(=23H5X4^xWNInfS(7^vfeOKlQQDAXJjjhx&;Z?$Ez#bvMIIZx5*GCMg~=P=M~ z^fk)c1Qp>WFW)3)PS1J=E#Ao-AkKq~Q_HS{dmLv5_vpaY4uuVly*dU?+s3J;tlr}4 z0$VJTG8J%5#Q}A2pTj~N)etAMIV(Ilwq(L_wA(q9lGdkUg_*fO;^=_1|LR6zc5t8T z4&pI&k(W(b zR_fuAh>2P9^=mv`978;gzrALgf7wBT{X?N9XDfhx6-y+6^Q*D+% z&tIFUe*8lGvFxP`YI?a3t^$Sh^B>4mw>TU(8m)Q0(!upGW!L z-#Bfs;aQ%3Or2HRtR0ODT^q9Iu1Vap@g7gxw^sMYQ&*2Z7he;%!~Eu&2hW`L*VkA2 zSUZcql=;4r;|sTXI>+1aQwLMD|IR-zkhR-a@WTFIdb35Z%#{zfvRShDc#d?DwbBLs z5WlFYU#C^nuR7Fdape)?x*dsoo?ocYnJvzvShDNlJA(%rRjZv}bUAEu8yZ+^9Q|C-rmF zLg`0OCK#5>aEN?2DKS6%WTVgT4z}EIBW@YvJBgwnZ9jH5T5aKAF?)9GW7C$YNzWCl z*R3i_(2!iwFL8JGR-Nf3?8()fDUup&ho%KjVoqh=AbKM-NoAez?pNzo+S+1U8&it! zXl+@2seX1Nd*963)H6E2E-~59h@7%NSmg2dkGo9x{yhI=&ba@n^}Pyq{+Ts@-5+yZ zS@-fs^=teYjVMV;EJ?LWE=mPb3`PbgTe~DWM4f)|Zc% diff --git a/graphics/pokemon/ludicolo/overworldf.png b/graphics/pokemon/ludicolo/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..28a1e23d8ba5524261682fdc7fb51cf96c4186f7 GIT binary patch literal 1019 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNU@|l`Z_W&Z0zU$lgJ8^O!f%! zWnidMV_;}#VPNK*a`yj*I{Y2ag2{7QA@zqr-vWLIX$XcF~(a4U9?N?k)@+ ztg;?J4tt5GuPggAMqV~$S*eFdB7i~y$%%etKw1HcffNHn($0542QjVjba4#vIR5sU zZT@8k3HA@gs_*R{P2ZxGHG9{am!Vx(&c1APjhxiPo9e)IMP19#q-&|iT_cg$V;)-$ zC0|`s#~9Y8r!!YVQ0P8G0Q%IHLfm((_r{XU|K_3f?(6 zf5C*v8}uWP-4`9;_0=@zJdyI5b&6bG@GOxXGc~i> zZ?{Z1$#$UQ#RAu_nrGMT7F<0&@!OqqpMKg}Y%S0H-eF?IJB9tZeEiw{*NxsfT>Fx9 zxN)uy^Xq@p*Wb6>lbKe@$A7CZ_selXvB%GT9_4#~4-0JBZZ^KU=Ows;3 z|GYrfZePI*`+w=p7QHf8KHSP?$>QTV(nZ!v7xY8?qNaYGR#Cs|P@~0_M~v%sB<^{B zp+aZ2IFDkStt-Q<&oz>8KYn_7#Ud^n_3xJY8zNs85l_3CPx#Fi=cXMVQc_FgQQ}002l}U|48)pwQT0khrKoa4<+fXaEoZ000000000000000 z000000LkP30ssI25MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|u}MThR9J=Wm)nxu zAPhvU!pQ8C{{L^I7T^mKOj29fhs3I_9eY}a(;zUjZEw8s#v5dr#2^I* z8=w+mgu&+ksqkIr67yqx5i0|6LL)RSDo``nb#Jf&mV#A|PX{QR?t0>okxE@1@$?w~ zEI|Q4Xd|S(c!2!WM}r0k#j-r0FyD2K450k$;t7{W-5F*Hf@PRW)+o3dJ1~Qn9*i(+ ztM+KoZag45zw~G;*GUGRo7_>46U=~Q(%Mph;$k7$)+ z0J|OzAzSg=Qt6CH9LVj~B{bd1y2;5=b_}9`&Kq3o z9Z;~#NCapVa_RwJ`=S@0JG`|g`k~4>;4cM~on>-VXnL9GeTMZF!QmXY3Tb*+BNmg^ zPeWy5P@NT}Qv;Ku(5X*e(`|-rJKqApeu`}R^oK!7tE1RbS2POtzo*XeJFWxKuBTa= z177+pC>=`&E1k6Il>^mRvZc`aN7pCa&UwoomO7eVoaCT?a`63F^#5D>=l1`yfj9oQ Z_yvr~A)nDi%sv1B002ovPDHLkV1k*#dL;k= literal 0 HcmV?d00001 diff --git a/graphics/pokemon/luxio/overworldf.png b/graphics/pokemon/luxio/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..6646e4262bda7dbd0f3ecbaac16f07cc05302954 GIT binary patch literal 803 zcmV+;1Kj+HP)Px#Fi=cXMVQc_NI)3)&={y#5YUhy0000$KtNbnSSTncP>{HAu-GtAaOmjx&`>}C z000000Fz!Rwg3PC5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|g-Jv~R9J=Wm+fxr zFbIb0)^f4w#Qopxz;@C#;iKtxROzVv*d{%m{er=e)9GU$``G_tDgBPW-O|}t81Z*o zx|}awkR$$XOF5s(nO->rP+Dsb`ntK*WjTD_#;S)N9b?tni1xy}pRc=8VWH zvWQEKNr11sI~XD8dgMIVeq=&UOA`P2vZXYO%w zi8$9-#`T6VD>dkI$ua0gJaX{g2l?E);!4O>;*sMp7k!Nd<~FOePcG?c-UYVXP{_Yk2LjIeu%c9Y zwz}-fcNYj>rR5veTzjjOC__%qbI}LwmPH{iY-$bqd^k{vkR_@a=5lBx`y%y6iW9xS zLxxAZCuqym3NK`RS|9LvKc$XW9t;Oou0VdLn}nA}neEzT#N~Ky)a|Qrx7NE|#OG7N zS#H$GJX?1__GiSGG!`A_e8T{orToLn0G}@oQ1KlgYZ#%fubKnbo$DclOcFeGQ0WfT z$+IP3wi>+=%P3X0?ey{gMc-(5>d15Fh66PbBJx9R?9V`WvIZ*R>y>LZzgDPsf>Mo- z0ptVZiQy3HM*wtf=1e;L!es1EHQ{}kwt&4e&{NBBdM2rEC>$#+yc}Q$Fp~D%XI6Yb hu;Sl+R)6fceFLSbFEzrR(oFyW002ovPDHLkV1oRQb$$Q< literal 0 HcmV?d00001 diff --git a/graphics/pokemon/luxray/overworldf.png b/graphics/pokemon/luxray/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..bc4cc97e7566a832d6817b92120fa0f3e6d245a0 GIT binary patch literal 868 zcmV-q1DpJbP)Px#Fi=cXMVQc_NI)3)&=`<#5YUhyC@3gEKtKQh09aU9fWYWbsMtV&s31^ixF8VF zP(T0x0Hm#Z-~a#s5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|#z{m$R9J=Wn2T=f zFbIZoF;-${;r-usfa9K2<&w2Kiga|)R!#a``v(Id8-{<-#_=l%}hWxUGU8Jo1Z z?Pd2X9C7Lj6@4KG)(2&!N@;mArbI)_c$JGj?vkufJ3r(|0YPl~v_9|i<{FfF?M;q` z#`I@sjJV|JdPE3tRdd+qGUK&6Ro(YFm1q~(DZpuDi8y!2Rj!94On<$!tB@lFgc4m3 zf5^XR-)S$ELX*3LaLVwAi@@{{m{bQ`PAd}f=4PLDIb}DdwMdiUt!Yg@uZuYEUsLIs zma3vJ;2dOrN}E04#I+p4wY2=gx}iL@@h6;XwC(^>V|&%QNWl3F>Qcy`#-q;X)E>FW zpw`MGlTw8~Cx!bYK2E#Qg?!EmK@^&8xN{W`ZCK670`-w0;FR0a=PB2SBpq^lognh=Lc^QdeDH%HE(K$-SUm28Q$Nx)sS1A&We5abadS45^2#x3I_3xUGmE7#B|KAnt(sAQ zoc9hkp1~u75D0||pS4br0e28{)RqcnXLf;j>$ zVnASi<*2?y+(xLPIji-56{3IrHhFWj7fH}#q(TrVQG$^U@&t3pJ;hwmgE_?lU%b|Z zQ+uGpndm%EYTCjSygA;M&uxqh`y=&Xx=*6*4m`L14!JAjVm)R8#ik3mh#g~g7X&kK zKaQn%>sY;80~?15>OL#9WLTE`61B6Vd8*H?F}D;zp}Ihuswu<5{S<$}c_g)QC?jr{ z-i8#Cz`!YAGHmMYv?$c>GF1PRca~pf*C%#{)V+Zn4^q&(!V>Gh;GSW!$``w@0|VH< zXWZ_2yC#u&g1(&6DUVKZ?A!6tTQB3B4Gf%fyTVKs8hMCXaJ~8tIl)+A+nYEm+e7*< z9)BlvUGc_-Odt7M?k8NNEi}ZRitFWn#21N+$5`LSF(CNPDetUeg=UE>4hOFc)A7gN z6@OVn1tJ3*$Dgo)-v6VU?uwtw{$Z?DiuM1SHSV}$7k>a8jwYd&HB^uQ0000UN&Wh%I7N@Cw9u$&+&9|4DmSr_KI!( zWd{j{2gYX3+f|~kDy}sSm6R#b)8KXX==Ycw*eVdZ+x*oP`vWlo8$xd|x3_y;&|BH! zGWTeus)UrQ(<%9eg~Hsa4yLhOLJxyp{oe4Z;mDy03AYrJ3EDHx(}WAlsetl0k9X3_fX zdBTrl{Wk6I=E!%HfAaUKe)XP)Y17xPXI*~$x36`kX0BM??6%#e+UmcT@+KYIQ!lzV z?p+ttwSu@G$C_u(m;b)F?$W0d@*S7Ol_hc;9vtX>o-%u##)_GT{mO5Md527RTal`8 z#L_3P|4oyDQ}Azw?q$hGOHWP{{>)Tm_>Q52Y1Q0~VWoJ@aW`&n6 z`2Fh9{|Bsj?h=xYixbXuv?%k>G_-%MS6eM}RCS3|xPIBp2MaEDGI31iwdC$lK67nJ zVXx|!=|9v=GU}viJ|1|huEtu=si`*4Z&IITw!~*sjVKYOlN~>v{wWDry3oKSFt^?R zL(S7b$$BrjU3b`DAiXHLgMS(AuSLmd zT{FKIEETqP=bWrMw+U(X`}$udPBUHI+;dng-l_R*@1xhva_e^d@%XdtOQJ)#*0)J} zEmx#RbVoK$`x3Wl@5Hl4-)@|=2+aN9FRe9a|3TkLsV0Z5>ero+x1X}<;HsU)t1jwp zRC>PI=j!I3D|e2OC7#SED z=^7a78XAQd8Ce;dS{WE<8(09zbE&3oC>nC}Q!>*kF*HcRb?mq3{RPy);OXk;vd$@? F2>^I7grfie diff --git a/graphics/pokemon/magikarp/overworldf.png b/graphics/pokemon/magikarp/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..debcdb492539c67c6272045ac766e78b79b8a550 GIT binary patch literal 1003 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNU@|l`Z_W&Z0zU$lgJ8^O!f%! zWnidMV_;}#VPN7Zw;87)+Qj zAwWR@C|051@Z*5M4u^~z1v5G{Bwi#qoUjns(IN3-g~y8*KMowY@Kx$ZI8Ys9lDE4H zLkFv@2av;F;_2(k{)~~AO_`zc`HDuMkU(;xUm1{AfMOuUz>u`_9ne8cb39!fLp+YZ zy<(ex*+GKgfw7tMc9rO>iffHSC1pzVGbthR_?#?d@I{ z^j5aG%spDEDk0_SbV|Nqp)hxkIMaYW_c z>=(WQ@8 zY4#SWJChc-gm2%pXTw#t`r^g&QkUfOM4bL5ebnV#{pRZ$@7Hz;hUnYa{Ng(+wtu!+ zw0?V@@Z(s&P5Zk!@*U-${C%oly{BQ?^tJ0*mmmM_Yn`c?E0#CAZMUhm`tPN@Nyqkx z?u~ob#dNJ8?#Hp_ne*kpFRr`v>4bd8WpQPR+=d4SdY`AvUZ=5Q=3&3`8)Due6W&&& zDjc!&$?Jd9WZ)G1o1uGI^3l?h(}X`WRT;ix=wMnkw_x7MhoAdu3cQZ~dBG}E8@FYd zX3lB7qv|J_L*KV^-&Iju8Pc74(#?YZn&yX3%Cqwn*c|j~eno9QXE0HAdfAzjmRaFt z3x2(y4v993N+6|P@4^TC44olG2)c`dm+l+RpS zQrN5dW%>^_lZ-m4nvVzGs;jZqb84#1^PAMCnJw|zR3l1+>14-`r+-R9mM%1K3CwNx z|4{QZP|{0o*PS)V_8of~b@^6im9z_Syx9D3`;?=L)~>m0ygDg3NH0q6;9o}jYf&;< z*Uaw)ONFi7IVY>mZ9xxibtmNQr))a7YG?7Pi@FECtz|_Epd$~Nl7e8wMs5Z1yT$~21Z7@ z28OzZMj=Kr1Q1_s&&7C`b`s;L`_hTQy=%(P0}8unZCg0d!qr>mdKI;Vst01tqq A82|tP literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mamoswine/overworldf.png b/graphics/pokemon/mamoswine/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..d89769a98cc465b39bd6beebcde8c061170dd785 GIT binary patch literal 881 zcmV-%1CIQOP)Px#Fi=cXMVQc_0000uC=iHPIH-6~Xh0~qz|eq*kU&5{C~%PI==jK}Xh^8on0O$_ zU~q^yNE+`(NdN!<5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|(@8`@R9J=WmkpDn zAPk00*g(|U{{Me_FF`FIR_xx~-rY3ajA0 zRagZBUE?w@(GXqces0_L^tcHIKk5`lsNoYP9dXs<1)OmRGP^psDByte&hPVVU9MNs zmLcmJ_jnQvqk8h=vMeK79Ya;X8OI(`8bRTG)79ZD_c?ayrOvpbT4^mP@0b zX7{-+Zzs68Pg3ijZz|=EX~CLSS$vhp0bt1U68+}bF#HOE9^a%p1sro0ENn2pJwdVw zKH~WTs1kmpi}{I&87??N`(5OmZ-V&Z)W~50uQ0N9@VXFH1|IimT#F!qv=~9{*cQlDEjuu?;aVIdTfvMm zu(oKVtv^9Ld~xbwN)|6?@Jy;b<^5zkPA_P7_*Kd${zm)))88=Ptp<0E00000NkvXX Hu0mjf_!gl@ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/medicham/overworldf.png b/graphics/pokemon/medicham/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..d48352aa9ee41b32f7d311e3fb5c129a7ef74cc4 GIT binary patch literal 742 zcmV004R> z004l5008;`004mK004C_008P=0026d000+od=|9r9b?xL5id8$>PSOZ>aQSRlp7aLzd;&MREjtY1IoloRDr zYb}{l{;kmCy2HYX@^Uc}a5$%2b5O%`n82J5m)UoZAjnXZL2uy>(<5|9$#ANOQe_q=A1%hjUX2}YAii~m|eu- z3zlcGRJr9l87uTSD=%1K;KL^1aCmGiQq2|aajvz&W#d-sP=LcxT3)5diYUVZ zI9wy(w^_`)lFK2n_P5n%J)ZVe);(S1y+*tr!&B}JPU%3C6ui^;oWc2f^26dO?Xv6R z3Rf4z*2{)@8JcoRuLBwp#1eSyogc3;&rp`Re_r7*ly{nd!-<+S1UOzshDb0oe5|`z zACEhmRUrVHj6Yo_`hBj8Qv+DTo9@2JpXGPQ!$s`jofBCt;D?IO(O-@CUHCvmAe* zNkl)UerXAsG&H-WtZHpV6)TVDM!quDw%G|Xa_Br5e z4q%;{JfiCI2Mj0e0o+=J0g%FhaA+CRT)B?cb z>5wX<1=!%2XE-nfFPC0wg9TR&!Uyl8=N+}d5M#lkngDm`WkTn7tj96a0oM&FQixRo z%&FjYf+4ZUlj@KjYJ(vZT(9tAqv?O)jRC1~=5$Okr)E-S7Q9X{cMXDZ+@h(`f*;=W zCrWYu@H%v1g5AOX(C4Dy%`!Nn(*Qd-S6B9C#g*UN&VF*C##!6C32~^F3W0Lp+YZy>!s8 z*+7Qv!=x{VdM#@kwtiv=l5Z$gWj>zjv5EbHy1|Up{6Ky1_dfI`^{9P6E+x?-(Bc+#SX*pi zMa|mny-L+fObrTds`Iaqbel5G|4xF4;@;DTRK2D!u44SWoO}MxD*Gv|of~!*2Z-wZ z(Ofp|TG}bO`NHPY)&51@I-hYQXk+}Fm?e*TJNGL*e)W0R;eLzc$Ul46n;5@aRc{cj zdq1pGLnm(M_NxpP#d`l;O511ORJ+gi{`b-klcRZb%v#gW7X@ZKyR-AokE0A1q;_R{ z9S+fH)xVRpVCJFam269#@+?g}vi}9-RK+RqKM6axK<-2T-kDJ^T30n1W|T!gh|+D@ zSsme+eI{7^n`LYr19N((gxSMu_P_{HEy;9^C`m~yNwrEYN(E93Mg~Skx(0^2hDISq xMpnkAR>o%91{PKZ2Fh0K^T9e`8glbfGSez?YY0l;uME_{;OXk;vd$@?2>|fR>M8&L diff --git a/graphics/pokemon/meditite/overworldf.png b/graphics/pokemon/meditite/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..53adfb2b00d5acc39740ca7f26c1b63307f4dbb7 GIT binary patch literal 693 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNU@|l`Z_W&Z0zU$lgJ8^O!f%! zWnidMV_;}#VPN7ZzApIBeK) z;>H7@I);vp84DI{2ndLH@#2SuL&6RN4Tp>w5fcvl&gK6Ilx9rwc6VXuV3qX%a@b2e zeO=j~G4ir0tGGV#2>=QSBq#cn0ciy&22uEamTas2J2gMQ5hGHf3v zeL2)?S=+Gn6GM=EL#ZnB@l=mZ>=)DxW~Amfa*7{Xch7dlj8wV3615r|PkVK1rX;H$ z7T4P^wy%CRgTs8g+JF9Q`pjROKR>cLyU5(WI{V=#=9hl$yY>hcPPq4>FR4fE`*A6W7J(MGsKeS~3oB~YZtqp9 zUSeuca8sRsg{0e*Y5sQ-L=^X)KBVe3g>e<*=jGhV>el&;BS9PE-^46=)Z4jV;qj}_yAJnTBuD<)yWYh3-714<-TPsk8ai=1 zw_jzbDAxP$QrbTIrrLeB_rI5Zm>kWcW7e8}z9=x`*`1wtejH`EAhj#o>u`uptNxv& z1v3vVuVh=|lxJz;k^L_qrz%c?|4G=n1#%zy_s)!Z(YmV9FrzH`L6mOG&guxq>@&gQ z-z;P67?{&LCCnaPvj@h2YKdz^NlIc#s#S7PDv)9@GB7gIH89jQGzu{?vNATcGB(pT mu&^>PP_|;9kD?(rKP5A*61Rq+^!>`9NcME~b6Mw<&;$S;-3X%q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/meganium/overworldf.png b/graphics/pokemon/meganium/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..2217fd81573157f1bc8f653286de7f61c940a156 GIT binary patch literal 905 zcmV;419tq0P)Px#Fi=cXMF6nqXlOw2&@jN5C`ec+0002M&`^M&SfIF2=;-)}U;t<+P{^>juuyo= zV34@5$jq$gGR9J=Wm)mmV zAPj~B5yli~-~VkZ2}qh)2WPuGvlmfkTAL5UuLFl(E^m9=|6w6$FXuQlO0B2)F9n1c zgZy%iW8?LD1xujKam;jkNumIg&o%&f>U)-lD>5U-9-pJ~1d=|NUs8$y+qMD3bkyf@ z)Q5SEQH!z1sY|#`pp>Z1(YtM!Hi^XpTp&ihMm#rNF&!@g6P*mvhJQeO) zalqh9pSFNJJ_YWmF5qv?0h{N$z0B_d4TSfTKY5x9L{}m z8OtmcC4x5p5n^Qx860=mz0CDd>+xHUk50EmCfAwAFOVx)R<~iDqreXqh~Bk!ROoTC zn({oT(8)jH6>1~Hzb|vhm{?xl8G3Jr6nUJ+Zyj@tR|WL33qJb1rS?hI#27g|QITXC zodv>kmOM`S`YO`Yj|x4W3Q6M+qtloh`KYL~I9jDXwbY^Scx$pa*JwfKdM#=V8+-`lT`G$TNAu*$eSz0V>_yRU z^HfT~>g-sl_#~B(&F|-|;ef$eV6TnRTi2xzUg78*&<4?fo{j<@_;L2X7YxZ|04qQan=_B?)7}t$jjH`S@6K0{o}JC@j??ExV0zw-y&EeDtxskUH{DU zh!Kc^;10kS0{PNQtMyAfX0-Mj2kjbqkf6*=@C();KOTi13LRbS2004R> z004l5008;`004mK004C_008P=0026d000+od=(^C1 zi3TYuSC-DTz#+@>i(mZW7vG05`~kcyY7zn7(>l)l}YCxZ`w z#%hsO%k&Ab;$883`Jwf91|I;wF<`B|Gcc8(T0a~7+5ouK!NdSqW6aFKt^82BMqlsHGzq8#=(NLA#kkp?q{Atw(+i zShpkPSC^a`e*IbzxfPKT;6z^f1f6azZ7i7?EaG_07LO2;HShyxm0N)041TO(G$HqXG@J7!` zF3(fm-aFjLeS#Rkq@@$a9`I~1ac4>3<(~}}{6cmH_%@gmIF=oxiw<4@twcq_jW$ag zPUJR0_%g1MOUD&^z|Npd=cFBpBz!oPn}lj$L2!U_)d4mJ zdmWMaH;m~Gm@a^a!HLf6fx`*m@xF!It$a;TegNdeZIcm<41gLGIfSiC;I+IXJb>D) z13U~0e;rZkYJlUpd3^0Fm5B@kUHF{tO({ay0#;oNs=f~#aK#-HVhB4w#Lym;oxwOT zz&A$+D(6)e$K6;mC z14a1dLE#o1;K`us?fPm!Mva_RT7DV8OWsC0LIsoq0{a)`w*jXH2K;hQ@B!#nENzw>X0G+bbp%O1Opak$A`zI#*rx%{rcBRtTGO{?+}I^4_e@sNn372t84 z&Zk_mTp#1KPZ88EWb%|M=Nt)2m+`n5q)SdUUZ;T=~B z5ZVSKV+L)Gt;JgtU~sfPBj%8K=+NWcVU#wn?BGLOP8-@Qe1wN~R*(tOPdhs|jzj7z zeu$G*{QwVk{_C3T`aMOt>IpK6|9|AE=dWu?W^(xmnE^fMLH3g8-T6HbG4)=30e1fl UVRk{J`v3p{07*qoM6N<$g4tr|Z~y=R delta 554 zcmcb@vWRtpgd__y0|UdhZCTrZ6id3JuOkD)#(wTUiL4V9r3DQb7+xhXFj&oCU=S~u zvn$YMqOXlCW0JSK3quF1tOrmFdx@v7EBiA>UN&XEdGW1n6WiqL!#rIaLp+YZy<+co z*g%BsL%ROm3G<}|n)tR&JtXs##qaE)u&LGt8zzYEDr%Qw5DUu`1oxZ7c=IsL&5LxpE)yHqZg;u0?$dNt-W%)uCHMpi-7m)FYh?7F@my|T_GaC?_hC)jzV)u~ z=%04n-0DYG67z}cPmgvlu-)3>-t{H*bAdJgtEAt~wmI`k4%w`pv&1%Y-uh=Y_1n0( z-)`EbxqGk9Lr%MEO6C&}^X_ob6i&Mq={=kA*{@wncjZ>iTs7sZ#N@O})zFm7kqvX_ zKW^J;=IOlU-`;n((*NsTY5#Ha&$XMCUz(N|GJ3y|{`}+Vf&FLI&t~S{pLyy*EHK7Zw1S0ty}; z5gi5&1qucU6*CSLL~v|4aN~r9!2|_~9UT%6HfX$f@x#Et;JaqPUZ85mByV>Yh7ML) z4_g)Oc32w)Go&$AoPeuhCwkkDJ3cCp^(K~ zneg*}PBI1UOZj>8-18G%Oa>_@CMedcuUX!>ddf@*?l+0?=3$zf7wL4#vE_MBHJaA# zs+jTmT9=9Q%QOuS=FP_Do2Qw??^fFTHYd%?QOan#WqtSk+siqA@A}3()ljcSq3qos z-&tE*D+^pEHm=?7a%8iXp*7-~D2^6|tjLX-^=s)AR+`#P3x_9rxnznuGUE$F` z?YOzskE|r-6W5;}?OtHJwZpyZOX}wWYyMYBznyJ!=9L_>Sv_ZoZRWi7&uq4FalhTP zO>_5Norj!u*ObgB9_HQQqA8qqEz)~7Px#Fi=cXMF6nq5D*aX*jO-77}&T-SV%aC$Ut~tNVt$VNO&M$$de2j%HZ*Q&bXYu zAdpj#+R!KQVIdt3x!W$}_s_+#xK1MoR&e40=tGH{gcaSMDd0y&99^+Zj3H+6&PN#R{8u2W&l3V+i{x#v^nS3k|XX4dFx46xfD9RD9Ki# zwTjT^iMQisP9Ji)Dc~hZB=@z|D{lp!INH430VKKTgTh47*a4qQ68_jR!7lLXwZJW@ zLOJx$8@1%>pm-aATvQhoxKK0$h;MFPYLQhKc3BopQ|l_?^J+z#EOY6d*P%KbG08KM zYA5L$IlSZNC6r@;7BOtI89;vX_73PgS^XN9|JC7yNpITn#n}+3QSoDSvTkEYQoZjZ z+wBy}m3w#oqL0PP3!oN5V;obUt-AI9m!CTGG-g~Me<0|#e`()>^(2hDy}Ne+0000< KMNUMnLSTXfK9C#$ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nuzleaf/overworldf.png b/graphics/pokemon/nuzleaf/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..5c4365306b2c4c8f9032205aa2510521c5d5fe45 GIT binary patch literal 676 zcmV;V0$crwP)004R> z004l5008;`004mK004C_008P=0026d000+od=mY!9-5d&?npIhXFBeT+VSIO z_XOGw!>LoJPMtdSujHUze0Rt9%K34$=FzzuM{oA*@TJw!GPsMk1E}1M{$dBP`P^uC z{T2leheiv7JNWa#n%m}cquuqp8N?jcBo+@yXZG#z;ZXgmh-~{k4vRzw_@VmA@G*K9 zjS6?U^Km~%fnd)HX!8&!j2>}s&+uuE?<<(qd>vkgj?4WI_&{7KX%2fla7s~>QnN{y z$Lg(KdpP_7PLXNS@|k>~loKrC%Bi)^dOYympi%&vQ>_gkQ#(M14fy~ zJ@AIVRH&ddMX7L)SA&63;*5LPZZmnc@{!@0cm`J8~3_cLz>Bz)Ua)D_g>a=;-${$3zU?CU@vS4NOd4`g6E^3QUa|vL6f-Kkw zFrPHqFFN3f+9%Yz`VV!D>v$m9LA`$|OoN@iNBi6MUu$vdm-Pjlf*&*^9QpqM0000< KMNUMnLSTa2(J{sV literal 0 HcmV?d00001 diff --git a/graphics/pokemon/octillery/overworldf.png b/graphics/pokemon/octillery/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..40972e08b046654445d27736d0e6ddd562d078c2 GIT binary patch literal 758 zcmV004R> z004l5008;`004mK004C_008P=0026d000+od==;-*Eps>iG7*kXMp8x;=5MyCZb^rhXAOHXWAOHXW000000AjiB z`Tzg|NJ&INR9J=Wmg{cAFbIW{fK8V7f8YU*-L8OH7ipTb@MG=r5qu85by@DXsGnp7Jv47jK+XoNErLHc{!G5*fc_fY&$?!Orqns#8DXlJbGO z3f%eI`>3Ib%QXnLRiKXB-HgT8#StJ6s1~g%f=l2jGha zc()L`*Y%upT}f#D;cgEQTbMYDtvHD zSreQy3|1g+FMP8Wd1-?l5`f+@qz1*KaJ2fz03Z@=k4FM{Go%9hDM3~s9&(9v&WF+A z8sH3+_dNr1j%6!?+6X)YM&WY;SS$je&!H8lLl2J5Q7j8&2=tDM#K3XL9o4$OdRJXf z2r%h0l+dwW1?cn6&;M+~*uFMF4a)AQ`e_@WtyyHLtq1>N_8OoG5a2J59D&~oc`tZ3 oGx+of{1W|XfPW<>2LEk*0?!8I(3)EF2VS{N990fib~ zFff$rGcdf0XJD|J&cGmEP$RmF5h$S;;1l9HZTgN64hIfC-}3BAONYvvORJ*^_y?WikxbJ1rKhd zm2Umox&2|wybX_oiuTJc5t1>x|C;Y}Oly7d|10&E Z#lJign9h;6;ut8_JYD@<);T3K0RY*=2WkKS literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pikachu/overworldf.png b/graphics/pokemon/pikachu/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..b354642fe9ef22a87c134dbc8879b48586c01722 GIT binary patch literal 605 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzQjEnx?oJHr&dIz4ats1|LR@ED zSO8)g82q>pP!M1-qrl?C0*4nbew>J~m|!6RltKe++dB6Fg#?ll{mOu}0u%!&28N`a z?|uR8*zf7$7!uL?cG}&%!wNjD6F1)da_as6ZPslmGtHVOXWYuO$XXgUpZmD|g(;i1 zKtafvoDWZ>{+CNmbe+Hc(|zMfA?ZgFSG_xsHRr&T`nO&?T#xa)Tz=)V<7!mz!fy{5 zzqhhVnP@z=^+#c`3`NlO+CyW)wYlC zbX*PWHSS|6Z};l|F*D)Hf+@TAPK)jRo4O}lWA%rg(+>lD-xb@5_rIS1p=sZhU!NMn zGYlSAcmCo_tC=p(cJze#;`fY_`fA%`+jF|lB^)}>cXNSzv0rs%fe+{5U&*J8;$}SA ztLS(ovzq;zQJh`(m33VUn2YrRJiEPDj2|Rq?SN~!(&t`krdx$S>k3k-1&LPudmf@m-mp`z?KbR5p z$WBQp-bM2GrCYCr`5aEkZd!Qk<0sAUnlB$+^qpC7Sy>@&KEGX!1f$S)iR7CYZf(JI0Q)He!=k%+8$N1*IU^CM;&1;hOId{~rH(k2V-+#QfW2yZ$ Y_6{{!rIN%R3s97Ly85}Sb4q9e0I_5P!vFvP literal 0 HcmV?d00001 diff --git a/graphics/pokemon/piloswine/overworldf.png b/graphics/pokemon/piloswine/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..87459a519d5fa1c2ee0e5df4a6ffc6ef1a079e48 GIT binary patch literal 692 zcmV;l0!#ggP)004R> z004l5008;`004mK004C_008P=0026d000+od=Tz!&Z!AZ?oQJjOn!uS{toB%93EPWE&lBSz`1S$i|6sx3>F9PlLx+_kq?V}Y48m_Gy{+VGu{-4A*pOn;ZAjgjOz|^R>jl2 zBCz1rr7#hSYQQ>2Rj6&Fp?ocQjFPuC8^ azGFXar4!pKDKpCe0000 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/politoed/overworldf.png b/graphics/pokemon/politoed/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4ad784f9801be410015d340f60d0a172f89ea7 GIT binary patch literal 761 zcmVPx#Fi=cXMVQc_AV5$+aCiU!05DJxnAmVwm^f&-K@oPbh8xaz8_uDa@~cTLlD0-ttp{XM}n z&$FR$@M#Cv-xEx82!_JJ>kO1%~ZOXzV{+~D5$o&WoR|APh~ z+YMNp55PxW8ej4Qj!V4b2LYdOn}EtewBvh$oKW}N^QjHk91EY0g)jV93eq6}rY{}~ z9t^%pG58i74QR>qxJf=ep~>MX9bhe`RFw06=P&uTygcD(usLN^gDpQ81Tm-EjRp-k z9N`I=67MWu2@n2~kN2hX)YN-}(i-m%DUxD98;(VLO0hnWDCrG!z6z9gi1TwmUg0)= zA5bFm{l;0Re9*9gEKPq#3HAZGLD=xY7ZHlbxB=e$RiJS}MOsh;_68fL!LL2ir&NP2 z*9_V=5e_kT&^MCw&nc9Eg-Sgh5e;Liji;giC!cQMnd zT<+J@-eP?LdcyXWs0QsF>ykl2`CcCle=8WP<9om=8hw1bUxy90fX&)8;2#_#A=6?t rfF+IckLUes-D!gtHLy*u`VaL7$(tS3klj>`00000NkvXXu0mjf3ieb+ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pyroar/followerf.png b/graphics/pokemon/pyroar/followerf.png deleted file mode 100644 index d6163f0f1c5a5b8aa5a8f075d204d238c5d98116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmV<30wVp1P)ad-4cz}D`kNXyrqSO6rAiCYRxE7u6 zACRS84uj=9?C}0#leM7D=*%)Y8=1*G{0 zSqp|$(VQN!pP4v0{oJ~YNuGNo)I1*_eFkzmqom_#SYu|7=PKgNk| zSUU%}Z=R&6p$+6)*GbBqO$D9;3IuMdNF{^{X0KcAR)6aGI3y8?7A|4Oeey_!aRyy8EF$YcEIkd$175kEd85E${JLseaY5kEY%HNBf-e-s4WClP-}h_>wI*yGqA z<*l{1LiS0-pAnKwAn)Jhl6uLl<Fy}pKD61Ks@i^n?grmz)LZMCUM>* z;+kqY<$S_}81VTJsBVH?UdHTZlh|gBB5neq@MOQtfXhvwCUus$%L@*uZIUmubY1fz zZVCkr&_viC2)NW@0@)c5aLwo&xyd+acYW6 z0wX?B)7P#=Q1kI4zu>DtwN2_3GLI{~DXMiR4gwB^y`st^sx6oAgG788OA1BGze?B_ z0l5re1QCTk#{f7tsA38&WL9b-zA7-8>^3LKtdW=36d?oM;by-lZ;h>y=2z~JkFKe} z%^(y~Ztv5Z#xejmXmG3%9jUmBZzH$@7cP)3j@w3Dztzg&A3eIBnJxBtGk-Pxq+ESI!m$(H2qBk;%$tRGz6iKtd;xusN?ITSDpqdo$1>Sj6pd*lH zmf*4hR;Z~(AuNj{aL+YgBM>SFPvD7jGoe6di%4Wi5c2zosz7iA+6XI8>70KA3YkJJ z1}A|XeiWG92586qC9ncnH@PPP{2vlgU0%!i(HXytX-{B@uCX=%~tlH(R4gp_% zw6+MOcAtTkwgy}*CnVX$Y2e6DJE#gwtG-6y<`D4eVkKOGrl3Sz`x6R927MA}>5a>0 z)8A@A1LeSja~A3%*W1i((C&XjpX)(FdTI36c;l^pIfckz@TBeVwSv0wIURIZ2NCd6 z3MW9hxcM0%JA_<}k2*fBpW@p&S%SYUTpVo*K?40<6h;l0L-fLqcool+F^A}Nn6*m{ yY?ps6u(|{eYoe$?C+_8V=>27U$Yt37+7B2L7KJ;X+5Z3l002ovPDBK*LSTY92?6&2 delta 683 zcmbQnI+<;Pgd__y0|UdhZCTrZ6id3JuOkD)#(wTUiL4V9r3DQb7+xhXFj&oCU=S~u zvn$YMqOYzjW0JSK3quF1tOrmFdx@v7EBiA>UN&W3_OL596U*i6uX(yShIkx*d(|=j zmVpR+L3B-{g<$nliTt1|(yHw%u5&Gkow(rj#99{hRdE(drCQf>W(nLcJFj^|Uo7$N ztUBIkEQvGeQT@vekpU!F2oU0kYD?jgD zPyoY`&??CER)?Ly}Qx(cmeOT-Ii>Z z>as0nF$rdeZK&Ru$h!1zU~f6wol6=nteyYsJ=b2GnbNR#=fbzl4O2U3l;26(5`J=@ z;2HC-=#?th&HqmOvOI3Hb=m?htHdK_8j9|F7Id=2%RjmM^|t)ubGwezPVU+3%J;gq zfSpTn?!P~)N=4%)8tqB`fA=G|i|4*ahc9f=14g`RiEBhjN@7W>RdP`(kYX@0Ff!6L zFw`{+Gzu{?vNATcGBnmUu&^>PFjm)hMbVL)pOTqYiO_+r!KrHcPoM?{Pgg&ebxsLQ E06Xs>)c^nh diff --git a/graphics/pokemon/quagsire/overworldf.png b/graphics/pokemon/quagsire/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..21a7622cda57305d4c56cf615ee275b2f490a20b GIT binary patch literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNU@|l`Z_W&Z0zU$lgJ8^O!f%! zWnidMV_;}#VPN7Zw1S1sgsn zI8C7!;n?9Ui^*_3(N z!>)i#5=c(;D+AIBPz*0QLtinCBE)w-TDOW=OldCeR8Vu^QeomQ)Ply3chzoU!TBO|@X zM*rq7yfRxSwB(vo=GuD+lCMpyk`+yRU%a`*8WLbnk9ZRUD=&#W_ap7;r-X#Vi!%ukE% z=?ZxEb?AIJ8b7^QoTK9yyBv=w|D9b92j++0dE2QGu<^jE17|;UTUNMaPPrMfyq2Tp z8*BesUTuao+wB5o9g^yAi|vwF@B4I4qvl-A0ABfd?}EY`iu0_6*T2^N;c()@Em_TL z2_>(%`Q&yVcv@s#n&0PA^JJOq7U|uMzQ+rApY66}yHuBLF^fqsJ8VPs#zfYoe*=5V z+3sA@aAEEI@45Ek%#?<`I~TrXZkXCRqx??NmhhAN1kadvMXyx3ZvJ=Lm*sJrt004R> z004l5008;`004mK004C_008P=0026d000+od=U@^C;$Ke zh*%iVuo(E@2+(*S_`pE;kO1iD`1t71cxXt#uz(+UdUF5(01#tgPIdqQ03ZMW03ZMW z00000003gS?)m@#0-Z@jK~z|U?U&nc}ePk-PyyMH6=z?s|3$;yZ{-fr8)q*zTWsVS4k$)w>p$vAsOAuvLX1c_^;lR5DcEQDY zo`JZPZx0zaP+alRUzd0fbVj9i6<@{#A$XrDSP7i+T@WLYtWqF~&1EIm1B8m(TL>WL zAE|U*rADYY8VLd-@bCd3*cr@u7IYwP{J9g$=2Ju302@BM1I%)eCEZY|UBkx&m*w|2 z1l}Pbh@g=HbJ;+dw+ZZm6k~e5UMWWE{I~@zuHxgjly8_}-yxy+w>JSexHA%D!IZet zv!H&ej06-z<{i$0LH)#VtTJ+kskm_noQxdu4;hu3DsCkx3Fvi$8uzrT e4_iF(f8!s^L?71rZF_wH0000004R> z004l5008;`004mK004C_008P=0026d000+od=x9y=$7TurAwDCUHT>g z{1twNAPoZ;(oaz2@Z%%+h5&{R2OLBXk7@o60c6DN&pzUSIpf1)mcK)QP0s9N4ms!Y z(TA0RfWNMrKhNQq6Xu(c=J{=zpuT+mVgTZ>Sw!1k#PyodD)lUmx%ev;p7qNrfq*YS zeS^tfAmCDD2rWYBh9@{tPcq8S^YjtdHf;mkHXm{^rbFaWtN}1gaAK@IR=N!N{O-{47xB^}dO~KqNdjK|^^*#jljYy%G9qy|$jJ&I;$kcH zMxW=T{+O#jL_Rb?#LE_OPchpiFy^lXKyBuPU{+bgbquW4;0pFJIOc>84!siV{Ioo! zGO=thwH-dy$C&F1X`^yT(q{i-3%DAT#JU#++_}*LiJ7)i*lG`tC+(4&H2}@ z3LxS&0tWY@1FD>?_i2-f>)U1y58SQ+;(e2G*b5P2GS9AN+e002ovPDHLkV1ls48N>hp literal 0 HcmV?d00001 diff --git a/graphics/pokemon/rattata/overworldf.png b/graphics/pokemon/rattata/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..4065e7d8d6587c7ced4ebba88de4c5ac4fbc4846 GIT binary patch literal 584 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzQjEnx?oJHr&dIz4aufr6LR@ED zSYTlgv7+HdM#K!D*ozw*b^tjyZoGK$(kELy_OpJhw?W{ZrFR;$P@y; zDl#767q`)N=;2+)EhmDiES@Gz5^1p5gw8{LMc$R>MPhb|Q}iI1CY_n4jhp?<`F z!k&inTMxTtw4eF$y|`%oImw6b6vdNIH8TkA=gmw%ncZ=lu`|Fm<^BAEck>m0Pc>S1 zo%ykT_Q|=?jGWz8OPZD)?uqBytJS@eZ^Gxi9sDd$ax~qZE5e&ZmpAYqRFw{uh6TPr*6vY5&2N z$#?QTFextxzklLi*8I@2hRN3dmTvmec~@~_;iOwURR{PvcIjKcG0*+gUlD#Z)T`oX zmh=gWO#Thd>t1GVEogNlXHK=q-{ID zI*IG=tG8V6QF~(cgBO1acJxTT4En!)7yFi|gxHm)AH#o4>uoT9cT>38VUIve^Oc?Z z9hJk1D+MORPwiv+^fz&?e#{@sA4Vrui``$Kb8_K+6;2B~o_)*D9Msq5{-OVs^@j+@ Uwtf5x#-PabboFyt=akR{0Ao-9ZvX%Q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/relicanth/overworldf.png b/graphics/pokemon/relicanth/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..cafb2a0fd05cd0cd787231911b5041385d5b98a2 GIT binary patch literal 925 zcmV;O17iG%P)004R> z004l5008;`004mK004C_008P=0026d000+od=>s)jlx7= z1bMV}MoUUWmgN(l_{4t~A-sbBanQ2FL>_nXk|*oW_^UyMVye}Y2=3t}H(%k5zZ}FO z&@sT|;Wsc)VW8Lo!9DyI25R#ScsRG_DxC3`BgRar6|+W!I~e-NQ#j+VN6bxnAesii zZA>l7A<(RE&-m*RR|8}z9Nfkt5KZnH@c5cU=U=|TW9GuS8ee^I3qxO}5~{VuGrlG< z-Q`_aOLKXC7%&!}a4Od!@M?7VjIa7uNRdld(tHkqmvYH9+6FvM0Rk%o2E)LF%eHbE z0;#5?oOUxFJ3}CMYu1@?3S|h4rhy4By|q$G2%*YtNvEmnnV%v@=1adY8xPpHb`YZZ zLy4jfpX#`@| z+il3ZwN6h0@zgz6?lOV}Y;g!8^ogzpksw?#n7N5Q#wlHyp|7D?8o7LLPz0hvMBz

vg2}P0sKV9-(M4$XgN(sXSh>^5oJ8lGg0FuhxU1uCm3Kc1Sbfq7 zPsDyZg0KH8|4~Bs1*z7*!|xE&3iu%%KNr6N+BF>m>3&cp00000NkvXXu0mjfb5fX- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/rhydon/overworldf.png b/graphics/pokemon/rhydon/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..39a1d35b64daf300da94072c5bb90bde698032b4 GIT binary patch literal 893 zcmV-@1A_dCP)004R> z004l5008;`004mK004C_008P=0026d000+od=T*w{cg80hHu*sxfLAUKeCFnDMU-v zr)DPYhj_%3z@$*w{wQ={z$MAj^rrUh8_qCI(N*`det5(;g+gg`P48isA(up86zMRSCb?oZWE|3=r&`5CCI}8&nd1@7jA++pXYhY zE%m*6cyh$EldQ{2Wq!`0uSL18w_}d-qG^LGip@8Cey%h8S}ep+NQZ-N#7lfwUaaeL zReniRsjqNUI<saFqj2*?}YX!**gjq|L`V$t&*nijM*l=tH}u-ZJe3 z;J+h}9iZ%im+RdEc}veh@8l6u`%Ejz)m9}RoO~bKt>7Tg79aaNM~bTek?y$A!NIKC zI=IAYcJeC#p7$g=I#>o#3o&_)i5~B)^r1NicMAQYklxpIweQWf75B)EH0g95{gkLYZ?=2Xgd@!qLG^Gd00000NkvXXu0mjfP9>O& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/rhyhorn/overworldf.png b/graphics/pokemon/rhyhorn/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..55f1e6f5fb15ae22a1c30192e3dab723bb2a8639 GIT binary patch literal 760 zcmV004R> z004l5008;`004mK004C_008P=0026d000+od=USidyBTxrzTbWCZen&(*zYi8KkPhf@`j@0ci z%lq6*ltLh-MOtt%F<|lwio}isDjxdW)eSBqm7AomJH6)qetQx)SX6S0Bccfu$`-KX z?U=#b9PWC$LzNUjKfVE0dlN$!>k)ha0000004R> z004l5008;`004mK004C_008P=0026d000+od=E000nUVNP}c001BW001BW00000 z0001Dx$gP^00V1DL_t(oh3%K?lG`8*g(GoMRPXygZ>1w_119lwJ3H-oIDd;XKSLnZwZR+i<5!7RmowaQ6)4Oi`sdul**{ZAYk_y%#?N9LHmk%kF+a|a z1s|VJqT#TrEE4rSXQ(r1A(n;0w>$)jMW)iP@{6or7MN}Z@OkCC!9!r(+Y19Pxur+J z?c4fGfTWcorAv`f3PNYy6&11}Jmh zz+B&E-^jDB@yZLn8-PH{bn3IYC?5{P|B5$nTp-X~ZM7;11a=W#@nP{}b93Fku*#CY zw#v5K^I;$_c{2$A_}VqU(INo76xAO5SXFRtDNi0mleG7 z)bAlx+N{L6yoG@qj&NpI$W~?8^<|s$=*M}}a zmpTz{t&@20-0`D>39NWaA=LSH*$vNi!8?OqRY*xA&v9kP)|ntx^upydh#K9dsA}Ov zw)J%;N|ur zI`cU3Yllgo_feE!vH!P0z-FZ9vq83FLIltYT@oG&xv&1nX*@-cI_EZbb+sEI_}M|x zVHTJq0*Ud5lfo51;m$7x$$5%A&p7C&N=Osee*OpQ@KbwrbvUg2{MtK!)09IIm*iE- zKkSva^k=1gvml)OV$csN+hCSo92e93nj0K=rlFMht|oqJh$Ad?zm1LW9l&`u=mM>i zjqQIfZxX;L9Xp>5+5|o)_6PfgPOp1++#T#Lt&33xiD~`BkWfR`zY&QuI(Q4^0D!Ge(^ltKmU01qx$Ce_NV=u Z_8a|_DRqQX*0%rv002ovPDHLkV1ix*@=^c* literal 0 HcmV?d00001 diff --git a/graphics/pokemon/roselia/overworld.png b/graphics/pokemon/roselia/overworld.png index e648e28ceb08ff7a31db520184c7a762c9e4ad30..2dd6d81514363ddaf24d0652d7bc4c2036944852 100644 GIT binary patch delta 496 zcmV$dFhNFc>gckSI{dKyXly&?sPtSdb8?fH>&5K%}$esQ>^0e@R3^R9J=W zmg}yk=C18$c2Su2uEInM>HwLm{U8feVnj~2|5 z*k&azcGu_rt+`pIrz@0NfD+$FNE9^ZK**Sw5(`w|Ms$S+tx6UQ^m>NZRWOgg4-+H@STp?RB*j3rA~>JBmS1pYe5dq1K0zQ7=Hu<0002CwraKj001peOjJbxu;^%T5I{H(n3xa%007v?kVp_< zC@3h1K)A4Q=y-U5KtMpKm~g0oIOw=QGqs%70004INklE=z&0R5_ z#Qe7(7v4K=2tZL$QPDq2+S8!zuv*^Fk|wrn8haUB0}Q^2Ya&{1ZUY$Dax}gP8rU>j zxeam!4XeyIbdW{!TgE0@I^STi?^}9)n^rKV>q0zE!<`)eo1M zR>E+^=2eH|r%bb?{-M8&El8S7XE&FdO~()BnO1@zdJ{UFPBI;J@*ae-CrbHZ>b$w_ z*WQ9=ySMswcg%5gWoxmHFG!knN&QH*6qn~S!fx!Actd8%AM1H+{+6MB+R%kYvE|PZ z6&XmonzZKr>Kq(BX)FD^1}fyv^VB{dTLb=VU*GVIMp-wjb^rhX07*qoM6N<$f>k-y APx#El^BUMcCNbIA9PUI1pHn5C8xGpvaI|5HJ`pSdb`C$UtyVkkBY#h**#isDL== zxIm<{Q$8Y}@p;w@Oek>D0Bbur{s7-38s5jDls#ttPE{_>qrxc*^@T;c zxDCOYM}cPce(vJAKq!*6g%+=IaSj!##giJ0`j)2(TioLJVt0#WM!1_h_+BBJ?BLBQ zF5bbDm`|A?C@eubII@OiZxS?!^X|#w7T=@~*jH~(a`E2bkaC(fBufa=$CJSi4vYKv zCSrN@<}4RMkK=&ouT;F$`O;+odu6NKjvn1Q)0}a5Z4)uk{P+c^AGHDx literal 0 HcmV?d00001 diff --git a/graphics/pokemon/roserade/overworldf.png b/graphics/pokemon/roserade/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..9afcd4ecd6a9d06ae17bd9fbda398c7b4bf60e83 GIT binary patch literal 812 zcmV+{1JnG8P)Px#Fi=cXMR?HgNJvP?*x2ak_@J<`0000GKo~H1D3HKtV5mswxIoB2aHxPdh!99n zsOTtYn41Bw2LJ#75MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|j!8s8R9J=WmFtq5 zFbsulW63xKc>lNUIfAsEi7%M#^cULMNyw+jM>og0#~yp^vBw_!n5X@K|C0bM+~GdZ z>K;7~hiRIc0h%1@BI4iVq%oSpqDPO@1L{JEu~Mcs$A`hkdWm}6eWJ$@iyl4B{#b?) zWiAG2bH-=z$OJ3rH#xgYg9{G$a_MqE9rB0^W76do|8yx-sK=eek3zf&L58^nW{;@v z7C*{kF5d;}aq~D_=o7yV=y8dMz>2;uxA?*8L%;I*E$+?*;Ta|UT`tFb+NM-m+~lA5 zN1F0IV_hCKo*s%lxxpEGI$iGYbHvIHJ&potQl*#TO=(2B{CA7O4Q`k8anakReU&wpkt-{4MpKu*D`RG6_Y*Xi||VXxPuI?kPD_Bf+FxrDo17&@oO zzfyv2j-}AB2o%0#3F^FzbI}xYjtOsuIbHI5ouCf=E$MG_Sr+eP^%+g_t2n=HGQ_tH zO%;sU5#BG$5I0j`q)$~YH`1MT%d2ok{~+Hm}f!3b{XJ!+$DkK44)(` z6TZ$ZNyJ2TP^NMQO^$#fGh-{OlxKlN8Q^%5Z2F)O|H5xv=k9D0N`o2~Gw5(mmL_3! z?dAAnh$B1H7?uP|2l>$?$-)j56XkuO8Ap!IMlWTN5~s@gw`Ag%%#lvv2aCQtpJW|EUwJ0CHf{VhBuCjfD)^w)jRC3 qK#lM7n0Ea7EqPJE6^W1iPx}Rzh$HU{&#&tM0000Px#Fi=cXMVQc_SP%%HARqt$0MIx%P*`wiaEK@{K)A@*keINDSODng_<$G?_=o@i z000000R1(CmjD0&5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg}DoI2^R9J=WnCo)m zAPj{KLlMNy=>6YzkAz9M8Yk)OuQ1cD>rau6K$4x^w(t6`@A|IqDwi=I@ee-^gHO3N z8#BMbRhn_mY-5=#o(Ji?&x;&@lR&*1#6RbH z+lco!xg3l$HtX}g%ix@6|FZxquE(na?W6+MT$hysgT5|-6Hb)49FIFnOz&Ofj{qug zR>BLO^jT}rqde6=<`hV`I4?eKUFKA7(V?%%aK$UC0icf>gELM(ka=3*l7cSe1<71h?f-@52VvEq|$dE5{waLjblQ9PJe0j(V zPC*2QWD`VS_2Cs~YzCSedj!`Af^Ns5@nxO`-h#zqgF=VATEaP}5aEBniN4zolh`J3 z&N)P#Qre_CredXU#nr|J-jhCq18(%MxD*NRygP?qTo=d%E>nTw8wF~eT*%)q@MOe$ zkO~obG5T)GopU0%-DQV&3DCZ6;6};28Oi~BY>zo_vA=DBEVwQmkTPOoY)8;T#f+;! zea%p%wwcvhxKG|Ehz*DlNS>9<5}=;-rsD(szv#}id)!vQ!(hUbKo;k6NcK6cGZur) z`vfuMa4O_In$&w-Iag(15MW&?Z3Q+@uF# zn_vMV6JyUS-Xy3tM$?lQ{$T?gc*v7L9Iuv$5uLCtxOJlZ$(saKpgoSprhaM? zunn&h%qp~!Ctn6K9&r^YG5v~{1?8>9|kMcwCR8B2HK>9?_j@e~{$k@^ohLeaxx z4|&LinLzxYJZRW~>L5y+X476FOJU6uP^{l7CKg#k`wV}?5A)!ypVvT^h#iVkd5ZD- q#9|R=75^{R*?&k}wfL_8y8Z#FcQUU(5!ERG0000Px#Cs0gOMF6nqC_o^X&}aYv0AQd%P(Tpy*huK;_^_BLfPjFou*k5ODDc=wDYCG^ z0008sNklz3Of41^;jY%j_CKW|48NzBDyZ@XvvBRcIin@_-u5ZJxlKJkf9 zeByr!`epvNL1DbYPjh5U5)Qe8yg(=G9OuB_fuW&6fi>#Kg!d_9}Q#`QO$6Ru_#`gkEUuY7> zJZ{T|0yXw(S~cR|v?y zKMP;txLU0=Do{*cwZM$uA_vJ$uK#j{ryL45Q>cHoM&FdVDO90K)l%j5CTRXDAMLJDie8v_wl(LO_W;mF5QA@tY0-2$Tf zLpL{CLL-03O`vZOOkxpk3~<3~gQBN&vxhz5ib9Xb749B=dgqP8F;{{5z8LP0d(d}9 zlz4y47#mdb+CZ|oaZK=6KPD;0cX+*p$(vmCn8dnAAV1}VE;oTFlUK-J-AV)Y`u66v zK}l4NuMAYht9|c|xC?K++3JE5vkQ;Kl95s1{g_ubuvlwi7| h;QwQ%=qG+5{s4&E8gED=?$-bS002ovPDHLkV1j+nm7D+o literal 0 HcmV?d00001 diff --git a/graphics/pokemon/seaking/overworldf.png b/graphics/pokemon/seaking/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..80590bc05341f654c7103a62d8bc501c57d77b98 GIT binary patch literal 1114 zcmV-g1f~0lP)004R> z004l5008;`004mK004C_008P=0026d000+od=gXU zzv9Mgxutq^J%8hKudaRAS|{XKbJIqQ>l+6SJyE(v|!Zizg2L z5D*-aR6?obqok~G|3Yh4t+nY9yP79{st}ZG>8!|qqVdEjz@kG^d${$#A+DxZ!hNhPdz!c%3YOwYGqvtczP61yJ9BlU)|j)&)(%AL$09hzSoS^Kxjis?)}G ziz5KHya~Jow8r(`^%dE0Hd$h4@O5#5{No0Mh#8Mh!2Hfnq~ezhYZ7peZ!2r}xceIg z6!+l3HGkiJe0}Loa9t6t!Q)prGsH#0GsIkhC7sV6j$9R@8)phA(WwU373D5e#u(`aiO=ycS z{L1)v9Q5b;_U;5>u*Dg$@%R$H<5}R=qMaX?Db`4!m~c%n*f_z(ewhDnk3>)t9x~*m z#VHj}SAH-Z&pQ0RF{vF#fTaxEH=bWg&#w!pVU?fpvOvL z>Q7hCaIhE6?@8@APck(g=Ir~sVUH{xz|%lqwk~lEuy-9ib%x}peJ9yTm>>KijvE#Q zz}1}~EqKK7693uo#44TNR+SgHWEfQX_O?|S$nwTW&?Y=GFdj_M$^QJxP4Yb)5eXQCs8jq?Jht?SM=$W- g!d{`D@fq)rU#Alwn-SM#egFUf07*qoM6N<$f~;c)&;S4c literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shiftry/overworld.png b/graphics/pokemon/shiftry/overworld.png index 0d7e72ce99ea40e6fd8b416f44b174f6733a1c5f..113383d549d96efc1bf490555e8edff38ed136b7 100644 GIT binary patch delta 860 zcmV-i1Ec)f2g(PKBnkm@Qb$4nuFf3kkxg5FEJ;K`R9J=Wm+O+GAPj{CN`zT3@Bg-Q z0;u7lj??>Rw`97y)i1(1F#{2*iqnEF)kMY+sYx$w*d5o2(+q`F&K~ii&(cEb^f_H|S{y0E1K>k$VBng6 z>t)eQVbBntJmeGCmqO2uycs9?nv)}BcjkrwoIT_k90CnufXQ_RZaDP$c}BmEGdxQ1 z9Y=9d7C7Um@Bg0r*=K{Z{{?4#spmYzV?L23I=uVu2O9q-Wyaxo*E?Jnx}V!R1r9sC~r7c zCPRNn;q_GbHSIiyS+M3y&yC1YJ5On9c-udg29L~SdA-0p4gp9p@?w|rt3wcfI0W7B zT0r1sVoS0bO!T_rB>RUvbj+Di?9_NwE8Ka;#{0$r1iJJVATU)p28g?b5F)Q1k~?WI zgq5JsvqHoAJh?6bEvHpPSk23fN5>1-f^P+GJY(iwE@oMvMqzktQarEqD1jJb9wFd} zFH~F@4C}gTT=HgXSg5QJ$OdhH!%5>V>2cDA-$QNTv=zAX10&$jp9Om2jmE-XIF8Xp zn;ZoEx)>XN7!0djnWJM<{yYUCFdGaN=l*eDRYneFj4c;JLoHD710MmKKm-tWd-ym+ zMIIs5X&~0u^W7lD#J9}w^VdS4Fj#TiRlf(89}}^+IC8+RDFXC{_lZz{2-MiGqTFzR z-6ySU4&ejrJ}WK^PB>1S#sY^1xqn=%6e2Np&x{bbJK%@EV_~ldoH)7MEbnv(>OwJq zgSF$rAb4a0CKn0zN|nH3@W9DH-20aXETP~yGhGGcfDKnG*(Pwx7m;PXpKKv?fP5kh zmP@===QosRX(2Ehl(_3hzx09!P%<-EYSTTo;GUeF{5*>C6piaN3Ksb6|JtOw&P*S1 mg+Fd|lDVJZJ?azu&$Vx)vO{}0Dy!50Qvv`0D$NK0Cg__0P0@=06Lcd02gq4 z6}kbDE?a*cNklz11^41}>g__8&;|KoOKL*g6pvT1*`C)zy;@G0_07B(!) z$3FJ4kA3W8|CK5A27l|vVp{){pF|lobo?I2sxAha@#C`9z_t8W9F8H?0%HKRXxF;U zxK11^72-I%#SeWJ4(f8AUU4`NWn=*U!w(X8&9#4XS|}4VkdvEyk^WMQ>=Dek$gep( zSlv~O4m`WbH8}+u`Vhl+2~0Tkg>_|IFBKk@c*faW$O2a$_3`ICtRW}3h97Xzmm=pO zZu12eCY%+vy~B)4gX9GHIZWU+XKS)IS>OwOGoEg+=K%d2%{bQ51_gM{Rhk+F03}gOR2BKIiK8rKGm2 z`r@&zyHwkTHvu$?36d%53()XxnSxa25I9&UC!9Nz!7nJ@o{Hb5UFWz8*4*{n6g6ts zDUF7=@wqhwRwm2q1O_ zl1xodwZaF_xZ@(wr@MfTslz$Iww)uyZIk_@^N~wSX)1vQf8xU75J(5`X^;P&UXB$!r%?`F!;1tL$P9|W(~$Uv zHo=0+3^sjkWtwPKO4DZ`w<#U;iHm=Q@F7t1d6n%Z0;w)O65!$9@G3#_Eoxi|941)A zKiybj&eXn3X)1w72I7Ddm+57Jixf9iK%R7(pUY{36@kyXBWUCN;FtwL}O$#XupC@ zGPl4}qikWz(5=8%@3punP318W|DH|a|Lx)bN&5{5TPbAB9=)jm00004P)004R> z004l5008;`004mK004C_008P=0026d000+od=)O&Kz11^41}>g__8&;|KoOKL*g6pvT1*` zC)zy;@G0_07B(!)$3FJ4kA3W8|CK5A27l|vVp{){pF|lobo?I2sxAha@#C`9z_t8W z9F8H?0%HKRXxF;UxK11^72-I%#SeWJ4(f8AUU4`NWn=*U!w(X8&9!q{C=)c0lbd{z z{!)zW5zM&AuQ@ze-BpYZJiEy?IRzT}5W{x~OgQz0b!A*H6&{s%#@SrR0#_dO@#j3O zAt$(oA8^r^BIhA)^92?roE5gc!;DLVni>V<5pMIeK0d-9YvnEe2NFo3MV{#$W}Nzr)HoFxvR1U?H@wZD*4Ga(h`6iwyXN$v8}sQ+lDs*G>Qq5De4Q*@NSucROS#kSSTl)JCngLDBhlm-=Kmvn-HpjKGJKAbUMqV6#UCkw^N~wSX)1vQf8xU75J(5`X^;P&UXB$!r%?`F!;1tL z$P9|W(~$UvHo=0+3^sjkWtwPKO4DZ`w<#U;iHn8sAyD&qmF*@1sV+Ve;NjlzDnars zYFr5%CRoHj-B@DI)V@n;DuG7^;(!yE>1Bb76gO2so^+a@%W2801T)ui^Q8tcjlh&3 zo>&qXyqAbRiW^pu`vNh0-CsV~}m+ zz-?&1f=x2Fz*D1aVaw31z*q0JxF}8KF%kcsP2&IU;r~hd4G3E)WXvADsQ>@~07*qo IM6N<$g1qOqxc~qF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shinx/overworldf.png b/graphics/pokemon/shinx/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..74f17d30b524bffcf67faddf9461e544e62afaa3 GIT binary patch literal 642 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzagsfPd>I(3)EF2VS{N990fib~ zFff$rGcdf0XJD|J&cGmEP$RmF5h$S^;1l9HJgQKxu*GM87g14N?liV34%)9nc=ebDl1aArY-_r`^sw zqQK+AeB;ip|Nr;OPJUx&a^v2z!0)XSgCO901~vKLm%1KaczjrXqG;pMK-r~y&7$#>8D#8!HLntFIPS@l z*5tUhP1kShls&7bSaBYB*xRx{&CYbzara)Mg)SejW!-o*JLE^=24CTXPiAGy?7lxM zxmgjzbF4>IYT5DYIt;Uudv{suoU)7F^LF9Y6Ejj zme0L?-&P8Dxm3M*4pPAJBV^XK4QHKuIwO|++-~vB%r@njkzXfJ^T&r9rnXo3@NaF) zoyYVmXGw)riO<8^H z@$VT?`%Px#Fi=cXMVQc_N=jl75D-QaMq+cMq`lrbN>Xt_k$a1@|Ns9-HDRQC-pw&e_OwCf zix6QMVQ}#34gdfF=1D|BR9J=Wm&F6#xnI1)4 zK(8#z)YR0})YR0}KN7&t_-_lChYklEh^~*Nl(+f!|A@R08NY(Cj1m}eWFasurB-~K zW399pCSm8>DK`;_#R%<>Icjs*1m!r~1cn?BVCtCt1QM>=#kc@^3n1sfom&*}B4ixP znIDU|1~b0w_nseWuUvx}xBbDbnMJ=z87F=!C~(FfcbyzW`+K+sGmfipyXzoX{R(EB zdFU|X`@Qw@FhJ0NG1mZFGlOl53?y7Gf58$;_^$r8Rr@RcIg@d%@OCqUw=L>G!bQ$a z7VUwIlTN*@ihY9_w-Te)c*AIoW*p?HVE&BnguJd%emPf%K&_D;G44f{@PY{4qI*Q; z+#K#?_H6!-IN0Q9fBkJf=5{%VT~s3O{2A{;m0pzoDU)%m1?2G%C>6Z{8P~QHs}Sjc zPq+$d(elLp#~e#N4c3C*kc3->v6w+ZFTsp=gIL8n6lIWbM0;xhM2qZP#1Yr#+6|)x z_V2ljUxRd!AK@BHI9PEYehq@{f%q+{v)fJ$Ut1R+B+wr$!4Yy&YhTFwGZDi>;$-?L zjiZ~l!E4gcr~y61Abvu}=3g1}(yyhz{*!9zJ$(UYVHC|Q@qm5+0000Px#Fi=cXMVQc_2slV!2pCY9uozfy$S_C{5D++Uh?ocvPLE?Yv?fG z)Y|p4l=3wH`mZ%BM8>ZmRiXhzoU1faEoEK#Y0m4~7R61f@pj5pjYMO(_G8W{PE}Fa zHgfh)jPOU$`Hq!K2#-GA>sHX9^`; z3w-RTuh{!c#*yJ;RfFr{RUqLa=OXjgK+4heu>;!%Gp;FSOO^C%09>vUYKcEG`FantHZ%r`+t>VkHUlOWgc@q97GQ)STs-Kgby)nU;$=SDcv5Rof(MJfNI2^K+bv#W4+RGQ`q$Ld3;G1mBoddI Sc*P6=0000G literal 0 HcmV?d00001 diff --git a/graphics/pokemon/snover/overworldf.png b/graphics/pokemon/snover/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..74d3c0a15e015d94c7a1eacbdf2774e304a4c2a6 GIT binary patch literal 781 zcmV+o1M>WdP)004R> z004l5008;`004mK004C_008P=0026d000+od=j&^z9-aYq4`{|I(9;24j5QzUVV2*RFG3vE1%=2Y|C|Gp zhNyiOZTXPbC6RSXaJ2k?nuFFOLY$oh#$0CUc!lJk2D;dgm)4e-6f(3glX zLqO=NPwfWvXUh+IwX*98xfR{_u$sJbU~-Q$7q`N}&O4IC*ItYbmX=Fi+e`A)ldPFJ zuR=wO-fHz%%MbdxJtCxn#N1x27E)fcP$n0xmu!z6_SiRj3~u|AE0*I4iOL11OY-RH z8-6(9$`K+G%NP^pC4m2m_YT)3*rSxq_OCl^%B6!B+0j~P#l5GW^9_|K*}Maqp<;YG z{FTPf$u}<;bw$h$L=&Jsbrg2wMfF1;ihH~NlEHuJdH|W#;QzBf$uS(rUit$&00000 LNkvXXu0mjfn5kuk literal 0 HcmV?d00001 diff --git a/graphics/pokemon/staraptor/overworldf.png b/graphics/pokemon/staraptor/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..0515e2ec685e35717901c4ec5299fd9e144fbfee GIT binary patch literal 1187 zcmV;U1YG-xP)Px#Fi=cXMVQc_0000WARtIcNN8YS;4mPNfPgqSIA{c@j zhc{m*7*&GCexB#RKj2~J%nugexmo8Sfn&aTXUBP$8Rz$So1l;lF1?nL%ukp!`Y7uEus8KL3#nt7dAR#Pv z7VRkvyyMCmDyPTPd{|xV4mST$4t0wM1|9-)i?Iep_AAW+xYWm52M+kVADo{pz7M4# zZX*UEFaa0=eo_TYvDgJXF0BZG$>nPH00Bt)xxsq{s((~IO8JB{eIT~%5LYWt(uY7q zr8vQ2SJDOG!VMnRx4AOA*A9l{Wiavg;P4Tq%%9fvR+hyGTK@Q;*8dIeB`P%;2!RRE zkDIJ=`%o8<0suiLt}(m)og!z7)Z2CmtEr$=ar@P?qoH7P*46ky0J;B3n_j5F8NPwM zJMQmQag~48mHaw-iT%-ut90AQy;AomnwS{BT2oK_sJzk0=y`_N>n1yMP{ygp>mdiQ z!6!duWT918TEx$qDY@84@3%@H8_EP zF93(U4h3++`GEl6k6(T^dJf638?g$5t-YoeW`l9U*`H>qm0(BdD7r1q+J9R;WhC7x zc~_vvpDchooCgBXul1c;ldUbDJDTSe)ExT3goA(L)$j>@UioCi>|vqZ|ML002ovPDHLkV1l5c BD6Ieh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/staravia/overworldf.png b/graphics/pokemon/staravia/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..0a023d81c77484c480a1c52905cedec3d7245c2a GIT binary patch literal 1032 zcmV+j1o!)iP)004R> z004l5008;`004mK004C_008P=0026d000+od==6IYQ(vE>MJLQWG>I6 z@lYxdIDde|a{fX9;%fn(KL?;=08)W;bRXxx@=X7-aOoCe2Y66@O8HzsaXb@Hvi>*h zOF+Cn?4UJZ_s3oE!lOZ57F9^xq*e*QH9em^2%tki(H30*MFEbxj}c4N(qnmS#mbQ1 z3=KU`tW?v7th|y0`xg8(oAiqI-!{eCCh*#Ssa@Z{s{jSX$t zP$G=-LEM9$JUXBnmu<5mi3Q+!8eFOToj&$;=Qwdu#{i(?V|j~U7G{B$7kNK4x$tmJ zQ|lgDtz^frRYpSPW7fRE`dDGp=Wz}$iIb1c6>O@kuQ0zhEZ3>)h1c|237dMTDyN(> z_eytcqX%vM`68fK;K5@ZQtLCDf+2rUYr^wdlOW(C3Pogy@yV&C@#(Q4`xn<==6~|2 zP%_jN=}=^RPSl2uiv!`DyXi*FLrXSda+5G_8${$Rtr33Gr@oFw!Z}?XuSt#0i)ucBh*EK$<8aNKECdU!S6c-#LPjUk5qBzbT$cdcor?N|} zYnDKrb25kn87JwtMq#qE!G#0HtBy1*d{Slyu+8Q;(d0;$!Pl4HeWe21g!4R!V|ZLQ z9hb{ytU_XeF>lYWR-Qu=>L;4Z@B7WG22oXZf#j=YlEc}~;dNg4+=G`kxs1&1{JwA% zmZxxRH&^+0KazYm0MmJX>NgtruKwR<@%OI(+Wr8D4I1=P!b7S60000I(3)EF2VS{N990fib~ zFff$rGcdf0XJD|J&cGmEP$RmF5h$S&;1l9HFWwOC|(Yi}VJbfq1&DgBik{cZb1;5ONe(LPk<^0C;{#m)Ug5oUM zduQ{*7=)ZVen?#ZbxZP=43B(|PsIiIjmH_?Koy{bS~yo=N;QD+rF-L*TmP?WhN-8 z%Pu?d%)eVMpKaojH?Bf#oHu0HC1!m)aE;};=F#g@{(ae>ec=Df>?DAgg8ML<9|0rwU39hq6(=4s$n>%Fqhzgl3Z^Nx3)^}YW3g9k6&f5k0Q&Es>V SYNjbD;5}XaT-G@yGywosxa4X8 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/steelix/overworldf.png b/graphics/pokemon/steelix/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..53a7dc53afb649dfc700131aa5c31a3804c4079b GIT binary patch literal 1549 zcmV+o2J-odP)Px#Fi=cXMVQc_FhEd%n5bBIkN^Mxpt#7u(BSCk_`ob%Ci%CR5RCt{2TkUQeISe#KXq|t2|F=DI$aU6<1Bg`Xpg2yOvvUB) z(oo{py0=@S(P%UpjYgxruu4a)Zz=+A6Z|?vSFVNl(M=+b4>9Z)7<*Y5%1cN5s*JvM{a7K5EzR_TtxwJWei@Y@d1duwNB z*7e(FfPTjj|E)TpNWjNe{f?Y~djv$fVx$jMu_WIivZ#o z<}eWp`t38^XhORYKL^hw$p(Q&PUy#;KK(_vv|LZv{$CNSwF5M%^~br^b3hRAgMd>62;BCWo;^^~Q)Z%e5_kw$C$Q*u=lOAGWRB^PBqQHG zL-42{>EZybX>uL)E`h)S@PO-=-a$BE%(+g0)`jHbP863IM<7u~{=|@6z3Qj(p_hP! z`aU_**e9?^Zp*jGo!37IO#cjl_?7bz;z69vJm-NI4B1XVD_NpDg?{>uj+q*&%PWG^ z5`@kwo@x_CB?tzR<@hC+>JeZ#Ad>`MGUSJmdTs6>q2I^dTBDqRF9;Hyn1bYVKzW+@ zAkbK_N}?C%RM1KXh&NJ8c*T(4gY}K_f%|mmtNl7t9(YBtYA;r^vJbPkI7+#}k4~Uu z2?6j7hjDvYoI_G2zzc@LG{c6Nx^#1*yEN~BZv@NsC}K2=;U;JdD$c_Q+t(LL4-;&b z>9$tHTRO_N!zVyc83rB4T|buf&)~cD_A}?l?*u7(@pekpw;nDZg)9SdOo28YYxyjL z6D9b?RyQtAkUjxE&|tn#{eyBYsoyJtY!dbej+2-Vp;mm5dmvN9d|{!p4EX#%Df1bp zsNz9{Z}<;yX7U1jCxCro0}|?SML$pD;sIp6hkgRVi`OU0lpU*SB@r%&TbyyA9G|c} z^7xKNjR1C($%f(ytmFW|1G%Nc(nEcVAad2;T$xP;P7ql<=|DLZv}A;oXcUPhJQ3V5 zqscv&;fMeUn`iq7LNx~f5^Fak>(Lv&8E_%UI*=m%;uLy3$VnKb1S&Z=V9^-y(l#Fs zNLGQ@9e5%s7qZt;rXRwby)Az}jM5IYBFfXynG07XbaTcO=8U2$=;8*%9)8h459DEh zi*bmYp?ZhJ1_>ymZ0q@QN_-yYpI&g_?c6~OGiaoyGJb{Q>R>pyxB>qn5k(YQ z&yOK?hVoZK20k4E^75AQK(M*mZk#Q<1RL;l8 zo&->j7V99t^;S;}N;iZqp2`M$rph8HqJJEv^y5)4!PGd_5ZXnvDX>WL?1wpSkl5cK zpwb;Mzp=$23u2Y?i+hg*%2IRy!k9PXqta5lIh*S;LmdlzhowL%)sS|BNPnEb`;UqP z^ac_LRH(c?kk)}Dro=GIMRV;A&;>kAIB22MR_PXl(pUmM#;I;z^6 zIc1*=Unscd{ZDhw&y+3vOm}?yIm8X%X zIksMWn)3w9BzybcG5Px#Fi=cXMF6nqSU?Z}004k!K)9G#pnzByP!M>~cu1H)=;-+1czEEz0LZ8S00000 z000000F;N0(*OVf5MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|AW1|)R9J=Wm)mZ` zFbIZ&Y_c?~#QVSP0NXhk@T98iE)?W4o%o#UMP}U__ht;V@_f4N7Y<-HNC^{Y0q9fI1}g{bD^Lk@xrpE5rIa;e zC>{D|g>rHZ6H@w(Pdi1yg?wgCtm2)VrN zqxp324(j1iAo+v?P!I1ODDlB9I*8X4Da34%hcwR{rYkUsxbXMFYw>yj#XoppCvmAe> zNkl`|#}5Qbfy1c6P6B^q$J-2d;|BsUgaUUe93?0wh;uajZu~%?gyayC z(OHGv1Q0^@uwi{p@5Y}CL=4`jc}@%xAXhWgExH#!5UAU;iYKlcI1q?LA^dqpWEZMi zbRG{ez7#-MNbCtLwnzJ}Kg911l4d2oiz)Gr+_P(%*|+6q0#1)P5iv?P)z zper4Y1(3t8fRRAmpEQ#T?-Xz*Q29&my-0*!!3J%IPXs2OJ>uB$fk2>;^3Pi|w*{OD z)Q1Go{CdrV>y=2F0*(dh3Nd+Ow?ZRe(O(Q6_(55Yofq`MJOm*EOhc&6y#rJv3VLt*=pF+hN@Tx-^KK zEWIh8)VMHL0v5c$VbRokhgsOS*f^vfCiPtJFuL|~@_a3%9(}-e+ON9_i&Y@}K_)@TRU9NCicF?4>~W+s02gN6znXM4MT4*;*-Yzp!|R{tpxC6#tLx!yF^SV~^}` enBi;x-2MVjZ!UE~D+*-*0000UN&X5)vt7GCN{{|w|crbhIkx*J9%&3 zZ3B^3%?5`sZG$zc-ZNKZ9>3w5Zk76G>EvuLhsz7~o}5>TX**p!`xk^XP7Oz zvNE&C|rTT~cS-tS;%79{=EBypnkb zukhjZFB^AdSFB{>Jz0F~YC)!uaMgl$QtLWJI6F08Wmu?XHBPwKxGVWY$I6QOb#vJM zoP2kJ@3O43&8Dh9fWk{w$E|5FTAK&b}RLx)&pi|zr6F;_3LNn z@S3vCwq3uct>=!N!~=`sJf010Wd}@rgV*J) zv@3Vam5|z-XYFPseU!6X}VD#~r1fS7Uef0*}4Xjfo z6WsUKYzpmkyyKi=`Isk*&p~b4ksm1wBOAh=p8e3PR(bcwPv#Rxgm1jvW;HP-p~(3t zNB5Z(J}>IGH-%Om{j{=YooC#k(~eAL8x5F+uErT33QQE9UaLR7)i)+@kIoK1p3^1g z7ajcMtc+I@9 z>Cg2;8K!!NH_T>VU3l?qPRz755iOw%XBHJ1x7xl|JtI(MRd2kk&UfxM^FN2bGVgoU z&A9f<17I3vP%UwdC`m~yNwrEYN(E93Mg~Skx(0^2hDISqMpnkAR>l_E1{PKZ2F0v3 ghfp-+=BH$)RpQpb6mg^usDZ)L)z4*}6H`JH0L>G3(*OVf diff --git a/graphics/pokemon/swalot/overworldf.png b/graphics/pokemon/swalot/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..0d0850d8aedcc439c1b24019518c47348ce2cdc9 GIT binary patch literal 971 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNU@|l`Z_W&Z0zU$lgJ8^O!f%! zWnidMV_;}#VPN7Zx~ZBrIq+ zuw%jvpjb!7f{KU<2_6+UGBOrONUUhEc(KF5!Xtn=<`PJnG0EHAg`tC0)&t04FY)ws zWq-!V%ciWh`ju`CP)Hy-(XR|hD?l-jVqi$x`3~p~rdCfE#}JR>Zzu1~yKNxSs@dQW zrfslB)qCcO%;Ps))2&k9ES;R~<#2hS-jma+-MrpaZR_rSVwk(D^bE5_xBRLfCyQ@gEyxrSu3GR;YF(!YXQ$??3=6fa#tHWtcO{?bSXoiOZVua@lkZOOU6ysW z*;MsM@Tata`h3pHkE-*2f3@4r_BrnMg%=geZl!+Idcf@Lmv{cU{_GrHQ?}W*>-V(v z+_95*AaU+QRPKyw;nR%9$q8&b+88U>f8AlYAh*MEzu)KgbKVPY=TUvl8n-c7;>CaP|ulP!T=gKwDO?y7=UhkF1v!Si*fQfJLy1bQk<&L=$QhSpe z_qH80db*Y|*!5K!&&86t^K>iA?6g;2zwq=xQjnp{^U8C=8`cQx?_43Y_}|qUCWap4 z;tltkOm{4dv(qejw4|YHaYZd_fZ?mtM;MGg9+TiRdaAG9AiIHes$_!u-kMFJosM^$ zQ!F3zWbrwuO*`@0Y@-3Q(A7BOLxG9H(`)soxBAB9?a|rc$8);m{Gx-OymeZtl$p%7 zG&>rWe4N33!|UATuE|N-R~Vw^UKZ^T5_>8v>CS!hTcgNf2CtbHHvPGND8p3m@P^s! zs|zol&54<|CZZ*j;mo2U<5t_(s%HeMtc;h{`Oe*D{^#&l=6$ca8P|S!kN`}VswJ)w zB`Jv|saDBFsX&Us$iT=**T7KM&?v;n$jaE%%Gg5Nz{1MFpqRDh5Q>J}{FKbJO57Tl TB97DnH86O(`njxgN@xNAL}!w5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/tangrowth/overworldf.png b/graphics/pokemon/tangrowth/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ab26c6d8ca394d0c57f1f2a592388a0ba21c59 GIT binary patch literal 1107 zcmV-Z1g!gsP)004R> z004l5008;`004mK004C_008P=0026d000+od=q6bm>F^>u9A2{Hb_-me0&P+LHkuNyk@`p$}Y_Zq+E zE)VLnD(98L;6CGqKg3Cfi>yE5k)W*bz)OX%xM=7vVJtjUu6NuQmK6MmCqBG;hzo_U zxHS1ur#qhSxSbe3bBC|5FrJ?wFgN?MWgdAxBS_o6C*m$SKFIn2jOyog z2Bm%9T9t{PpU|&bq8tSV?*bgS-?C2eripe%McV__;~W!7`qH-F7^^ddX29c@#`WNXzy~sxDJf29^oh~Kg0v}sqYwN%vl$0<0kq=oAjL6bAVgbR0k!OIzY5A!m<>d1Hq8m~Vq%$lf2=f%H|N_0T}Z&7d-F z5b=xF@vX-T@bd8jg}eZT1~4ZjR#mp&TipI)${k!Y-#qkBs)P+dF8ZriEoOY3ue6H9 z{vba!@Hzf^!+#mC24wu;af8boC_Cj|;Nby}&;aBXuuF`f0_HO3K0ip$xEBzkLnSnT zx!n?D2|Q$o+la+^G~k5q0&`Ai0Q2=q+G~50i~9>N@suAMum<--d6%0-bbQW9nzh&@ zG>~vBpkFHSh*IwFG-x2<=Flb#R&+Us2Z%735F3YI%P35sKmQzr{KE9D5Xg^`-;5~z Zv!1TD4y3+nPksOZ002ovPDHLkV1irs!R`P6 delta 394 zcmV;50d@Yp1DFGl7=Hu<0002CwraKj0016POjJdH(BODb5b%Hy&|m=AcmMzZ0Qk^g z$fz**(3t4x_%8{*9RL6UHAzH4RCt{2)3I)YFc1ddvnuZx2Rd_<2MDRMH&S=n${}l2 z#oZ$Xzd_R{;CTz1&&WrkE~&(AAIIH~B?GY3QcEp$GbI%NV1KR;pc1w(koF-huIf)- z2>W+f{K=5g01@WV&y9j^TZ5%eWuS@|vziE&eM9u^`w!V2jTO_U{sxO7O(E~!WfJ_Hk|i$m2iek(IZKf(JwG>#M+R25NkuN osX;anlwlpdKbfB{{I~T3hER2Yv_Y4n00000NkvXXt^-0~f>3?8!vFvP diff --git a/graphics/pokemon/torchic/overworld_normal.pal b/graphics/pokemon/torchic/overworld_normal.pal index 3fd0cd45f4..37aee0ac45 100644 --- a/graphics/pokemon/torchic/overworld_normal.pal +++ b/graphics/pokemon/torchic/overworld_normal.pal @@ -11,7 +11,7 @@ JASC-PAL 208 96 0 248 208 96 232 232 248 -0 0 0 +99 99 99 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/torchic/overworld_shiny.pal b/graphics/pokemon/torchic/overworld_shiny.pal index 41312ee0f9..bca621cfcb 100644 --- a/graphics/pokemon/torchic/overworld_shiny.pal +++ b/graphics/pokemon/torchic/overworld_shiny.pal @@ -11,7 +11,7 @@ JASC-PAL 200 168 48 248 208 152 232 232 248 -0 0 0 +99 99 99 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/torchic/overworldf.png b/graphics/pokemon/torchic/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..db5074b0019c5572c307ba9b5b52062dcd0907a7 GIT binary patch literal 442 zcmV;r0Y(0aP)Px#9#BkFMS#%Ycu)}d&|sjDQ0S--0002+fDq7N0Qk^g=;-)(X0#0e00Bx#L_t(o zh3%F>cEd0TM2!$gx&MWOP+q$UL!Om(#caIzAO=V*UstJADwRs5QfZ5bjv`L;^MDMu zhR;s|PVimYV`)p=B;@Q7F>lN;AMqDBxEWN&4I+NgI==OI0bV{{ppX}!&;aJ7#Hz~nyv6M&rrg16=EXz*q)ONT z<{u&1K;ECH=OZmK*kRqH@M7!vQzE_9v<)r4M1)IyTk}8U@mj+ z^Mmw^djT;zR6+xo+goBRfr|`r8?iW#2AuF+V9p5*V7_iiyKQfBaev`UJmtp*tigRz z-sNTy9iMZOW-T@e4J6zOtUq`>qLlkR4H`(eIkX9b6}KL;Vd kF#RY5@}uMrBTE0QCzFm2oM*H#<^TWy07*qoM6N<$f@{LPmH+?% literal 0 HcmV?d00001 diff --git a/graphics/pokemon/toxicroak/overworldf.png b/graphics/pokemon/toxicroak/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..16c53a9b7536ab34eb60d51a3caff41e4ed4457d GIT binary patch literal 726 zcmV;{0xA88P)004R> z004l5008;`004mK004C_008P=0026d000+od=jp<$Ex{@M6{kFQB}QD=&q$Dc1s~=Ng}nwu zd`RP%Mm?P88Gq+FL*VEa81lRbbX;EHV<*L{+*26w>X38pCW!c33gEL`XH5Uu%n!n^=220kfqv1g*a-rzi!(EhP6GlyVdW%B z%}X3{{64!HJ3*1_ak=Gv`ziZ}_1=$QrakYWgW{6cVK!w=RO{;-a(W6rh|; zz6j*nVI45-^M1BCpEP)r zBqTyYLI3~&jg5`Z&(EKH8TPv+YHDgTB^ma+AL8Qnjbbc)+}h&+00R$6L_t(|ob6S; za?~&owntUElkMwhEFV-?*p?1vNE+Mg2e`yLL(L=b4h$_dElg&}TX0bNp;)bc?1V{x z2?a&Au|CV%Z@*pbI!T`F$%1WugCA>Y8COyU?3Vw=nzHsQF`{%h-Qw`T5uxif+}Jm_ zzgT@Bl&T^ZP8-Gr9_!>@%UiYHwUS%*A>}4Gt>ZdVO8I4CM(iw>BZ700{+g*&u0rCl z%3AcCX9L}a6&WSLdq`Sx7~&C#M~fT8D|a@#;0~-`OWAG95rT+0cF@ z*y3cdLCl>}mER5D638Ni=Ls`lLIFUFrqsIvAQZ8YQbq#$z+&UKn%uB(6?y4n=0s!g`PBGJWX8!A z5ke6Y30YQjfx${3>?0I!vFC(S9>5YQnf!UB`d0IbY07es4^7Hi|dMRkCR||)IbJ9TGY zNlyugQ?_SGtcYG*s>&&{0y_2jrY#{zIG|N@Kv$FkC&=dcQ~DTSSGogyx3 zUY^=-)iyd1R*}DC)VNcgUYr_Hgx00B5nc$WPpRvU`Jzab&*s_t7o=Qw7jrXE(nD)l zMS%>*qE3hXkeKZl2`pZjBneAjiB|2G911&h8==#h2C?sX!HWF)I8d%O)P_QLfq?Ov zA*ZA-lOa{7c@DGL;8obrK97lDMV?^bcdfkudI`IA7b2QA>)|c;Cmr_nYV5}~EAj-M zlSkq5$MB004R> z004l5008;`004mK004C_008P=0026d000+od=WsJLupdtCqk01#tgPIdqQ03ZMW03ZMW z00000003gS?)m@#0^dnQK~z|U?U(Cv>mUq-g9IiQ`~6?{tOQAH5XfnJ{zWsbGyW9V z6(Gl#%QwF9jc@#Agz$3?7J~l!6(1&eTyuz~4rZKV

9)>rZ)<7$kUHbC{+}Fyow3 zBpIJ#O2z~(FRc6-3O%m!P@jo|Ip?%wEl|vhZNTI49Y%u3tHmfq9w_wqaxJ4@7rQI!>KJ z%BoIgu$sV>qaa$IjL;hKQGmx`fZzI*AJ#dfI>6Hb_XbcVl7l8j?VlPGjtwsJi#Yu! zlZ8F*`O#o0%-cazB{sO#sAPd@=wQr6T&Vi=B7*j3fO>uqz{T^f#GQe#$7E_;q*F+T zV%xx&bLnw!fymqT1~zK>!C)s)COOV<^w%1!Wn86Oqr|oW;Zi4qL!ivRl)>c^w&Nk* zT24&@*A7#63bhJ4-b;i)92Llu17tW510!Ap7KKYWWlciMw{{oS_N4tj^{*WsSAkjE zvp#c-H2_C1F5RNzb%_^5*#X_R8{St~idzKA$4|LTk>P8T47-zpZ>0%Y91}dZDL(Y$ zdt81j;5M*IHChbqxcyS1BW$9dZHJ&y{aak#Hg%FPx#Fi=cXMbP-TXdo!aNPy_TaPWAb_}~b@fG7X}06<_ckU$_{s1S(YAV8R4XxPA@ zprGjJ`1+C0S^xk55MyCZb^rhXAOHXWAOHXW000000AjiB`Tzg|xJg7oR9J=WmhFbPd6{{h9VU?NMgLo`oxFNAi224L-2uv4~5N7`Sl_~uX{*=q|tq< zugWiX@NyAh@LRyZ-=n>@%KI$1O`y!L77>w!$?XL*un!*tV%N?)$by^dRrtjs;<7B# zAl5g{{(x7oolAlyIAS{wURjY^x#-g^0H<5*kz>d&?vT$Ao4EQ=s1k1wiiF9K zmN^1|bFc(~i=41W*T_*)1B^O^AZcPF7kv_*-9U6|k#LC=);YoKe2yry;by=sioapT ziPD>taM=@FxM21sF7XbX)0+4)`69(bT;(dzfi`ahIgQ{Be%Y%yT^F>HmN;Bj(KYMXmzLD|{A-n*`9vy+GwEPrUO4 zN*sj7BX*cT!s7rz;6s1*B4LqJ(nHRNF@-+qv3W@6Jb4jO6pdIau*y|o|8Pl>Y=(xL z4S*i~K56}fCnVvRadSOMSHg(VNdh}3+d?3h8TfX^Wb1A=ezU@GrOpf2s4>`ewh z8|{OhD?H%o1{-Z49waV&44D8(xcGOegCrHQ04vZhBs_allYbU%9)%y9qHrZTLiRD| z&6fti3e@wMgMFLSKei{q!>3rpv&;8=+$LA50J3j;FOM_Y?aJ&9ujP}ivpCh2vkM_T gIP_?g@wNY8Kh=3mgqPs$(EtDd07*qoM6N<$g1Nhru>b%7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vileplume/overworldf.png b/graphics/pokemon/vileplume/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf8512f7dc649cdc864e72cf0d56bb2c5dc6fb8 GIT binary patch literal 655 zcmV;A0&x9_P)004R> z004l5008;`004mK004C_008P=0026d000+od=Te{fe4Zk-^(&~*BQrjt53>s^6`w{6v`RjXF5 zTD5AGR6yy+@3^oI9`O(JLr5{kkWx&hWW=EWkKk?tT`vAP$0^G8 z#DD;%{FNs7r}>!9Bm;gR;0W!cjyPqVED5OBG{Ha3*MJ051W-E(M|Bs!>x&09R+?5(eusN>o$pv!Onx;QuA=i639pyO4hIo*R*hpp|e&rv5C z$9sa8>sxS@w!`wmt@TNr`ma&o?kBeluFB}N_HWG3t7g!3okjyMys-dh2Ps?`8}P!7 zEhr!X5aleO%dtbkRb@YcA8zb$p}RkXSP%Jy8v*bXSeyk^Ufcy1Vk|0q$R6Ct-=-Ge z`(I>J;etKR2TdiOV8E%icsha+=NC=kKfgc0F24_={e&2w-T{2x?i!T)5c&q*cuXjG pmVSetB6kCZ_uDV{ImN2~tuKZT8u{@^MvDLd002ovPDHLkV1ns&BDVkl literal 0 HcmV?d00001 diff --git a/graphics/pokemon/weavile/overworldf.png b/graphics/pokemon/weavile/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..4e844665065db1649c2f7f0fec4650ad316c6bdd GIT binary patch literal 728 zcmV;}0w?{6P)004R> z004l5008;`004mK004C_008P=0026d000+od=o5pKEeR~*#Q*=hXM-=(6AP0lZ67*j#!06O z#1;a@!*JPUmtA(*Wq-z!+6R0HaL7NilyWI0yE!6Gl)w{FC*RU^a;T%CM$p*7ODfSDLHGoU}A$Q<)Dn3c0FV6xv_!^2L~~L~axL zoNQT$W9<-4LhtdVzLa^<_gtljulhz+h$eA1aKdR>JaOf;BzfLIz_BZ0HqNZa^&VgK z)ygHgJ#@-dQXS!<&q3cyJVTxG%K3e60xM`L?i8GJ6d1hP!;ST0E+gdGBOP4z-LO0s zFVq~7kgK}7d~g>xrnrj_e7h~hX&i9OiAJ8Vw)#vwHg1uK6W7i7SfYsU1-9#|wSjNm+kmuMB;rIe%7hM`@ZE5DfzOM=aqi)$Fv~R6 zQAC^(KIghev?(TyrJK(f(z%!Om>$S5meO{JI6O$0S*ST;zrY36!3~w&0t6htbA;Dj z(%-ul{=$DG9&IMT;^~Vxqq}gskbX5%X#4EEeNBEAZ%*Jc_%EwxT)BYzpU z2{f))kn@?poYPHy+rUo*pozbX+kl~g1~PstfFBavKIb}tRl}2n8CL;MHw2#`H)!TM zt`dmeI2=GcNtklY)->gW*H$t27oE4S?b!mABmr5!FbqC3E*L!ej*bS;_7n!3m{|iN z?EU>FNv*BbD1dRITH}B^z*@jxGhin~ECX<0%V`Ze)IWN_S%2~fnjqTn>xgPT5U|U@ zJ(h9$quztt0tj(ipao3&<1^?2$C?j63D6)0i`*rW_Q!3UEKJ$;m-PWHtqxUvmtRu= O0000l*!(QU)>&pI&k(W)G|7FBhfr(Y}^%b5j zjv*e$-(GesI%L4Z8jzlNjjjEi@&krLDff9c@LRMomox|)d|{d!x0~y&$Z5&jugfmH zlk~hlBdjCc_I2d{<;RkzZaiUO%-^8(cB9AcAWm@xgTq@KQ)7YskSm^V{De_!j;*2UkoH;Zd{g;)JIFJUfPZj*0sZ#M7r*^Su|`%N!@e*2~R zfzG};dk<_Xl&yX|_4ZHh+}hon7`UGN4bJB4m%cy$%OloP)8^fke(|DqPWfTJyXUr- zY|p-M{@K%ATW?QHwr7sk`036ZTrU01dS8ykr|{R@JA*2J6sgQel>|nOYKdz^NlIc# zs#S7PDv)9@GB7gIH89jQGzu{?vNATcGBnjTu&^>P2>32lkD?(rKP5A*61N7$Rf`S- PH86O(`njxgN@xNAv?B8n diff --git a/graphics/pokemon/wobbuffet/overworld_normal.pal b/graphics/pokemon/wobbuffet/overworld_normal.pal index 208392f976..393b4da868 100644 --- a/graphics/pokemon/wobbuffet/overworld_normal.pal +++ b/graphics/pokemon/wobbuffet/overworld_normal.pal @@ -10,8 +10,8 @@ JASC-PAL 32 48 64 56 80 112 168 184 208 -0 0 0 -0 0 0 +208 56 24 +136 24 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/wobbuffet/overworld_shiny.pal b/graphics/pokemon/wobbuffet/overworld_shiny.pal index 126ef8e8c9..4db78ef302 100644 --- a/graphics/pokemon/wobbuffet/overworld_shiny.pal +++ b/graphics/pokemon/wobbuffet/overworld_shiny.pal @@ -10,8 +10,8 @@ JASC-PAL 32 48 64 56 80 112 168 184 208 -0 0 0 -0 0 0 +208 56 24 +136 24 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/wobbuffet/overworldf.png b/graphics/pokemon/wobbuffet/overworldf.png new file mode 100644 index 0000000000000000000000000000000000000000..36dee1d36cd70a92cc77351103f1ad244d6fe8c8 GIT binary patch literal 564 zcmV-40?Yl0P)Px#Ay7TdpdO$Ndy^XXhu)S@oR;^mKYSpTLQ>1m1NBw_sKG80fpk$8Y33D6^LcX_3$ydzs z9SoS}KrqjJhx6PY@D1(?BK{uGbvV!WodW|AzY>7b=Z48K7;^PB7%;;}4kP|GATStm zZYoCo1D=BbBd&tRv;Uk&yfW$ea%#m6<&PF{)SoPZB=9!;x}uT~1Z*;J#<|~quXpFV076_B zr~!li_zs%Du;jx}0yK!hBsWP8`{Oo7CZ??V%lZJx6b`#Gc{C#c0000BIPs%k!v_V2iUf^>7cYKzOgOQj;DSZL0*%?z9|5HWk`w*PfV2V>11ScEq@C}6 z0Zp{=ba4!cXni})d(vS84wqKP#FGEq{0~&_Etqy%?|e>1e$dxh{VhqWw+5{Y(VFVD z6i9JRd@29)?-yy~^S1oOlU#o^nLo-c=Jwa&|GfL<*#k0doli6MB=jpq9=I~|7e%(L zugH%5`Si!pTkAi}=C;_Ncc}Q@FaPHTg1664d410G`4ab5?l~6UmT&eGXQ&LhplD=r zw!W#`ty_HO+VfRCxn8%U3$+v0Tbkai*2;fyTJ>p}PvV}ViFR|!6i;rJuSwzvK9l~A zL+_`++Jogaa9FLt1-c5eOm~=b>M7eLeyo@vd$hXQuAY&1 tlC%TU`Nn+j?iag1{#aLbEZ|r6UnY)~T$S!~_4k6p)6><@Wt~$(69CIB!eamc literal 0 HcmV?d00001 diff --git a/graphics/pokemon/xatu/overworld.png b/graphics/pokemon/xatu/overworld.png index 223ef93098261f4d27282162ed130237682e4deb..a1a6ae917632c77c4a4ff593440a02dd52406812 100644 GIT binary patch delta 605 zcmV-j0;2ur1zrH{%+W9L?sI&1=qdu= z#oJHvUBBS*bKD+rjsKknT%~~m-zZ^g>$OLnLUampJ!j=*|*NMo{e}KVUX@)eVItgjTFqtK9A#U4nQ3a z+%8}1*ADC!Vt<7WLxF>f1_grGDNiLdJ>xd18?jXaA9+qgyr{frJY}myv##9d@dR1g zc#|t6JnMiT59D7KG^$s8eIz;f;orD_Pbndulu*1Po>C7@5ID+9p9&|)_C5-Wez46xlFyE)oHlI@t}I?dz`d*D?G?5 zT!z);8drT$r@|ema7-vTpuo}uD}0z&D@?G)gZ_1nO^(x71c&ru3)HyVCS3X}QQ<-V zI&TCg_#%Q!>Hqf5#g2E|ld=#Yv5e_-f)OyTHlI=5rbkKQkV>XYsmAqKi#K rhTu`+heAH``xnO7UEW*7Z9itOVbUUlA?q8w00000NkvXXu0mjf_U$no delta 631 zcmV--0*L+11?L5jBq<0Dy!50Qvv`0D$NK0Cg__0P0@=06Lcd02gq4 z6}kbDE?a*pNklv_#`HjYNfWs>Yr3 zFiAe|zSOT=siy$}X&e1zA}Lo|I0yA<7$)@wNWzZm_Qjt#)JKT(6($S@dlLf+gselJ zN=SQ$$0TXwGz)Iea~kSddJA(!<^S zo%?^366#3^#VhJ5&5#Cx!(LhsjvtPk@hVeDI3{?sCz3Q9WXMJAW)r$Q_vw6ihoEm} zgh2<`eQXdWT)EV1`*`DV;522&a|J9Ja(F`Eh8;EO62gRgp3a9`_E?`TAxi7D0e~#8 zr=+q7cU)7T0XwJbuoMPG9eaGowOvXB$31_>T0Nfqj_2-VMrP~p6C84STtr0EpL9SR9BSh|B1-cL*P z=XlUR&#}pI`ZD8?o^^p5H~kW&uM!m=^w0B#ae~jxxRkzcZ=Ch|b%_-Jp;@_FAN50z z>T7%n_M>ia^t|RA)+0}?hwf3m?2?$G)6gMgl=#lbSKj}@`g+Q?P)004R> z004l5008;`004mK004C_008P=0026d000+od=^ zMB_A#M1^yz#+~ypNj~qs)URBrrvU+J8~tS>DOXxJ2lZ(fCiMnL!j9|q#h*CTM~L$k zCJY9969Wo_tV5nkNPCCJBx&R{3vSPI8tPf(S?VcUCDL`_KCdUp(#o4$A>r8s?sh}} zdB&h}#migL!`=Ly`;-#uNeIO&>M6~T27$v~S`UsNj-2r-Q%E=_c(f;yG#g~dMeJr1 zx;yvje0YbTZ)Su+2iSdV5GGu?)NA{A<8k0LWyf;`EE#fmLg0oSHR%$$L%ZEU%}evIuuvQ=kDmr|Ym321Olve8;t2N(09|##%j|{f_7EWJYG|?-Lwy zrznsgt(?<#)Nao+d^LEI^Jx9#%L7z6KBzvd#Yu}_g%7d{U;Kr0;tUskmZa$v#~lg@ zFj%^S72Z!v^yhfcKhLqrar!djke+pc8aMqCrLPhd9`w)ihH-+=%(#@kZ*QFS`gMsE z|DjpAS|9a~>T7%n_M>ia^t|RA)+0}?hwf3m?2?$G)6gMgl=#lbSKj}@`g+QlJhBw0mGr-s_3)^gA80c?CZ$F^3WHT8<|=* z9rCM#vQ5hea&YO0Uu81Ff&v{>J?Jfi0oW`yVB5mb?9JBSf9`@^g!fM!MhSiCpaCm1 z+90e$+Rc9dS^zM<4qx?oh;qdEE;4?d1eQt%K);X90Ndn(3@BGx888g?2EjR)a@8{| zX6C^rNE{vaO@HCwu&Oc{aDG`DC<6q#@mD=?P*)&)SRp@1nc`w@Ig*m0X%iT~R#!ns z)PNB4XR12of5^e=S&O=ZY`KUBRPCVkhhbdT$PRWyZcp7gwkamcz98kT0 z!dCsOuGKhb751+QDD%Hc0UDz>5Icwgq^7T2@GMyNf5QMC;b~yGg~Aw-BLgd{4w`Nl z=nB(41G2jPM!aDlAPAo0ek+FZbnAcN`-`^YH{uJf6RQ#xfFesE00000NkvXXu0mjf DGTH3z delta 546 zcmV+-0^R+b1-=E4Bq<0Dy!50Qvv`0D$NK0Cg__0P0@=06Lcd02gq4 z6}kbDE?PJO0ZBwbR9J=Wm)ml~APht;A(#LE<4OV(7*?clrfDBg#z{QO>|8>>M%;^O9u^Dq0t6m9nx<0`_}@1@pbsB&qI_W z#&?nN>m;yLIsp28bOzWa7i2)W(#n8gur~VKFlgHbLU(xNrIs2ZvRa$$<0A z(m)v?(2c+9frGjN;lm2~LCO>tbIXyG3{9KB__ewUI-&-In14T0)hR~~R?k}09c0Tz zJfLa^ttThY*S%{3EI(3)EF2VS{N990fib~ zFff$rGcdf0XJD|J&cGmEP$RmF5h!60;1l9H7IbWj}d8(n&vePvv>Ak-sjxtWM*seGHOk>Upe^4BCJC?D}JM z@y?=`E7q5tjFeh%1UgKBNJ9x%Nl4XtX_0kipM0N^v3mxtxvt~fUuzd$3w=u(PQ`wKVU)|F4-1e_b{EgC{`d0>C zFTB}#BNkp{OO(Bo_wDy}riPEDKUST0o}zrLeB#H~DjPzq7=G23u-#A-PjT3J=~P4F z26K*c2dAu_muP6rZ|3;u#g6=6!tCv#Q%^R0K7GkSQsF}H{#T97yOxvxfkdcfCEWJ>2*dctzJIM)G-||0VWoC5zAoG2t#Hq_`|F^E!zt!h|#C-n* VF5gE&%f5gTg{P~Z%Q~loCIDSw9>V|t literal 0 HcmV?d00001 diff --git a/include/pokemon.h b/include/pokemon.h index 4dbd86a391..14288ddee7 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -457,9 +457,12 @@ struct SpeciesInfo /*0xC4*/ /* 0x94 */ const struct FormChange *formChangeTable; #if OW_POKEMON_OBJECT_EVENTS /* 0x98 */ struct ObjectEventGraphicsInfo overworldData; + struct ObjectEventGraphicsInfo overworldDataFemale; #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE /* 0xBC */ const void* overworldPalette; + const void* overworldPaletteFemale; /* 0xC0 */ const void* overworldShinyPalette; + const void* overworldShinyPaletteFemale; #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS }; diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index 7855bf8d21..5e9a4d7532 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -744,6 +744,9 @@ $(POKEMONGFXDIR)/ivysaur/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/venusaur/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/venusaur/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/charmander/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -771,6 +774,9 @@ $(POKEMONGFXDIR)/metapod/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/butterfree/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/butterfree/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/weedle/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -792,9 +798,15 @@ $(POKEMONGFXDIR)/pidgeot/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/rattata/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/rattata/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/raticate/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/raticate/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/spearow/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -810,9 +822,15 @@ $(POKEMONGFXDIR)/arbok/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/pikachu/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/pikachu/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/raichu/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/raichu/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/sandshrew/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -858,18 +876,30 @@ $(POKEMONGFXDIR)/wigglytuff/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/zubat/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/zubat/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/golbat/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/golbat/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/oddish/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/gloom/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gloom/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/vileplume/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/vileplume/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/paras/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -927,9 +957,15 @@ $(POKEMONGFXDIR)/abra/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/kadabra/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/kadabra/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/alakazam/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/alakazam/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/machop/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -987,9 +1023,15 @@ $(POKEMONGFXDIR)/farfetchd/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/doduo/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/doduo/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/dodrio/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/dodrio/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/seel/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1026,6 +1068,9 @@ $(POKEMONGFXDIR)/drowzee/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/hypno/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/hypno/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/krabby/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1068,9 +1113,15 @@ $(POKEMONGFXDIR)/weezing/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/rhyhorn/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/rhyhorn/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/rhydon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/rhydon/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/chansey/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1089,9 +1140,15 @@ $(POKEMONGFXDIR)/seadra/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/goldeen/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/goldeen/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/seaking/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/seaking/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/staryu/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1104,6 +1161,9 @@ $(POKEMONGFXDIR)/mr_mime/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/scyther/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/scyther/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/jynx/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1122,9 +1182,15 @@ $(POKEMONGFXDIR)/tauros/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/magikarp/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/magikarp/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/gyarados/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gyarados/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/lapras/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1134,6 +1200,9 @@ $(POKEMONGFXDIR)/ditto/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/eevee/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/eevee/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/vaporeon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1197,6 +1266,9 @@ $(POKEMONGFXDIR)/bayleef/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/meganium/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/meganium/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/cyndaquil/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1230,9 +1302,15 @@ $(POKEMONGFXDIR)/noctowl/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/ledyba/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/ledyba/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/ledian/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/ledian/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/spinarak/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1269,6 +1347,9 @@ $(POKEMONGFXDIR)/natu/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/xatu/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/xatu/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/mareep/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1290,9 +1371,15 @@ $(POKEMONGFXDIR)/azumarill/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/sudowoodo/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/sudowoodo/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/politoed/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/politoed/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/hoppip/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1305,6 +1392,9 @@ $(POKEMONGFXDIR)/jumpluff/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/aipom/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/aipom/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/sunkern/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1317,9 +1407,15 @@ $(POKEMONGFXDIR)/yanma/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/wooper/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/wooper/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/quagsire/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/quagsire/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/espeon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1329,6 +1425,9 @@ $(POKEMONGFXDIR)/umbreon/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/murkrow/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/murkrow/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/slowking/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1422,9 +1521,15 @@ $(POKEMONGFXDIR)/unown/question_mark/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/wobbuffet/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/wobbuffet/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/girafarig/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/girafarig/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/pineco/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1437,9 +1542,15 @@ $(POKEMONGFXDIR)/dunsparce/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/gligar/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gligar/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/steelix/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 +$(POKEMONGFXDIR)/steelix/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/snubbull/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1452,21 +1563,33 @@ $(POKEMONGFXDIR)/qwilfish/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/scizor/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/scizor/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/shuckle/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/heracross/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/heracross/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/sneasel/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/sneasel/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/teddiursa/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/ursaring/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/ursaring/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/slugma/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1479,6 +1602,9 @@ $(POKEMONGFXDIR)/swinub/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/piloswine/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/piloswine/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/corsola/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1488,6 +1614,9 @@ $(POKEMONGFXDIR)/remoraid/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/octillery/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/octillery/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/delibird/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1503,6 +1632,9 @@ $(POKEMONGFXDIR)/houndour/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/houndoom/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/houndoom/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/kingdra/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1512,6 +1644,9 @@ $(POKEMONGFXDIR)/phanpy/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/donphan/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/donphan/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/porygon2/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1581,12 +1716,21 @@ $(POKEMONGFXDIR)/sceptile/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/torchic/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/torchic/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/combusken/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/combusken/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/blaziken/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/blaziken/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/mudkip/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1617,12 +1761,18 @@ $(POKEMONGFXDIR)/silcoon/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/beautifly/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/beautifly/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/cascoon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/dustox/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/dustox/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/lotad/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1632,15 +1782,24 @@ $(POKEMONGFXDIR)/lombre/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/ludicolo/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/ludicolo/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/seedot/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/nuzleaf/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/nuzleaf/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/shiftry/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/shiftry/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/taillow/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1737,9 +1896,15 @@ $(POKEMONGFXDIR)/aggron/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/meditite/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/meditite/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/medicham/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/medicham/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/electrike/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1761,12 +1926,21 @@ $(POKEMONGFXDIR)/illumise/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/roselia/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/roselia/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/gulpin/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gulpin/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/swalot/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/swalot/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/carvanha/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1782,9 +1956,15 @@ $(POKEMONGFXDIR)/wailord/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/numel/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/numel/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/camerupt/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/camerupt/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/torkoal/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1812,6 +1992,9 @@ $(POKEMONGFXDIR)/cacnea/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/cacturne/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/cacturne/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/swablu/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1866,6 +2049,9 @@ $(POKEMONGFXDIR)/feebas/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/milotic/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/milotic/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/castform/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -1932,6 +2118,9 @@ $(POKEMONGFXDIR)/gorebyss/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/relicanth/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/relicanth/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/luvdisc/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2013,39 +2202,72 @@ $(POKEMONGFXDIR)/empoleon/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/starly/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/starly/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/staravia/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/staravia/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/staraptor/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/staraptor/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/bidoof/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/bidoof/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/bibarel/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/bibarel/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/kricketot/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/kricketot/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/kricketune/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/kricketune/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/shinx/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/shinx/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/luxio/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/luxio/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/luxray/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/luxray/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/budew/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/roserade/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/roserade/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/cranidos/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2070,18 +2292,30 @@ $(POKEMONGFXDIR)/mothim/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/combee/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/combee/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/vespiquen/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/pachirisu/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/pachirisu/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/buizel/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/buizel/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/floatzel/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/floatzel/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/cherubi/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2097,6 +2331,9 @@ $(POKEMONGFXDIR)/gastrodon/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/ambipom/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/ambipom/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/drifloon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2154,12 +2391,21 @@ $(POKEMONGFXDIR)/spiritomb/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/gible/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gible/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/gabite/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/gabite/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/garchomp/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/garchomp/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/munchlax/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2172,9 +2418,15 @@ $(POKEMONGFXDIR)/lucario/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/hippopotas/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/hippopotas/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/hippowdon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/hippowdon/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/skorupi/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2184,30 +2436,51 @@ $(POKEMONGFXDIR)/drapion/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/croagunk/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/croagunk/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/toxicroak/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/toxicroak/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/carnivine/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/finneon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/finneon/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/lumineon/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/lumineon/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/mantyke/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(POKEMONGFXDIR)/snover/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/snover/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/abomasnow/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/abomasnow/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/weavile/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/weavile/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/magnezone/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2217,9 +2490,15 @@ $(POKEMONGFXDIR)/lickilicky/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/rhyperior/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/rhyperior/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/tangrowth/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/tangrowth/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/electivire/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2244,6 +2523,9 @@ $(POKEMONGFXDIR)/gliscor/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/mamoswine/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/mamoswine/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/porygon_z/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2388,6 +2670,9 @@ $(POKEMONGFXDIR)/tranquill/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/unfezant/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/unfezant/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/blitzle/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2601,9 +2886,15 @@ $(POKEMONGFXDIR)/amoonguss/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/frillish/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/frillish/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/jellicent/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/jellicent/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/alomomola/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2829,6 +3120,9 @@ $(POKEMONGFXDIR)/litleo/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/pyroar/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/pyroar/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/flabebe/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -3633,6 +3927,9 @@ $(POKEMONGFXDIR)/qwilfish/hisuian/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/sneasel/hisuian/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/sneasel/hisuian/overworldf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/zorua/hisuian/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 284977bcc2..9a3c1d1711 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -65,6 +65,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_VenusaurF[] = INCBIN_U32("graphics/pokemon/venusaur/anim_frontf.4bpp.lz"); const u32 gMonBackPic_VenusaurF[] = INCBIN_U32("graphics/pokemon/venusaur/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_VenusaurF[] = INCBIN_COMP("graphics/pokemon/venusaur/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/front.4bpp.lz"); @@ -321,6 +324,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_ButterfreeF[] = INCBIN_U32("graphics/pokemon/butterfree/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ButterfreeF[] = INCBIN_U32("graphics/pokemon/butterfree/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_ButterfreeF[] = INCBIN_COMP("graphics/pokemon/butterfree/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GIGANTAMAX_FORMS const u32 gMonFrontPic_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/front.4bpp.lz"); @@ -487,6 +493,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_RattataF[] = INCBIN_U32("graphics/pokemon/rattata/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RattataF[] = INCBIN_U32("graphics/pokemon/rattata/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RattataF[] = INCBIN_COMP("graphics/pokemon/rattata/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Raticate[] = INCBIN_U32("graphics/pokemon/raticate/anim_front.4bpp.lz"); const u32 gMonPalette_Raticate[] = INCBIN_U32("graphics/pokemon/raticate/normal.gbapal.lz"); @@ -506,6 +515,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_RaticateF[] = INCBIN_U32("graphics/pokemon/raticate/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RaticateF[] = INCBIN_U32("graphics/pokemon/raticate/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RaticateF[] = INCBIN_COMP("graphics/pokemon/raticate/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_ALOLAN_FORMS const u32 gMonFrontPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/front.4bpp.lz"); @@ -657,6 +669,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #if P_CUSTOM_GENDER_DIFF_ICONS const u8 gMonIcon_PikachuF[] = INCBIN_U8("graphics/pokemon/pikachu/iconf.4bpp"); #endif +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_PikachuF[] = INCBIN_COMP("graphics/pokemon/pikachu/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_COSPLAY_PIKACHU_FORMS const u32 gMonFrontPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/front.4bpp.lz"); @@ -803,6 +818,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_RaichuF[] = INCBIN_U32("graphics/pokemon/raichu/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RaichuF[] = INCBIN_COMP("graphics/pokemon/raichu/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_ALOLAN_FORMS const u32 gMonFrontPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/front.4bpp.lz"); @@ -1165,6 +1183,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_ZubatF[] = INCBIN_U32("graphics/pokemon/zubat/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ZubatF[] = INCBIN_U32("graphics/pokemon/zubat/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_ZubatF[] = INCBIN_COMP("graphics/pokemon/zubat/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Golbat[] = INCBIN_U32("graphics/pokemon/golbat/anim_front.4bpp.lz"); const u32 gMonPalette_Golbat[] = INCBIN_U32("graphics/pokemon/golbat/normal.gbapal.lz"); @@ -1184,6 +1205,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GolbatF[] = INCBIN_U32("graphics/pokemon/golbat/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GolbatF[] = INCBIN_U32("graphics/pokemon/golbat/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GolbatF[] = INCBIN_COMP("graphics/pokemon/golbat/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_2_CROSS_EVOS const u32 gMonFrontPic_Crobat[] = INCBIN_U32("graphics/pokemon/crobat/anim_front.4bpp.lz"); @@ -1239,6 +1263,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GloomF[] = INCBIN_U32("graphics/pokemon/gloom/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GloomF[] = INCBIN_U32("graphics/pokemon/gloom/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GloomF[] = INCBIN_COMP("graphics/pokemon/gloom/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Vileplume[] = INCBIN_U32("graphics/pokemon/vileplume/anim_front.4bpp.lz"); const u32 gMonPalette_Vileplume[] = INCBIN_U32("graphics/pokemon/vileplume/normal.gbapal.lz"); @@ -1258,6 +1285,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_VileplumeF[] = INCBIN_U32("graphics/pokemon/vileplume/anim_frontf.4bpp.lz"); const u32 gMonBackPic_VileplumeF[] = INCBIN_U32("graphics/pokemon/vileplume/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_VileplumeF[] = INCBIN_COMP("graphics/pokemon/vileplume/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_2_CROSS_EVOS const u32 gMonFrontPic_Bellossom[] = INCBIN_U32("graphics/pokemon/bellossom/anim_front.4bpp.lz"); @@ -1732,6 +1762,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_PolitoedF[] = INCBIN_U32("graphics/pokemon/politoed/anim_frontf.4bpp.lz"); const u32 gMonBackPic_PolitoedF[] = INCBIN_U32("graphics/pokemon/politoed/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_PolitoedF[] = INCBIN_COMP("graphics/pokemon/politoed/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_2_CROSS_EVOS #endif //P_FAMILY_POLIWAG @@ -1770,6 +1803,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_KadabraF[] = INCBIN_U32("graphics/pokemon/kadabra/anim_frontf.4bpp.lz"); const u32 gMonBackPic_KadabraF[] = INCBIN_U32("graphics/pokemon/kadabra/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_KadabraF[] = INCBIN_COMP("graphics/pokemon/kadabra/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Alakazam[] = INCBIN_U32("graphics/pokemon/alakazam/anim_front.4bpp.lz"); const u32 gMonPalette_Alakazam[] = INCBIN_U32("graphics/pokemon/alakazam/normal.gbapal.lz"); @@ -1789,6 +1825,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_AlakazamF[] = INCBIN_U32("graphics/pokemon/alakazam/anim_frontf.4bpp.lz"); const u32 gMonBackPic_AlakazamF[] = INCBIN_U32("graphics/pokemon/alakazam/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_AlakazamF[] = INCBIN_COMP("graphics/pokemon/alakazam/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/front.4bpp.lz"); @@ -2338,6 +2377,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_DoduoF[] = INCBIN_U32("graphics/pokemon/doduo/anim_frontf.4bpp.lz"); const u32 gMonBackPic_DoduoF[] = INCBIN_U32("graphics/pokemon/doduo/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_DoduoF[] = INCBIN_COMP("graphics/pokemon/doduo/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Dodrio[] = INCBIN_U32("graphics/pokemon/dodrio/anim_front.4bpp.lz"); const u32 gMonPalette_Dodrio[] = INCBIN_U32("graphics/pokemon/dodrio/normal.gbapal.lz"); @@ -2357,6 +2399,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_DodrioF[] = INCBIN_U32("graphics/pokemon/dodrio/anim_frontf.4bpp.lz"); const u32 gMonBackPic_DodrioF[] = INCBIN_U32("graphics/pokemon/dodrio/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_DodrioF[] = INCBIN_COMP("graphics/pokemon/dodrio/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_DODUO #if P_FAMILY_SEEL @@ -2605,6 +2650,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_SteelixF[] = INCBIN_U32("graphics/pokemon/steelix/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SteelixF[] = INCBIN_U32("graphics/pokemon/steelix/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_SteelixF[] = INCBIN_COMP("graphics/pokemon/steelix/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/front.4bpp.lz"); @@ -2658,6 +2706,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_HypnoF[] = INCBIN_U32("graphics/pokemon/hypno/anim_frontf.4bpp.lz"); const u32 gMonBackPic_HypnoF[] = INCBIN_U32("graphics/pokemon/hypno/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_HypnoF[] = INCBIN_COMP("graphics/pokemon/hypno/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_DROWZEE #if P_FAMILY_KRABBY @@ -3043,6 +3094,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_RhyhornF[] = INCBIN_U32("graphics/pokemon/rhyhorn/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RhyhornF[] = INCBIN_U32("graphics/pokemon/rhyhorn/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RhyhornF[] = INCBIN_COMP("graphics/pokemon/rhyhorn/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Rhydon[] = INCBIN_U32("graphics/pokemon/rhydon/anim_front.4bpp.lz"); const u32 gMonPalette_Rhydon[] = INCBIN_U32("graphics/pokemon/rhydon/normal.gbapal.lz"); @@ -3062,6 +3116,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_RhydonF[] = INCBIN_U32("graphics/pokemon/rhydon/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RhydonF[] = INCBIN_U32("graphics/pokemon/rhydon/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RhydonF[] = INCBIN_COMP("graphics/pokemon/rhydon/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Rhyperior[] = INCBIN_U32("graphics/pokemon/rhyperior/anim_front.4bpp.lz"); @@ -3082,6 +3139,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_RhyperiorF[] = INCBIN_U32("graphics/pokemon/rhyperior/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RhyperiorF[] = INCBIN_U32("graphics/pokemon/rhyperior/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RhyperiorF[] = INCBIN_COMP("graphics/pokemon/rhyperior/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_RHYHORN @@ -3174,6 +3234,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_TangrowthF[] = INCBIN_U32("graphics/pokemon/tangrowth/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_TangrowthF[] = INCBIN_COMP("graphics/pokemon/tangrowth/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_TANGELA @@ -3281,6 +3344,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GoldeenF[] = INCBIN_U32("graphics/pokemon/goldeen/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GoldeenF[] = INCBIN_U32("graphics/pokemon/goldeen/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GoldeenF[] = INCBIN_COMP("graphics/pokemon/goldeen/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Seaking[] = INCBIN_U32("graphics/pokemon/seaking/anim_front.4bpp.lz"); const u32 gMonPalette_Seaking[] = INCBIN_U32("graphics/pokemon/seaking/normal.gbapal.lz"); @@ -3300,6 +3366,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_SeakingF[] = INCBIN_U32("graphics/pokemon/seaking/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SeakingF[] = INCBIN_U32("graphics/pokemon/seaking/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_SeakingF[] = INCBIN_COMP("graphics/pokemon/seaking/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_GOLDEEN #if P_FAMILY_STARYU @@ -3421,6 +3490,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_ScytherF[] = INCBIN_U32("graphics/pokemon/scyther/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_ScytherF[] = INCBIN_COMP("graphics/pokemon/scyther/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_2_CROSS_EVOS const u32 gMonFrontPic_Scizor[] = INCBIN_U32("graphics/pokemon/scizor/anim_front.4bpp.lz"); @@ -3440,6 +3512,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_ScizorF[] = INCBIN_U32("graphics/pokemon/scizor/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_ScizorF[] = INCBIN_COMP("graphics/pokemon/scizor/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/front.4bpp.lz"); @@ -3724,6 +3799,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_MagikarpF[] = INCBIN_U32("graphics/pokemon/magikarp/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MagikarpF[] = INCBIN_U32("graphics/pokemon/magikarp/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_MagikarpF[] = INCBIN_COMP("graphics/pokemon/magikarp/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Gyarados[] = INCBIN_U32("graphics/pokemon/gyarados/anim_front.4bpp.lz"); const u32 gMonPalette_Gyarados[] = INCBIN_U32("graphics/pokemon/gyarados/normal.gbapal.lz"); @@ -3743,6 +3821,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GyaradosF[] = INCBIN_U32("graphics/pokemon/gyarados/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GyaradosF[] = INCBIN_U32("graphics/pokemon/gyarados/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GyaradosF[] = INCBIN_COMP("graphics/pokemon/gyarados/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/front.4bpp.lz"); @@ -3830,6 +3911,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_EeveeF[] = INCBIN_U32("graphics/pokemon/eevee/anim_frontf.4bpp.lz"); const u32 gMonBackPic_EeveeF[] = INCBIN_U32("graphics/pokemon/eevee/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_EeveeF[] = INCBIN_COMP("graphics/pokemon/eevee/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GIGANTAMAX_FORMS const u32 gMonFrontPic_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/front.4bpp.lz"); @@ -4456,6 +4540,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_MeganiumF[] = INCBIN_U32("graphics/pokemon/meganium/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MeganiumF[] = INCBIN_U32("graphics/pokemon/meganium/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_MeganiumF[] = INCBIN_COMP("graphics/pokemon/meganium/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CHIKORITA #if P_FAMILY_CYNDAQUIL @@ -4660,6 +4747,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_LedybaF[] = INCBIN_U32("graphics/pokemon/ledyba/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LedybaF[] = INCBIN_U32("graphics/pokemon/ledyba/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_LedybaF[] = INCBIN_COMP("graphics/pokemon/ledyba/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Ledian[] = INCBIN_U32("graphics/pokemon/ledian/anim_front.4bpp.lz"); const u32 gMonPalette_Ledian[] = INCBIN_U32("graphics/pokemon/ledian/normal.gbapal.lz"); @@ -4679,6 +4769,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_LedianF[] = INCBIN_U32("graphics/pokemon/ledian/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LedianF[] = INCBIN_U32("graphics/pokemon/ledian/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_LedianF[] = INCBIN_COMP("graphics/pokemon/ledian/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_LEDYBA #if P_FAMILY_SPINARAK @@ -4835,6 +4928,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_XatuF[] = INCBIN_U32("graphics/pokemon/xatu/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_XatuF[] = INCBIN_COMP("graphics/pokemon/xatu/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_NATU #if P_FAMILY_MAREEP @@ -4991,6 +5087,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_SudowoodoF[] = INCBIN_U32("graphics/pokemon/sudowoodo/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SudowoodoF[] = INCBIN_U32("graphics/pokemon/sudowoodo/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_SudowoodoF[] = INCBIN_COMP("graphics/pokemon/sudowoodo/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SUDOWOODO #if P_FAMILY_HOPPIP @@ -5062,6 +5161,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_AipomF[] = INCBIN_U32("graphics/pokemon/aipom/anim_frontf.4bpp.lz"); const u32 gMonBackPic_AipomF[] = INCBIN_U32("graphics/pokemon/aipom/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_AipomF[] = INCBIN_COMP("graphics/pokemon/aipom/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Ambipom[] = INCBIN_U32("graphics/pokemon/ambipom/anim_front.4bpp.lz"); @@ -5082,6 +5184,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_AmbipomF[] = INCBIN_U32("graphics/pokemon/ambipom/anim_frontf.4bpp.lz"); const u32 gMonBackPic_AmbipomF[] = INCBIN_U32("graphics/pokemon/ambipom/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_AmbipomF[] = INCBIN_COMP("graphics/pokemon/ambipom/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_AIPOM @@ -5174,6 +5279,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_WooperF[] = INCBIN_U32("graphics/pokemon/wooper/anim_frontf.4bpp.lz"); const u32 gMonBackPic_WooperF[] = INCBIN_U32("graphics/pokemon/wooper/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_WooperF[] = INCBIN_COMP("graphics/pokemon/wooper/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Quagsire[] = INCBIN_U32("graphics/pokemon/quagsire/anim_front.4bpp.lz"); const u32 gMonPalette_Quagsire[] = INCBIN_U32("graphics/pokemon/quagsire/normal.gbapal.lz"); @@ -5193,6 +5301,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_QuagsireF[] = INCBIN_U32("graphics/pokemon/quagsire/anim_frontf.4bpp.lz"); const u32 gMonBackPic_QuagsireF[] = INCBIN_U32("graphics/pokemon/quagsire/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_QuagsireF[] = INCBIN_COMP("graphics/pokemon/quagsire/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_PALDEAN_FORMS const u32 gMonFrontPic_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldean/front.4bpp.lz"); @@ -5245,6 +5356,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_MurkrowF[] = INCBIN_U32("graphics/pokemon/murkrow/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MurkrowF[] = INCBIN_U32("graphics/pokemon/murkrow/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_MurkrowF[] = INCBIN_COMP("graphics/pokemon/murkrow/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Honchkrow[] = INCBIN_U32("graphics/pokemon/honchkrow/anim_front.4bpp.lz"); @@ -5496,6 +5610,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #if P_CUSTOM_GENDER_DIFF_ICONS const u8 gMonIcon_WobbuffetF[] = INCBIN_U8("graphics/pokemon/wobbuffet/iconf.4bpp"); #endif +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_WobbuffetF[] = INCBIN_COMP("graphics/pokemon/wobbuffet/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_WOBBUFFET #if P_FAMILY_GIRAFARIG @@ -5517,6 +5634,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GirafarigF[] = INCBIN_U32("graphics/pokemon/girafarig/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GirafarigF[] = INCBIN_U32("graphics/pokemon/girafarig/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GirafarigF[] = INCBIN_COMP("graphics/pokemon/girafarig/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_9_CROSS_EVOS const u32 gMonFrontPic_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/front.4bpp.lz"); @@ -5633,6 +5753,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GligarF[] = INCBIN_U32("graphics/pokemon/gligar/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GligarF[] = INCBIN_U32("graphics/pokemon/gligar/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GligarF[] = INCBIN_COMP("graphics/pokemon/gligar/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Gliscor[] = INCBIN_U32("graphics/pokemon/gliscor/anim_front.4bpp.lz"); @@ -5773,6 +5896,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_HeracrossF[] = INCBIN_U32("graphics/pokemon/heracross/anim_frontf.4bpp.lz"); const u32 gMonBackPic_HeracrossF[] = INCBIN_U32("graphics/pokemon/heracross/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_HeracrossF[] = INCBIN_COMP("graphics/pokemon/heracross/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/front.4bpp.lz"); @@ -5809,6 +5935,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_SneaselF[] = INCBIN_U32("graphics/pokemon/sneasel/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SneaselF[] = INCBIN_U32("graphics/pokemon/sneasel/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_SneaselF[] = INCBIN_COMP("graphics/pokemon/sneasel/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Weavile[] = INCBIN_U32("graphics/pokemon/weavile/anim_front.4bpp.lz"); @@ -5829,6 +5958,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_WeavileF[] = INCBIN_U32("graphics/pokemon/weavile/anim_frontf.4bpp.lz"); const u32 gMonBackPic_WeavileF[] = INCBIN_U32("graphics/pokemon/weavile/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_WeavileF[] = INCBIN_COMP("graphics/pokemon/weavile/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_4_CROSS_EVOS #if P_HISUIAN_FORMS @@ -5847,6 +5979,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_SneaselHisuianF[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/frontf.4bpp.lz"); const u32 gMonBackPic_SneaselHisuianF[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_SneaselHisuianF[] = INCBIN_COMP("graphics/pokemon/sneasel/hisuian/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); @@ -5901,6 +6036,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_UrsaringF[] = INCBIN_U32("graphics/pokemon/ursaring/anim_frontf.4bpp.lz"); const u32 gMonBackPic_UrsaringF[] = INCBIN_U32("graphics/pokemon/ursaring/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_UrsaringF[] = INCBIN_COMP("graphics/pokemon/ursaring/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_8_CROSS_EVOS const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); @@ -6003,6 +6141,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_PiloswineF[] = INCBIN_U32("graphics/pokemon/piloswine/anim_frontf.4bpp.lz"); const u32 gMonBackPic_PiloswineF[] = INCBIN_U32("graphics/pokemon/piloswine/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_PiloswineF[] = INCBIN_COMP("graphics/pokemon/piloswine/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Mamoswine[] = INCBIN_U32("graphics/pokemon/mamoswine/anim_front.4bpp.lz"); @@ -6022,6 +6163,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_MamoswineF[] = INCBIN_U32("graphics/pokemon/mamoswine/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_MamoswineF[] = INCBIN_COMP("graphics/pokemon/mamoswine/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_SWINUB @@ -6109,6 +6253,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_OctilleryF[] = INCBIN_U32("graphics/pokemon/octillery/anim_frontf.4bpp.lz"); const u32 gMonBackPic_OctilleryF[] = INCBIN_U32("graphics/pokemon/octillery/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_OctilleryF[] = INCBIN_COMP("graphics/pokemon/octillery/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_REMORAID #if P_FAMILY_DELIBIRD @@ -6218,6 +6365,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_HoundoomF[] = INCBIN_U32("graphics/pokemon/houndoom/anim_frontf.4bpp.lz"); const u32 gMonBackPic_HoundoomF[] = INCBIN_U32("graphics/pokemon/houndoom/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_HoundoomF[] = INCBIN_COMP("graphics/pokemon/houndoom/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/front.4bpp.lz"); @@ -6270,6 +6420,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_DonphanF[] = INCBIN_U32("graphics/pokemon/donphan/anim_frontf.4bpp.lz"); const u32 gMonBackPic_DonphanF[] = INCBIN_U32("graphics/pokemon/donphan/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_DonphanF[] = INCBIN_COMP("graphics/pokemon/donphan/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_PHANPY #if P_FAMILY_STANTLER @@ -6600,6 +6753,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonBackPic_TorchicF[] = INCBIN_U32("graphics/pokemon/torchic/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_TorchicF[] = INCBIN_COMP("graphics/pokemon/torchic/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Combusken[] = INCBIN_U32("graphics/pokemon/combusken/anim_front.4bpp.lz"); const u32 gMonPalette_Combusken[] = INCBIN_U32("graphics/pokemon/combusken/normal.gbapal.lz"); @@ -6619,6 +6775,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_CombuskenF[] = INCBIN_U32("graphics/pokemon/combusken/anim_frontf.4bpp.lz"); const u32 gMonBackPic_CombuskenF[] = INCBIN_U32("graphics/pokemon/combusken/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_CombuskenF[] = INCBIN_COMP("graphics/pokemon/combusken/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Blaziken[] = INCBIN_U32("graphics/pokemon/blaziken/anim_front.4bpp.lz"); const u32 gMonPalette_Blaziken[] = INCBIN_U32("graphics/pokemon/blaziken/normal.gbapal.lz"); @@ -6638,6 +6797,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_BlazikenF[] = INCBIN_U32("graphics/pokemon/blaziken/anim_frontf.4bpp.lz"); const u32 gMonBackPic_BlazikenF[] = INCBIN_U32("graphics/pokemon/blaziken/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_BlazikenF[] = INCBIN_COMP("graphics/pokemon/blaziken/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/front.4bpp.lz"); @@ -6883,6 +7045,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_BeautiflyF[] = INCBIN_U32("graphics/pokemon/beautifly/anim_frontf.4bpp.lz"); const u32 gMonBackPic_BeautiflyF[] = INCBIN_U32("graphics/pokemon/beautifly/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_BeautiflyF[] = INCBIN_COMP("graphics/pokemon/beautifly/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Cascoon[] = INCBIN_U32("graphics/pokemon/cascoon/anim_front.4bpp.lz"); const u32 gMonPalette_Cascoon[] = INCBIN_U32("graphics/pokemon/cascoon/normal.gbapal.lz"); @@ -6918,6 +7083,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_DustoxF[] = INCBIN_U32("graphics/pokemon/dustox/anim_frontf.4bpp.lz"); const u32 gMonBackPic_DustoxF[] = INCBIN_U32("graphics/pokemon/dustox/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_DustoxF[] = INCBIN_COMP("graphics/pokemon/dustox/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_WURMPLE #if P_FAMILY_LOTAD @@ -6971,6 +7139,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_LudicoloF[] = INCBIN_U32("graphics/pokemon/ludicolo/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LudicoloF[] = INCBIN_U32("graphics/pokemon/ludicolo/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_LudicoloF[] = INCBIN_COMP("graphics/pokemon/ludicolo/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_LOTAD #if P_FAMILY_SEEDOT @@ -7008,6 +7179,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_NuzleafF[] = INCBIN_U32("graphics/pokemon/nuzleaf/anim_frontf.4bpp.lz"); const u32 gMonBackPic_NuzleafF[] = INCBIN_U32("graphics/pokemon/nuzleaf/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_NuzleafF[] = INCBIN_COMP("graphics/pokemon/nuzleaf/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Shiftry[] = INCBIN_U32("graphics/pokemon/shiftry/anim_front.4bpp.lz"); const u32 gMonPalette_Shiftry[] = INCBIN_U32("graphics/pokemon/shiftry/normal.gbapal.lz"); @@ -7027,6 +7201,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_ShiftryF[] = INCBIN_U32("graphics/pokemon/shiftry/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ShiftryF[] = INCBIN_U32("graphics/pokemon/shiftry/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_ShiftryF[] = INCBIN_COMP("graphics/pokemon/shiftry/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SEEDOT #if P_FAMILY_TAILLOW @@ -7667,6 +7844,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_MedititeF[] = INCBIN_U32("graphics/pokemon/meditite/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MedititeF[] = INCBIN_U32("graphics/pokemon/meditite/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_MedititeF[] = INCBIN_COMP("graphics/pokemon/meditite/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Medicham[] = INCBIN_U32("graphics/pokemon/medicham/anim_front.4bpp.lz"); const u32 gMonPalette_Medicham[] = INCBIN_U32("graphics/pokemon/medicham/normal.gbapal.lz"); @@ -7686,6 +7866,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_MedichamF[] = INCBIN_U32("graphics/pokemon/medicham/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MedichamF[] = INCBIN_U32("graphics/pokemon/medicham/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_MedichamF[] = INCBIN_COMP("graphics/pokemon/medicham/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/front.4bpp.lz"); @@ -7859,6 +8042,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_RoseliaF[] = INCBIN_U32("graphics/pokemon/roselia/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RoseliaF[] = INCBIN_U32("graphics/pokemon/roselia/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RoseliaF[] = INCBIN_COMP("graphics/pokemon/roselia/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_GEN_4_CROSS_EVOS const u32 gMonFrontPic_Roserade[] = INCBIN_U32("graphics/pokemon/roserade/anim_front.4bpp.lz"); @@ -7879,6 +8065,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_RoseradeF[] = INCBIN_U32("graphics/pokemon/roserade/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RoseradeF[] = INCBIN_U32("graphics/pokemon/roserade/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RoseradeF[] = INCBIN_COMP("graphics/pokemon/roserade/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_ROSELIA @@ -7901,6 +8090,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GulpinF[] = INCBIN_U32("graphics/pokemon/gulpin/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GulpinF[] = INCBIN_U32("graphics/pokemon/gulpin/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GulpinF[] = INCBIN_COMP("graphics/pokemon/gulpin/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Swalot[] = INCBIN_U32("graphics/pokemon/swalot/anim_front.4bpp.lz"); const u32 gMonPalette_Swalot[] = INCBIN_U32("graphics/pokemon/swalot/normal.gbapal.lz"); @@ -7920,6 +8112,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_SwalotF[] = INCBIN_U32("graphics/pokemon/swalot/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SwalotF[] = INCBIN_U32("graphics/pokemon/swalot/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_SwalotF[] = INCBIN_COMP("graphics/pokemon/swalot/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_GULPIN #if P_FAMILY_CARVANHA @@ -8024,6 +8219,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_NumelF[] = INCBIN_U32("graphics/pokemon/numel/anim_frontf.4bpp.lz"); const u32 gMonBackPic_NumelF[] = INCBIN_U32("graphics/pokemon/numel/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_NumelF[] = INCBIN_COMP("graphics/pokemon/numel/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Camerupt[] = INCBIN_U32("graphics/pokemon/camerupt/anim_front.4bpp.lz"); const u32 gMonPalette_Camerupt[] = INCBIN_U32("graphics/pokemon/camerupt/normal.gbapal.lz"); @@ -8043,6 +8241,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_CameruptF[] = INCBIN_U32("graphics/pokemon/camerupt/anim_frontf.4bpp.lz"); const u32 gMonBackPic_CameruptF[] = INCBIN_U32("graphics/pokemon/camerupt/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_CameruptF[] = INCBIN_COMP("graphics/pokemon/camerupt/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/front.4bpp.lz"); @@ -8214,6 +8415,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_CacturneF[] = INCBIN_U32("graphics/pokemon/cacturne/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_CacturneF[] = INCBIN_COMP("graphics/pokemon/cacturne/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CACNEA #if P_FAMILY_SWABLU @@ -8542,6 +8746,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_MiloticF[] = INCBIN_U32("graphics/pokemon/milotic/anim_frontf.4bpp.lz"); const u32 gMonBackPic_MiloticF[] = INCBIN_U32("graphics/pokemon/milotic/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_MiloticF[] = INCBIN_COMP("graphics/pokemon/milotic/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FEEBAS #if P_FAMILY_CASTFORM @@ -8982,6 +9189,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_RelicanthF[] = INCBIN_U32("graphics/pokemon/relicanth/anim_frontf.4bpp.lz"); const u32 gMonBackPic_RelicanthF[] = INCBIN_U32("graphics/pokemon/relicanth/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_RelicanthF[] = INCBIN_COMP("graphics/pokemon/relicanth/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_RELICANTH #if P_FAMILY_LUVDISC @@ -9584,6 +9794,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_StarlyF[] = INCBIN_U32("graphics/pokemon/starly/anim_frontf.4bpp.lz"); const u32 gMonBackPic_StarlyF[] = INCBIN_U32("graphics/pokemon/starly/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_StarlyF[] = INCBIN_COMP("graphics/pokemon/starly/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Staravia[] = INCBIN_U32("graphics/pokemon/staravia/anim_front.4bpp.lz"); const u32 gMonPalette_Staravia[] = INCBIN_U32("graphics/pokemon/staravia/normal.gbapal.lz"); @@ -9603,6 +9816,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_StaraviaF[] = INCBIN_U32("graphics/pokemon/staravia/anim_frontf.4bpp.lz"); const u32 gMonBackPic_StaraviaF[] = INCBIN_U32("graphics/pokemon/staravia/back.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_StaraviaF[] = INCBIN_COMP("graphics/pokemon/staravia/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Staraptor[] = INCBIN_U32("graphics/pokemon/staraptor/anim_front.4bpp.lz"); const u32 gMonPalette_Staraptor[] = INCBIN_U32("graphics/pokemon/staraptor/normal.gbapal.lz"); @@ -9621,6 +9837,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_StaraptorF[] = INCBIN_U32("graphics/pokemon/staraptor/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_StaraptorF[] = INCBIN_COMP("graphics/pokemon/staraptor/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_STARLY #if P_FAMILY_BIDOOF @@ -9642,6 +9861,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_BidoofF[] = INCBIN_U32("graphics/pokemon/bidoof/anim_frontf.4bpp.lz"); const u32 gMonBackPic_BidoofF[] = INCBIN_U32("graphics/pokemon/bidoof/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_BidoofF[] = INCBIN_COMP("graphics/pokemon/bidoof/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Bibarel[] = INCBIN_U32("graphics/pokemon/bibarel/anim_front.4bpp.lz"); const u32 gMonPalette_Bibarel[] = INCBIN_U32("graphics/pokemon/bibarel/normal.gbapal.lz"); @@ -9660,6 +9882,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_BibarelF[] = INCBIN_U32("graphics/pokemon/bibarel/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_BibarelF[] = INCBIN_COMP("graphics/pokemon/bibarel/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_BIDOOF #if P_FAMILY_KRICKETOT @@ -9681,6 +9906,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_KricketotF[] = INCBIN_U32("graphics/pokemon/kricketot/anim_frontf.4bpp.lz"); const u32 gMonBackPic_KricketotF[] = INCBIN_U32("graphics/pokemon/kricketot/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_KricketotF[] = INCBIN_COMP("graphics/pokemon/kricketot/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Kricketune[] = INCBIN_U32("graphics/pokemon/kricketune/anim_front.4bpp.lz"); const u32 gMonPalette_Kricketune[] = INCBIN_U32("graphics/pokemon/kricketune/normal.gbapal.lz"); @@ -9700,6 +9928,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_KricketuneF[] = INCBIN_U32("graphics/pokemon/kricketune/anim_frontf.4bpp.lz"); const u32 gMonBackPic_KricketuneF[] = INCBIN_U32("graphics/pokemon/kricketune/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_KricketuneF[] = INCBIN_COMP("graphics/pokemon/kricketune/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_KRICKETOT #if P_FAMILY_SHINX @@ -9721,6 +9952,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_ShinxF[] = INCBIN_U32("graphics/pokemon/shinx/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ShinxF[] = INCBIN_U32("graphics/pokemon/shinx/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_ShinxF[] = INCBIN_COMP("graphics/pokemon/shinx/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Luxio[] = INCBIN_U32("graphics/pokemon/luxio/anim_front.4bpp.lz"); const u32 gMonPalette_Luxio[] = INCBIN_U32("graphics/pokemon/luxio/normal.gbapal.lz"); @@ -9740,6 +9974,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_LuxioF[] = INCBIN_U32("graphics/pokemon/luxio/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LuxioF[] = INCBIN_U32("graphics/pokemon/luxio/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_LuxioF[] = INCBIN_COMP("graphics/pokemon/luxio/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Luxray[] = INCBIN_U32("graphics/pokemon/luxray/anim_front.4bpp.lz"); const u32 gMonPalette_Luxray[] = INCBIN_U32("graphics/pokemon/luxray/normal.gbapal.lz"); @@ -9759,6 +9996,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_LuxrayF[] = INCBIN_U32("graphics/pokemon/luxray/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LuxrayF[] = INCBIN_U32("graphics/pokemon/luxray/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_LuxrayF[] = INCBIN_COMP("graphics/pokemon/luxray/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SHINX #if P_FAMILY_CRANIDOS @@ -9937,7 +10177,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/normalf.gbapal.lz"); const u32 gMonShinyPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/shinyf.gbapal.lz"); #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_CombeeF[] = INCBIN_COMP("graphics/pokemon/combee/followerf.4bpp"); + const u32 gObjectEventPic_CombeeF[] = INCBIN_COMP("graphics/pokemon/combee/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/anim_front.4bpp.lz"); @@ -9975,6 +10215,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_PachirisuF[] = INCBIN_U32("graphics/pokemon/pachirisu/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_PachirisuF[] = INCBIN_COMP("graphics/pokemon/pachirisu/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_PACHIRISU #if P_FAMILY_BUIZEL @@ -9995,6 +10238,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonBackPic_BuizelF[] = INCBIN_U32("graphics/pokemon/buizel/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_BuizelF[] = INCBIN_COMP("graphics/pokemon/buizel/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/anim_front.4bpp.lz"); const u32 gMonPalette_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/normal.gbapal.lz"); @@ -10013,6 +10259,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonBackPic_FloatzelF[] = INCBIN_U32("graphics/pokemon/floatzel/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_FloatzelF[] = INCBIN_COMP("graphics/pokemon/floatzel/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_BUIZEL #if P_FAMILY_CHERUBI @@ -10352,6 +10601,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GibleF[] = INCBIN_U32("graphics/pokemon/gible/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GibleF[] = INCBIN_U32("graphics/pokemon/gible/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GibleF[] = INCBIN_COMP("graphics/pokemon/gible/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Gabite[] = INCBIN_U32("graphics/pokemon/gabite/anim_front.4bpp.lz"); const u32 gMonPalette_Gabite[] = INCBIN_U32("graphics/pokemon/gabite/normal.gbapal.lz"); @@ -10371,6 +10623,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_GabiteF[] = INCBIN_U32("graphics/pokemon/gabite/anim_frontf.4bpp.lz"); const u32 gMonBackPic_GabiteF[] = INCBIN_U32("graphics/pokemon/gabite/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GabiteF[] = INCBIN_COMP("graphics/pokemon/gabite/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Garchomp[] = INCBIN_U32("graphics/pokemon/garchomp/anim_front.4bpp.lz"); const u32 gMonPalette_Garchomp[] = INCBIN_U32("graphics/pokemon/garchomp/normal.gbapal.lz"); @@ -10389,6 +10644,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_GarchompF[] = INCBIN_U32("graphics/pokemon/garchomp/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_GarchompF[] = INCBIN_COMP("graphics/pokemon/garchomp/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/front.4bpp.lz"); @@ -10478,11 +10736,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonIcon_HippopotasF[] = INCBIN_U8("graphics/pokemon/hippopotas/iconf.4bpp"); #endif #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_HippopotasF[] = INCBIN_COMP("graphics/pokemon/hippopotas/overworld.4bpp"); -#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/overworld_shiny.gbapal.lz"); -#endif //OW_PKMN_OBJECTS_SHARE_PALETTES + const u32 gObjectEventPic_HippopotasF[] = INCBIN_COMP("graphics/pokemon/hippopotas/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/anim_front.4bpp.lz"); @@ -10507,10 +10761,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonIcon_HippowdonF[] = INCBIN_U8("graphics/pokemon/hippowdon/iconf.4bpp"); #endif #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_HippowdonF[] = INCBIN_COMP("graphics/pokemon/hippowdon/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_normalf.gbapal.lz"); + const u32 gShinyOverworldPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_shinyf.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_HIPPOPOTAS @@ -10568,6 +10821,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_CroagunkF[] = INCBIN_U32("graphics/pokemon/croagunk/anim_frontf.4bpp.lz"); const u32 gMonBackPic_CroagunkF[] = INCBIN_U32("graphics/pokemon/croagunk/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_CroagunkF[] = INCBIN_COMP("graphics/pokemon/croagunk/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Toxicroak[] = INCBIN_U32("graphics/pokemon/toxicroak/anim_front.4bpp.lz"); const u32 gMonPalette_Toxicroak[] = INCBIN_U32("graphics/pokemon/toxicroak/normal.gbapal.lz"); @@ -10587,6 +10843,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_ToxicroakF[] = INCBIN_U32("graphics/pokemon/toxicroak/anim_frontf.4bpp.lz"); const u32 gMonBackPic_ToxicroakF[] = INCBIN_U32("graphics/pokemon/toxicroak/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_ToxicroakF[] = INCBIN_COMP("graphics/pokemon/toxicroak/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CROAGUNK #if P_FAMILY_CARNIVINE @@ -10626,6 +10885,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_FinneonF[] = INCBIN_U32("graphics/pokemon/finneon/anim_frontf.4bpp.lz"); const u32 gMonBackPic_FinneonF[] = INCBIN_U32("graphics/pokemon/finneon/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_FinneonF[] = INCBIN_COMP("graphics/pokemon/finneon/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Lumineon[] = INCBIN_U32("graphics/pokemon/lumineon/anim_front.4bpp.lz"); const u32 gMonPalette_Lumineon[] = INCBIN_U32("graphics/pokemon/lumineon/normal.gbapal.lz"); @@ -10645,6 +10907,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_LumineonF[] = INCBIN_U32("graphics/pokemon/lumineon/anim_frontf.4bpp.lz"); const u32 gMonBackPic_LumineonF[] = INCBIN_U32("graphics/pokemon/lumineon/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_LumineonF[] = INCBIN_COMP("graphics/pokemon/lumineon/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FINNEON #if P_FAMILY_SNOVER @@ -10666,6 +10931,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonFrontPic_SnoverF[] = INCBIN_U32("graphics/pokemon/snover/anim_frontf.4bpp.lz"); const u32 gMonBackPic_SnoverF[] = INCBIN_U32("graphics/pokemon/snover/backf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_SnoverF[] = INCBIN_COMP("graphics/pokemon/snover/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_Abomasnow[] = INCBIN_U32("graphics/pokemon/abomasnow/anim_front.4bpp.lz"); const u32 gMonPalette_Abomasnow[] = INCBIN_U32("graphics/pokemon/abomasnow/normal.gbapal.lz"); @@ -10684,6 +10952,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //OW_POKEMON_OBJECT_EVENTS const u32 gMonFrontPic_AbomasnowF[] = INCBIN_U32("graphics/pokemon/abomasnow/anim_frontf.4bpp.lz"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_AbomasnowF[] = INCBIN_COMP("graphics/pokemon/abomasnow/overworldf.4bpp"); +#endif //OW_POKEMON_OBJECT_EVENTS #if P_MEGA_EVOLUTIONS const u32 gMonFrontPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/front.4bpp.lz"); @@ -11685,10 +11956,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/shinyf.gbapal.lz"); const u8 gMonIcon_UnfezantF[] = INCBIN_U8("graphics/pokemon/unfezant/iconf.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_UnfezantF[] = INCBIN_COMP("graphics/pokemon/unfezant_f/overworld.4bpp"); + const u32 gObjectEventPic_UnfezantF[] = INCBIN_COMP("graphics/pokemon/unfezant/overworldf.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant_f/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant_f/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/overworld_normalf.gbapal.lz"); + const u32 gShinyOverworldPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/overworld_shinyf.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_PIDOVE @@ -13165,10 +13436,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/shinyf.gbapal.lz"); const u8 gMonIcon_FrillishF[] = INCBIN_U8("graphics/pokemon/frillish/iconf.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_FrillishF[] = INCBIN_COMP("graphics/pokemon/frillish/followerf.4bpp"); + const u32 gObjectEventPic_FrillishF[] = INCBIN_COMP("graphics/pokemon/frillish/overworldf.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/overworld_normalf.gbapal.lz"); - // const u32 gShinyOverworldPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/overworld_shinyf.gbapal.lz"); + const u32 gOverworldPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/overworld_normalf.gbapal.lz"); + const u32 gShinyOverworldPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/overworld_shinyf.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -13194,10 +13465,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/shinyf.gbapal.lz"); const u8 gMonIcon_JellicentF[] = INCBIN_U8("graphics/pokemon/jellicent/iconf.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_JellicentF[] = INCBIN_COMP("graphics/pokemon/jellicent/followerf.4bpp"); + const u32 gObjectEventPic_JellicentF[] = INCBIN_COMP("graphics/pokemon/jellicent/overworldf.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_normalf.gbapal.lz"); + const u32 gShinyOverworldPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_shinyf.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FRILLISH @@ -14858,11 +15129,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonBackPic_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/backf.4bpp.lz"); const u8 gMonIcon_PyroarF[] = INCBIN_U8("graphics/pokemon/pyroar/iconf.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_PyroarF[] = INCBIN_COMP("graphics/pokemon/pyroar/followerf.4bpp"); -#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/overworld_normalf.gbapal.lz"); - // const u32 gShinyOverworldPalette_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/overworld_shinyf.gbapal.lz"); -#endif //OW_PKMN_OBJECTS_SHARE_PALETTES + const u32 gObjectEventPic_PyroarF[] = INCBIN_COMP("graphics/pokemon/pyroar/overworldf.4bpp"); #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_LITLEO diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h index 6ad602a629..1164e92c52 100644 --- a/src/data/object_events/object_event_pic_tables_followers.h +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -13,6 +13,9 @@ static const struct SpriteFrameImage sPicTable_Ivysaur[] = { static const struct SpriteFrameImage sPicTable_Venusaur[] = { overworld_ascending_frames(gObjectEventPic_Venusaur, 4, 4), }; +static const struct SpriteFrameImage sPicTable_VenusaurF[] = { + overworld_ascending_frames(gObjectEventPic_VenusaurF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_VenusaurMega[] = { overworld_ascending_frames(gObjectEventPic_VenusaurMega, 4, 4), @@ -82,6 +85,9 @@ static const struct SpriteFrameImage sPicTable_Metapod[] = { static const struct SpriteFrameImage sPicTable_Butterfree[] = { overworld_ascending_frames(gObjectEventPic_Butterfree, 4, 4), }; +static const struct SpriteFrameImage sPicTable_ButterfreeF[] = { + overworld_ascending_frames(gObjectEventPic_ButterfreeF, 4, 4), +}; #if P_GIGANTAMAX_FORMS /*static const struct SpriteFrameImage sPicTable_ButterfreeGigantamax[] = { overworld_ascending_frames(gObjectEventPic_ButterfreeGigantamax, 4, 4), @@ -127,9 +133,15 @@ static const struct SpriteFrameImage sPicTable_Pidgeot[] = { static const struct SpriteFrameImage sPicTable_Rattata[] = { overworld_ascending_frames(gObjectEventPic_Rattata, 4, 4), }; +static const struct SpriteFrameImage sPicTable_RattataF[] = { + overworld_ascending_frames(gObjectEventPic_RattataF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Raticate[] = { overworld_ascending_frames(gObjectEventPic_Raticate, 4, 4), }; +static const struct SpriteFrameImage sPicTable_RaticateF[] = { + overworld_ascending_frames(gObjectEventPic_RaticateF, 4, 4), +}; #if P_ALOLAN_FORMS static const struct SpriteFrameImage sPicTable_RattataAlolan[] = { overworld_ascending_frames(gObjectEventPic_RattataAlolan, 4, 4), @@ -170,6 +182,9 @@ static const struct SpriteFrameImage sPicTable_PichuSpikyEared[] = { static const struct SpriteFrameImage sPicTable_Pikachu[] = { overworld_ascending_frames(gObjectEventPic_Pikachu, 4, 4), }; +static const struct SpriteFrameImage sPicTable_PikachuF[] = { + overworld_ascending_frames(gObjectEventPic_PikachuF, 4, 4), +}; #if P_COSPLAY_PIKACHU_FORMS /*static const struct SpriteFrameImage sPicTable_PikachuCosplay[] = { overworld_ascending_frames(gObjectEventPic_PikachuCosplay, 4, 4), @@ -227,6 +242,9 @@ static const struct SpriteFrameImage sPicTable_PikachuWorldCap[] = { static const struct SpriteFrameImage sPicTable_Raichu[] = { overworld_ascending_frames(gObjectEventPic_Raichu, 4, 4), }; +static const struct SpriteFrameImage sPicTable_RaichuF[] = { + overworld_ascending_frames(gObjectEventPic_RaichuF, 4, 4), +}; #if P_ALOLAN_FORMS static const struct SpriteFrameImage sPicTable_RaichuAlolan[] = { overworld_ascending_frames(gObjectEventPic_RaichuAlolan, 4, 4), @@ -321,9 +339,15 @@ static const struct SpriteFrameImage sPicTable_Wigglytuff[] = { static const struct SpriteFrameImage sPicTable_Zubat[] = { overworld_ascending_frames(gObjectEventPic_Zubat, 4, 4), }; +static const struct SpriteFrameImage sPicTable_ZubatF[] = { + overworld_ascending_frames(gObjectEventPic_ZubatF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Golbat[] = { overworld_ascending_frames(gObjectEventPic_Golbat, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GolbatF[] = { + overworld_ascending_frames(gObjectEventPic_GolbatF, 4, 4), +}; #if P_GEN_2_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Crobat[] = { overworld_ascending_frames(gObjectEventPic_Crobat, 4, 4), @@ -338,9 +362,15 @@ static const struct SpriteFrameImage sPicTable_Oddish[] = { static const struct SpriteFrameImage sPicTable_Gloom[] = { overworld_ascending_frames(gObjectEventPic_Gloom, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GloomF[] = { + overworld_ascending_frames(gObjectEventPic_GloomF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Vileplume[] = { overworld_ascending_frames(gObjectEventPic_Vileplume, 4, 4), }; +static const struct SpriteFrameImage sPicTable_VileplumeF[] = { + overworld_ascending_frames(gObjectEventPic_VileplumeF, 4, 4), +}; #if P_GEN_2_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Bellossom[] = { overworld_ascending_frames(gObjectEventPic_Bellossom, 4, 4), @@ -469,7 +499,9 @@ static const struct SpriteFrameImage sPicTable_Poliwrath[] = { static const struct SpriteFrameImage sPicTable_Politoed[] = { overworld_ascending_frames(gObjectEventPic_Politoed, 4, 4), }; - +static const struct SpriteFrameImage sPicTable_PolitoedF[] = { + overworld_ascending_frames(gObjectEventPic_PolitoedF, 4, 4), +}; #endif //P_GEN_2_CROSS_EVOS #endif //P_FAMILY_POLIWAG @@ -480,9 +512,15 @@ static const struct SpriteFrameImage sPicTable_Abra[] = { static const struct SpriteFrameImage sPicTable_Kadabra[] = { overworld_ascending_frames(gObjectEventPic_Kadabra, 4, 4), }; +static const struct SpriteFrameImage sPicTable_KadabraF[] = { + overworld_ascending_frames(gObjectEventPic_KadabraF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Alakazam[] = { overworld_ascending_frames(gObjectEventPic_Alakazam, 4, 4), }; +static const struct SpriteFrameImage sPicTable_AlakazamF[] = { + overworld_ascending_frames(gObjectEventPic_AlakazamF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_AlakazamMega[] = { overworld_ascending_frames(gObjectEventPic_AlakazamMega, 4, 4), @@ -634,9 +672,15 @@ static const struct SpriteFrameImage sPicTable_Sirfetchd[] = { static const struct SpriteFrameImage sPicTable_Doduo[] = { overworld_ascending_frames(gObjectEventPic_Doduo, 4, 4), }; +static const struct SpriteFrameImage sPicTable_DoduoF[] = { + overworld_ascending_frames(gObjectEventPic_DoduoF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Dodrio[] = { overworld_ascending_frames(gObjectEventPic_Dodrio, 4, 4), }; +static const struct SpriteFrameImage sPicTable_DodrioF[] = { + overworld_ascending_frames(gObjectEventPic_DodrioF, 4, 4), +}; #endif //P_FAMILY_DODUO #if P_FAMILY_SEEL @@ -704,6 +748,9 @@ static const struct SpriteFrameImage sPicTable_Onix[] = { static const struct SpriteFrameImage sPicTable_Steelix[] = { overworld_ascending_frames(gObjectEventPic_Steelix, 4, 4), }; +static const struct SpriteFrameImage sPicTable_SteelixF[] = { + overworld_ascending_frames(gObjectEventPic_SteelixF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_SteelixMega[] = { overworld_ascending_frames(gObjectEventPic_SteelixMega, 4, 4), @@ -719,6 +766,9 @@ static const struct SpriteFrameImage sPicTable_Drowzee[] = { static const struct SpriteFrameImage sPicTable_Hypno[] = { overworld_ascending_frames(gObjectEventPic_Hypno, 4, 4), }; +static const struct SpriteFrameImage sPicTable_HypnoF[] = { + overworld_ascending_frames(gObjectEventPic_HypnoF, 4, 4), +}; #endif //P_FAMILY_DROWZEE #if P_FAMILY_KRABBY @@ -828,14 +878,22 @@ static const struct SpriteFrameImage sPicTable_WeezingGalarian[] = { static const struct SpriteFrameImage sPicTable_Rhyhorn[] = { overworld_ascending_frames(gObjectEventPic_Rhyhorn, 4, 4), }; +static const struct SpriteFrameImage sPicTable_RhyhornF[] = { + overworld_ascending_frames(gObjectEventPic_RhyhornF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Rhydon[] = { overworld_ascending_frames(gObjectEventPic_Rhydon, 4, 4), }; +static const struct SpriteFrameImage sPicTable_RhydonF[] = { + overworld_ascending_frames(gObjectEventPic_RhydonF, 4, 4), +}; #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Rhyperior[] = { overworld_ascending_frames(gObjectEventPic_Rhyperior, 4, 4), }; - +static const struct SpriteFrameImage sPicTable_RhyperiorF[] = { + overworld_ascending_frames(gObjectEventPic_RhyperiorF, 4, 4), +}; #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_RHYHORN @@ -863,7 +921,9 @@ static const struct SpriteFrameImage sPicTable_Tangela[] = { static const struct SpriteFrameImage sPicTable_Tangrowth[] = { overworld_ascending_frames(gObjectEventPic_Tangrowth, 4, 4), }; - +static const struct SpriteFrameImage sPicTable_TangrowthF[] = { + overworld_ascending_frames(gObjectEventPic_TangrowthF, 4, 4), +}; #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_TANGELA @@ -896,9 +956,15 @@ static const struct SpriteFrameImage sPicTable_Kingdra[] = { static const struct SpriteFrameImage sPicTable_Goldeen[] = { overworld_ascending_frames(gObjectEventPic_Goldeen, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GoldeenF[] = { + overworld_ascending_frames(gObjectEventPic_GoldeenF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Seaking[] = { overworld_ascending_frames(gObjectEventPic_Seaking, 4, 4), }; +static const struct SpriteFrameImage sPicTable_SeakingF[] = { + overworld_ascending_frames(gObjectEventPic_SeakingF, 4, 4), +}; #endif //P_FAMILY_GOLDEEN #if P_FAMILY_STARYU @@ -933,10 +999,16 @@ static const struct SpriteFrameImage sPicTable_MrRime[] = { static const struct SpriteFrameImage sPicTable_Scyther[] = { overworld_ascending_frames(gObjectEventPic_Scyther, 4, 4), }; +static const struct SpriteFrameImage sPicTable_ScytherF[] = { + overworld_ascending_frames(gObjectEventPic_ScytherF, 4, 4), +}; #if P_GEN_2_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Scizor[] = { overworld_ascending_frames(gObjectEventPic_Scizor, 4, 4), }; +static const struct SpriteFrameImage sPicTable_ScizorF[] = { + overworld_ascending_frames(gObjectEventPic_ScizorF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_ScizorMega[] = { overworld_ascending_frames(gObjectEventPic_ScizorMega, 4, 4), @@ -1026,9 +1098,15 @@ static const struct SpriteFrameImage sPicTable_TaurosPaldeanAquaBreed[] = { static const struct SpriteFrameImage sPicTable_Magikarp[] = { overworld_ascending_frames(gObjectEventPic_Magikarp, 4, 4), }; +static const struct SpriteFrameImage sPicTable_MagikarpF[] = { + overworld_ascending_frames(gObjectEventPic_MagikarpF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Gyarados[] = { overworld_ascending_frames(gObjectEventPic_Gyarados, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GyaradosF[] = { + overworld_ascending_frames(gObjectEventPic_GyaradosF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_GyaradosMega[] = { overworld_ascending_frames(gObjectEventPic_GyaradosMega, 4, 4), @@ -1057,6 +1135,9 @@ static const struct SpriteFrameImage sPicTable_Ditto[] = { static const struct SpriteFrameImage sPicTable_Eevee[] = { overworld_ascending_frames(gObjectEventPic_Eevee, 4, 4), }; +static const struct SpriteFrameImage sPicTable_EeveeF[] = { + overworld_ascending_frames(gObjectEventPic_EeveeF, 4, 4), +}; #if P_GIGANTAMAX_FORMS /*static const struct SpriteFrameImage sPicTable_EeveeGigantamax[] = { overworld_ascending_frames(gObjectEventPic_EeveeGigantamax, 4, 4), @@ -1233,6 +1314,9 @@ static const struct SpriteFrameImage sPicTable_Bayleef[] = { static const struct SpriteFrameImage sPicTable_Meganium[] = { overworld_ascending_frames(gObjectEventPic_Meganium, 4, 4), }; +static const struct SpriteFrameImage sPicTable_MeganiumF[] = { + overworld_ascending_frames(gObjectEventPic_MeganiumF, 4, 4), +}; #endif //P_FAMILY_CHIKORITA #if P_FAMILY_CYNDAQUIL @@ -1286,9 +1370,15 @@ static const struct SpriteFrameImage sPicTable_Noctowl[] = { static const struct SpriteFrameImage sPicTable_Ledyba[] = { overworld_ascending_frames(gObjectEventPic_Ledyba, 4, 4), }; +static const struct SpriteFrameImage sPicTable_LedybaF[] = { + overworld_ascending_frames(gObjectEventPic_LedybaF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Ledian[] = { overworld_ascending_frames(gObjectEventPic_Ledian, 4, 4), }; +static const struct SpriteFrameImage sPicTable_LedianF[] = { + overworld_ascending_frames(gObjectEventPic_LedianF, 4, 4), +}; #endif //P_FAMILY_LEDYBA #if P_FAMILY_SPINARAK @@ -1330,6 +1420,9 @@ static const struct SpriteFrameImage sPicTable_Natu[] = { static const struct SpriteFrameImage sPicTable_Xatu[] = { overworld_ascending_frames(gObjectEventPic_Xatu, 4, 4), }; +static const struct SpriteFrameImage sPicTable_XatuF[] = { + overworld_ascending_frames(gObjectEventPic_XatuF, 4, 4), +}; #endif //P_FAMILY_NATU #if P_FAMILY_MAREEP @@ -1372,6 +1465,9 @@ static const struct SpriteFrameImage sPicTable_Bonsly[] = { static const struct SpriteFrameImage sPicTable_Sudowoodo[] = { overworld_ascending_frames(gObjectEventPic_Sudowoodo, 4, 4), }; +static const struct SpriteFrameImage sPicTable_SudowoodoF[] = { + overworld_ascending_frames(gObjectEventPic_SudowoodoF, 4, 4), +}; #endif //P_FAMILY_SUDOWOODO #if P_FAMILY_HOPPIP @@ -1390,11 +1486,16 @@ static const struct SpriteFrameImage sPicTable_Jumpluff[] = { static const struct SpriteFrameImage sPicTable_Aipom[] = { overworld_ascending_frames(gObjectEventPic_Aipom, 4, 4), }; +static const struct SpriteFrameImage sPicTable_AipomF[] = { + overworld_ascending_frames(gObjectEventPic_AipomF, 4, 4), +}; #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Ambipom[] = { overworld_ascending_frames(gObjectEventPic_Ambipom, 4, 4), }; - +static const struct SpriteFrameImage sPicTable_AmbipomF[] = { + overworld_ascending_frames(gObjectEventPic_AmbipomF, 4, 4), +}; #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_AIPOM @@ -1422,9 +1523,15 @@ static const struct SpriteFrameImage sPicTable_Yanmega[] = { static const struct SpriteFrameImage sPicTable_Wooper[] = { overworld_ascending_frames(gObjectEventPic_Wooper, 4, 4), }; +static const struct SpriteFrameImage sPicTable_WooperF[] = { + overworld_ascending_frames(gObjectEventPic_WooperF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Quagsire[] = { overworld_ascending_frames(gObjectEventPic_Quagsire, 4, 4), }; +static const struct SpriteFrameImage sPicTable_QuagsireF[] = { + overworld_ascending_frames(gObjectEventPic_QuagsireF, 4, 4), +}; #if P_PALDEAN_FORMS static const struct SpriteFrameImage sPicTable_WooperPaldean[] = { overworld_ascending_frames(gObjectEventPic_WooperPaldean, 4, 4), @@ -1439,6 +1546,9 @@ static const struct SpriteFrameImage sPicTable_Clodsire[] = { static const struct SpriteFrameImage sPicTable_Murkrow[] = { overworld_ascending_frames(gObjectEventPic_Murkrow, 4, 4), }; +static const struct SpriteFrameImage sPicTable_MurkrowF[] = { + overworld_ascending_frames(gObjectEventPic_MurkrowF, 4, 4), +}; #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Honchkrow[] = { overworld_ascending_frames(gObjectEventPic_Honchkrow, 4, 4), @@ -1553,12 +1663,18 @@ static const struct SpriteFrameImage sPicTable_Wynaut[] = { static const struct SpriteFrameImage sPicTable_Wobbuffet[] = { overworld_ascending_frames(gObjectEventPic_Wobbuffet, 4, 4), }; +static const struct SpriteFrameImage sPicTable_WobbuffetF[] = { + overworld_ascending_frames(gObjectEventPic_WobbuffetF, 4, 4), +}; #endif //P_FAMILY_WOBBUFFET #if P_FAMILY_GIRAFARIG static const struct SpriteFrameImage sPicTable_Girafarig[] = { overworld_ascending_frames(gObjectEventPic_Girafarig, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GirafarigF[] = { + overworld_ascending_frames(gObjectEventPic_GirafarigF, 4, 4), +}; #if P_GEN_9_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Farigiraf[] = { overworld_ascending_frames(gObjectEventPic_Farigiraf, 4, 4), @@ -1595,6 +1711,9 @@ static const struct SpriteFrameImage sPicTable_DudunsparceThreeSegment[] = { static const struct SpriteFrameImage sPicTable_Gligar[] = { overworld_ascending_frames(gObjectEventPic_Gligar, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GligarF[] = { + overworld_ascending_frames(gObjectEventPic_GligarF, 4, 4), +}; #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Gliscor[] = { overworld_ascending_frames(gObjectEventPic_Gliscor, 4, 4), @@ -1635,6 +1754,9 @@ static const struct SpriteFrameImage sPicTable_Shuckle[] = { static const struct SpriteFrameImage sPicTable_Heracross[] = { overworld_ascending_frames(gObjectEventPic_Heracross, 4, 4), }; +static const struct SpriteFrameImage sPicTable_HeracrossF[] = { + overworld_ascending_frames(gObjectEventPic_HeracrossF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_HeracrossMega[] = { overworld_ascending_frames(gObjectEventPic_HeracrossMega, 4, 4), @@ -1646,17 +1768,25 @@ static const struct SpriteFrameImage sPicTable_Heracross[] = { static const struct SpriteFrameImage sPicTable_Sneasel[] = { overworld_ascending_frames(gObjectEventPic_Sneasel, 4, 4), }; +static const struct SpriteFrameImage sPicTable_SneaselF[] = { + overworld_ascending_frames(gObjectEventPic_SneaselF, 4, 4), +}; #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Weavile[] = { overworld_ascending_frames(gObjectEventPic_Weavile, 4, 4), }; - +static const struct SpriteFrameImage sPicTable_WeavileF[] = { + overworld_ascending_frames(gObjectEventPic_WeavileF, 4, 4), +}; #endif //P_GEN_4_CROSS_EVOS #if P_HISUIAN_FORMS static const struct SpriteFrameImage sPicTable_SneaselHisuian[] = { overworld_ascending_frames(gObjectEventPic_SneaselHisuian, 4, 4), }; +static const struct SpriteFrameImage sPicTable_SneaselHisuianF[] = { + overworld_ascending_frames(gObjectEventPic_SneaselHisuianF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Sneasler[] = { overworld_ascending_frames(gObjectEventPic_Sneasler, 4, 4), }; @@ -1670,6 +1800,9 @@ static const struct SpriteFrameImage sPicTable_Teddiursa[] = { static const struct SpriteFrameImage sPicTable_Ursaring[] = { overworld_ascending_frames(gObjectEventPic_Ursaring, 4, 4), }; +static const struct SpriteFrameImage sPicTable_UrsaringF[] = { + overworld_ascending_frames(gObjectEventPic_UrsaringF, 4, 4), +}; #if P_GEN_8_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Ursaluna[] = { overworld_ascending_frames(gObjectEventPic_Ursaluna, 4, 4), @@ -1696,11 +1829,16 @@ static const struct SpriteFrameImage sPicTable_Swinub[] = { static const struct SpriteFrameImage sPicTable_Piloswine[] = { overworld_ascending_frames(gObjectEventPic_Piloswine, 4, 4), }; +static const struct SpriteFrameImage sPicTable_PiloswineF[] = { + overworld_ascending_frames(gObjectEventPic_PiloswineF, 4, 4), +}; #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Mamoswine[] = { overworld_ascending_frames(gObjectEventPic_Mamoswine, 4, 4), }; - +static const struct SpriteFrameImage sPicTable_MamoswineF[] = { + overworld_ascending_frames(gObjectEventPic_MamoswineF, 4, 4), +}; #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_SWINUB @@ -1725,6 +1863,9 @@ static const struct SpriteFrameImage sPicTable_Remoraid[] = { static const struct SpriteFrameImage sPicTable_Octillery[] = { overworld_ascending_frames(gObjectEventPic_Octillery, 4, 4), }; +static const struct SpriteFrameImage sPicTable_OctilleryF[] = { + overworld_ascending_frames(gObjectEventPic_OctilleryF, 4, 4), +}; #endif //P_FAMILY_REMORAID #if P_FAMILY_DELIBIRD @@ -1757,6 +1898,9 @@ static const struct SpriteFrameImage sPicTable_Houndour[] = { static const struct SpriteFrameImage sPicTable_Houndoom[] = { overworld_ascending_frames(gObjectEventPic_Houndoom, 4, 4), }; +static const struct SpriteFrameImage sPicTable_HoundoomF[] = { + overworld_ascending_frames(gObjectEventPic_HoundoomF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_HoundoomMega[] = { overworld_ascending_frames(gObjectEventPic_HoundoomMega, 4, 4), @@ -1771,6 +1915,9 @@ static const struct SpriteFrameImage sPicTable_Phanpy[] = { static const struct SpriteFrameImage sPicTable_Donphan[] = { overworld_ascending_frames(gObjectEventPic_Donphan, 4, 4), }; +static const struct SpriteFrameImage sPicTable_DonphanF[] = { + overworld_ascending_frames(gObjectEventPic_DonphanF, 4, 4), +}; #endif //P_FAMILY_PHANPY #if P_FAMILY_STANTLER @@ -1870,12 +2017,21 @@ static const struct SpriteFrameImage sPicTable_Sceptile[] = { static const struct SpriteFrameImage sPicTable_Torchic[] = { overworld_ascending_frames(gObjectEventPic_Torchic, 4, 4), }; +static const struct SpriteFrameImage sPicTable_TorchicF[] = { + overworld_ascending_frames(gObjectEventPic_TorchicF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Combusken[] = { overworld_ascending_frames(gObjectEventPic_Combusken, 4, 4), }; +static const struct SpriteFrameImage sPicTable_CombuskenF[] = { + overworld_ascending_frames(gObjectEventPic_CombuskenF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Blaziken[] = { overworld_ascending_frames(gObjectEventPic_Blaziken, 4, 4), }; +static const struct SpriteFrameImage sPicTable_BlazikenF[] = { + overworld_ascending_frames(gObjectEventPic_BlazikenF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_BlazikenMega[] = { overworld_ascending_frames(gObjectEventPic_BlazikenMega, 4, 4), @@ -1939,12 +2095,18 @@ static const struct SpriteFrameImage sPicTable_Silcoon[] = { static const struct SpriteFrameImage sPicTable_Beautifly[] = { overworld_ascending_frames(gObjectEventPic_Beautifly, 4, 4), }; +static const struct SpriteFrameImage sPicTable_BeautiflyF[] = { + overworld_ascending_frames(gObjectEventPic_BeautiflyF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Cascoon[] = { overworld_ascending_frames(gObjectEventPic_Cascoon, 4, 4), }; static const struct SpriteFrameImage sPicTable_Dustox[] = { overworld_ascending_frames(gObjectEventPic_Dustox, 4, 4), }; +static const struct SpriteFrameImage sPicTable_DustoxF[] = { + overworld_ascending_frames(gObjectEventPic_DustoxF, 4, 4), +}; #endif //P_FAMILY_WURMPLE #if P_FAMILY_LOTAD @@ -1957,6 +2119,9 @@ static const struct SpriteFrameImage sPicTable_Lombre[] = { static const struct SpriteFrameImage sPicTable_Ludicolo[] = { overworld_ascending_frames(gObjectEventPic_Ludicolo, 4, 4), }; +static const struct SpriteFrameImage sPicTable_LudicoloF[] = { + overworld_ascending_frames(gObjectEventPic_LudicoloF, 4, 4), +}; #endif //P_FAMILY_LOTAD #if P_FAMILY_SEEDOT @@ -1966,9 +2131,15 @@ static const struct SpriteFrameImage sPicTable_Seedot[] = { static const struct SpriteFrameImage sPicTable_Nuzleaf[] = { overworld_ascending_frames(gObjectEventPic_Nuzleaf, 4, 4), }; +static const struct SpriteFrameImage sPicTable_NuzleafF[] = { + overworld_ascending_frames(gObjectEventPic_NuzleafF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Shiftry[] = { overworld_ascending_frames(gObjectEventPic_Shiftry, 4, 4), }; +static const struct SpriteFrameImage sPicTable_ShiftryF[] = { + overworld_ascending_frames(gObjectEventPic_ShiftryF, 4, 4), +}; #endif //P_FAMILY_SEEDOT #if P_FAMILY_TAILLOW @@ -2143,9 +2314,15 @@ static const struct SpriteFrameImage sPicTable_Aggron[] = { static const struct SpriteFrameImage sPicTable_Meditite[] = { overworld_ascending_frames(gObjectEventPic_Meditite, 4, 4), }; +static const struct SpriteFrameImage sPicTable_MedititeF[] = { + overworld_ascending_frames(gObjectEventPic_MedititeF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Medicham[] = { overworld_ascending_frames(gObjectEventPic_Medicham, 4, 4), }; +static const struct SpriteFrameImage sPicTable_MedichamF[] = { + overworld_ascending_frames(gObjectEventPic_MedichamF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_MedichamMega[] = { overworld_ascending_frames(gObjectEventPic_MedichamMega, 4, 4), @@ -2197,10 +2374,16 @@ static const struct SpriteFrameImage sPicTable_Budew[] = { static const struct SpriteFrameImage sPicTable_Roselia[] = { overworld_ascending_frames(gObjectEventPic_Roselia, 4, 4), }; +static const struct SpriteFrameImage sPicTable_RoseliaF[] = { + overworld_ascending_frames(gObjectEventPic_RoseliaF, 4, 4), +}; #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Roserade[] = { overworld_ascending_frames(gObjectEventPic_Roserade, 4, 4), }; +static const struct SpriteFrameImage sPicTable_RoseradeF[] = { + overworld_ascending_frames(gObjectEventPic_RoseradeF, 4, 4), +}; #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_ROSELIA @@ -2209,9 +2392,15 @@ static const struct SpriteFrameImage sPicTable_Roserade[] = { static const struct SpriteFrameImage sPicTable_Gulpin[] = { overworld_ascending_frames(gObjectEventPic_Gulpin, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GulpinF[] = { + overworld_ascending_frames(gObjectEventPic_GulpinF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Swalot[] = { overworld_ascending_frames(gObjectEventPic_Swalot, 4, 4), }; +static const struct SpriteFrameImage sPicTable_SwalotF[] = { + overworld_ascending_frames(gObjectEventPic_SwalotF, 4, 4), +}; #endif //P_FAMILY_GULPIN #if P_FAMILY_CARVANHA @@ -2241,9 +2430,15 @@ static const struct SpriteFrameImage sPicTable_Wailord[] = { static const struct SpriteFrameImage sPicTable_Numel[] = { overworld_ascending_frames(gObjectEventPic_Numel, 4, 4), }; +static const struct SpriteFrameImage sPicTable_NumelF[] = { + overworld_ascending_frames(gObjectEventPic_NumelF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Camerupt[] = { overworld_ascending_frames(gObjectEventPic_Camerupt, 4, 4), }; +static const struct SpriteFrameImage sPicTable_CameruptF[] = { + overworld_ascending_frames(gObjectEventPic_CameruptF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_CameruptMega[] = { overworld_ascending_frames(gObjectEventPic_CameruptMega, 4, 4), @@ -2291,6 +2486,9 @@ static const struct SpriteFrameImage sPicTable_Cacnea[] = { static const struct SpriteFrameImage sPicTable_Cacturne[] = { overworld_ascending_frames(gObjectEventPic_Cacturne, 4, 4), }; +static const struct SpriteFrameImage sPicTable_CacturneF[] = { + overworld_ascending_frames(gObjectEventPic_CacturneF, 4, 4), +}; #endif //P_FAMILY_CACNEA #if P_FAMILY_SWABLU @@ -2383,6 +2581,9 @@ static const struct SpriteFrameImage sPicTable_Feebas[] = { static const struct SpriteFrameImage sPicTable_Milotic[] = { overworld_ascending_frames(gObjectEventPic_Milotic, 4, 4), }; +static const struct SpriteFrameImage sPicTable_MiloticF[] = { + overworld_ascending_frames(gObjectEventPic_MiloticF, 4, 4), +}; #endif //P_FAMILY_FEEBAS #if P_FAMILY_CASTFORM @@ -2510,6 +2711,9 @@ static const struct SpriteFrameImage sPicTable_Gorebyss[] = { static const struct SpriteFrameImage sPicTable_Relicanth[] = { overworld_ascending_frames(gObjectEventPic_Relicanth, 4, 4), }; +static const struct SpriteFrameImage sPicTable_RelicanthF[] = { + overworld_ascending_frames(gObjectEventPic_RelicanthF, 4, 4), +}; #endif //P_FAMILY_RELICANTH #if P_FAMILY_LUVDISC @@ -2686,42 +2890,72 @@ static const struct SpriteFrameImage sPicTable_Empoleon[] = { static const struct SpriteFrameImage sPicTable_Starly[] = { overworld_ascending_frames(gObjectEventPic_Starly, 4, 4), }; +static const struct SpriteFrameImage sPicTable_StarlyF[] = { + overworld_ascending_frames(gObjectEventPic_StarlyF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Staravia[] = { overworld_ascending_frames(gObjectEventPic_Staravia, 4, 4), }; +static const struct SpriteFrameImage sPicTable_StaraviaF[] = { + overworld_ascending_frames(gObjectEventPic_StaraviaF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Staraptor[] = { overworld_ascending_frames(gObjectEventPic_Staraptor, 4, 4), }; +static const struct SpriteFrameImage sPicTable_StaraptorF[] = { + overworld_ascending_frames(gObjectEventPic_StaraptorF, 4, 4), +}; #endif //P_FAMILY_STARLY #if P_FAMILY_BIDOOF static const struct SpriteFrameImage sPicTable_Bidoof[] = { overworld_ascending_frames(gObjectEventPic_Bidoof, 4, 4), }; +static const struct SpriteFrameImage sPicTable_BidoofF[] = { + overworld_ascending_frames(gObjectEventPic_BidoofF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Bibarel[] = { overworld_ascending_frames(gObjectEventPic_Bibarel, 4, 4), }; +static const struct SpriteFrameImage sPicTable_BibarelF[] = { + overworld_ascending_frames(gObjectEventPic_BibarelF, 4, 4), +}; #endif //P_FAMILY_BIDOOF #if P_FAMILY_KRICKETOT static const struct SpriteFrameImage sPicTable_Kricketot[] = { overworld_ascending_frames(gObjectEventPic_Kricketot, 4, 4), }; +static const struct SpriteFrameImage sPicTable_KricketotF[] = { + overworld_ascending_frames(gObjectEventPic_KricketotF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Kricketune[] = { overworld_ascending_frames(gObjectEventPic_Kricketune, 4, 4), }; +static const struct SpriteFrameImage sPicTable_KricketuneF[] = { + overworld_ascending_frames(gObjectEventPic_KricketuneF, 4, 4), +}; #endif //P_FAMILY_KRICKETOT #if P_FAMILY_SHINX static const struct SpriteFrameImage sPicTable_Shinx[] = { overworld_ascending_frames(gObjectEventPic_Shinx, 4, 4), }; +static const struct SpriteFrameImage sPicTable_ShinxF[] = { + overworld_ascending_frames(gObjectEventPic_ShinxF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Luxio[] = { overworld_ascending_frames(gObjectEventPic_Luxio, 4, 4), }; +static const struct SpriteFrameImage sPicTable_LuxioF[] = { + overworld_ascending_frames(gObjectEventPic_LuxioF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Luxray[] = { overworld_ascending_frames(gObjectEventPic_Luxray, 4, 4), }; +static const struct SpriteFrameImage sPicTable_LuxrayF[] = { + overworld_ascending_frames(gObjectEventPic_LuxrayF, 4, 4), +}; #endif //P_FAMILY_SHINX #if P_FAMILY_CRANIDOS @@ -2782,15 +3016,24 @@ static const struct SpriteFrameImage sPicTable_Vespiquen[] = { static const struct SpriteFrameImage sPicTable_Pachirisu[] = { overworld_ascending_frames(gObjectEventPic_Pachirisu, 4, 4), }; +static const struct SpriteFrameImage sPicTable_PachirisuF[] = { + overworld_ascending_frames(gObjectEventPic_PachirisuF, 4, 4), +}; #endif //P_FAMILY_PACHIRISU #if P_FAMILY_BUIZEL static const struct SpriteFrameImage sPicTable_Buizel[] = { overworld_ascending_frames(gObjectEventPic_Buizel, 4, 4), }; +static const struct SpriteFrameImage sPicTable_BuizelF[] = { + overworld_ascending_frames(gObjectEventPic_BuizelF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Floatzel[] = { overworld_ascending_frames(gObjectEventPic_Floatzel, 4, 4), }; +static const struct SpriteFrameImage sPicTable_FloatzelF[] = { + overworld_ascending_frames(gObjectEventPic_FloatzelF, 4, 4), +}; #endif //P_FAMILY_BUIZEL #if P_FAMILY_CHERUBI @@ -2886,12 +3129,21 @@ static const struct SpriteFrameImage sPicTable_Spiritomb[] = { static const struct SpriteFrameImage sPicTable_Gible[] = { overworld_ascending_frames(gObjectEventPic_Gible, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GibleF[] = { + overworld_ascending_frames(gObjectEventPic_GibleF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Gabite[] = { overworld_ascending_frames(gObjectEventPic_Gabite, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GabiteF[] = { + overworld_ascending_frames(gObjectEventPic_GabiteF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Garchomp[] = { overworld_ascending_frames(gObjectEventPic_Garchomp, 4, 4), }; +static const struct SpriteFrameImage sPicTable_GarchompF[] = { + overworld_ascending_frames(gObjectEventPic_GarchompF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_GarchompMega[] = { overworld_ascending_frames(gObjectEventPic_GarchompMega, 4, 4), @@ -2923,9 +3175,6 @@ static const struct SpriteFrameImage sPicTable_HippopotasF[] = { static const struct SpriteFrameImage sPicTable_Hippowdon[] = { overworld_ascending_frames(gObjectEventPic_Hippowdon, 4, 4), }; -static const struct SpriteFrameImage sPicTable_HippowdonF[] = { - overworld_ascending_frames(gObjectEventPic_HippowdonF, 4, 4), -}; #endif //P_FAMILY_HIPPOPOTAS #if P_FAMILY_SKORUPI @@ -2941,9 +3190,15 @@ static const struct SpriteFrameImage sPicTable_Drapion[] = { static const struct SpriteFrameImage sPicTable_Croagunk[] = { overworld_ascending_frames(gObjectEventPic_Croagunk, 4, 4), }; +static const struct SpriteFrameImage sPicTable_CroagunkF[] = { + overworld_ascending_frames(gObjectEventPic_CroagunkF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Toxicroak[] = { overworld_ascending_frames(gObjectEventPic_Toxicroak, 4, 4), }; +static const struct SpriteFrameImage sPicTable_ToxicroakF[] = { + overworld_ascending_frames(gObjectEventPic_ToxicroakF, 4, 4), +}; #endif //P_FAMILY_CROAGUNK #if P_FAMILY_CARNIVINE @@ -2956,18 +3211,30 @@ static const struct SpriteFrameImage sPicTable_Carnivine[] = { static const struct SpriteFrameImage sPicTable_Finneon[] = { overworld_ascending_frames(gObjectEventPic_Finneon, 4, 4), }; +static const struct SpriteFrameImage sPicTable_FinneonF[] = { + overworld_ascending_frames(gObjectEventPic_FinneonF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Lumineon[] = { overworld_ascending_frames(gObjectEventPic_Lumineon, 4, 4), }; +static const struct SpriteFrameImage sPicTable_LumineonF[] = { + overworld_ascending_frames(gObjectEventPic_LumineonF, 4, 4), +}; #endif //P_FAMILY_FINNEON #if P_FAMILY_SNOVER static const struct SpriteFrameImage sPicTable_Snover[] = { overworld_ascending_frames(gObjectEventPic_Snover, 4, 4), }; +static const struct SpriteFrameImage sPicTable_SnoverF[] = { + overworld_ascending_frames(gObjectEventPic_SnoverF, 4, 4), +}; static const struct SpriteFrameImage sPicTable_Abomasnow[] = { overworld_ascending_frames(gObjectEventPic_Abomasnow, 4, 4), }; +static const struct SpriteFrameImage sPicTable_AbomasnowF[] = { + overworld_ascending_frames(gObjectEventPic_AbomasnowF, 4, 4), +}; #if P_MEGA_EVOLUTIONS /*static const struct SpriteFrameImage sPicTable_AbomasnowMega[] = { overworld_ascending_frames(gObjectEventPic_AbomasnowMega, 4, 4), diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index e24f1b7cc6..65b8c90876 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -30,8 +30,12 @@ #define OVERWORLD_PAL(...) \ .overworldPalette = DEFAULT(NULL, __VA_ARGS__), \ .overworldShinyPalette = DEFAULT_2(NULL, __VA_ARGS__), +#define OVERWORLD_PAL_FEMALE(...) \ + .overworldPaletteFemale = DEFAULT(NULL, __VA_ARGS__), \ + .overworldShinyPaletteFemale = DEFAULT_2(NULL, __VA_ARGS__), #else #define OVERWORLD_PAL(...) +#define OVERWORLD_PAL_FEMALE(...) #endif //OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE #define OVERWORLD(picTable, _size, shadow, _tracks, ...) \ @@ -75,9 +79,34 @@ .affineAnims = gDummySpriteAffineAnimTable, \ }, \ OVERWORLD_PAL(__VA_ARGS__) + +#define OVERWORLD_FEMALE(picTable, _size, shadow, _tracks, ...) \ +.overworldDataFemale = { \ + .tileTag = TAG_NONE, \ + .paletteTag = OBJ_EVENT_PAL_TAG_DYNAMIC, \ + .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, \ + .size = (_size == SIZE_32x32 ? 512 : 2048), \ + .width = (_size == SIZE_32x32 ? 32 : 64), \ + .height = (_size == SIZE_32x32 ? 32 : 64), \ + .paletteSlot = PALSLOT_NPC_1, \ + .shadowSize = shadow, \ + .inanimate = FALSE, \ + .compressed = COMP, \ + .tracks = _tracks, \ + .oam = (_size == SIZE_32x32 ? &gObjectEventBaseOam_32x32 : &gObjectEventBaseOam_64x64), \ + .subspriteTables = (_size == SIZE_32x32 ? sOamTables_32x32 : sOamTables_64x64), \ + .anims = sAnimTable_Following, \ + .images = picTable, \ + .affineAnims = gDummySpriteAffineAnimTable, \ +}, \ + OVERWORLD_PAL_FEMALE(__VA_ARGS__) + #else #define OVERWORLD(picTable, _size, shadow, _tracks, ...) #define OVERWORLD_SET_ANIM(picTable, _size, shadow, _tracks, _anims, ...) +#define OVERWORLD_FEMALE(picTable, _size, shadow, _tracks, ...) +#define OVERWORLD_PAL(...) +#define OVERWORLD_PAL_FEMALE(...) #endif //OW_POKEMON_OBJECT_EVENTS // Maximum value for a female Pokémon is 254 (MON_FEMALE) which is 100% female. diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index 3d3ac89168..5a518e0122 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -198,6 +198,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Venusaur, gShinyOverworldPalette_Venusaur ) + OVERWORLD_FEMALE( + sPicTable_VenusaurF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sVenusaurLevelUpLearnset, .teachableLearnset = sVenusaurTeachableLearnset, .formSpeciesIdTable = sVenusaurFormSpeciesIdTable, @@ -1205,6 +1211,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Butterfree, gShinyOverworldPalette_Butterfree ) + OVERWORLD_FEMALE( + sPicTable_ButterfreeF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sButterfreeLevelUpLearnset, .teachableLearnset = sButterfreeTeachableLearnset, .formSpeciesIdTable = sButterfreeFormSpeciesIdTable, @@ -1874,6 +1886,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Rattata, gShinyOverworldPalette_Rattata ) + OVERWORLD_FEMALE( + sPicTable_RattataF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sRattataLevelUpLearnset, .teachableLearnset = sRattataTeachableLearnset, .eggMoveLearnset = sRattataEggMoveLearnset, @@ -1942,6 +1960,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Raticate, gShinyOverworldPalette_Raticate ) + OVERWORLD_FEMALE( + sPicTable_RaticateF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sRaticateLevelUpLearnset, .teachableLearnset = sRaticateTeachableLearnset, .formSpeciesIdTable = sRaticateFormSpeciesIdTable, @@ -2596,6 +2620,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Pikachu, gShinyOverworldPalette_Pikachu ) + OVERWORLD_FEMALE( + sPicTable_PikachuF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3561,6 +3591,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Raichu, gShinyOverworldPalette_Raichu ) + OVERWORLD_FEMALE( + sPicTable_RaichuF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sRaichuLevelUpLearnset, .teachableLearnset = sRaichuTeachableLearnset, .formSpeciesIdTable = sRaichuFormSpeciesIdTable, @@ -5081,6 +5117,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Zubat, gShinyOverworldPalette_Zubat ) + OVERWORLD_FEMALE( + sPicTable_ZubatF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sZubatLevelUpLearnset, .teachableLearnset = sZubatTeachableLearnset, .eggMoveLearnset = sZubatEggMoveLearnset, @@ -5149,6 +5191,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Golbat, gShinyOverworldPalette_Golbat ) + OVERWORLD_FEMALE( + sPicTable_GolbatF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sGolbatLevelUpLearnset, .teachableLearnset = sGolbatTeachableLearnset, .evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_CROBAT}), @@ -5352,6 +5400,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Gloom, gShinyOverworldPalette_Gloom ) + OVERWORLD_FEMALE( + sPicTable_GloomF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sGloomLevelUpLearnset, .teachableLearnset = sGloomTeachableLearnset, .evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VILEPLUME}, @@ -5428,6 +5482,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Vileplume, gShinyOverworldPalette_Vileplume ) + OVERWORLD_FEMALE( + sPicTable_VileplumeF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sVileplumeLevelUpLearnset, .teachableLearnset = sVileplumeTeachableLearnset, }, @@ -7378,6 +7438,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Politoed, gShinyOverworldPalette_Politoed ) + OVERWORLD_FEMALE( + sPicTable_PolitoedF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sPolitoedLevelUpLearnset, .teachableLearnset = sPolitoedTeachableLearnset, }, @@ -7518,6 +7584,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Kadabra, gShinyOverworldPalette_Kadabra ) + OVERWORLD_FEMALE( + sPicTable_KadabraF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE + ) .levelUpLearnset = sKadabraLevelUpLearnset, .teachableLearnset = sKadabraTeachableLearnset, .evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_ALAKAZAM}, @@ -7596,6 +7668,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Alakazam, gShinyOverworldPalette_Alakazam ) + OVERWORLD_FEMALE( + sPicTable_AlakazamF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE + ) .levelUpLearnset = sAlakazamLevelUpLearnset, .teachableLearnset = sAlakazamTeachableLearnset, .formSpeciesIdTable = sAlakazamFormSpeciesIdTable, @@ -9873,6 +9951,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Doduo, gShinyOverworldPalette_Doduo ) + OVERWORLD_FEMALE( + sPicTable_DoduoF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sDoduoLevelUpLearnset, .teachableLearnset = sDoduoTeachableLearnset, .eggMoveLearnset = sDoduoEggMoveLearnset, @@ -9947,6 +10031,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Dodrio, gShinyOverworldPalette_Dodrio ) + OVERWORLD_FEMALE( + sPicTable_DodrioF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sDodrioLevelUpLearnset, .teachableLearnset = sDodrioTeachableLearnset, }, @@ -10942,6 +11032,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Steelix, gShinyOverworldPalette_Steelix ) + OVERWORLD_FEMALE( + sPicTable_SteelixF, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_SLITHER + ) .levelUpLearnset = sSteelixLevelUpLearnset, .teachableLearnset = sSteelixTeachableLearnset, .formSpeciesIdTable = sSteelixFormSpeciesIdTable, @@ -11144,6 +11240,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Hypno, gShinyOverworldPalette_Hypno ) + OVERWORLD_FEMALE( + sPicTable_HypnoF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sHypnoLevelUpLearnset, .teachableLearnset = sHypnoTeachableLearnset, }, @@ -12733,6 +12835,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Rhyhorn, gShinyOverworldPalette_Rhyhorn ) + OVERWORLD_FEMALE( + sPicTable_RhyhornF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sRhyhornLevelUpLearnset, .teachableLearnset = sRhyhornTeachableLearnset, .eggMoveLearnset = sRhyhornEggMoveLearnset, @@ -12800,6 +12908,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Rhydon, gShinyOverworldPalette_Rhydon ) + OVERWORLD_FEMALE( + sPicTable_RhydonF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sRhydonLevelUpLearnset, .teachableLearnset = sRhydonTeachableLearnset, .evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_PROTECTOR, SPECIES_RHYPERIOR}, @@ -12874,6 +12988,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Rhyperior, gShinyOverworldPalette_Rhyperior ) + OVERWORLD_FEMALE( + sPicTable_RhyperiorF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sRhyperiorLevelUpLearnset, .teachableLearnset = sRhyperiorTeachableLearnset, }, @@ -13205,6 +13325,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Tangrowth, gShinyOverworldPalette_Tangrowth ) + OVERWORLD_FEMALE( + sPicTable_TangrowthF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sTangrowthLevelUpLearnset, .teachableLearnset = sTangrowthTeachableLearnset, }, @@ -13614,6 +13740,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Goldeen, gShinyOverworldPalette_Goldeen ) + OVERWORLD_FEMALE( + sPicTable_GoldeenF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SPOT + ) .levelUpLearnset = sGoldeenLevelUpLearnset, .teachableLearnset = sGoldeenTeachableLearnset, .eggMoveLearnset = sGoldeenEggMoveLearnset, @@ -13682,6 +13814,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Seaking, gShinyOverworldPalette_Seaking ) + OVERWORLD_FEMALE( + sPicTable_SeakingF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SPOT + ) .levelUpLearnset = sSeakingLevelUpLearnset, .teachableLearnset = sSeakingTeachableLearnset, }, @@ -14152,6 +14290,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Scyther, gShinyOverworldPalette_Scyther ) + OVERWORLD_FEMALE( + sPicTable_ScytherF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sScytherLevelUpLearnset, .teachableLearnset = sScytherTeachableLearnset, .eggMoveLearnset = sScytherEggMoveLearnset, @@ -14225,6 +14369,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Scizor, gShinyOverworldPalette_Scizor ) + OVERWORLD_FEMALE( + sPicTable_ScizorF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sScizorLevelUpLearnset, .teachableLearnset = sScizorTeachableLearnset, .formSpeciesIdTable = sScizorFormSpeciesIdTable, @@ -15355,6 +15505,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Magikarp, gShinyOverworldPalette_Magikarp ) + OVERWORLD_FEMALE( + sPicTable_MagikarpF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SPOT + ) .tmIlliterate = TRUE, .levelUpLearnset = sMagikarpLevelUpLearnset, .teachableLearnset = sMagikarpTeachableLearnset, @@ -15422,6 +15578,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Gyarados, gShinyOverworldPalette_Gyarados ) + OVERWORLD_FEMALE( + sPicTable_GyaradosF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER + ) .levelUpLearnset = sGyaradosLevelUpLearnset, .teachableLearnset = sGyaradosTeachableLearnset, .formSpeciesIdTable = sGyaradosFormSpeciesIdTable, @@ -15745,6 +15907,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gOverworldPalette_Eevee, gShinyOverworldPalette_Eevee ) + OVERWORLD_FEMALE( + sPicTable_EeveeF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sEeveeLevelUpLearnset, .teachableLearnset = sEeveeTeachableLearnset, .eggMoveLearnset = sEeveeEggMoveLearnset, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index d9c83c3255..ae5a69439a 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -198,6 +198,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Meganium, gShinyOverworldPalette_Meganium ) + OVERWORLD_FEMALE( + sPicTable_MeganiumF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sMeganiumLevelUpLearnset, .teachableLearnset = sMeganiumTeachableLearnset, }, @@ -986,6 +992,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Ledyba, gShinyOverworldPalette_Ledyba ) + OVERWORLD_FEMALE( + sPicTable_LedybaF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_BUG + ) .levelUpLearnset = sLedybaLevelUpLearnset, .teachableLearnset = sLedybaTeachableLearnset, .eggMoveLearnset = sLedybaEggMoveLearnset, @@ -1054,6 +1066,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Ledian, gShinyOverworldPalette_Ledian ) + OVERWORLD_FEMALE( + sPicTable_LedianF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sLedianLevelUpLearnset, .teachableLearnset = sLedianTeachableLearnset, }, @@ -1645,6 +1663,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Xatu, gShinyOverworldPalette_Xatu ) + OVERWORLD_FEMALE( + sPicTable_XatuF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sXatuLevelUpLearnset, .teachableLearnset = sXatuTeachableLearnset, }, @@ -2248,6 +2272,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Sudowoodo, gShinyOverworldPalette_Sudowoodo ) + OVERWORLD_FEMALE( + sPicTable_SudowoodoF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sSudowoodoLevelUpLearnset, .teachableLearnset = sSudowoodoTeachableLearnset, .eggMoveLearnset = sSudowoodoEggMoveLearnset, @@ -2527,6 +2557,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Aipom, gShinyOverworldPalette_Aipom ) + OVERWORLD_FEMALE( + sPicTable_AipomF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sAipomLevelUpLearnset, .teachableLearnset = sAipomTeachableLearnset, .eggMoveLearnset = sAipomEggMoveLearnset, @@ -2595,6 +2631,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Ambipom, gShinyOverworldPalette_Ambipom ) + OVERWORLD_FEMALE( + sPicTable_AmbipomF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sAmbipomLevelUpLearnset, .teachableLearnset = sAmbipomTeachableLearnset, }, @@ -2929,6 +2971,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Wooper, gShinyOverworldPalette_Wooper ) + OVERWORLD_FEMALE( + sPicTable_WooperF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sWooperLevelUpLearnset, .teachableLearnset = sWooperTeachableLearnset, .eggMoveLearnset = sWooperEggMoveLearnset, @@ -2997,6 +3045,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Quagsire, gShinyOverworldPalette_Quagsire ) + OVERWORLD_FEMALE( + sPicTable_QuagsireF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sQuagsireLevelUpLearnset, .teachableLearnset = sQuagsireTeachableLearnset, }, @@ -3197,6 +3251,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Murkrow, gShinyOverworldPalette_Murkrow ) + OVERWORLD_FEMALE( + sPicTable_MurkrowF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sMurkrowLevelUpLearnset, .teachableLearnset = sMurkrowTeachableLearnset, .eggMoveLearnset = sMurkrowEggMoveLearnset, @@ -3624,6 +3684,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Wobbuffet, gShinyOverworldPalette_Wobbuffet ) + OVERWORLD_FEMALE( + sPicTable_WobbuffetF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .tmIlliterate = TRUE, .levelUpLearnset = sWobbuffetLevelUpLearnset, .teachableLearnset = sWobbuffetTeachableLearnset, @@ -3692,6 +3758,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Girafarig, gShinyOverworldPalette_Girafarig ) + OVERWORLD_FEMALE( + sPicTable_GirafarigF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sGirafarigLevelUpLearnset, .teachableLearnset = sGirafarigTeachableLearnset, .eggMoveLearnset = sGirafarigEggMoveLearnset, @@ -4150,6 +4222,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Gligar, gShinyOverworldPalette_Gligar ) + OVERWORLD_FEMALE( + sPicTable_GligarF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE + ) .levelUpLearnset = sGligarLevelUpLearnset, .teachableLearnset = sGligarTeachableLearnset, .eggMoveLearnset = sGligarEggMoveLearnset, @@ -4698,6 +4776,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Heracross, gShinyOverworldPalette_Heracross ) + OVERWORLD_FEMALE( + sPicTable_HeracrossF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sHeracrossLevelUpLearnset, .teachableLearnset = sHeracrossTeachableLearnset, .eggMoveLearnset = sHeracrossEggMoveLearnset, @@ -4829,6 +4913,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Sneasel, gShinyOverworldPalette_Sneasel ) + OVERWORLD_FEMALE( + sPicTable_SneaselF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sSneaselLevelUpLearnset, .teachableLearnset = sSneaselTeachableLearnset, .eggMoveLearnset = sSneaselEggMoveLearnset, @@ -4901,6 +4991,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Weavile, gShinyOverworldPalette_Weavile ) + OVERWORLD_FEMALE( + sPicTable_WeavileF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sWeavileLevelUpLearnset, .teachableLearnset = sWeavileTeachableLearnset, }, @@ -4970,6 +5066,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_SneaselHisuian, gShinyOverworldPalette_SneaselHisuian ) + OVERWORLD_FEMALE( + sPicTable_SneaselHisuianF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .isHisuianForm = TRUE, .levelUpLearnset = sSneaselHisuianLevelUpLearnset, .teachableLearnset = sSneaselHisuianTeachableLearnset, @@ -5176,6 +5278,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Ursaring, gShinyOverworldPalette_Ursaring ) + OVERWORLD_FEMALE( + sPicTable_UrsaringF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sUrsaringLevelUpLearnset, .teachableLearnset = sUrsaringTeachableLearnset, .evolutions = EVOLUTION({EVO_ITEM_NIGHT, ITEM_PEAT_BLOCK, SPECIES_URSALUNA}, @@ -5567,6 +5675,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Piloswine, gShinyOverworldPalette_Piloswine ) + OVERWORLD_FEMALE( + sPicTable_PiloswineF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sPiloswineLevelUpLearnset, .teachableLearnset = sPiloswineTeachableLearnset, .evolutions = EVOLUTION({EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_MAMOSWINE}), @@ -5638,6 +5752,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Mamoswine, gShinyOverworldPalette_Mamoswine ) + OVERWORLD_FEMALE( + sPicTable_MamoswineF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sMamoswineLevelUpLearnset, .teachableLearnset = sMamoswineTeachableLearnset, }, @@ -5984,6 +6104,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Octillery, gShinyOverworldPalette_Octillery ) + OVERWORLD_FEMALE( + sPicTable_OctilleryF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER + ) .levelUpLearnset = sOctilleryLevelUpLearnset, .teachableLearnset = sOctilleryTeachableLearnset, }, @@ -6379,6 +6505,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Houndoom, gShinyOverworldPalette_Houndoom ) + OVERWORLD_FEMALE( + sPicTable_HoundoomF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sHoundoomLevelUpLearnset, .teachableLearnset = sHoundoomTeachableLearnset, .formSpeciesIdTable = sHoundoomFormSpeciesIdTable, @@ -6569,6 +6701,12 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gOverworldPalette_Donphan, gShinyOverworldPalette_Donphan ) + OVERWORLD_FEMALE( + sPicTable_DonphanF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sDonphanLevelUpLearnset, .teachableLearnset = sDonphanTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 08fcce3dc3..002e0d460c 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -317,6 +317,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Torchic, gShinyOverworldPalette_Torchic ) + OVERWORLD_FEMALE( + sPicTable_TorchicF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sTorchicLevelUpLearnset, .teachableLearnset = sTorchicTeachableLearnset, .eggMoveLearnset = sTorchicEggMoveLearnset, @@ -385,6 +391,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Combusken, gShinyOverworldPalette_Combusken ) + OVERWORLD_FEMALE( + sPicTable_CombuskenF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sCombuskenLevelUpLearnset, .teachableLearnset = sCombuskenTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_BLAZIKEN}), @@ -457,6 +469,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Blaziken, gShinyOverworldPalette_Blaziken ) + OVERWORLD_FEMALE( + sPicTable_BlazikenF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sBlazikenLevelUpLearnset, .teachableLearnset = sBlazikenTeachableLearnset, .formSpeciesIdTable = sBlazikenFormSpeciesIdTable, @@ -1463,6 +1481,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Beautifly, gShinyOverworldPalette_Beautifly ) + OVERWORLD_FEMALE( + sPicTable_BeautiflyF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE + ) .levelUpLearnset = sBeautiflyLevelUpLearnset, .teachableLearnset = sBeautiflyTeachableLearnset, }, @@ -1609,6 +1633,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Dustox, gShinyOverworldPalette_Dustox ) + OVERWORLD_FEMALE( + sPicTable_DustoxF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE + ) .levelUpLearnset = sDustoxLevelUpLearnset, .teachableLearnset = sDustoxTeachableLearnset, }, @@ -1810,6 +1840,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Ludicolo, gShinyOverworldPalette_Ludicolo ) + OVERWORLD_FEMALE( + sPicTable_LudicoloF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sLudicoloLevelUpLearnset, .teachableLearnset = sLudicoloTeachableLearnset, }, @@ -1942,6 +1978,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Nuzleaf, gShinyOverworldPalette_Nuzleaf ) + OVERWORLD_FEMALE( + sPicTable_NuzleafF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sNuzleafLevelUpLearnset, .teachableLearnset = sNuzleafTeachableLearnset, .evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SHIFTRY}), @@ -2019,6 +2061,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Shiftry, gShinyOverworldPalette_Shiftry ) + OVERWORLD_FEMALE( + sPicTable_ShiftryF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sShiftryLevelUpLearnset, .teachableLearnset = sShiftryTeachableLearnset, }, @@ -4538,6 +4586,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Meditite, gShinyOverworldPalette_Meditite ) + OVERWORLD_FEMALE( + sPicTable_MedititeF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sMedititeLevelUpLearnset, .teachableLearnset = sMedititeTeachableLearnset, .eggMoveLearnset = sMedititeEggMoveLearnset, @@ -4605,6 +4659,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Medicham, gShinyOverworldPalette_Medicham ) + OVERWORLD_FEMALE( + sPicTable_MedichamF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sMedichamLevelUpLearnset, .teachableLearnset = sMedichamTeachableLearnset, .formSpeciesIdTable = sMedichamFormSpeciesIdTable, @@ -5268,6 +5328,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Roselia, gShinyOverworldPalette_Roselia ) + OVERWORLD_FEMALE( + sPicTable_RoseliaF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sRoseliaLevelUpLearnset, .teachableLearnset = sRoseliaTeachableLearnset, .eggMoveLearnset = sRoseliaEggMoveLearnset, @@ -5346,6 +5412,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Roserade, gShinyOverworldPalette_Roserade ) + OVERWORLD_FEMALE( + sPicTable_RoseradeF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sRoseradeLevelUpLearnset, .teachableLearnset = sRoseradeTeachableLearnset, }, @@ -5416,6 +5488,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Gulpin, gShinyOverworldPalette_Gulpin ) + OVERWORLD_FEMALE( + sPicTable_GulpinF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SPOT + ) .levelUpLearnset = sGulpinLevelUpLearnset, .teachableLearnset = sGulpinTeachableLearnset, .eggMoveLearnset = sGulpinEggMoveLearnset, @@ -5485,6 +5563,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Swalot, gShinyOverworldPalette_Swalot ) + OVERWORLD_FEMALE( + sPicTable_SwalotF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER + ) .levelUpLearnset = sSwalotLevelUpLearnset, .teachableLearnset = sSwalotTeachableLearnset, }, @@ -5873,6 +5957,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Numel, gShinyOverworldPalette_Numel ) + OVERWORLD_FEMALE( + sPicTable_NumelF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sNumelLevelUpLearnset, .teachableLearnset = sNumelTeachableLearnset, .eggMoveLearnset = sNumelEggMoveLearnset, @@ -5945,6 +6035,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Camerupt, gShinyOverworldPalette_Camerupt ) + OVERWORLD_FEMALE( + sPicTable_CameruptF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sCameruptLevelUpLearnset, .teachableLearnset = sCameruptTeachableLearnset, .formSpeciesIdTable = sCameruptFormSpeciesIdTable, @@ -6612,6 +6708,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Cacturne, gShinyOverworldPalette_Cacturne ) + OVERWORLD_FEMALE( + sPicTable_CacturneF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sCacturneLevelUpLearnset, .teachableLearnset = sCacturneTeachableLearnset, }, @@ -7885,6 +7987,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Milotic, gShinyOverworldPalette_Milotic ) + OVERWORLD_FEMALE( + sPicTable_MiloticF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER + ) .levelUpLearnset = sMiloticLevelUpLearnset, .teachableLearnset = sMiloticTeachableLearnset, }, @@ -9712,6 +9820,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gOverworldPalette_Relicanth, gShinyOverworldPalette_Relicanth ) + OVERWORLD_FEMALE( + sPicTable_RelicanthF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE + ) .levelUpLearnset = sRelicanthLevelUpLearnset, .teachableLearnset = sRelicanthTeachableLearnset, .eggMoveLearnset = sRelicanthEggMoveLearnset, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index 28584f70ea..fd7b8c0f70 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -671,6 +671,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Starly, gShinyOverworldPalette_Starly ) + OVERWORLD_FEMALE( + sPicTable_StarlyF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sStarlyLevelUpLearnset, .teachableLearnset = sStarlyTeachableLearnset, .eggMoveLearnset = sStarlyEggMoveLearnset, @@ -738,6 +744,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Staravia, gShinyOverworldPalette_Staravia ) + OVERWORLD_FEMALE( + sPicTable_StaraviaF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sStaraviaLevelUpLearnset, .teachableLearnset = sStaraviaTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_STARAPTOR}), @@ -810,6 +822,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Staraptor, gShinyOverworldPalette_Staraptor ) + OVERWORLD_FEMALE( + sPicTable_StaraptorF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sStaraptorLevelUpLearnset, .teachableLearnset = sStaraptorTeachableLearnset, }, @@ -877,6 +895,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Bidoof, gShinyOverworldPalette_Bidoof ) + OVERWORLD_FEMALE( + sPicTable_BidoofF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sBidoofLevelUpLearnset, .teachableLearnset = sBidoofTeachableLearnset, .eggMoveLearnset = sBidoofEggMoveLearnset, @@ -942,6 +966,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Bibarel, gShinyOverworldPalette_Bibarel ) + OVERWORLD_FEMALE( + sPicTable_BibarelF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sBibarelLevelUpLearnset, .teachableLearnset = sBibarelTeachableLearnset, }, @@ -1010,6 +1040,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Kricketot, gShinyOverworldPalette_Kricketot ) + OVERWORLD_FEMALE( + sPicTable_KricketotF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .tmIlliterate = TRUE, .levelUpLearnset = sKricketotLevelUpLearnset, .teachableLearnset = sKricketotTeachableLearnset, @@ -1078,6 +1114,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Kricketune, gShinyOverworldPalette_Kricketune ) + OVERWORLD_FEMALE( + sPicTable_KricketuneF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sKricketuneLevelUpLearnset, .teachableLearnset = sKricketuneTeachableLearnset, }, @@ -1145,6 +1187,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Shinx, gShinyOverworldPalette_Shinx ) + OVERWORLD_FEMALE( + sPicTable_ShinxF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sShinxLevelUpLearnset, .teachableLearnset = sShinxTeachableLearnset, .eggMoveLearnset = sShinxEggMoveLearnset, @@ -1212,6 +1260,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Luxio, gShinyOverworldPalette_Luxio ) + OVERWORLD_FEMALE( + sPicTable_LuxioF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sLuxioLevelUpLearnset, .teachableLearnset = sLuxioTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_LUXRAY}), @@ -1284,6 +1338,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Luxray, gShinyOverworldPalette_Luxray ) + OVERWORLD_FEMALE( + sPicTable_LuxrayF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sLuxrayLevelUpLearnset, .teachableLearnset = sLuxrayTeachableLearnset, }, @@ -2064,6 +2124,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Combee, gShinyOverworldPalette_Combee ) + OVERWORLD_FEMALE( + sPicTable_CombeeF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .tmIlliterate = TRUE, .levelUpLearnset = sCombeeLevelUpLearnset, .teachableLearnset = sCombeeTeachableLearnset, @@ -2195,6 +2261,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Pachirisu, gShinyOverworldPalette_Pachirisu ) + OVERWORLD_FEMALE( + sPicTable_PachirisuF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sPachirisuLevelUpLearnset, .teachableLearnset = sPachirisuTeachableLearnset, .eggMoveLearnset = sPachirisuEggMoveLearnset, @@ -2261,6 +2333,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Buizel, gShinyOverworldPalette_Buizel ) + OVERWORLD_FEMALE( + sPicTable_BuizelF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sBuizelLevelUpLearnset, .teachableLearnset = sBuizelTeachableLearnset, .eggMoveLearnset = sBuizelEggMoveLearnset, @@ -2326,6 +2404,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Floatzel, gShinyOverworldPalette_Floatzel ) + OVERWORLD_FEMALE( + sPicTable_FloatzelF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sFloatzelLevelUpLearnset, .teachableLearnset = sFloatzelTeachableLearnset, }, @@ -3659,6 +3743,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Gible, gShinyOverworldPalette_Gible ) + OVERWORLD_FEMALE( + sPicTable_GibleF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sGibleLevelUpLearnset, .teachableLearnset = sGibleTeachableLearnset, .eggMoveLearnset = sGibleEggMoveLearnset, @@ -3726,6 +3816,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Gabite, gShinyOverworldPalette_Gabite ) + OVERWORLD_FEMALE( + sPicTable_GabiteF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sGabiteLevelUpLearnset, .teachableLearnset = sGabiteTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 48, SPECIES_GARCHOMP}), @@ -3796,6 +3892,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Garchomp, gShinyOverworldPalette_Garchomp ) + OVERWORLD_FEMALE( + sPicTable_GarchompF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sGarchompLevelUpLearnset, .teachableLearnset = sGarchompTeachableLearnset, .formSpeciesIdTable = sGarchompFormSpeciesIdTable, @@ -4113,6 +4215,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Hippopotas, gShinyOverworldPalette_Hippopotas ) + OVERWORLD_FEMALE( + sPicTable_HippopotasF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sHippopotasLevelUpLearnset, .teachableLearnset = sHippopotasTeachableLearnset, .eggMoveLearnset = sHippopotasEggMoveLearnset, @@ -4182,6 +4290,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Hippowdon, gShinyOverworldPalette_Hippowdon ) + OVERWORLD_PAL_FEMALE( + gOverworldPalette_HippowdonF, + gShinyOverworldPalette_HippowdonF + ) .levelUpLearnset = sHippowdonLevelUpLearnset, .teachableLearnset = sHippowdonTeachableLearnset, }, @@ -4378,6 +4490,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Croagunk, gShinyOverworldPalette_Croagunk ) + OVERWORLD_FEMALE( + sPicTable_CroagunkF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sCroagunkLevelUpLearnset, .teachableLearnset = sCroagunkTeachableLearnset, .eggMoveLearnset = sCroagunkEggMoveLearnset, @@ -4446,6 +4564,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Toxicroak, gShinyOverworldPalette_Toxicroak ) + OVERWORLD_FEMALE( + sPicTable_ToxicroakF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sToxicroakLevelUpLearnset, .teachableLearnset = sToxicroakTeachableLearnset, }, @@ -4578,6 +4702,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Finneon, gShinyOverworldPalette_Finneon ) + OVERWORLD_FEMALE( + sPicTable_FinneonF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sFinneonLevelUpLearnset, .teachableLearnset = sFinneonTeachableLearnset, .eggMoveLearnset = sFinneonEggMoveLearnset, @@ -4645,6 +4775,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Lumineon, gShinyOverworldPalette_Lumineon ) + OVERWORLD_FEMALE( + sPicTable_LumineonF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sLumineonLevelUpLearnset, .teachableLearnset = sLumineonTeachableLearnset, }, @@ -4713,6 +4849,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Snover, gShinyOverworldPalette_Snover ) + OVERWORLD_FEMALE( + sPicTable_SnoverF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sSnoverLevelUpLearnset, .teachableLearnset = sSnoverTeachableLearnset, .eggMoveLearnset = sSnoverEggMoveLearnset, @@ -4780,6 +4922,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gOverworldPalette_Abomasnow, gShinyOverworldPalette_Abomasnow ) + OVERWORLD_FEMALE( + sPicTable_AbomasnowF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sAbomasnowLevelUpLearnset, .teachableLearnset = sAbomasnowTeachableLearnset, .formSpeciesIdTable = sAbomasnowFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index 9feade7f4e..87c1bf561c 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -1852,6 +1852,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gOverworldPalette_Unfezant, gShinyOverworldPalette_Unfezant ) + OVERWORLD_FEMALE( + sPicTable_UnfezantF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_UnfezantF, + gShinyOverworldPalette_UnfezantF + ) .levelUpLearnset = sUnfezantLevelUpLearnset, .teachableLearnset = sUnfezantTeachableLearnset, }, @@ -7818,6 +7826,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gOverworldPalette_Frillish, gShinyOverworldPalette_Frillish ) + OVERWORLD_FEMALE( + sPicTable_FrillishF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_FrillishF, + gShinyOverworldPalette_FrillishF + ) .levelUpLearnset = sFrillishLevelUpLearnset, .teachableLearnset = sFrillishTeachableLearnset, .eggMoveLearnset = sFrillishEggMoveLearnset, @@ -7889,6 +7905,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gOverworldPalette_Jellicent, gShinyOverworldPalette_Jellicent ) + OVERWORLD_FEMALE( + sPicTable_JellicentF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_JellicentF, + gShinyOverworldPalette_JellicentF + ) .levelUpLearnset = sJellicentLevelUpLearnset, .teachableLearnset = sJellicentTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 14d1bcf552..47df7969ca 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -1528,6 +1528,12 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = gOverworldPalette_Pyroar, gShinyOverworldPalette_Pyroar ) + OVERWORLD_FEMALE( + sPicTable_PyroarF, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT + ) .levelUpLearnset = sPyroarLevelUpLearnset, .teachableLearnset = sPyroarTeachableLearnset, }, diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 978d5b0bac..c2c9fdc42f 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1852,16 +1852,23 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), { struct SpriteTemplate *spriteTemplate; const struct SubspriteTable *subspriteTables; - const struct ObjectEventGraphicsInfo *graphicsInfo; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); struct Sprite *sprite; u8 spriteId; bool32 isShiny = graphicsId >= SPECIES_SHINY_TAG + OBJ_EVENT_GFX_MON_BASE; + spriteTemplate = Alloc(sizeof(struct SpriteTemplate)); + CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables); + if (isShiny) graphicsId -= SPECIES_SHINY_TAG; - spriteTemplate = Alloc(sizeof(struct SpriteTemplate)); - CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables); + if (OW_GFX_COMPRESS) + { + // Checking only for compressed here so as not to mess with decorations + if (graphicsInfo->compressed) + spriteTemplate->tileTag = LoadSheetGraphicsInfo(graphicsInfo, graphicsId, NULL); + } if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { @@ -1873,13 +1880,6 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), LoadObjectEventPalette(spriteTemplate->paletteTag); } - if (OW_GFX_COMPRESS) - { - graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); - // Checking only for compressed here so as not to mess with decorations - if (graphicsInfo->compressed) - spriteTemplate->tileTag = LoadSheetGraphicsInfo(graphicsInfo, graphicsId, NULL); - } spriteId = CreateSprite(spriteTemplate, x, y, subpriority); Free(spriteTemplate); @@ -1979,9 +1979,17 @@ static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, graphicsInfo = &gSpeciesInfo[form ? SPECIES_UNOWN_B + form - 1 : species].overworldData; break; default: - graphicsInfo = &gSpeciesInfo[species].overworldData; + if (form == 1 && gSpeciesInfo[species].overworldDataFemale.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) + { + graphicsInfo = &gSpeciesInfo[species].overworldDataFemale; + } + else + { + graphicsInfo = &gSpeciesInfo[species].overworldData; + } break; } + // Try to avoid OOB or undefined access if ((graphicsInfo->tileTag == 0 && species < NUM_SPECIES) || (graphicsInfo->tileTag != TAG_NONE && species >= NUM_SPECIES)) { @@ -1997,6 +2005,7 @@ static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) { u32 paletteNum; + bool32 female = (form == 1); // Use standalone palette, unless entry is OOB or NULL (fallback to front-sprite-based) #if OW_POKEMON_OBJECT_EVENTS == TRUE && OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE if ((shiny && gSpeciesInfo[species].overworldPalette) @@ -2008,10 +2017,21 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) if ((paletteNum = IndexOfSpritePaletteTag(palTag)) < 16) return paletteNum; spritePalette.tag = palTag; - if (shiny) - spritePalette.data = gSpeciesInfo[species].overworldShinyPalette; + if (female && gSpeciesInfo[species].overworldPaletteFemale != NULL) + { + if (shiny) + spritePalette.data = gSpeciesInfo[species].overworldShinyPaletteFemale; + else + spritePalette.data = gSpeciesInfo[species].overworldPaletteFemale; + } else - spritePalette.data = gSpeciesInfo[species].overworldPalette; + { + if (shiny) + spritePalette.data = gSpeciesInfo[species].overworldShinyPalette; + else + spritePalette.data = gSpeciesInfo[species].overworldPalette; + } + // Check if pal data must be decompressed if (IsLZ77Data(spritePalette.data, PLTT_SIZE_4BPP, PLTT_SIZE_4BPP)) @@ -2027,7 +2047,7 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) { // Note that the shiny palette tag is `species + SPECIES_SHINY_TAG`, which must be increased with more pokemon // so that palette tags do not overlap - const u32 *palette = GetMonSpritePalFromSpecies(species, shiny, FALSE); //ETODO + const u32 *palette = GetMonSpritePalFromSpecies(species, shiny, female); //ETODO // palette already loaded if ((paletteNum = IndexOfSpritePaletteTag(species)) < 16) return paletteNum; @@ -2139,6 +2159,7 @@ static bool8 GetMonInfo(struct Pokemon *mon, u16 *species, u8 *form, u8 *shiny) return FALSE; } *species = GetMonData(mon, MON_DATA_SPECIES); + *form = GetMonGender(mon) == MON_FEMALE; *shiny = IsMonShiny(mon); switch (*species) { @@ -2645,18 +2666,25 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables); spriteFrameImage.size = graphicsInfo->size; spriteTemplate.images = &spriteFrameImage; + if (OW_GFX_COMPRESS) spriteTemplate.tileTag = LoadSheetGraphicsInfo(graphicsInfo, objectEvent->graphicsId, NULL); - if (spriteTemplate.paletteTag != TAG_NONE && spriteTemplate.paletteTag != OBJ_EVENT_PAL_TAG_DYNAMIC) + + if (spriteTemplate.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) + { + u32 paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); + spriteTemplate.paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum); + } + else if (spriteTemplate.paletteTag != TAG_NONE) + { LoadObjectEventPalette(spriteTemplate.paletteTag); + } i = CreateSprite(&spriteTemplate, 0, 0, 0); if (i != MAX_SPRITES) { sprite = &gSprites[i]; // Use palette from species palette table - if (spriteTemplate.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) - sprite->oam.paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); if (OW_GFX_COMPRESS && sprite->usingSheet) sprite->sheetSpan = GetSpanPerImage(sprite->oam.shape, sprite->oam.size); GetMapCoordsFromSpritePos(x + objectEvent->currentCoords.x, y + objectEvent->currentCoords.y, &sprite->x, &sprite->y); diff --git a/src/pokemon.c b/src/pokemon.c index 91df0fc59f..84e0688c6b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6675,8 +6675,8 @@ void TrySpecialOverworldEvo(void) bool32 SpeciesHasGenderDifferences(u16 species) { if (gSpeciesInfo[species].frontPicFemale != NULL - || gSpeciesInfo[species].paletteFemale != NULL || gSpeciesInfo[species].backPicFemale != NULL + || gSpeciesInfo[species].paletteFemale != NULL || gSpeciesInfo[species].shinyPaletteFemale != NULL || gSpeciesInfo[species].iconSpriteFemale != NULL) return TRUE; diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index 87e97fe11c..87caf862ae 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -2001,7 +2001,10 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) gSprites[data->iconspriteId].oam.priority = 0; //Follower Sprite - data->followerspriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MON_BASE + species + (data->isShiny ? SPECIES_SHINY_TAG : 0), + u16 graphicsId = (OBJ_EVENT_GFX_MON_BASE + species) & OBJ_EVENT_GFX_SPECIES_MASK; + graphicsId |= data->isFemale << OBJ_EVENT_GFX_SPECIES_BITS; + graphicsId += data->isShiny ? SPECIES_SHINY_TAG : 0; + data->followerspriteId = CreateObjectGraphicsSprite(graphicsId, SpriteCB_Follower, VISUALIZER_FOLLOWER_X, VISUALIZER_FOLLOWER_Y, From 6f59d26753cc79a9526713d8935cc67b264704c8 Mon Sep 17 00:00:00 2001 From: wiz1989 <80073265+wiz1989@users.noreply.github.com> Date: Fri, 4 Oct 2024 18:42:15 +0200 Subject: [PATCH 266/544] updated Conversion 2 mechanics to 5+ (#5453) * updated Conversion 2 mechanics and added the toggle B_UPDATED_CONVERSION_2 * fixes and added new test cases * bugfixing and added EWRAM u16 gLastUsedMoveType * update after Pawkkie review --------- Co-authored-by: wiz1989 --- include/battle.h | 1 + include/config/battle.h | 1 + src/battle_main.c | 4 + src/battle_script_commands.c | 148 ++++++++++++----- src/data/moves_info.h | 2 +- test/battle/gimmick/terastal.c | 2 + test/battle/move_effect/conversion_2.c | 213 +++++++++++++++++++++++-- 7 files changed, 318 insertions(+), 53 deletions(-) diff --git a/include/battle.h b/include/battle.h index 582dcedfc2..636eb51cdb 100644 --- a/include/battle.h +++ b/include/battle.h @@ -1070,6 +1070,7 @@ extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT]; extern u16 gLastMoves[MAX_BATTLERS_COUNT]; extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT]; extern u16 gLastHitByType[MAX_BATTLERS_COUNT]; +extern u16 gLastUsedMoveType[MAX_BATTLERS_COUNT]; extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT]; extern u16 gLockedMoves[MAX_BATTLERS_COUNT]; extern u16 gLastUsedMove; diff --git a/include/config/battle.h b/include/config/battle.h index b00eb199a9..fbc41be6ba 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -70,6 +70,7 @@ #define B_RECOIL_IF_MISS_DMG GEN_LATEST // In Gen5+, Jump Kick and High Jump Kick will always do half of the user's max HP when missing. #define B_KLUTZ_FLING_INTERACTION GEN_LATEST // In Gen5+, Pokémon with the Klutz ability can't use Fling. #define B_UPDATED_CONVERSION GEN_LATEST // In Gen6+, Conversion changes the user's type to match their first move's. Before, it would choose a move at random. +#define B_UPDATED_CONVERSION_2 GEN_LATEST // In Gen5+, Conversion 2 changes the user's type to a type that resists the last move used by the selected target. Before, it would consider the last move being successfully hit by. Additionally, Struggle is considered Normal type before Gen 5. #define B_PP_REDUCED_BY_SPITE GEN_LATEST // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5. #define B_EXTRAPOLATED_MOVE_FLAGS TRUE // Adds move flags to moves that they don't officially have but would likely have if they were in the latest core series game. diff --git a/src/battle_main.c b/src/battle_main.c index 3f4f140f65..e0ec3023ec 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -181,6 +181,7 @@ EWRAM_DATA u16 gLastPrintedMoves[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastMoves[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastLandedMoves[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastHitByType[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA u16 gLastUsedMoveType[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastResultingMoves[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLockedMoves[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gLastUsedMove = 0; @@ -3029,6 +3030,7 @@ static void BattleStartClearSetData(void) gLastMoves[i] = MOVE_NONE; gLastLandedMoves[i] = MOVE_NONE; gLastHitByType[i] = 0; + gLastUsedMoveType[i] = 0; gLastResultingMoves[i] = MOVE_NONE; gLastHitBy[i] = 0xFF; gLockedMoves[i] = MOVE_NONE; @@ -3207,6 +3209,7 @@ void SwitchInClearSetData(u32 battler) gLastMoves[battler] = MOVE_NONE; gLastLandedMoves[battler] = MOVE_NONE; gLastHitByType[battler] = 0; + gLastUsedMoveType[battler] = 0; gLastResultingMoves[battler] = MOVE_NONE; gLastPrintedMoves[battler] = MOVE_NONE; gLastHitBy[battler] = 0xFF; @@ -3336,6 +3339,7 @@ const u8* FaintClearSetData(u32 battler) gLastMoves[battler] = MOVE_NONE; gLastLandedMoves[battler] = MOVE_NONE; gLastHitByType[battler] = 0; + gLastUsedMoveType[battler] = 0; gLastResultingMoves[battler] = MOVE_NONE; gLastPrintedMoves[battler] = MOVE_NONE; gLastHitBy[battler] = 0xFF; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index f16ee0bf76..ba372d1c54 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5916,12 +5916,14 @@ static void Cmd_moveend(void) gLastMoves[gBattlerAttacker] = gChosenMove; RecordKnownMove(gBattlerAttacker, gChosenMove); gLastResultingMoves[gBattlerAttacker] = gCurrentMove; + GET_MOVE_TYPE(gCurrentMove, gLastUsedMoveType[gBattlerAttacker]); } } else { gLastMoves[gBattlerAttacker] = MOVE_UNAVAILABLE; gLastResultingMoves[gBattlerAttacker] = MOVE_UNAVAILABLE; + gLastUsedMoveType[gBattlerAttacker] = 0; } if (!(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))) @@ -12953,60 +12955,122 @@ static void Cmd_settypetorandomresistance(void) { CMD_ARGS(const u8 *failInstr); - if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE - || gLastLandedMoves[gBattlerAttacker] == MOVE_UNAVAILABLE) + // Before Gen 5 Conversion 2 only worked on a move the attacker was actually hit by. + // This changed later to the last move used by the selected target. + if (B_UPDATED_CONVERSION_2 < GEN_5) { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (gBattleMoveEffects[gMovesInfo[gLastLandedMoves[gBattlerAttacker]].effect].twoTurnEffect - && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else if (gLastHitByType[gBattlerAttacker] == TYPE_STELLAR || gLastHitByType[gBattlerAttacker] == TYPE_MYSTERY) - { - gBattlescriptCurrInstr = cmd->failInstr; + if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE + || gLastLandedMoves[gBattlerAttacker] == MOVE_UNAVAILABLE) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (gBattleMoveEffects[gMovesInfo[gLastLandedMoves[gBattlerAttacker]].effect].twoTurnEffect + && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (gLastHitByType[gBattlerAttacker] == TYPE_STELLAR || gLastHitByType[gBattlerAttacker] == TYPE_MYSTERY) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + u32 i, resistTypes = 0; + u32 hitByType = gLastHitByType[gBattlerAttacker]; + + for (i = 0; i < NUMBER_OF_MON_TYPES; i++) // Find all types that resist. + { + switch (GetTypeModifier(hitByType, i)) + { + case UQ_4_12(0): + case UQ_4_12(0.5): + resistTypes |= gBitTable[i]; + break; + } + } + + while (resistTypes != 0) + { + i = Random() % NUMBER_OF_MON_TYPES; + if (resistTypes & gBitTable[i]) + { + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) + { + resistTypes &= ~(gBitTable[i]); // Type resists, but the user is already of this type. + } + else + { + SET_BATTLER_TYPE(gBattlerAttacker, i); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + } + } + + gBattlescriptCurrInstr = cmd->failInstr; + } } else { - u32 i, resistTypes = 0; - u32 hitByType = gLastHitByType[gBattlerAttacker]; - - for (i = 0; i < NUMBER_OF_MON_TYPES; i++) // Find all types that resist. + if (gLastResultingMoves[gBattlerTarget] == MOVE_NONE + || gLastResultingMoves[gBattlerTarget] == MOVE_UNAVAILABLE + || gLastResultingMoves[gBattlerTarget] == MOVE_STRUGGLE) { - switch (GetTypeModifier(hitByType, i)) - { - case UQ_4_12(0): - case UQ_4_12(0.5): - resistTypes |= gBitTable[i]; - break; - } + gBattlescriptCurrInstr = cmd->failInstr; } - - while (resistTypes != 0) + else if (IsSemiInvulnerable(gBattlerTarget, gCurrentMove)) { - i = Random() % NUMBER_OF_MON_TYPES; - if (resistTypes & gBitTable[i]) + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (gLastUsedMoveType[gBattlerTarget] == TYPE_NONE || gLastUsedMoveType[gBattlerTarget] == TYPE_STELLAR || gLastUsedMoveType[gBattlerTarget] == TYPE_MYSTERY) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + u32 i, resistTypes = 0; + + for (i = 0; i < NUMBER_OF_MON_TYPES; i++) // Find all types that resist. { - if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) + switch (GetTypeModifier(gLastUsedMoveType[gBattlerTarget], i)) { - resistTypes &= ~(gBitTable[i]); // Type resists, but the user is already of this type. - } - else - { - SET_BATTLER_TYPE(gBattlerAttacker, i); - PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); - gBattlescriptCurrInstr = cmd->nextInstr; - return; + case UQ_4_12(0): + case UQ_4_12(0.5): + resistTypes |= gBitTable[i]; + break; } } - } - gBattlescriptCurrInstr = cmd->failInstr; + while (resistTypes != 0) + { + i = Random() % NUMBER_OF_MON_TYPES; + if (resistTypes & gBitTable[i]) + { + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) + { + resistTypes &= ~(gBitTable[i]); // Type resists, but the user is already of this type. + } + else + { + SET_BATTLER_TYPE(gBattlerAttacker, i); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + } + } + + gBattlescriptCurrInstr = cmd->failInstr; + } } } diff --git a/src/data/moves_info.h b/src/data/moves_info.h index b6d0aaf3ca..cb23dcf5af 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -4511,7 +4511,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .type = TYPE_NORMAL, .accuracy = 0, .pp = 30, - .target = MOVE_TARGET_USER, + .target = B_UPDATED_MOVE_DATA >= GEN_5 ? MOVE_TARGET_SELECTED : MOVE_TARGET_USER, .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_RECOVER_HP }, diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 1b50bc4bcc..0484fcd497 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -509,6 +509,7 @@ SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Stellar-type Pokemon's base t } } +#if B_UPDATED_CONVERSION_2 < GEN_5 SINGLE_BATTLE_TEST("(TERA) Conversion2 fails if last hit by a Stellar-type move") { GIVEN { @@ -526,6 +527,7 @@ SINGLE_BATTLE_TEST("(TERA) Conversion2 fails if last hit by a Stellar-type move" MESSAGE("But it failed!"); } } +#endif SINGLE_BATTLE_TEST("(TERA) Roost does not remove Flying-type ground immunity when Terastallized into the Stellar type") { diff --git a/test/battle/move_effect/conversion_2.c b/test/battle/move_effect/conversion_2.c index 2e81212ef1..6c2d4d7f54 100644 --- a/test/battle/move_effect/conversion_2.c +++ b/test/battle/move_effect/conversion_2.c @@ -1,14 +1,207 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last move that hit the user (Gen 3-4)"); -TO_DO_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last move used by the target (Gen 5+)"); -TO_DO_BATTLE_TEST("Conversion 2's type change considers the type of moves called by other moves"); -TO_DO_BATTLE_TEST("Conversion 2's type change considers dynamic type moves"); // Eg. Weather Ball -TO_DO_BATTLE_TEST("Conversion 2's type change considers move types changed by Normalize and Electrify"); -TO_DO_BATTLE_TEST("Conversion 2's type change considers move types changed by Normalize"); -TO_DO_BATTLE_TEST("Conversion 2's type change considers Struggle to be Normal type (Gen 3-4)"); -TO_DO_BATTLE_TEST("Conversion 2 fails if the move used is of typeless damage (Gen 5+)"); -TO_DO_BATTLE_TEST("Conversion 2's type change considers status moves (Gen 5+)"); TO_DO_BATTLE_TEST("Conversion 2's type change considers Inverse Battles"); -TO_DO_BATTLE_TEST("Conversion 2 fails if the move used is Stellar Type"); + +#if B_UPDATED_CONVERSION_2 < GEN_5 +SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last move that hit the user (Gen 3-4)") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_OMINOUS_WIND); MOVE(opponent, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Wobbuffet used Ominous Wind!"); + // turn 1 + ONE_OF { + MESSAGE("Foe Wobbuffet transformed into the Normal type!"); + MESSAGE("Foe Wobbuffet transformed into the Dark type!"); + } + } +} + +SINGLE_BATTLE_TEST("Conversion 2's type change considers Struggle to be Normal type (Gen 3-4)") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_STRUGGLE); } + TURN { MOVE(player, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Foe Wobbuffet used Struggle!"); + // turn 2 + ONE_OF { + MESSAGE("Wobbuffet transformed into the Steel type!"); + MESSAGE("Wobbuffet transformed into the Rock type!"); + MESSAGE("Wobbuffet transformed into the Ghost type!"); + } + } +} +#endif + +#if B_UPDATED_CONVERSION_2 >= GEN_5 +SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last used target's move (Gen 5+)") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_OMINOUS_WIND); MOVE(opponent, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Wobbuffet used Ominous Wind!"); + // turn 1 + ONE_OF { + MESSAGE("Foe Wobbuffet transformed into the Normal type!"); + MESSAGE("Foe Wobbuffet transformed into the Dark type!"); + } + } +} + +SINGLE_BATTLE_TEST("Conversion 2's type change considers status moves (Gen 5+)") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CURSE); } + TURN { MOVE(player, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Foe Wobbuffet used Curse!"); + // turn 2 + ONE_OF { + MESSAGE("Wobbuffet transformed into the Normal type!"); + MESSAGE("Wobbuffet transformed into the Dark type!"); + } + } +} + +SINGLE_BATTLE_TEST("Conversion 2's type change considers the type of moves called by other moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_OMINOUS_WIND); MOVE(opponent, MOVE_MIRROR_MOVE); } + TURN { MOVE(player, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Foe Wobbuffet used Mirror Move!"); + // turn 2 + ONE_OF { + MESSAGE("Wobbuffet transformed into the Normal type!"); + MESSAGE("Wobbuffet transformed into the Dark type!"); + } + } +} + +SINGLE_BATTLE_TEST("Conversion 2's type change considers dynamic type moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HAIL); MOVE(opponent, MOVE_WEATHER_BALL); } + TURN { MOVE(player, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Foe Wobbuffet used Weather Ball!"); + // turn 2 + ONE_OF { + MESSAGE("Wobbuffet transformed into the Steel type!"); + MESSAGE("Wobbuffet transformed into the Fire type!"); + MESSAGE("Wobbuffet transformed into the Water type!"); + MESSAGE("Wobbuffet transformed into the Ice type!"); + } + } +} + +SINGLE_BATTLE_TEST("Conversion 2's type change considers move types changed by Normalize and Electrify") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_NORMALIZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ELECTRIFY); MOVE(opponent, MOVE_POUND); } + TURN { MOVE(player, MOVE_CONVERSION_2); } + TURN { MOVE(player, MOVE_WATER_GUN); MOVE(opponent, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Wobbuffet used Electrify!"); + MESSAGE("Foe Wobbuffet used Pound!"); + // turn 2 + ONE_OF { + MESSAGE("Wobbuffet transformed into the Ground type!"); + MESSAGE("Wobbuffet transformed into the Dragon type!"); + MESSAGE("Wobbuffet transformed into the Grass type!"); + MESSAGE("Wobbuffet transformed into the Electric type!"); + } + // turn 3 + MESSAGE("Wobbuffet used Water Gun!"); + ONE_OF { + MESSAGE("Foe Wobbuffet transformed into the Steel type!"); + MESSAGE("Foe Wobbuffet transformed into the Rock type!"); + MESSAGE("Foe Wobbuffet transformed into the Ghost type!"); + } + } +} + +SINGLE_BATTLE_TEST("Conversion 2's type change fails targeting Struggle (Gen 5+)") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_STRUGGLE); } + TURN { MOVE(player, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Foe Wobbuffet used Struggle!"); + // turn 2 + MESSAGE("Wobbuffet used Conversion 2!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Conversion 2 fails if the move used is of typeless damage (Gen 5+)") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ENTEI); + } WHEN { + TURN { MOVE(opponent, MOVE_BURN_UP); } + TURN { MOVE(opponent, MOVE_REVELATION_DANCE); } + TURN { MOVE(player, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Foe Entei used Burn Up!"); + // turn 2 + MESSAGE("Foe Entei used Revelation Dance!"); + // turn 3 + MESSAGE("Wobbuffet used Conversion 2!"); + MESSAGE("But it failed!"); + } +} +#endif + +SINGLE_BATTLE_TEST("Conversion 2 fails if the targeted move is Stellar Type") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CONVERSION_2); } + } SCENE { + // turn 1 + MESSAGE("Wobbuffet used Tera Blast!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); + // turn 1 + MESSAGE("Foe Wobbuffet used Conversion 2!"); + MESSAGE("But it failed!"); + } +} From 06fefe33186845d3bd851a3bcf18f8eeb7d33346 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sun, 6 Oct 2024 15:05:29 -0400 Subject: [PATCH 267/544] Various AI fixes (#5474) * fix AI mirror move check viability call * fix EFFECT_ABSORB missing break in AI_CalcMoveEffectScore --------- Co-authored-by: ghoulslash --- src/battle_ai_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 903b0c7d9f..e41be6971c 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3302,6 +3302,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_ABSORB: if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT && effectiveness >= AI_EFFECTIVENESS_x1) ADJUST_SCORE(DECENT_EFFECT); + break; case EFFECT_EXPLOSION: case EFFECT_MEMENTO: if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_WILL_SUICIDE && gBattleMons[battlerDef].statStages[STAT_EVASION] < 7) @@ -3316,7 +3317,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_MIRROR_MOVE: if (predictedMove != MOVE_NONE) - return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score); + return AI_CheckViability(battlerAtk, battlerDef, predictedMove, score); break; case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_USER_ALLY: From 0dcb28ba0ef07b2fa2bd71c01d7dd755af5b29b2 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Mon, 7 Oct 2024 08:07:23 -0700 Subject: [PATCH 268/544] Add OW_UNION_DISABLE_CHECK and OW_FLAG_MOVE_UNION_ROOM_CHECK (#5448) * First addition of both checks * Updated config file * fixed spacing * Updated spacing * Fixed issues where feature was always on * Update overworld.h fixed spacing per https://github.com/rh-hideout/pokeemerald-expansion/pull/5448#discussion_r1789647611 --- data/scripts/cable_club.inc | 4 ++++ data/scripts/pkmn_center_nurse.inc | 5 +++++ include/config/overworld.h | 4 +++- include/link.h | 1 + src/link.c | 14 ++++++++++++++ src/union_room.c | 6 ++++++ 6 files changed, 33 insertions(+), 1 deletion(-) diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index e810e354a5..9120787ea9 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -1258,7 +1258,11 @@ EventScript_CloseMossdeepGameCornerBarrier:: CableClub_OnResume: special InitUnionRoom +.if OW_FLAG_MOVE_UNION_ROOM_CHECK != 0 + return +.else end +.endif MossdeepCity_GameCorner_1F_EventScript_InfoMan2:: lock diff --git a/data/scripts/pkmn_center_nurse.inc b/data/scripts/pkmn_center_nurse.inc index 5cef458749..4aca9d768b 100644 --- a/data/scripts/pkmn_center_nurse.inc +++ b/data/scripts/pkmn_center_nurse.inc @@ -36,6 +36,11 @@ EventScript_PkmnCenterNurse_TakeAndHealPkmn:: applymovement VAR_0x800B, Movement_PkmnCenterNurse_Turn @ Changed from Common_Movement_WalkInPlaceFasterLeft to force the follower to enter their Poké Ball waitmovement 0 dofieldeffect FLDEFF_POKECENTER_HEAL +.if OW_UNION_DISABLE_CHECK == FALSE && OW_FLAG_MOVE_UNION_ROOM_CHECK != 0 + setflag OW_FLAG_MOVE_UNION_ROOM_CHECK + call CableClub_OnResume + clearflag OW_FLAG_MOVE_UNION_ROOM_CHECK +.endif waitfieldeffect FLDEFF_POKECENTER_HEAL applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterDown waitmovement 0 diff --git a/include/config/overworld.h b/include/config/overworld.h index 3298a03209..dd109b7104 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -106,6 +106,8 @@ #define OW_POPUP_BW_ALPHA_BLEND FALSE // Enables alpha blending/transparency for the pop-ups. Mainly intended to be used with the black color option. // Pokémon Center -#define OW_IGNORE_EGGS_ON_HEAL GEN_LATEST // In Gen 4+, the nurse in the Pokémon Center does not heal Eggs on healing machine. +#define OW_IGNORE_EGGS_ON_HEAL GEN_LATEST // In Gen 4+, the nurse in the Pokémon Center does not heal Eggs on healing machine. +#define OW_UNION_DISABLE_CHECK FALSE // When TRUE, the nurse does not inform the player if there is a trainer waiting in the Union Room. This speeds up the loading of the Pokémon Center. +#define OW_FLAG_MOVE_UNION_ROOM_CHECK 0 // If this flag is set, the game will only check if players are in the Union Room while healing Pokémon, and not when players enter the Pokémon Center. This speeds up the loading of the Pokémon Center. This is ignored if OW_UNION_DISABLE_CHECK is TRUE. #endif // GUARD_CONFIG_OVERWORLD_H diff --git a/include/link.h b/include/link.h index 66dd5fecd2..6763065055 100644 --- a/include/link.h +++ b/include/link.h @@ -344,5 +344,6 @@ bool8 DoesLinkPlayerCountMatchSaved(void); void SetCloseLinkCallbackAndType(u16 type); bool32 IsSendingKeysToLink(void); u32 GetLinkRecvQueueLength(void); +bool32 ShouldCheckForUnionRoom(void); #endif // GUARD_LINK_H diff --git a/src/link.c b/src/link.c index f784a36c67..a78e69260a 100644 --- a/src/link.c +++ b/src/link.c @@ -2367,3 +2367,17 @@ void ResetRecvBuffer(void) } } } + +bool32 ShouldCheckForUnionRoom(void) +{ + if (OW_UNION_DISABLE_CHECK) + return FALSE; + + if (OW_FLAG_MOVE_UNION_ROOM_CHECK == 0) + return TRUE; + + if (FlagGet(OW_FLAG_MOVE_UNION_ROOM_CHECK)) + return TRUE; + + return FALSE; +} diff --git a/src/union_room.c b/src/union_room.c index f4ee01d1b4..ac4c61035a 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3294,6 +3294,9 @@ void InitUnionRoom(void) { struct WirelessLink_URoom *data; + if (!ShouldCheckForUnionRoom()) + return; + sUnionRoomPlayerName[0] = EOS; CreateTask(Task_InitUnionRoom, 0); sWirelessLinkMain.uRoom = sWirelessLinkMain.uRoom; // Needed to match. @@ -3377,6 +3380,9 @@ static void Task_InitUnionRoom(u8 taskId) bool16 BufferUnionRoomPlayerName(void) { + if (!ShouldCheckForUnionRoom()) + return FALSE; + if (sUnionRoomPlayerName[0] != EOS) { StringCopy(gStringVar1, sUnionRoomPlayerName); From f8f4fc9afd92ce5df431714f4dfa4602dd84dd5b Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Tue, 8 Oct 2024 14:02:31 +0200 Subject: [PATCH 269/544] Removed old checksum matching workaround (#5480) Co-authored-by: Hedara --- .../rayquaza_scene/scene_3/rayquaza_tail.png | Bin 264 -> 268 bytes graphics_file_rules.mk | 4 ---- src/data/graphics/rayquaza_scene.h | 4 +--- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/graphics/rayquaza_scene/scene_3/rayquaza_tail.png b/graphics/rayquaza_scene/scene_3/rayquaza_tail.png index 7e0577df15569122e3974c00edaa5557dc66d8ab..796548e56a83ff88119681c857cea9acb8eff7db 100644 GIT binary patch delta 194 zcmV;z06qVR0*nHX7Z-pC0{{R3HA@)~00001b5ch_0Itp)>5(Bne~L*&K~zYI?UKm~ z!!Qg)wG7CY*8l&vRmdS)a%pKo3x3CkH4J8muEUIoIf`M7EQSjU0u1G0Nic92PjC@m zlnY{o#7q|=Gd1H>%khXTxCuxVnnTY*+D$FeZlI4@#Iu!8HwI{|V%zt~Jbp}fq4v4> w75->aZ9!BQM7jByAo$9rZkW_!u~@v#3z9qq5*qa2o&W#<07*qoM6N<$g7!vFSpWb4 delta 190 zcmV;v073tZ0*C^T7Yc|30{{R39O!m@kuE=flSxEDR5*=eU?35cGYCQ$6@`vaMx$c^ zm{B5P*bZfgcz}fpT|^)vh0YQXHNsBf5M9DbA0P}ysCf)5hEN70oZ$pxI71aPI14}- z!U|A^h(3$~)5c;8Rn1}tw*#uJ#MvH9vx~IrgB?^1WSA3RPz%s5=-?s701Gh&5dm~5 s1|ocoU<@aiL9k#YE9geSC>Uq}09~Uhl5dDBXaE2J07*qoM6N<$f^IrL!T> $@ - $(RAYQUAZAGFXDIR)/scene_4/streaks.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 19 -Wnum_tiles diff --git a/src/data/graphics/rayquaza_scene.h b/src/data/graphics/rayquaza_scene.h index 660f07416c..e999e947fb 100644 --- a/src/data/graphics/rayquaza_scene.h +++ b/src/data/graphics/rayquaza_scene.h @@ -24,9 +24,7 @@ const u32 gRaySceneTakesFlight_Bg_Tilemap[] = INCBIN_U32("graphics/rayquaz // Scene 3 (RAY_ANIM_DESCENDS) const u32 gRaySceneDescends_Rayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza.4bpp.lz"); -// for some reason there are an extra 0xC bytes at the end of the original rayquaza_tail.4bpp, so in order to produce the correct lz, -// we have to cat the bytes at the end with a make rule. not sure why those bytes are there, it may have been a bug in Game Freak's software. -const u32 gRaySceneDescends_RayquazaTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza_tail_fix.4bpp.lz"); +const u32 gRaySceneDescends_RayquazaTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza_tail.4bpp.lz"); const u32 gRaySceneDescends_Bg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.4bpp.lz"); const u32 gRaySceneDescends_Light_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/light.4bpp.lz"); // uses pal 2 of gRaySceneDescends_Bg_Pal const u32 gRaySceneDescends_Bg_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.gbapal.lz"); From efad9a32a972bf53f6a81b3d5ae8694c358a4625 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Tue, 8 Oct 2024 13:04:35 -0400 Subject: [PATCH 270/544] Fix AI tests using PASSES_RANDOMLY (#5486) --- include/test/battle.h | 14 ++++- test/battle/ai/ai_switching.c | 14 +---- test/test_runner_battle.c | 105 +++++++++++++++++----------------- 3 files changed, 65 insertions(+), 68 deletions(-) diff --git a/include/test/battle.h b/include/test/battle.h index c28410948d..041ebc1c72 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -645,6 +645,15 @@ struct AILogLine s16 score; }; +// Data which is updated by the test runner during a battle and needs to +// be reset between trials. +struct BattleTrialData +{ + u8 lastActionTurn; + u8 queuedEvent; + u8 aiActionsPlayed[MAX_BATTLERS_COUNT]; +}; + struct BattleTestData { u8 stack[BATTLE_TEST_STACK_SIZE]; @@ -676,20 +685,19 @@ struct BattleTestData u8 battleRecordSourceLineOffsets[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u16 recordIndexes[MAX_BATTLERS_COUNT]; struct BattlerTurn battleRecordTurns[MAX_TURNS][MAX_BATTLERS_COUNT]; - u8 lastActionTurn; u8 queuedEventsCount; u8 queueGroupType; u8 queueGroupStart; - u8 queuedEvent; struct QueuedEvent queuedEvents[MAX_QUEUED_EVENTS]; u8 expectedAiActionIndex[MAX_BATTLERS_COUNT]; - u8 aiActionsPlayed[MAX_BATTLERS_COUNT]; struct ExpectedAIAction expectedAiActions[MAX_BATTLERS_COUNT][MAX_EXPECTED_ACTIONS]; struct ExpectedAiScore expectedAiScores[MAX_BATTLERS_COUNT][MAX_TURNS][MAX_AI_SCORE_COMPARISION_PER_TURN]; // Max 4 comparisions per turn struct AILogLine aiLogLines[MAX_BATTLERS_COUNT][MAX_MON_MOVES][MAX_AI_LOG_LINES]; u8 aiLogPrintedForMove[MAX_BATTLERS_COUNT]; // Marks ai score log as printed for move, so the same log isn't displayed multiple times. u16 flagId; + + struct BattleTrialData trial; }; struct BattleTestRunnerState diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 3e97ec1f61..59a6d88493 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -378,28 +378,18 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if it can't deal damage to a mon with Wonder Guard 66% of the time") { - u32 aiOmniscientFlag = 0; - PARAMETRIZE { aiOmniscientFlag = 0; } - PARAMETRIZE { aiOmniscientFlag = AI_FLAG_OMNISCIENT; } PASSES_RANDOMLY(66, 100, RNG_AI_SWITCH_WONDER_GUARD); GIVEN { ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[0] == TYPE_BUG); ASSUME(gSpeciesInfo[SPECIES_SHEDINJA].types[1] == TYPE_GHOST); ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); ASSUME(gMovesInfo[MOVE_SHADOW_BALL].type == TYPE_GHOST); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiOmniscientFlag); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_SHEDINJA) { Moves(MOVE_TACKLE); } OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SHADOW_BALL); } } WHEN { - if(aiOmniscientFlag == 0) { - TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } - TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); } - } - else { - TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); } - } - + TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); } } } diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 6f318bbead..c8e4496030 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -567,19 +567,19 @@ void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability) s32 match; struct QueuedEvent *event; - if (DATA.queuedEvent == DATA.queuedEventsCount) + if (DATA.trial.queuedEvent == DATA.queuedEventsCount) return; - event = &DATA.queuedEvents[DATA.queuedEvent]; + event = &DATA.queuedEvents[DATA.trial.queuedEvent]; switch (event->groupType) { case QUEUE_GROUP_NONE: case QUEUE_GROUP_ONE_OF: - if (TryAbilityPopUp(DATA.queuedEvent, event->groupSize, battlerId, ability) != -1) - DATA.queuedEvent += event->groupSize; + if (TryAbilityPopUp(DATA.trial.queuedEvent, event->groupSize, battlerId, ability) != -1) + DATA.trial.queuedEvent += event->groupSize; break; case QUEUE_GROUP_NONE_OF: - queuedEvent = DATA.queuedEvent; + queuedEvent = DATA.trial.queuedEvent; do { if ((match = TryAbilityPopUp(queuedEvent, event->groupSize, battlerId, ability)) != -1) @@ -598,7 +598,7 @@ void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability) continue; if (TryAbilityPopUp(queuedEvent, event->groupSize, battlerId, ability) != -1) - DATA.queuedEvent = queuedEvent + event->groupSize; + DATA.trial.queuedEvent = queuedEvent + event->groupSize; } while (FALSE); break; } @@ -630,19 +630,19 @@ void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId) s32 match; struct QueuedEvent *event; - if (DATA.queuedEvent == DATA.queuedEventsCount) + if (DATA.trial.queuedEvent == DATA.queuedEventsCount) return; - event = &DATA.queuedEvents[DATA.queuedEvent]; + event = &DATA.queuedEvents[DATA.trial.queuedEvent]; switch (event->groupType) { case QUEUE_GROUP_NONE: case QUEUE_GROUP_ONE_OF: - if (TryAnimation(DATA.queuedEvent, event->groupSize, animType, animId) != -1) - DATA.queuedEvent += event->groupSize; + if (TryAnimation(DATA.trial.queuedEvent, event->groupSize, animType, animId) != -1) + DATA.trial.queuedEvent += event->groupSize; break; case QUEUE_GROUP_NONE_OF: - queuedEvent = DATA.queuedEvent; + queuedEvent = DATA.trial.queuedEvent; do { if ((match = TryAnimation(queuedEvent, event->groupSize, animType, animId)) != -1) @@ -661,7 +661,7 @@ void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId) continue; if (TryAnimation(queuedEvent, event->groupSize, animType, animId) != -1) - DATA.queuedEvent = queuedEvent + event->groupSize; + DATA.trial.queuedEvent = queuedEvent + event->groupSize; } while (FALSE); break; } @@ -720,19 +720,19 @@ void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP) s32 match; struct QueuedEvent *event; - if (DATA.queuedEvent == DATA.queuedEventsCount) + if (DATA.trial.queuedEvent == DATA.queuedEventsCount) return; - event = &DATA.queuedEvents[DATA.queuedEvent]; + event = &DATA.queuedEvents[DATA.trial.queuedEvent]; switch (event->groupType) { case QUEUE_GROUP_NONE: case QUEUE_GROUP_ONE_OF: - if (TryHP(DATA.queuedEvent, event->groupSize, battlerId, oldHP, newHP) != -1) - DATA.queuedEvent += event->groupSize; + if (TryHP(DATA.trial.queuedEvent, event->groupSize, battlerId, oldHP, newHP) != -1) + DATA.trial.queuedEvent += event->groupSize; break; case QUEUE_GROUP_NONE_OF: - queuedEvent = DATA.queuedEvent; + queuedEvent = DATA.trial.queuedEvent; do { if ((match = TryHP(queuedEvent, event->groupSize, battlerId, oldHP, newHP)) != -1) @@ -751,7 +751,7 @@ void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP) continue; if (TryHP(queuedEvent, event->groupSize, battlerId, oldHP, newHP) != -1) - DATA.queuedEvent = queuedEvent + event->groupSize; + DATA.trial.queuedEvent = queuedEvent + event->groupSize; } while (FALSE); break; } @@ -782,7 +782,7 @@ static u32 CountAiExpectMoves(struct ExpectedAIAction *expectedAction, u32 battl void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) { const char *filename = gTestRunnerState.test->filename; - u32 id = DATA.aiActionsPlayed[battlerId]; + u32 id = DATA.trial.aiActionsPlayed[battlerId]; struct ExpectedAIAction *expectedAction = &DATA.expectedAiActions[battlerId][id]; if (!expectedAction->actionSet) @@ -845,13 +845,13 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) } // Turn passed, clear logs from the turn ClearAiLog(battlerId); - DATA.aiActionsPlayed[battlerId]++; + DATA.trial.aiActionsPlayed[battlerId]++; } void TestRunner_Battle_CheckSwitch(u32 battlerId, u32 partyIndex) { const char *filename = gTestRunnerState.test->filename; - u32 id = DATA.aiActionsPlayed[battlerId]; + u32 id = DATA.trial.aiActionsPlayed[battlerId]; struct ExpectedAIAction *expectedAction = &DATA.expectedAiActions[battlerId][id]; if (!expectedAction->actionSet) @@ -865,7 +865,7 @@ void TestRunner_Battle_CheckSwitch(u32 battlerId, u32 partyIndex) if (expectedAction->target != partyIndex) Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected partyIndex %d, got %d", filename, expectedAction->sourceLine, expectedAction->target, partyIndex); } - DATA.aiActionsPlayed[battlerId]++; + DATA.trial.aiActionsPlayed[battlerId]++; } void TestRunner_Battle_InvalidNoHPMon(u32 battlerId, u32 partyIndex) @@ -1029,7 +1029,7 @@ void TestRunner_Battle_CheckAiMoveScores(u32 battlerId) } // We need to make sure that the expected move has the best score. We have to rule out a situation where the expected move is used, but it has the same number of points as some other moves. - aiAction = &DATA.expectedAiActions[battlerId][DATA.aiActionsPlayed[battlerId]]; + aiAction = &DATA.expectedAiActions[battlerId][DATA.trial.aiActionsPlayed[battlerId]]; if (aiAction->actionSet && !aiAction->pass) { s32 target = aiAction->target; @@ -1102,19 +1102,19 @@ void TestRunner_Battle_RecordExp(u32 battlerId, u32 oldExp, u32 newExp) s32 match; struct QueuedEvent *event; - if (DATA.queuedEvent == DATA.queuedEventsCount) + if (DATA.trial.queuedEvent == DATA.queuedEventsCount) return; - event = &DATA.queuedEvents[DATA.queuedEvent]; + event = &DATA.queuedEvents[DATA.trial.queuedEvent]; switch (event->groupType) { case QUEUE_GROUP_NONE: case QUEUE_GROUP_ONE_OF: - if (TryExp(DATA.queuedEvent, event->groupSize, battlerId, oldExp, newExp) != -1) - DATA.queuedEvent += event->groupSize; + if (TryExp(DATA.trial.queuedEvent, event->groupSize, battlerId, oldExp, newExp) != -1) + DATA.trial.queuedEvent += event->groupSize; break; case QUEUE_GROUP_NONE_OF: - queuedEvent = DATA.queuedEvent; + queuedEvent = DATA.trial.queuedEvent; do { if ((match = TryExp(queuedEvent, event->groupSize, battlerId, oldExp, newExp)) != -1) @@ -1133,7 +1133,7 @@ void TestRunner_Battle_RecordExp(u32 battlerId, u32 oldExp, u32 newExp) continue; if (TryExp(queuedEvent, event->groupSize, battlerId, oldExp, newExp) != -1) - DATA.queuedEvent = queuedEvent + event->groupSize; + DATA.trial.queuedEvent = queuedEvent + event->groupSize; } while (FALSE); break; } @@ -1191,19 +1191,19 @@ void TestRunner_Battle_RecordMessage(const u8 *string) s32 match; struct QueuedEvent *event; - if (DATA.queuedEvent == DATA.queuedEventsCount) + if (DATA.trial.queuedEvent == DATA.queuedEventsCount) return; - event = &DATA.queuedEvents[DATA.queuedEvent]; + event = &DATA.queuedEvents[DATA.trial.queuedEvent]; switch (event->groupType) { case QUEUE_GROUP_NONE: case QUEUE_GROUP_ONE_OF: - if (TryMessage(DATA.queuedEvent, event->groupSize, string) != -1) - DATA.queuedEvent += event->groupSize; + if (TryMessage(DATA.trial.queuedEvent, event->groupSize, string) != -1) + DATA.trial.queuedEvent += event->groupSize; break; case QUEUE_GROUP_NONE_OF: - queuedEvent = DATA.queuedEvent; + queuedEvent = DATA.trial.queuedEvent; do { if ((match = TryMessage(queuedEvent, event->groupSize, string)) != -1) @@ -1222,7 +1222,7 @@ void TestRunner_Battle_RecordMessage(const u8 *string) continue; if (TryMessage(queuedEvent, event->groupSize, string) != -1) - DATA.queuedEvent = queuedEvent + event->groupSize; + DATA.trial.queuedEvent = queuedEvent + event->groupSize; } while (FALSE); break; } @@ -1256,19 +1256,19 @@ void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1) s32 match; struct QueuedEvent *event; - if (DATA.queuedEvent == DATA.queuedEventsCount) + if (DATA.trial.queuedEvent == DATA.queuedEventsCount) return; - event = &DATA.queuedEvents[DATA.queuedEvent]; + event = &DATA.queuedEvents[DATA.trial.queuedEvent]; switch (event->groupType) { case QUEUE_GROUP_NONE: case QUEUE_GROUP_ONE_OF: - if (TryStatus(DATA.queuedEvent, event->groupSize, battlerId, status1) != -1) - DATA.queuedEvent += event->groupSize; + if (TryStatus(DATA.trial.queuedEvent, event->groupSize, battlerId, status1) != -1) + DATA.trial.queuedEvent += event->groupSize; break; case QUEUE_GROUP_NONE_OF: - queuedEvent = DATA.queuedEvent; + queuedEvent = DATA.trial.queuedEvent; do { if ((match = TryStatus(queuedEvent, event->groupSize, battlerId, status1)) != -1) @@ -1287,7 +1287,7 @@ void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1) continue; if (TryStatus(queuedEvent, event->groupSize, battlerId, status1) != -1) - DATA.queuedEvent = queuedEvent + event->groupSize; + DATA.trial.queuedEvent = queuedEvent + event->groupSize; } while (FALSE); break; } @@ -1307,22 +1307,22 @@ void TestRunner_Battle_AfterLastTurn(void) { const struct BattleTest *test = GetBattleTest(); - if (DATA.turns - 1 != DATA.lastActionTurn) + if (DATA.turns - 1 != DATA.trial.lastActionTurn) { const char *filename = gTestRunnerState.test->filename; - Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: %d TURNs specified, but %d ran", filename, SourceLine(0), DATA.turns, DATA.lastActionTurn + 1); + Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: %d TURNs specified, but %d ran", filename, SourceLine(0), DATA.turns, DATA.trial.lastActionTurn + 1); } - while (DATA.queuedEvent < DATA.queuedEventsCount - && DATA.queuedEvents[DATA.queuedEvent].groupType == QUEUE_GROUP_NONE_OF) + while (DATA.trial.queuedEvent < DATA.queuedEventsCount + && DATA.queuedEvents[DATA.trial.queuedEvent].groupType == QUEUE_GROUP_NONE_OF) { - DATA.queuedEvent += DATA.queuedEvents[DATA.queuedEvent].groupSize; + DATA.trial.queuedEvent += DATA.queuedEvents[DATA.trial.queuedEvent].groupSize; } - if (DATA.queuedEvent != DATA.queuedEventsCount) + if (DATA.trial.queuedEvent != DATA.queuedEventsCount) { const char *filename = gTestRunnerState.test->filename; - u32 line = SourceLine(DATA.queuedEvents[DATA.queuedEvent].sourceLineOffset); - const char *macro = sEventTypeMacros[DATA.queuedEvents[DATA.queuedEvent].type]; + u32 line = SourceLine(DATA.queuedEvents[DATA.trial.queuedEvent].sourceLineOffset); + const char *macro = sEventTypeMacros[DATA.queuedEvents[DATA.trial.queuedEvent].type]; Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Unmatched %s", filename, line, macro); } @@ -1395,8 +1395,7 @@ static void CB2_BattleTest_NextTrial(void) PrintTestName(); gTestRunnerState.result = TEST_RESULT_PASS; DATA.recordedBattle.rngSeed = MakeRngValue(STATE->runTrial); - DATA.queuedEvent = 0; - DATA.lastActionTurn = 0; + memset(&DATA.trial, 0, sizeof(DATA.trial)); SetVariablesForRecordedBattle(&DATA.recordedBattle); SetMainCallback2(CB2_InitBattle); } @@ -1892,7 +1891,7 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde if (DATA.battleRecordTypes[battlerId][recordIndex] != RECORDED_BYTE) { - DATA.lastActionTurn = gBattleResults.battleTurnCounter; + DATA.trial.lastActionTurn = gBattleResults.battleTurnCounter; if (actionType != DATA.battleRecordTypes[battlerId][recordIndex]) { @@ -1926,7 +1925,7 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde } else { - if (DATA.lastActionTurn == gBattleResults.battleTurnCounter) + if (DATA.trial.lastActionTurn == gBattleResults.battleTurnCounter) { const char *filename = gTestRunnerState.test->filename; Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: TURN %d incomplete", filename, SourceLine(0), gBattleResults.battleTurnCounter + 1); From a76f7fe92e960039071109731f5e9f2721f106d7 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 8 Oct 2024 14:45:09 -0300 Subject: [PATCH 271/544] Version 1.9.3 (#5485) * Version 1.9.3 * Updated to latest master --- .../ISSUE_TEMPLATE/01_battle_engine_bugs.yaml | 3 +- .../ISSUE_TEMPLATE/02_battle_ai_issues.yaml | 3 +- .github/ISSUE_TEMPLATE/04_other_errors.yaml | 3 +- README.md | 4 +- docs/SUMMARY.md | 32 ++- docs/changelogs/1.9.x/1.9.3.md | 106 ++++++++++ docs/team_procedures/expansion_versions.md | 187 ++++++++++++++++++ docs/{ => tutorials}/ai_flags.md | 0 docs/{ => tutorials}/ai_logic.md | 0 .../how_to_battle_script_command_macro.md | 0 docs/{ => tutorials}/how_to_new_move.md | 0 .../how_to_new_pokemon_1_6_0.md | 0 .../how_to_new_pokemon_1_7_0.md | 0 .../how_to_new_pokemon_1_8_0.md | 0 .../how_to_new_pokemon_1_9_0.md | 0 docs/{ => tutorials}/how_to_testing_system.md | 0 docs/{ => tutorials}/how_to_trainer_class.md | 0 include/constants/expansion.h | 4 +- src/party_menu.c | 2 +- 19 files changed, 317 insertions(+), 27 deletions(-) create mode 100644 docs/changelogs/1.9.x/1.9.3.md create mode 100644 docs/team_procedures/expansion_versions.md rename docs/{ => tutorials}/ai_flags.md (100%) rename docs/{ => tutorials}/ai_logic.md (100%) rename docs/{ => tutorials}/how_to_battle_script_command_macro.md (100%) rename docs/{ => tutorials}/how_to_new_move.md (100%) rename docs/{ => tutorials}/how_to_new_pokemon_1_6_0.md (100%) rename docs/{ => tutorials}/how_to_new_pokemon_1_7_0.md (100%) rename docs/{ => tutorials}/how_to_new_pokemon_1_8_0.md (100%) rename docs/{ => tutorials}/how_to_new_pokemon_1_9_0.md (100%) rename docs/{ => tutorials}/how_to_testing_system.md (100%) rename docs/{ => tutorials}/how_to_trainer_class.md (100%) diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 9ffdc70fba..8240a56801 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.2 (Latest release) + - 1.9.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.2 - 1.9.1 - 1.9.0 - 1.8.6 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index ce50b0bffd..5688f8a7fb 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.2 (Latest release) + - 1.9.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.2 - 1.9.1 - 1.9.0 - 1.8.6 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index c78093d60e..add0633d95 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.2 (Latest release) + - 1.9.3 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.2 - 1.9.1 - 1.9.0 - 1.8.6 diff --git a/README.md b/README.md index 37ea8336b7..427caafd0a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ pokeemerald-expansion is a decomp hack base project based off pret's [pokeemeral If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` -Based off RHH's pokeemerald-expansion 1.9.2 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.9.3 https://github.com/rh-hideout/pokeemerald-expansion/ ``` ## What features are included? @@ -178,7 +178,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple - Check your current version. - You can check in the debug menu's `Utilities -> Expansion Version` option. - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](CHANGELOG.md) to determine your version based on the features available on your repository. -- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.9.2, use `git pull RHH expansion/1.9.2`). +- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.9.3, use `git pull RHH expansion/1.9.3`). - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on) - Alternatively, you can update to unreleased versions of the expansion. - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`. diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index faeb069783..ac4698fdc3 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -5,20 +5,21 @@ - [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md) - [Run documentation site locally](local_mdbook/index.md) - [Ubuntu WSL1/WSL2](local_mdbook/ubuntu_WSL.md) -- [AI Flags](./ai_flags.md) - [Tutorials]() - - [How to add new AI Flags](./ai_logic.md) - - [How to add new battle script commands/macros](./how_to_battle_script_command_macro.md) - - [How to add a new move](./how_to_new_move.md) - - [How to add a new trainer class](./how_to_trainer_class.md) + - [What are AI Flags?](tutorials/ai_flags.md) + - [How to add new AI Flags](tutorials/ai_logic.md) + - [How to add new battle script commands/macros](tutorials/how_to_battle_script_command_macro.md) + - [How to add a new move](tutorials/how_to_new_move.md) + - [How to add a new trainer class](tutorials/how_to_trainer_class.md) - [How to add a new Pokémon]() - - [v1.9.x](./how_to_new_pokemon_1_9_0.md) - - [v1.8.x](./how_to_new_pokemon_1_8_0.md) - - [v1.7.x](./how_to_new_pokemon_1_7_0.md) - - [v1.6.x](./how_to_new_pokemon_1_6_0.md) - - [How to use the Testing System](./how_to_testing_system.md) + - [v1.9.x](tutorials/how_to_new_pokemon_1_9_0.md) + - [v1.8.x](tutorials/how_to_new_pokemon_1_8_0.md) + - [v1.7.x](tutorials/how_to_new_pokemon_1_7_0.md) + - [v1.6.x](tutorials/how_to_new_pokemon_1_6_0.md) + - [How to use the Testing System](tutorials/how_to_testing_system.md) - [Changelog](./CHANGELOG.md) - [1.9.x]() + - [Version 1.9.3](changelogs/1.9.x/1.9.3.md) - [Version 1.9.2](changelogs/1.9.x/1.9.2.md) - [Version 1.9.1](changelogs/1.9.x/1.9.1.md) - [Version 1.9.0](changelogs/1.9.x/1.9.0.md) @@ -30,43 +31,36 @@ - [Version 1.8.2](changelogs/1.8.x/1.8.2.md) - [Version 1.8.1](changelogs/1.8.x/1.8.1.md) - [Version 1.8.0](changelogs/1.8.x/1.8.0.md) - - [1.7.x]() - [Version 1.7.4](changelogs/1.7.x/1.7.4.md) - [Version 1.7.3](changelogs/1.7.x/1.7.3.md) - [Version 1.7.2](changelogs/1.7.x/1.7.2.md) - [Version 1.7.1](changelogs/1.7.x/1.7.1.md) - [Version 1.7.0](changelogs/1.7.x/1.7.0.md) - - [1.6.x]() - [Version 1.6.2](changelogs/1.6.x/1.6.2.md) - [Version 1.6.1](changelogs/1.6.x/1.6.1.md) - [Version 1.6.0](changelogs/1.6.x/1.6.0.md) - - [1.5.x]() - [Version 1.5.3](changelogs/1.5.x/1.5.3.md) - [Version 1.5.2](changelogs/1.5.x/1.5.2.md) - [Version 1.5.1](changelogs/1.5.x/1.5.1.md) - [Version 1.5.0](changelogs/1.5.x/1.5.0.md) - - [1.4.x]() - [Version 1.4.3](changelogs/1.4.x/1.4.3.md) - [Version 1.4.2](changelogs/1.4.x/1.4.2.md) - [Version 1.4.1](changelogs/1.4.x/1.4.1.md) - [Version 1.4.0](changelogs/1.4.x/1.4.0.md) - - [1.3.x]() - [Version 1.3.0](changelogs/1.3.x/1.3.0.md) - - [1.2.x]() - [Version 1.2.0](changelogs/1.2.x/1.2.0.md) - - [1.1.x]() - [Version 1.1.1](changelogs/1.1.x/1.1.1.md) - [Version 1.1.0](changelogs/1.1.x/1.1.0.md) - - [1.0.x]() - [Version 1.0.0](changelogs/1.0.x/1.0.0.md) - - [Pre-1.0.x]() - [Version 0.9.0](changelogs/0.9.x/0.9.0.md) +- [Team Procedures]() + - [How to make an Expansion version](team_procedures/expansion_versions.md) diff --git a/docs/changelogs/1.9.x/1.9.3.md b/docs/changelogs/1.9.x/1.9.3.md new file mode 100644 index 0000000000..2fe981435e --- /dev/null +++ b/docs/changelogs/1.9.x/1.9.3.md @@ -0,0 +1,106 @@ +# Version 1.9.3 + +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.9.3`. +``` + +## 🌋 *REFACTORS* 🌋 +📜 = Uses a migration script. +* Converted `settotemboost` command to `callnative` in [#5418](https://github.com/rh-hideout/pokeemerald-expansion/pull/5418) +* Removed unused `RESOURCE_FLAG_TRACED` in [#5430](https://github.com/rh-hideout/pokeemerald-expansion/pull/5430) +* Changed `MOVEEND_` defines to an enum in [#5449](https://github.com/rh-hideout/pokeemerald-expansion/pull/5449) + +## ✨ Feature Branches ✨ +### ***merrp/aarant's Followers*** +#### Fixed +* Fixed Expansion-exclusive issue that caused trainers to not play their "pointing" animation when Followers were out during battle intro by @kittenchilly in [#5406](https://github.com/rh-hideout/pokeemerald-expansion/pull/5406) + +## ⚔️ Battle General ⚔️ ## +### Changed +* Improved Mega evolution animation to make it a little smoother by @kleenxfeu in [#4816](https://github.com/rh-hideout/pokeemerald-expansion/pull/4816) +### Fixed +* Fixed affection check for exp multiplier by @Bassoonian in [#5421](https://github.com/rh-hideout/pokeemerald-expansion/pull/5421) +* Fixed multiple Primal Reversions not occurring if multiple battlers fainted on the previous turn by @PhallenTree in [#5430](https://github.com/rh-hideout/pokeemerald-expansion/pull/5430) + +## 🤹 Moves 🤹 +### Added +* Added missing `B_AFTER_YOU_TURN_ORDER` config by @PhallenTree in [#5400](https://github.com/rh-hideout/pokeemerald-expansion/pull/5400) + * Gen 5-7: After You fails if the order remains the same after using After You. + * Gen 8+: After You no longer fails if the turn order remains the same after using After You. +* Added missing `B_QUASH_TURN_ORDER` config by @PhallenTree in [#5400](https://github.com/rh-hideout/pokeemerald-expansion/pull/5400) + * Gen 5-7: If multiple Pokémon are affected by Quash, they move in the order they were affected by Quash. + * Gen 8+: If multiple Pokémon are affected by Quash, they now move fastest to slowest. +* Added missing updated `B_UPDATED_CONVERSION_2` by @wiz1989 in [#5453](https://github.com/rh-hideout/pokeemerald-expansion/pull/5453) + * Gens 2-4: Conversion 2 changes the user's type to a type that is resistant/immune to the last move the user was hit by. + * Gen 5+: Conversion 2 changes the user's type to a type that resists the last move used by the selected target. +### Fixed +* Fixed Scale Shot corrupting the move used on the next turn by @AlexOn1ine in [#5397](https://github.com/rh-hideout/pokeemerald-expansion/pull/5397) +* Fixed Growth's description not being updated based on `B_GROWTH_STAT_RAISE` by @nescioquid in [#5398](https://github.com/rh-hideout/pokeemerald-expansion/pull/5398) +* Fixed Quash not updating the battlers' actions correctly by @PhallenTree in [#5400](https://github.com/rh-hideout/pokeemerald-expansion/pull/5400) + * Cleanup by @PhallenTree in [#5430](https://github.com/rh-hideout/pokeemerald-expansion/pull/5430) +* Fixed Snatched Swallow not recovering HP if the Snatcher is not under the effect of Stockpile (should still heal) by @PhallenTree in [#5430](https://github.com/rh-hideout/pokeemerald-expansion/pull/5430) +* Fixed Counter users being damaged by Spiky Shield by @AlexOn1ine in [#5402](https://github.com/rh-hideout/pokeemerald-expansion/pull/5402) +* Fixed Electrified Dragon Darts not correctly avoiding targets with ability immunity (Volt Absorb, Motor Drive) by @PhallenTree in [#5430](https://github.com/rh-hideout/pokeemerald-expansion/pull/5430) +* Fixed Trace not activating a switch-in ability it traces (eg. Intimidate) by @PhallenTree in [#5430](https://github.com/rh-hideout/pokeemerald-expansion/pull/5430) + * Removed unused `RESOURCE_FLAG_TRACED`. +* Fixed recoil damage not triggering healing berries by @AlexOn1ine in [#5449](https://github.com/rh-hideout/pokeemerald-expansion/pull/5449) + * Also changed `MOVEEND_` defines to an enum. +## 🎭 Abilities 🎭 +### Fixed +* Fixed Dancer activating even if the dance move is stolen by Snatch by @PhallenTree in [#5430](https://github.com/rh-hideout/pokeemerald-expansion/pull/5430) +* Fixed Ability popup when multiple Pokémon faint at the same time by @PhallenTree in [#5430](https://github.com/rh-hideout/pokeemerald-expansion/pull/5430) +* Multiple ability fixes by @PhallenTree in [#5447](https://github.com/rh-hideout/pokeemerald-expansion/pull/5447) + * Fixed Protosynthesis/Quark Drive sometimes not activating ability popup despite still gaining the boost as they should. + * Fixed Protosynthesis/Quark Drive activating on Transformed battlers. + * Fixed Protosynthesis activating despite Cloud Nine being present on the field. + * Fixed Quark Drive not activating if the battler is not grounded. + * Fixed Protosynthesis/Quark Drive/Beast Boost stat raise priority when multiple stats are tied for the highest one. + * Before: `Attack, Defense, Speed, Special Attack, Special Defense`. + * After: `Attack, Defense, Special Attack, Special Defense, Speed`. + +## 🧶 Items 🧶 +### Fixed +* Fixed Ogerpon's Masks not increasing the power of moves by 20% by @AlexOn1ine in [#5391](https://github.com/rh-hideout/pokeemerald-expansion/pull/5391) +* Fixed Jubilife Muffin not working by @kittenchilly in [#5444](https://github.com/rh-hideout/pokeemerald-expansion/pull/5444) +* Fixed duplicating flute bug in double battles by @ghoulslash in [#5436](https://github.com/rh-hideout/pokeemerald-expansion/pull/5436) + +## 🤖 Battle AI 🤖 +### Fixed +* Fixed Trick/Switcheroo giving AI score even if the opponent has no held item by @kittenchilly in [#5412](https://github.com/rh-hideout/pokeemerald-expansion/pull/5412) +* Various AI fixes in `AI_CalcMoveEffectScore` by @ghoulslash in [#5474](https://github.com/rh-hideout/pokeemerald-expansion/pull/5474) + * Missing break from `EFFECT_ABSORB` switch case. + * Using last used move for Mirror Move instead of predicted move. + +## 🧹 Other Cleanup 🧹 +### Changed +* Converted `settotemboost` command to `callnative` by @ghoulslash in [#5418](https://github.com/rh-hideout/pokeemerald-expansion/pull/5418) +* Removed trailing whitespace by @kittenchilly in [#5455](https://github.com/rh-hideout/pokeemerald-expansion/pull/5455) +* Removed binary match workaround for Rayquaza's tail in Sootopolis' cutscene by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5480 +### Fixed +* Fixed potential uninitialized behavior in `ChangeOrderTargetAfterAttacker` by @AlexOn1ine in [#5393](https://github.com/rh-hideout/pokeemerald-expansion/pull/5393) +* Fallback on default BW map pop-up theme to reduce potential for error by @ravepossum in [#5392](https://github.com/rh-hideout/pokeemerald-expansion/pull/5392) +* Multiple typo fixes by @nescioquid in [#5398](https://github.com/rh-hideout/pokeemerald-expansion/pull/5398) +* VS Seeker documentation fix by @Bassoonian in [#5415](https://github.com/rh-hideout/pokeemerald-expansion/pull/5415) + +## 🧪 Test Runner 🧪 +### Added +* Added missing After You and Quash tests by @PhallenTree in [#5400](https://github.com/rh-hideout/pokeemerald-expansion/pull/5400) +### Changed +* Improved Tangling Hair test to make sure that chained effects do not overwrite relevant battler IDs by @ghoulslash in [#5423](https://github.com/rh-hideout/pokeemerald-expansion/pull/5423) +* Improved Full Heal item tests by @kittenchilly in [#5444](https://github.com/rh-hideout/pokeemerald-expansion/pull/5444) +### Fixed +* Fixed Wake-Up Slap test typo by @Pawkkie in [#5442](https://github.com/rh-hideout/pokeemerald-expansion/pull/5442) +* Fixed test assumption fail summary fields using more memory than needed by @AsparagusEduardo in [#5443](https://github.com/rh-hideout/pokeemerald-expansion/pull/5443) +* Fixed issue with `PASSES_RANDOMLY` in AI tests by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/5486 + +## New Contributors +* @nescioquid made their first contribution in [#5398](https://github.com/rh-hideout/pokeemerald-expansion/pull/5398) +* @kleenxfeu made their first contribution in [#4816](https://github.com/rh-hideout/pokeemerald-expansion/pull/4816) +* @wiz1989 made their first contribution in [#5453](https://github.com/rh-hideout/pokeemerald-expansion/pull/5453) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.9.2...expansion/1.9.3 + + + diff --git a/docs/team_procedures/expansion_versions.md b/docs/team_procedures/expansion_versions.md new file mode 100644 index 0000000000..b53631bfa5 --- /dev/null +++ b/docs/team_procedures/expansion_versions.md @@ -0,0 +1,187 @@ +# How to make an Expansion version + +*If you need instructions on how to release a new Expansion version, check out the enclosed instruction book. - AsparagusEduardo* + +## 1.- Autogenerating a changelog for the `master` branch. + *Requires Write access to the repo.* + +If the changelog you're making is for a minor version (Eg. 1.3.0), make sure to sync the `upcoming` branch with `master` before starting. Keep in mind that if there are unreleased changes in `master`, they should be made into a patch version released alongside minor version. +- Go to https://github.com/rh-hideout/pokeemerald-expansion/releases. +- Press the option "Draft a new release". +- Fill the following fields: + - In "Choose a tag", write the name of the tag for the desired release number. + - Eg. for version 1.2.3, write `expansion/1.2.3`. ***It cannot be an existing tag.*** + - In "Target" choose `master`. + - In "Previous tag", select the latest version released. +- Press "Generate release notes". This will fill the description with a list of PRs made to the `master` branch since the lastest release. +- You may copy the contents to your editor of choice for step 2. +- If the changelog you're making is for a minor version (Eg. 1.3.0), proceed to step 1B, without closing the current window. + +## 1B.- Autogenerating a changelog for the `upcoming` branch. +- Delete the text and title generated in the site. +- Change "Target" to `upcoming`. +- Press "Generate release notes". This will autogenerate the description with changes from both branches, as they've been merged. +- Use a comparison tool to remove any shared PRs from `master`. (I use [WinMerge](https://winmerge.org/) for this). + - Also remove any shared "New Contributor" entries. +- You should now have a text that only contains PRs made to `upcoming`. + +## 2.- Sorting PRs in the changelog +- Copy the `docs/changelogs/template.md` file into a new file with the corresponding version for file and folder. Eg, for 1.2.3, you copy the file into `docs/changelogs/1.2.x/1.2.3.md`. +- Use the following Regex to adapt all PR links into the format currently used: + - Search + ``` + in https://github\.com/rh-hideout/pokeemerald-expansion/pull/(\d+) + ``` + - Replace + ``` + in [#$1](https://github.com/rh-hideout/pokeemerald-expansion/pull/$1) + ``` +- At the bottom of the template, replace the "____" in `` with the number of the last PR in your autogenerated changelog. This will help you keep track of any new PRs that are merged in before you're finished with your changelog. +- Sort the PRs by the categories present in the PR taking the following considerations: + - Keep the language of the changelog as newbie friendly as possible, explaining how the PR affects them. + - The format of the main line is the following: + ``` + {{Description of the change}} by @{{GitHub user}} in {{PR link}} + ``` + - If a PR reverted by a different PR, both should be removed. + - If the reverted PR's contents are then re-added it should be treated as if it's the first time added, with all the proper documentation needed. + - If a PR's content fits into multiple categories, like fixing two unrelated Ability and Move effects, you may duplicate the PR line and put it in both categories, changing the description of it accordingly. + - When refering to an element present in the code, always enclose them with ` to easily tell them apart. Eg: + - "Converted `settotemboost` command to `callnative`" + - "Changed `MOVEEND_` defines to an enum" + - A PR's technical changes that may conflict with user changes should have an entry in the "**REFACTORS**" section at the beginning of the changelog. Any of these changes that requires a migration script should also be marked as such by appending the corresponding emoji listed there. The section should include, but it's not limited to: + - Massive data format and/or structuring changes. + - Converting defines to enums. + - Renaming structs and/or their fields. + - Removing enums/defines/structs. + - For fixes: + - Once on their respective categories, if a PR fixes multiple issues at once in that category, you may make a sublist of those issues to properly detail each one and avoid just writing "Fixed multiple ability issues" or an overly verbose sentence for the PR. + - Try to fit the contents of a PR as a single sentence in past tense that. + - ***DON'T*** write something like "Fixed Parental Bond", as this doesn't explain *what* was fixed in Parental Bond. Instead, write something like "Fixed Parental Bond not affecting Snore". + - For new configs: + - Add the name of the config as part of the sentence, with subitems explaining what they do based on their generation if it's a generational config. Eg: + ``` + * Added missing `B_AFTER_YOU_TURN_ORDER` config by @PhallenTree in [#5400](https://github.com/rh-hideout/pokeemerald-expansion/pull/5400) + * Gen 5-7: After You fails if the order remains the same after using After You. + * Gen 8+: After You no longer fails if the turn order remains the same after using After You. + ``` + - For other new features: + - Explain how to use the feature completely, listing all its features as needed. For now, this is the only source of documentation for these features, so it's important to be thorough. + +# 3.- Preparing the code for the new version +- Search for all non-changelog instances of the previous released version and update them to the newer version. As of writing, it's these files: + - `README.md`: + ```diff + -Based off RHH's pokeemerald-expansion 1.2.2 https://github.com/rh-hideout/pokeemerald-expansion/ + +Based off RHH's pokeemerald-expansion 1.2.3 https://github.com/rh-hideout/pokeemerald-expansion/ + ``` + ```diff + -- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.2.2, use `git pull RHH expansion/1.2.2`). + +- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.2.3, use `git pull RHH expansion/1.2.3`). + ``` + - `.github/ISSUE_TEMPLATE/*.yaml` + - Patch version: + ```diff + options: + - 1.2.2 (Latest release) + + 1.2.3 (Latest release) + master (default, unreleased bugfixes) + upcoming (Edge) + + 1.2.2 + 1.2.1 + 1.2.0 + ``` + - Minor Version: + ```diff + options: + - 1.2.2 (Latest release) + + 1.2.3 (Latest release) + master (default, unreleased bugfixes) + upcoming (Edge) + + 1.2.2 + 1.2.1 + 1.2.0 + - 1.1.6 + - 1.1.5 + - 1.1.4 + - 1.1.3 + - 1.1.2 + - 1.1.1 + - 1.1.0 + - pre-1.1.0 + + pre-1.2.0 + ``` + - `docs/SUMMARY.md`: + - Patch version: + ```diff + [Changelog](./CHANGELOG.md) + - [1.2.x]() + + - [Version 1.2.3](changelogs/1.2.x/1.2.3.md) + - [Version 1.2.2](changelogs/1.2.x/1.2.2.md) + - [Version 1.2.1](changelogs/1.2.x/1.2.1.md) + - [Version 1.2.0](changelogs/1.2.x/1.2.0.md) + ``` + - Minor version: + ```diff + [Changelog](./CHANGELOG.md) + + - [1.3.x]() + + - [Version 1.3.0](changelogs/1.3.x/1.3.0.md) + - [1.2.x]() + - [Version 1.2.2](changelogs/1.2.x/1.2.2.md) + - [Version 1.2.1](changelogs/1.2.x/1.2.1.md) + - [Version 1.2.0](changelogs/1.2.x/1.2.0.md) + ``` + - `include/constants/expansion.h`: + - The defines should already have the version we're targetting as part of the previous changelog process. + ```diff + -// Last version: 1.2.2 + +// Last version: 1.2.3 + #define EXPANSION_VERSION_MAJOR 1 + #define EXPANSION_VERSION_MINOR 2 + #define EXPANSION_VERSION_PATCH 3 + + // FALSE if this this version of Expansion is not a tagged commit, i.e. + // it contains unreleased changes. + -#define EXPANSION_TAGGED_RELEASE FALSE + +#define EXPANSION_TAGGED_RELEASE TRUE + ``` +# 4.- Make a PR with the changes listed in Steps 2/3. +- Also post the changelog for feedback from contributors and maintainers. +- Once all feedback has been addresses, you may merge. +# 5.- Create the release on GitHub +- Copy the contents of your manual changelog into the description of your release. +- Modify the title to "Version {{version}}", eg. "Version 1.2.3" +- Be sure to have the "Set as the latest release" option set, +- Press "Publish Release". +- This will create a new tag in the repo that users can pull from like they can with branches. +# 6.- Post-release handling +- ***DON'T ACCEPT ANY NEW PRs YET.*** We have to prepare for the next cycle first. +- Go to `include/constants/expansion.h` and merge the following changes to the repo (PR or direct commit, doesn't matter much): + - Patch version: + ```diff + // Last version: 1.2.3 + #define EXPANSION_VERSION_MAJOR 1 + #define EXPANSION_VERSION_MINOR 2 + - #define EXPANSION_VERSION_PATCH 3 + + #define EXPANSION_VERSION_PATCH 4 + + // FALSE if this this version of Expansion is not a tagged commit, i.e. + // it contains unreleased changes. + -#define EXPANSION_TAGGED_RELEASE TRUE + +#define EXPANSION_TAGGED_RELEASE FALSE + ``` +With this, the repo is ready again to receive new PRs. + +# Now you're ready to make the announcements! +- We tend to post on the following Discord Servers: + - [RH-Hideout](https://discord.gg/6CzjAG6GZk) + - Requires role to post in #announcements channel. + - [Team Aqua's Hideout](https://discord.gg/team-aqua-s-hideout-976252009114140682) + - Requires role to post in #romhacking-updates channel. + - [What a Hack!](https://discord.gg/whack-a-hack-292436944670162955) + - Announcements are done in Spanish, but not the changelogs themselves. + - Requires role to ping "Decompilaciones" role. + - [pret](https://discord.gg/R4c3FA95dP) + - [PokéCommunity](https://discord.gg/pokecommunity) + +You can make a highlight of changes in the announcement itself, but it's not needed. (I also like using Discord emotes to highlight certain features during announcements, but gain, it's not needed). diff --git a/docs/ai_flags.md b/docs/tutorials/ai_flags.md similarity index 100% rename from docs/ai_flags.md rename to docs/tutorials/ai_flags.md diff --git a/docs/ai_logic.md b/docs/tutorials/ai_logic.md similarity index 100% rename from docs/ai_logic.md rename to docs/tutorials/ai_logic.md diff --git a/docs/how_to_battle_script_command_macro.md b/docs/tutorials/how_to_battle_script_command_macro.md similarity index 100% rename from docs/how_to_battle_script_command_macro.md rename to docs/tutorials/how_to_battle_script_command_macro.md diff --git a/docs/how_to_new_move.md b/docs/tutorials/how_to_new_move.md similarity index 100% rename from docs/how_to_new_move.md rename to docs/tutorials/how_to_new_move.md diff --git a/docs/how_to_new_pokemon_1_6_0.md b/docs/tutorials/how_to_new_pokemon_1_6_0.md similarity index 100% rename from docs/how_to_new_pokemon_1_6_0.md rename to docs/tutorials/how_to_new_pokemon_1_6_0.md diff --git a/docs/how_to_new_pokemon_1_7_0.md b/docs/tutorials/how_to_new_pokemon_1_7_0.md similarity index 100% rename from docs/how_to_new_pokemon_1_7_0.md rename to docs/tutorials/how_to_new_pokemon_1_7_0.md diff --git a/docs/how_to_new_pokemon_1_8_0.md b/docs/tutorials/how_to_new_pokemon_1_8_0.md similarity index 100% rename from docs/how_to_new_pokemon_1_8_0.md rename to docs/tutorials/how_to_new_pokemon_1_8_0.md diff --git a/docs/how_to_new_pokemon_1_9_0.md b/docs/tutorials/how_to_new_pokemon_1_9_0.md similarity index 100% rename from docs/how_to_new_pokemon_1_9_0.md rename to docs/tutorials/how_to_new_pokemon_1_9_0.md diff --git a/docs/how_to_testing_system.md b/docs/tutorials/how_to_testing_system.md similarity index 100% rename from docs/how_to_testing_system.md rename to docs/tutorials/how_to_testing_system.md diff --git a/docs/how_to_trainer_class.md b/docs/tutorials/how_to_trainer_class.md similarity index 100% rename from docs/how_to_trainer_class.md rename to docs/tutorials/how_to_trainer_class.md diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 8a86282619..f59976a1cd 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,13 +1,13 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.9.2 +// Last version: 1.9.3 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 9 #define EXPANSION_VERSION_PATCH 3 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE FALSE +#define EXPANSION_TAGGED_RELEASE TRUE #endif diff --git a/src/party_menu.c b/src/party_menu.c index 3fef465804..b4c973b601 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4672,7 +4672,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (canHeal == TRUE) { if (hp == 0) - AnimatePartySlot(gPartyMenu.slotId, 1); + AnimatePartySlot(gPartyMenu.slotId, 1); PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage); ResetHPTaskData(taskId, 0, hp); return; From 541ca2619b2f86e2367e322d9c781c3015ae1d62 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 8 Oct 2024 14:47:32 -0300 Subject: [PATCH 272/544] Start 1.9.4 cycle --- include/constants/expansion.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/constants/expansion.h b/include/constants/expansion.h index f59976a1cd..44b1169bcd 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -4,10 +4,10 @@ // Last version: 1.9.3 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 9 -#define EXPANSION_VERSION_PATCH 3 +#define EXPANSION_VERSION_PATCH 4 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE TRUE +#define EXPANSION_TAGGED_RELEASE FALSE #endif From feeccb9198c8396c64c4b75f55c136169824df83 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Wed, 9 Oct 2024 03:38:21 -0400 Subject: [PATCH 273/544] Simplify BS_FAINTED_MULTIPLE_1 double battle logic in openpartyscreen (#5435) * simplify BS_FAINTED_MULTIPLE_1 doubles logic * simplify openpartyscreen BS_FAINTED_MULTIPLE_2 checks, too * Update src/battle_script_commands.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Update src/battle_script_commands.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * Update src/battle_script_commands.c Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> * more readable OpponentHandleChoosePokemon * Update src/battle_controller_opponent.c * Update src/battle_controller_opponent.c --------- Co-authored-by: ghoulslash Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- src/battle_controller_opponent.c | 30 ++--- src/battle_script_commands.c | 194 +++++++++---------------------- 2 files changed, 69 insertions(+), 155 deletions(-) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 57ebccf7fa..01ec74f9c2 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -661,7 +661,7 @@ static void OpponentHandleChoosePokemon(u32 battler) chosenMonId = gSelectedMonPartyId = GetFirstFaintedPartyIndex(battler); } // Switching out - else if (*(gBattleStruct->AI_monToSwitchIntoId + battler) == PARTY_SIZE) + else if (gBattleStruct->AI_monToSwitchIntoId[battler] == PARTY_SIZE) { chosenMonId = GetMostSuitableMonToSwitchInto(battler, TRUE); if (chosenMonId == PARTY_SIZE) @@ -680,27 +680,27 @@ static void OpponentHandleChoosePokemon(u32 battler) } GetAIPartyIndexes(battler, &firstId, &lastId); - for (chosenMonId = (lastId-1); chosenMonId >= firstId; chosenMonId--) { - if (IsValidForBattle(&gEnemyParty[chosenMonId]) - && chosenMonId != gBattlerPartyIndexes[battler1] - && chosenMonId != gBattlerPartyIndexes[battler2] - && (!(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON) - || chosenMonId != CalculateEnemyPartyCount() - 1 - || CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle)) - { - break; - } + if (!IsValidForBattle(&gEnemyParty[chosenMonId])) + continue; + if (chosenMonId == gBattlerPartyIndexes[battler1] + || chosenMonId == gBattlerPartyIndexes[battler2]) + continue; + if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON) + && ((chosenMonId != CalculateEnemyPartyCount() - 1) || CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle)) + continue; + // mon is valid + break; } } - *(gBattleStruct->monToSwitchIntoId + battler) = chosenMonId; + gBattleStruct->monToSwitchIntoId[battler] = chosenMonId; } else { - chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + battler); - *(gBattleStruct->AI_monToSwitchIntoId + battler) = PARTY_SIZE; - *(gBattleStruct->monToSwitchIntoId + battler) = chosenMonId; + chosenMonId = gBattleStruct->AI_monToSwitchIntoId[battler]; + gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; + gBattleStruct->monToSwitchIntoId[battler] = chosenMonId; } #if TESTING TestRunner_Battle_CheckSwitch(battler, chosenMonId); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 5c7be23e7d..da1a8754e1 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6997,126 +6997,53 @@ static void Cmd_openpartyscreen(void) } else if (IsDoubleBattle()) { - bool8 hasReplacement_0, hasReplacement_1, hasReplacement_2, hasReplacement_3; - + bool32 hasReplacement; + hitmarkerFaintBits = gHitMarker >> 28; - - if (1u & hitmarkerFaintBits) + for (i = 0; i < gBattlersCount; i++) { - battler = 0; - if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) + if (((1u << i) & hitmarkerFaintBits)) { - gAbsentBattlerFlags |= 1u << battler; - gHitMarker &= ~HITMARKER_FAINTED(battler); - BtlController_EmitCantSwitch(battler, BUFFER_A); - MarkBattlerForControllerExec(battler); - } - else if (!gSpecialStatuses[battler].faintedHasReplacement) - { - ChooseMonToSendOut(battler, gBattleStruct->monToSwitchIntoId[2]); - gSpecialStatuses[battler].faintedHasReplacement = TRUE; - } - else - { - BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); - MarkBattlerForControllerExec(battler); - flags |= 1; + if (i > 1 && ((1u << BATTLE_PARTNER(i)) & hitmarkerFaintBits)) + continue; + + battler = i; + if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) + { + gAbsentBattlerFlags |= 1u << battler; + gHitMarker &= ~HITMARKER_FAINTED(battler); + BtlController_EmitCantSwitch(battler, BUFFER_A); + MarkBattlerForControllerExec(battler); + } + else if (!gSpecialStatuses[battler].faintedHasReplacement) + { + ChooseMonToSendOut(battler, gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battler)]); + gSpecialStatuses[battler].faintedHasReplacement = TRUE; + } + else if (battler < 2 || (battler > 1 && !(flags & BATTLE_PARTNER(battler)))) + { + BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); + MarkBattlerForControllerExec(battler); + flags |= battler; + } } } - if (4u & hitmarkerFaintBits && !(1u & hitmarkerFaintBits)) + + for (i = 0; i < NUM_BATTLE_SIDES; i++) { - battler = 2; - if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) + if (!(gSpecialStatuses[i].faintedHasReplacement)) { - gAbsentBattlerFlags |= 1u << battler; - gHitMarker &= ~HITMARKER_FAINTED(battler); - BtlController_EmitCantSwitch(battler, BUFFER_A); - MarkBattlerForControllerExec(battler); - } - else if (!gSpecialStatuses[battler].faintedHasReplacement) - { - ChooseMonToSendOut(battler, gBattleStruct->monToSwitchIntoId[0]); - gSpecialStatuses[battler].faintedHasReplacement = TRUE; - } - else if (!(flags & 1)) - { - BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); - MarkBattlerForControllerExec(battler); - } - } - if (2 & hitmarkerFaintBits) - { - battler = 1; - if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) - { - gAbsentBattlerFlags |= 1u << battler; - gHitMarker &= ~HITMARKER_FAINTED(battler); - BtlController_EmitCantSwitch(battler, BUFFER_A); - MarkBattlerForControllerExec(battler); - } - else if (!gSpecialStatuses[battler].faintedHasReplacement) - { - ChooseMonToSendOut(battler, gBattleStruct->monToSwitchIntoId[3]); - gSpecialStatuses[battler].faintedHasReplacement = TRUE; - } - else - { - BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); - MarkBattlerForControllerExec(battler); - flags |= 2; - } - } - if (8 & hitmarkerFaintBits && !(2 & hitmarkerFaintBits)) - { - battler = 3; - if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) - { - gAbsentBattlerFlags |= 1u << battler; - gHitMarker &= ~HITMARKER_FAINTED(battler); - BtlController_EmitCantSwitch(battler, BUFFER_A); - MarkBattlerForControllerExec(battler); - } - else if (!gSpecialStatuses[battler].faintedHasReplacement) - { - ChooseMonToSendOut(battler, gBattleStruct->monToSwitchIntoId[1]); - gSpecialStatuses[battler].faintedHasReplacement = TRUE; - } - else if (!(flags & 2)) - { - BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); - MarkBattlerForControllerExec(battler); - } - } + hasReplacement = gSpecialStatuses[BATTLE_PARTNER(i)].faintedHasReplacement; + if (!hasReplacement && hitmarkerFaintBits != 0) + { + if (gAbsentBattlerFlags & (1 << i)) + battler = BATTLE_PARTNER(i); + else + battler = i; - hasReplacement_0 = gSpecialStatuses[0].faintedHasReplacement; - if (!hasReplacement_0) - { - hasReplacement_2 = gSpecialStatuses[2].faintedHasReplacement; - if (!hasReplacement_2 && hitmarkerFaintBits != 0) - { - if (gAbsentBattlerFlags & 1) - battler = 2; - else - battler = 0; - - BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); - MarkBattlerForControllerExec(battler); - } - - } - hasReplacement_1 = gSpecialStatuses[1].faintedHasReplacement; - if (!hasReplacement_1) - { - hasReplacement_3 = gSpecialStatuses[3].faintedHasReplacement; - if (!hasReplacement_3 && hitmarkerFaintBits != 0) - { - if (gAbsentBattlerFlags & 2) - battler = 3; - else - battler = 1; - - BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); - MarkBattlerForControllerExec(battler); + BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); + MarkBattlerForControllerExec(battler); + } } } } @@ -7129,36 +7056,23 @@ static void Cmd_openpartyscreen(void) if (IsDoubleBattle()) { hitmarkerFaintBits = gHitMarker >> 28; - if (4 & hitmarkerFaintBits && 1 & hitmarkerFaintBits) + for (i = 0; i < NUM_BATTLE_SIDES; i++) { - battler = 2; - if (HasNoMonsToSwitch(battler, gBattleResources->bufferB[0][1], PARTY_SIZE)) + if ((1 << BATTLE_PARTNER(i)) & hitmarkerFaintBits && (1 << i) & hitmarkerFaintBits) { - gAbsentBattlerFlags |= 1u << battler; - gHitMarker &= ~HITMARKER_FAINTED(battler); - BtlController_EmitCantSwitch(battler, BUFFER_A); - MarkBattlerForControllerExec(battler); - } - else if (!gSpecialStatuses[battler].faintedHasReplacement) - { - ChooseMonToSendOut(battler, gBattleStruct->monToSwitchIntoId[0]); - gSpecialStatuses[battler].faintedHasReplacement = TRUE; - } - } - if (8u & hitmarkerFaintBits && hitmarkerFaintBits & 2u) - { - battler = 3; - if (HasNoMonsToSwitch(battler, gBattleResources->bufferB[1][1], PARTY_SIZE)) - { - gAbsentBattlerFlags |= 1u << battler; - gHitMarker &= ~HITMARKER_FAINTED(battler); - BtlController_EmitCantSwitch(battler, BUFFER_A); - MarkBattlerForControllerExec(battler); - } - else if (!gSpecialStatuses[battler].faintedHasReplacement) - { - ChooseMonToSendOut(battler, gBattleStruct->monToSwitchIntoId[1]); - gSpecialStatuses[battler].faintedHasReplacement = TRUE; + battler = BATTLE_PARTNER(i); + if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) + { + gAbsentBattlerFlags |= (1u << battler); + gHitMarker &= ~(HITMARKER_FAINTED(battler)); + BtlController_EmitCantSwitch(battler, BUFFER_A); + MarkBattlerForControllerExec(battler); + } + else if (!gSpecialStatuses[battler].faintedHasReplacement) + { + ChooseMonToSendOut(battler, gBattleStruct->monToSwitchIntoId[i]); + gSpecialStatuses[battler].faintedHasReplacement = TRUE; + } } } gBattlescriptCurrInstr = cmd->nextInstr; From 7fc5502afd583c3ce404d281413b303dfef72e88 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 9 Oct 2024 03:38:49 -0400 Subject: [PATCH 274/544] Don't clear move data on turn end (#5488) --- src/battle_util.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 2e463eaf58..b572acc7c1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -738,8 +738,6 @@ void HandleAction_ActionFinished(void) gMoveResultFlags = 0; gBattleScripting.animTurn = 0; gBattleScripting.animTargetsHit = 0; - gLastLandedMoves[gBattlerAttacker] = 0; - gLastHitByType[gBattlerAttacker] = 0; gBattleStruct->dynamicMoveType = 0; gBattleScripting.moveendState = 0; gBattleCommunication[3] = 0; From 708f64247f8abbe22d5cc6f44ede30b333dd030c Mon Sep 17 00:00:00 2001 From: SonikkuA-DatH <58025603+SonikkuA-DatH@users.noreply.github.com> Date: Wed, 9 Oct 2024 01:43:04 -0700 Subject: [PATCH 275/544] Heart Swap Move Animation (#5460) --- data/battle_anim_scripts.s | 38 +++++++ graphics/battle_anims/sprites/pinkvio_orb.png | Bin 0 -> 5019 bytes include/constants/battle_anim.h | 1 + include/graphics.h | 2 + src/battle_anim_effects_2.c | 12 +++ src/battle_anim_psychic.c | 100 +++++++++++++++++- src/data/battle_anim.h | 2 + src/graphics.c | 3 + 8 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 graphics/battle_anims/sprites/pinkvio_orb.png diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 98ac1bfda7..c16a5c7859 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -934,6 +934,44 @@ gBattleAnimMove_ToxicSpikes:: end gBattleAnimMove_HeartSwap:: + loadspritegfx ANIM_TAG_RED_HEART + loadspritegfx ANIM_TAG_PINKVIO_ORB + loadspritegfx ANIM_TAG_SPARKLE_2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 8, RGB(31, 24, 26) + createvisualtask AnimTask_HeartSwap, 3, ANIM_TARGET + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB_WHITE, 12, 3, 1 + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 10, 8 + delay 16 + createvisualtask AnimTask_HeartSwap, 3, ANIM_ATTACKER + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB_WHITE, 12, 3, 1 + waitforvisualfinish + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, -15, 0, 0, 0, 32, 60 + createsprite gGrantingStarsSpriteTemplate, ANIM_TARGET, 2, -15, 0, 0, 0, 32, 60 + delay 8 + createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 12, -5, 0, 0, 32, 60 + createsprite gGrantingStarsSpriteTemplate, ANIM_TARGET, 2, 12, -5, 0, 0, 32, 60 + delay 4 + playsewithpan SE_SHINY, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_ATTACKER, RGB(31, 25, 27), 12, 3, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0 + createvisualtask AnimTask_BlendMonInAndOut, 5, ANIM_TARGET, RGB(31, 25, 27), 12, 3, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_TARGET, 0 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 160, -32 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -256, -40 + createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, 128, -16 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 8, 0, RGB(31, 24, 26) + createsprite gRedHeartCharmSpriteTemplate, ANIM_ATTACKER, 3, 0, 20 + playsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER + delay 15 + createsprite gRedHeartCharmSpriteTemplate, ANIM_ATTACKER, 3, -20, 20 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + delay 15 + createsprite gRedHeartCharmSpriteTemplate, ANIM_ATTACKER, 3, 20, 20 + playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER + waitforvisualfinish + clearmonbg ANIM_ATTACKER + clearmonbg ANIM_TARGET + blendoff end gBattleAnimMove_AquaRing:: diff --git a/graphics/battle_anims/sprites/pinkvio_orb.png b/graphics/battle_anims/sprites/pinkvio_orb.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d7c927549bb8590999f1f5184bc587c67501f8 GIT binary patch literal 5019 zcmeHKdsGu=7M}nT5=3YL6}BxQNCj(>$@^g4#Fq%fJ8K!iL<0tCCDE7V6p z3a;1|aVcUcsIUcE5mZ_gs@7s36j2aV>{=0p^#O&V(n&zYvpsu`=WPEoCzH(F@7~|N z_jm7ilW)5+e5o7Jmk0oWn_MP|z`i|fmy;v*d8fM<6F81+P_3~o}cf2yQWl->OdH%;RBiHuZ*>t z;?K_c{PGTeikWo9U9#X#|5*=1;dDt^%%`P1H-f=Y<16c`o$1HEO!cp?svcWrIjR*N z>N%BZb&va(VC0n>Z-&kkO5X&0>I3C4@Ex77sio=;ddIzOwo5~A-x0FM5U&00@W#l0 zCw$bODL9CxhZlIBeOy5sJA0&U(`%U{7wXzC^^Rr6fAE>VpeAIX=iqQk>l$h88>+E} zij3ey*ZYih(>s=Jx&gHXZ1EZjdPVw5`?ON!2ers9^**TL#~tkUIc^`d9&ytQicucoFg)eh6THBPf+a~gnQ~-7&E@C6^-qjGkJu%y((jy2bcy$}o3p}4ZO?H_4MrV+F$H<%yQ|2uQ z<(B&G@!4hU4P3M*h@f8E?-6oho;rx1e1ZQJwI{%K}!;4;#`EkKVu8LiJ z)v|f(+bcUhKJeGbpMx&4Vjj>XJLu(3C4}9cP2nHrN8FfyNwf6QFZt}##l(}JUhI93 zR+_LqaAkEw%|=zMxZO8#eYyXxB3cWbte15J*7V3uq1R9&soN09n=IlPt!4P zH(vT8pvUX=Zyqh<5{JXNk5zo%ACFgFF4M0*(4IWKaAgg}6`O=#_h4jJ)co%6w$pZ_HS;v(Sw%jP33)xbCI$Zo!OY( z|9V(s^CjYa8VhqoVmy$;XKY?+Ivy8u!TFG|8Eq zxyCDtm#?^#NYNQqF3ViAQ{kCfJkYn~T5DWX=k;F&cPmrV{Ps47ocYZ&V}Z_cF1mB{ z`}48cqYaXW@@!^H?DV#yKP_|&o7=qFA=W|E@gU&dEL__=ULp9f5K^WO_$aTJ_LarQ z%dgof#<>OG7rN2Ebya8|ZNE=Q_roh;_448RuJ-<;-Wg2|nI(yX1Ecu)za@P4y%?YOFZB9IK;{BEb zSvhspGpaX}MsU5iukOD|4tz`t{(Rfrt4I6>2SfusxFuyLRdtE4D%s~`EwGwXKX3RL z8Ng+2Q%lt4|CG@*SNTl?*RJ=+WXGqMjF}$+RX6!h1gGZg2{a1}BUB;tOvzq;n)2@}3SF;tM!YD=)w6YB*G;%|@3f_ zNqV!uDk9r)1=zh!Oe2%*DwaeMd5uCz5*th?iA7~mL5kF>O=XZ55=lZ6q7g($LMI`x zClNWpVlfJ6w6wG|Y8sPjFvZj8d_JEBGH4721=FCI)Abg}O3|AGY!DL|64VTvv_^~8 zpeNZdA+;gJA|jKqb<&ggbVh~ZDZJi1$pXd)%?cT5bSg;G>1b0e%ob@X1~M7YA6l4I z*iRcR0yP^_OfV`kA1@T&) z(Qbv2{hX#nt9eG&bFtZ0?CDGm1T%k%`<(WZ-0jMkmO>$r7~m9Jcyft|Z1XQb46qgv z*l$^Mh{J^tkiu0%bP5aQuqiwcpS>h{NZjQ=sH}vjx(_s0|7Or)n`Am`-OS zEGC`8=c!Q&i$T{=AeNd*f!S;|lf~Dt8QiH5D@2hLy=X(FgH+}O zvaK)zEFFwm$kwSCfZYPiMj$q!ki}q984O7xvMnf*&C=fBB;iC^WLh((k#6hx$*zw? zlP8`gHbIiszC?UN`aKUC3?dh3SgsUP$?6cm3b!B0f9rpnB{dP#Sia zQKXsoU7;Ssf4sAEYdbMpf>E~C3;?d4whIRo z70data[10] = -10; task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8; @@ -1023,6 +1036,55 @@ void AnimTask_SkillSwap(u8 taskId) task->func = AnimTask_SkillSwap_Step; } +// Copy of Skill Swap's function to get position of the user and target +// arg 0: move target +void AnimTask_HeartSwap(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (IsContest()) + { + if (gBattleAnimArgs[0] == ANIM_TARGET) + { + task->data[10] = -10; + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8; + task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) + 8; + task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_RIGHT) - 8; + task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) + 8; + } + else + { + task->data[10] = 10; + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_LEFT) + 8; + task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM) - 8; + task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8; + task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM) - 8; + } + } + else + { + if (gBattleAnimArgs[0] == ANIM_TARGET) + { + task->data[10] = -10; + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8; + task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) + 8; + task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_LEFT) + 8; + task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) + 8; + } + else + { + task->data[10] = 10; + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_RIGHT) - 8; + task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM) - 8; + task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8; + task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM) - 8; + } + } + + task->data[1] = 6; + task->func = AnimTask_HeartSwap_Step; +} + static void AnimTask_SkillSwap_Step(u8 taskId) { u8 spriteId; @@ -1057,6 +1119,42 @@ static void AnimTask_SkillSwap_Step(u8 taskId) } } +// Copy of Skill Swap's function to vault the series of orbs between the user and target +// CreateSprite modified so it uses the pink orbs instead of the blue/green ones +static void AnimTask_HeartSwap_Step(u8 taskId) +{ + u8 spriteId; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 6) + { + task->data[1] = 0; + spriteId = CreateSprite(&gHeartSwapOrbSpriteTemplate, task->data[11], task->data[12], 0); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = 16; + gSprites[spriteId].data[2] = task->data[13]; + gSprites[spriteId].data[4] = task->data[14]; + gSprites[spriteId].data[5] = task->data[10]; + + InitAnimArcTranslation(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], task->data[2] & 3); + } + + if (++task->data[2] == 12) + task->data[0]++; + } + break; + case 1: + if (++task->data[1] > 17) + DestroyAnimVisualTask(taskId); + break; + } +} + static void AnimSkillSwapOrb(struct Sprite *sprite) { if (TranslateAnimHorizontalArc(sprite)) diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index 2ab982d2d7..a09c8d72c8 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1465,6 +1465,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_RedExplosion, 0x0800, ANIM_TAG_RED_EXPLOSION}, {gBattleAnimSpriteGfx_Beam, 0x0800, ANIM_TAG_BEAM}, {gBattleAnimSpriteGfx_PurpleChain, 0x1000, ANIM_TAG_PURPLE_CHAIN}, + {gBattleAnimSpriteGfx_PinkVioletOrb, 0x0080, ANIM_TAG_PINKVIO_ORB}, }; const struct CompressedSpritePalette gBattleAnimPaletteTable[] = @@ -1931,6 +1932,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_RedExplosion, ANIM_TAG_RED_EXPLOSION}, {gBattleAnimSpritePal_Beam, ANIM_TAG_BEAM}, {gBattleAnimSpritePal_PurpleChain, ANIM_TAG_PURPLE_CHAIN}, + {gBattleAnimSpritePal_PinkVioletOrb, ANIM_TAG_PINKVIO_ORB}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = diff --git a/src/graphics.c b/src/graphics.c index 231aec4158..5aafa8ae45 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1263,6 +1263,9 @@ const u32 gBattleAnimSpriteGfx_XSign[] = INCBIN_U32("graphics/battle_anims/sprit const u32 gBattleAnimSpriteGfx_BluegreenOrb[] = INCBIN_U32("graphics/battle_anims/sprites/bluegreen_orb.4bpp.lz"); const u32 gBattleAnimSpritePal_BluegreenOrb[] = INCBIN_U32("graphics/battle_anims/sprites/bluegreen_orb.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_PinkVioletOrb[] = INCBIN_U32("graphics/battle_anims/sprites/pinkvio_orb.4bpp.lz"); +const u32 gBattleAnimSpritePal_PinkVioletOrb[] = INCBIN_U32("graphics/battle_anims/sprites/pinkvio_orb.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_PawPrint[] = INCBIN_U32("graphics/battle_anims/sprites/paw_print.4bpp.lz"); const u32 gBattleAnimSpritePal_PawPrint[] = INCBIN_U32("graphics/battle_anims/sprites/paw_print.gbapal.lz"); From 14546443768cb457a8e548e3f43a7d613ebb7bfd Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:50:59 +0200 Subject: [PATCH 276/544] Removes duplicate code in AI functions (#5457) * Make functions CanAbilityAbsorbMove and CanAbilityBlockMove * clean up * Replace ai code with CanAbilityBlockMove / CanAbilityAbsorbMove * Adds CanPartnerAbilityBlockMove * Use switches instead of if-blocks * solve potential bug in singles with spread attacks * fix test * revert other fix * flash fire does not increase a stat * left a comment for a future test and addition * remove more checks * comment was incorrect. it only applies to storm drain and lightning rod * revert ndebug * revert minor change * Update src/battle_util.c --- include/battle.h | 2 +- include/battle_util.h | 20 +++ src/battle_ai_main.c | 47 ++----- src/battle_ai_util.c | 61 +++----- src/battle_main.c | 1 + src/battle_util.c | 318 ++++++++++++++++++++++++------------------ 6 files changed, 230 insertions(+), 219 deletions(-) diff --git a/include/battle.h b/include/battle.h index 2d1d658419..894b74ffde 100644 --- a/include/battle.h +++ b/include/battle.h @@ -378,6 +378,7 @@ struct AiLogicData u8 ejectPackSwitch:1; // Tracks whether current switch out was from Eject Pack u8 padding:5; u8 shouldSwitch; // Stores result of ShouldSwitch, which decides whether a mon should be switched out + u8 aiCalcInProgress:1; }; struct AI_ThinkingStruct @@ -716,7 +717,6 @@ struct BattleStruct } multiBuffer; u8 wishPerishSongState; u8 wishPerishSongBattlerId; - u8 aiCalcInProgress:1; u8 overworldWeatherDone:1; u8 startingStatusDone:1; u8 isAtkCancelerForCalledMove:1; // Certain cases in atk canceler should only be checked once, when the original move is called, however others need to be checked the twice. diff --git a/include/battle_util.h b/include/battle_util.h index c4727d8a12..504c3be3ad 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -20,6 +20,23 @@ #define MOVE_LIMITATION_PLACEHOLDER (1 << 15) #define MOVE_LIMITATIONS_ALL 0xFFFF +enum MoveBlocked +{ + MOVE_BLOCKED_BY_NO_ABILITY, + MOVE_BLOCKED_BY_SOUNDPROOF_OR_BULLETPROOF, + MOVE_BLOCKED_BY_DAZZLING, + MOVE_BLOCKED_BY_PARTNER_DAZZLING, + MOVE_BLOCKED_BY_GOOD_AS_GOLD, +}; + +enum MoveAbsorbed +{ + MOVE_ABSORBED_BY_NO_ABILITY, + MOVE_ABSORBED_BY_DRAIN_HP_ABILITY, + MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY, + MOVE_ABSORBED_BY_BOOST_FLASH_FIRE, +}; + enum { ABILITYEFFECT_ON_SWITCHIN, ABILITYEFFECT_ENDTURN, @@ -161,6 +178,9 @@ void SetAtkCancellerForCalledMove(void); u8 AtkCanceller_UnableToUseMove2(void); bool32 HasNoMonsToSwitch(u32 battler, u8 r1, u8 r2); bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility); +u32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef); +u32 CanPartnerAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef); +u32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType); u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg); bool32 TryPrimalReversion(u32 battler); bool32 IsNeutralizingGasOnField(void); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 5ab8e652c6..a08ca0f71f 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -873,6 +873,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // target ability checks if (!DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) { + if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef])) + RETURN_SCORE_MINUS(20); + + if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType)) + RETURN_SCORE_MINUS(20); + switch (aiData->abilities[battlerDef]) { case ABILITY_MAGIC_GUARD: @@ -903,12 +909,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG)) RETURN_SCORE_MINUS(10); break; - case ABILITY_DAZZLING: - case ABILITY_QUEENLY_MAJESTY: - case ABILITY_ARMOR_TAIL: - if (atkPriority > 0) - RETURN_SCORE_MINUS(10); - break; case ABILITY_AROMA_VEIL: if (IsAromaVeilProtectedMove(move)) RETURN_SCORE_MINUS(10); @@ -972,37 +972,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && IsNonVolatileStatusMoveEffect(moveEffect)) RETURN_SCORE_MINUS(10); break; - case ABILITY_LIGHTNING_ROD: - if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) - break; - // Fallthrough - case ABILITY_MOTOR_DRIVE: - case ABILITY_VOLT_ABSORB: - if (moveType == TYPE_ELECTRIC) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_STORM_DRAIN: - if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) - break; - // Fallthrough - case ABILITY_WATER_ABSORB: - case ABILITY_DRY_SKIN: - if (moveType == TYPE_WATER) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_FLASH_FIRE: - if (moveType == TYPE_FIRE) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_EARTH_EATER: - if (moveType == TYPE_GROUND) - RETURN_SCORE_MINUS(20); - break; } // def ability checks // target partner ability checks & not attacking partner if (isDoubleBattle) { + if (CanPartnerAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[BATTLE_PARTNER(battlerDef)])) + RETURN_SCORE_MINUS(20); + switch (aiData->abilities[BATTLE_PARTNER(battlerDef)]) { case ABILITY_LIGHTNING_ROD: @@ -1029,12 +1006,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsAromaVeilProtectedMove(move)) RETURN_SCORE_MINUS(10); break; - case ABILITY_DAZZLING: - case ABILITY_QUEENLY_MAJESTY: - case ABILITY_ARMOR_TAIL: - if (atkPriority > 0) - RETURN_SCORE_MINUS(10); - break; } } // def partner ability checks } // ignore def ability check diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 612e89c9ce..bf84f98b4d 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -402,12 +402,19 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) { struct AiLogicData *aiData = AI_DATA; u32 battlerDefAbility; + u32 partnerBattlerDefAbility; u32 moveType = GetMoveType(move); if (DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) + { battlerDefAbility = ABILITY_NONE; + partnerBattlerDefAbility = ABILITY_NONE; + } else + { battlerDefAbility = aiData->abilities[battlerDef]; + partnerBattlerDefAbility = aiData->abilities[BATTLE_PARTNER(battlerDef)]; + } if (battlerDef == BATTLE_PARTNER(battlerAtk)) battlerDefAbility = aiData->abilities[battlerDef]; @@ -415,47 +422,14 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) if (gBattleStruct->commandingDondozo & (1u << battlerDef)) return TRUE; - switch (battlerDefAbility) - { - case ABILITY_LIGHTNING_ROD: - if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) - break; - // Fallthrough - case ABILITY_VOLT_ABSORB: - case ABILITY_MOTOR_DRIVE: - if (moveType == TYPE_ELECTRIC) - return TRUE; - break; - case ABILITY_STORM_DRAIN: - if (B_REDIRECT_ABILITY_IMMUNITY < GEN_5) - break; - // Fallthrough - case ABILITY_WATER_ABSORB: - case ABILITY_DRY_SKIN: - if (moveType == TYPE_WATER) - return TRUE; - break; - case ABILITY_FLASH_FIRE: - if (moveType == TYPE_FIRE) - return TRUE; - break; - case ABILITY_SOUNDPROOF: - if (gMovesInfo[move].soundMove) - return TRUE; - break; - case ABILITY_BULLETPROOF: - if (gMovesInfo[move].ballisticMove) - return TRUE; - break; - case ABILITY_SAP_SIPPER: - if (moveType == TYPE_GRASS) - return TRUE; - break; - case ABILITY_EARTH_EATER: - if (moveType == TYPE_GROUND) - return TRUE; - break; - } + if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef])) + return TRUE; + + if (CanPartnerAbilityBlockMove(battlerAtk, battlerDef, move, partnerBattlerDefAbility)) + return TRUE; + + if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType)) + return TRUE; switch (gMovesInfo[move].effect) { @@ -526,7 +500,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u bool32 isDamageMoveUnusable = FALSE; bool32 toggledGimmick = FALSE; struct AiLogicData *aiData = AI_DATA; - gBattleStruct->aiCalcInProgress = TRUE; + AI_DATA->aiCalcInProgress = TRUE; if (moveEffect == EFFECT_NATURE_POWER) move = GetNaturePowerMove(battlerAtk); @@ -736,12 +710,11 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u *typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier); // Undo temporary settings - gBattleStruct->aiCalcInProgress = FALSE; gBattleStruct->swapDamageCategory = FALSE; gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE; if (toggledGimmick) SetActiveGimmick(battlerAtk, GIMMICK_NONE); - + AI_DATA->aiCalcInProgress = FALSE; return simDamage; } diff --git a/src/battle_main.c b/src/battle_main.c index c1974e0f6a..6e8a0d0e8f 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4202,6 +4202,7 @@ static void HandleTurnActionSelectionState(void) AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, TRUE); else AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE); + gBattleStruct->aiMoveOrAction[battler] = ComputeBattleAiScores(battler); } // fallthrough diff --git a/src/battle_util.c b/src/battle_util.c index e1f10d4eda..01b41aaf7a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4107,12 +4107,125 @@ static void ChooseStatBoostAnimation(u32 battler) #undef ANIM_STAT_ACC #undef ANIM_STAT_EVASION +u32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef) +{ + enum MoveBlocked effect = MOVE_BLOCKED_BY_NO_ABILITY; + + switch (abilityDef) + { + case ABILITY_SOUNDPROOF: + if (gMovesInfo[move].soundMove && !(GetBattlerMoveTargetType(battlerAtk, move) & MOVE_TARGET_USER)) + effect = MOVE_BLOCKED_BY_SOUNDPROOF_OR_BULLETPROOF; + break; + case ABILITY_BULLETPROOF: + if (gMovesInfo[move].ballisticMove) + effect = MOVE_BLOCKED_BY_SOUNDPROOF_OR_BULLETPROOF; + break; + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + case ABILITY_ARMOR_TAIL: + if (GetBattlerSide(battlerAtk) != GetBattlerSide(battlerDef)) + { + u32 priority = AI_DATA->aiCalcInProgress ? GetMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk); + if (priority > 0) + effect = MOVE_BLOCKED_BY_DAZZLING; + } + break; + case ABILITY_GOOD_AS_GOLD: + if (IS_MOVE_STATUS(move)) + { + u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); + if (!(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) + effect = MOVE_BLOCKED_BY_GOOD_AS_GOLD; + } + break; + } + + if (!effect) + effect = CanPartnerAbilityBlockMove(battlerAtk, battlerDef, move, GetBattlerAbility(BATTLE_PARTNER(battlerDef))); + + return effect; +} + +u32 CanPartnerAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef) +{ + switch (abilityDef) + { + case ABILITY_DAZZLING: + case ABILITY_QUEENLY_MAJESTY: + case ABILITY_ARMOR_TAIL: + if (GetBattlerSide(battlerAtk) != GetBattlerSide(battlerDef)) + { + s32 priority = AI_DATA->aiCalcInProgress ? GetMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk); + if (priority > 0) + return MOVE_BLOCKED_BY_PARTNER_DAZZLING; + } + break; + } + return MOVE_BLOCKED_BY_NO_ABILITY; +} + +u32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType) +{ + enum MoveAbsorbed effect = MOVE_ABSORBED_BY_NO_ABILITY; + + switch (abilityDef) + { + default: + effect = MOVE_ABSORBED_BY_NO_ABILITY; + break; + case ABILITY_VOLT_ABSORB: + if (moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) + effect = MOVE_ABSORBED_BY_DRAIN_HP_ABILITY; + break; + case ABILITY_WATER_ABSORB: + case ABILITY_DRY_SKIN: + if (moveType == TYPE_WATER) + effect = MOVE_ABSORBED_BY_DRAIN_HP_ABILITY; + break; + case ABILITY_EARTH_EATER: + if (moveType == TYPE_GROUND) + effect = MOVE_ABSORBED_BY_DRAIN_HP_ABILITY; + break; + case ABILITY_MOTOR_DRIVE: + if (moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) // Potential bug in singles (might be solved with simu hp reudction) + effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + break; + case ABILITY_LIGHTNING_ROD: + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) // Potential bug in singles (might be solved with simu hp reudction) + effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + break; + case ABILITY_STORM_DRAIN: + if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_WATER) + effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + break; + case ABILITY_SAP_SIPPER: + if (moveType == TYPE_GRASS) + effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + break; + case ABILITY_WELL_BAKED_BODY: + if (moveType == TYPE_FIRE) + effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + break; + case ABILITY_WIND_RIDER: + if (gMovesInfo[move].windMove && !(GetBattlerMoveTargetType(battlerAtk, move) & MOVE_TARGET_USER)) + effect = MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY; + break; + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE && (B_FLASH_FIRE_FROZEN >= GEN_5 || !(gBattleMons[battlerDef].status1 & STATUS1_FREEZE))) + effect = MOVE_ABSORBED_BY_BOOST_FLASH_FIRE; + break; + } + + return effect; +} + u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg) { u32 effect = 0; - u32 moveType, move; - u32 side; - u32 i, j; + u32 moveType = 0, move = 0; + u32 side = 0; + u32 i = 0, j = 0; u32 partner = 0; struct Pokemon *mon; @@ -5206,153 +5319,87 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } } break; - case ABILITYEFFECT_MOVES_BLOCK: case ABILITYEFFECT_WOULD_BLOCK: + effect = CanAbilityBlockMove(gBattlerAttacker, battler, move, gLastUsedAbility); + if (effect && gLastUsedAbility != 0xFFFF) + RecordAbilityBattle(battler, gLastUsedAbility); + break; + case ABILITYEFFECT_MOVES_BLOCK: { - u16 moveTarget = GetBattlerMoveTargetType(battler, move); + effect = CanAbilityBlockMove(gBattlerAttacker, battler, move, gLastUsedAbility); const u8 * battleScriptBlocksMove = NULL; - - switch (gLastUsedAbility) - { - case ABILITY_SOUNDPROOF: - if (gMovesInfo[move].soundMove && !(moveTarget & MOVE_TARGET_USER)) - effect = 1; - break; - case ABILITY_BULLETPROOF: - if (gMovesInfo[move].ballisticMove) - effect = 1; - break; - case ABILITY_DAZZLING: - case ABILITY_QUEENLY_MAJESTY: - case ABILITY_ARMOR_TAIL: - if (GetChosenMovePriority(gBattlerAttacker) > 0 && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) - effect = 2; - break; - case ABILITY_GOOD_AS_GOLD: - if (IS_MOVE_STATUS(gCurrentMove) - && !(moveTarget & MOVE_TARGET_OPPONENTS_FIELD) - && !(moveTarget & MOVE_TARGET_ALL_BATTLERS)) - effect = 3; - break; - } - - if (!effect) - { - switch (GetBattlerAbility(BATTLE_PARTNER(battler))) - { - case ABILITY_DAZZLING: - case ABILITY_QUEENLY_MAJESTY: - case ABILITY_ARMOR_TAIL: - if (GetChosenMovePriority(gBattlerAttacker) > 0 && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(battler)) - effect = 4; - break; - } - } - - if (effect == 1) + switch (effect) { + case MOVE_BLOCKED_BY_SOUNDPROOF_OR_BULLETPROOF: if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) gHitMarker |= HITMARKER_NO_PPDEDUCT; battleScriptBlocksMove = BattleScript_SoundproofProtected; - } - else if (effect == 2 || effect == 4) - { - if (effect == 4) + break; + case MOVE_BLOCKED_BY_DAZZLING: + case MOVE_BLOCKED_BY_PARTNER_DAZZLING: + if (effect == MOVE_BLOCKED_BY_PARTNER_DAZZLING) gBattleScripting.battler = BATTLE_PARTNER(battler); else gBattleScripting.battler = battler; - if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS) gHitMarker |= HITMARKER_NO_PPDEDUCT; battleScriptBlocksMove = BattleScript_DazzlingProtected; - } - else if (effect == 3) - { + break; + case MOVE_BLOCKED_BY_GOOD_AS_GOLD: battleScriptBlocksMove = BattleScript_GoodAsGoldActivates; + break; + default: + if (GetChosenMovePriority(gBattlerAttacker) > 0 + && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) + && !(IS_MOVE_STATUS(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) + { + if (!IsDoubleBattle() + || !(GetBattlerMoveTargetType(gBattlerAttacker, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) + CancelMultiTurnMoves(gBattlerAttacker); // Don't cancel moves that can hit two targets bc one target might not be protected + gBattleScripting.battler = gBattlerAbility = gBattlerTarget; + battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster; + effect = 1; + } } - else if (GetChosenMovePriority(gBattlerAttacker) > 0 - && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) - && !(IS_MOVE_STATUS(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) - { - if (!IsDoubleBattle() || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) - CancelMultiTurnMoves(gBattlerAttacker); // Don't cancel moves that can hit two targets bc one target might not be protected - gBattleScripting.battler = gBattlerAbility = gBattlerTarget; - battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster; - effect = 1; - } - if (caseID == ABILITYEFFECT_WOULD_BLOCK) - { - if (effect && gLastUsedAbility != 0xFFFF) - RecordAbilityBattle(battler, gLastUsedAbility); - - return effect; - } - else if (effect) - { + if (effect) gBattlescriptCurrInstr = battleScriptBlocksMove; - } - break; } - case ABILITYEFFECT_ABSORBING: + break; case ABILITYEFFECT_WOULD_ABSORB: - if (move != MOVE_NONE) + effect = CanAbilityAbsorbMove(gBattlerAttacker, battler, gLastUsedAbility, move, moveType); + gBattleStruct->pledgeMove = FALSE; + if (effect && gLastUsedAbility != 0xFFFF) + RecordAbilityBattle(battler, gLastUsedAbility); + return effect; + case ABILITYEFFECT_ABSORBING: { - u8 statId = 0; - u8 statAmount = 1; - switch (gLastUsedAbility) + u32 statId = 0; + u32 statAmount = 1; + effect = CanAbilityAbsorbMove(gBattlerAttacker, battler, gLastUsedAbility, move, moveType); + if (effect) { - case ABILITY_VOLT_ABSORB: - if (moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) - effect = 1; - break; - case ABILITY_WATER_ABSORB: - case ABILITY_DRY_SKIN: - if (moveType == TYPE_WATER) - effect = 1; - break; - case ABILITY_MOTOR_DRIVE: - if (moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) - effect = 2, statId = STAT_SPEED; - break; - case ABILITY_LIGHTNING_ROD: - if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_ELECTRIC && gMovesInfo[move].target != MOVE_TARGET_ALL_BATTLERS) - effect = 2, statId = STAT_SPATK; - break; - case ABILITY_STORM_DRAIN: - if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5 && moveType == TYPE_WATER) - effect = 2, statId = STAT_SPATK; - break; - case ABILITY_SAP_SIPPER: - if (moveType == TYPE_GRASS) - effect = 2, statId = STAT_ATK; - break; - case ABILITY_FLASH_FIRE: - if (moveType == TYPE_FIRE && (B_FLASH_FIRE_FROZEN >= GEN_5 || !(gBattleMons[battler].status1 & STATUS1_FREEZE))) - effect = 3; - break; - case ABILITY_WELL_BAKED_BODY: - if (moveType == TYPE_FIRE) - effect = 2, statId = STAT_DEF, statAmount = 2; - break; - case ABILITY_WIND_RIDER: - if (gMovesInfo[gCurrentMove].windMove && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) - effect = 2, statId = STAT_ATK; - break; - case ABILITY_EARTH_EATER: - if (moveType == TYPE_GROUND) - effect = 1; - break; + switch(gLastUsedAbility) + { + case ABILITY_MOTOR_DRIVE: + statId = STAT_SPEED; + break; + case ABILITY_LIGHTNING_ROD: + case ABILITY_STORM_DRAIN: + statId = STAT_SPATK; + break; + case ABILITY_SAP_SIPPER: + case ABILITY_WIND_RIDER: + statId = STAT_ATK; + break; + case ABILITY_WELL_BAKED_BODY: + statAmount = 2; + statId = STAT_DEF; + break; + } } - if (caseID == ABILITYEFFECT_WOULD_ABSORB) - { - gBattleStruct->pledgeMove = FALSE; - if (effect && gLastUsedAbility != 0xFFFF) - RecordAbilityBattle(battler, gLastUsedAbility); - - return effect; - } - else if (effect == 1) // Drain Hp ability. + switch (effect) { + case MOVE_ABSORBED_BY_DRAIN_HP_ABILITY: gBattleStruct->pledgeMove = FALSE; if (BATTLER_MAX_HP(battler) || (B_HEAL_BLOCKING >= GEN_5 && gStatuses3[battler] & STATUS3_HEAL_BLOCK)) { @@ -5373,9 +5420,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleMoveDamage = 1; gBattleMoveDamage *= -1; } - } - else if (effect == 2) // Boost Stat ability; - { + break; + case MOVE_ABSORBED_BY_STAT_INCREASE_ABILITY: gBattleStruct->pledgeMove = FALSE; if (!CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) { @@ -5395,9 +5441,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (B_ABSORBING_ABILITY_STRING < GEN_5) PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); } - } - else if (effect == 3) - { + break; + case MOVE_ABSORBED_BY_BOOST_FLASH_FIRE: gBattleStruct->pledgeMove = FALSE; if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE)) { @@ -5416,10 +5461,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 else gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; } + break; } - if (effect) gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed. + } break; case ABILITYEFFECT_MOVE_END: // Think contact abilities. @@ -10371,7 +10417,7 @@ static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 move mod = UQ_4_12(1.0); } - if (gBattleStruct->distortedTypeMatchups & (1u << battlerDef) || (gBattleStruct->aiCalcInProgress && ShouldTeraShellDistortTypeMatchups(move, battlerDef))) + if (gBattleStruct->distortedTypeMatchups & (1u << battlerDef) || (AI_DATA->aiCalcInProgress && ShouldTeraShellDistortTypeMatchups(move, battlerDef))) { mod = UQ_4_12(0.5); if (recordAbilities) From 3c3ce38378792223e95dd1e2a0e8f7e69336baef Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 9 Oct 2024 17:18:08 +0200 Subject: [PATCH 277/544] Remove one redundant call of SetAiLogicDataForTurn in DoBattleIntro (#5491) This is already run at the end of `TryDoEventsBeforeFirstTurn` which makes the first calc redundant. I've had this removed in my project for a while and didn't notice any problems --- src/battle_main.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index e0ec3023ec..df39e745ac 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3750,7 +3750,6 @@ static void DoBattleIntro(void) gBattleStruct->eventsBeforeFirstTurnState = 0; gBattleStruct->switchInBattlerCounter = 0; gBattleStruct->overworldWeatherDone = FALSE; - SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield. // Try to set a status to start the battle with From 806321f3c8e497b245000c078b1284a67df5872f Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 9 Oct 2024 18:24:39 +0200 Subject: [PATCH 278/544] Update shed_tail.c (#5494) --- test/battle/move_effect/shed_tail.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c index d69993b88b..3b2417f7c7 100644 --- a/test/battle/move_effect/shed_tail.c +++ b/test/battle/move_effect/shed_tail.c @@ -88,6 +88,7 @@ SINGLE_BATTLE_TEST("Shed Tail's HP cost doesn't trigger effects that trigger on AI_SINGLE_BATTLE_TEST("AI will use Shed Tail to pivot to another mon while in damage stalemate with player") { + KNOWN_FAILING; // missing AI code GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET) { Speed(100); Ability(ABILITY_RUN_AWAY); Moves(MOVE_TACKLE, MOVE_CELEBRATE); } From d0a97970baae433f24e3e62a4a3b3e942157ea76 Mon Sep 17 00:00:00 2001 From: AlexOn1ine Date: Thu, 10 Oct 2024 09:55:25 +0200 Subject: [PATCH 279/544] Unify GetBattlerAbility/TerrainAffected to remove duplicate ai function --- include/battle_ai_util.h | 2 -- src/battle_ai_main.c | 16 +++++++++------- src/battle_ai_util.c | 36 ------------------------------------ src/battle_main.c | 2 ++ src/battle_util.c | 4 ++-- 5 files changed, 13 insertions(+), 47 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 69cf92ed0d..c87a35e750 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -52,8 +52,6 @@ bool32 DoesBattlerIgnoreAbilityChecks(u32 atkAbility, u32 move); u32 AI_GetWeather(struct AiLogicData *aiData); bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits); bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits); -bool32 AI_IsTerrainAffected(u32 battlerId, u32 flags); -bool32 AI_IsBattlerGrounded(u32 battlerId); bool32 HasDamagingMove(u32 battlerId); bool32 HasDamagingMoveOfType(u32 battlerId, u32 type); u32 GetBattlerSecondaryDamage(u32 battlerId); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index a08ca0f71f..1b2f24e635 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -477,6 +477,7 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) // get/assume all battler data and simulate AI damage battlersCount = gBattlersCount; + AI_DATA->aiCalcInProgress = TRUE; for (battlerAtk = 0; battlerAtk < battlersCount; battlerAtk++) { if (!IsBattlerAlive(battlerAtk)) @@ -492,6 +493,7 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) SetBattlerAiMovesData(aiData, battlerAtk, battlersCount); } + AI_DATA->aiCalcInProgress = FALSE; } static bool32 AI_SwitchMonIfSuitable(u32 battler, bool32 doubleBattle) @@ -1017,19 +1019,19 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(10); // terrain & effect checks - if (AI_IsTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) { if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) RETURN_SCORE_MINUS(20); } - if (AI_IsTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) + if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_MISTY_TERRAIN)) { if (IsNonVolatileStatusMoveEffect(moveEffect) || IsConfusionMoveEffect(moveEffect)) RETURN_SCORE_MINUS(20); } - if (AI_IsTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && atkPriority > 0) + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && atkPriority > 0) { RETURN_SCORE_MINUS(20); } @@ -1250,10 +1252,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (isDoubleBattle) { if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) - && AI_IsBattlerGrounded(battlerAtk) + && IsBattlerGrounded(battlerAtk) && (BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK))) && !(IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS) - && AI_IsBattlerGrounded(BATTLE_PARTNER(battlerAtk)) + && IsBattlerGrounded(BATTLE_PARTNER(battlerAtk)) && aiData->abilities[BATTLE_PARTNER(battlerAtk)] != ABILITY_CONTRARY && (BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_ATK) || BattlerStatCanRise(BATTLE_PARTNER(battlerAtk), aiData->abilities[BATTLE_PARTNER(battlerAtk)], STAT_SPATK)))) @@ -1262,7 +1264,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } } else if (!(IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) - && AI_IsBattlerGrounded(battlerAtk) + && IsBattlerGrounded(battlerAtk) && (BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_ATK) || BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPATK)))) { ADJUST_SCORE(-10); @@ -3947,7 +3949,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_SAFEGUARD: - if (!AI_IsTerrainAffected(battlerAtk, STATUS_FIELD_MISTY_TERRAIN) || !IsBattlerGrounded(battlerAtk)) + if (!IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_MISTY_TERRAIN) || !IsBattlerGrounded(battlerAtk)) ADJUST_SCORE(DECENT_EFFECT); // TODO: check if opp has status move? //if (CountUsablePartyMons(battlerDef) != 0) //ADJUST_SCORE(8); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index bf84f98b4d..1288ed1201 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1344,42 +1344,6 @@ u32 AI_DecideHoldEffectForTurn(u32 battlerId) return holdEffect; } -bool32 AI_IsTerrainAffected(u32 battlerId, u32 flags) -{ - if (gStatuses3[battlerId] & STATUS3_SEMI_INVULNERABLE) - return FALSE; - else if (!(gFieldStatuses & flags)) - return FALSE; - return AI_IsBattlerGrounded(battlerId); -} - -// different from IsBattlerGrounded in that we don't always know battler's hold effect or ability -bool32 AI_IsBattlerGrounded(u32 battlerId) -{ - u32 holdEffect = AI_DATA->holdEffects[battlerId]; - - if (holdEffect == HOLD_EFFECT_IRON_BALL) - return TRUE; - else if (gFieldStatuses & STATUS_FIELD_GRAVITY) - return TRUE; - else if (gStatuses3[battlerId] & STATUS3_ROOTED) - return TRUE; - else if (gStatuses3[battlerId] & STATUS3_SMACKED_DOWN) - return TRUE; - else if (gStatuses3[battlerId] & STATUS3_TELEKINESIS) - return FALSE; - else if (gStatuses3[battlerId] & STATUS3_MAGNET_RISE) - return FALSE; - else if (holdEffect == HOLD_EFFECT_AIR_BALLOON) - return FALSE; - else if (AI_DATA->abilities[battlerId] == ABILITY_LEVITATE) - return FALSE; - else if (IS_BATTLER_OF_TYPE(battlerId, TYPE_FLYING)) - return FALSE; - else - return TRUE; -} - bool32 DoesBattlerIgnoreAbilityChecks(u32 atkAbility, u32 move) { if (AI_THINKING_STRUCT->aiFlags[sBattler_AI] & AI_FLAG_NEGATE_UNAWARE) diff --git a/src/battle_main.c b/src/battle_main.c index 6e8a0d0e8f..b2b6e14447 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4196,6 +4196,7 @@ static void HandleTurnActionSelectionState(void) if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) && (BattlerHasAi(battler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + AI_DATA->aiCalcInProgress = TRUE; if (ShouldSwitch(battler, FALSE)) AI_DATA->shouldSwitch |= (1u << battler); if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY) // Risky AI switches aggressively even mid battle @@ -4204,6 +4205,7 @@ static void HandleTurnActionSelectionState(void) AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE); gBattleStruct->aiMoveOrAction[battler] = ComputeBattleAiScores(battler); + AI_DATA->aiCalcInProgress = FALSE; } // fallthrough case STATE_BEFORE_ACTION_CHOSEN: // Choose an action. diff --git a/src/battle_util.c b/src/battle_util.c index 01b41aaf7a..d98ce5cbb8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6394,7 +6394,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_PROTOSYNTHESIS: - if (!gDisableStructs[battler].weatherAbilityDone + if (!gDisableStructs[battler].weatherAbilityDone && (gBattleWeather & B_WEATHER_SUN) && WEATHER_HAS_EFFECT && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && !(gBattleStruct->boosterEnergyActivates & (1u << battler))) @@ -8683,7 +8683,7 @@ static bool32 IsBattlerGrounded2(u32 battler, bool32 considerInverse) return FALSE; if (holdEffect == HOLD_EFFECT_AIR_BALLOON) return FALSE; - if (GetBattlerAbility(battler) == ABILITY_LEVITATE) + if ((AI_DATA->aiCalcInProgress ? AI_DATA->abilities[battler] : GetBattlerAbility(battler)) == ABILITY_LEVITATE) return FALSE; if (IS_BATTLER_OF_TYPE(battler, TYPE_FLYING) && (!considerInverse || !FlagGet(B_FLAG_INVERSE_BATTLE))) return FALSE; From ab50009526e258994bd30fd891b7c0643d3b8e95 Mon Sep 17 00:00:00 2001 From: AlexOn1ine Date: Thu, 10 Oct 2024 10:04:44 +0200 Subject: [PATCH 280/544] rename IsBattlerGround2 --- src/battle_util.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index d98ce5cbb8..83ed114c07 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8665,7 +8665,7 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) } // Only called directly when calculating damage type effectiveness -static bool32 IsBattlerGrounded2(u32 battler, bool32 considerInverse) +static bool32 IsBattlerGroundedInverseCheck(u32 battler, bool32 considerInverse) { u32 holdEffect = GetBattlerHoldEffect(battler, TRUE); @@ -8692,7 +8692,7 @@ static bool32 IsBattlerGrounded2(u32 battler, bool32 considerInverse) bool32 IsBattlerGrounded(u32 battler) { - return IsBattlerGrounded2(battler, FALSE); + return IsBattlerGroundedInverseCheck(battler, FALSE); } bool32 IsBattlerAlive(u32 battler) @@ -10484,7 +10484,7 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov if (B_GLARE_GHOST < GEN_4 && move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) modifier = UQ_4_12(0.0); } - else if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gMovesInfo[move].ignoreTypeIfFlyingAndUngrounded)) + else if (moveType == TYPE_GROUND && !IsBattlerGroundedInverseCheck(battlerDef, TRUE) && !(gMovesInfo[move].ignoreTypeIfFlyingAndUngrounded)) { modifier = UQ_4_12(0.0); if (recordAbilities && defAbility == ABILITY_LEVITATE) From 2afc7f6138969c48a5bcf7a3eed0df54d488e5bf Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Thu, 10 Oct 2024 06:54:35 -0400 Subject: [PATCH 281/544] ShouldPivot type cleanup (#5441) * Cleanup ShouldPivot type * PIVOT to SHOULD_PIVOT --- include/battle_ai_util.h | 9 ++++++++- src/battle_ai_main.c | 6 +++--- src/battle_ai_util.c | 43 ++++++++++++++++++---------------------- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 69cf92ed0d..6d94c0b992 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -15,6 +15,13 @@ enum DamageRollType DMG_ROLL_HIGHEST, }; +enum AIPivot +{ + DONT_PIVOT, + CAN_TRY_PIVOT, + SHOULD_PIVOT, +}; + bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_RandLessThan(u32 val); @@ -65,7 +72,7 @@ u32 GetBattlerSideSpeedAverage(u32 battler); bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage); bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent); bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect); -bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex); +enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex); bool32 IsRecycleEncouragedItem(u32 item); bool32 ShouldRestoreHpBerry(u32 battlerAtk, u32 item); bool32 IsStatBoostingBerry(u32 item); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index a08ca0f71f..47f73aaea4 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3634,12 +3634,12 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) { switch (ShouldPivot(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, movesetIndex)) { - case 0: // no + case DONT_PIVOT: ADJUST_SCORE(-10); // technically should go in CheckBadMove, but this is easier/less computationally demanding break; - case 1: // maybe + case CAN_TRY_PIVOT: break; - case 2: // yes + case SHOULD_PIVOT: ADJUST_SCORE(BEST_EFFECT); break; } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index bf84f98b4d..12a3a633a7 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2685,12 +2685,7 @@ static bool32 PartyBattlerShouldAvoidHazards(u32 currBattler, u32 switchBattler) return FALSE; } -enum { - DONT_PIVOT, - CAN_TRY_PIVOT, - PIVOT, -}; -bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex) +enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex) { bool32 hasStatBoost = AnyUsefulStatIsRaised(battlerAtk) || gBattleMons[battlerDef].statStages[STAT_EVASION] >= 9; //Significant boost in evasion for any class u32 battlerToSwitch; @@ -2707,7 +2702,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 //TODO - predict opponent switching /*if (IsPredictedToSwitch(battlerDef, battlerAtk) && !hasStatBoost) - return PIVOT; // Try pivoting so you can switch to a better matchup to counter your new opponent*/ + return SHOULD_PIVOT; // Try pivoting so you can switch to a better matchup to counter your new opponent*/ if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first { @@ -2717,14 +2712,14 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 { // attacker can kill target in two hits (theoretically) if (CanTargetFaintAi(battlerDef, battlerAtk)) - return PIVOT; // Won't get the two turns, pivot + return SHOULD_PIVOT; // Won't get the two turns, pivot if (!IS_MOVE_STATUS(move) && ((AI_DATA->shouldSwitch & (1u << battlerAtk)) || (AtMaxHp(battlerDef) && (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_FOCUS_SASH || (B_STURDY >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD)))) - return PIVOT; // pivot to break sash/sturdy/multiscale + return SHOULD_PIVOT; // pivot to break sash/sturdy/multiscale } else if (!hasStatBoost) { @@ -2732,17 +2727,17 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 || (B_STURDY >= GEN_5 && defAbility == ABILITY_STURDY) || defAbility == ABILITY_MULTISCALE || defAbility == ABILITY_SHADOW_SHIELD))) - return PIVOT; // pivot to break sash/sturdy/multiscale + return SHOULD_PIVOT; // pivot to break sash/sturdy/multiscale if (AI_DATA->shouldSwitch & (1u << battlerAtk)) - return PIVOT; + return SHOULD_PIVOT; /* TODO - check if switchable mon unafffected by/will remove hazards if (gSideStatuses[battlerAtk] & SIDE_STATUS_SPIKES && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS) - return PIVOT;*/ + return SHOULD_PIVOT;*/ /*if (BattlerWillFaintFromSecondaryDamage(battlerAtk, AI_DATA->abilities[battlerAtk]) && switchScore >= SWITCHING_INCREASE_WALLS_FOE) - return PIVOT;*/ + return SHOULD_PIVOT;*/ /*if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE) { @@ -2753,20 +2748,20 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 if (physMoveInMoveset && !specMoveInMoveset) { if (STAT_STAGE_ATK < 6) - return PIVOT; + return SHOULD_PIVOT; } else if (!physMoveInMoveset && specMoveInMoveset) { if (STAT_STAGE_SPATK < 6) - return PIVOT; + return SHOULD_PIVOT; } else if (physMoveInMoveset && specMoveInMoveset) { if (STAT_STAGE_ATK < 6 && STAT_STAGE_SPATK < 6) - return PIVOT; + return SHOULD_PIVOT; } - return CAN_TRY_PIVOT; + return SHOULD_PIVOT; }*/ } } @@ -2789,7 +2784,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 } else // Can't KO the foe { - return PIVOT; + return SHOULD_PIVOT; } } else // Foe can 3HKO+ AI @@ -2815,17 +2810,17 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 else { //if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_KO_FOE) - //return PIVOT; //Only switch if way better matchup + //return SHOULD_PIVOT; //Only switch if way better matchup if (!hasStatBoost) { // TODO - check if switching prevents/removes hazards //if (gSideStatuses[battlerAtk] & SIDE_STATUS_SPIKES && switchScore >= SWITCHING_INCREASE_CAN_REMOVE_HAZARDS) - //return PIVOT; + //return SHOULD_PIVOT; // TODO - not always a good idea //if (BattlerWillFaintFromSecondaryDamage(battlerAtk) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE) - //return PIVOT; + //return SHOULD_PIVOT; /*if (IsClassDamager(class) && switchScore >= SWITCHING_INCREASE_HAS_SUPER_EFFECTIVE_MOVE) { @@ -2836,17 +2831,17 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 if (physMoveInMoveset && !specMoveInMoveset) { if (STAT_STAGE_ATK < 6) - return PIVOT; + return SHOULD_PIVOT; } else if (!physMoveInMoveset && specMoveInMoveset) { if (STAT_STAGE_SPATK < 6) - return PIVOT; + return SHOULD_PIVOT; } else if (physMoveInMoveset && specMoveInMoveset) { if (STAT_STAGE_ATK < 6 && STAT_STAGE_SPATK < 6) - return PIVOT; + return SHOULD_PIVOT; } }*/ From d0379b9b55ccc185d7ea80d152d7998d8cfabdd5 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 10 Oct 2024 14:23:59 +0200 Subject: [PATCH 282/544] Turn item hold effects into an enum (#5498) * Turn item hold effects into an enum * Rename to ItemHoldEffect --- include/battle_ai_util.h | 3 - include/constants/hold_effects.h | 324 +++++++++++++++---------------- 2 files changed, 160 insertions(+), 167 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 6d94c0b992..d900f4dd69 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -87,7 +87,6 @@ bool32 AnyStatIsRaised(u32 battlerId); bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat); bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat); bool32 AreBattlersStatsMaxed(u32 battler); -bool32 BattlerHasAnyStatRaised(u32 battlerId); u32 CountPositiveStatStages(u32 battlerId); u32 CountNegativeStatStages(u32 battlerId); bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility); @@ -127,7 +126,6 @@ bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool bool32 HasAnyKnownMove(u32 battlerId); bool32 IsAromaVeilProtectedMove(u32 move); bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect); -bool32 IsStatLoweringMoveEffect(u32 moveEffect); bool32 IsMoveRedirectionPrevented(u32 move, u32 atkAbility); bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move); bool32 IsHazardMoveEffect(u32 moveEffect); @@ -180,7 +178,6 @@ bool32 AI_IsBattlerAsleepOrComatose(u32 battlerId); #define IS_TARGETING_PARTNER(battlerAtk, battlerDef)((battlerAtk) == (battlerDef ^ BIT_FLANK)) u32 GetAllyChosenMove(u32 battlerId); bool32 IsValidDoubleBattle(u32 battlerAtk); -bool32 IsTargetingPartner(u32 battlerAtk, u32 battlerDef); bool32 DoesPartnerHaveSameMoveEffect(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove); bool32 PartnerHasSameMoveEffectWithoutTarget(u32 battlerAtkPartner, u32 move, u32 partnerMove); bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef, u32 partnerMove); diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index a159102932..c85ec82302 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -1,171 +1,167 @@ #ifndef GUARD_HOLD_EFFECTS_H #define GUARD_HOLD_EFFECTS_H -#define HOLD_EFFECT_NONE 0 -#define HOLD_EFFECT_RESTORE_HP 1 -#define HOLD_EFFECT_CURE_PAR 2 -#define HOLD_EFFECT_CURE_SLP 3 -#define HOLD_EFFECT_CURE_PSN 4 -#define HOLD_EFFECT_CURE_BRN 5 -#define HOLD_EFFECT_CURE_FRZ 6 -#define HOLD_EFFECT_RESTORE_PP 7 -#define HOLD_EFFECT_CURE_CONFUSION 8 -#define HOLD_EFFECT_CURE_STATUS 9 -#define HOLD_EFFECT_CONFUSE_SPICY 10 -#define HOLD_EFFECT_CONFUSE_DRY 11 -#define HOLD_EFFECT_CONFUSE_SWEET 12 -#define HOLD_EFFECT_CONFUSE_BITTER 13 -#define HOLD_EFFECT_CONFUSE_SOUR 14 -#define HOLD_EFFECT_ATTACK_UP 15 -#define HOLD_EFFECT_DEFENSE_UP 16 -#define HOLD_EFFECT_SPEED_UP 17 -#define HOLD_EFFECT_SP_ATTACK_UP 18 -#define HOLD_EFFECT_SP_DEFENSE_UP 19 -#define HOLD_EFFECT_CRITICAL_UP 20 -#define HOLD_EFFECT_RANDOM_STAT_UP 21 -#define HOLD_EFFECT_EVASION_UP 22 -#define HOLD_EFFECT_RESTORE_STATS 23 -#define HOLD_EFFECT_MACHO_BRACE 24 -#define HOLD_EFFECT_EXP_SHARE 25 -#define HOLD_EFFECT_QUICK_CLAW 26 -#define HOLD_EFFECT_FRIENDSHIP_UP 27 -#define HOLD_EFFECT_MENTAL_HERB 28 -#define HOLD_EFFECT_CHOICE_BAND 29 -#define HOLD_EFFECT_FLINCH 30 -#define HOLD_EFFECT_BUG_POWER 31 -#define HOLD_EFFECT_DOUBLE_PRIZE 32 -#define HOLD_EFFECT_REPEL 33 -#define HOLD_EFFECT_SOUL_DEW 34 -#define HOLD_EFFECT_DEEP_SEA_TOOTH 35 -#define HOLD_EFFECT_DEEP_SEA_SCALE 36 -#define HOLD_EFFECT_CAN_ALWAYS_RUN 37 -#define HOLD_EFFECT_PREVENT_EVOLVE 38 -#define HOLD_EFFECT_FOCUS_BAND 39 -#define HOLD_EFFECT_LUCKY_EGG 40 -#define HOLD_EFFECT_SCOPE_LENS 41 -#define HOLD_EFFECT_STEEL_POWER 42 -#define HOLD_EFFECT_LEFTOVERS 43 -#define HOLD_EFFECT_DRAGON_SCALE 44 -#define HOLD_EFFECT_LIGHT_BALL 45 -#define HOLD_EFFECT_GROUND_POWER 46 -#define HOLD_EFFECT_ROCK_POWER 47 -#define HOLD_EFFECT_GRASS_POWER 48 -#define HOLD_EFFECT_DARK_POWER 49 -#define HOLD_EFFECT_FIGHTING_POWER 50 -#define HOLD_EFFECT_ELECTRIC_POWER 51 -#define HOLD_EFFECT_WATER_POWER 52 -#define HOLD_EFFECT_FLYING_POWER 53 -#define HOLD_EFFECT_POISON_POWER 54 -#define HOLD_EFFECT_ICE_POWER 55 -#define HOLD_EFFECT_GHOST_POWER 56 -#define HOLD_EFFECT_PSYCHIC_POWER 57 -#define HOLD_EFFECT_FIRE_POWER 58 -#define HOLD_EFFECT_DRAGON_POWER 59 -#define HOLD_EFFECT_NORMAL_POWER 60 -#define HOLD_EFFECT_UPGRADE 61 -#define HOLD_EFFECT_SHELL_BELL 62 -#define HOLD_EFFECT_LUCKY_PUNCH 63 -#define HOLD_EFFECT_METAL_POWDER 64 -#define HOLD_EFFECT_THICK_CLUB 65 -#define HOLD_EFFECT_LEEK 66 +enum ItemHoldEffect +{ + HOLD_EFFECT_NONE, + HOLD_EFFECT_RESTORE_HP, + HOLD_EFFECT_CURE_PAR, + HOLD_EFFECT_CURE_SLP, + HOLD_EFFECT_CURE_PSN, + HOLD_EFFECT_CURE_BRN, + HOLD_EFFECT_CURE_FRZ, + HOLD_EFFECT_RESTORE_PP, + HOLD_EFFECT_CURE_CONFUSION, + HOLD_EFFECT_CURE_STATUS, + HOLD_EFFECT_CONFUSE_SPICY, + HOLD_EFFECT_CONFUSE_DRY, + HOLD_EFFECT_CONFUSE_SWEET, + HOLD_EFFECT_CONFUSE_BITTER, + HOLD_EFFECT_CONFUSE_SOUR, + HOLD_EFFECT_ATTACK_UP, + HOLD_EFFECT_DEFENSE_UP, + HOLD_EFFECT_SPEED_UP, + HOLD_EFFECT_SP_ATTACK_UP, + HOLD_EFFECT_SP_DEFENSE_UP, + HOLD_EFFECT_CRITICAL_UP, + HOLD_EFFECT_RANDOM_STAT_UP, + HOLD_EFFECT_EVASION_UP, + HOLD_EFFECT_RESTORE_STATS, + HOLD_EFFECT_MACHO_BRACE, + HOLD_EFFECT_EXP_SHARE, + HOLD_EFFECT_QUICK_CLAW, + HOLD_EFFECT_FRIENDSHIP_UP, + HOLD_EFFECT_MENTAL_HERB, + HOLD_EFFECT_CHOICE_BAND, + HOLD_EFFECT_FLINCH, + HOLD_EFFECT_BUG_POWER, + HOLD_EFFECT_DOUBLE_PRIZE, + HOLD_EFFECT_REPEL, + HOLD_EFFECT_SOUL_DEW, + HOLD_EFFECT_DEEP_SEA_TOOTH, + HOLD_EFFECT_DEEP_SEA_SCALE, + HOLD_EFFECT_CAN_ALWAYS_RUN, + HOLD_EFFECT_PREVENT_EVOLVE, + HOLD_EFFECT_FOCUS_BAND, + HOLD_EFFECT_LUCKY_EGG, + HOLD_EFFECT_SCOPE_LENS, + HOLD_EFFECT_STEEL_POWER, + HOLD_EFFECT_LEFTOVERS, + HOLD_EFFECT_DRAGON_SCALE, + HOLD_EFFECT_LIGHT_BALL, + HOLD_EFFECT_GROUND_POWER, + HOLD_EFFECT_ROCK_POWER, + HOLD_EFFECT_GRASS_POWER, + HOLD_EFFECT_DARK_POWER, + HOLD_EFFECT_FIGHTING_POWER, + HOLD_EFFECT_ELECTRIC_POWER, + HOLD_EFFECT_WATER_POWER, + HOLD_EFFECT_FLYING_POWER, + HOLD_EFFECT_POISON_POWER, + HOLD_EFFECT_ICE_POWER, + HOLD_EFFECT_GHOST_POWER, + HOLD_EFFECT_PSYCHIC_POWER, + HOLD_EFFECT_FIRE_POWER, + HOLD_EFFECT_DRAGON_POWER, + HOLD_EFFECT_NORMAL_POWER, + HOLD_EFFECT_UPGRADE, + HOLD_EFFECT_SHELL_BELL, + HOLD_EFFECT_LUCKY_PUNCH, + HOLD_EFFECT_METAL_POWDER, + HOLD_EFFECT_THICK_CLUB, + HOLD_EFFECT_LEEK, + // Gen4 hold effects. + HOLD_EFFECT_CHOICE_SCARF, + HOLD_EFFECT_CHOICE_SPECS, + HOLD_EFFECT_DAMP_ROCK, + HOLD_EFFECT_GRIP_CLAW, + HOLD_EFFECT_HEAT_ROCK, + HOLD_EFFECT_ICY_ROCK, + HOLD_EFFECT_LIGHT_CLAY, + HOLD_EFFECT_SMOOTH_ROCK, + HOLD_EFFECT_POWER_HERB, + HOLD_EFFECT_BIG_ROOT, + HOLD_EFFECT_EXPERT_BELT, + HOLD_EFFECT_LIFE_ORB, + HOLD_EFFECT_METRONOME, + HOLD_EFFECT_MUSCLE_BAND, + HOLD_EFFECT_WIDE_LENS, + HOLD_EFFECT_WISE_GLASSES, + HOLD_EFFECT_ZOOM_LENS, + HOLD_EFFECT_LAGGING_TAIL, + HOLD_EFFECT_FOCUS_SASH, + HOLD_EFFECT_FLAME_ORB, + HOLD_EFFECT_TOXIC_ORB, + HOLD_EFFECT_STICKY_BARB, + HOLD_EFFECT_IRON_BALL, + HOLD_EFFECT_BLACK_SLUDGE, + HOLD_EFFECT_DESTINY_KNOT, + HOLD_EFFECT_SHED_SHELL, + HOLD_EFFECT_QUICK_POWDER, + HOLD_EFFECT_ADAMANT_ORB, + HOLD_EFFECT_LUSTROUS_ORB, + HOLD_EFFECT_GRISEOUS_ORB, + HOLD_EFFECT_ENIGMA_BERRY, + HOLD_EFFECT_RESIST_BERRY, + HOLD_EFFECT_POWER_ITEM, + HOLD_EFFECT_RESTORE_PCT_HP, + HOLD_EFFECT_MICLE_BERRY, + HOLD_EFFECT_CUSTAP_BERRY, + HOLD_EFFECT_JABOCA_BERRY, + HOLD_EFFECT_ROWAP_BERRY, + HOLD_EFFECT_KEE_BERRY, + HOLD_EFFECT_MARANGA_BERRY, + HOLD_EFFECT_PLATE, + // Gen5 hold effects + HOLD_EFFECT_FLOAT_STONE, + HOLD_EFFECT_EVIOLITE, + HOLD_EFFECT_ASSAULT_VEST, + HOLD_EFFECT_DRIVE, + HOLD_EFFECT_GEMS, + HOLD_EFFECT_ROCKY_HELMET, + HOLD_EFFECT_AIR_BALLOON, + HOLD_EFFECT_RED_CARD, + HOLD_EFFECT_RING_TARGET, + HOLD_EFFECT_BINDING_BAND, + HOLD_EFFECT_EJECT_BUTTON, + HOLD_EFFECT_ABSORB_BULB, + HOLD_EFFECT_CELL_BATTERY, + // Gen6 hold effects + HOLD_EFFECT_FAIRY_POWER, + HOLD_EFFECT_MEGA_STONE, + HOLD_EFFECT_SAFETY_GOGGLES, + HOLD_EFFECT_LUMINOUS_MOSS, + HOLD_EFFECT_SNOWBALL, + HOLD_EFFECT_WEAKNESS_POLICY, + HOLD_EFFECT_PRIMAL_ORB, + // Gen7 hold effects + HOLD_EFFECT_PROTECTIVE_PADS, + HOLD_EFFECT_TERRAIN_EXTENDER, + HOLD_EFFECT_SEEDS, + HOLD_EFFECT_ADRENALINE_ORB, + HOLD_EFFECT_MEMORY, + HOLD_EFFECT_Z_CRYSTAL, + // Gen8 hold effects + HOLD_EFFECT_UTILITY_UMBRELLA, + HOLD_EFFECT_EJECT_PACK, + HOLD_EFFECT_ROOM_SERVICE, + HOLD_EFFECT_BLUNDER_POLICY, + HOLD_EFFECT_HEAVY_DUTY_BOOTS, + HOLD_EFFECT_THROAT_SPRAY, + // Gen9 hold effects + HOLD_EFFECT_ABILITY_SHIELD, + HOLD_EFFECT_CLEAR_AMULET, + HOLD_EFFECT_MIRROR_HERB, + HOLD_EFFECT_PUNCHING_GLOVE, + HOLD_EFFECT_COVERT_CLOAK, + HOLD_EFFECT_LOADED_DICE, + HOLD_EFFECT_BOOSTER_ENERGY, + HOLD_EFFECT_OGERPON_MASK, + // Gen2 hold effect + HOLD_EFFECT_BERSERK_GENE, +}; -// Gen4 hold effects. -#define HOLD_EFFECT_CHOICE_SCARF 67 -#define HOLD_EFFECT_CHOICE_SPECS 68 -#define HOLD_EFFECT_DAMP_ROCK 69 -#define HOLD_EFFECT_GRIP_CLAW 70 -#define HOLD_EFFECT_HEAT_ROCK 71 -#define HOLD_EFFECT_ICY_ROCK 72 -#define HOLD_EFFECT_LIGHT_CLAY 73 -#define HOLD_EFFECT_SMOOTH_ROCK 74 -#define HOLD_EFFECT_POWER_HERB 75 -#define HOLD_EFFECT_BIG_ROOT 76 -#define HOLD_EFFECT_EXPERT_BELT 77 -#define HOLD_EFFECT_LIFE_ORB 78 -#define HOLD_EFFECT_METRONOME 79 -#define HOLD_EFFECT_MUSCLE_BAND 80 -#define HOLD_EFFECT_WIDE_LENS 81 -#define HOLD_EFFECT_WISE_GLASSES 82 -#define HOLD_EFFECT_ZOOM_LENS 83 -#define HOLD_EFFECT_LAGGING_TAIL 84 -#define HOLD_EFFECT_FOCUS_SASH 85 -#define HOLD_EFFECT_FLAME_ORB 86 -#define HOLD_EFFECT_TOXIC_ORB 87 -#define HOLD_EFFECT_STICKY_BARB 88 -#define HOLD_EFFECT_IRON_BALL 89 -#define HOLD_EFFECT_BLACK_SLUDGE 90 -#define HOLD_EFFECT_DESTINY_KNOT 91 -#define HOLD_EFFECT_SHED_SHELL 92 -#define HOLD_EFFECT_QUICK_POWDER 93 -#define HOLD_EFFECT_ADAMANT_ORB 94 -#define HOLD_EFFECT_LUSTROUS_ORB 95 -#define HOLD_EFFECT_GRISEOUS_ORB 96 -#define HOLD_EFFECT_ENIGMA_BERRY 97 -#define HOLD_EFFECT_RESIST_BERRY 98 -#define HOLD_EFFECT_POWER_ITEM 99 -#define HOLD_EFFECT_RESTORE_PCT_HP 100 -#define HOLD_EFFECT_MICLE_BERRY 101 -#define HOLD_EFFECT_CUSTAP_BERRY 102 -#define HOLD_EFFECT_JABOCA_BERRY 103 -#define HOLD_EFFECT_ROWAP_BERRY 104 -#define HOLD_EFFECT_KEE_BERRY 105 -#define HOLD_EFFECT_MARANGA_BERRY 106 -#define HOLD_EFFECT_PLATE 107 - -// Gen5 hold effects -#define HOLD_EFFECT_FLOAT_STONE 117 -#define HOLD_EFFECT_EVIOLITE 118 -#define HOLD_EFFECT_ASSAULT_VEST 119 -#define HOLD_EFFECT_DRIVE 120 -#define HOLD_EFFECT_GEMS 121 -#define HOLD_EFFECT_ROCKY_HELMET 122 -#define HOLD_EFFECT_AIR_BALLOON 123 -#define HOLD_EFFECT_RED_CARD 124 -#define HOLD_EFFECT_RING_TARGET 125 -#define HOLD_EFFECT_BINDING_BAND 126 -#define HOLD_EFFECT_EJECT_BUTTON 127 -#define HOLD_EFFECT_ABSORB_BULB 128 -#define HOLD_EFFECT_CELL_BATTERY 129 - -// Gen6 hold effects -#define HOLD_EFFECT_FAIRY_POWER 139 -#define HOLD_EFFECT_MEGA_STONE 140 -#define HOLD_EFFECT_SAFETY_GOGGLES 141 -#define HOLD_EFFECT_LUMINOUS_MOSS 142 -#define HOLD_EFFECT_SNOWBALL 143 -#define HOLD_EFFECT_WEAKNESS_POLICY 144 -#define HOLD_EFFECT_PRIMAL_ORB 145 - -// Gen7 hold effects -#define HOLD_EFFECT_PROTECTIVE_PADS 154 -#define HOLD_EFFECT_TERRAIN_EXTENDER 155 -#define HOLD_EFFECT_SEEDS 156 -#define HOLD_EFFECT_ADRENALINE_ORB 157 -#define HOLD_EFFECT_MEMORY 158 -#define HOLD_EFFECT_Z_CRYSTAL 159 - -// Gen8 hold effects -#define HOLD_EFFECT_UTILITY_UMBRELLA 169 -#define HOLD_EFFECT_EJECT_PACK 170 -#define HOLD_EFFECT_ROOM_SERVICE 171 -#define HOLD_EFFECT_BLUNDER_POLICY 172 -#define HOLD_EFFECT_HEAVY_DUTY_BOOTS 173 -#define HOLD_EFFECT_THROAT_SPRAY 174 - -// Gen9 hold effects -#define HOLD_EFFECT_ABILITY_SHIELD 175 -#define HOLD_EFFECT_CLEAR_AMULET 176 -#define HOLD_EFFECT_MIRROR_HERB 177 -#define HOLD_EFFECT_PUNCHING_GLOVE 178 -#define HOLD_EFFECT_COVERT_CLOAK 179 -#define HOLD_EFFECT_LOADED_DICE 180 -#define HOLD_EFFECT_BOOSTER_ENERGY 181 -#define HOLD_EFFECT_OGERPON_MASK 182 - -// Gen2 hold effect -#define HOLD_EFFECT_BERSERK_GENE 184 - -#define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) +#define HOLD_EFFECT_CHOICE(holdEffect) ((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) // Terrain seed params #define HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN 0 From 9ad0018c176092ea3ff2a1884cf11ae1b5a194b7 Mon Sep 17 00:00:00 2001 From: Rose <83477269+AreaZR@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:27:33 -0400 Subject: [PATCH 283/544] Fix typo: | should be || in Task_TryFieldPoisonWhiteOut Yes, this is honestly overkill, as it doesn't actually fix any behavioral bugs, but I was suggested to do this. This was a typo made in the source that GameFreak made, and the compiler warns against this. I opened a PR in pokeemerald expansion and was suggested to open one here. --- src/field_poison.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/field_poison.c b/src/field_poison.c index f254a6d142..d952b4b640 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -89,7 +89,11 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId) if (AllMonsFainted()) { // Battle facilities have their own white out script to handle the challenge loss +#ifdef BUGFIX + if (InBattlePyramid() || InBattlePike() || InTrainerHillChallenge()) +#else if (InBattlePyramid() | InBattlePike() || InTrainerHillChallenge()) +#endif gSpecialVar_Result = FLDPSN_FRONTIER_WHITEOUT; else gSpecialVar_Result = FLDPSN_WHITEOUT; From 8d2d62273bd0d3565c4edb211ae4cf6a6b35b258 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:36:01 +0100 Subject: [PATCH 284/544] Updated ability popups for Skill Swap, Mummy/Lingering Aroma, Worry Seed, Simple Beam, fix Doodle/Role Play bugs (#5493) * Updated ability popups of Skill Swap, Mummy/Lingering Aroma, Worry Seed, Simple Beam, Fix Doodle and Role Play issues * More Doodle fixes * Add tests * Fix Doodle not activating if partner is fainted and its ability cannot be suppressed * Fix tests compile * Commander cantBeOverwritten * Add battle script for Overwrite then Regular ability --- data/battle_scripts_1.s | 94 +++++++++++++--------- src/battle_message.c | 4 +- src/battle_script_commands.c | 12 ++- src/battle_util.c | 3 +- src/data/abilities.h | 1 + test/battle/ability/mummy.c | 12 +-- test/battle/move_effect/doodle.c | 40 +++++++++- test/battle/move_effect/role_play.c | 74 ++++++++++++++--- test/battle/move_effect/simple_beam.c | 74 +++++++++++++++++ test/battle/move_effect/skill_swap.c | 111 ++++++++++++++++++++++++++ test/battle/move_effect/worry_seed.c | 74 +++++++++++++++++ 11 files changed, 432 insertions(+), 67 deletions(-) create mode 100644 test/battle/move_effect/simple_beam.c create mode 100644 test/battle/move_effect/skill_swap.c create mode 100644 test/battle/move_effect/worry_seed.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 94f5736317..fa56c3ff7a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -214,27 +214,25 @@ BattleScript_EffectDoodle:: attackcanceler attackstring ppreduce + trycopyability BS_ATTACKER, BattleScript_ButItFailed attackanimation waitanimation setbyte gBattleCommunication, 0 + goto BattleScript_EffectDoodle_AfterCopy BattleScript_EffectDoodle_CopyAbility: - trycopyability BS_ATTACKER, BattleScript_ButItFailed + trycopyability BS_ATTACKER, BattleScript_MoveEnd +BattleScript_EffectDoodle_AfterCopy: .if B_ABILITY_POP_UP == TRUE - setbyte sFIXED_ABILITY_POPUP, TRUE - showabilitypopup BS_ATTACKER - pause 60 - sethword sABILITY_OVERWRITE, 0 - updateabilitypopup BS_ATTACKER - pause 20 - destroyabilitypopup - pause 40 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUpOverwriteThenNormal .endif + recordability BS_ATTACKER printstring STRINGID_PKMNCOPIEDFOE waitmessage B_WAIT_TIME_LONG switchinabilities BS_ATTACKER jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd addbyte gBattleCommunication, 1 - jumpifnoally BS_TARGET, BattleScript_MoveEnd + jumpifnoally BS_ATTACKER, BattleScript_MoveEnd setallytonextattacker BattleScript_EffectDoodle_CopyAbility goto BattleScript_MoveEnd @@ -2346,6 +2344,11 @@ BattleScript_EffectSimpleBeam:: setabilitysimple BS_TARGET, BattleScript_ButItFailed attackanimation waitanimation +.if B_ABILITY_POP_UP == TRUE + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUpOverwriteThenNormal +.endif + recordability BS_TARGET printstring STRINGID_PKMNACQUIREDSIMPLE waitmessage B_WAIT_TIME_LONG trytoclearprimalweather @@ -2444,11 +2447,17 @@ BattleScript_EffectWorrySeed:: tryworryseed BattleScript_ButItFailed attackanimation waitanimation +.if B_ABILITY_POP_UP == TRUE + copybyte gBattlerAbility, gBattlerTarget + call BattleScript_AbilityPopUpOverwriteThenNormal +.endif + recordability BS_TARGET printstring STRINGID_PKMNACQUIREDABILITY waitmessage B_WAIT_TIME_LONG trytoclearprimalweather tryrevertweatherform flushtextbox + tryendneutralizinggas BS_TARGET goto BattleScript_MoveEnd BattleScript_EffectPowerSplit:: @@ -5034,15 +5043,10 @@ BattleScript_EffectRolePlay:: attackanimation waitanimation .if B_ABILITY_POP_UP == TRUE - setbyte sFIXED_ABILITY_POPUP, TRUE - showabilitypopup BS_ATTACKER - pause 60 - sethword sABILITY_OVERWRITE, 0 - updateabilitypopup BS_ATTACKER - pause 20 - destroyabilitypopup - pause 40 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUpOverwriteThenNormal .endif + recordability BS_ATTACKER printstring STRINGID_PKMNCOPIEDFOE waitmessage B_WAIT_TIME_LONG switchinabilities BS_ATTACKER @@ -5185,12 +5189,17 @@ BattleScript_EffectSkillSwap:: tryswapabilities BattleScript_ButItFailed attackanimation waitanimation + jumpiftargetally BattleScript_EffectSkillSwap_AfterAbilityPopUp .if B_ABILITY_POP_UP == TRUE - call BattleScript_AbilityPopUpTarget - pause 20 copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpOverwriteThenNormal + copybyte gBattlerAbility, gBattlerTarget + copyhword sABILITY_OVERWRITE, gLastUsedAbility + call BattleScript_AbilityPopUpOverwriteThenNormal .endif +BattleScript_EffectSkillSwap_AfterAbilityPopUp: + recordability BS_ATTACKER + recordability BS_TARGET printstring STRINGID_PKMNSWAPPEDABILITIES waitmessage B_WAIT_TIME_LONG .if B_SKILL_SWAP >= GEN_4 @@ -7605,6 +7614,18 @@ BattleScript_AbilityPopUpScripting: sethword sABILITY_OVERWRITE, 0 return +BattleScript_AbilityPopUpOverwriteThenNormal: + setbyte sFIXED_ABILITY_POPUP, TRUE + showabilitypopup BS_ABILITY_BATTLER + pause 60 + sethword sABILITY_OVERWRITE, 0 + updateabilitypopup BS_ABILITY_BATTLER + pause 20 + recordability BS_ABILITY_BATTLER + destroyabilitypopup + pause 40 + return + BattleScript_SpeedBoostActivates:: statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_SpeedBoostActivatesEnd call BattleScript_AbilityPopUp @@ -8366,33 +8387,30 @@ BattleScript_CursedBodyActivates:: return BattleScript_MummyActivates:: - call BattleScript_AbilityPopUp +.if B_ABILITY_POP_UP == TRUE + call BattleScript_AbilityPopUpTarget + setbyte sFIXED_ABILITY_POPUP, TRUE + copybyte gBattlerAbility, gBattlerAttacker + copyhword sABILITY_OVERWRITE, gLastUsedAbility + call BattleScript_AbilityPopUpOverwriteThenNormal +.endif + recordability BS_TARGET + recordability BS_ATTACKER printstring STRINGID_ATTACKERACQUIREDABILITY waitmessage B_WAIT_TIME_LONG return BattleScript_WanderingSpiritActivates:: .if B_ABILITY_POP_UP == TRUE - setbyte sFIXED_ABILITY_POPUP, TRUE + copybyte gBattlerAbility, gBattlerTarget sethword sABILITY_OVERWRITE, ABILITY_WANDERING_SPIRIT - showabilitypopup BS_TARGET - pause 60 - sethword sABILITY_OVERWRITE, 0 - updateabilitypopup BS_TARGET - pause 20 - destroyabilitypopup - pause 40 + call BattleScript_AbilityPopUpOverwriteThenNormal copybyte gBattlerAbility, gBattlerAttacker - setbyte sFIXED_ABILITY_POPUP, TRUE copyhword sABILITY_OVERWRITE, gLastUsedAbility - showabilitypopup BS_ATTACKER - pause 60 - sethword sABILITY_OVERWRITE, 0 - updateabilitypopup BS_ATTACKER - pause 20 - destroyabilitypopup - pause 40 + call BattleScript_AbilityPopUpOverwriteThenNormal .endif + recordability BS_TARGET + recordability BS_ATTACKER printstring STRINGID_SWAPPEDABILITIES waitmessage B_WAIT_TIME_LONG switchinabilities BS_ATTACKER diff --git a/src/battle_message.c b/src/battle_message.c index ecb2932124..52c6dec6ae 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -640,7 +640,7 @@ static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor static const u8 sText_HealingWishHealed[] = _("{B_ATK_NAME_WITH_PREFIX} regained health!"); static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!"); -static const u8 sText_AttackerAquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired\n{B_LAST_ABILITY}!"); +static const u8 sText_AttackerAcquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired\n{B_ATK_ABILITY}!"); static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go higher!"); static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY}!"); static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX} using {B_LAST_ABILITY}!"); @@ -1477,7 +1477,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_HEALINGWISHHEALED - BATTLESTRINGS_TABLE_START] = sText_HealingWishHealed, [STRINGID_LUNARDANCECAMETRUE - BATTLESTRINGS_TABLE_START] = sText_LunarDanceCameTrue, [STRINGID_CUSEDBODYDISABLED - BATTLESTRINGS_TABLE_START] = sText_CursedBodyDisabled, - [STRINGID_ATTACKERACQUIREDABILITY - BATTLESTRINGS_TABLE_START] = sText_AttackerAquiredAbility, + [STRINGID_ATTACKERACQUIREDABILITY - BATTLESTRINGS_TABLE_START] = sText_AttackerAcquiredAbility, [STRINGID_TARGETABILITYSTATLOWER - BATTLESTRINGS_TABLE_START] = sText_TargetAbilityLoweredStat, [STRINGID_TARGETSTATWONTGOHIGHER - BATTLESTRINGS_TABLE_START] = sText_TargetStatWontGoHigher, [STRINGID_PKMNMOVEBOUNCEDABILITY - BATTLESTRINGS_TABLE_START] = sText_PkmnMoveBouncedViaAbility, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ba372d1c54..618164dd18 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9782,6 +9782,7 @@ static void Cmd_various(void) if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS) gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; + gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability; gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = ABILITY_SIMPLE; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -14369,7 +14370,7 @@ static void Cmd_trycopyability(void) if (gBattleMons[battler].ability == defAbility || defAbility == ABILITY_NONE || gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed - || gAbilitiesInfo[gBattleMons[BATTLE_PARTNER(battler)].ability].cantBeSuppressed + || (IsBattlerAlive(BATTLE_PARTNER(battler)) && gAbilitiesInfo[gBattleMons[BATTLE_PARTNER(battler)].ability].cantBeSuppressed && gMovesInfo[gCurrentMove].effect == EFFECT_DOODLE) || gAbilitiesInfo[defAbility].cantBeCopied) { gBattlescriptCurrInstr = cmd->failInstr; @@ -14565,9 +14566,11 @@ static void Cmd_tryswapabilities(void) } else { - u16 abilityAtk = gBattleMons[gBattlerAttacker].ability; - gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; - gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = abilityAtk; + if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) + gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability; + gLastUsedAbility = gBattleMons[gBattlerTarget].ability; + gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gBattleMons[gBattlerAttacker].ability; + gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gLastUsedAbility; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -15859,6 +15862,7 @@ static void Cmd_tryworryseed(void) } else { + gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerTarget].ability; gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = ABILITY_INSOMNIA; gBattlescriptCurrInstr = cmd->nextInstr; } diff --git a/src/battle_util.c b/src/battle_util.c index b572acc7c1..e5d8c5f041 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5546,7 +5546,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; } - gLastUsedAbility = gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; + gLastUsedAbility = gBattleMons[gBattlerAttacker].ability; + gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MummyActivates; effect++; diff --git a/src/data/abilities.h b/src/data/abilities.h index a85f114fec..ba768a0a51 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -2273,6 +2273,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = .cantBeSwapped = TRUE, .cantBeTraced = TRUE, .cantBeSuppressed = TRUE, + .cantBeOverwritten = TRUE, }, [ABILITY_ELECTROMORPHOSIS] = diff --git a/test/battle/ability/mummy.c b/test/battle/ability/mummy.c index ed80a178e6..74461ec2ee 100644 --- a/test/battle/ability/mummy.c +++ b/test/battle/ability/mummy.c @@ -70,19 +70,19 @@ SINGLE_BATTLE_TEST("Mummy doesn't replace abilities that can't be suppressed") PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; } PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } - PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } - PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; } + PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; } - PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; } PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; } - PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; } + PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; } PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; } PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; } - PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; } - PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; } GIVEN { PLAYER(SPECIES_YAMASK); diff --git a/test/battle/move_effect/doodle.c b/test/battle/move_effect/doodle.c index bf7e208646..ba7729a895 100644 --- a/test/battle/move_effect/doodle.c +++ b/test/battle/move_effect/doodle.c @@ -35,8 +35,8 @@ DOUBLE_BATTLE_TEST("Doodle can't copy a banned ability") } WHEN { TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); MESSAGE("Wynaut copied Foe Great Tusk's Protosynthesis!"); MESSAGE("Wynaut copied Foe Great Tusk's Protosynthesis!"); } @@ -56,7 +56,7 @@ DOUBLE_BATTLE_TEST("Doodle fails if user has a banned Ability") } WHEN { TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); MESSAGE("But it failed!"); } THEN { EXPECT(playerLeft->ability == ABILITY_GULP_MISSILE); @@ -74,10 +74,44 @@ DOUBLE_BATTLE_TEST("Doodle fails if partner has a banned Ability") } WHEN { TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); MESSAGE("But it failed!"); } THEN { EXPECT(playerLeft->ability == ABILITY_SHADOW_TAG); EXPECT(playerRight->ability == ABILITY_GULP_MISSILE); } } + +DOUBLE_BATTLE_TEST("Doodle fails if ally's ability can't be suppressed") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; } + PARAMETRIZE { species = SPECIES_DARMANITAN; ability = ABILITY_ZEN_MODE; } + PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } + PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; } + PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } + PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; } + PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; } + PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } + PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; } + PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; } + PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; } + PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_DOODLE, target: playerLeft); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, opponentLeft); + MESSAGE("But it failed!"); + } +} diff --git a/test/battle/move_effect/role_play.c b/test/battle/move_effect/role_play.c index 46452ec3ff..ab0d801ee9 100644 --- a/test/battle/move_effect/role_play.c +++ b/test/battle/move_effect/role_play.c @@ -1,25 +1,65 @@ #include "global.h" #include "test/battle.h" -// Technically also covers Skill Swap and Doodle since both moves use the same command as Role Play ASSUMPTIONS { ASSUME(gMovesInfo[MOVE_ROLE_PLAY].effect == EFFECT_ROLE_PLAY); } -SINGLE_BATTLE_TEST("Role Play fails if target has a banned ability") +SINGLE_BATTLE_TEST("Role Play copies target's ability") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + }WHEN { + TURN { MOVE(player, MOVE_ROLE_PLAY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROLE_PLAY, player); + ABILITY_POPUP(player, ABILITY_TELEPATHY); + } THEN { + EXPECT_EQ(player->ability, ABILITY_BLAZE); + EXPECT_EQ(opponent->ability, ABILITY_BLAZE); + } +} + +DOUBLE_BATTLE_TEST("Role Play copies target's current ability even if it changed during that turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); } + OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_ROLE_PLAY, target: opponentLeft); MOVE(opponentRight, MOVE_ROLE_PLAY, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROLE_PLAY, playerLeft); + ABILITY_POPUP(playerLeft, ABILITY_TELEPATHY); + if (MOVE_ROLE_PLAY == MOVE_DOODLE) + ABILITY_POPUP(playerRight, ABILITY_BLAZE); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROLE_PLAY, opponentRight); + ABILITY_POPUP(opponentRight, ABILITY_TORRENT); + NOT ABILITY_POPUP(opponentLeft, ABILITY_OVERGROW); // Already has ability (Doodle) + } THEN { + EXPECT_EQ(playerLeft->ability, ABILITY_OVERGROW); + if (MOVE_ROLE_PLAY == MOVE_DOODLE) + EXPECT_EQ(playerRight->ability, ABILITY_OVERGROW); + EXPECT_EQ(opponentLeft->ability, ABILITY_OVERGROW); + EXPECT_EQ(opponentRight->ability, ABILITY_OVERGROW); + } +} + +SINGLE_BATTLE_TEST("Role Play and Doodle fail if target's ability can't be copied'") { u32 species, ability; PARAMETRIZE { species = SPECIES_SHEDINJA; ability = ABILITY_WONDER_GUARD; } PARAMETRIZE { species = SPECIES_CASTFORM; ability = ABILITY_FORECAST; } - PARAMETRIZE { species = SPECIES_CHERRIM; ability = ABILITY_FLOWER_GIFT; } PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; } + PARAMETRIZE { species = SPECIES_CHERRIM; ability = ABILITY_FLOWER_GIFT; } PARAMETRIZE { species = SPECIES_ZORUA; ability = ABILITY_ILLUSION; } PARAMETRIZE { species = SPECIES_DARMANITAN; ability = ABILITY_ZEN_MODE; } - PARAMETRIZE { species = SPECIES_DITTO; ability = ABILITY_IMPOSTER; } PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } - PARAMETRIZE { species = SPECIES_MUK_ALOLAN; ability = ABILITY_POWER_OF_ALCHEMY; } + PARAMETRIZE { species = SPECIES_MUK_ALOLA; ability = ABILITY_POWER_OF_ALCHEMY; } PARAMETRIZE { species = SPECIES_PASSIMIAN; ability = ABILITY_RECEIVER; } PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } @@ -38,29 +78,34 @@ SINGLE_BATTLE_TEST("Role Play fails if target has a banned ability") PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } OPPONENT(species) { Ability(ability); } } WHEN { - TURN { MOVE(player,MOVE_ROLE_PLAY); } + TURN { MOVE(player, MOVE_ROLE_PLAY); } + TURN { MOVE(player, MOVE_DOODLE); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ROLE_PLAY, player); MESSAGE("But it failed!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, player); + MESSAGE("But it failed!"); } } -SINGLE_BATTLE_TEST("Role Play fails if user has a banned ability") +SINGLE_BATTLE_TEST("Role Play fails if user's ability can't be suppressed") { u32 species, ability; PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; } PARAMETRIZE { species = SPECIES_DARMANITAN; ability = ABILITY_ZEN_MODE; } PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } - PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } - PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; } + PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; } - PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } - PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; } PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; } - PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; } + PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; } PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; } PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; } @@ -68,9 +113,12 @@ SINGLE_BATTLE_TEST("Role Play fails if user has a banned ability") PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } OPPONENT(species) { Ability(ability); } } WHEN { - TURN { MOVE(opponent,MOVE_ROLE_PLAY); } + TURN { MOVE(opponent, MOVE_ROLE_PLAY); } + TURN { MOVE(opponent, MOVE_DOODLE); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ROLE_PLAY, opponent); MESSAGE("But it failed!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, opponent); + MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect/simple_beam.c b/test/battle/move_effect/simple_beam.c new file mode 100644 index 0000000000..e91bf0b8ce --- /dev/null +++ b/test/battle/move_effect/simple_beam.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_SIMPLE_BEAM].effect == EFFECT_SIMPLE_BEAM); +} + +SINGLE_BATTLE_TEST("Simple Beam replaces target's ability with Simple") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + }WHEN { + TURN { MOVE(player, MOVE_SIMPLE_BEAM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, player); + ABILITY_POPUP(opponent, ABILITY_BLAZE); + } THEN { + EXPECT_EQ(opponent->ability, ABILITY_SIMPLE); + } +} + +DOUBLE_BATTLE_TEST("Simple Beam fails if the target already has Simple") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); } + OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SIMPLE_BEAM, target: opponentLeft); MOVE(playerRight, MOVE_SIMPLE_BEAM, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, playerLeft); + ABILITY_POPUP(opponentLeft, ABILITY_OVERGROW); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, playerRight); + ABILITY_POPUP(opponentLeft, ABILITY_SIMPLE); + } + } THEN { + EXPECT_EQ(opponentLeft->ability, ABILITY_SIMPLE); + } +} + +SINGLE_BATTLE_TEST("Simple Beam fails if target has an ability that can't be overwritten") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; } + PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } + PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; } + PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } + PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; } + PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; } + PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } + PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; } + PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; } + PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; } + PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SIMPLE_BEAM); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, player); + MESSAGE("But it failed!"); + } +} diff --git a/test/battle/move_effect/skill_swap.c b/test/battle/move_effect/skill_swap.c new file mode 100644 index 0000000000..5f2196fe7e --- /dev/null +++ b/test/battle/move_effect/skill_swap.c @@ -0,0 +1,111 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_SKILL_SWAP].effect == EFFECT_SKILL_SWAP); +} + +SINGLE_BATTLE_TEST("Skill Swap swaps user and target's abilities") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + }WHEN { + TURN { MOVE(player, MOVE_SKILL_SWAP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); + ABILITY_POPUP(player, ABILITY_TELEPATHY); + ABILITY_POPUP(opponent, ABILITY_BLAZE); + } THEN { + EXPECT_EQ(player->ability, ABILITY_BLAZE); + EXPECT_EQ(opponent->ability, ABILITY_TELEPATHY); + } +} + +DOUBLE_BATTLE_TEST("Skill Swap only swaps user's ability with target's ability") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); } + OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SKILL_SWAP, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, playerLeft); + ABILITY_POPUP(playerLeft, ABILITY_TELEPATHY); + ABILITY_POPUP(opponentLeft, ABILITY_OVERGROW); + } THEN { + EXPECT_EQ(playerLeft->ability, ABILITY_OVERGROW); + EXPECT_EQ(playerRight->ability, ABILITY_BLAZE); + EXPECT_EQ(opponentLeft->ability, ABILITY_TELEPATHY); + EXPECT_EQ(opponentRight->ability, ABILITY_TORRENT); + } +} + +DOUBLE_BATTLE_TEST("Skill Swap doesn't display ability popups when swapping with an ally") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); } + OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SKILL_SWAP, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, playerLeft); + NONE_OF { + ABILITY_POPUP(playerLeft, ABILITY_TELEPATHY); + ABILITY_POPUP(playerRight, ABILITY_BLAZE); + } + } THEN { + EXPECT_EQ(playerLeft->ability, ABILITY_BLAZE); + EXPECT_EQ(playerRight->ability, ABILITY_TELEPATHY); + } +} + +SINGLE_BATTLE_TEST("Skill Swap fails if user or target has an ability that can't be swapped") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_SHEDINJA; ability = ABILITY_WONDER_GUARD; } + PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; } + PARAMETRIZE { species = SPECIES_ZORUA; ability = ABILITY_ILLUSION; } + PARAMETRIZE { species = SPECIES_DARMANITAN; ability = ABILITY_ZEN_MODE; } + PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } + PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; } + PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } + PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; } + PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; } + PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } + PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_KOFFING; ability = ABILITY_NEUTRALIZING_GAS; } + PARAMETRIZE { species = SPECIES_MORPEKO; ability = ABILITY_HUNGER_SWITCH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; } + PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; } + PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; } + PARAMETRIZE { species = SPECIES_GREAT_TUSK; ability = ABILITY_PROTOSYNTHESIS; } + PARAMETRIZE { species = SPECIES_IRON_TREADS; ability = ABILITY_QUARK_DRIVE; } + PARAMETRIZE { species = SPECIES_OGERPON_TEAL_MASK_TERA; ability = ABILITY_EMBODY_ASPECT_TEAL_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_MASK_TERA; ability = ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_MASK_TERA; ability = ABILITY_EMBODY_ASPECT_WELLSPRING_MASK; } + PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_MASK_TERA; ability = ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK; } + PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; ability = ABILITY_TERA_SHELL; } + PARAMETRIZE { species = SPECIES_TERAPAGOS_STELLAR; ability = ABILITY_TERAFORM_ZERO; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SKILL_SWAP); MOVE(opponent, MOVE_SKILL_SWAP); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); + MESSAGE("But it failed!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, opponent); + MESSAGE("But it failed!"); + } +} diff --git a/test/battle/move_effect/worry_seed.c b/test/battle/move_effect/worry_seed.c new file mode 100644 index 0000000000..3e74c883e7 --- /dev/null +++ b/test/battle/move_effect/worry_seed.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_WORRY_SEED].effect == EFFECT_WORRY_SEED); +} + +SINGLE_BATTLE_TEST("Worry Seed replaces target's ability with Insomnia") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + }WHEN { + TURN { MOVE(player, MOVE_WORRY_SEED); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player); + ABILITY_POPUP(opponent, ABILITY_BLAZE); + } THEN { + EXPECT_EQ(opponent->ability, ABILITY_INSOMNIA); + } +} + +DOUBLE_BATTLE_TEST("Worry Seed fails if the target already has Insomnia") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); } + OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); } + OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_WORRY_SEED, target: opponentLeft); MOVE(playerRight, MOVE_WORRY_SEED, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, playerLeft); + ABILITY_POPUP(opponentLeft, ABILITY_OVERGROW); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, playerRight); + ABILITY_POPUP(opponentLeft, ABILITY_INSOMNIA); + } + } THEN { + EXPECT_EQ(opponentLeft->ability, ABILITY_INSOMNIA); + } +} + +SINGLE_BATTLE_TEST("Worry Seed fails if target has an ability that can't be overwritten") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; } + PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; } + PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; } + PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; } + PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; } + PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; } + PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; } + PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; } + PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; } + PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; } + PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; } + PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; } + PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_WORRY_SEED); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player); + MESSAGE("But it failed!"); + } +} From 8890500b770d4712b2456d1addefbe0b44993793 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 10 Oct 2024 14:26:46 -0500 Subject: [PATCH 285/544] Fix P_FRIENDSHIP_EVO_THRESHOLD not checking for Gen 8 (#5503) --- src/pokemon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pokemon.c b/src/pokemon.c index 0583939a85..356ca64ac2 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -60,7 +60,7 @@ #include "constants/weather.h" #include "wild_encounter.h" -#define FRIENDSHIP_EVO_THRESHOLD ((P_FRIENDSHIP_EVO_THRESHOLD >= GEN_9) ? 160 : 220) +#define FRIENDSHIP_EVO_THRESHOLD ((P_FRIENDSHIP_EVO_THRESHOLD >= GEN_8) ? 160 : 220) struct SpeciesItem { From 5b4acea6519096b7b53020ee43b7ea22aabdc550 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 10 Oct 2024 14:27:50 -0500 Subject: [PATCH 286/544] Add config to change Vivillon's breeding form (#4813) * Add config to change Vivillon's default form * Update daycare.c * Remove the default form stuff * Update daycare.c * Clean up * Assert and fancy --- include/config/pokemon.h | 19 ++++++++++--------- src/daycare.c | 4 ++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 15db4881b5..cabaea2c7c 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -22,15 +22,16 @@ #define P_FRIENDSHIP_EVO_THRESHOLD GEN_LATEST // Since Gen 8, Pokémon that evolve by friendship evolve at or above 160 friendship instead of 220. // Breeding settings -#define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. -#define P_INCENSE_BREEDING GEN_LATEST // Since Gen 9, cross-generation Baby Pokémon don't require Incense being held by the parents to be obtained via breeding. -#define P_EGG_HATCH_LEVEL GEN_LATEST // Since Gen 4, Pokémon will hatch from eggs at level 1 instead of 5. -#define P_BALL_INHERITING GEN_LATEST // Since Gen 6, Eggs from the Daycare will inherit the Poké Ball from their mother. From Gen 7 onwards, the father can pass it down as well, as long as it's of the same species as the mother. -#define P_TM_INHERITANCE GEN_LATEST // Since Gen 6, the father no longer passes down TMs to the baby. -#define P_MOTHER_EGG_MOVE_INHERITANCE GEN_LATEST // Since Gen 6, the mother can also pass down Egg Moves. -#define P_NATURE_INHERITANCE GEN_LATEST // In Gen 3, Everstone grants Ditto and mothers a 50% chance to pass on Nature. Since Gen 4, anyone can pass on nature. Since Gen 5, the chance is 100%. -#define P_ABILITY_INHERITANCE GEN_LATEST // In B2W2, a female Pokémon has an 80% chance of passing down their ability if bred with a male. Since Gen 6, the chance is 80% for normal ability and 60% for Hidden Ability, and anyone can pass down their abilities if bred with Ditto. NOTE: BW's effect: 60% chance to pass down HA and random for normal ability has been omitted. -#define P_EGG_MOVE_TRANSFER GEN_LATEST // Starting in Gen 8, if two Pokémon of the same species are together in the Daycare, one knows an Egg Move, and the other has an empty slot, the other Pokémon will receive the Egg Move in the empty slot. In Gen 9, if a Pokémon holds a Mirror Herb, it will receive Egg Moves from the other regardless of species. +#define P_NIDORAN_M_DITTO_BREED GEN_LATEST // Since Gen 5, when Nidoran♂ breeds with Ditto it can produce Nidoran♀ offspring. Before, it would only yield male offspring. This change also applies to Volbeat. +#define P_INCENSE_BREEDING GEN_LATEST // Since Gen 9, cross-generation Baby Pokémon don't require Incense being held by the parents to be obtained via breeding. +#define P_EGG_HATCH_LEVEL GEN_LATEST // Since Gen 4, Pokémon will hatch from eggs at level 1 instead of 5. +#define P_BALL_INHERITING GEN_LATEST // Since Gen 6, Eggs from the Daycare will inherit the Poké Ball from their mother. From Gen 7 onwards, the father can pass it down as well, as long as it's of the same species as the mother. +#define P_TM_INHERITANCE GEN_LATEST // Since Gen 6, the father no longer passes down TMs to the baby. +#define P_MOTHER_EGG_MOVE_INHERITANCE GEN_LATEST // Since Gen 6, the mother can also pass down Egg Moves. +#define P_NATURE_INHERITANCE GEN_LATEST // In Gen 3, Everstone grants Ditto and mothers a 50% chance to pass on Nature. Since Gen 4, anyone can pass on nature. Since Gen 5, the chance is 100%. +#define P_ABILITY_INHERITANCE GEN_LATEST // In B2W2, a female Pokémon has an 80% chance of passing down their ability if bred with a male. Since Gen 6, the chance is 80% for normal ability and 60% for Hidden Ability, and anyone can pass down their abilities if bred with Ditto. NOTE: BW's effect: 60% chance to pass down HA and random for normal ability has been omitted. +#define P_EGG_MOVE_TRANSFER GEN_LATEST // Starting in Gen 8, if two Pokémon of the same species are together in the Daycare, one knows an Egg Move, and the other has an empty slot, the other Pokémon will receive the Egg Move in the empty slot. In Gen 9, if a Pokémon holds a Mirror Herb, it will receive Egg Moves from the other regardless of species. +#define P_SCATTERBUG_LINE_FORM_BREED SPECIES_SCATTERBUG_FANCY // Choose the Scatterbug form all Vivillon/Spewpa/Scatterbug will breed into, basically aligning with the "location" of the player's game. // Species-specific settings #define P_SHEDINJA_BALL GEN_LATEST // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball. diff --git a/src/daycare.c b/src/daycare.c index 7a31f15b27..780e69e44d 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -996,6 +996,8 @@ static void GiveMoveIfItem(struct Pokemon *mon, struct DayCare *daycare) } } +STATIC_ASSERT(P_SCATTERBUG_LINE_FORM_BREED == SPECIES_SCATTERBUG_ICY_SNOW || (P_SCATTERBUG_LINE_FORM_BREED >= SPECIES_SCATTERBUG_POLAR && P_SCATTERBUG_LINE_FORM_BREED <= SPECIES_SCATTERBUG_POKEBALL), ScatterbugLineFormBreedMustBeAValidScatterbugForm); + static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots) { u16 i; @@ -1030,6 +1032,8 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent eggSpecies = SPECIES_PHIONE; else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_ROTOM) eggSpecies = SPECIES_ROTOM; + else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_SCATTERBUG) + eggSpecies = P_SCATTERBUG_LINE_FORM_BREED; else if (GET_BASE_SPECIES_ID(eggSpecies) == SPECIES_FURFROU) eggSpecies = SPECIES_FURFROU; else if (eggSpecies == SPECIES_SINISTEA_ANTIQUE) From 130d6042e0cd0fcf56d713c8c5901d87637da3fb Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 10 Oct 2024 15:37:57 -0500 Subject: [PATCH 287/544] Add Ion Deluge animation (#5467) --- data/battle_anim_scripts.s | 11 ++++++ src/battle_anim_electric.c | 71 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index c16a5c7859..215b8deaff 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -7710,6 +7710,17 @@ gBattleAnimMove_NobleRoar:: end gBattleAnimMove_IonDeluge:: + loadspritegfx ANIM_TAG_IONS + loopsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER, 10, 12 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_YELLOW + waitforvisualfinish + createvisualtask AnimTask_CreateIons, 2, 0, 3, 120 + createvisualtask AnimTask_CreateIons, 2, 0, 3, 120 + delay 120 + delay 30 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 4, 0, RGB_YELLOW + waitforvisualfinish end gBattleAnimMove_ParabolicCharge:: diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index de6d820264..64114227e1 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -29,6 +29,8 @@ static bool8 CreateShockWaveBoltSprite(struct Task *task, u8 taskId); static void AnimShockWaveProgressingBolt(struct Sprite *); static bool8 CreateShockWaveLightningSprite(struct Task *task, u8 taskId); static void AnimShockWaveLightning(struct Sprite *sprite); +static void AnimIon(struct Sprite *); +static void AnimIon_Step(struct Sprite *); static const union AnimCmd sAnim_Lightning[] = { @@ -559,6 +561,34 @@ const struct SpriteTemplate gSeedFlareGreenChargeTemplate = .callback = AnimGrowingChargeOrb }; +static const union AnimCmd sAnim_Ion[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnims_Ion[] = +{ + sAnim_Ion, +}; + +const struct SpriteTemplate gIonSpriteTemplate = +{ + .tileTag = ANIM_TAG_IONS, + .paletteTag = ANIM_TAG_IONS, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = sAnims_Ion, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimIon, +}; + // functions static void AnimLightning(struct Sprite *sprite) { @@ -1452,3 +1482,44 @@ static void AnimShockWaveLightning(struct Sprite *sprite) DestroySprite(sprite); } } + +// Copy of Rain Dance's function but displays the ion sprite instead +// arg 0: initial step +// arg 1: amount (?) +// arg 2: duration +void AnimTask_CreateIons(u8 taskId) +{ + u8 x, y; + + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + } + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1) + { + x = Random2() % DISPLAY_WIDTH; + y = Random2() % (DISPLAY_HEIGHT / 2); + CreateSprite(&gIonSpriteTemplate, x, y, 4); + } + if (gTasks[taskId].data[0] == gTasks[taskId].data[3]) + DestroyAnimVisualTask(taskId); +} + +static void AnimIon(struct Sprite *sprite) +{ + sprite->callback = AnimIon_Step; +} + +static void AnimIon_Step(struct Sprite *sprite) +{ + if (++sprite->data[0] <= 13) + { + sprite->x2++; + sprite->y2 += 4; + } + if (sprite->animEnded) + DestroySprite(sprite); +} From cac815164af74818671b6e8c6756d654ff867406 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 11 Oct 2024 12:14:14 +0200 Subject: [PATCH 288/544] Cleanup extraneous function in header (#5506) --- include/battle_anim.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/battle_anim.h b/include/battle_anim.h index 6ff7e9ff22..36b21bc012 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -347,7 +347,6 @@ extern const union AnimCmd *const gAnims_WaterPulseBubble[]; // battle_anim_flying.c void DestroyAnimSpriteAfterTimer(struct Sprite *sprite); -void sub_810E2C8(struct Sprite *sprite); void AnimAirWaveCrescent(struct Sprite *sprite); void AnimFlyBallUp(struct Sprite *sprite); void AnimFlyBallAttack(struct Sprite *sprite); From 6d24d8a78f4e0fb9bc139343a970b84beabb6560 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 11 Oct 2024 13:05:56 -0400 Subject: [PATCH 289/544] Fix libpng installation for workflow on Ubuntu 24.04 --- .github/workflows/build.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 283e6f8fb5..a99c99283d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,8 +32,9 @@ jobs: repository: pret/agbcc - name: Install binutils - run: sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi - # build-essential, git, and libpng-dev are already installed + run: | + sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi libpng-dev + # build-essential and git are already installed # gcc-arm-none-eabi is only needed for the modern build # as an alternative to dkP From b5c884504c2ebee68804a614bc764a53ae565f6f Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 11 Oct 2024 19:49:24 +0200 Subject: [PATCH 290/544] Fix negative mutation value (#5504) --- src/berry.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/berry.c b/src/berry.c index 9f187bd1e2..b1e29be6db 100644 --- a/src/berry.c +++ b/src/berry.c @@ -2384,6 +2384,8 @@ static u8 GetTreeMutationValue(u8 id) myMutation.asField.a = tree->mutationA; myMutation.asField.b = tree->mutationB; myMutation.asField.unused = 0; + if (myMutation.value == 0) // no mutation + return 0; return sBerryMutations[myMutation.value - 1][2]; #else return 0; From fcc067e5154bedc92a2e8ab009718d97d1fc94e5 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 11 Oct 2024 18:50:26 +0100 Subject: [PATCH 291/544] [preproc] support C23 enum underlying type syntax (#2043) --- tools/preproc/asm_file.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index 4eda54a3aa..a82354cb5f 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -524,6 +524,17 @@ bool AsmFile::ParseEnum() long enumCounter = 0; long symbolCount = 0; + if (m_buffer[m_pos] == ':') // : + { + m_pos++; + std::string underlyingType; + do { + currentHeaderLine += SkipWhitespaceAndEol(); + underlyingType = ReadIdentifier(); + } while (!underlyingType.empty()); + currentHeaderLine += SkipWhitespaceAndEol(); + } + if (m_buffer[m_pos] != '{') // assume assembly macro, otherwise assume enum and report errors accordingly { m_pos = fallbackPosition - 4; From d7c5bfee685bf64341b46c1ef49374efc3e8fa6d Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 11 Oct 2024 19:50:41 +0200 Subject: [PATCH 292/544] Clean up Shedinja code (#5501) --- src/evolution_scene.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 98879430cb..6119494907 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -545,19 +545,13 @@ static void CB2_TradeEvolutionSceneUpdate(void) static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon) { u32 data = 0; - #if P_SHEDINJA_BALL >= GEN_4 - u16 ball = ITEM_POKE_BALL; - #endif + u16 ball = ITEM_POKE_BALL; const struct Evolution *evolutions = GetSpeciesEvolutions(preEvoSpecies); if (evolutions == NULL) return; - if (evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE - #if P_SHEDINJA_BALL >= GEN_4 - && (CheckBagHasItem(ball, 1)) - #endif - ) + if (evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE && (P_SHEDINJA_BALL < GEN_4 || CheckBagHasItem(ball, 1))) { s32 i; struct Pokemon *shedinja = &gPlayerParty[gPlayerPartyCount]; @@ -567,10 +561,11 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon) SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_NICKNAME, GetSpeciesName(evolutions[1].targetSpecies)); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_HELD_ITEM, &data); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MARKINGS, &data); - #if P_SHEDINJA_BALL >= GEN_4 - SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_POKEBALL, &ball); - RemoveBagItem(ball, 1); - #endif + if (P_SHEDINJA_BALL >= GEN_4) + { + SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_POKEBALL, &ball); + RemoveBagItem(ball, 1); + } for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + CONTEST_CATEGORIES_COUNT; i++) SetMonData(&gPlayerParty[gPlayerPartyCount], i, &data); From 464c90a862f6f60b254a53d5a60e6cd544c6fe9d Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Fri, 11 Oct 2024 13:57:19 -0400 Subject: [PATCH 293/544] ShouldSwitchIfGameStatePrompt Tests (#5462) * Weird tests plz help <3 * better RNG tag names? * DATA.trial for data to reset between trials * Fix Wonder Guard test * Unused errors * Finish new tests * Split fix into its own PR * Spacing * Rename RNG_AI_SWITCH_TOXICD * Forgot to save file lol --------- Co-authored-by: Martin Griffin --- include/random.h | 4 +++ src/battle_ai_switch_items.c | 24 +++++--------- test/battle/ai/ai_switching.c | 62 +++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 16 deletions(-) diff --git a/include/random.h b/include/random.h index 6e210bcbb4..d41e478543 100644 --- a/include/random.h +++ b/include/random.h @@ -163,6 +163,10 @@ enum RandomTag RNG_AI_ABILITY, RNG_AI_SWITCH_HASBADODDS, RNG_AI_SWITCH_WONDER_GUARD, + RNG_AI_SWITCH_BADLY_POISONED, + RNG_AI_SWITCH_CURSED, + RNG_AI_SWITCH_NIGHTMARE, + RNG_AI_SWITCH_SEEDED, RNG_SHELL_SIDE_ARM, }; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 9731a6393b..0400f18b53 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -180,7 +180,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4))) { // 50% chance to stay in regardless - if (!RandomPercentage(RNG_AI_SWITCH_HASBADODDS, 50)) + if (RandomPercentage(RNG_AI_SWITCH_HASBADODDS, 50)) return FALSE; // Switch mon out @@ -203,7 +203,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; // 50% chance to stay in regardless - if (!RandomPercentage(RNG_AI_SWITCH_HASBADODDS, 50)) + if (RandomPercentage(RNG_AI_SWITCH_HASBADODDS, 50)) return FALSE; // Switch mon out @@ -462,16 +462,12 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) u16 holdEffect = AI_DATA->holdEffects[battler]; u8 opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); u8 opposingBattler = GetBattlerAtPosition(opposingPosition); - s32 moduloChance = 4; //25% Chance Default - s32 chanceReducer = 1; //No Reduce default. Increase to reduce + bool32 hasStatRaised = AnyStatIsRaised(battler); s32 firstId; s32 lastId; s32 i; struct Pokemon *party; - if (AnyStatIsRaised(battler)) - chanceReducer = 5; // Reduce switchout probability by factor of 5 if setup - //Perish Song if (gStatuses3[battler] & STATUS3_PERISH_SONG && gDisableStructs[battler].perishSongTimer == 0 @@ -567,28 +563,24 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) && !AiExpectsToFaintPlayer(battler)) { //Toxic - moduloChance = 2; //50% if (((gBattleMons[battler].status1 & STATUS1_TOXIC_COUNTER) >= STATUS1_TOXIC_TURN(2)) && gBattleMons[battler].hp >= (gBattleMons[battler].maxHP / 3) - && (Random() % (moduloChance*chanceReducer)) == 0) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_BADLY_POISONED, 20) : RandomPercentage(RNG_AI_SWITCH_BADLY_POISONED, 50))) switchMon = TRUE; //Cursed - moduloChance = 2; //50% if (gBattleMons[battler].status2 & STATUS2_CURSED - && (Random() % (moduloChance*chanceReducer)) == 0) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_CURSED, 20) : RandomPercentage(RNG_AI_SWITCH_CURSED, 50))) switchMon = TRUE; //Nightmare - moduloChance = 3; //33.3% if (gBattleMons[battler].status2 & STATUS2_NIGHTMARE - && (Random() % (moduloChance*chanceReducer)) == 0) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_NIGHTMARE, 15) : RandomPercentage(RNG_AI_SWITCH_NIGHTMARE, 33))) switchMon = TRUE; //Leech Seed - moduloChance = 4; //25% if (gStatuses3[battler] & STATUS3_LEECHSEED - && (Random() % (moduloChance*chanceReducer)) == 0) + && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_SEEDED, 10) : RandomPercentage(RNG_AI_SWITCH_SEEDED, 25))) switchMon = TRUE; } @@ -606,7 +598,7 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) if (FindMonThatAbsorbsOpponentsMove(battler, FALSE)) // Switch if absorber found. Note: FindMonThatAbsorbsOpponentsMove already provides id of the mon to switch into to gBattleStruct->AI_monToSwitchIntoId. switchMon = TRUE, monIdChosen = TRUE; if (!AI_OpponentCanFaintAiWithMod(battler, 0) - && AnyStatIsRaised(battler)) + && hasStatRaised) switchMon = FALSE; if (AiExpectsToFaintPlayer(battler) && AI_IsSlower(battler, opposingBattler, 0) diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index f3b2429dd8..a70163af18 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -486,3 +486,65 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it can't d TURN { MOVE(player, MOVE_TACKLE) ; EXPECT_SWITCH(opponent, 1); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Toxic'd for at least two turns 50% of the time with more than 1/3 HP remaining") +{ + PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_BADLY_POISONED); + GIVEN { + ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE, MOVE_CELEBRATE, MOVE_TOXIC); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Curse'd 50% of the time") +{ + PASSES_RANDOMLY(50, 100, RNG_AI_SWITCH_CURSED); + GIVEN { + ASSUME(gMovesInfo[MOVE_CURSE].effect == EFFECT_CURSE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_DUSCLOPS) { Moves(MOVE_FIRE_PUNCH, MOVE_CURSE); } + PLAYER(SPECIES_MILOTIC) { Moves(MOVE_WATER_GUN); } + OPPONENT(SPECIES_DUSCLOPS) { Moves(MOVE_SHADOW_BALL); } + OPPONENT(SPECIES_DUSCLOPS) { Moves(MOVE_SHADOW_BALL); } + } WHEN { + TURN { MOVE(player, MOVE_CURSE) ; EXPECT_MOVE(opponent, MOVE_SHADOW_BALL); } + TURN { MOVE(player, MOVE_FIRE_PUNCH); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Nightmare'd 33% of the time") +{ + PASSES_RANDOMLY(33, 100, RNG_AI_SWITCH_NIGHTMARE); + GIVEN { + ASSUME(gMovesInfo[MOVE_NIGHTMARE].effect == EFFECT_NIGHTMARE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_GENGAR) { Moves(MOVE_NIGHTMARE); } + OPPONENT(SPECIES_DUSCLOPS) { Moves(MOVE_SHADOW_BALL); Status1(STATUS1_SLEEP); } + OPPONENT(SPECIES_DUSCLOPS) { Moves(MOVE_SHADOW_BALL); } + } WHEN { + TURN { MOVE(player, MOVE_NIGHTMARE) ; EXPECT_MOVE(opponent, MOVE_SHADOW_BALL); } + TURN { MOVE(player, MOVE_NIGHTMARE) ; EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has been Leech Seed'd 25% of the time") +{ + PASSES_RANDOMLY(25, 100, RNG_AI_SWITCH_SEEDED); + GIVEN { + ASSUME(gMovesInfo[MOVE_LEECH_SEED].effect == EFFECT_LEECH_SEED); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_WHIMSICOTT) { Moves(MOVE_LEECH_SEED); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_LEECH_SEED) ; EXPECT_MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_LEECH_SEED); EXPECT_SWITCH(opponent, 1); } + } +} From 2c7964dbc273b0bed4456cdbd31ed4ee9b0bc783 Mon Sep 17 00:00:00 2001 From: mid-kid Date: Fri, 11 Oct 2024 18:33:32 +0000 Subject: [PATCH 294/544] Fix deleting files with dependency files (#2045) --- Makefile | 4 +--- tools/scaninc/scaninc.cpp | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 5eaf4cf0bc..ee36562b13 100644 --- a/Makefile +++ b/Makefile @@ -315,10 +315,9 @@ else @echo -e ".text\n\t.align\t2, 0\n" >> $3.s $$(AS) $$(ASFLAGS) -o $$@ $3.s endif +ifneq ($(NODEP),1) $1.d: $2 $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $2 -ifneq ($(NODEP),1) -$1.o: $1.d -include $1.d endif endef @@ -346,7 +345,6 @@ endef define ASM_SCANINC ifneq ($(NODEP),1) -$1.o: $1.d $1.d: $2 $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I "" $2 -include $1.d diff --git a/tools/scaninc/scaninc.cpp b/tools/scaninc/scaninc.cpp index c1b7987a5a..d470a3f163 100644 --- a/tools/scaninc/scaninc.cpp +++ b/tools/scaninc/scaninc.cpp @@ -157,19 +157,29 @@ int main(int argc, char **argv) // Print a make rule for the object file size_t ext_pos = make_outfile.find_last_of("."); auto object_file = make_outfile.substr(0, ext_pos + 1) + "o"; - output << object_file.c_str() << ": "; + output << object_file.c_str() << ":"; for (const std::string &path : dependencies) { - output << path << " "; + output << " " << path; } + output << '\n'; // Dependency list rule. // Although these rules are identical, they need to be separate, else make will trigger the rule again after the file is created for the first time. - output << "\n" << make_outfile.c_str() << ": "; + output << make_outfile.c_str() << ":"; for (const std::string &path : dependencies_includes) { - output << path << " "; + output << " " << path; } + output << '\n'; + + // Dummy rules + // If a dependency is deleted, make will try to make it, instead of rescanning the dependencies before trying to do that. + for (const std::string &path : dependencies) + { + output << path << ":\n"; + } + output.flush(); output.close(); } From b6892f5b67782afe05fcd31eaa2d1850bc4e3bc1 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 11 Oct 2024 15:03:38 -0400 Subject: [PATCH 295/544] Let scaninc ignore empty C files --- tools/scaninc/c_file.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/scaninc/c_file.cpp b/tools/scaninc/c_file.cpp index 595f366cbe..c1fe10d374 100644 --- a/tools/scaninc/c_file.cpp +++ b/tools/scaninc/c_file.cpp @@ -33,6 +33,11 @@ CFile::CFile(std::string path) m_size = std::ftell(fp); + if (m_size < 0) + FATAL_ERROR("File size of \"%s\" is less than zero.\n", path.c_str()); + else if (m_size == 0) + return; // Empty file + m_buffer = new char[m_size + 1]; m_buffer[m_size] = 0; @@ -49,7 +54,7 @@ CFile::CFile(std::string path) CFile::~CFile() { - delete[] m_buffer; + if (m_size > 0) delete[] m_buffer; } void CFile::FindIncbins() From 2db1f071fa1348959ccaae88c88bd80fbd8ef129 Mon Sep 17 00:00:00 2001 From: SarnPoke <77281351+SarnPoke@users.noreply.github.com> Date: Fri, 11 Oct 2024 21:59:50 +0200 Subject: [PATCH 296/544] =?UTF-8?q?Add=20battle=20flag=20that=20prevents?= =?UTF-8?q?=20running=20from=20wild=20Pok=C3=A9mon=20(#5502)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add No Running Battle Flag Adds a flag that if set prevents the player from being able to run from wild battles. * Formatting battle_util.c Co-authored-by: Bassoonian * Adjust for pre-Gen 8 Teleport Addresses the edge case with Teleport when used with under Gen 8 mechanics. --------- Co-authored-by: Bassoonian --- include/config/battle.h | 1 + src/battle_main.c | 9 ++++++++- src/battle_script_commands.c | 3 +++ src/battle_util.c | 4 ++++ src/overworld.c | 1 + 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index ab2178eacc..14d2b47d32 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -187,6 +187,7 @@ #define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon #define B_FLAG_NO_BAG_USE 0 // If this flag is set, the ability to use the bag in battle is disabled. #define B_FLAG_NO_CATCHING 0 // If this flag is set, the ability to catch wild Pokémon is disabled. +#define B_FLAG_NO_RUNNING 0 // If this flag is set, the ability to escape from wild battles is disabled. Also makes Roar/Whirlwind and Teleport (under Gen8) fail. #define B_FLAG_AI_VS_AI_BATTLE 0 // If this flag is set, the player's mons will be controlled by the ai next battles. #define B_FLAG_DYNAMAX_BATTLE 0 // If this flag is set, the ability to Dynamax in battle is enabled for all trainers. #define B_FLAG_TERA_ORB_CHARGED 0 // If this flag is set, the Tera Orb is charged. It is automatically set upon healing and cleared upon Terastallizing once configured. diff --git a/src/battle_main.c b/src/battle_main.c index b2b6e14447..ab84ab9079 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4073,6 +4073,12 @@ u8 IsRunningFromBattleImpossible(u32 battler) { u32 holdEffect, i; + if (FlagGet(B_FLAG_NO_RUNNING)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_ESCAPE; + return BATTLE_RUN_FORBIDDEN; + } + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) holdEffect = gEnigmaBerries[battler].holdEffect; else @@ -4430,8 +4436,9 @@ static void HandleTurnActionSelectionState(void) BattleScriptExecute(BattleScript_PrintCantRunFromTrainer); gBattleCommunication[battler] = STATE_BEFORE_ACTION_CHOSEN; } - else if (IsRunningFromBattleImpossible(battler) != BATTLE_RUN_SUCCESS + else if ((IsRunningFromBattleImpossible(battler) != BATTLE_RUN_SUCCESS && gBattleResources->bufferB[battler][1] == B_ACTION_RUN) + || (FlagGet(B_FLAG_NO_RUNNING) == TRUE && gBattleResources->bufferB[battler][1] == B_ACTION_RUN)) { gSelectionBattleScripts[battler] = BattleScript_PrintCantEscapeFromBattle; gBattleCommunication[battler] = STATE_SELECTION_SCRIPT; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index da1a8754e1..83f7bb4999 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9076,6 +9076,7 @@ static void Cmd_various(void) { // Roar will fail in a double wild battle when used by the player against one of the two alive wild mons. // Also when an opposing wild mon uses it againt its partner. + // Also when B_FLAG_NO_RUNNING is enabled. case VARIOUS_JUMP_IF_ROAR_FAILS: { VARIOUS_ARGS(const u8 *jumpInstr); @@ -9088,6 +9089,8 @@ static void Cmd_various(void) && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT) gBattlescriptCurrInstr = cmd->jumpInstr; + else if (FlagGet(B_FLAG_NO_RUNNING)) + gBattlescriptCurrInstr = cmd->jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; return; diff --git a/src/battle_util.c b/src/battle_util.c index 83ed114c07..03c3758684 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -450,6 +450,10 @@ bool32 TryRunFromBattle(u32 battler) u8 pyramidMultiplier; u8 speedVar; + // If this flag is set, running will never be successful under any circumstances. + if (FlagGet(B_FLAG_NO_RUNNING)) + return effect; + if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) holdEffect = gEnigmaBerries[battler].holdEffect; else diff --git a/src/overworld.c b/src/overworld.c index 7dea410395..c06751f6f3 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -423,6 +423,7 @@ void Overworld_ResetBattleFlagsAndVars(void) FlagClear(B_SMART_WILD_AI_FLAG); FlagClear(B_FLAG_NO_BAG_USE); FlagClear(B_FLAG_NO_CATCHING); + FlagClear(B_FLAG_NO_RUNNING); FlagClear(B_FLAG_DYNAMAX_BATTLE); FlagClear(B_FLAG_SKY_BATTLE); } From 353915ef646ba7ddb27a92be060119da144cdb78 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Fri, 11 Oct 2024 17:47:46 -0400 Subject: [PATCH 297/544] Add various tests, add RNG_RANDOM_TARGET (#5438) * burn dmg test depends on config * burn and frostbite tests use B_BURN_DAMAGE config for denom val * update kings shield test with config * add RNG_RANDOM_TARGET, use SetRandomTarget in HandleAction_UseMove target acquisition, update uproar test to PASSES_RANDOMLY since test will fail if you target the soundproof voltorb. Slightly faster UproarWakeUpCheck * add sticky web+contrary test * add EXPECT_EQ to contrary+sticky web test * Update src/battle_script_commands.c Co-authored-by: Bassoonian * Update src/battle_util.c Co-authored-by: Bassoonian * Update test/battle/move_effect/uproar.c Co-authored-by: Bassoonian * fix test * syntax fix --------- Co-authored-by: ghoulslash Co-authored-by: Bassoonian --- include/random.h | 1 + src/battle_script_commands.c | 3 ++- src/battle_util.c | 39 +++++----------------------- test/battle/ability/contrary.c | 20 ++++++++++++++ test/battle/move_effect/belly_drum.c | 26 ++++++++++++++++++- test/battle/move_effect/protect.c | 6 ++++- test/battle/move_effect/uproar.c | 1 + test/battle/status1/burn.c | 5 ++-- test/battle/status1/frostbite.c | 4 +-- 9 files changed, 64 insertions(+), 41 deletions(-) diff --git a/include/random.h b/include/random.h index d41e478543..215472377e 100644 --- a/include/random.h +++ b/include/random.h @@ -168,6 +168,7 @@ enum RandomTag RNG_AI_SWITCH_NIGHTMARE, RNG_AI_SWITCH_SEEDED, RNG_SHELL_SIDE_ARM, + RNG_RANDOM_TARGET, }; #define RandomWeighted(tag, ...) \ diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 83f7bb4999..f55eff3b7b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11405,10 +11405,11 @@ static void Cmd_setmiracleeye(void) bool8 UproarWakeUpCheck(u8 battler) { s32 i; + bool32 hasSoundproof = (B_UPROAR_IGNORE_SOUNDPROOF < GEN_5 && GetBattlerAbility(battler) == ABILITY_SOUNDPROOF); for (i = 0; i < gBattlersCount; i++) { - if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || (GetBattlerAbility(battler) == ABILITY_SOUNDPROOF && B_UPROAR_IGNORE_SOUNDPROOF < GEN_5)) + if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || hasSoundproof) continue; gBattleScripting.battler = i; diff --git a/src/battle_util.c b/src/battle_util.c index 03c3758684..2971b36840 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -251,20 +251,7 @@ void HandleAction_UseMove(void) { if (moveTarget & MOVE_TARGET_RANDOM) { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - } - else - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - } + gBattlerTarget = SetRandomTarget(gBattlerAttacker); } else if (moveTarget & MOVE_TARGET_FOES_AND_ALLY) { @@ -311,21 +298,7 @@ void HandleAction_UseMove(void) } else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - } - else - { - if (Random() & 1) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - else - gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - } - + gBattlerTarget = SetRandomTarget(gBattlerAttacker); if (gAbsentBattlerFlags & (1u << gBattlerTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { @@ -2664,7 +2637,7 @@ u8 DoBattlerEndTurnEffects(void) for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++) { if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF) + && (B_UPROAR_IGNORE_SOUNDPROOF >= GEN_5 || GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF)) { gBattleMons[gBattlerAttacker].status1 &= ~STATUS1_SLEEP; gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; @@ -8341,7 +8314,7 @@ void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands gBattleScriptingCommandsTable[*gBattlescriptCurrInstr](); } -u32 SetRandomTarget(u32 battler) +u32 SetRandomTarget(u32 battlerAtk) { u32 target; static const u8 targets[2][2] = @@ -8352,13 +8325,13 @@ u32 SetRandomTarget(u32 battler) if (IsDoubleBattle()) { - target = GetBattlerAtPosition(targets[GetBattlerSide(battler)][Random() % 2]); + target = GetBattlerAtPosition(targets[GetBattlerSide(battlerAtk)][RandomUniform(RNG_RANDOM_TARGET, 0, 1)]); if (!IsBattlerAlive(target)) target ^= BIT_FLANK; } else { - target = GetBattlerAtPosition(targets[GetBattlerSide(battler)][0]); + target = GetBattlerAtPosition(targets[GetBattlerSide(battlerAtk)][0]); } return target; diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c index d257a7a344..824f2bf6c2 100644 --- a/test/battle/ability/contrary.c +++ b/test/battle/ability/contrary.c @@ -221,3 +221,23 @@ SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normal EXPECT_MUL_EQ(results[1].damageBefore, UQ_4_12(4.0), results[1].damageAfter); } } + +SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for Contrary mon on switch-in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNIVY) { Ability(ABILITY_CONTRARY); } + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); } + TURN { SWITCH(opponent, 1); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("2 sent out Snivy!"); + MESSAGE("Foe Snivy was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Snivy's Speed rose!"); + } +} diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c index 82abaf30c4..612d4005c3 100644 --- a/test/battle/move_effect/belly_drum.c +++ b/test/battle/move_effect/belly_drum.c @@ -105,7 +105,31 @@ SINGLE_BATTLE_TEST("Belly Drum's HP cost doesn't trigger effects that trigger on } } +SINGLE_BATTLE_TEST("Belly Drum minimizes the user's Attack stat with Contrary", s16 damage) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_CONTRARY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseAttack) TURN { MOVE(player, MOVE_BELLY_DRUM); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet cut its own HP and maximized ATTACK!"); // Message unaffected by Contrary + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(4), results[0].damage); + } +} + TO_DO_BATTLE_TEST("Belly Drum maximizes the user's Attack stat, even when below 0"); -TO_DO_BATTLE_TEST("Belly Drum minimizes the user's Attack stat if it has Contrary"); // Should still say "maximized attack" TO_DO_BATTLE_TEST("Belly Drum fails if the user's Attack is already at +6, even with Contrary"); TO_DO_BATTLE_TEST("Belly Drum deducts HP if the user has contrary and is at -6"); diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 60b55ebb75..e5e75550e8 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("King's Shield, Silk Trap and Obstruct protect from damaging u32 j; static const u16 protectMoves[][3] = { // Move Stat Stages - {MOVE_KINGS_SHIELD, STAT_ATK, 1}, + {MOVE_KINGS_SHIELD, STAT_ATK, (B_KINGS_SHIELD_LOWER_ATK >= GEN_8) ? 1 : 2}, {MOVE_SILK_TRAP, STAT_SPEED, 1}, {MOVE_OBSTRUCT, STAT_DEF, 2}, }; @@ -99,7 +99,11 @@ SINGLE_BATTLE_TEST("King's Shield, Silk Trap and Obstruct protect from damaging NOT HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); if (statId == STAT_ATK) { + #if B_KINGS_SHIELD_LOWER_ATK >= GEN_8 MESSAGE("Wobbuffet's Attack fell!"); + #else + MESSAGE("Wobbuffet's Attack harshly fell!"); + #endif } else if (statId == STAT_SPEED) { MESSAGE("Wobbuffet's Speed fell!"); } else if (statId == STAT_DEF) { diff --git a/test/battle/move_effect/uproar.c b/test/battle/move_effect/uproar.c index fe6a4c9931..c463a8eaa1 100644 --- a/test/battle/move_effect/uproar.c +++ b/test/battle/move_effect/uproar.c @@ -8,6 +8,7 @@ ASSUMPTIONS DOUBLE_BATTLE_TEST("Uproar status causes sleeping pokemon to wake up during an attack") { + PASSES_RANDOMLY(1, 2, RNG_RANDOM_TARGET); // test fails if we target soundproof mon GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } diff --git a/test/battle/status1/burn.c b/test/battle/status1/burn.c index 4da40589fb..63d6506fb6 100644 --- a/test/battle/status1/burn.c +++ b/test/battle/status1/burn.c @@ -1,11 +1,10 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") +SINGLE_BATTLE_TEST("Burn deals 1/16th (Gen7+) or 1/8th damage per turn") { u32 j; GIVEN { - ASSUME(B_BURN_DAMAGE >= GEN_LATEST); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -14,7 +13,7 @@ SINGLE_BATTLE_TEST("Burn deals 1/16th damage per turn") } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); for (j = 0; j < 4; j++) - HP_BAR(player, damage: maxHP / 16); + HP_BAR(player, damage: maxHP / ((B_BURN_DAMAGE >= GEN_7) ? 16 : 8)); } } diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index bf4b1f7fcd..fc5fba69b1 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Frostbite reduces the special attack by 50 percent") } THEN { EXPECT_EQ(reducedDamage * 2, normaleDamage); } } -SINGLE_BATTLE_TEST("Frostbite deals 1/16 damage to effected pokemon") +SINGLE_BATTLE_TEST("Frostbite deals 1/16th (Gen7+) or 1/8th damage to affected pokemon") { s16 frostbiteDamage; @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Frostbite deals 1/16 damage to effected pokemon") MESSAGE("Foe Wobbuffet is hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); HP_BAR(opponent, captureDamage: &frostbiteDamage); - } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / 16); } + } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / ((B_BURN_DAMAGE >= GEN_7) ? 16 : 8)); } } SINGLE_BATTLE_TEST("Frostbite is healed if hit with a thawing move") From ef462d9d9b74121b7c75cbae5dd9001828e434f2 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Thu, 3 Oct 2024 00:41:04 -0400 Subject: [PATCH 298/544] meta: `remote_build` no longer untracks new files after build --- remote_build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/remote_build.sh b/remote_build.sh index 835520290d..300ac51ba5 100644 --- a/remote_build.sh +++ b/remote_build.sh @@ -25,7 +25,8 @@ git push build --force-with-lease if [[ $retVal -eq 0 ]]; then commit_msg=$(git log -1 --pretty=%B) if [[ "$commit_msg" == "$temp_commit_msg" ]]; then - git reset "$old_head" &>/dev/null + # Keep i(N)tent to add + git reset --mixed -N "$old_head" &>/dev/null fi fi set -x From d80190fe105eee12bbf74ae29647ac909084d35c Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Fri, 11 Oct 2024 13:45:40 -0400 Subject: [PATCH 299/544] fix: Dig in Sealed Chamber no longer freezes follower. Fixed #5482 rhh --- data/scripts/field_move_scripts.inc | 18 ++++++++++++++++++ include/event_scripts.h | 1 + src/braille_puzzles.c | 1 - src/fldeff_dig.c | 7 +++++-- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index e15115f826..dc161eb560 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -376,6 +376,24 @@ EventScript_EndSurface:: releaseall end +EventScript_DigCommon: + callfunc ScrFunc_IsFollowerFieldMoveUser + .2byte VAR_0x8004 + setfieldeffectargument 3, VAR_0x8004 @ skip pose if true + dofieldeffect FLDEFF_USE_DIG + waitstate +EventScript_DigSealedChamber:: @ fallthrough + setflag FLAG_SAFE_FOLLOWER_MOVEMENT + call_if_eq VAR_0x8004, TRUE, EventScript_FollowerFieldMove + callnative DoBrailleDigEffect + releaseall + end + +@ Use Dig from party menu +EventScript_UseDig:: + lockall + goto EventScript_DigCommon + Text_CantDive: .string "The sea is deep here. A POKéMON\n" .string "may be able to go underwater.$" diff --git a/include/event_scripts.h b/include/event_scripts.h index 2fa4468c74..ff920d62ae 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -404,6 +404,7 @@ extern const u8 EventScript_FailSweetScent[]; extern const u8 EventScript_UseFlash[]; extern const u8 EventScript_UseCut[]; extern const u8 EventScript_UseRockSmash[]; +extern const u8 EventScript_UseDig[]; //player pc extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC[]; diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index ab0f610fd7..757cac43b8 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -87,7 +87,6 @@ void DoBrailleDigEffect(void) DrawWholeMapView(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_BRAILLE_DIG); - UnlockPlayerFieldControls(); } bool8 CheckRelicanthWailord(void) diff --git a/src/fldeff_dig.c b/src/fldeff_dig.c index c3ab989cd8..63eb848bf2 100644 --- a/src/fldeff_dig.c +++ b/src/fldeff_dig.c @@ -1,11 +1,13 @@ #include "global.h" #include "braille_puzzles.h" +#include "event_scripts.h" #include "field_effect.h" #include "field_player_avatar.h" #include "fldeff.h" #include "item_use.h" #include "overworld.h" #include "party_menu.h" +#include "script.h" #include "sprite.h" #include "constants/field_effects.h" @@ -31,8 +33,8 @@ bool8 SetUpFieldMove_Dig(void) static void FieldCallback_Dig(void) { Overworld_ResetStateAfterDigEscRope(); - FieldEffectStart(FLDEFF_USE_DIG); gFieldEffectArguments[0] = GetCursorSelectionMonId(); + ScriptContext_SetupScript(EventScript_UseDig); } bool8 FldEff_UseDig(void) @@ -53,7 +55,8 @@ static void StartDigFieldEffect(void) FieldEffectActiveListRemove(FLDEFF_USE_DIG); if (ShouldDoBrailleDigEffect()) { - DoBrailleDigEffect(); + // EventScript_DigSealedChamber handles DoBrailleDigEffect call + ScriptContext_Enable(); } else { From eedeaf1ead3d476f85556407184d1d28c306811c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 12 Oct 2024 19:34:05 +0200 Subject: [PATCH 300/544] Clean up scrcmd PR (#5511) Renamed CheckPartyHasSpecie to CheckPartyHasSpecies and cleaned up function calls --- include/field_specials.h | 2 +- src/field_specials.c | 2 +- src/scrcmd.c | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/field_specials.h b/include/field_specials.h index f391a46ba5..975a57970b 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -35,6 +35,6 @@ void SetPCBoxToSendMon(u8 boxId); void PreparePartyForSkyBattle(void); void GetObjectPosition(u16*, u16*, u32, u32); bool32 CheckObjectAtXY(u32, u32); -bool32 CheckPartyHasSpecie(u32); +bool32 CheckPartyHasSpecies(u32); #endif // GUARD_FIELD_SPECIALS_H diff --git a/src/field_specials.c b/src/field_specials.c index b3f5a63332..cf9af51cbd 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -4316,7 +4316,7 @@ bool32 CheckObjectAtXY(u32 x, u32 y) return FALSE; } -bool32 CheckPartyHasSpecie(u32 givenSpecies) +bool32 CheckPartyHasSpecies(u32 givenSpecies) { u32 partyIndex; diff --git a/src/scrcmd.c b/src/scrcmd.c index bef273b0ba..399562f9a0 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2496,7 +2496,7 @@ bool8 ScrCmd_getobjectxy(struct ScriptContext *ctx) u32 useTemplate = VarGet(ScriptReadHalfword(ctx)); u16 *pX = GetVarPointer(ScriptReadHalfword(ctx)); u16 *pY = GetVarPointer(ScriptReadHalfword(ctx)); - GetObjectPosition(pX,pY,localId,useTemplate); + GetObjectPosition(pX, pY, localId, useTemplate); return FALSE; } @@ -2507,7 +2507,7 @@ bool8 ScrCmd_checkobjectat(struct ScriptContext *ctx) u32 y = VarGet(ScriptReadHalfword(ctx)) + 7; u16 *varPointer = GetVarPointer(ScriptReadHalfword(ctx)); - *varPointer = CheckObjectAtXY(x,y); + *varPointer = CheckObjectAtXY(x, y); return FALSE; } @@ -2516,10 +2516,10 @@ bool8 Scrcmd_getsetpokedexflag(struct ScriptContext *ctx) { u32 speciesId = SpeciesToNationalPokedexNum(VarGet(ScriptReadHalfword(ctx))); bool32 desiredFlag = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetSetPokedexFlag(speciesId,desiredFlag); + gSpecialVar_Result = GetSetPokedexFlag(speciesId, desiredFlag); if (desiredFlag == FLAG_SET_CAUGHT) - GetSetPokedexFlag(speciesId,FLAG_SET_SEEN); + GetSetPokedexFlag(speciesId, FLAG_SET_SEEN); return FALSE; } @@ -2527,7 +2527,7 @@ bool8 Scrcmd_getsetpokedexflag(struct ScriptContext *ctx) bool8 Scrcmd_checkspecies(struct ScriptContext *ctx) { u32 givenSpecies = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = CheckPartyHasSpecie(givenSpecies); + gSpecialVar_Result = CheckPartyHasSpecies(givenSpecies); return FALSE; } From 743dc4d7654170468fcae277217a783438a9033f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 12 Oct 2024 12:37:11 -0500 Subject: [PATCH 301/544] Add text fitting tests for move, ability, item, and pokedex descriptions (#5505) --- src/data/abilities.h | 6 +- src/data/items.h | 150 +++++++++--------- src/data/moves_info.h | 30 ++-- .../pokemon/species_info/gen_2_families.h | 4 +- .../pokemon/species_info/gen_3_families.h | 6 +- .../pokemon/species_info/gen_4_families.h | 16 +- .../pokemon/species_info/gen_5_families.h | 22 +-- .../pokemon/species_info/gen_6_families.h | 20 +-- .../pokemon/species_info/gen_7_families.h | 18 +-- .../pokemon/species_info/gen_8_families.h | 30 ++-- .../pokemon/species_info/gen_9_families.h | 12 +- .../pokemon/species_info/shared_dex_text.h | 12 +- test/text.c | 51 ++++++ 13 files changed, 212 insertions(+), 165 deletions(-) diff --git a/src/data/abilities.h b/src/data/abilities.h index ba768a0a51..5c28e17c05 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -1550,7 +1550,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SLUSH_RUSH] = { .name = _("Slush Rush"), - .description = COMPOUND_STRING("Raises Speed in Hail or Snow."), + .description = COMPOUND_STRING("Raises Speed in Hail/Snow."), .aiRating = 5, }, @@ -2573,7 +2573,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_TERA_SHELL] = { .name = _("Tera Shell"), - .description = COMPOUND_STRING("Resistant to types at full HP."), + .description = COMPOUND_STRING("Resists all at full HP."), .aiRating = 10, .cantBeCopied = TRUE, .cantBeSwapped = TRUE, @@ -2588,7 +2588,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = #else .name = _("TeraformZero"), #endif - .description = COMPOUND_STRING("Removes weather and terrain."), + .description = COMPOUND_STRING("Zeroes weather and terrain."), .aiRating = 10, .cantBeCopied = TRUE, .cantBeSwapped = TRUE, diff --git a/src/data/items.h b/src/data/items.h index 75629d579f..bffe48d725 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -538,9 +538,9 @@ const struct Item gItemsInfo[] = .name = _("Sport Ball"), .price = (I_PRICE < GEN_3 || I_PRICE >= GEN_9) ? 0 : 300, .description = COMPOUND_STRING( - "A special Ball used\n" - "in the Bug-Catching\n" - "Contest."), + "A special Ball\n" + "used in the Bug-\n" + "Catching Contest."), .pocket = POCKET_POKE_BALLS, .type = ITEM_USE_BAG_MENU, .battleUsage = EFFECT_ITEM_THROW_BALL, @@ -3176,9 +3176,9 @@ const struct Item gItemsInfo[] = .name = _("Jaw Fossil"), .price = (I_PRICE >= GEN_7) ? 7000: 1000, .description = COMPOUND_STRING( - "A piece of a prehis-\n" - "toric Pokémon's\n" - "large jaw."), + "A piece of a\n" + "prehistoric Poké-\n" + "mon's large jaw."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -3192,9 +3192,9 @@ const struct Item gItemsInfo[] = .name = _("Sail Fossil"), .price = (I_PRICE >= GEN_7) ? 7000: 1000, .description = COMPOUND_STRING( - "A piece of a prehis-\n" - "toric Pokémon's\n" - "skin sail."), + "A piece of a\n" + "prehistoric Poké-\n" + "mon's skin sail."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -4169,8 +4169,8 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_7) ? 2000 * TREASURE_FACTOR : 2100, .description = COMPOUND_STRING( "Loved by a certain\n" - "Pokémon. Imbued with\n" - "spiritual energy."), + "Pokémon. Imbued\n" + "with spirit energy."), .pocket = POCKET_ITEMS, .type = EVO_HELD_ITEM_TYPE, .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, @@ -4186,8 +4186,8 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 2000 : 500), .description = COMPOUND_STRING( "A mysterious scale\n" - "that evolves certain\n" - "Pokémon. It shines."), + "that evolves a\n" + "certain Pokémon."), .pocket = POCKET_ITEMS, .type = EVO_HELD_ITEM_TYPE, .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, @@ -4220,8 +4220,8 @@ const struct Item gItemsInfo[] = .name = _("Sachet"), .price = (I_PRICE >= GEN_7) ? 2000 * TREASURE_FACTOR : 2100, .description = COMPOUND_STRING( - "A sachet filled with\n" - "perfumes loved by\n" + "A sachet of strong\n" + "perfumes, loved by\n" "a certain Pokémon."), .pocket = POCKET_ITEMS, .type = EVO_HELD_ITEM_TYPE, @@ -4237,9 +4237,9 @@ const struct Item gItemsInfo[] = .name = _("Oval Stone"), .price = (I_PRICE >= GEN_7) ? 2000 : 2100, .description = COMPOUND_STRING( - "Makes a certain\n" - "Pokémon evolve. It's\n" - "shaped like an egg."), + "Peculiar stone\n" + "that evolves a\n" + "certain Pokémon."), .pocket = POCKET_ITEMS, .type = EVO_HELD_ITEM_TYPE, .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, @@ -4749,8 +4749,8 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_PLATE, .holdEffectParam = 20, .description = COMPOUND_STRING( - "A stone tablet that\n" - "boosts the power of\n" + "A tablet that ups\n" + "the power of\n" "Fairy-type moves."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, @@ -4945,7 +4945,7 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_MEMORY, .holdEffectParam = 0, .description = COMPOUND_STRING( - "A disc with Fighting\n" + "Disc with Fighting\n" "type data. It swaps\n" "Silvally's type."), .pocket = POCKET_ITEMS, @@ -7053,9 +7053,9 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_7) ? 1000 : 10, .holdEffect = HOLD_EFFECT_QUICK_POWDER, .description = COMPOUND_STRING( - "An item to be held\n" - "by Ditto. This odd\n" - "powder boosts Speed."), + "A hold item that\n" + "raises the Speed\n" + "of Ditto."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -7132,9 +7132,9 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_ADAMANT_ORB, .holdEffectParam = 20, .description = COMPOUND_STRING( - "Boosts the power of\n" - "Dialga's Dragon and\n" - "Steel-type moves."), + "Powers up Dialga's\n" + "Dragon and Steel-\n" + "type moves."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -7150,9 +7150,9 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_LUSTROUS_ORB, .holdEffectParam = 20, .description = COMPOUND_STRING( - "Boosts the power of\n" - "Palkia's Dragon and\n" - "Water-type moves."), + "Powers up Palkia's\n" + "Dragon and Water-\n" + "type moves."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -7168,7 +7168,7 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_GRISEOUS_ORB, .holdEffectParam = 20, .description = COMPOUND_STRING( - "Powers up Giratina's\n" + "Boosts Giratina's\n" "Dragon and Ghost-\n" "type moves."), .pocket = POCKET_ITEMS, @@ -8107,9 +8107,9 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_CELL_BATTERY, .holdEffectParam = 0, .description = COMPOUND_STRING( - "Raises Atk if the\n" - "holder is hit by an\n" - "Electric-type move."), + "Raises Attack if\n" + "the holder is hit by\n" + "an Electric move."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8454,8 +8454,8 @@ const struct Item gItemsInfo[] = .holdEffectParam = 10, .description = COMPOUND_STRING( "A headband that\n" - "boosts the power of\n" - "physical moves."), + "boosts the power\n" + "of physical moves."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8525,9 +8525,9 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200), .holdEffect = HOLD_EFFECT_LIFE_ORB, .description = COMPOUND_STRING( - "Boosts the power of\n" - "moves at the cost\n" - "of some HP per turn."), + "Boosts move power\n" + "but holder loses HP\n" + "with each attack."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8614,9 +8614,9 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), .holdEffect = HOLD_EFFECT_IRON_BALL, .description = COMPOUND_STRING( - "Cuts Speed and lets\n" - "Flying-types be hit\n" - "by Ground moves."), + "Cuts Speed and\n" + "becomes vulnerable\n" + "to Ground moves."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8663,9 +8663,9 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), .holdEffect = HOLD_EFFECT_BLACK_SLUDGE, .description = COMPOUND_STRING( - "Gradually restores\n" - "HP of Poison-types.\n" - "Damages others."), + "Restores HP for\n" + "Poison-types.\n" + "Damages all others."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8680,9 +8680,9 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), .holdEffect = HOLD_EFFECT_GRIP_CLAW, .description = COMPOUND_STRING( - "Makes binding moves\n" - "used by the holder\n" - "go on for 7 turns."), + "A held item that\n" + "extends binding\n" + "moves like Wrap."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8698,8 +8698,8 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_STICKY_BARB, .description = COMPOUND_STRING( "Damages the holder\n" - "each turn. May latch\n" - "on to foes."), + "each turn. May\n" + "latch on to foes."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8714,9 +8714,9 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 100), .holdEffect = HOLD_EFFECT_SHED_SHELL, .description = COMPOUND_STRING( - "Enables the holder\n" - "to switch out of\n" - "battle without fail."), + "Allows the holder\n" + "to switch out\n" + "without fail."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8733,7 +8733,7 @@ const struct Item gItemsInfo[] = .holdEffectParam = 30, .description = COMPOUND_STRING( "A held item that\n" - "boosts the power of\n" + "ups the power of\n" "HP-stealing moves."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, @@ -8837,9 +8837,9 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_AIR_BALLOON, .holdEffectParam = 0, .description = COMPOUND_STRING( - "Elevates the holder\n" - "in the air. If hit,\n" - "this item will burst."), + "Makes the holder\n" + "float but bursts\n" + "if hit by an attack."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8873,9 +8873,9 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_RING_TARGET, .holdEffectParam = 0, .description = COMPOUND_STRING( - "Moves that wouldn't\n" - "have effect will\n" - "land on its holder."), + "Moves that usually\n" + "have no effect will\n" + "hit the holder."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8927,9 +8927,9 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_WEAKNESS_POLICY, .holdEffectParam = 0, .description = COMPOUND_STRING( - "If hit by a Super\n" - "Effective move, ups\n" - "Atk and Sp. Atk."), + "If hit by a super-\n" + "effective move,\n" + "ups Atk and Sp. Atk."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -8980,9 +8980,9 @@ const struct Item gItemsInfo[] = .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_8) ? 4000 : 300), .holdEffect = HOLD_EFFECT_ADRENALINE_ORB, .description = COMPOUND_STRING( - "Boosts Speed if the\n" - "user is intimidated,\n" - "but only one time."), + "This orb boosts\n" + "Speed if the holder\n" + "is intimidated."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -13042,9 +13042,9 @@ const struct Item gItemsInfo[] = .price = 20000, .holdEffect = HOLD_EFFECT_COVERT_CLOAK, .description = COMPOUND_STRING( - "Protects the holder\n" - "from secondary\n" - "move effects."), + "Protects holder\n" + "from additional\n" + "effects of moves."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -14009,11 +14009,11 @@ const struct Item gItemsInfo[] = .description = COMPOUND_STRING( #if B_X_ITEMS_BUFF >= GEN_7 "Sharply raises\n" - "offenses & defenses\n" + "offense & defense\n" "during one battle."), #else - "Raises offenses\n" - "and defenses during\n" + "Raises offense\n" + "and defense during\n" "one battle."), #endif .pocket = POCKET_ITEMS, @@ -14068,9 +14068,9 @@ const struct Item gItemsInfo[] = .name = _("Pokéshi Doll"), .price = 2000, .description = COMPOUND_STRING( - "A wooden toy carved\n" - "in the image of a\n" - "Pokémon. Can be sold."), + "A wooden toy\n" + "resembling a Poké-.\n" + "mon. Can be sold."), .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index cb23dcf5af..478f0dc426 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -14198,8 +14198,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = HANDLE_EXPANDED_MOVE_NAME("ParabolcChrg", "Parabolic Charge"), .description = COMPOUND_STRING( - "Damages adjacent Pokémon and\n" - "heals up by half of it."), + "Damages adjacent Pokémon\n" + "and heals up by half of it."), .effect = EFFECT_ABSORB, .power = B_UPDATED_MOVE_DATA >= GEN_7 ? 65 : 50, .type = TYPE_ELECTRIC, @@ -16757,7 +16757,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .name = COMPOUND_STRING("Plasma Fists"), .description = COMPOUND_STRING( "Hits with electrical fists.\n" - "Normal moves become Electric."), + "Normal moves turn Electric."), .effect = EFFECT_PLASMA_FISTS, .power = 100, .type = TYPE_ELECTRIC, @@ -17116,8 +17116,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = HANDLE_EXPANDED_MOVE_NAME("DynamxCannon", "Dynamax Cannon"), .description = COMPOUND_STRING( - "Fires a strong beam. Deals\n" - "2x damage to Dynamaxed foes."), + "Unleashes core energy.\n" + "2x against Dynamaxed foes."), .effect = EFFECT_DYNAMAX_DOUBLE_DMG, .power = 100, .type = TYPE_DRAGON, @@ -18637,8 +18637,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = HANDLE_EXPANDED_MOVE_NAME("GlacialLance", "Glacial Lance"), .description = COMPOUND_STRING( - "Strikes by hurling a blizzard-\n" - "cloaked icicle lance at foes."), + "Hurls a blizzard-cloaked\n" + "icicle lance at foes."), .effect = EFFECT_HIT, .power = B_UPDATED_MOVE_DATA >= GEN_9 ? 120 : 130, .type = TYPE_ICE, @@ -18659,8 +18659,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = HANDLE_EXPANDED_MOVE_NAME("AstrlBarrage", "Astral Barrage"), .description = COMPOUND_STRING( - "Strikes by sending a frightful\n" - "amount of ghosts at foes."), + "Sends a frightful amount\n" + "of small ghosts at foes."), .effect = EFFECT_HIT, .power = 120, .type = TYPE_GHOST, @@ -20381,8 +20381,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = COMPOUND_STRING("Electro Shot"), .description = COMPOUND_STRING( - "Absorbs electricity in one turn,\n" - "then attacks next turn."), + "Gathers electricity, then\n" + "fires a high-voltage shot."), .effect = EFFECT_TWO_TURNS_ATTACK, .power = 130, .type = TYPE_ELECTRIC, @@ -20404,8 +20404,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = HANDLE_EXPANDED_MOVE_NAME("TeraStarstrm", "Tera Starstorm"), .description = COMPOUND_STRING( - "Damages all opponents if user is\n" - "Stellar form Terapagos."), + "In Terapagos's Stellar\n" + "Form, it hits all foes."), .effect = EFFECT_TERA_STARSTORM, .power = 120, .type = TYPE_NORMAL, @@ -20552,8 +20552,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = HANDLE_EXPANDED_MOVE_NAME("AllurngVoice", "Alluring Voice"), .description = COMPOUND_STRING( - "Confuses the target if their\n" - "stats were boosted this turn."), + "Confuses foe if its stats\n" + "were boosted this turn."), .effect = EFFECT_HIT, .power = 80, .type = TYPE_FAIRY, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 5dcabda292..530c92f411 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -3990,8 +3990,8 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .weight = 474, .description = COMPOUND_STRING( "A recent study uncovered that the\n" - "number of segments a\n" - "Dudunsparce's body has is determined by the\n" + "number of segments a Dudunsparce's\n" + "body has is determined by the\n" "Pokémon's genes."), .pokemonScale = 356, .pokemonOffset = 17, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 8a23bb05fd..d0bc37e5fc 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -4570,9 +4570,9 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .weight = 315, .description = COMPOUND_STRING( "It uses its amped-up willpower to create\n" - "additional arms for itself. The more it has\n" - "trained its spirit, the more realistic and\n" - "dexterous these self-created arms become."), + "additional arms for itself. The more it\n" + "has trained its spirit, the more realistic\n" + "and dexterous these arms become."), .pokemonScale = 298, .pokemonOffset = 5, .trainerScale = 256, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index c0fdd1ecec..c88dd71ddd 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -561,10 +561,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .height = 17, .weight = 845, .description = COMPOUND_STRING( - "The three horns that extend from its beak\n" - "attest to its power. It avoids unnecessary\n" - "disputes, but it will decimate anything\n" - "that threatens its pride."), + "The three horns that extend from its\n" + "beak attest to its power. It avoids\n" + "unnecessary disputes, but it will decimate\n" + "anything that threatens its pride."), .pokemonScale = 259, .pokemonOffset = 0, .trainerScale = 290, @@ -4873,10 +4873,10 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .height = 3, .weight = 3, .description = COMPOUND_STRING( - "If the convection microwave oven is not\n" - "working properly, then the Rotom inhabiting\n" - "it will become lethargic. It will gleefully\n" - "burn your favorite outfit in mischief."), + "If the convection microwave oven is\n" + "not working properly, then the Rotom\n" + "inhabiting it will become lethargic. It\n" + "makes mischief by turning up the heat."), .pokemonScale = 530, .pokemonOffset = 13, .trainerScale = 256, diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index e8907999fe..50ee5b1fec 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -10333,10 +10333,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .height = 14, .weight = 580, .description = COMPOUND_STRING( - "It draws in air through its tail, transforms\n" - "it into fire, and uses it like a tongue.\n" - "They burn through Durant's steel bodies\n" - "and consume their insides."), + "It draws in air through its tail,\n" + "transforms it into fire, and uses it like\n" + "a tongue. They burn through Durant's steel\n" + "bodies and consume their insides."), .pokemonScale = 265, .pokemonOffset = 2, .trainerScale = 262, @@ -11154,10 +11154,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .height = 30, .weight = 610, .description = COMPOUND_STRING( - "It pulverizes foes into\n" - "nothingness with showers of devastatingly\n" - "powerful lightning bolts launched from\n" - "the string of orbs on its tail."), + "It pulverizes foes into nothingness\n" + "with showers of devastatingly\n" + "powerful lightning bolts launched\n" + "from the string of orbs on its tail."), .pokemonScale = 268, .pokemonOffset = 2, .trainerScale = 271, @@ -11348,9 +11348,9 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .height = 15, .weight = 680, .description = COMPOUND_STRING( - "The energy that comes pouring from its tail\n" - "increases the nutrition in the soil, making\n" - "crops grow to great size. It has been\n" + "The energy that comes pouring from its\n" + "tail increases the nutrition in the soil,\n" + "granting bountiful crops. It has been\n" "hailed as “The Guardian of the Fields.”"), .pokemonScale = 268, .pokemonOffset = 2, diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 5946ac5c44..ac77faa806 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -640,11 +640,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .categoryName = _("Ninja"), .height = 15, .weight = 400, - .description = COMPOUND_STRING( - "It appears and vanishes with a ninja's\n" - "grace. It toys with its enemies using swift\n" - "movements, while slicing them with throwing\n" - "stars made of compressed water."), + .description = gGreninjaPokedexText, .pokemonScale = 268, .pokemonOffset = 2, .trainerScale = 271, @@ -1806,8 +1802,8 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = { FLORGES_MISC_INFO(Red, 0), .description = COMPOUND_STRING( - "This Pokémon creates an\n" - "impressive flower garden in its territory. It\n" + "This Pokémon creates an impressive\n" + "flower garden in its territory. It\n" "draws forth the power of the red\n" "flowers around its neck."), }, @@ -4213,8 +4209,8 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .height = 17, .weight = 3341, .description = COMPOUND_STRING( - "It loathes solitude and is\n" - "extremely clingy-it will fume and run riot if\n" + "It loathes solitude and is extremely\n" + "clingy--it will fume and run riot if\n" "those dearest to it ever leave its\n" "side."), .pokemonScale = 261, @@ -5239,9 +5235,9 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .weight = 850, .description = COMPOUND_STRING( "They fly around on moonless nights and\n" - "attack careless prey. The ultrasonic waves\n" - "it emits from its ears can reduce a large\n" - "boulder to pebbles."), + "attack careless prey. The ultrasonic\n" + "waves it emits from its ears can reduce\n" + "a large boulder to pebbles."), .pokemonScale = 268, .pokemonOffset = 2, .trainerScale = 271, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index dfee119ed5..d69b362104 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -3823,8 +3823,8 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .height = 5, .weight = 700, .description = COMPOUND_STRING( - "It takes control of anyone who puts a hand\n" - "in its mouth, to add to the accumulation\n" + "It takes control of anyone who puts a\n" + "hand in its mouth, to add to the pile\n" "of its sand-mound body. This Pokémon\n" "embodies the grudges of the departed."), .pokemonScale = 432, @@ -6208,10 +6208,10 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .height = 38, .weight = 4600, .description = COMPOUND_STRING( - "This is its form while it is\n" - "devouring the light of Solgaleo. It pounces\n" - "on foes and then slashes them with\n" - "the claws on its four limbs and back."), + "This is its form while it is devouring\n" + "the light of Solgaleo. It pounces on\n" + "foes and then slashes them with the\n" + "claws on its four limbs and back."), .pokemonScale = 256, .pokemonOffset = 3, .trainerScale = 369, @@ -6974,9 +6974,9 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .height = 25, .weight = 800, .description = COMPOUND_STRING( - "Revered long ago for its capacity to create\n" - "iron from nothing, for some reason it has\n" - "come back to life after 3,000 years."), + "Revered long ago for its capacity to\n" + "create iron from nothing, for some reason\n" + "it has come back to life after 3,000 years."), .pokemonScale = 257, .pokemonOffset = 10, .trainerScale = 423, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index 3f8257d966..46057b3847 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -885,8 +885,8 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .description = COMPOUND_STRING( "It will bravely challenge any opponent,\n" "no matter how powerful. This Pokémon\n" - "benefits from every battle--even a defeat\n" - "increases its strength a bit."), + "benefits from every battle--even a\n" + "defeat increases its strength a bit."), .pokemonScale = 682, .pokemonOffset = 24, .trainerScale = 256, @@ -1318,8 +1318,8 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .height = 140, .weight = 0, .description = COMPOUND_STRING( - "Its brain has grown to a\n" - "gargantuan size, as has the rest of its body.\n" + "Its brain has grown to a gargantuan\n" + "size, as has the rest of its body.\n" "This Pokémon's intellect and\n" "psychic abilities are overpowering."), .pokemonScale = 491, @@ -3621,9 +3621,9 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .weight = 0, .description = COMPOUND_STRING( "The heat that comes off a\n" - "Gigantamax Centiskorch may destabilize air\n" - "currents. Sometimes it can even\n" - "cause storms."), + "Gigantamax Centiskorch may\n" + "destabilize air currents. Sometimes\n" + "it can even cause storms."), .pokemonScale = 275, .pokemonOffset = 7, .trainerScale = 256, @@ -4294,9 +4294,9 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .weight = 55, .description = COMPOUND_STRING( "Through its nose, it sucks in the\n" - "emanations produced by people and Pokémon\n" - "when they feel annoyed. It thrives off\n" - "this negative energy."), + "emanations produced by people and\n" + "Pokémon when they feel annoyed. It\n" + "thrives off this negative energy."), .pokemonScale = 491, .pokemonOffset = 12, .trainerScale = 256, @@ -5577,9 +5577,9 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .height = 230, .weight = 0, .description = COMPOUND_STRING( - "After this Pokémon has\n" - "Gigantamaxed, its massive nose can utterly\n" - "demolish large structures with a single\n" + "After this Pokémon has Gigantamaxed,\n" + "its massive nose can utterly demolish\n" + "large structures with a single\n" "smashing blow."), .pokemonScale = 275, .pokemonOffset = 7, @@ -6255,8 +6255,8 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .weight = 1100, .description = COMPOUND_STRING( "Known as a legendary hero, this Pokémon\n" - "absorbs metal particles, transforming them\n" - "into a weapon it uses to battle."), + "absorbs metal particles, transforming\n" + "them into a weapon it uses to battle."), .pokemonScale = 275, .pokemonOffset = 7, .trainerScale = 256, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 5a616bf4ff..6638676a8d 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -1019,8 +1019,8 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .height = 3, .weight = 25, .description = COMPOUND_STRING( - "The pads of its paws are\n" - "electricity-discharging organs. Pawmi fires\n" + "The pads of its paws are electricity-\n" + "discharging organs. Pawmi fires\n" "electricity from its forepaws while\n" "standing unsteadily on its hind legs."), .pokemonScale = 356, @@ -3939,8 +3939,8 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .height = 13, .weight = 602, .description = COMPOUND_STRING( - "This Pokémon changes its\n" - "appearance if it hears its allies calling for\n" + "This Pokémon changes its appearance\n" + "if it hears its allies calling for\n" "help. Palafin will never show\n" "anybody its moment of transformation."), .pokemonScale = 356, @@ -4002,8 +4002,8 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .weight = 974, .description = COMPOUND_STRING( "This Pokémon's ancient genes have\n" - "awakened. It is now so\n" - "extraordinarily strong that it can easily lift a\n" + "awakened. It is now so extraordinarily\n" + "strong that it can easily lift a\n" "cruise ship with one fin."), .pokemonScale = 356, .pokemonOffset = 17, diff --git a/src/data/pokemon/species_info/shared_dex_text.h b/src/data/pokemon/species_info/shared_dex_text.h index 0c591bd811..bf7e12aefb 100644 --- a/src/data/pokemon/species_info/shared_dex_text.h +++ b/src/data/pokemon/species_info/shared_dex_text.h @@ -73,9 +73,9 @@ const u8 gGenesectPokedexText[] = _( // Gen 6 families const u8 gGreninjaPokedexText[] = _( "It appears and vanishes with a ninja's\n" - "grace. It toys with its enemies using swift\n" - "movements, while slicing them with throwing\n" - "stars made of compressed water."); + "grace. It toys with its enemies using\n" + "swift movements, while slicing them with\n" + "throwing stars made of compressed water."); const u8 gScatterbugPokedexText[] = _( "When under attack from bird Pokémon,\n" @@ -207,7 +207,7 @@ const u8 gKommoOPokedexText[] = _( // Gen 8 families const u8 gAlcremieVanillaCreamPokedexText[] = _( "If Alcremie is content, the secreted cream\n" - "from its hands becomes sweeter and richer." + "from its hands becomes sweeter and richer.\n" "When it trusts a Trainer, it will treat\n" "them to berries it's decorated with cream."); @@ -279,8 +279,8 @@ const u8 gOgerponWellspringMaskPokedexText[] = _( const u8 gOgerponHearthflameMaskPokedexText[] = _( "This form is the most aggressive,\n" - "bombarding enemies with the\n" - "intensity of flames blazing within a hearth."); + "bombarding enemies with the intensity\n" + "of flames blazing within a hearth."); const u8 gOgerponCornerstoneMaskPokedexText[] = _( "In this form, it draws on the power\n" diff --git a/test/text.c b/test/text.c index 0e6900edad..7713784198 100644 --- a/test/text.c +++ b/test/text.c @@ -79,6 +79,18 @@ TEST("Move names fit on Move Relearner Screen") EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); } +TEST("Move descriptions fit on Pokemon Summary Screen") +{ + u32 i; + const u32 fontId = FONT_NORMAL, widthPx = 152; + u32 move = MOVE_NONE; + for (i = 1; i < MOVES_COUNT; i++) + { + PARAMETRIZE_LABEL("%S", gMovesInfo[i].description) { move = i; } + } + EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].description, 0), widthPx); +} + TEST("Item names fit on Bag Screen (list)") { u32 i; @@ -272,6 +284,18 @@ TEST("Item names fit on Shop Screen") EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx); } +TEST("Item descriptions fit on Bag and Shop Screen") +{ + u32 i; + const u32 fontId = FONT_NORMAL, widthPx = 102; + u32 item = ITEM_NONE; + for (i = 1; i < ITEMS_COUNT; i++) + { + PARAMETRIZE_LABEL("%S", gItemsInfo[i].description) { item = i; } + } + EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].description, 0), widthPx); +} + TEST("Species names fit on Battle Screen HP box") { u32 i, genderWidthPx; @@ -520,6 +544,21 @@ TEST("Species names fit on Battle Screen HP box for vanilla mons with the defaul EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx); } +TEST("Species dex entries fit on Pokedex Screen") +{ + u32 i; + const u32 fontId = FONT_NORMAL, widthPx = 224; + u32 species = SPECIES_NONE; + for (i = 1; i < NUM_SPECIES; i++) + { + if (IsSpeciesEnabled(i)) + { + PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].description) { species = i; } + } + } + EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].description, 0), widthPx); +} + TEST("Ability names fit on Pokemon Summary Screen") { u32 i; @@ -544,6 +583,18 @@ TEST("Ability names fit on Ability Pop-Up") EXPECT_LE(GetStringWidth(fontId, gAbilitiesInfo[ability].name, 0), widthPx); } +TEST("Ability descriptions fit on Pokemon Summary Screen") +{ + u32 i; + const u32 fontId = FONT_NORMAL, widthPx = 146; + u32 ability = ABILITY_NONE; + for (i = 1; i < ABILITIES_COUNT; i++) + { + PARAMETRIZE_LABEL("%S", gAbilitiesInfo[i].description) { ability = i; } + } + EXPECT_LE(GetStringWidth(fontId, gAbilitiesInfo[ability].description, 0), widthPx); +} + TEST("Type names fit on Battle Screen") { u32 i; From a01f9b4708f35a0a97541450c1f703c73967d70c Mon Sep 17 00:00:00 2001 From: aronson Date: Sat, 12 Oct 2024 13:41:26 -0500 Subject: [PATCH 302/544] Align EWRAM and IWRAM data-filled sections to 4 bytes (#5512) --- ld_script.ld | 2 ++ ld_script_modern.ld | 2 ++ 2 files changed, 4 insertions(+) diff --git a/ld_script.ld b/ld_script.ld index a0c069c965..6c8467a002 100644 --- a/ld_script.ld +++ b/ld_script.ld @@ -18,6 +18,7 @@ SECTIONS { { __ewram_start = .; *(.ewram*) + . = ALIGN(4); __ewram_end = .; } > EWRAM @@ -38,6 +39,7 @@ SECTIONS { { __iwram_start = .; *(.iwram*); + . = ALIGN(4); __iwram_end = .; } > IWRAM diff --git a/ld_script_modern.ld b/ld_script_modern.ld index fd35a1ca31..11e53db63d 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -19,6 +19,7 @@ SECTIONS { { __ewram_start = .; *(.ewram*) + . = ALIGN(4); __ewram_end = .; } > EWRAM @@ -34,6 +35,7 @@ SECTIONS { { __iwram_start = .; *(.iwram*); + . = ALIGN(4); __iwram_end = .; } > IWRAM From a0be2cbf7b451f20cc5940fa04caf0dc3c5221a3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 12 Oct 2024 23:50:12 -0400 Subject: [PATCH 303/544] Fix Fallorbor typo --- data/maps/FallarborTown_PokemonCenter_1F/map.json | 2 +- include/constants/flags.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/maps/FallarborTown_PokemonCenter_1F/map.json b/data/maps/FallarborTown_PokemonCenter_1F/map.json index 93204a215a..0c3dd726df 100644 --- a/data/maps/FallarborTown_PokemonCenter_1F/map.json +++ b/data/maps/FallarborTown_PokemonCenter_1F/map.json @@ -64,7 +64,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "FallarborTown_PokemonCenter_1F_EventScript_Lanette", - "flag": "FLAG_HIDE_FALLORBOR_POKEMON_CENTER_LANETTE" + "flag": "FLAG_HIDE_FALLARBOR_POKEMON_CENTER_LANETTE" } ], "warp_events": [ diff --git a/include/constants/flags.h b/include/constants/flags.h index 5b1b5efd19..f291a61871 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -919,7 +919,7 @@ #define FLAG_HIDE_LITTLEROOT_TOWN_FAT_MAN 0x364 #define FLAG_HIDE_SLATEPORT_CITY_STERNS_SHIPYARD_MR_BRINEY 0x365 #define FLAG_HIDE_LANETTES_HOUSE_LANETTE 0x366 -#define FLAG_HIDE_FALLORBOR_POKEMON_CENTER_LANETTE 0x367 +#define FLAG_HIDE_FALLARBOR_POKEMON_CENTER_LANETTE 0x367 #define FLAG_HIDE_TRICK_HOUSE_ENTRANCE_MAN 0x368 #define FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER_REPLACEMENT 0x369 #define FLAG_HIDE_DESERT_UNDERPASS_FOSSIL 0x36A From b91656d1c32e4b55227695a4e2301eee0eb5a17d Mon Sep 17 00:00:00 2001 From: aronson Date: Sun, 13 Oct 2024 01:31:31 -0500 Subject: [PATCH 304/544] Update test LD script to respect 4 byte data section alignment (#5517) --- ld_script_test.ld | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ld_script_test.ld b/ld_script_test.ld index ec99609a7e..a9a2434c57 100644 --- a/ld_script_test.ld +++ b/ld_script_test.ld @@ -27,6 +27,7 @@ SECTIONS { src/*.o(.sbss); gflib/*.o(.sbss); test/*.o(.sbss); + . = ALIGN(4); } > EWRAM .iwram ORIGIN(IWRAM) : AT (__iwram_lma) @@ -34,6 +35,7 @@ SECTIONS { { __iwram_start = .; *(.iwram*); + . = ALIGN(4); __iwram_end = .; } > IWRAM @@ -55,6 +57,7 @@ SECTIONS { data/*.o(COMMON); test/*.o(COMMON); *libc.a:sbrkr.o(COMMON); + . = ALIGN(4); /* .persistent starts at 0x3007F00 */ /* WARNING: This is the end of the IRQ stack, if there's too From 253d3dd7ef1cd123d4ba2cce4117da13a503a8b9 Mon Sep 17 00:00:00 2001 From: mid-kid Date: Tue, 15 Oct 2024 03:47:07 +0000 Subject: [PATCH 305/544] Remove unnecessary looping for rule generation and unroll macros (#2046) --- Makefile | 89 +++++++++++++++++++++++--------------------------------- 1 file changed, 36 insertions(+), 53 deletions(-) diff --git a/Makefile b/Makefile index ee36562b13..58f6c14513 100644 --- a/Makefile +++ b/Makefile @@ -297,69 +297,52 @@ endif # As a side effect, they're evaluated immediately instead of when the rule is invoked. # It doesn't look like $(shell) can be deferred so there might not be a better way (Icedude_907: there is soon). -# For C dependencies. -# Args: $1 = Output file without extension (build/assets/src/data), $2 = Input file (src/data.c) -define C_DEP -$(call C_DEP_IMPL,$1,$2,$1) -endef -# Internal implementation details. -# $1: Output file without extension, $2 input file, $3 temp path (if keeping) -define C_DEP_IMPL -$1.o: $2 +$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c ifneq ($(KEEP_TEMPS),1) - @echo "$$(CC1) -o $$@ $$<" - @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - + @echo "$(CC1) -o $@ $<" + @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ - else - @$$(CPP) $$(CPPFLAGS) $$< -o $3.i - @$$(PREPROC) $3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $3.s - @echo -e ".text\n\t.align\t2, 0\n" >> $3.s - $$(AS) $$(ASFLAGS) -o $$@ $3.s + @$(CPP) $(CPPFLAGS) $< -o $*.i + @$(PREPROC) $*.i charmap.txt | $(CC1) $(CFLAGS) -o $*.s + @echo -e ".text\n\t.align\t2, 0\n" >> $*.s + $(AS) $(ASFLAGS) -o $@ $*.s endif + +$(C_BUILDDIR)/%.d: $(C_SUBDIR)/%.c + $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $< + ifneq ($(NODEP),1) -$1.d: $2 - $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I tools/agbcc/include $2 --include $1.d -endif -endef - -# Create generic rules if no dependency scanning, else create the real rules -ifeq ($(NODEP),1) -$(eval $(call C_DEP,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.c)) -else -$(foreach src,$(C_SRCS),$(eval $(call C_DEP,$(OBJ_DIR)/$(basename $(src)),$(src)))) +-include $(addprefix $(OBJ_DIR)/,$(C_SRCS:.c=.d)) endif -# Similar methodology for Assembly files -# $1: Output path without extension, $2: Input file (`*.s`) -define ASM_DEP -$1.o: $2 - $$(AS) $$(ASFLAGS) -o $$@ $$< -$(call ASM_SCANINC,$1,$2) -endef -# As above but first doing a preprocessor pass -define ASM_DEP_PREPROC -$1.o: $2 - $$(PREPROC) $$< charmap.txt | $$(CPP) $(INCLUDE_SCANINC_ARGS) - | $$(PREPROC) -ie $$< charmap.txt | $$(AS) $$(ASFLAGS) -o $$@ -$(call ASM_SCANINC,$1,$2) -endef +$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s + $(AS) $(ASFLAGS) -o $@ $< + +$(ASM_BUILDDIR)/%.d: $(ASM_SUBDIR)/%.s + $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I "" $< -define ASM_SCANINC ifneq ($(NODEP),1) -$1.d: $2 - $(SCANINC) -M $1.d $(INCLUDE_SCANINC_ARGS) -I "" $2 --include $1.d +-include $(addprefix $(OBJ_DIR)/,$(ASM_SRCS:.s=.d)) endif -endef -# Dummy rules or real rules -ifeq ($(NODEP),1) -$(eval $(call ASM_DEP,$(ASM_BUILDDIR)/%,$(ASM_SUBDIR)/%.s)) -$(eval $(call ASM_DEP_PREPROC,$(C_BUILDDIR)/%,$(C_SUBDIR)/%.s)) -$(eval $(call ASM_DEP_PREPROC,$(DATA_ASM_BUILDDIR)/%,$(DATA_ASM_SUBDIR)/%.s)) -else -$(foreach src, $(ASM_SRCS), $(eval $(call ASM_DEP,$(src:%.s=$(OBJ_DIR)/%),$(src)))) -$(foreach src, $(C_ASM_SRCS), $(eval $(call ASM_DEP_PREPROC,$(src:%.s=$(OBJ_DIR)/%),$(src)))) -$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call ASM_DEP_PREPROC,$(src:%.s=$(OBJ_DIR)/%),$(src)))) +$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s + $(PREPROC) $< charmap.txt | $(CPP) $(INCLUDE_SCANINC_ARGS) - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ + +$(C_BUILDDIR)/%.d: $(C_SUBDIR)/%.s + $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I "" $< + +ifneq ($(NODEP),1) +-include $(addprefix $(OBJ_DIR)/,$(C_ASM_SRCS:.s=.d)) +endif + +$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s + $(PREPROC) $< charmap.txt | $(CPP) $(INCLUDE_SCANINC_ARGS) - | $(PREPROC) -ie $< charmap.txt | $(AS) $(ASFLAGS) -o $@ + +$(DATA_ASM_BUILDDIR)/%.d: $(DATA_ASM_SUBDIR)/%.s + $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) -I "" $< + +ifneq ($(NODEP),1) +-include $(addprefix $(OBJ_DIR)/,$(REGULAR_DATA_ASM_SRCS:.s=.d)) endif $(OBJ_DIR)/sym_bss.ld: sym_bss.txt From a55c75d350969624745a357711ba01edf8ce9590 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Mon, 14 Oct 2024 23:52:11 -0400 Subject: [PATCH 306/544] Get rid of common syms (#2040) --- Makefile | 17 ++- common_syms/AgbRfu_LinkManager.txt | 1 - common_syms/agb_flash.txt | 10 -- common_syms/apprentice.txt | 3 - common_syms/battle_anim_throw.txt | 3 - common_syms/battle_factory_screen.txt | 1 - common_syms/battle_main.txt | 9 -- common_syms/battle_tower.txt | 1 - common_syms/berry_blender.txt | 1 - common_syms/bg.txt | 1 - common_syms/contest.txt | 1 - common_syms/contest_painting.txt | 4 - common_syms/ereader_screen.txt | 2 - common_syms/evolution_scene.txt | 1 - common_syms/faraway_island.txt | 3 - common_syms/field_camera.txt | 3 - common_syms/field_control_avatar.txt | 1 - common_syms/field_specials.txt | 1 - common_syms/fieldmap.txt | 1 - common_syms/image_processing_effects.txt | 10 -- common_syms/intro.txt | 2 - common_syms/librfu_rfu.txt | 5 - common_syms/librfu_sio32id.txt | 1 - common_syms/librfu_stwi.txt | 1 - common_syms/link.txt | 35 ------ common_syms/link_rfu_2.txt | 2 - common_syms/list_menu.txt | 2 - common_syms/load_save.txt | 4 - common_syms/m4a.txt | 12 --- common_syms/main.txt | 9 -- common_syms/mauville_old_man.txt | 1 - common_syms/overworld.txt | 8 -- common_syms/party_menu.txt | 1 - common_syms/pokedex.txt | 2 - common_syms/pokedex_cry_screen.txt | 1 - common_syms/random.txt | 2 - common_syms/rtc.txt | 1 - common_syms/save.txt | 13 --- common_syms/sound.txt | 1 - common_syms/sprite.txt | 2 - common_syms/start_menu.txt | 1 - common_syms/task.txt | 1 - common_syms/text.txt | 4 - common_syms/trainer_see.txt | 5 - common_syms/tv.txt | 4 - common_syms/window.txt | 2 - include/gba/defines.h | 1 + ld_script.ld | 1 + ld_script_modern.ld | 1 + src/AgbRfu_LinkManager.c | 2 +- src/agb_flash.c | 20 ++-- src/apprentice.c | 6 +- src/battle_anim_throw.c | 6 +- src/battle_factory_screen.c | 2 +- src/battle_main.c | 18 ++-- src/battle_tower.c | 2 +- src/berry_blender.c | 2 +- src/bg.c | 2 +- src/contest.c | 2 +- src/contest_painting.c | 8 +- src/ereader_screen.c | 4 +- src/evolution_scene.c | 2 +- src/field_camera.c | 6 +- src/field_control_avatar.c | 2 +- src/field_specials.c | 2 +- src/fieldmap.c | 2 +- src/image_processing_effects.c | 20 ++-- src/intro.c | 4 +- src/librfu_rfu.c | 10 +- src/librfu_sio32id.c | 2 +- src/librfu_stwi.c | 2 +- src/link.c | 70 ++++++------ src/link_rfu_2.c | 4 +- src/list_menu.c | 6 +- src/load_save.c | 8 +- src/m4a.c | 24 ++--- src/main.c | 18 ++-- src/mauville_old_man.c | 2 +- src/overworld.c | 16 +-- src/party_menu.c | 2 +- src/pokedex.c | 4 +- src/pokedex_cry_screen.c | 2 +- src/random.c | 4 +- src/rtc.c | 2 +- src/save.c | 26 ++--- src/sound.c | 2 +- src/sprite.c | 4 +- src/start_menu.c | 2 +- src/task.c | 2 +- src/text.c | 8 +- src/trainer_see.c | 10 +- src/tv.c | 10 +- src/window.c | 4 +- tools/ramscrgen/elf.cpp | 129 +++++++---------------- tools/ramscrgen/elf.h | 4 +- tools/ramscrgen/main.cpp | 55 ++-------- 96 files changed, 243 insertions(+), 500 deletions(-) delete mode 100644 common_syms/AgbRfu_LinkManager.txt delete mode 100644 common_syms/agb_flash.txt delete mode 100644 common_syms/apprentice.txt delete mode 100755 common_syms/battle_anim_throw.txt delete mode 100644 common_syms/battle_factory_screen.txt delete mode 100644 common_syms/battle_main.txt delete mode 100644 common_syms/battle_tower.txt delete mode 100644 common_syms/berry_blender.txt delete mode 100644 common_syms/bg.txt delete mode 100644 common_syms/contest.txt delete mode 100644 common_syms/contest_painting.txt delete mode 100644 common_syms/ereader_screen.txt delete mode 100644 common_syms/evolution_scene.txt delete mode 100755 common_syms/faraway_island.txt delete mode 100644 common_syms/field_camera.txt delete mode 100644 common_syms/field_control_avatar.txt delete mode 100644 common_syms/field_specials.txt delete mode 100644 common_syms/fieldmap.txt delete mode 100644 common_syms/image_processing_effects.txt delete mode 100644 common_syms/intro.txt delete mode 100644 common_syms/librfu_rfu.txt delete mode 100644 common_syms/librfu_sio32id.txt delete mode 100644 common_syms/librfu_stwi.txt delete mode 100644 common_syms/link.txt delete mode 100644 common_syms/link_rfu_2.txt delete mode 100644 common_syms/list_menu.txt delete mode 100644 common_syms/load_save.txt delete mode 100644 common_syms/m4a.txt delete mode 100644 common_syms/main.txt delete mode 100644 common_syms/mauville_old_man.txt delete mode 100644 common_syms/overworld.txt delete mode 100644 common_syms/party_menu.txt delete mode 100644 common_syms/pokedex.txt delete mode 100644 common_syms/pokedex_cry_screen.txt delete mode 100644 common_syms/random.txt delete mode 100644 common_syms/rtc.txt delete mode 100644 common_syms/save.txt delete mode 100644 common_syms/sound.txt delete mode 100644 common_syms/sprite.txt delete mode 100644 common_syms/start_menu.txt delete mode 100644 common_syms/task.txt delete mode 100644 common_syms/text.txt delete mode 100644 common_syms/trainer_see.txt delete mode 100644 common_syms/tv.txt delete mode 100644 common_syms/window.txt diff --git a/Makefile b/Makefile index 58f6c14513..6d66c34d65 100644 --- a/Makefile +++ b/Makefile @@ -178,12 +178,20 @@ ifneq (,$(MAKECMDGOALS)) endif endif +.SHELLSTATUS ?= 0 + ifeq ($(SETUP_PREREQS),1) # If set on: Default target or a rule requiring a scan # Forcibly execute `make tools` since we need them for what we are doing. - $(call infoshell, $(MAKE) -f make_tools.mk) + $(foreach line, $(shell $(MAKE) -f make_tools.mk | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) + ifneq ($(.SHELLSTATUS),0) + $(error Errors occurred while building tools. See error messages above for more details) + endif # Oh and also generate mapjson sources before we use `SCANINC`. - $(call infoshell, $(MAKE) generated) + $(foreach line, $(shell $(MAKE) generated | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) + ifneq ($(.SHELLSTATUS),0) + $(error Errors occurred while generating map-related sources. See error messages above for more details) + endif endif # Collect sources @@ -255,6 +263,8 @@ include spritesheet_rules.mk include json_data_rules.mk include audio_rules.mk +# NOTE: Tools must have been built prior (FIXME) +# so you can't really call this rule directly generated: $(AUTO_GEN_TARGETS) %.s: ; @@ -270,8 +280,6 @@ generated: $(AUTO_GEN_TARGETS) %.lz: % ; $(GFX) $< $@ %.rl: % ; $(GFX) $< $@ -# NOTE: Tools must have been built prior (FIXME) -generated: tools $(AUTO_GEN_TARGETS) clean-generated: -rm -f $(AUTO_GEN_TARGETS) @@ -371,6 +379,7 @@ libagbsyscall: # Elf from object files $(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) libagbsyscall @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat + @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ | cat" $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent # Builds the rom from the elf file diff --git a/common_syms/AgbRfu_LinkManager.txt b/common_syms/AgbRfu_LinkManager.txt deleted file mode 100644 index 7ff8cd53dd..0000000000 --- a/common_syms/AgbRfu_LinkManager.txt +++ /dev/null @@ -1 +0,0 @@ -lman diff --git a/common_syms/agb_flash.txt b/common_syms/agb_flash.txt deleted file mode 100644 index cb421ec80d..0000000000 --- a/common_syms/agb_flash.txt +++ /dev/null @@ -1,10 +0,0 @@ -gFlashTimeoutFlag -PollFlashStatus -WaitForFlashWrite -ProgramFlashSector -gFlash -ProgramFlashByte -gFlashNumRemainingBytes -EraseFlashChip -EraseFlashSector -gFlashMaxTime diff --git a/common_syms/apprentice.txt b/common_syms/apprentice.txt deleted file mode 100644 index 0d3569dcbb..0000000000 --- a/common_syms/apprentice.txt +++ /dev/null @@ -1,3 +0,0 @@ -gApprenticePartyMovesData -gApprenticeQuestionData -gApprenticeFunc diff --git a/common_syms/battle_anim_throw.txt b/common_syms/battle_anim_throw.txt deleted file mode 100755 index 5e2e8b3ff3..0000000000 --- a/common_syms/battle_anim_throw.txt +++ /dev/null @@ -1,3 +0,0 @@ -gMonShrinkDuration -gMonShrinkDelta -gMonShrinkDistance diff --git a/common_syms/battle_factory_screen.txt b/common_syms/battle_factory_screen.txt deleted file mode 100644 index 3ddeb6d3b1..0000000000 --- a/common_syms/battle_factory_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gFactorySelect_CurrentOptionFunc diff --git a/common_syms/battle_main.txt b/common_syms/battle_main.txt deleted file mode 100644 index f6f02c48d3..0000000000 --- a/common_syms/battle_main.txt +++ /dev/null @@ -1,9 +0,0 @@ -gPreBattleCallback1 -gBattleMainFunc -gBattleResults -gLeveledUpInBattle -gBattlerControllerFuncs -gHealthboxSpriteIds -gMultiUsePlayerCursor -gNumberOfMovesToChoose -gBattleControllerData diff --git a/common_syms/battle_tower.txt b/common_syms/battle_tower.txt deleted file mode 100644 index 7371109d51..0000000000 --- a/common_syms/battle_tower.txt +++ /dev/null @@ -1 +0,0 @@ -gFrontierTempParty diff --git a/common_syms/berry_blender.txt b/common_syms/berry_blender.txt deleted file mode 100644 index 1b15a33d61..0000000000 --- a/common_syms/berry_blender.txt +++ /dev/null @@ -1 +0,0 @@ -gInGameOpponentsNo diff --git a/common_syms/bg.txt b/common_syms/bg.txt deleted file mode 100644 index 0a3c3aecca..0000000000 --- a/common_syms/bg.txt +++ /dev/null @@ -1 +0,0 @@ -gWindowTileAutoAllocEnabled diff --git a/common_syms/contest.txt b/common_syms/contest.txt deleted file mode 100644 index 6a519fb463..0000000000 --- a/common_syms/contest.txt +++ /dev/null @@ -1 +0,0 @@ -gContestRngValue diff --git a/common_syms/contest_painting.txt b/common_syms/contest_painting.txt deleted file mode 100644 index 32bb8be161..0000000000 --- a/common_syms/contest_painting.txt +++ /dev/null @@ -1,4 +0,0 @@ -gContestMonPixels -gImageProcessingContext -gContestPaintingWinner -gContestPaintingMonPalette diff --git a/common_syms/ereader_screen.txt b/common_syms/ereader_screen.txt deleted file mode 100644 index 26b01f678d..0000000000 --- a/common_syms/ereader_screen.txt +++ /dev/null @@ -1,2 +0,0 @@ -gUnknownSpace -gEReaderData diff --git a/common_syms/evolution_scene.txt b/common_syms/evolution_scene.txt deleted file mode 100644 index 137cd3e05d..0000000000 --- a/common_syms/evolution_scene.txt +++ /dev/null @@ -1 +0,0 @@ -gCB2_AfterEvolution diff --git a/common_syms/faraway_island.txt b/common_syms/faraway_island.txt deleted file mode 100755 index e02ca2ec25..0000000000 --- a/common_syms/faraway_island.txt +++ /dev/null @@ -1,3 +0,0 @@ -sPlayerToMewDeltaX -sPlayerToMewDeltaY -sMewDirectionCandidates diff --git a/common_syms/field_camera.txt b/common_syms/field_camera.txt deleted file mode 100644 index 02301ce23c..0000000000 --- a/common_syms/field_camera.txt +++ /dev/null @@ -1,3 +0,0 @@ -gFieldCamera -gTotalCameraPixelOffsetY -gTotalCameraPixelOffsetX diff --git a/common_syms/field_control_avatar.txt b/common_syms/field_control_avatar.txt deleted file mode 100644 index 268f60c641..0000000000 --- a/common_syms/field_control_avatar.txt +++ /dev/null @@ -1 +0,0 @@ -gSelectedObjectEvent diff --git a/common_syms/field_specials.txt b/common_syms/field_specials.txt deleted file mode 100644 index 7adb3f6692..0000000000 --- a/common_syms/field_specials.txt +++ /dev/null @@ -1 +0,0 @@ -gScrollableMultichoice_ListMenuTemplate diff --git a/common_syms/fieldmap.txt b/common_syms/fieldmap.txt deleted file mode 100644 index 0ead758462..0000000000 --- a/common_syms/fieldmap.txt +++ /dev/null @@ -1 +0,0 @@ -gBackupMapLayout diff --git a/common_syms/image_processing_effects.txt b/common_syms/image_processing_effects.txt deleted file mode 100644 index 134f7e88b2..0000000000 --- a/common_syms/image_processing_effects.txt +++ /dev/null @@ -1,10 +0,0 @@ -gCanvasColumnStart -gCanvasPixels -gCanvasRowEnd -gCanvasHeight -gCanvasColumnEnd -gCanvasRowStart -gCanvasMonPersonality -gCanvasWidth -gCanvasPalette -gCanvasPaletteStart diff --git a/common_syms/intro.txt b/common_syms/intro.txt deleted file mode 100644 index d069b1014f..0000000000 --- a/common_syms/intro.txt +++ /dev/null @@ -1,2 +0,0 @@ -gIntroFrameCounter -gMultibootProgramStruct diff --git a/common_syms/librfu_rfu.txt b/common_syms/librfu_rfu.txt deleted file mode 100644 index 4b742dcd25..0000000000 --- a/common_syms/librfu_rfu.txt +++ /dev/null @@ -1,5 +0,0 @@ -gRfuSlotStatusUNI -gRfuSlotStatusNI -gRfuLinkStatus -gRfuStatic -gRfuFixed diff --git a/common_syms/librfu_sio32id.txt b/common_syms/librfu_sio32id.txt deleted file mode 100644 index 97395e84b3..0000000000 --- a/common_syms/librfu_sio32id.txt +++ /dev/null @@ -1 +0,0 @@ -gRfuSIO32Id diff --git a/common_syms/librfu_stwi.txt b/common_syms/librfu_stwi.txt deleted file mode 100644 index a1f7735535..0000000000 --- a/common_syms/librfu_stwi.txt +++ /dev/null @@ -1 +0,0 @@ -gSTWIStatus diff --git a/common_syms/link.txt b/common_syms/link.txt deleted file mode 100644 index 4118d1eb4b..0000000000 --- a/common_syms/link.txt +++ /dev/null @@ -1,35 +0,0 @@ -gLinkPartnersHeldKeys -gLinkDebugSeed -gLocalLinkPlayerBlock -gLinkErrorOccurred -gLinkDebugFlags -gLinkFiller1 -gRemoteLinkPlayersNotReceived -gBlockReceivedStatus -gLinkFiller2 -gLinkHeldKeys -gRecvCmds -gLinkStatus -gLinkDummy1 -gLinkDummy2 -gReadyToExitStandby -gReadyToCloseLink -gReadyCloseLinkType -gSuppressLinkErrorMessage -gWirelessCommType -gSavedLinkPlayerCount -gSendCmd -gSavedMultiplayerId -gReceivedRemoteLinkPlayers -gLinkTestBGInfo -gLinkCallback -gShouldAdvanceLinkState -gLinkTestBlockChecksums -gBlockRequestType -gLinkFiller3 -gLinkFiller4 -gLinkFiller5 -gLastSendQueueCount -gLink -gLastRecvQueueCount -gLinkSavedIme diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt deleted file mode 100644 index 4b8f02bad8..0000000000 --- a/common_syms/link_rfu_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -gRfuAPIBuffer -gRfu diff --git a/common_syms/list_menu.txt b/common_syms/list_menu.txt deleted file mode 100644 index ed5343618c..0000000000 --- a/common_syms/list_menu.txt +++ /dev/null @@ -1,2 +0,0 @@ -gListMenuOverride -gMultiuseListMenuTemplate diff --git a/common_syms/load_save.txt b/common_syms/load_save.txt deleted file mode 100644 index 2d3d9b802f..0000000000 --- a/common_syms/load_save.txt +++ /dev/null @@ -1,4 +0,0 @@ -gFlashMemoryPresent -gSaveBlock1Ptr -gSaveBlock2Ptr -gPokemonStoragePtr diff --git a/common_syms/m4a.txt b/common_syms/m4a.txt deleted file mode 100644 index 0d6b13a79b..0000000000 --- a/common_syms/m4a.txt +++ /dev/null @@ -1,12 +0,0 @@ -gSoundInfo -gPokemonCrySongs -gPokemonCryMusicPlayers -gMPlayInfo_BGM -gMPlayJumpTable -gCgbChans -gMPlayInfo_SE1 -gMPlayInfo_SE2 -gPokemonCryTracks -gPokemonCrySong -gMPlayMemAccArea -gMPlayInfo_SE3 diff --git a/common_syms/main.txt b/common_syms/main.txt deleted file mode 100644 index a620083d19..0000000000 --- a/common_syms/main.txt +++ /dev/null @@ -1,9 +0,0 @@ -gKeyRepeatStartDelay -gLinkTransferringData -gMain -gKeyRepeatContinueDelay -gSoftResetDisabled -gIntrTable -gLinkVSyncDisabled -IntrMain_Buffer -gPcmDmaCounter diff --git a/common_syms/mauville_old_man.txt b/common_syms/mauville_old_man.txt deleted file mode 100644 index 9d77b8692b..0000000000 --- a/common_syms/mauville_old_man.txt +++ /dev/null @@ -1 +0,0 @@ -gBardSong diff --git a/common_syms/overworld.txt b/common_syms/overworld.txt deleted file mode 100644 index dcada0bbef..0000000000 --- a/common_syms/overworld.txt +++ /dev/null @@ -1,8 +0,0 @@ -gOverworldTilemapBuffer_Bg2 -gOverworldTilemapBuffer_Bg1 -gOverworldTilemapBuffer_Bg3 -gHeldKeyCodeToSend -gFieldCallback -gFieldCallback2 -gLocalLinkPlayerId -gFieldLinkPlayerCount diff --git a/common_syms/party_menu.txt b/common_syms/party_menu.txt deleted file mode 100644 index 6ed37392c2..0000000000 --- a/common_syms/party_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gItemUseCB diff --git a/common_syms/pokedex.txt b/common_syms/pokedex.txt deleted file mode 100644 index c7a297b2af..0000000000 --- a/common_syms/pokedex.txt +++ /dev/null @@ -1,2 +0,0 @@ -gUnusedPokedexU8 -gPokedexVBlankCB diff --git a/common_syms/pokedex_cry_screen.txt b/common_syms/pokedex_cry_screen.txt deleted file mode 100644 index d16ec36d64..0000000000 --- a/common_syms/pokedex_cry_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gDexCryScreenState diff --git a/common_syms/random.txt b/common_syms/random.txt deleted file mode 100644 index 8037c69586..0000000000 --- a/common_syms/random.txt +++ /dev/null @@ -1,2 +0,0 @@ -gRngValue -gRng2Value diff --git a/common_syms/rtc.txt b/common_syms/rtc.txt deleted file mode 100644 index fa00a34d51..0000000000 --- a/common_syms/rtc.txt +++ /dev/null @@ -1 +0,0 @@ -gLocalTime diff --git a/common_syms/save.txt b/common_syms/save.txt deleted file mode 100644 index 131031d506..0000000000 --- a/common_syms/save.txt +++ /dev/null @@ -1,13 +0,0 @@ -gLastWrittenSector -gLastSaveCounter -gLastKnownGoodSector -gDamagedSaveSectors -gSaveCounter -gReadWriteSector -gIncrementalSectorId -gSaveUnusedVar -gSaveFileStatus -gGameContinueCallback -gRamSaveSectorLocations -gSaveUnusedVar2 -gSaveAttemptStatus diff --git a/common_syms/sound.txt b/common_syms/sound.txt deleted file mode 100644 index 0f6f2fc758..0000000000 --- a/common_syms/sound.txt +++ /dev/null @@ -1 +0,0 @@ -gDisableMusic diff --git a/common_syms/sprite.txt b/common_syms/sprite.txt deleted file mode 100644 index 627c01c0d0..0000000000 --- a/common_syms/sprite.txt +++ /dev/null @@ -1,2 +0,0 @@ -gOamMatrixAllocBitmap -gReservedSpritePaletteCount diff --git a/common_syms/start_menu.txt b/common_syms/start_menu.txt deleted file mode 100644 index 05beaf57c2..0000000000 --- a/common_syms/start_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gMenuCallback diff --git a/common_syms/task.txt b/common_syms/task.txt deleted file mode 100644 index 6601bd11bb..0000000000 --- a/common_syms/task.txt +++ /dev/null @@ -1 +0,0 @@ -gTasks diff --git a/common_syms/text.txt b/common_syms/text.txt deleted file mode 100644 index cd8886e5b1..0000000000 --- a/common_syms/text.txt +++ /dev/null @@ -1,4 +0,0 @@ -gFonts -gDisableTextPrinters -gCurGlyph -gTextFlags diff --git a/common_syms/trainer_see.txt b/common_syms/trainer_see.txt deleted file mode 100644 index 0b30a632a0..0000000000 --- a/common_syms/trainer_see.txt +++ /dev/null @@ -1,5 +0,0 @@ -gWhichTrainerToFaceAfterBattle -gPostBattleMovementScript -gApproachingTrainers -gNoOfApproachingTrainers -gTrainerApproachedPlayer diff --git a/common_syms/tv.txt b/common_syms/tv.txt deleted file mode 100644 index 0370f65e1f..0000000000 --- a/common_syms/tv.txt +++ /dev/null @@ -1,4 +0,0 @@ -sCurTVShowSlot -sTV_SecretBaseVisitMovesTemp -sTV_DecorationsBuffer -sTV_SecretBaseVisitMonsTemp diff --git a/common_syms/window.txt b/common_syms/window.txt deleted file mode 100644 index 24c093a226..0000000000 --- a/common_syms/window.txt +++ /dev/null @@ -1,2 +0,0 @@ -gTransparentTileNumber -gWindowBgTilemapBuffers diff --git a/include/gba/defines.h b/include/gba/defines.h index febe6882cf..a549bab7e2 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -8,6 +8,7 @@ #define IWRAM_DATA __attribute__((section("iwram_data"))) #define EWRAM_DATA __attribute__((section("ewram_data"))) +#define COMMON_DATA __attribute__((section("common_data"))) #define UNUSED __attribute__((unused)) #if MODERN diff --git a/ld_script.ld b/ld_script.ld index 1e08a8d61c..316b5fe20f 100644 --- a/ld_script.ld +++ b/ld_script.ld @@ -42,6 +42,7 @@ SECTIONS { /* COMMON starts at 0x30022A8 */ INCLUDE "sym_common.ld" + src/*.o(COMMON); *libc.a:sbrkr.o(COMMON); } > IWRAM diff --git a/ld_script_modern.ld b/ld_script_modern.ld index fac4a134c3..788a5736f0 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -28,6 +28,7 @@ SECTIONS { src/m4a.o(.bss.code); + src/*.o(common_data); src/*.o(COMMON); *libc.a:*.o(COMMON); *libnosys.a:*.o(COMMON); diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index e4ee377f7b..d696c01d3c 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -14,7 +14,7 @@ #define FSP_ON 0x01 #define FSP_START 0x02 -LINK_MANAGER lman; +COMMON_DATA LINK_MANAGER lman = {0}; static void rfu_LMAN_clearVariables(void); static void rfu_LMAN_settingPCSWITCH(u32 rand); diff --git a/src/agb_flash.c b/src/agb_flash.c index 6b9381c704..ffec206fee 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -6,16 +6,16 @@ static u16 sTimerCount; static vu16 *sTimerReg; static u16 sSavedIme; -u8 gFlashTimeoutFlag; -u8 (*PollFlashStatus)(u8 *); -u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData); -u16 (*ProgramFlashSector)(u16 sectorNum, u8 *src); -const struct FlashType *gFlash; -u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data); -u16 gFlashNumRemainingBytes; -u16 (*EraseFlashChip)(); -u16 (*EraseFlashSector)(u16 sectorNum); -const u16 *gFlashMaxTime; +COMMON_DATA u8 gFlashTimeoutFlag = 0; +COMMON_DATA u8 (*PollFlashStatus)(u8 *) = NULL; +COMMON_DATA u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData) = NULL; +COMMON_DATA u16 (*ProgramFlashSector)(u16 sectorNum, u8 *src) = NULL; +COMMON_DATA const struct FlashType *gFlash = NULL; +COMMON_DATA u16 (*ProgramFlashByte)(u16 sectorNum, u32 offset, u8 data) = NULL; +COMMON_DATA u16 gFlashNumRemainingBytes = 0; +COMMON_DATA u16 (*EraseFlashChip)() = NULL; +COMMON_DATA u16 (*EraseFlashSector)(u16 sectorNum) = 0; +COMMON_DATA const u16 *gFlashMaxTime = NULL; void SetReadFlash1(u16 *dest); diff --git a/src/apprentice.c b/src/apprentice.c index 2280412fe7..72ab8f24c8 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -75,9 +75,9 @@ struct ApprenticeQuestionData }; // IWRAM common -struct ApprenticePartyMovesData *gApprenticePartyMovesData; -struct ApprenticeQuestionData *gApprenticeQuestionData; -void (*gApprenticeFunc)(void); +COMMON_DATA struct ApprenticePartyMovesData *gApprenticePartyMovesData = NULL; +COMMON_DATA struct ApprenticeQuestionData *gApprenticeQuestionData = NULL; +COMMON_DATA void (*gApprenticeFunc)(void) = NULL; // This file's functions. static u16 GetRandomAlternateMove(u8 monId); diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 8296126f14..951794fc54 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -23,9 +23,9 @@ #include "constants/rgb.h" // iwram -u32 gMonShrinkDuration; -u16 gMonShrinkDelta; -u16 gMonShrinkDistance; +COMMON_DATA u32 gMonShrinkDuration = 0; +COMMON_DATA u16 gMonShrinkDelta = 0; +COMMON_DATA u16 gMonShrinkDistance = 0; enum { BALL_ROLL_1, diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 0533d1e2a3..adf241153f 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -256,7 +256,7 @@ static struct FactorySelectScreen *sFactorySelectScreen; static void (*sSwap_CurrentOptionFunc)(u8 taskId); static struct FactorySwapScreen *sFactorySwapScreen; -u8 (*gFactorySelect_CurrentOptionFunc)(void); +COMMON_DATA u8 (*gFactorySelect_CurrentOptionFunc)(void) = NULL; static const u16 sPokeballGray_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/pokeball_gray.gbapal"); static const u16 sPokeballSelected_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/pokeball_selected.gbapal"); diff --git a/src/battle_main.c b/src/battle_main.c index 9039655c4d..7ee8d8cf55 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -237,15 +237,15 @@ EWRAM_DATA u16 gBattleMovePower = 0; EWRAM_DATA u16 gMoveToLearn = 0; EWRAM_DATA u8 gBattleMonForms[MAX_BATTLERS_COUNT] = {0}; -void (*gPreBattleCallback1)(void); -void (*gBattleMainFunc)(void); -struct BattleResults gBattleResults; -u8 gLeveledUpInBattle; -void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void); -u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; -u8 gMultiUsePlayerCursor; -u8 gNumberOfMovesToChoose; -u8 gBattleControllerData[MAX_BATTLERS_COUNT]; // Used by the battle controllers to store misc sprite/task IDs for each battler +COMMON_DATA void (*gPreBattleCallback1)(void) = NULL; +COMMON_DATA void (*gBattleMainFunc)(void) = NULL; +COMMON_DATA struct BattleResults gBattleResults = {0}; +COMMON_DATA u8 gLeveledUpInBattle = 0; +COMMON_DATA void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void) = {0}; +COMMON_DATA u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT] = {0}; +COMMON_DATA u8 gMultiUsePlayerCursor = 0; +COMMON_DATA u8 gNumberOfMovesToChoose = 0; +COMMON_DATA u8 gBattleControllerData[MAX_BATTLERS_COUNT] = {0}; // Used by the battle controllers to store misc sprite/task IDs for each battler static const struct ScanlineEffectParams sIntroScanlineParams16Bit = { diff --git a/src/battle_tower.c b/src/battle_tower.c index ec6019afb0..0420a15f63 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -45,7 +45,7 @@ EWRAM_DATA const struct BattleFrontierTrainer *gFacilityTrainers = NULL; EWRAM_DATA const struct FacilityMon *gFacilityTrainerMons = NULL; // IWRAM common -u16 gFrontierTempParty[MAX_FRONTIER_PARTY_SIZE]; +COMMON_DATA u16 gFrontierTempParty[MAX_FRONTIER_PARTY_SIZE] = {0}; // This file's functions. static void InitTowerChallenge(void); diff --git a/src/berry_blender.c b/src/berry_blender.c index a5102d48fb..5f0e170607 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -246,7 +246,7 @@ static s16 sPokeblockPresentFlavors[FLAVOR_COUNT + 1]; static s16 sDebug_MaxRPMStage; static s16 sDebug_GameTimeStage; -u8 gInGameOpponentsNo; +COMMON_DATA u8 gInGameOpponentsNo = 0; static const u16 sBlenderCenter_Pal[] = INCBIN_U16("graphics/berry_blender/center.gbapal"); static const u8 sBlenderCenter_Tilemap[] = INCBIN_U8("graphics/berry_blender/center_map.bin"); diff --git a/src/bg.c b/src/bg.c index 4ccb95eb6b..166c59df0c 100644 --- a/src/bg.c +++ b/src/bg.c @@ -42,7 +42,7 @@ static struct BgControl sGpuBgConfigs; static struct BgConfig2 sGpuBgConfigs2[NUM_BACKGROUNDS]; static u32 sDmaBusyBitfield[NUM_BACKGROUNDS]; -u32 gWindowTileAutoAllocEnabled; +COMMON_DATA u32 gWindowTileAutoAllocEnabled = 0; static const struct BgConfig sZeroedBgControlStruct = { 0 }; diff --git a/src/contest.c b/src/contest.c index 8f0ad7fbfe..5b9560faf5 100644 --- a/src/contest.c +++ b/src/contest.c @@ -358,7 +358,7 @@ EWRAM_DATA bool8 gCurContestWinnerIsForArtist = 0; EWRAM_DATA u8 gCurContestWinnerSaveIdx = 0; // IWRAM common vars. -u32 gContestRngValue; +COMMON_DATA u32 gContestRngValue = 0; extern const u8 gText_LinkStandby4[]; extern const u8 gText_BDot[]; diff --git a/src/contest_painting.c b/src/contest_painting.c index 30ca51c966..c72d0dc6af 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -21,10 +21,10 @@ #include "window.h" #include "constants/rgb.h" -u16 (*gContestMonPixels)[][32]; -struct ImageProcessingContext gImageProcessingContext; -struct ContestWinner *gContestPaintingWinner; -u16 *gContestPaintingMonPalette; +COMMON_DATA u16 (*gContestMonPixels)[][32] = {0}; +COMMON_DATA struct ImageProcessingContext gImageProcessingContext = {0}; +COMMON_DATA struct ContestWinner *gContestPaintingWinner = {0}; +COMMON_DATA u16 *gContestPaintingMonPalette = NULL; static u8 sHoldState; static u16 sMosaicVal; diff --git a/src/ereader_screen.c b/src/ereader_screen.c index cb048d2ae3..556acf8e3c 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -41,9 +41,9 @@ struct EReaderData static void Task_EReader(u8); // This belongs in COMMON somewhere between party_menu and ereader_screen, but it's unused so it's unclear where. -UNUSED u8 gUnknownSpace[64]; +COMMON_DATA UNUSED u8 gUnknownSpace[64] = {0}; -struct EReaderData gEReaderData; +COMMON_DATA struct EReaderData gEReaderData = {0}; extern const u8 gMultiBootProgram_EReader_Start[]; extern const u8 gMultiBootProgram_EReader_End[]; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 133afe3b0d..db28ceb8f2 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -48,7 +48,7 @@ struct EvoInfo static EWRAM_DATA struct EvoInfo *sEvoStructPtr = NULL; static EWRAM_DATA u16 *sBgAnimPal = NULL; -void (*gCB2_AfterEvolution)(void); +COMMON_DATA void (*gCB2_AfterEvolution)(void) = NULL; #define sEvoCursorPos gBattleCommunication[1] // when learning a new move #define sEvoGraphicsTaskId gBattleCommunication[2] diff --git a/src/field_camera.c b/src/field_camera.c index 31ebc63c05..290ddddaf1 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -39,9 +39,9 @@ static s16 sVerticalCameraPan; static bool8 sBikeCameraPanFlag; static void (*sFieldCameraPanningCallback)(void); -struct CameraObject gFieldCamera; -u16 gTotalCameraPixelOffsetY; -u16 gTotalCameraPixelOffsetX; +COMMON_DATA struct CameraObject gFieldCamera = {0}; +COMMON_DATA u16 gTotalCameraPixelOffsetY = 0; +COMMON_DATA u16 gTotalCameraPixelOffsetX = 0; static void ResetCameraOffset(struct FieldCameraOffset *cameraOffset) { diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 09d6ae7838..b1c3aa6d8e 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -38,7 +38,7 @@ static EWRAM_DATA u8 sWildEncounterImmunitySteps = 0; static EWRAM_DATA u16 sPrevMetatileBehavior = 0; -u8 gSelectedObjectEvent; +COMMON_DATA u8 gSelectedObjectEvent = 0; static void GetPlayerPosition(struct MapPosition *); static void GetInFrontOfPlayerPosition(struct MapPosition *); diff --git a/src/field_specials.c b/src/field_specials.c index f8d493493c..43d07356aa 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -92,7 +92,7 @@ static EWRAM_DATA u8 sFrontierExchangeCorner_ItemIconWindowId = 0; static EWRAM_DATA u8 sPCBoxToSendMon = 0; static EWRAM_DATA u32 sBattleTowerMultiBattleTypeFlags = 0; -struct ListMenuTemplate gScrollableMultichoice_ListMenuTemplate; +COMMON_DATA struct ListMenuTemplate gScrollableMultichoice_ListMenuTemplate = {0}; void TryLoseFansFromPlayTime(void); void SetPlayerGotFirstFans(void); diff --git a/src/fieldmap.c b/src/fieldmap.c index e4dc0026a3..8c0e416f45 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -31,7 +31,7 @@ EWRAM_DATA struct Camera gCamera = {0}; EWRAM_DATA static struct ConnectionFlags sMapConnectionFlags = {0}; EWRAM_DATA static u32 UNUSED sFiller = 0; // without this, the next file won't align properly -struct BackupMapLayout gBackupMapLayout; +COMMON_DATA struct BackupMapLayout gBackupMapLayout = {0}; static const struct ConnectionFlags sDummyConnectionFlags = {0}; diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c index 51a5d13993..b09e881fe0 100644 --- a/src/image_processing_effects.c +++ b/src/image_processing_effects.c @@ -4,16 +4,16 @@ #include "constants/rgb.h" // IWRAM common -u8 gCanvasColumnStart; -u16 *gCanvasPixels; -u8 gCanvasRowEnd; -u8 gCanvasHeight; -u8 gCanvasColumnEnd; -u8 gCanvasRowStart; -u8 gCanvasMonPersonality; -u8 gCanvasWidth; -u16 *gCanvasPalette; -u16 gCanvasPaletteStart; +COMMON_DATA u8 gCanvasColumnStart = 0; +COMMON_DATA u16 *gCanvasPixels = NULL; +COMMON_DATA u8 gCanvasRowEnd = 0; +COMMON_DATA u8 gCanvasHeight = 0; +COMMON_DATA u8 gCanvasColumnEnd = 0; +COMMON_DATA u8 gCanvasRowStart = 0; +COMMON_DATA u8 gCanvasMonPersonality = 0; +COMMON_DATA u8 gCanvasWidth = 0; +COMMON_DATA u16 *gCanvasPalette = NULL; +COMMON_DATA u16 gCanvasPaletteStart = 0; static void ApplyImageEffect_Pointillism(void); static void ApplyImageEffect_Blur(void); diff --git a/src/intro.c b/src/intro.c index 02c3a1f948..68432b5b98 100644 --- a/src/intro.c +++ b/src/intro.c @@ -178,8 +178,8 @@ static EWRAM_DATA u16 sIntroCharacterGender = 0; static EWRAM_DATA u16 UNUSED sUnusedVar = 0; static EWRAM_DATA u16 sFlygonYOffset = 0; -u32 gIntroFrameCounter; -struct GcmbStruct gMultibootProgramStruct; +COMMON_DATA u32 gIntroFrameCounter = 0; +COMMON_DATA struct GcmbStruct gMultibootProgramStruct = {0}; static const u16 sIntroDrops_Pal[] = INCBIN_U16("graphics/intro/scene_1/drops.gbapal"); static const u16 sIntroLogo_Pal[] = INCBIN_U16("graphics/intro/scene_1/logo.gbapal"); diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 828d6450bc..ee5dbe6af4 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -76,11 +76,11 @@ static void rfu_STC_NI_receive_Sender(u8, u8, const struct RfuLocalStruct *, UNU static void rfu_STC_NI_initSlot_asRecvDataEntity(u8, struct NIComm *); static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *); -struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; -struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX]; -struct RfuLinkStatus *gRfuLinkStatus; -struct RfuStatic *gRfuStatic; -struct RfuFixed *gRfuFixed; +COMMON_DATA struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX] = {0}; +COMMON_DATA struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX] = {0}; +COMMON_DATA struct RfuLinkStatus *gRfuLinkStatus = NULL; +COMMON_DATA struct RfuStatic *gRfuStatic = NULL; +COMMON_DATA struct RfuFixed *gRfuFixed = NULL; static const struct LLSFStruct llsf_struct[2] = { [MODE_CHILD] = { diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c index 1c02840e85..32391d781c 100644 --- a/src/librfu_sio32id.c +++ b/src/librfu_sio32id.c @@ -15,7 +15,7 @@ struct RfuSIO32Id u16 lastId; }; -struct RfuSIO32Id gRfuSIO32Id; +COMMON_DATA struct RfuSIO32Id gRfuSIO32Id = {0}; static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO static const char Sio32IDLib_Var[] = "Sio32ID_030820"; diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index b515f338e0..13a7e34082 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -8,7 +8,7 @@ static void STWI_stop_timer(void); static s32 STWI_restart_Command(void); static s32 STWI_reset_ClockCounter(void); -struct STWIStatus *gSTWIStatus; +COMMON_DATA struct STWIStatus *gSTWIStatus = NULL; void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam) { diff --git a/src/link.c b/src/link.c index f784a36c67..bb74574a31 100644 --- a/src/link.c +++ b/src/link.c @@ -68,41 +68,41 @@ static u16 sRecvNonzeroCheck; static u8 sChecksumAvailable; static u8 sHandshakePlayerCount; -u16 gLinkPartnersHeldKeys[6]; -u32 gLinkDebugSeed; -struct LinkPlayerBlock gLocalLinkPlayerBlock; -bool8 gLinkErrorOccurred; -u32 gLinkDebugFlags; -u32 gLinkFiller1; -bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; -u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; -u32 gLinkFiller2; -u16 gLinkHeldKeys; -u16 ALIGNED(4) gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; -u32 gLinkStatus; -bool8 gLinkDummy1; // Never read -bool8 gLinkDummy2; // Never read -bool8 gReadyToExitStandby[MAX_LINK_PLAYERS]; -bool8 gReadyToCloseLink[MAX_LINK_PLAYERS]; -u16 gReadyCloseLinkType; // Never read -u8 gSuppressLinkErrorMessage; -bool8 gWirelessCommType; -bool8 gSavedLinkPlayerCount; -u16 gSendCmd[CMD_LENGTH]; -u8 gSavedMultiplayerId; -bool8 gReceivedRemoteLinkPlayers; -struct LinkTestBGInfo gLinkTestBGInfo; -void (*gLinkCallback)(void); -u8 gShouldAdvanceLinkState; -u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; -u8 gBlockRequestType; -u32 gLinkFiller3; -u32 gLinkFiller4; -u32 gLinkFiller5; -u8 gLastSendQueueCount; -struct Link gLink; -u8 gLastRecvQueueCount; -u16 gLinkSavedIme; +COMMON_DATA u16 gLinkPartnersHeldKeys[6] = {0}; +COMMON_DATA u32 gLinkDebugSeed = 0; +COMMON_DATA struct LinkPlayerBlock gLocalLinkPlayerBlock = {0}; +COMMON_DATA bool8 gLinkErrorOccurred = 0; +COMMON_DATA u32 gLinkDebugFlags = 0; +COMMON_DATA u32 gLinkFiller1 = 0; +COMMON_DATA bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS] = {0}; +COMMON_DATA u8 gBlockReceivedStatus[MAX_LINK_PLAYERS] = {0}; +COMMON_DATA u32 gLinkFiller2 = 0; +COMMON_DATA u16 gLinkHeldKeys = 0; +COMMON_DATA u16 ALIGNED(4) gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH] = {0}; +COMMON_DATA u32 gLinkStatus = 0; +COMMON_DATA bool8 gLinkDummy1 = 0; // Never read +COMMON_DATA bool8 gLinkDummy2 = 0; // Never read +COMMON_DATA bool8 gReadyToExitStandby[MAX_LINK_PLAYERS] = {0}; +COMMON_DATA bool8 gReadyToCloseLink[MAX_LINK_PLAYERS] = {0}; +COMMON_DATA u16 gReadyCloseLinkType = 0; // Never read +COMMON_DATA u8 gSuppressLinkErrorMessage = 0; +COMMON_DATA bool8 gWirelessCommType = 0; +COMMON_DATA bool8 gSavedLinkPlayerCount = 0; +COMMON_DATA u16 gSendCmd[CMD_LENGTH] = {0}; +COMMON_DATA u8 gSavedMultiplayerId = 0; +COMMON_DATA bool8 gReceivedRemoteLinkPlayers = 0; +COMMON_DATA struct LinkTestBGInfo gLinkTestBGInfo = {0}; +COMMON_DATA void (*gLinkCallback)(void) = NULL; +COMMON_DATA u8 gShouldAdvanceLinkState = 0; +COMMON_DATA u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS] = {0}; +COMMON_DATA u8 gBlockRequestType = 0; +COMMON_DATA u32 gLinkFiller3 = 0; +COMMON_DATA u32 gLinkFiller4 = 0; +COMMON_DATA u32 gLinkFiller5 = 0; +COMMON_DATA u8 gLastSendQueueCount = 0; +COMMON_DATA struct Link gLink = {0}; +COMMON_DATA u8 gLastRecvQueueCount = 0; +COMMON_DATA u16 gLinkSavedIme = 0; static EWRAM_DATA u8 sLinkTestDebugValuesEnabled = 0; static EWRAM_DATA u8 sDummyFlag = FALSE; diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index b34c7184cf..4c4323c1ed 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -77,8 +77,8 @@ struct RfuDebug u8 unused4[88]; }; -u32 gRfuAPIBuffer[RFU_API_BUFF_SIZE_RAM / 4]; -struct RfuManager gRfu; +COMMON_DATA u32 gRfuAPIBuffer[RFU_API_BUFF_SIZE_RAM / 4] = {0}; +COMMON_DATA struct RfuManager gRfu = {0}; static u8 sHeldKeyCount; static u8 sResendBlock8[CMD_LENGTH * 2]; diff --git a/src/list_menu.c b/src/list_menu.c index e24442ca02..8201caa34d 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -99,7 +99,7 @@ static EWRAM_DATA struct { EWRAM_DATA struct ScrollArrowsTemplate gTempScrollArrowTemplate = {0}; // IWRAM common -struct { +COMMON_DATA struct { u8 cursorPal:4; u8 fillValue:4; u8 cursorShadowPal:4; @@ -107,9 +107,9 @@ struct { u8 field_2_2:6; // unused u8 fontId:7; bool8 enabled:1; -} gListMenuOverride; +} gListMenuOverride = {0}; -struct ListMenuTemplate gMultiuseListMenuTemplate; +COMMON_DATA struct ListMenuTemplate gMultiuseListMenuTemplate = {0}; // const rom data static const struct diff --git a/src/load_save.c b/src/load_save.c index 44e08b5e9c..a6284ffebd 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -37,10 +37,10 @@ EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0}; EWRAM_DATA u32 gLastEncryptionKey = 0; // IWRAM common -bool32 gFlashMemoryPresent; -struct SaveBlock1 *gSaveBlock1Ptr; -struct SaveBlock2 *gSaveBlock2Ptr; -struct PokemonStorage *gPokemonStoragePtr; +COMMON_DATA bool32 gFlashMemoryPresent = 0; +COMMON_DATA struct SaveBlock1 *gSaveBlock1Ptr = NULL; +COMMON_DATA struct SaveBlock2 *gSaveBlock2Ptr = NULL; +COMMON_DATA struct PokemonStorage *gPokemonStoragePtr = NULL; // code void CheckForFlashMemory(void) diff --git a/src/m4a.c b/src/m4a.c index 7774d09cba..9caedd34a0 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -7,18 +7,18 @@ extern const u8 gCgb3Vol[]; BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0}; -struct SoundInfo gSoundInfo; -struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES]; -struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES]; -MPlayFunc gMPlayJumpTable[36]; -struct CgbChannel gCgbChans[4]; -struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2]; -struct PokemonCrySong gPokemonCrySong; -struct MusicPlayerInfo gMPlayInfo_BGM; -struct MusicPlayerInfo gMPlayInfo_SE1; -struct MusicPlayerInfo gMPlayInfo_SE2; -struct MusicPlayerInfo gMPlayInfo_SE3; -u8 gMPlayMemAccArea[0x10]; +COMMON_DATA struct SoundInfo gSoundInfo = {0}; +COMMON_DATA struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES] = {0}; +COMMON_DATA struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES] = {0}; +COMMON_DATA struct MusicPlayerInfo gMPlayInfo_BGM = {0}; +COMMON_DATA MPlayFunc gMPlayJumpTable[36] = {0}; +COMMON_DATA struct CgbChannel gCgbChans[4] = {0}; +COMMON_DATA struct MusicPlayerInfo gMPlayInfo_SE1 = {0}; +COMMON_DATA struct MusicPlayerInfo gMPlayInfo_SE2 = {0}; +COMMON_DATA struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2] = {0}; +COMMON_DATA struct PokemonCrySong gPokemonCrySong = {0}; +COMMON_DATA u8 gMPlayMemAccArea[0x10] = {0}; +COMMON_DATA struct MusicPlayerInfo gMPlayInfo_SE3 = {0}; u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) { diff --git a/src/main.c b/src/main.c index 5f12a2996e..5750ad2171 100644 --- a/src/main.c +++ b/src/main.c @@ -59,15 +59,15 @@ const IntrFunc gIntrTableTemplate[] = static u16 sUnusedVar; // Never read -u16 gKeyRepeatStartDelay; -bool8 gLinkTransferringData; -struct Main gMain; -u16 gKeyRepeatContinueDelay; -bool8 gSoftResetDisabled; -IntrFunc gIntrTable[INTR_COUNT]; -u8 gLinkVSyncDisabled; -u32 IntrMain_Buffer[0x200]; -s8 gPcmDmaCounter; +COMMON_DATA u16 gKeyRepeatStartDelay = 0; +COMMON_DATA bool8 gLinkTransferringData = 0; +COMMON_DATA struct Main gMain = {0}; +COMMON_DATA u16 gKeyRepeatContinueDelay = 0; +COMMON_DATA bool8 gSoftResetDisabled = 0; +COMMON_DATA IntrFunc gIntrTable[INTR_COUNT] = {0}; +COMMON_DATA u8 gLinkVSyncDisabled = 0; +COMMON_DATA u32 IntrMain_Buffer[0x200] = {0}; +COMMON_DATA s8 gPcmDmaCounter = 0; static EWRAM_DATA u16 sTrainerId = 0; diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 287419f901..dda6e6bffa 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -31,7 +31,7 @@ static void Storyteller_ResetFlag(void); static u8 sSelectedStory; -struct BardSong gBardSong; +COMMON_DATA struct BardSong gBardSong = {0}; static EWRAM_DATA u16 sUnknownBardRelated = 0; static EWRAM_DATA struct MauvilleManStoryteller * sStorytellerPtr = NULL; diff --git a/src/overworld.c b/src/overworld.c index e1cb0a1cad..e2c47530be 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -180,14 +180,14 @@ static u16 (*sPlayerKeyInterceptCallback)(u32); static bool8 sReceivingFromLink; static u8 sRfuKeepAliveTimer; -u16 *gOverworldTilemapBuffer_Bg2; -u16 *gOverworldTilemapBuffer_Bg1; -u16 *gOverworldTilemapBuffer_Bg3; -u16 gHeldKeyCodeToSend; -void (*gFieldCallback)(void); -bool8 (*gFieldCallback2)(void); -u8 gLocalLinkPlayerId; // This is our player id in a multiplayer mode. -u8 gFieldLinkPlayerCount; +COMMON_DATA u16 *gOverworldTilemapBuffer_Bg2 = NULL; +COMMON_DATA u16 *gOverworldTilemapBuffer_Bg1 = NULL; +COMMON_DATA u16 *gOverworldTilemapBuffer_Bg3 = NULL; +COMMON_DATA u16 gHeldKeyCodeToSend = 0; +COMMON_DATA void (*gFieldCallback)(void) = NULL; +COMMON_DATA bool8 (*gFieldCallback2)(void) = NULL; +COMMON_DATA u8 gLocalLinkPlayerId = 0; // This is our player id in a multiplayer mode. +COMMON_DATA u8 gFieldLinkPlayerCount = 0; EWRAM_DATA static u8 sObjectEventLoadFlag = 0; EWRAM_DATA struct WarpData gLastUsedWarp = {0}; diff --git a/src/party_menu.c b/src/party_menu.c index adf833fe89..56625d09a3 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -231,7 +231,7 @@ static EWRAM_DATA u16 sUnused = 0; EWRAM_DATA u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2] = {0}; // bits 0-3 are the current pos of Slot 1, 4-7 are Slot 2, and so on // IWRAM common -void (*gItemUseCB)(u8, TaskFunc); +COMMON_DATA void (*gItemUseCB)(u8, TaskFunc) = NULL; static void ResetPartyMenu(void); static void CB2_InitPartyMenu(void); diff --git a/src/pokedex.c b/src/pokedex.c index 09a25b872b..c0b20bf9d6 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -121,8 +121,8 @@ static EWRAM_DATA u8 sPokeBallRotation = 0; static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL; // This is written to, but never read. -u8 gUnusedPokedexU8; -void (*gPokedexVBlankCB)(void); +COMMON_DATA u8 gUnusedPokedexU8 = 0; +COMMON_DATA void (*gPokedexVBlankCB)(void) = NULL; struct SearchOptionText { diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 437ef8cf5a..2fb3d55a24 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -60,7 +60,7 @@ static void SpriteCB_CryMeterNeedle(struct Sprite *); static void SetCryMeterNeedleTarget(s8); // IWRAM common -u8 gDexCryScreenState; +COMMON_DATA u8 gDexCryScreenState = 0; // EWRAM vars static EWRAM_DATA struct PokedexCryScreen *sDexCryScreen = NULL; diff --git a/src/random.c b/src/random.c index de923fba63..aa2c67750d 100644 --- a/src/random.c +++ b/src/random.c @@ -5,8 +5,8 @@ EWRAM_DATA static u8 sUnknown = 0; EWRAM_DATA static u32 sRandCount = 0; // IWRAM common -u32 gRngValue; -u32 gRng2Value; +COMMON_DATA u32 gRngValue = 0; +COMMON_DATA u32 gRng2Value = 0; u16 Random(void) { diff --git a/src/rtc.c b/src/rtc.c index b79f62a3c4..08d5ec4c98 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -10,7 +10,7 @@ static u8 sProbeResult; static u16 sSavedIme; // iwram common -struct Time gLocalTime; +COMMON_DATA struct Time gLocalTime = {0}; // const rom diff --git a/src/save.c b/src/save.c index 765fb045c3..31230bacb5 100644 --- a/src/save.c +++ b/src/save.c @@ -79,19 +79,19 @@ STATIC_ASSERT(sizeof(struct SaveBlock2) <= SECTOR_DATA_SIZE, SaveBlock2FreeSpace STATIC_ASSERT(sizeof(struct SaveBlock1) <= SECTOR_DATA_SIZE * (SECTOR_ID_SAVEBLOCK1_END - SECTOR_ID_SAVEBLOCK1_START + 1), SaveBlock1FreeSpace); STATIC_ASSERT(sizeof(struct PokemonStorage) <= SECTOR_DATA_SIZE * (SECTOR_ID_PKMN_STORAGE_END - SECTOR_ID_PKMN_STORAGE_START + 1), PokemonStorageFreeSpace); -u16 gLastWrittenSector; -u32 gLastSaveCounter; -u16 gLastKnownGoodSector; -u32 gDamagedSaveSectors; -u32 gSaveCounter; -struct SaveSector *gReadWriteSector; // Pointer to a buffer for reading/writing a sector -u16 gIncrementalSectorId; -u16 gSaveUnusedVar; -u16 gSaveFileStatus; -void (*gGameContinueCallback)(void); -struct SaveSectorLocation gRamSaveSectorLocations[NUM_SECTORS_PER_SLOT]; -u16 gSaveUnusedVar2; -u16 gSaveAttemptStatus; +COMMON_DATA u16 gLastWrittenSector = 0; +COMMON_DATA u32 gLastSaveCounter = 0; +COMMON_DATA u16 gLastKnownGoodSector = 0; +COMMON_DATA u32 gDamagedSaveSectors = 0; +COMMON_DATA u32 gSaveCounter = 0; +COMMON_DATA struct SaveSector *gReadWriteSector = NULL; // Pointer to a buffer for reading/writing a sector +COMMON_DATA u16 gIncrementalSectorId = 0; +COMMON_DATA u16 gSaveUnusedVar = 0; +COMMON_DATA u16 gSaveFileStatus = 0; +COMMON_DATA void (*gGameContinueCallback)(void) = NULL; +COMMON_DATA struct SaveSectorLocation gRamSaveSectorLocations[NUM_SECTORS_PER_SLOT] = {0}; +COMMON_DATA u16 gSaveUnusedVar2 = 0; +COMMON_DATA u16 gSaveAttemptStatus = 0; EWRAM_DATA struct SaveSector gSaveDataBuffer = {0}; // Buffer used for reading/writing sectors EWRAM_DATA static u8 sUnusedVar = 0; diff --git a/src/sound.c b/src/sound.c index 8685383f78..c41d6f2c4e 100644 --- a/src/sound.c +++ b/src/sound.c @@ -23,7 +23,7 @@ static u8 sMapMusicState; static u8 sMapMusicFadeInSpeed; static u16 sFanfareCounter; -bool8 gDisableMusic; +COMMON_DATA bool8 gDisableMusic = 0; extern struct ToneData gCryTable[]; extern struct ToneData gCryTable_Reverse[]; diff --git a/src/sprite.c b/src/sprite.c index 80fba81fe3..0736269be0 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -276,8 +276,8 @@ static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; static u16 sSpritePaletteTags[16]; // iwram common -u32 gOamMatrixAllocBitmap; -u8 gReservedSpritePaletteCount; +COMMON_DATA u32 gOamMatrixAllocBitmap = 0; +COMMON_DATA u8 gReservedSpritePaletteCount = 0; EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0}; EWRAM_DATA static u16 sSpritePriorities[MAX_SPRITES] = {0}; diff --git a/src/start_menu.c b/src/start_menu.c index 63914cbb72..0910fad84d 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -75,7 +75,7 @@ enum }; // IWRAM common -bool8 (*gMenuCallback)(void); +COMMON_DATA bool8 (*gMenuCallback)(void) = NULL; // EWRAM EWRAM_DATA static u8 sSafariBallsWindowId = 0; diff --git a/src/task.c b/src/task.c index 68fb679b3e..b188cbbcba 100644 --- a/src/task.c +++ b/src/task.c @@ -1,7 +1,7 @@ #include "global.h" #include "task.h" -struct Task gTasks[NUM_TASKS]; +COMMON_DATA struct Task gTasks[NUM_TASKS] = {0}; static void InsertTask(u8 newTaskId); static u8 FindFirstActiveTask(void); diff --git a/src/text.c b/src/text.c index bc917c7ced..1c8a64d5c7 100644 --- a/src/text.c +++ b/src/text.c @@ -43,10 +43,10 @@ static u16 sLastTextBgColor; static u16 sLastTextFgColor; static u16 sLastTextShadowColor; -const struct FontInfo *gFonts; -bool8 gDisableTextPrinters; -struct TextGlyph gCurGlyph; -TextFlags gTextFlags; +COMMON_DATA const struct FontInfo *gFonts = NULL; +COMMON_DATA bool8 gDisableTextPrinters = 0; +COMMON_DATA struct TextGlyph gCurGlyph = {0}; +COMMON_DATA TextFlags gTextFlags = {0}; static const u8 sFontHalfRowOffsets[] = { diff --git a/src/trainer_see.c b/src/trainer_see.c index 51cc64f4a0..212cbbdec3 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -49,11 +49,11 @@ static bool8 WaitRevealBuriedTrainer(u8 taskId, struct Task *task, struct Object static void SpriteCB_TrainerIcons(struct Sprite *sprite); // IWRAM common -u16 gWhichTrainerToFaceAfterBattle; -u8 gPostBattleMovementScript[4]; -struct ApproachingTrainer gApproachingTrainers[2]; -u8 gNoOfApproachingTrainers; -bool8 gTrainerApproachedPlayer; +COMMON_DATA u16 gWhichTrainerToFaceAfterBattle = 0; +COMMON_DATA u8 gPostBattleMovementScript[4] = {0}; +COMMON_DATA struct ApproachingTrainer gApproachingTrainers[2] = {0}; +COMMON_DATA u8 gNoOfApproachingTrainers = 0; +COMMON_DATA bool8 gTrainerApproachedPlayer = 0; // EWRAM EWRAM_DATA u8 gApproachingTrainerId = 0; diff --git a/src/tv.c b/src/tv.c index 0152dffa3e..9ab9fc8969 100644 --- a/src/tv.c +++ b/src/tv.c @@ -63,14 +63,14 @@ enum { ROULETTE, }; -s8 sCurTVShowSlot; -u16 sTV_SecretBaseVisitMovesTemp[8]; -u8 sTV_DecorationsBuffer[DECOR_MAX_SECRET_BASE]; -struct { +COMMON_DATA s8 sCurTVShowSlot = 0; +COMMON_DATA u16 sTV_SecretBaseVisitMovesTemp[8] = {0}; +COMMON_DATA u8 sTV_DecorationsBuffer[DECOR_MAX_SECRET_BASE] = {0}; +COMMON_DATA struct { u8 level; u16 species; u16 move; -} sTV_SecretBaseVisitMonsTemp[10]; +} sTV_SecretBaseVisitMonsTemp[10] = {0}; static u8 sTVShowMixingNumPlayers; static u8 sTVShowNewsMixingNumPlayers; diff --git a/src/window.c b/src/window.c index 6f7af457d3..ab61610b82 100644 --- a/src/window.c +++ b/src/window.c @@ -5,8 +5,8 @@ #include "blit.h" // This global is set to 0 and never changed. -u8 gTransparentTileNumber; -void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS]; +COMMON_DATA u8 gTransparentTileNumber = 0; +COMMON_DATA void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS] = {0}; extern u32 gWindowTileAutoAllocEnabled; EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0}; diff --git a/tools/ramscrgen/elf.cpp b/tools/ramscrgen/elf.cpp index 7e78704b8c..077fcc82a4 100644 --- a/tools/ramscrgen/elf.cpp +++ b/tools/ramscrgen/elf.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include "ramscrgen.h" @@ -22,6 +21,7 @@ static int s_shstrtabIndex; static std::uint32_t s_symtabOffset; static std::uint32_t s_strtabOffset; +static std::uint32_t s_pseudoCommonSectionIndex; static std::uint32_t s_symbolCount; static std::uint32_t s_elfFileOffset; @@ -101,18 +101,6 @@ static void VerifyElfIdent() FATAL_ERROR("error: \"%s\" not little-endian ELF\n", s_elfPath.c_str()); } -static void VerifyAr() -{ - char expectedMagic[8] = {'!', '<', 'a', 'r', 'c', 'h', '>', '\n'}; - char magic[8]; - - if (std::fread(magic, 8, 1, s_file) != 1) - FATAL_ERROR("error: failed to read AR magic from \"%s\"\n", s_archiveFilePath.c_str()); - - if (std::memcmp(magic, expectedMagic, 8) != 0) - FATAL_ERROR("error: AR magic did not match in \"%s\"\n", s_archiveFilePath.c_str()); -} - static void ReadElfHeader() { Seek(0x20); @@ -123,40 +111,6 @@ static void ReadElfHeader() s_shstrtabIndex = ReadInt16(); } -static void FindArObj() -{ - char file_ident[17] = {0}; - char filesize_s[11] = {0}; - char expectedEndMagic[2] = { 0x60, 0x0a }; - char end_magic[2]; - std::size_t filesize; - - Seek(8); - while (!std::feof(s_file)) { - if (std::fread(file_ident, 16, 1, s_file) != 1) - FATAL_ERROR("error: failed to read file ident in \"%s\"\n", s_archiveFilePath.c_str()); - Skip(32); - if (std::fread(filesize_s, 10, 1, s_file) != 1) - FATAL_ERROR("error: failed to read filesize in \"%s\"\n", s_archiveFilePath.c_str()); - if (std::fread(end_magic, 2, 1, s_file) != 1) - FATAL_ERROR("error: failed to read end sentinel in \"%s\"\n", s_archiveFilePath.c_str()); - if (std::memcmp(end_magic, expectedEndMagic, 2) != 0) - FATAL_ERROR("error: corrupted archive header in \"%s\" at \"%s\"\n", s_archiveFilePath.c_str(), file_ident); - - char * ptr = std::strchr(file_ident, '/'); - if (ptr != nullptr) - *ptr = 0; - filesize = std::strtoul(filesize_s, nullptr, 10); - if (std::strncmp(s_archiveObjectPath.c_str(), file_ident, 16) == 0) { - s_elfFileOffset = std::ftell(s_file); - return; - } - Skip(filesize); - } - - FATAL_ERROR("error: could not find object \"%s\" in archive \"%s\"\n", s_archiveObjectPath.c_str(), s_archiveFilePath.c_str()); -} - static std::string GetSectionName(std::uint32_t shstrtabOffset, int index) { Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * index); @@ -169,6 +123,7 @@ static void FindTableOffsets() { s_symtabOffset = 0; s_strtabOffset = 0; + s_pseudoCommonSectionIndex = 0; Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * s_shstrtabIndex + 0x10); std::uint32_t shstrtabOffset = ReadInt32(); @@ -192,6 +147,11 @@ static void FindTableOffsets() FATAL_ERROR("error: mutiple .strtab sections found in \"%s\"\n", s_elfPath.c_str()); Seek(s_sectionHeaderOffset + s_sectionHeaderEntrySize * i + 0x10); s_strtabOffset = ReadInt32(); + } else if (name == "common_data") { + if (s_pseudoCommonSectionIndex) { + FATAL_ERROR("error: mutiple common_data sections found in \"%s\"\n", s_elfPath.c_str()); + } + s_pseudoCommonSectionIndex = i; } } @@ -202,65 +162,50 @@ static void FindTableOffsets() FATAL_ERROR("error: couldn't find .strtab section in \"%s\"\n", s_elfPath.c_str()); } -static std::map GetCommonSymbols_Shared() +static std::vector> GetCommonSymbols_Shared() { VerifyElfIdent(); ReadElfHeader(); FindTableOffsets(); - std::map commonSymbols; + std::vector> commonSymbols; - std::vector commonSymbolVec; - - Seek(s_symtabOffset); - - for (std::uint32_t i = 0; i < s_symbolCount; i++) - { - Symbol sym; - sym.nameOffset = ReadInt32(); - Skip(4); - sym.size = ReadInt32(); - Skip(2); - std::uint16_t sectionIndex = ReadInt16(); - if (sectionIndex == SHN_COMMON) - commonSymbolVec.push_back(sym); - } - - for (const Symbol& sym : commonSymbolVec) - { - Seek(s_strtabOffset + sym.nameOffset); - std::string name = ReadString(); - commonSymbols[name] = sym.size; + if (s_pseudoCommonSectionIndex) { + std::vector commonSymbolVec; + + Seek(s_symtabOffset); + + for (std::uint32_t i = 0; i < s_symbolCount; i++) + { + Symbol sym; + sym.nameOffset = ReadInt32(); + Skip(4); + sym.size = ReadInt32(); + Skip(2); + std::uint16_t sectionIndex = ReadInt16(); + if (sectionIndex == s_pseudoCommonSectionIndex) + commonSymbolVec.push_back(sym); + } + + for (const Symbol& sym : commonSymbolVec) + { + Seek(s_strtabOffset + sym.nameOffset); + std::string name = ReadString(); + if (name == "$d" || name == "") { + continue; + } + commonSymbols.emplace_back(name, sym.size); + } } return commonSymbols; } -std::map GetCommonSymbolsFromLib(std::string sourcePath, std::string libpath) -{ - std::size_t colonPos = libpath.find(':'); - if (colonPos == std::string::npos) - FATAL_ERROR("error: missing colon separator in libfile \"%s\"\n", s_elfPath.c_str()); - - s_archiveObjectPath = libpath.substr(colonPos + 1); - s_archiveFilePath = sourcePath + "/" + libpath.substr(1, colonPos - 1); - s_elfPath = sourcePath + "/" + libpath.substr(1); - - s_file = std::fopen(s_archiveFilePath.c_str(), "rb"); - - if (s_file == NULL) - FATAL_ERROR("error: failed to open \"%s\" for reading\n", s_archiveFilePath.c_str()); - - VerifyAr(); - FindArObj(); - return GetCommonSymbols_Shared(); -} - -std::map GetCommonSymbols(std::string sourcePath, std::string path) +std::vector> GetCommonSymbols(std::string sourcePath, std::string path) { s_elfFileOffset = 0; if (path[0] == '*') - return GetCommonSymbolsFromLib(sourcePath, path); + FATAL_ERROR("error: library common syms are unsupported (filename: \"%s\")\n", path.c_str()); s_elfPath = sourcePath + "/" + path; s_file = std::fopen(s_elfPath.c_str(), "rb"); diff --git a/tools/ramscrgen/elf.h b/tools/ramscrgen/elf.h index 3704860c0e..bf79a954e0 100644 --- a/tools/ramscrgen/elf.h +++ b/tools/ramscrgen/elf.h @@ -22,9 +22,9 @@ #define ELF_H #include -#include +#include #include -std::map GetCommonSymbols(std::string sourcePath, std::string path); +std::vector> GetCommonSymbols(std::string sourcePath, std::string path); #endif // ELF_H diff --git a/tools/ramscrgen/main.cpp b/tools/ramscrgen/main.cpp index 5e5894f470..e99cf9fa30 100644 --- a/tools/ramscrgen/main.cpp +++ b/tools/ramscrgen/main.cpp @@ -28,54 +28,19 @@ void HandleCommonInclude(std::string filename, std::string sourcePath, std::string symOrderPath, std::string lang) { auto commonSymbols = GetCommonSymbols(sourcePath, filename); - std::size_t dotIndex; - if (filename[0] == '*') { - dotIndex = filename.find_last_of(':'); - filename = filename.substr(dotIndex + 1); - } - - dotIndex = filename.find_last_of('.'); - - if (dotIndex == std::string::npos) - FATAL_ERROR("error: \"%s\" doesn't have a file extension\n", filename.c_str()); - - std::string symOrderFilename = filename.substr(0, dotIndex + 1) + "txt"; - - SymFile symFile(symOrderPath + "/" + symOrderFilename); - - while (!symFile.IsAtEnd()) + for (const auto& commonSym : commonSymbols) { - symFile.HandleLangConditional(lang); + unsigned long size = commonSym.second; - std::string label = symFile.GetLabel(false); - - if (label.length() == 0) - { - unsigned long length; - if (symFile.ReadInteger(length)) - { - if (length & 3) - symFile.RaiseWarning("gap length %d is not multiple of 4", length); - printf(". += 0x%lX;\n", length); - } - } - else - { - if (commonSymbols.count(label) == 0) - symFile.RaiseError("no common symbol named \"%s\"", label.c_str()); - unsigned long size = commonSymbols[label]; - int alignment = 4; - if (size > 4) - alignment = 8; - if (size > 8) - alignment = 16; - printf(". = ALIGN(%d);\n", alignment); - printf("%s = .;\n", label.c_str()); - printf(". += 0x%lX;\n", size); - } - - symFile.ExpectEmptyRestOfLine(); + int alignment = 4; + if (size > 4) + alignment = 8; + if (size > 8) + alignment = 16; + printf(". = ALIGN(%d);\n", alignment); + printf("%s = .;\n", commonSym.first.c_str()); + printf(". += 0x%lX;\n", size); } } From b9ac5d1d8a10567efaeb725f54dbb57b757c1e1b Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Tue, 15 Oct 2024 21:58:58 +0200 Subject: [PATCH 307/544] Add newline to move relearner string (#5523) --- src/strings.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings.c b/src/strings.c index 254378d379..4c342d0934 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1750,7 +1750,7 @@ const u8 gText_ElectricFan[] = _("Electric fan"); const u8 gText_LawnMower[] = _("Lawn mower"); const u8 gText_ChangeForm[] = _("Change form"); const u8 gText_ChangeAbility[] = _("Change Ability"); -const u8 gText_TeachWhichMoveToPkmn[] = _("Teach which move to {STR_VAR_1}?"); +const u8 gText_TeachWhichMoveToPkmn[] = _("Teach which move to\n{STR_VAR_1}?"); const u8 gText_MoveRelearnerTeachMoveConfirm[] = _("Teach {STR_VAR_2}?"); const u8 gText_MoveRelearnerPkmnLearnedMove[] = _("{STR_VAR_1} learned\n{STR_VAR_2}!"); const u8 gText_MoveRelearnerPkmnTryingToLearnMove[] = _("{STR_VAR_1} is trying to learn\n{STR_VAR_2}.\pBut {STR_VAR_1} can't learn more\nthan four moves.\pDelete an older move to make\nroom for {STR_VAR_2}?"); From ed65c4a2f7639c12dd46df926e0e0a57f72ef862 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 15 Oct 2024 23:04:35 +0200 Subject: [PATCH 308/544] Fixes Partner targeting and Acupressure/Ally Switch interaction (#5446) * Fixes Partner targeting and Acupressure/Ally Switch interaction * More tests * Update test/battle/move.c --- src/battle_script_commands.c | 1 + src/battle_util.c | 36 ++++---------- test/battle/move.c | 68 +++++++++++++++++++++++++++ test/battle/move_effect/acupressure.c | 21 --------- 4 files changed, 79 insertions(+), 47 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 618164dd18..63b539dcc2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1210,6 +1210,7 @@ static void Cmd_attackcanceler(void) gCurrentActionFuncId = B_ACTION_FINISHED; return; } + if (!IsBattlerAlive(gBattlerAttacker) && gMovesInfo[gCurrentMove].effect != EFFECT_EXPLOSION && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) { gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; diff --git a/src/battle_util.c b/src/battle_util.c index e5d8c5f041..33063cd542 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -279,18 +279,9 @@ void HandleAction_UseMove(void) gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); } - if (!IsBattlerAlive(gBattlerTarget)) + if (!IsBattlerAlive(gBattlerTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { - if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - { - gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); - } - else - { - gBattlerTarget = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(gBattlerAttacker))); - if (!IsBattlerAlive(gBattlerTarget)) - gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); - } + gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); } } else @@ -307,8 +298,7 @@ void HandleAction_UseMove(void) gBattlerTarget = battler; } } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && moveTarget & MOVE_TARGET_RANDOM) + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) { @@ -352,18 +342,11 @@ void HandleAction_UseMove(void) else { gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); - if (!IsBattlerAlive(gBattlerTarget) && moveTarget != MOVE_TARGET_OPPONENTS_FIELD) + if (!IsBattlerAlive(gBattlerTarget) + && moveTarget != MOVE_TARGET_OPPONENTS_FIELD + && (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))) { - if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - { - gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); - } - else - { - gBattlerTarget = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(gBattlerAttacker))); - if (!IsBattlerAlive(gBattlerTarget)) - gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); - } + gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); } } @@ -387,8 +370,9 @@ void HandleAction_UseMove(void) gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; } } - // Edge case: moves targeting the ally fail after a successful Ally Switch. - else if (moveTarget == MOVE_TARGET_ALLY && gProtectStructs[BATTLE_PARTNER(gBattlerAttacker)].usedAllySwitch) + + if ((GetBattlerSide(gBattlerAttacker) == GetBattlerSide(gBattlerTarget)) + && (!IsBattlerAlive(gBattlerTarget) || gProtectStructs[BATTLE_PARTNER(gBattlerAttacker)].usedAllySwitch)) { gBattlescriptCurrInstr = BattleScript_FailedFromAtkCanceler; } diff --git a/test/battle/move.c b/test/battle/move.c index 655895da77..ba928e433b 100644 --- a/test/battle/move.c +++ b/test/battle/move.c @@ -222,3 +222,71 @@ SINGLE_BATTLE_TEST("Critical hits ignore negative stat stages", s16 damage) EXPECT_EQ(results[0].damage, results[i].damage); } } + +DOUBLE_BATTLE_TEST("Moves fail if they target the partner but they faint before the move could have been used") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerRight); MOVE(playerLeft, MOVE_TACKLE, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + } +} + +DOUBLE_BATTLE_TEST("Moves do not fail if an alive partner is the target") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + } +} + +DOUBLE_BATTLE_TEST("Moves fail if they target into a pokemon that was fainted by the previous move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_HYPER_VOICE].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { + MOVE(playerLeft, MOVE_HYPER_VOICE); + MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); + SEND_OUT(opponentLeft, 2); + SEND_OUT(opponentRight, 3); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + } +} + +DOUBLE_BATTLE_TEST("Moves that target the field are not going to fail if one mon fainted by the previous move") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerRight); MOVE(playerLeft, MOVE_SURF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, playerLeft); + } +} diff --git a/test/battle/move_effect/acupressure.c b/test/battle/move_effect/acupressure.c index e7254485fc..d59a3faee3 100644 --- a/test/battle/move_effect/acupressure.c +++ b/test/battle/move_effect/acupressure.c @@ -8,29 +8,8 @@ TO_DO_BATTLE_TEST("Acupressure fails on the ally if all of its stats are maximiz TO_DO_BATTLE_TEST("Acupressure works on the user if it's behind a Substitute (Gen5+)"); TO_DO_BATTLE_TEST("Acupressure fails on its ally if it's behind a Substitute"); -DOUBLE_BATTLE_TEST("Acupressure works on the ally if the user targeted itself but switched positions via Ally Switch") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_KADABRA); - OPPONENT(SPECIES_ABRA); - } WHEN { - TURN { MOVE(playerLeft, MOVE_ALLY_SWITCH); MOVE(playerRight, MOVE_ACUPRESSURE, target:playerRight); } - } SCENE { - MESSAGE("Wobbuffet used Ally Switch!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft); - MESSAGE("Wobbuffet and Wynaut switched places!"); - - ANIMATION(ANIM_TYPE_MOVE, MOVE_ACUPRESSURE); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - NOT MESSAGE("But it failed!"); - } -} - DOUBLE_BATTLE_TEST("Acupressure fails on the user if it targeted its ally but switched positions via Ally Switch") { - KNOWN_FAILING; // Tested in Gen 5, Acupressure fails here GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); From 1cdc91ce53ddc2389d51ac7ba5df4a672655bbd4 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Wed, 16 Oct 2024 04:44:01 -0400 Subject: [PATCH 309/544] Add Costar Tests, Download Test for Doubles (#5526) * add download double battle test * fix costar and add test --------- Co-authored-by: ghoulslash --- data/battle_scripts_1.s | 3 +++ src/battle_util.c | 4 ++-- test/battle/ability/costar.c | 24 +++++++++++++++++++++++- test/battle/ability/download.c | 25 +++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 4e29e3be03..356723daab 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8023,9 +8023,12 @@ BattleScript_SupremeOverlordActivates:: BattleScript_CostarActivates:: pause B_WAIT_TIME_SHORT + savetarget + copybyte gBattlerTarget, sBATTLER call BattleScript_AbilityPopUp printstring STRINGID_PKMNCOPIEDSTATCHANGES waitmessage B_WAIT_TIME_LONG + restoretarget end3 BattleScript_ZeroToHeroActivates:: diff --git a/src/battle_util.c b/src/battle_util.c index 38e4b1e61d..a8e8ebcd39 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4980,10 +4980,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && CountBattlerStatIncreases(BATTLE_PARTNER(battler), FALSE)) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattlerAttacker = battler; + gBattlerAttacker = gBattlerAbility = battler; for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[battler].statStages[i] = gBattleMons[BATTLE_PARTNER(battler)].statStages[i]; - gBattlerTarget = BATTLE_PARTNER(battler); + gBattleScripting.battler = BATTLE_PARTNER(battler); BattleScriptPushCursorAndCallback(BattleScript_CostarActivates); effect++; } diff --git a/test/battle/ability/costar.c b/test/battle/ability/costar.c index 7674ab0966..c42871bb45 100644 --- a/test/battle/ability/costar.c +++ b/test/battle/ability/costar.c @@ -1,7 +1,29 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Costar copies an ally's stat stages upon entering battle"); +DOUBLE_BATTLE_TEST("Costar copies an ally's stat stages upon entering battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_FLAMIGO) { Ability(ABILITY_COSTAR); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SWORDS_DANCE); } + TURN { SWITCH(opponentRight, 2); MOVE(playerLeft, MOVE_CELEBRATE); } + } SCENE { + // Turn 1 - buff up + MESSAGE("Foe Wobbuffet used Swords Dance!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + // Turn 2 - Switch into Flamigo + MESSAGE("2 sent out Flamigo!"); + ABILITY_POPUP(opponentRight, ABILITY_COSTAR); + MESSAGE("Foe Flamigo copied Foe Wobbuffet's stat changes!"); + } THEN { + EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } +} // Copy from Ruin ability tests TO_DO_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Player"); diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c index 9fecda400d..e96b0ddeb9 100644 --- a/test/battle/ability/download.c +++ b/test/battle/ability/download.c @@ -94,3 +94,28 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet EXPECT_MUL_EQ(results[0].damageSpecial, Q_4_12(1.5), results[1].damageSpecial); } } + +DOUBLE_BATTLE_TEST("Download raises Sp.Attack if enemies have lower total Sp. Def than Def", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } + PARAMETRIZE { ability = ABILITY_DOWNLOAD; } + GIVEN { + PLAYER(SPECIES_PORYGON) { Ability(ability); SpAttack(100); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { Defense(200); SpDefense(100); } + OPPONENT(SPECIES_WOBBUFFET) { Defense(100); SpDefense(150); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TRI_ATTACK, target: opponentLeft ); } + } SCENE { + if (ability == ABILITY_DOWNLOAD) + { + ABILITY_POPUP(playerLeft, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Porygon's Download raised its Sp. Atk!"); + } + HP_BAR(opponentLeft, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} From d044f53c722fdddcbef836a659edbc922eb85dd9 Mon Sep 17 00:00:00 2001 From: AlexOn1ine Date: Wed, 16 Oct 2024 10:51:41 +0200 Subject: [PATCH 310/544] Adds tests and Costar fix from PR #5526 --- data/battle_scripts_1.s | 3 +++ src/battle_util.c | 6 +++--- test/battle/ability/costar.c | 24 +++++++++++++++++++++++- test/battle/ability/download.c | 25 +++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index fa56c3ff7a..0a694d846f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8016,9 +8016,12 @@ BattleScript_SupremeOverlordActivates:: BattleScript_CostarActivates:: pause B_WAIT_TIME_SHORT + savetarget + copybyte gBattlerTarget, sBATTLER call BattleScript_AbilityPopUp printstring STRINGID_PKMNCOPIEDSTATCHANGES waitmessage B_WAIT_TIME_LONG + restoretarget end3 BattleScript_ZeroToHeroActivates:: diff --git a/src/battle_util.c b/src/battle_util.c index 33063cd542..2f00f48cf9 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4873,10 +4873,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && CountBattlerStatIncreases(BATTLE_PARTNER(battler), FALSE)) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattlerAttacker = battler; + gBattlerAttacker = gBattlerAbility = battler; for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[battler].statStages[i] = gBattleMons[BATTLE_PARTNER(battler)].statStages[i]; - gBattlerTarget = BATTLE_PARTNER(battler); + gBattleScripting.battler = BATTLE_PARTNER(battler); BattleScriptPushCursorAndCallback(BattleScript_CostarActivates); effect++; } @@ -6312,7 +6312,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_PROTOSYNTHESIS: - if (!gDisableStructs[battler].weatherAbilityDone + if (!gDisableStructs[battler].weatherAbilityDone && (gBattleWeather & B_WEATHER_SUN) && WEATHER_HAS_EFFECT && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) && !(gBattleStruct->boosterEnergyActivates & (1u << battler))) diff --git a/test/battle/ability/costar.c b/test/battle/ability/costar.c index 7674ab0966..c42871bb45 100644 --- a/test/battle/ability/costar.c +++ b/test/battle/ability/costar.c @@ -1,7 +1,29 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Costar copies an ally's stat stages upon entering battle"); +DOUBLE_BATTLE_TEST("Costar copies an ally's stat stages upon entering battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_FLAMIGO) { Ability(ABILITY_COSTAR); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SWORDS_DANCE); } + TURN { SWITCH(opponentRight, 2); MOVE(playerLeft, MOVE_CELEBRATE); } + } SCENE { + // Turn 1 - buff up + MESSAGE("Foe Wobbuffet used Swords Dance!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + // Turn 2 - Switch into Flamigo + MESSAGE("2 sent out Flamigo!"); + ABILITY_POPUP(opponentRight, ABILITY_COSTAR); + MESSAGE("Foe Flamigo copied Foe Wobbuffet's stat changes!"); + } THEN { + EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); + } +} // Copy from Ruin ability tests TO_DO_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Player"); diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c index 9fecda400d..e96b0ddeb9 100644 --- a/test/battle/ability/download.c +++ b/test/battle/ability/download.c @@ -94,3 +94,28 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet EXPECT_MUL_EQ(results[0].damageSpecial, Q_4_12(1.5), results[1].damageSpecial); } } + +DOUBLE_BATTLE_TEST("Download raises Sp.Attack if enemies have lower total Sp. Def than Def", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } + PARAMETRIZE { ability = ABILITY_DOWNLOAD; } + GIVEN { + PLAYER(SPECIES_PORYGON) { Ability(ability); SpAttack(100); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { Defense(200); SpDefense(100); } + OPPONENT(SPECIES_WOBBUFFET) { Defense(100); SpDefense(150); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TRI_ATTACK, target: opponentLeft ); } + } SCENE { + if (ability == ABILITY_DOWNLOAD) + { + ABILITY_POPUP(playerLeft, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Porygon's Download raised its Sp. Atk!"); + } + HP_BAR(opponentLeft, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} From d4387d880ca67919831b3292cb7220ec93280b40 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 16 Oct 2024 12:07:34 +0200 Subject: [PATCH 311/544] Replace hardcoded flute check with consumability check (#5508) --- include/item.h | 5 ++++- include/party_menu.h | 1 - src/battle_controller_player.c | 4 ++-- src/data/items.h | 5 +++++ src/item.c | 5 +++++ src/party_menu.c | 2 +- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/include/item.h b/include/item.h index dc1efc68a5..f75142a34e 100644 --- a/include/item.h +++ b/include/item.h @@ -18,7 +18,9 @@ struct Item u8 pluralName[ITEM_NAME_PLURAL_LENGTH]; u8 holdEffect; u8 holdEffectParam; - u8 importance; + u8 importance:2; + u8 notConsumed:1; + u8 padding:5; u8 pocket; u8 type; u8 battleUsage; @@ -73,6 +75,7 @@ u32 ItemId_GetHoldEffect(u32 itemId); u32 ItemId_GetHoldEffectParam(u32 itemId); const u8 *ItemId_GetDescription(u16 itemId); u8 ItemId_GetImportance(u16 itemId); +u8 ItemId_GetConsumability(u16 itemId); u8 ItemId_GetPocket(u16 itemId); u8 ItemId_GetType(u16 itemId); ItemUseFunc ItemId_GetFieldFunc(u16 itemId); diff --git a/include/party_menu.h b/include/party_menu.h index abea29b6bb..a34f06cec6 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -102,6 +102,5 @@ void MoveDeleterForgetMove(void); void BufferMoveDeleterNicknameAndMove(void); void GetNumMovesSelectedMonHas(void); void MoveDeleterChooseMoveToForget(void); -bool32 IsItemFlute(u16 item); #endif // GUARD_PARTY_MENU_H diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 16fae14e48..87b1cd5ca4 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -384,8 +384,8 @@ static void HandleInputChooseAction(u32 battler) && !(gAbsentBattlerFlags & (1u << GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - // Return item to bag if partner had selected one (except flutes). - if (gBattleResources->bufferA[battler][1] == B_ACTION_USE_ITEM && !IsItemFlute(itemId)) + // Return item to bag if partner had selected one (if consumable). + if (gBattleResources->bufferA[battler][1] == B_ACTION_USE_ITEM && ItemId_GetConsumability(itemId)) { AddBagItem(itemId, 1); } diff --git a/src/data/items.h b/src/data/items.h index 3587bf5b85..88a46efd7d 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -2036,6 +2036,7 @@ const struct Item gItemsInfo[] = "A glass flute that\n" "awakens sleeping\n" "Pokémon."), + .notConsumed = TRUE, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_Medicine, @@ -2054,6 +2055,7 @@ const struct Item gItemsInfo[] = "A glass flute that\n" "snaps Pokémon\n" "out of confusion."), + .notConsumed = TRUE, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -2072,6 +2074,7 @@ const struct Item gItemsInfo[] = "A glass flute that\n" "snaps Pokémon\n" "out of attraction."), + .notConsumed = TRUE, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -2093,6 +2096,7 @@ const struct Item gItemsInfo[] = "A glass flute that\n" "keeps away wild\n" "Pokémon."), + .notConsumed = TRUE, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute, @@ -2109,6 +2113,7 @@ const struct Item gItemsInfo[] = .description = COMPOUND_STRING( "A glass flute that\n" "lures wild Pokémon."), + .notConsumed = TRUE, .pocket = POCKET_ITEMS, .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute, diff --git a/src/item.c b/src/item.c index 6c3742fd76..36114e1591 100644 --- a/src/item.c +++ b/src/item.c @@ -916,6 +916,11 @@ u8 ItemId_GetImportance(u16 itemId) return gItemsInfo[SanitizeItemId(itemId)].importance; } +u8 ItemId_GetConsumability(u16 itemId) +{ + return !gItemsInfo[SanitizeItemId(itemId)].notConsumed; +} + u8 ItemId_GetPocket(u16 itemId) { return gItemsInfo[SanitizeItemId(itemId)].pocket; diff --git a/src/party_menu.c b/src/party_menu.c index d737fd3df1..774456ddd5 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4578,7 +4578,7 @@ static bool8 NotUsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item) return TRUE; } -bool32 IsItemFlute(u16 item) +static bool32 IsItemFlute(u16 item) { if (item == ITEM_BLUE_FLUTE || item == ITEM_RED_FLUTE || item == ITEM_YELLOW_FLUTE) return TRUE; From d58bbe2a6f3abe628594b3bb6700bb1c1240041d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 16 Oct 2024 09:44:48 -0300 Subject: [PATCH 312/544] Removed all instances of gflib from ld_scripts --- Makefile | 2 +- ld_script.ld | 1 - ld_script_modern.ld | 1 - ld_script_test.ld | 5 ----- 4 files changed, 1 insertion(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 87de7037af..a807cbf8bf 100644 --- a/Makefile +++ b/Makefile @@ -452,7 +452,7 @@ $(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(DATA_ASM_BUILDDIR)/event_scr # NOTE: Based on C_DEP above, but without NODEP and KEEP_TEMPS handling. define TEST_DEP -$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include -I gflib $2) +$1: $2 $$(shell $(SCANINC) -I include -I $(TOOLS_DIR)/agbcc/include $2) @echo "$$(CC1) -o $$@ $$<" @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ - endef diff --git a/ld_script.ld b/ld_script.ld index ccf5f813d8..4e7a368fc3 100644 --- a/ld_script.ld +++ b/ld_script.ld @@ -27,7 +27,6 @@ SECTIONS { { INCLUDE "sym_ewram.ld" src/*.o(.sbss); - gflib/*.o(.sbss); *libc.a:impure.o(.data); *libc.a:locale.o(.data); diff --git a/ld_script_modern.ld b/ld_script_modern.ld index 8e63ad55a6..ee4713ab17 100644 --- a/ld_script_modern.ld +++ b/ld_script_modern.ld @@ -27,7 +27,6 @@ SECTIONS { ALIGN(4) { src/*.o(.sbss); - gflib/*.o(.sbss); } > EWRAM .iwram ORIGIN(IWRAM) : AT (__iwram_lma) diff --git a/ld_script_test.ld b/ld_script_test.ld index 05cd56d118..8972a97b00 100644 --- a/ld_script_test.ld +++ b/ld_script_test.ld @@ -25,7 +25,6 @@ SECTIONS { ALIGN(4) { src/*.o(.sbss); - gflib/*.o(.sbss); test/*.o(.sbss); . = ALIGN(4); } > EWRAM @@ -43,7 +42,6 @@ SECTIONS { ALIGN(4) { src/*.o(.bss); - gflib/*.o(.bss); data/*.o(.bss); test/*.o(.bss); *libc.a:*.o(.bss*); @@ -54,7 +52,6 @@ SECTIONS { src/*.o(common_data); src/*.o(COMMON); - gflib/*.o(COMMON); data/*.o(COMMON); test/*.o(COMMON); *libc.a:sbrkr.o(COMMON); @@ -77,7 +74,6 @@ SECTIONS { src/rom_header_gf.o(.text.*); src/rom_header_rhh.o(.text.*); src/*.o(.text); - gflib/*.o(.text); } > ROM =0 script_data : @@ -99,7 +95,6 @@ SECTIONS { ALIGN(4) { src/*.o(.rodata*); - gflib/*.o(.rodata*); data/*.o(.rodata*); } > ROM =0 From 20c5df74e4d0812a7eeaafbbee809b8e43a2453f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 16 Oct 2024 09:45:58 -0300 Subject: [PATCH 313/544] Updated .gitignore for agbcc screenshot suffix --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 06cdfc023f..abad67b044 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,6 @@ prefabs.json *.sym *.js /pokeemerald-*.png -/pokeemerald_modern-*.png +/pokeemerald_agbcc-*.png src/data/map_group_count.h tools/trainerproc/trainerproc From 9882e0aea6902cc256025e4b4399e9ffb655d00b Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:22:48 -0400 Subject: [PATCH 314/544] Refactor ShouldSwitchIfAllBadMoves (#5452) * Refactor ShouldSwitchIfAllBadMoves * Rest of bugfix * Enable Shed Tail test * Revert "Enable Shed Tail test" This reverts commit e0b9a3affcf3c465c8743741e5ca61bde6c8cb18. * Better names for i, j * Fix MAX_MON_MOVES that should be MAX_BATTLERS_COUNT * battlerIndex / moveIndex fix * Update src/battle_controller_player_partner.c --------- Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/battle.h | 3 +- include/battle_ai_main.h | 1 - src/battle_ai_main.c | 91 ---------- src/battle_ai_switch_items.c | 241 +++++++++++++++++++------ src/battle_controller_opponent.c | 3 - src/battle_controller_player_partner.c | 35 ++-- test/battle/ai/ai_switching.c | 25 ++- 7 files changed, 220 insertions(+), 179 deletions(-) diff --git a/include/battle.h b/include/battle.h index 894b74ffde..458d03ea40 100644 --- a/include/battle.h +++ b/include/battle.h @@ -369,8 +369,7 @@ struct AiLogicData u8 effectiveness[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 moveAccuracy[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex u8 moveLimitations[MAX_BATTLERS_COUNT]; - u8 shouldSwitchIfBadMoves; // Because all available moves have no/little effect. Each bit per battler. - u8 monToSwitchId[MAX_BATTLERS_COUNT]; // ID of the mon to switch. + u8 monToSwitchInId[MAX_BATTLERS_COUNT]; // ID of the mon to switch in. u8 mostSuitableMonId[MAX_BATTLERS_COUNT]; // Stores result of GetMostSuitableMonToSwitchInto, which decides which generic mon the AI would switch into if they decide to switch. This can be overruled by specific mons found in ShouldSwitch; the final resulting mon is stored in AI_monToSwitchIntoId. struct SwitchinCandidate switchinCandidate; // Struct used for deciding which mon to switch to in battle_ai_switch_items.c u8 weatherHasEffect:1; // The same as WEATHER_HAS_EFFECT. Stored here, so it's called only once. diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h index 431ed35698..2f16fe28ff 100644 --- a/include/battle_ai_main.h +++ b/include/battle_ai_main.h @@ -10,7 +10,6 @@ typedef s32 (*AiScoreFunc)(u32, u32, u32, s32); // 0 - 3 are move idx #define AI_CHOICE_FLEE 4 #define AI_CHOICE_WATCH 5 -#define AI_CHOICE_SWITCH 7 // for AI_WhoStrikesFirst #define AI_IS_FASTER 1 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index fd253b5197..9099ffd5c0 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -496,89 +496,6 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData) AI_DATA->aiCalcInProgress = FALSE; } -static bool32 AI_SwitchMonIfSuitable(u32 battler, bool32 doubleBattle) -{ - u32 monToSwitchId = AI_DATA->mostSuitableMonId[battler]; - if (monToSwitchId != PARTY_SIZE && IsValidForBattle(&GetBattlerParty(battler)[monToSwitchId])) - { - gBattleMoveDamage = monToSwitchId; - // Edge case: See if partner already chose to switch into the same mon - if (doubleBattle) - { - u32 partner = BATTLE_PARTNER(battler); - if (AI_DATA->shouldSwitchIfBadMoves & (1u << partner) && AI_DATA->monToSwitchId[partner] == monToSwitchId) - { - return FALSE; - } - } - AI_DATA->shouldSwitchIfBadMoves |= 1 << battler; - AI_DATA->monToSwitchId[battler] = monToSwitchId; - return TRUE; - } - return FALSE; -} - -static bool32 AI_ShouldSwitchIfBadMoves(u32 battler, bool32 doubleBattle) -{ - u32 i, j; - // If can switch. - if (CountUsablePartyMons(battler) > 0 - && !IsBattlerTrapped(battler, TRUE) - && !(gBattleTypeFlags & (BATTLE_TYPE_ARENA | BATTLE_TYPE_PALACE)) - && AI_THINKING_STRUCT->aiFlags[battler] & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS) - && !(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING)) - { - // Consider switching if all moves are worthless to use. - if (GetTotalBaseStat(gBattleMons[battler].species) >= 310 // Mon is not weak. - && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2) // Mon has more than 50% of its HP - { - s32 cap = AI_THINKING_STRUCT->aiFlags[battler] & (AI_FLAG_CHECK_VIABILITY) ? 95 : 93; - if (doubleBattle) - { - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (i != battler && IsBattlerAlive(i)) - { - for (j = 0; j < MAX_MON_MOVES; j++) - { - if (gBattleStruct->aiFinalScore[battler][i][j] > cap) - break; - } - if (j != MAX_MON_MOVES) - break; - } - } - if (i == MAX_BATTLERS_COUNT && AI_SwitchMonIfSuitable(battler, doubleBattle)) - return TRUE; - } - else - { - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (AI_THINKING_STRUCT->score[i] > cap) - break; - } - - if (i == MAX_MON_MOVES && AI_SwitchMonIfSuitable(battler, doubleBattle)) - return TRUE; - } - - } - - // Consider switching if your mon with truant is bodied by Protect spam. - // Or is using a double turn semi invulnerable move(such as Fly) and is faster. - if (AI_DATA->abilities[battler] == ABILITY_TRUANT - && IsTruantMonVulnerable(battler, gBattlerTarget) - && gDisableStructs[battler].truantCounter - && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 - && AI_SwitchMonIfSuitable(battler, doubleBattle)) - { - return TRUE; - } - } - return FALSE; -} - static u32 ChooseMoveOrAction_Singles(u32 battlerAi) { u8 currentMoveArray[MAX_MON_MOVES]; @@ -609,10 +526,6 @@ static u32 ChooseMoveOrAction_Singles(u32 battlerAi) if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH) return AI_CHOICE_WATCH; - // Switch mon if there are no good moves to use. - if (AI_ShouldSwitchIfBadMoves(battlerAi, FALSE)) - return AI_CHOICE_SWITCH; - numOfBestMoves = 1; currentMoveArray[0] = AI_THINKING_STRUCT->score[0]; consideredMoveArray[0] = 0; @@ -733,10 +646,6 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi) } } - // Switch mon if all of the moves are bad to use against any of the target. - if (AI_ShouldSwitchIfBadMoves(battlerAi, TRUE)) - return AI_CHOICE_SWITCH; - mostMovePoints = bestMovePointsForTarget[0]; mostViableTargetsArray[0] = 0; mostViableTargetsNo = 1; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 0400f18b53..c80b531d55 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -65,6 +65,26 @@ void GetAIPartyIndexes(u32 battler, s32 *firstId, s32 *lastId) } } +bool32 IsSwitchinIdValid(u32 battler, u32 switchinId) +{ + if (IsDoubleBattle()) + { + u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerAtPosition(battler))); + // Edge case: See if partner already chose to switch into the same mon + if (switchinId == PARTY_SIZE) // Generic switch + { + if ((AI_DATA->shouldSwitch & (1u << partner)) && AI_DATA->monToSwitchInId[partner] == AI_DATA->mostSuitableMonId[battler]) + return FALSE; + } + else + { + if ((AI_DATA->shouldSwitch & (1u << partner)) && AI_DATA->monToSwitchInId[partner] == switchinId) + return FALSE; + } + } + return TRUE; +} + // Note that as many return statements as possible are INTENTIONALLY put after all of the loops; // the function can take a max of about 0.06s to run, and this prevents the player from identifying // whether the mon will switch or not by seeing how long the delay is before they select a move @@ -185,9 +205,12 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) // Switch mon out gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } } // General bad type matchups have more wiggle room @@ -208,6 +231,75 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) // Switch mon out gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } + } + } + return FALSE; +} + +static bool32 ShouldSwitchIfAllMovesBad(u32 battler, bool32 emitResult) +{ + u32 battlerIndex, moveIndex; + bool32 switchOut = FALSE; + + // Consider switching if all moves are worthless to use. + if (GetTotalBaseStat(gBattleMons[battler].species) >= 310 // Mon is not weak. + && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2) // Mon has more than 50% of its HP + { + s32 cap = AI_THINKING_STRUCT->aiFlags[battler] & (AI_FLAG_CHECK_VIABILITY) ? 95 : 93; + if (IsDoubleBattle()) + { + for (battlerIndex = 0; battlerIndex < MAX_BATTLERS_COUNT; battlerIndex++) + { + if (battlerIndex != battler && IsBattlerAlive(battlerIndex)) + { + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + if (gBattleStruct->aiFinalScore[battler][battlerIndex][moveIndex] > cap) + break; + } + if (moveIndex != MAX_MON_MOVES) + break; + } + } + if (battlerIndex == MAX_BATTLERS_COUNT && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) + switchOut = TRUE; + } + else + { + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + if (AI_THINKING_STRUCT->score[moveIndex] > cap) + break; + } + + if (moveIndex == MAX_MON_MOVES && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) + switchOut = TRUE; + } + } + + // Consider switching if your mon with truant is bodied by Protect spam. + // Or is using a double turn semi invulnerable move(such as Fly) and is faster. + if (AI_DATA->abilities[battler] == ABILITY_TRUANT + && IsTruantMonVulnerable(battler, gBattlerTarget) + && gDisableStructs[battler].truantCounter + && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 + && AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE) + { + switchOut = TRUE; + } + + if (switchOut) + { + // Switch mon out + gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { if (emitResult) BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); return TRUE; @@ -216,22 +308,6 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; } -static bool32 ShouldSwitchIfAllBadMoves(u32 battler, bool32 emitResult) -{ - if (AI_DATA->shouldSwitchIfBadMoves & (1u << battler)) - { - AI_DATA->shouldSwitchIfBadMoves &= ~(1u << battler); - gBattleStruct->AI_monToSwitchIntoId[battler] = AI_DATA->monToSwitchId[battler]; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; - } - else - { - return FALSE; - } -} - static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) { u8 opposingPosition; @@ -288,9 +364,12 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) { // We found a mon. gBattleStruct->AI_monToSwitchIntoId[battler] = i; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); + return TRUE; + } } } } @@ -403,9 +482,12 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) { // we found a mon. gBattleStruct->AI_monToSwitchIntoId[battler] = i; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } } } } @@ -445,9 +527,12 @@ static bool32 FindMonThatTrapsOpponent(u32 battler, bool32 emitResult) if (i == AI_DATA->mostSuitableMonId[battler]) // If mon in slot i is the most suitable switchin candidate, then it's a trapper than wins 1v1 { gBattleStruct->AI_monToSwitchIntoId[battler] = i; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } } } } @@ -520,9 +605,12 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) || GetMonAbility(&party[i]) == ABILITY_ELECTRIC_SURGE)) //Ally has Misty or Electric Surge { *(gBattleStruct->AI_monToSwitchIntoId + BATTLE_PARTNER(battler)) = i; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - switchMon = FALSE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); + switchMon = FALSE; + } break; } } @@ -611,9 +699,13 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult) { if (!monIdChosen) gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); + return TRUE; + } + return FALSE; } else { @@ -668,10 +760,13 @@ static bool32 ShouldSwitchIfAbilityBenefit(u32 battler, bool32 emitResult) } gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); + return TRUE; + } + return FALSE; } static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) @@ -811,9 +906,12 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 modu if (AI_GetTypeEffectiveness(move, battler, battlerIn1) >= UQ_4_12(2.0) && Random() % moduloPercent == 0) { gBattleStruct->AI_monToSwitchIntoId[battler] = i; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); + return TRUE; + } } } } @@ -902,9 +1000,12 @@ static bool32 ShouldSwitchIfEncored(u32 battler, bool32 emitResult) if (Random() & 1) { gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } } return FALSE; @@ -919,9 +1020,13 @@ static bool32 ShouldSwitchIfBadChoiceLock(u32 battler, bool32 emitResult) if (gMovesInfo[gLastUsedMove].category == DAMAGE_CATEGORY_STATUS) { gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } + } } @@ -950,18 +1055,24 @@ static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult) if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (Random() & 1)) { gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } } } // If at -3 or worse, switch out regardless else if (attackingStage < DEFAULT_STAT_STAGE - 2) { gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (emitResult) - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } } } @@ -977,16 +1088,24 @@ static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult) if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (Random() & 1)) { gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } } } // If at -3 or worse, switch out regardless else if (spAttackingStage < DEFAULT_STAT_STAGE - 2) { gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; + if (IsSwitchinIdValid(battler, gBattleStruct->AI_monToSwitchIntoId[battler])) + { + if (emitResult) + BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); + return TRUE; + } } } return FALSE; @@ -1019,11 +1138,12 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) if (IsDoubleBattle()) { + u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerAtPosition(battler))); battlerIn1 = battler; - if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) + if (gAbsentBattlerFlags & (1u << partner)) battlerIn2 = battler; else - battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); + battlerIn2 = partner; } else { @@ -1083,7 +1203,7 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) //These Functions can prompt switch to generic pary members if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) && (CanMonSurviveHazardSwitchin(battler) == FALSE)) return FALSE; - if (ShouldSwitchIfAllBadMoves(battler, emitResult)) + if (ShouldSwitchIfAllMovesBad(battler, emitResult)) return TRUE; if (ShouldSwitchIfAbilityBenefit(battler, emitResult)) return TRUE; @@ -1170,6 +1290,7 @@ void AI_TrySwitchOrUseItem(u32 battler) } *(gBattleStruct->monToSwitchIntoId + battler) = gBattleStruct->AI_monToSwitchIntoId[battler]; + AI_DATA->monToSwitchInId[battler] = gBattleStruct->AI_monToSwitchIntoId[battler]; return; } else if (ShouldUseItem(battler)) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 01ec74f9c2..251085acea 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -550,9 +550,6 @@ static void OpponentHandleChooseMove(u32 battler) case AI_CHOICE_FLEE: BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_RUN, 0); break; - case AI_CHOICE_SWITCH: - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, 0xFFFF); - break; case 6: BtlController_EmitTwoReturnValues(battler, BUFFER_B, 15, gBattlerTarget); break; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 47d71d87c6..f987c333ce 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -354,31 +354,24 @@ static void PlayerPartnerHandleChooseMove(u32 battler) chosenMoveId = gBattleStruct->aiMoveOrAction[battler]; gBattlerTarget = gBattleStruct->aiChosenTarget[battler]; - if (chosenMoveId == AI_CHOICE_SWITCH) + if (gMovesInfo[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) + gBattlerTarget = battler; + else if (gMovesInfo[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH) { - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, 0xFFFF); + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + if (gAbsentBattlerFlags & (1u << gBattlerTarget)) + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + } + // If partner can and should use a gimmick (considering trainer data), do it + if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE + && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE + && !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId]))) + { + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_GIMMICK) | (gBattlerTarget << 8)); } else { - if (gMovesInfo[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) - gBattlerTarget = battler; - if (gMovesInfo[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH) - { - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - if (gAbsentBattlerFlags & (1u << gBattlerTarget)) - gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - } - // If partner can and should use a gimmick (considering trainer data), do it - if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE - && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE - && !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId]))) - { - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_GIMMICK) | (gBattlerTarget << 8)); - } - else - { - BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); - } + BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8)); } PlayerPartnerBufferExecCompleted(battler); diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index a70163af18..a57e5d32fc 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -39,7 +39,7 @@ AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") } } -AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle") +AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle (all bad moves)") { u32 flags; @@ -67,6 +67,29 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spot } } +AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle (Wonder Guard)") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_SHEDINJA); + PLAYER(SPECIES_SHEDINJA); + // No moves to damage player. + OPPONENT(SPECIES_LINOONE) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_LINOONE) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } + } WHEN { + TURN { EXPECT_SWITCH(opponentLeft, 3); }; + } SCENE { + MESSAGE("{PKMN} TRAINER LEAF withdrew Linoone!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Gengar!"); + NONE_OF { + MESSAGE("{PKMN} TRAINER LEAF withdrew Zigzagoon!"); + MESSAGE("{PKMN} TRAINER LEAF sent out Gengar!"); + } + } +} + AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: U-Turn will send out Ace Mon if it's the only one remaining") { GIVEN { From 2e7d856ee30ab79a77c7f49cc0dcb9a82f72bef9 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 16 Oct 2024 19:01:38 +0200 Subject: [PATCH 315/544] Removes Crit Chance preproc (#5520) * Removes Crit Chance preproc * renamed the function wrongly before pushing * add assumes back where needed * addresses review comments * GetHoldEffectCritChanceIncrease * remove redudant var call * define for gen1 leek scale * gen1 adjustments and fix test * inline leek check * clean up --- src/battle_script_commands.c | 95 ++++++++++++++++++++++++------------ test/battle/crit_chance.c | 15 ++++-- 2 files changed, 75 insertions(+), 35 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a4f8d0b885..a9dd2ca4d6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1895,15 +1895,55 @@ static void Cmd_ppreduce(void) } // The chance is 1/N for each stage. -#if B_CRIT_CHANCE >= GEN_7 - static const u8 sCriticalHitOdds[] = {24, 8, 2, 1, 1}; -#elif B_CRIT_CHANCE == GEN_6 - static const u8 sCriticalHitOdds[] = {16, 8, 2, 1, 1}; -#else - static const u8 sCriticalHitOdds[] = {16, 8, 4, 3, 2}; // Gens 2,3,4,5 -#endif // B_CRIT_CHANCE +static const u32 sGen7CriticalHitOdds[] = {24, 8, 2, 1, 1}; +static const u32 sGen6CriticalHitOdds[] = {16, 8, 2, 1, 1}; +static const u32 sCriticalHitOdds[] = {16, 8, 4, 3, 2}; // Gens 2,3,4,5 + +static inline u32 GetCriticalHitOdds(u32 critChance) +{ + if (B_CRIT_CHANCE >= GEN_7) + return sGen7CriticalHitOdds[critChance]; + if (B_CRIT_CHANCE == GEN_6) + return sGen6CriticalHitOdds[critChance]; + + return sCriticalHitOdds[critChance]; +} + +static inline u32 IsBattlerLeekAffected(u32 battler, u32 holdEffect) +{ + if (holdEffect == HOLD_EFFECT_LEEK) + { + return GET_BASE_SPECIES_ID(gBattleMons[battler].species) == SPECIES_FARFETCHD + || gBattleMons[battler].species == SPECIES_SIRFETCHD; + } + return FALSE; +} + +static inline u32 GetHoldEffectCritChanceIncrease(u32 battler, u32 holdEffect) +{ + u32 critStageIncrease = 0; + + switch (holdEffect) + { + case HOLD_EFFECT_SCOPE_LENS: + critStageIncrease = 1; + break; + case HOLD_EFFECT_LUCKY_PUNCH: + if (gBattleMons[battler].species == SPECIES_CHANSEY) + critStageIncrease = 2; + break; + case HOLD_EFFECT_LEEK: + if (IsBattlerLeekAffected(battler, holdEffect)) + critStageIncrease = 2; + break; + default: + critStageIncrease = 0; + break; + } + + return critStageIncrease; +} -#define BENEFITS_FROM_LEEK(battler, holdEffect)((holdEffect == HOLD_EFFECT_LEEK) && (GET_BASE_SPECIES_ID(gBattleMons[battler].species) == SPECIES_FARFETCHD || gBattleMons[battler].species == SPECIES_SIRFETCHD)) s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk) { s32 critChance = 0; @@ -1923,9 +1963,7 @@ s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec critChance = 2 * ((gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY) != 0) + 1 * ((gBattleMons[battlerAtk].status2 & STATUS2_DRAGON_CHEER) != 0) + gMovesInfo[move].criticalHitStage - + (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS) - + 2 * (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[battlerAtk].species == SPECIES_CHANSEY) - + 2 * BENEFITS_FROM_LEEK(battlerAtk, holdEffectAtk) + + GetHoldEffectCritChanceIncrease(battlerAtk, holdEffectAtk) + 2 * (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(battlerAtk) == AFFECTION_FIVE_HEARTS) + (abilityAtk == ABILITY_SUPER_LUCK) + gBattleStruct->bonusCritStages[gBattlerAttacker]; @@ -1941,7 +1979,7 @@ s32 CalcCritChanceStageArgs(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec { if (critChance == -2) RecordAbilityBattle(battlerDef, abilityDef); - else if (sCriticalHitOdds[critChance] == 1) + else if (GetCriticalHitOdds(critChance) == 1) RecordAbilityBattle(battlerDef, abilityDef); } critChance = -1; @@ -1963,7 +2001,7 @@ s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordA // Threshold = Base Speed / 2 // High crit move = 8 * (Base Speed / 2) // Focus Energy = 4 * (Base Speed / 2) -s32 CalcCritChanceStageGen1(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility) +s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility) { // Vanilla u32 focusEnergyScaler = 4; @@ -1973,13 +2011,13 @@ s32 CalcCritChanceStageGen1(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recor u32 superLuckScaler = 4; u32 scopeLensScaler = 4; u32 luckyPunchScaler = 8; - u32 farfetchedLeekScaler = 8; + u32 farfetchdLeekScaler = 8; s32 critChance = 0; s32 moveCritStage = gMovesInfo[gCurrentMove].criticalHitStage; - s32 bonusCritStage = gBattleStruct->bonusCritStages[gBattlerAttacker]; // G-Max Chi Strike - u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); - u32 abilityDef = GetBattlerAbility(gBattlerTarget); + s32 bonusCritStage = gBattleStruct->bonusCritStages[battlerAtk]; // G-Max Chi Strike + u32 abilityAtk = GetBattlerAbility(battlerAtk); + u32 abilityDef = GetBattlerAbility(battlerDef); u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); u16 baseSpeed = gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed; @@ -1992,17 +2030,15 @@ s32 CalcCritChanceStageGen1(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recor if (bonusCritStage > 0) critChance = critChance * bonusCritStage; - if ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY_ANY) != 0) + if ((gBattleMons[battlerAtk].status2 & STATUS2_FOCUS_ENERGY_ANY) != 0) critChance = critChance * focusEnergyScaler; if (holdEffectAtk == HOLD_EFFECT_SCOPE_LENS) critChance = critChance * scopeLensScaler; - - if (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY) + else if (holdEffectAtk == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[battlerAtk].species == SPECIES_CHANSEY) critChance = critChance * luckyPunchScaler; - - if (BENEFITS_FROM_LEEK(battlerAtk, holdEffectAtk)) - critChance = critChance * farfetchedLeekScaler; + else if (IsBattlerLeekAffected(battlerAtk, holdEffectAtk)) + critChance = critChance * farfetchdLeekScaler; if (abilityAtk == ABILITY_SUPER_LUCK) critChance = critChance * superLuckScaler; @@ -2030,14 +2066,13 @@ s32 CalcCritChanceStageGen1(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recor return critChance; } -#undef BENEFITS_FROM_LEEK s32 GetCritHitOdds(s32 critChanceIndex) { if (critChanceIndex < 0) return -1; else - return sCriticalHitOdds[critChanceIndex]; + return GetCriticalHitOdds(critChanceIndex); } static void Cmd_critcalc(void) @@ -2071,7 +2106,7 @@ static void Cmd_critcalc(void) gIsCriticalHit = 0; } else - gIsCriticalHit = RandomChance(RNG_CRITICAL_HIT, 1, sCriticalHitOdds[critChance]); + gIsCriticalHit = RandomChance(RNG_CRITICAL_HIT, 1, GetCriticalHitOdds(critChance)); } // Counter for EVO_CRITICAL_HITS. @@ -6998,7 +7033,7 @@ static void Cmd_openpartyscreen(void) else if (IsDoubleBattle()) { bool32 hasReplacement; - + hitmarkerFaintBits = gHitMarker >> 28; for (i = 0; i < gBattlersCount; i++) { @@ -7006,7 +7041,7 @@ static void Cmd_openpartyscreen(void) { if (i > 1 && ((1u << BATTLE_PARTNER(i)) & hitmarkerFaintBits)) continue; - + battler = i; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { @@ -7028,7 +7063,7 @@ static void Cmd_openpartyscreen(void) } } } - + for (i = 0; i < NUM_BATTLE_SIDES; i++) { if (!(gSpecialStatuses[i].faintedHasReplacement)) @@ -8856,7 +8891,7 @@ u32 GetHighestStatId(u32 battler) } if (gBattleMons[battler].speed > highestStat) highestId = STAT_SPEED; - + return highestId; } diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c index 2f057cc99b..d3a2b574f1 100644 --- a/test/battle/crit_chance.c +++ b/test/battle/crit_chance.c @@ -1,11 +1,6 @@ #include "global.h" #include "test/battle.h" -ASSUMPTIONS -{ - ASSUME(B_CRIT_CHANCE >= GEN_7); -} - SINGLE_BATTLE_TEST("Crit Chance: Side effected by Lucky Chant blocks critical hits") { GIVEN { @@ -135,6 +130,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Focus Energy increases the user's critical hit { PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gMovesInfo[MOVE_FOCUS_ENERGY].effect == EFFECT_FOCUS_ENERGY); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -152,6 +148,7 @@ SINGLE_BATTLE_TEST("Crit Chance: High crit rate increases the critical hit ratio { PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -167,6 +164,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Super Luck increases the critical hit ratio by { PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -181,6 +179,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Scope Lens increases the critical hit ratio by { PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); }; OPPONENT(SPECIES_WOBBUFFET); @@ -195,6 +194,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Scope Lens increases the critical hit ratio by SINGLE_BATTLE_TEST("Crit Chance: High crit rate, Super Luck and Scope Lens cause the move to result in a critical hit") { GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1); ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); }; @@ -220,6 +220,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Signature items Leek and Lucky Punch increase t PARAMETRIZE { species = SPECIES_CHANSEY; item = ITEM_LUCKY_PUNCH; } GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gItemsInfo[ITEM_LEEK].holdEffect == HOLD_EFFECT_LEEK); ASSUME(gItemsInfo[ITEM_LUCKY_PUNCH].holdEffect == HOLD_EFFECT_LUCKY_PUNCH); PLAYER(SPECIES_WOBBUFFET); @@ -236,6 +237,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Dire Hit increases a battler's critical hit cha { PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gItemsInfo[ITEM_DIRE_HIT].battleUsage == EFFECT_ITEM_SET_FOCUS_ENERGY); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -254,6 +256,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Focus Energy increases critical hit ratio by tw { PASSES_RANDOMLY(8, 8, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1); ASSUME(gMovesInfo[MOVE_FOCUS_ENERGY].effect == EFFECT_FOCUS_ENERGY); PLAYER(SPECIES_WOBBUFFET); @@ -286,6 +289,7 @@ DOUBLE_BATTLE_TEST("Crit Chance: Dragon Cheer increases critical hit ratio by on { PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gMovesInfo[MOVE_TACKLE].criticalHitStage == 0); ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); PLAYER(SPECIES_WOBBUFFET); @@ -306,6 +310,7 @@ DOUBLE_BATTLE_TEST("Crit Chance: Dragon Cheer increases critical hit ratio by tw { PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); ASSUME(gMovesInfo[MOVE_TACKLE].criticalHitStage == 0); ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); PLAYER(SPECIES_WOBBUFFET); From e230f379b38460404e2e4c783f01c484f8f82616 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 16 Oct 2024 17:46:40 -0300 Subject: [PATCH 316/544] Fixed 10,000,000 Volt Thunderbolt name (#5533) --- src/data/moves_info.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 478f0dc426..22ca581df4 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -20944,7 +20944,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = }, [MOVE_10000000_VOLT_THUNDERBOLT] = { - .name = COMPOUND_STRING("10000000 Volt Thunderbolt"), + .name = COMPOUND_STRING("10,000,000 Volt Thunderbolt"), .description = sNullDescription, .effect = EFFECT_HIT, .power = 195, From bb5aaa4005596c9fdd59f0d2231705de7c0cb43a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 17 Oct 2024 00:30:20 -0300 Subject: [PATCH 317/544] Restored Debug build --- Makefile | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a807cbf8bf..82dea27b13 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,8 @@ TEST ?= 0 ANALYZE ?= 0 # Count unused warnings as errors. Used by RH-Hideout's repo UNUSED_ERROR ?= 0 +# Adds -Og and -g flags, which optimize the build for debugging and include debug info respectively +DEBUG ?= 0 ifeq (agbcc,$(MAKECMDGOALS)) MODERN := 0 @@ -29,6 +31,9 @@ endif ifeq (check,$(MAKECMDGOALS)) TEST := 1 endif +ifeq (debug,$(MAKECMDGOALS)) + DEBUG := 1 +endif # Default make rule all: rom @@ -81,6 +86,7 @@ OBJ_DIR_NAME_TEST := $(BUILD_DIR)/test MODERN_ROM_NAME := $(FILE_NAME).gba MODERN_OBJ_DIR_NAME := $(BUILD_DIR)/modern MODERN_OBJ_DIR_NAME_TEST := $(BUILD_DIR)/modern-test +MODERN_OBJ_DIR_NAME_DEBUG := $(BUILD_DIR)/modern-debug ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) @@ -105,6 +111,9 @@ else OBJ_DIR := $(MODERN_OBJ_DIR_NAME_TEST) endif endif +ifeq ($(DEBUG),1) + OBJ_DIR := $(MODERN_OBJ_DIR_NAME_DEBUG) +endif ifeq ($(TESTELF),$(MAKECMDGOALS)) TEST := 1 endif @@ -137,7 +146,11 @@ INCLUDE_DIRS := include INCLUDE_CPP_ARGS := $(INCLUDE_DIRS:%=-iquote %) INCLUDE_SCANINC_ARGS := $(INCLUDE_DIRS:%=-I %) +ifeq ($(DEBUG),1) +O_LEVEL ?= g +else O_LEVEL ?= 2 +endif CPPFLAGS := $(INCLUDE_CPP_ARGS) -Wno-trigraphs -DMODERN=$(MODERN) -DTESTING=$(TEST) ifeq ($(MODERN),0) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef @@ -166,6 +179,15 @@ endif # Enable debug info if set ifeq ($(DINFO),1) override CFLAGS += -g +else + ifeq ($(DEBUG),1) + override CFLAGS += -g + endif +endif + +ifeq ($(NOOPT),1) +override CFLAGS := $(filter-out -O1 -Og -O2,$(CFLAGS)) +override CFLAGS += -O0 endif # Variable filled out in other make files @@ -199,7 +221,7 @@ MAKEFLAGS += --no-print-directory .DELETE_ON_ERROR: RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidynonmodern tidycheck generated clean-generated $(TESTELF) -.PHONY: all rom agbcc modern compare check +.PHONY: all rom agbcc modern compare check debug .PHONY: $(RULES_NO_SCAN) infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -269,6 +291,7 @@ $(shell mkdir -p $(SUBDIRS)) # Pretend rules that are actually flags defer to `make all` modern: all compare: all +debug: all # Uncomment the next line, and then comment the 4 lines after it to reenable agbcc. #agbcc: all agbcc: @@ -317,7 +340,7 @@ clean-assets: find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + -tidy: tidynonmodern tidymodern tidycheck +tidy: tidynonmodern tidymodern tidycheck tidydebug tidynonmodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) @@ -332,6 +355,9 @@ tidycheck: rm -rf $(MODERN_OBJ_DIR_NAME_TEST) rm -rf $(OBJ_DIR_NAME_TEST) +tidydebug: + rm -rf $(DEBUG_OBJ_DIR_NAME) + # Other rules include graphics_file_rules.mk include map_data_rules.mk @@ -470,7 +496,7 @@ endif # Final rules libagbsyscall: - @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) + @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=1 # Elf from object files $(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) libagbsyscall From f88046b1c37df2945dfe5fd6e9d3dfe3f7da5bf1 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 17 Oct 2024 06:26:55 -0300 Subject: [PATCH 318/544] Re-removed agbcc for new Makefile --- Makefile | 126 +++++++++++++------------------------------------------ 1 file changed, 30 insertions(+), 96 deletions(-) diff --git a/Makefile b/Makefile index 82dea27b13..aae215c587 100644 --- a/Makefile +++ b/Makefile @@ -5,12 +5,10 @@ MAKER_CODE := 01 REVISION := 0 KEEP_TEMPS ?= 0 -# `File name`.gba ('_agbcc' will be appended to the non-modern builds) +# `File name`.gba FILE_NAME := pokeemerald BUILD_DIR := build -# Builds the ROM using a modern compiler -MODERN ?= 1 # Compares the ROM to a checksum of the original - only makes sense using when non-modern COMPARE ?= 0 # Executes the Test Runner System that checks that all mechanics work as expected @@ -22,9 +20,6 @@ UNUSED_ERROR ?= 0 # Adds -Og and -g flags, which optimize the build for debugging and include debug info respectively DEBUG ?= 0 -ifeq (agbcc,$(MAKECMDGOALS)) - MODERN := 0 -endif ifeq (compare,$(MAKECMDGOALS)) COMPARE := 1 endif @@ -63,56 +58,27 @@ ifeq ($(OS),Windows_NT) EXE := .exe endif -# use arm-none-eabi-cpp for macOS -# as macOS's default compiler is clang -# and clang's preprocessor will warn on \u -# when preprocessing asm files, expecting a unicode literal -# we can't unconditionally use arm-none-eabi-cpp -# as installations which install binutils-arm-none-eabi -# don't come with it -ifneq ($(MODERN),1) - ifeq ($(shell uname -s),Darwin) - CPP := $(PREFIX)cpp - else - CPP := $(CC) -E - endif -else - CPP := $(PREFIX)cpp -endif +CPP := $(PREFIX)cpp -ROM_NAME := $(FILE_NAME)_agbcc.gba -OBJ_DIR_NAME := $(BUILD_DIR)/emerald -OBJ_DIR_NAME_TEST := $(BUILD_DIR)/test -MODERN_ROM_NAME := $(FILE_NAME).gba -MODERN_OBJ_DIR_NAME := $(BUILD_DIR)/modern -MODERN_OBJ_DIR_NAME_TEST := $(BUILD_DIR)/modern-test -MODERN_OBJ_DIR_NAME_DEBUG := $(BUILD_DIR)/modern-debug +ROM_NAME := $(FILE_NAME).gba +OBJ_DIR_NAME := $(BUILD_DIR)/modern +OBJ_DIR_NAME_TEST := $(BUILD_DIR)/modern-test +OBJ_DIR_NAME_DEBUG := $(BUILD_DIR)/modern-debug ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) -MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) -MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) TESTELF = $(ROM_NAME:.gba=-test.elf) HEADLESSELF = $(ROM_NAME:.gba=-test-headless.elf) # Pick our active variables -ifeq ($(MODERN),0) - ROM := $(ROM_NAME) - ifeq ($(TEST), 0) - OBJ_DIR := $(OBJ_DIR_NAME) - else - OBJ_DIR := $(OBJ_DIR_NAME_TEST) - endif +ROM := $(ROM_NAME) +ifeq ($(TEST), 0) + OBJ_DIR := $(OBJ_DIR_NAME) else - ROM := $(MODERN_ROM_NAME) - ifeq ($(TEST), 0) - OBJ_DIR := $(MODERN_OBJ_DIR_NAME) - else - OBJ_DIR := $(MODERN_OBJ_DIR_NAME_TEST) - endif + OBJ_DIR := $(OBJ_DIR_NAME_TEST) endif ifeq ($(DEBUG),1) - OBJ_DIR := $(MODERN_OBJ_DIR_NAME_DEBUG) + OBJ_DIR := $(OBJ_DIR_NAME_DEBUG) endif ifeq ($(TESTELF),$(MAKECMDGOALS)) TEST := 1 @@ -140,7 +106,7 @@ TEST_BUILDDIR = $(OBJ_DIR)/$(TEST_SUBDIR) SHELL := bash -o pipefail # Set flags for tools -ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) +ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=1 INCLUDE_DIRS := include INCLUDE_CPP_ARGS := $(INCLUDE_DIRS:%=-iquote %) @@ -151,31 +117,22 @@ O_LEVEL ?= g else O_LEVEL ?= 2 endif -CPPFLAGS := $(INCLUDE_CPP_ARGS) -Wno-trigraphs -DMODERN=$(MODERN) -DTESTING=$(TEST) -ifeq ($(MODERN),0) - CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef - CC1 := tools/agbcc/bin/agbcc$(EXE) - override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O$(O_LEVEL) -fhex-asm -g - LIBPATH := -L ../../tools/agbcc/lib - LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall -else - # Note: The makefile must be set up to not call these if modern == 0 - MODERNCC := $(PREFIX)gcc - PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) - CC1 := $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet - override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init - ifeq ($(ANALYZE),1) - override CFLAGS += -fanalyzer - endif - # Only throw an error for unused elements if its RH-Hideout's repo - ifeq ($(UNUSED_ERROR),0) - ifneq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) - override CFLAGS += -Wno-error=unused-variable -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-function -Wno-error=unused-but-set-parameter -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=unused-local-typedefs - endif - endif - LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" - LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall +CPPFLAGS := $(INCLUDE_CPP_ARGS) -Wno-trigraphs -DMODERN=1 -DTESTING=$(TEST) +ARMCC := $(PREFIX)gcc +PATH_ARMCC := PATH="$(PATH)" $(ARMCC) +CC1 := $(shell $(PATH_ARMCC) --print-prog-name=cc1) -quiet +override CFLAGS += -mthumb -mthumb-interwork -O$(O_LEVEL) -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init +ifeq ($(ANALYZE),1) + override CFLAGS += -fanalyzer endif +# Only throw an error for unused elements if its RH-Hideout's repo +ifeq ($(UNUSED_ERROR),0) + ifneq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) + override CFLAGS += -Wno-error=unused-variable -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-function -Wno-error=unused-but-set-parameter -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=unused-local-typedefs + endif +endif +LIBPATH := -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libc.a))" +LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall # Enable debug info if set ifeq ($(DINFO),1) override CFLAGS += -g @@ -220,7 +177,7 @@ MAKEFLAGS += --no-print-directory # Delete files that weren't built properly .DELETE_ON_ERROR: -RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidynonmodern tidycheck generated clean-generated $(TESTELF) +RULES_NO_SCAN += libagbsyscall clean clean-assets tidy tidymodern tidycheck generated clean-generated $(TESTELF) .PHONY: all rom agbcc modern compare check debug .PHONY: $(RULES_NO_SCAN) @@ -340,19 +297,14 @@ clean-assets: find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + -tidy: tidynonmodern tidymodern tidycheck tidydebug +tidy: tidymodern tidycheck tidydebug -tidynonmodern: +tidymodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) rm -rf $(OBJ_DIR_NAME) -tidymodern: - rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) - rm -rf $(MODERN_OBJ_DIR_NAME) - tidycheck: rm -f $(TESTELF) $(HEADLESSELF) - rm -rf $(MODERN_OBJ_DIR_NAME_TEST) rm -rf $(OBJ_DIR_NAME_TEST) tidydebug: @@ -390,24 +342,11 @@ ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) %.h: %.party ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | $(TRAINERPROC) -o $@ -i $< - endif -ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := $(TOOLS_DIR)/agbcc/bin/old_agbcc$(EXE) -$(C_BUILDDIR)/libc.o: CFLAGS := -O2 -$(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork -$(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) -$(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := $(TOOLS_DIR)/agbcc/bin/agbcc_arm$(EXE) -$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet -else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast $(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member $(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init # Annoyingly we can't turn this on just for src/data/trainers.h $(C_BUILDDIR)/data.o: CFLAGS += -fno-show-column -fno-diagnostics-show-caret -endif # Dependency rules (for the *.c & *.s sources to .o files) # Have to be explicit or else missing files won't be reported. @@ -485,13 +424,8 @@ endef $(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src))))) # Linker script -ifeq ($(MODERN),0) -LD_SCRIPT := ld_script.ld -LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld -else LD_SCRIPT := ld_script_modern.ld LD_SCRIPT_DEPS := -endif # Final rules From 358c0d06994779b019e10f12bc216b3c44fab217 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 18 Oct 2024 08:37:00 -0300 Subject: [PATCH 319/544] Added back GBA sprites via config (#5206) * Add back older sprites * Graphics config * Added GBA most graphical data to gSpeciesInfo * Footprints are now affected by P_GBA_SPECIES_GFX + removed duplicated files * GBA mon icons * Split GBA footprints into separate config * Separated GBA icons into their own config * Fixed GBA icons depending on P_GBA_SPECIES_GFX instead of P_GBA_ICONS * Moved GBA sprites to regular folder with prefix * Renamed configs * Temporarely disabled shadows when GBA sprites are enabled * Removed remaining files from pokemon_old folder --- .../gba_gfx/delete_files_of_same_name.py | 21 + .../gba_gfx/rename_files_of_same_name.py | 22 + graphics/pokemon/abra/anim_front_gba.png | Bin 0 -> 698 bytes graphics/pokemon/abra/back_gba.png | Bin 0 -> 616 bytes graphics/pokemon/abra/icon_gba.png | Bin 0 -> 327 bytes graphics/pokemon/abra/normal_gba.pal | 19 + graphics/pokemon/abra/shiny_gba.pal | 19 + graphics/pokemon/absol/anim_front_gba.png | Bin 0 -> 1339 bytes graphics/pokemon/absol/back_gba.png | Bin 0 -> 673 bytes graphics/pokemon/absol/icon_gba.png | Bin 0 -> 371 bytes graphics/pokemon/absol/normal_gba.pal | 19 + graphics/pokemon/absol/shiny_gba.pal | 19 + .../pokemon/aerodactyl/anim_front_gba.png | Bin 0 -> 1464 bytes graphics/pokemon/aerodactyl/back_gba.png | Bin 0 -> 602 bytes graphics/pokemon/aerodactyl/icon_gba.png | Bin 0 -> 369 bytes graphics/pokemon/aerodactyl/normal_gba.pal | 19 + graphics/pokemon/aerodactyl/shiny_gba.pal | 19 + graphics/pokemon/aggron/anim_front_gba.png | Bin 0 -> 1981 bytes graphics/pokemon/aggron/back_gba.png | Bin 0 -> 860 bytes graphics/pokemon/aggron/icon_gba.png | Bin 0 -> 367 bytes graphics/pokemon/aggron/normal_gba.pal | 19 + graphics/pokemon/aggron/shiny_gba.pal | 19 + graphics/pokemon/aipom/anim_front_gba.png | Bin 0 -> 924 bytes graphics/pokemon/aipom/back_gba.png | Bin 0 -> 592 bytes graphics/pokemon/aipom/icon_gba.png | Bin 0 -> 399 bytes graphics/pokemon/aipom/normal_gba.pal | 19 + graphics/pokemon/aipom/shiny_gba.pal | 19 + graphics/pokemon/alakazam/anim_front_gba.png | Bin 0 -> 1543 bytes graphics/pokemon/alakazam/back_gba.png | Bin 0 -> 864 bytes graphics/pokemon/alakazam/icon_gba.png | Bin 0 -> 401 bytes graphics/pokemon/alakazam/normal_gba.pal | 19 + graphics/pokemon/alakazam/shiny_gba.pal | 19 + graphics/pokemon/altaria/anim_front_gba.png | Bin 0 -> 1407 bytes graphics/pokemon/altaria/back_gba.png | Bin 0 -> 685 bytes graphics/pokemon/altaria/icon_gba.png | Bin 0 -> 419 bytes graphics/pokemon/altaria/normal_gba.pal | 19 + graphics/pokemon/altaria/shiny_gba.pal | 19 + graphics/pokemon/ampharos/anim_front_gba.png | Bin 0 -> 1303 bytes graphics/pokemon/ampharos/back_gba.png | Bin 0 -> 714 bytes graphics/pokemon/ampharos/icon_gba.png | Bin 0 -> 430 bytes graphics/pokemon/ampharos/normal_gba.pal | 19 + graphics/pokemon/ampharos/shiny_gba.pal | 19 + graphics/pokemon/anorith/anim_front_gba.png | Bin 0 -> 1161 bytes graphics/pokemon/anorith/back_gba.png | Bin 0 -> 445 bytes graphics/pokemon/anorith/icon_gba.png | Bin 0 -> 377 bytes graphics/pokemon/anorith/normal_gba.pal | 19 + graphics/pokemon/anorith/shiny_gba.pal | 19 + graphics/pokemon/arbok/anim_front_gba.png | Bin 0 -> 1515 bytes graphics/pokemon/arbok/back_gba.png | Bin 0 -> 509 bytes graphics/pokemon/arbok/icon_gba.png | Bin 0 -> 373 bytes graphics/pokemon/arbok/normal_gba.pal | 19 + graphics/pokemon/arbok/shiny_gba.pal | 19 + graphics/pokemon/arcanine/anim_front_gba.png | Bin 0 -> 2014 bytes graphics/pokemon/arcanine/back_gba.png | Bin 0 -> 790 bytes graphics/pokemon/arcanine/icon_gba.png | Bin 0 -> 445 bytes graphics/pokemon/arcanine/normal_gba.pal | 19 + graphics/pokemon/arcanine/shiny_gba.pal | 19 + graphics/pokemon/ariados/anim_front_gba.png | Bin 0 -> 1466 bytes graphics/pokemon/ariados/back_gba.png | Bin 0 -> 706 bytes graphics/pokemon/ariados/icon_gba.png | Bin 0 -> 430 bytes graphics/pokemon/ariados/normal_gba.pal | 19 + graphics/pokemon/ariados/shiny_gba.pal | 19 + graphics/pokemon/armaldo/anim_front_gba.png | Bin 0 -> 1876 bytes graphics/pokemon/armaldo/back_gba.png | Bin 0 -> 898 bytes graphics/pokemon/armaldo/icon_gba.png | Bin 0 -> 383 bytes graphics/pokemon/armaldo/normal_gba.pal | 19 + graphics/pokemon/armaldo/shiny_gba.pal | 19 + graphics/pokemon/aron/anim_front_gba.png | Bin 0 -> 568 bytes graphics/pokemon/aron/back_gba.png | Bin 0 -> 437 bytes graphics/pokemon/aron/icon_gba.png | Bin 0 -> 262 bytes graphics/pokemon/aron/normal_gba.pal | 19 + graphics/pokemon/aron/shiny_gba.pal | 19 + graphics/pokemon/articuno/anim_front_gba.png | Bin 0 -> 1935 bytes graphics/pokemon/articuno/back_gba.png | Bin 0 -> 504 bytes graphics/pokemon/articuno/icon_gba.png | Bin 0 -> 384 bytes graphics/pokemon/articuno/normal_gba.pal | 19 + graphics/pokemon/articuno/shiny_gba.pal | 19 + graphics/pokemon/azumarill/anim_front_gba.png | Bin 0 -> 1070 bytes graphics/pokemon/azumarill/back_gba.png | Bin 0 -> 541 bytes graphics/pokemon/azumarill/icon_gba.png | Bin 0 -> 445 bytes graphics/pokemon/azumarill/normal_gba.pal | 19 + graphics/pokemon/azumarill/shiny_gba.pal | 19 + graphics/pokemon/azurill/anim_front_gba.png | Bin 0 -> 1007 bytes graphics/pokemon/azurill/back_gba.png | Bin 0 -> 601 bytes graphics/pokemon/azurill/icon_gba.png | Bin 0 -> 342 bytes graphics/pokemon/azurill/normal_gba.pal | 19 + graphics/pokemon/azurill/shiny_gba.pal | 19 + graphics/pokemon/bagon/anim_front_gba.png | Bin 0 -> 823 bytes graphics/pokemon/bagon/back_gba.png | Bin 0 -> 574 bytes graphics/pokemon/bagon/icon_gba.png | Bin 0 -> 359 bytes graphics/pokemon/bagon/normal_gba.pal | 19 + graphics/pokemon/bagon/shiny_gba.pal | 19 + graphics/pokemon/baltoy/anim_front_gba.png | Bin 0 -> 581 bytes graphics/pokemon/baltoy/back_gba.png | Bin 0 -> 517 bytes graphics/pokemon/baltoy/icon_gba.png | Bin 0 -> 279 bytes graphics/pokemon/baltoy/normal_gba.pal | 19 + graphics/pokemon/baltoy/shiny_gba.pal | 19 + graphics/pokemon/banette/anim_front_gba.png | Bin 0 -> 787 bytes graphics/pokemon/banette/back_gba.png | Bin 0 -> 503 bytes graphics/pokemon/banette/icon_gba.png | Bin 0 -> 321 bytes graphics/pokemon/banette/normal_gba.pal | 19 + graphics/pokemon/banette/shiny_gba.pal | 19 + graphics/pokemon/barboach/anim_front_gba.png | Bin 0 -> 936 bytes graphics/pokemon/barboach/back_gba.png | Bin 0 -> 551 bytes graphics/pokemon/barboach/icon_gba.png | Bin 0 -> 337 bytes graphics/pokemon/barboach/normal_gba.pal | 19 + graphics/pokemon/barboach/shiny_gba.pal | 19 + graphics/pokemon/bayleef/anim_front_gba.png | Bin 0 -> 1183 bytes graphics/pokemon/bayleef/back_gba.png | Bin 0 -> 737 bytes graphics/pokemon/bayleef/icon_gba.png | Bin 0 -> 427 bytes graphics/pokemon/bayleef/normal_gba.pal | 19 + graphics/pokemon/bayleef/shiny_gba.pal | 19 + graphics/pokemon/beautifly/anim_front_gba.png | Bin 0 -> 1081 bytes graphics/pokemon/beautifly/back_gba.png | Bin 0 -> 771 bytes graphics/pokemon/beautifly/icon_gba.png | Bin 0 -> 449 bytes graphics/pokemon/beautifly/normal_gba.pal | 19 + graphics/pokemon/beautifly/shiny_gba.pal | 19 + graphics/pokemon/beedrill/anim_front_gba.png | Bin 0 -> 1431 bytes graphics/pokemon/beedrill/back_gba.png | Bin 0 -> 734 bytes graphics/pokemon/beedrill/icon_gba.png | Bin 0 -> 437 bytes graphics/pokemon/beedrill/normal_gba.pal | 19 + graphics/pokemon/beedrill/shiny_gba.pal | 19 + graphics/pokemon/beldum/anim_front_gba.png | Bin 0 -> 723 bytes graphics/pokemon/beldum/back_gba.png | Bin 0 -> 575 bytes graphics/pokemon/beldum/icon_gba.png | Bin 0 -> 294 bytes graphics/pokemon/beldum/normal_gba.pal | 19 + graphics/pokemon/beldum/shiny_gba.pal | 19 + graphics/pokemon/bellossom/anim_front_gba.png | Bin 0 -> 837 bytes graphics/pokemon/bellossom/back_gba.png | Bin 0 -> 633 bytes graphics/pokemon/bellossom/icon_gba.png | Bin 0 -> 363 bytes graphics/pokemon/bellossom/normal_gba.pal | 19 + graphics/pokemon/bellossom/shiny_gba.pal | 19 + .../pokemon/bellsprout/anim_front_gba.png | Bin 0 -> 889 bytes graphics/pokemon/bellsprout/back_gba.png | Bin 0 -> 529 bytes graphics/pokemon/bellsprout/icon_gba.png | Bin 0 -> 252 bytes graphics/pokemon/bellsprout/normal_gba.pal | 19 + graphics/pokemon/bellsprout/shiny_gba.pal | 19 + graphics/pokemon/blastoise/anim_front_gba.png | Bin 0 -> 1818 bytes graphics/pokemon/blastoise/back_gba.png | Bin 0 -> 860 bytes graphics/pokemon/blastoise/icon_gba.png | Bin 0 -> 397 bytes graphics/pokemon/blastoise/normal_gba.pal | 19 + graphics/pokemon/blastoise/shiny_gba.pal | 19 + graphics/pokemon/blaziken/anim_front_gba.png | Bin 0 -> 1484 bytes graphics/pokemon/blaziken/back_gba.png | Bin 0 -> 835 bytes graphics/pokemon/blaziken/icon_gba.png | Bin 0 -> 448 bytes graphics/pokemon/blaziken/normal_gba.pal | 19 + graphics/pokemon/blaziken/shiny_gba.pal | 19 + graphics/pokemon/blissey/anim_front_gba.png | Bin 0 -> 1296 bytes graphics/pokemon/blissey/back_gba.png | Bin 0 -> 566 bytes graphics/pokemon/blissey/icon_gba.png | Bin 0 -> 406 bytes graphics/pokemon/blissey/normal_gba.pal | 19 + graphics/pokemon/blissey/shiny_gba.pal | 19 + graphics/pokemon/breloom/anim_front_gba.png | Bin 0 -> 1188 bytes graphics/pokemon/breloom/back_gba.png | Bin 0 -> 825 bytes graphics/pokemon/breloom/icon_gba.png | Bin 0 -> 321 bytes graphics/pokemon/breloom/normal_gba.pal | 19 + graphics/pokemon/breloom/shiny_gba.pal | 19 + graphics/pokemon/bulbasaur/anim_front_gba.png | Bin 0 -> 809 bytes graphics/pokemon/bulbasaur/back_gba.png | Bin 0 -> 540 bytes graphics/pokemon/bulbasaur/icon_gba.png | Bin 0 -> 316 bytes graphics/pokemon/bulbasaur/normal_gba.pal | 19 + graphics/pokemon/bulbasaur/shiny_gba.pal | 19 + .../pokemon/butterfree/anim_front_gba.png | Bin 0 -> 1151 bytes graphics/pokemon/butterfree/back_gba.png | Bin 0 -> 850 bytes graphics/pokemon/butterfree/icon_gba.png | Bin 0 -> 421 bytes graphics/pokemon/butterfree/normal_gba.pal | 19 + graphics/pokemon/butterfree/shiny_gba.pal | 19 + graphics/pokemon/cacnea/anim_front_gba.png | Bin 0 -> 920 bytes graphics/pokemon/cacnea/back_gba.png | Bin 0 -> 713 bytes graphics/pokemon/cacnea/icon_gba.png | Bin 0 -> 370 bytes graphics/pokemon/cacnea/normal_gba.pal | 19 + graphics/pokemon/cacnea/shiny_gba.pal | 19 + graphics/pokemon/cacturne/anim_front_gba.png | Bin 0 -> 1370 bytes graphics/pokemon/cacturne/back_gba.png | Bin 0 -> 653 bytes graphics/pokemon/cacturne/icon_gba.png | Bin 0 -> 299 bytes graphics/pokemon/cacturne/normal_gba.pal | 19 + graphics/pokemon/cacturne/shiny_gba.pal | 19 + graphics/pokemon/camerupt/anim_front_gba.png | Bin 0 -> 1252 bytes graphics/pokemon/camerupt/back_gba.png | Bin 0 -> 527 bytes graphics/pokemon/camerupt/icon_gba.png | Bin 0 -> 404 bytes graphics/pokemon/camerupt/normal_gba.pal | 19 + graphics/pokemon/camerupt/shiny_gba.pal | 19 + graphics/pokemon/carvanha/anim_front_gba.png | Bin 0 -> 1217 bytes graphics/pokemon/carvanha/back_gba.png | Bin 0 -> 648 bytes graphics/pokemon/carvanha/icon_gba.png | Bin 0 -> 392 bytes graphics/pokemon/carvanha/normal_gba.pal | 19 + graphics/pokemon/carvanha/shiny_gba.pal | 19 + graphics/pokemon/cascoon/anim_front_gba.png | Bin 0 -> 559 bytes graphics/pokemon/cascoon/back_gba.png | Bin 0 -> 404 bytes graphics/pokemon/cascoon/icon_gba.png | Bin 0 -> 342 bytes graphics/pokemon/cascoon/normal_gba.pal | 19 + graphics/pokemon/cascoon/shiny_gba.pal | 19 + graphics/pokemon/caterpie/anim_front_gba.png | Bin 0 -> 761 bytes graphics/pokemon/caterpie/back_gba.png | Bin 0 -> 521 bytes graphics/pokemon/caterpie/icon_gba.png | Bin 0 -> 277 bytes graphics/pokemon/caterpie/normal_gba.pal | 19 + graphics/pokemon/caterpie/shiny_gba.pal | 19 + graphics/pokemon/celebi/anim_front_gba.png | Bin 0 -> 861 bytes graphics/pokemon/celebi/back_gba.png | Bin 0 -> 757 bytes graphics/pokemon/celebi/icon_gba.png | Bin 0 -> 330 bytes graphics/pokemon/celebi/normal_gba.pal | 19 + graphics/pokemon/celebi/shiny_gba.pal | 19 + graphics/pokemon/chansey/anim_front_gba.png | Bin 0 -> 1018 bytes graphics/pokemon/chansey/back_gba.png | Bin 0 -> 552 bytes graphics/pokemon/chansey/icon_gba.png | Bin 0 -> 317 bytes graphics/pokemon/chansey/normal_gba.pal | 19 + graphics/pokemon/chansey/shiny_gba.pal | 19 + graphics/pokemon/charizard/anim_front_gba.png | Bin 0 -> 2039 bytes graphics/pokemon/charizard/back_gba.png | Bin 0 -> 829 bytes graphics/pokemon/charizard/icon_gba.png | Bin 0 -> 462 bytes graphics/pokemon/charizard/normal_gba.pal | 19 + graphics/pokemon/charizard/shiny_gba.pal | 19 + .../pokemon/charmander/anim_front_gba.png | Bin 0 -> 873 bytes graphics/pokemon/charmander/back_gba.png | Bin 0 -> 521 bytes graphics/pokemon/charmander/icon_gba.png | Bin 0 -> 303 bytes graphics/pokemon/charmander/normal_gba.pal | 19 + graphics/pokemon/charmander/shiny_gba.pal | 19 + .../pokemon/charmeleon/anim_front_gba.png | Bin 0 -> 1386 bytes graphics/pokemon/charmeleon/back_gba.png | Bin 0 -> 583 bytes graphics/pokemon/charmeleon/icon_gba.png | Bin 0 -> 412 bytes graphics/pokemon/charmeleon/normal_gba.pal | 19 + graphics/pokemon/charmeleon/shiny_gba.pal | 19 + graphics/pokemon/chikorita/anim_front_gba.png | Bin 0 -> 797 bytes graphics/pokemon/chikorita/back_gba.png | Bin 0 -> 569 bytes graphics/pokemon/chikorita/icon_gba.png | Bin 0 -> 334 bytes graphics/pokemon/chikorita/normal_gba.pal | 19 + graphics/pokemon/chikorita/shiny_gba.pal | 19 + graphics/pokemon/chimecho/anim_front_gba.png | Bin 0 -> 719 bytes graphics/pokemon/chimecho/back_gba.png | Bin 0 -> 507 bytes graphics/pokemon/chimecho/icon_gba.png | Bin 0 -> 258 bytes graphics/pokemon/chimecho/normal_gba.pal | 19 + graphics/pokemon/chimecho/shiny_gba.pal | 19 + graphics/pokemon/chinchou/anim_front_gba.png | Bin 0 -> 962 bytes graphics/pokemon/chinchou/back_gba.png | Bin 0 -> 637 bytes graphics/pokemon/chinchou/icon_gba.png | Bin 0 -> 378 bytes graphics/pokemon/chinchou/normal_gba.pal | 19 + graphics/pokemon/chinchou/shiny_gba.pal | 19 + graphics/pokemon/clamperl/anim_front_gba.png | Bin 0 -> 860 bytes graphics/pokemon/clamperl/back_gba.png | Bin 0 -> 475 bytes graphics/pokemon/clamperl/icon_gba.png | Bin 0 -> 345 bytes graphics/pokemon/clamperl/normal_gba.pal | 19 + graphics/pokemon/clamperl/shiny_gba.pal | 19 + graphics/pokemon/claydol/anim_front_gba.png | Bin 0 -> 1270 bytes graphics/pokemon/claydol/back_gba.png | Bin 0 -> 774 bytes graphics/pokemon/claydol/icon_gba.png | Bin 0 -> 331 bytes graphics/pokemon/claydol/normal_gba.pal | 19 + graphics/pokemon/claydol/shiny_gba.pal | 19 + graphics/pokemon/clefable/anim_front_gba.png | Bin 0 -> 1065 bytes graphics/pokemon/clefable/back_gba.png | Bin 0 -> 638 bytes graphics/pokemon/clefable/icon_gba.png | Bin 0 -> 339 bytes graphics/pokemon/clefable/normal_gba.pal | 19 + graphics/pokemon/clefable/shiny_gba.pal | 19 + graphics/pokemon/clefairy/anim_front_gba.png | Bin 0 -> 814 bytes graphics/pokemon/clefairy/back_gba.png | Bin 0 -> 561 bytes graphics/pokemon/clefairy/icon_gba.png | Bin 0 -> 305 bytes graphics/pokemon/clefairy/normal_gba.pal | 19 + graphics/pokemon/clefairy/shiny_gba.pal | 19 + graphics/pokemon/cleffa/anim_front_gba.png | Bin 0 -> 606 bytes graphics/pokemon/cleffa/back_gba.png | Bin 0 -> 461 bytes graphics/pokemon/cleffa/icon_gba.png | Bin 0 -> 302 bytes graphics/pokemon/cleffa/normal_gba.pal | 19 + graphics/pokemon/cleffa/shiny_gba.pal | 19 + graphics/pokemon/cloyster/anim_front_gba.png | Bin 0 -> 1453 bytes graphics/pokemon/cloyster/back_gba.png | Bin 0 -> 769 bytes graphics/pokemon/cloyster/icon_gba.png | Bin 0 -> 507 bytes graphics/pokemon/cloyster/normal_gba.pal | 19 + graphics/pokemon/cloyster/shiny_gba.pal | 19 + graphics/pokemon/combusken/anim_front_gba.png | Bin 0 -> 1577 bytes graphics/pokemon/combusken/back_gba.png | Bin 0 -> 812 bytes graphics/pokemon/combusken/icon_gba.png | Bin 0 -> 351 bytes graphics/pokemon/combusken/normal_gba.pal | 19 + graphics/pokemon/combusken/shiny_gba.pal | 19 + graphics/pokemon/corphish/anim_front_gba.png | Bin 0 -> 967 bytes graphics/pokemon/corphish/back_gba.png | Bin 0 -> 662 bytes graphics/pokemon/corphish/icon_gba.png | Bin 0 -> 286 bytes graphics/pokemon/corphish/normal_gba.pal | 19 + graphics/pokemon/corphish/shiny_gba.pal | 19 + graphics/pokemon/corsola/anim_front_gba.png | Bin 0 -> 980 bytes graphics/pokemon/corsola/back_gba.png | Bin 0 -> 525 bytes graphics/pokemon/corsola/icon_gba.png | Bin 0 -> 365 bytes graphics/pokemon/corsola/normal_gba.pal | 19 + graphics/pokemon/corsola/shiny_gba.pal | 19 + graphics/pokemon/cradily/anim_front_gba.png | Bin 0 -> 1342 bytes graphics/pokemon/cradily/back_gba.png | Bin 0 -> 824 bytes graphics/pokemon/cradily/icon_gba.png | Bin 0 -> 452 bytes graphics/pokemon/cradily/normal_gba.pal | 19 + graphics/pokemon/cradily/shiny_gba.pal | 19 + graphics/pokemon/crawdaunt/anim_front_gba.png | Bin 0 -> 1483 bytes graphics/pokemon/crawdaunt/back_gba.png | Bin 0 -> 787 bytes graphics/pokemon/crawdaunt/icon_gba.png | Bin 0 -> 402 bytes graphics/pokemon/crawdaunt/normal_gba.pal | 19 + graphics/pokemon/crawdaunt/shiny_gba.pal | 19 + graphics/pokemon/crobat/anim_front_gba.png | Bin 0 -> 1132 bytes graphics/pokemon/crobat/back_gba.png | Bin 0 -> 600 bytes graphics/pokemon/crobat/icon_gba.png | Bin 0 -> 422 bytes graphics/pokemon/crobat/normal_gba.pal | 19 + graphics/pokemon/crobat/shiny_gba.pal | 19 + graphics/pokemon/croconaw/anim_front_gba.png | Bin 0 -> 1225 bytes graphics/pokemon/croconaw/back_gba.png | Bin 0 -> 709 bytes graphics/pokemon/croconaw/icon_gba.png | Bin 0 -> 356 bytes graphics/pokemon/croconaw/normal_gba.pal | 19 + graphics/pokemon/croconaw/shiny_gba.pal | 19 + graphics/pokemon/cubone/anim_front_gba.png | Bin 0 -> 841 bytes graphics/pokemon/cubone/back_gba.png | Bin 0 -> 673 bytes graphics/pokemon/cubone/icon_gba.png | Bin 0 -> 350 bytes graphics/pokemon/cubone/normal_gba.pal | 19 + graphics/pokemon/cubone/shiny_gba.pal | 19 + graphics/pokemon/cyndaquil/anim_front_gba.png | Bin 0 -> 869 bytes graphics/pokemon/cyndaquil/back_gba.png | Bin 0 -> 670 bytes graphics/pokemon/cyndaquil/icon_gba.png | Bin 0 -> 360 bytes graphics/pokemon/cyndaquil/normal_gba.pal | 19 + graphics/pokemon/cyndaquil/shiny_gba.pal | 19 + graphics/pokemon/delcatty/anim_front_gba.png | Bin 0 -> 1241 bytes graphics/pokemon/delcatty/back_gba.png | Bin 0 -> 737 bytes graphics/pokemon/delcatty/icon_gba.png | Bin 0 -> 420 bytes graphics/pokemon/delcatty/normal_gba.pal | 19 + graphics/pokemon/delcatty/shiny_gba.pal | 19 + graphics/pokemon/delibird/anim_front_gba.png | Bin 0 -> 1198 bytes graphics/pokemon/delibird/back_gba.png | Bin 0 -> 786 bytes graphics/pokemon/delibird/icon_gba.png | Bin 0 -> 357 bytes graphics/pokemon/delibird/normal_gba.pal | 19 + graphics/pokemon/delibird/shiny_gba.pal | 19 + graphics/pokemon/deoxys/anim_front_gba.png | Bin 0 -> 1527 bytes graphics/pokemon/deoxys/back_gba.png | Bin 0 -> 1190 bytes graphics/pokemon/deoxys/icon_gba.png | Bin 0 -> 430 bytes graphics/pokemon/deoxys/normal_gba.pal | 19 + graphics/pokemon/deoxys/shiny_gba.pal | 19 + graphics/pokemon/dewgong/anim_front_gba.png | Bin 0 -> 1304 bytes graphics/pokemon/dewgong/back_gba.png | Bin 0 -> 523 bytes graphics/pokemon/dewgong/icon_gba.png | Bin 0 -> 415 bytes graphics/pokemon/dewgong/normal_gba.pal | 19 + graphics/pokemon/dewgong/shiny_gba.pal | 19 + graphics/pokemon/diglett/anim_front_gba.png | Bin 0 -> 627 bytes graphics/pokemon/diglett/back_gba.png | Bin 0 -> 409 bytes graphics/pokemon/diglett/icon_gba.png | Bin 0 -> 249 bytes graphics/pokemon/diglett/normal_gba.pal | 19 + graphics/pokemon/diglett/shiny_gba.pal | 19 + graphics/pokemon/ditto/anim_front_gba.png | Bin 0 -> 572 bytes graphics/pokemon/ditto/back_gba.png | Bin 0 -> 399 bytes graphics/pokemon/ditto/icon_gba.png | Bin 0 -> 270 bytes graphics/pokemon/ditto/normal_gba.pal | 19 + graphics/pokemon/ditto/shiny_gba.pal | 19 + graphics/pokemon/dodrio/anim_front_gba.png | Bin 0 -> 1876 bytes graphics/pokemon/dodrio/back_gba.png | Bin 0 -> 910 bytes graphics/pokemon/dodrio/icon_gba.png | Bin 0 -> 446 bytes graphics/pokemon/dodrio/normal_gba.pal | 19 + graphics/pokemon/dodrio/shiny_gba.pal | 19 + graphics/pokemon/doduo/anim_front_gba.png | Bin 0 -> 1129 bytes graphics/pokemon/doduo/back_gba.png | Bin 0 -> 651 bytes graphics/pokemon/doduo/icon_gba.png | Bin 0 -> 351 bytes graphics/pokemon/doduo/normal_gba.pal | 19 + graphics/pokemon/doduo/shiny_gba.pal | 19 + graphics/pokemon/donphan/anim_front_gba.png | Bin 0 -> 1356 bytes graphics/pokemon/donphan/back_gba.png | Bin 0 -> 571 bytes graphics/pokemon/donphan/icon_gba.png | Bin 0 -> 471 bytes graphics/pokemon/donphan/normal_gba.pal | 19 + graphics/pokemon/donphan/shiny_gba.pal | 19 + graphics/pokemon/dragonair/anim_front_gba.png | Bin 0 -> 1296 bytes graphics/pokemon/dragonair/back_gba.png | Bin 0 -> 672 bytes graphics/pokemon/dragonair/icon_gba.png | Bin 0 -> 383 bytes graphics/pokemon/dragonair/normal_gba.pal | 19 + graphics/pokemon/dragonair/shiny_gba.pal | 19 + graphics/pokemon/dragonite/anim_front_gba.png | Bin 0 -> 1895 bytes graphics/pokemon/dragonite/back_gba.png | Bin 0 -> 622 bytes graphics/pokemon/dragonite/icon_gba.png | Bin 0 -> 414 bytes graphics/pokemon/dragonite/normal_gba.pal | 19 + graphics/pokemon/dragonite/shiny_gba.pal | 19 + graphics/pokemon/dratini/anim_front_gba.png | Bin 0 -> 928 bytes graphics/pokemon/dratini/back_gba.png | Bin 0 -> 525 bytes graphics/pokemon/dratini/icon_gba.png | Bin 0 -> 334 bytes graphics/pokemon/dratini/normal_gba.pal | 19 + graphics/pokemon/dratini/shiny_gba.pal | 19 + graphics/pokemon/drowzee/anim_front_gba.png | Bin 0 -> 1082 bytes graphics/pokemon/drowzee/back_gba.png | Bin 0 -> 452 bytes graphics/pokemon/drowzee/icon_gba.png | Bin 0 -> 416 bytes graphics/pokemon/drowzee/normal_gba.pal | 19 + graphics/pokemon/drowzee/shiny_gba.pal | 19 + graphics/pokemon/dugtrio/anim_front_gba.png | Bin 0 -> 835 bytes graphics/pokemon/dugtrio/back_gba.png | Bin 0 -> 541 bytes graphics/pokemon/dugtrio/icon_gba.png | Bin 0 -> 296 bytes graphics/pokemon/dugtrio/normal_gba.pal | 19 + graphics/pokemon/dugtrio/shiny_gba.pal | 19 + graphics/pokemon/dunsparce/anim_front_gba.png | Bin 0 -> 1002 bytes graphics/pokemon/dunsparce/back_gba.png | Bin 0 -> 593 bytes graphics/pokemon/dunsparce/icon_gba.png | Bin 0 -> 341 bytes graphics/pokemon/dunsparce/normal_gba.pal | 19 + graphics/pokemon/dunsparce/shiny_gba.pal | 19 + graphics/pokemon/dusclops/anim_front_gba.png | Bin 0 -> 1275 bytes graphics/pokemon/dusclops/back_gba.png | Bin 0 -> 559 bytes graphics/pokemon/dusclops/icon_gba.png | Bin 0 -> 344 bytes graphics/pokemon/dusclops/normal_gba.pal | 19 + graphics/pokemon/dusclops/shiny_gba.pal | 19 + graphics/pokemon/duskull/anim_front_gba.png | Bin 0 -> 999 bytes graphics/pokemon/duskull/back_gba.png | Bin 0 -> 537 bytes graphics/pokemon/duskull/icon_gba.png | Bin 0 -> 294 bytes graphics/pokemon/duskull/normal_gba.pal | 19 + graphics/pokemon/duskull/shiny_gba.pal | 19 + graphics/pokemon/dustox/anim_front_gba.png | Bin 0 -> 1195 bytes graphics/pokemon/dustox/back_gba.png | Bin 0 -> 481 bytes graphics/pokemon/dustox/icon_gba.png | Bin 0 -> 428 bytes graphics/pokemon/dustox/normal_gba.pal | 19 + graphics/pokemon/dustox/shiny_gba.pal | 19 + graphics/pokemon/eevee/anim_front_gba.png | Bin 0 -> 907 bytes graphics/pokemon/eevee/back_gba.png | Bin 0 -> 641 bytes graphics/pokemon/eevee/icon_gba.png | Bin 0 -> 296 bytes graphics/pokemon/eevee/normal_gba.pal | 19 + graphics/pokemon/eevee/shiny_gba.pal | 19 + graphics/pokemon/egg/anim_front_gba.png | Bin 0 -> 358 bytes graphics/pokemon/egg/icon_gba.png | Bin 0 -> 310 bytes graphics/pokemon/egg/normal_gba.pal | 19 + graphics/pokemon/ekans/anim_front_gba.png | Bin 0 -> 1061 bytes graphics/pokemon/ekans/back_gba.png | Bin 0 -> 616 bytes graphics/pokemon/ekans/icon_gba.png | Bin 0 -> 333 bytes graphics/pokemon/ekans/normal_gba.pal | 19 + graphics/pokemon/ekans/shiny_gba.pal | 19 + .../pokemon/electabuzz/anim_front_gba.png | Bin 0 -> 1548 bytes graphics/pokemon/electabuzz/back_gba.png | Bin 0 -> 611 bytes graphics/pokemon/electabuzz/icon_gba.png | Bin 0 -> 321 bytes graphics/pokemon/electabuzz/normal_gba.pal | 19 + graphics/pokemon/electabuzz/shiny_gba.pal | 19 + graphics/pokemon/electrike/anim_front_gba.png | Bin 0 -> 809 bytes graphics/pokemon/electrike/back_gba.png | Bin 0 -> 499 bytes graphics/pokemon/electrike/icon_gba.png | Bin 0 -> 352 bytes graphics/pokemon/electrike/normal_gba.pal | 19 + graphics/pokemon/electrike/shiny_gba.pal | 19 + graphics/pokemon/electrode/anim_front_gba.png | Bin 0 -> 713 bytes graphics/pokemon/electrode/back_gba.png | Bin 0 -> 477 bytes graphics/pokemon/electrode/icon_gba.png | Bin 0 -> 245 bytes graphics/pokemon/electrode/normal_gba.pal | 19 + graphics/pokemon/electrode/shiny_gba.pal | 19 + graphics/pokemon/elekid/anim_front_gba.png | Bin 0 -> 1041 bytes graphics/pokemon/elekid/back_gba.png | Bin 0 -> 660 bytes graphics/pokemon/elekid/icon_gba.png | Bin 0 -> 327 bytes graphics/pokemon/elekid/normal_gba.pal | 19 + graphics/pokemon/elekid/shiny_gba.pal | 19 + graphics/pokemon/entei/anim_front_gba.png | Bin 0 -> 1774 bytes graphics/pokemon/entei/back_gba.png | Bin 0 -> 859 bytes graphics/pokemon/entei/icon_gba.png | Bin 0 -> 453 bytes graphics/pokemon/entei/normal_gba.pal | 19 + graphics/pokemon/entei/shiny_gba.pal | 19 + graphics/pokemon/espeon/anim_front_gba.png | Bin 0 -> 1111 bytes graphics/pokemon/espeon/back_gba.png | Bin 0 -> 554 bytes graphics/pokemon/espeon/icon_gba.png | Bin 0 -> 354 bytes graphics/pokemon/espeon/normal_gba.pal | 19 + graphics/pokemon/espeon/shiny_gba.pal | 19 + graphics/pokemon/exeggcute/anim_front_gba.png | Bin 0 -> 1234 bytes graphics/pokemon/exeggcute/back_gba.png | Bin 0 -> 597 bytes graphics/pokemon/exeggcute/icon_gba.png | Bin 0 -> 383 bytes graphics/pokemon/exeggcute/normal_gba.pal | 19 + graphics/pokemon/exeggcute/shiny_gba.pal | 19 + graphics/pokemon/exeggutor/anim_front_gba.png | Bin 0 -> 1637 bytes graphics/pokemon/exeggutor/back_gba.png | Bin 0 -> 946 bytes graphics/pokemon/exeggutor/icon_gba.png | Bin 0 -> 368 bytes graphics/pokemon/exeggutor/normal_gba.pal | 19 + graphics/pokemon/exeggutor/shiny_gba.pal | 19 + graphics/pokemon/exploud/anim_front_gba.png | Bin 0 -> 2048 bytes graphics/pokemon/exploud/back_gba.png | Bin 0 -> 838 bytes graphics/pokemon/exploud/icon_gba.png | Bin 0 -> 447 bytes graphics/pokemon/exploud/normal_gba.pal | 19 + graphics/pokemon/exploud/shiny_gba.pal | 19 + graphics/pokemon/farfetchd/anim_front_gba.png | Bin 0 -> 1032 bytes graphics/pokemon/farfetchd/back_gba.png | Bin 0 -> 696 bytes graphics/pokemon/farfetchd/icon_gba.png | Bin 0 -> 396 bytes graphics/pokemon/farfetchd/normal_gba.pal | 19 + graphics/pokemon/farfetchd/shiny_gba.pal | 19 + graphics/pokemon/fearow/anim_front_gba.png | Bin 0 -> 1578 bytes graphics/pokemon/fearow/back_gba.png | Bin 0 -> 635 bytes graphics/pokemon/fearow/icon_gba.png | Bin 0 -> 465 bytes graphics/pokemon/fearow/normal_gba.pal | 19 + graphics/pokemon/fearow/shiny_gba.pal | 19 + graphics/pokemon/feebas/anim_front_gba.png | Bin 0 -> 913 bytes graphics/pokemon/feebas/back_gba.png | Bin 0 -> 666 bytes graphics/pokemon/feebas/icon_gba.png | Bin 0 -> 359 bytes graphics/pokemon/feebas/normal_gba.pal | 19 + graphics/pokemon/feebas/shiny_gba.pal | 19 + .../pokemon/feraligatr/anim_front_gba.png | Bin 0 -> 1853 bytes graphics/pokemon/feraligatr/back_gba.png | Bin 0 -> 999 bytes graphics/pokemon/feraligatr/icon_gba.png | Bin 0 -> 488 bytes graphics/pokemon/feraligatr/normal_gba.pal | 19 + graphics/pokemon/feraligatr/shiny_gba.pal | 19 + graphics/pokemon/flaaffy/anim_front_gba.png | Bin 0 -> 945 bytes graphics/pokemon/flaaffy/back_gba.png | Bin 0 -> 663 bytes graphics/pokemon/flaaffy/icon_gba.png | Bin 0 -> 376 bytes graphics/pokemon/flaaffy/normal_gba.pal | 19 + graphics/pokemon/flaaffy/shiny_gba.pal | 19 + graphics/pokemon/flareon/anim_front_gba.png | Bin 0 -> 1156 bytes graphics/pokemon/flareon/back_gba.png | Bin 0 -> 709 bytes graphics/pokemon/flareon/icon_gba.png | Bin 0 -> 380 bytes graphics/pokemon/flareon/normal_gba.pal | 19 + graphics/pokemon/flareon/shiny_gba.pal | 19 + graphics/pokemon/flygon/anim_front_gba.png | Bin 0 -> 1752 bytes graphics/pokemon/flygon/back_gba.png | Bin 0 -> 888 bytes graphics/pokemon/flygon/icon_gba.png | Bin 0 -> 411 bytes graphics/pokemon/flygon/normal_gba.pal | 19 + graphics/pokemon/flygon/shiny_gba.pal | 19 + .../pokemon/forretress/anim_front_gba.png | Bin 0 -> 1095 bytes graphics/pokemon/forretress/back_gba.png | Bin 0 -> 525 bytes graphics/pokemon/forretress/icon_gba.png | Bin 0 -> 332 bytes graphics/pokemon/forretress/normal_gba.pal | 19 + graphics/pokemon/forretress/shiny_gba.pal | 19 + graphics/pokemon/furret/anim_front_gba.png | Bin 0 -> 1122 bytes graphics/pokemon/furret/back_gba.png | Bin 0 -> 660 bytes graphics/pokemon/furret/icon_gba.png | Bin 0 -> 401 bytes graphics/pokemon/furret/normal_gba.pal | 19 + graphics/pokemon/furret/shiny_gba.pal | 19 + graphics/pokemon/gardevoir/anim_front_gba.png | Bin 0 -> 986 bytes graphics/pokemon/gardevoir/back_gba.png | Bin 0 -> 674 bytes graphics/pokemon/gardevoir/icon_gba.png | Bin 0 -> 386 bytes graphics/pokemon/gardevoir/normal_gba.pal | 19 + graphics/pokemon/gardevoir/shiny_gba.pal | 19 + graphics/pokemon/gastly/anim_front_gba.png | Bin 0 -> 1339 bytes graphics/pokemon/gastly/back_gba.png | Bin 0 -> 613 bytes graphics/pokemon/gastly/icon_gba.png | Bin 0 -> 442 bytes graphics/pokemon/gastly/normal_gba.pal | 19 + graphics/pokemon/gastly/shiny_gba.pal | 19 + graphics/pokemon/gengar/anim_front_gba.png | Bin 0 -> 1286 bytes graphics/pokemon/gengar/back_gba.png | Bin 0 -> 605 bytes graphics/pokemon/gengar/icon_gba.png | Bin 0 -> 382 bytes graphics/pokemon/gengar/normal_gba.pal | 19 + graphics/pokemon/gengar/shiny_gba.pal | 19 + graphics/pokemon/geodude/anim_front_gba.png | Bin 0 -> 733 bytes graphics/pokemon/geodude/back_gba.png | Bin 0 -> 506 bytes graphics/pokemon/geodude/icon_gba.png | Bin 0 -> 304 bytes graphics/pokemon/geodude/normal_gba.pal | 19 + graphics/pokemon/geodude/shiny_gba.pal | 19 + graphics/pokemon/girafarig/anim_front_gba.png | Bin 0 -> 1504 bytes graphics/pokemon/girafarig/back_gba.png | Bin 0 -> 769 bytes graphics/pokemon/girafarig/icon_gba.png | Bin 0 -> 370 bytes graphics/pokemon/girafarig/normal_gba.pal | 19 + graphics/pokemon/girafarig/shiny_gba.pal | 19 + graphics/pokemon/glalie/anim_front_gba.png | Bin 0 -> 1349 bytes graphics/pokemon/glalie/back_gba.png | Bin 0 -> 701 bytes graphics/pokemon/glalie/icon_gba.png | Bin 0 -> 305 bytes graphics/pokemon/glalie/normal_gba.pal | 19 + graphics/pokemon/glalie/shiny_gba.pal | 19 + graphics/pokemon/gligar/anim_front_gba.png | Bin 0 -> 1479 bytes graphics/pokemon/gligar/back_gba.png | Bin 0 -> 768 bytes graphics/pokemon/gligar/icon_gba.png | Bin 0 -> 425 bytes graphics/pokemon/gligar/normal_gba.pal | 19 + graphics/pokemon/gligar/shiny_gba.pal | 19 + graphics/pokemon/gloom/anim_front_gba.png | Bin 0 -> 1215 bytes graphics/pokemon/gloom/back_gba.png | Bin 0 -> 710 bytes graphics/pokemon/gloom/icon_gba.png | Bin 0 -> 313 bytes graphics/pokemon/gloom/normal_gba.pal | 19 + graphics/pokemon/gloom/shiny_gba.pal | 19 + graphics/pokemon/golbat/anim_front_gba.png | Bin 0 -> 1123 bytes graphics/pokemon/golbat/back_gba.png | Bin 0 -> 561 bytes graphics/pokemon/golbat/icon_gba.png | Bin 0 -> 355 bytes graphics/pokemon/golbat/normal_gba.pal | 19 + graphics/pokemon/golbat/shiny_gba.pal | 19 + graphics/pokemon/goldeen/anim_front_gba.png | Bin 0 -> 1150 bytes graphics/pokemon/goldeen/back_gba.png | Bin 0 -> 700 bytes graphics/pokemon/goldeen/icon_gba.png | Bin 0 -> 354 bytes graphics/pokemon/goldeen/normal_gba.pal | 19 + graphics/pokemon/goldeen/shiny_gba.pal | 19 + graphics/pokemon/golduck/anim_front_gba.png | Bin 0 -> 1234 bytes graphics/pokemon/golduck/back_gba.png | Bin 0 -> 630 bytes graphics/pokemon/golduck/icon_gba.png | Bin 0 -> 351 bytes graphics/pokemon/golduck/normal_gba.pal | 19 + graphics/pokemon/golduck/shiny_gba.pal | 19 + graphics/pokemon/golem/anim_front_gba.png | Bin 0 -> 1295 bytes graphics/pokemon/golem/back_gba.png | Bin 0 -> 510 bytes graphics/pokemon/golem/footprint_gba.png | Bin 0 -> 114 bytes graphics/pokemon/golem/icon_gba.png | Bin 0 -> 395 bytes graphics/pokemon/golem/normal_gba.pal | 19 + graphics/pokemon/golem/shiny_gba.pal | 19 + graphics/pokemon/gorebyss/anim_front_gba.png | Bin 0 -> 1091 bytes graphics/pokemon/gorebyss/back_gba.png | Bin 0 -> 560 bytes graphics/pokemon/gorebyss/icon_gba.png | Bin 0 -> 382 bytes graphics/pokemon/gorebyss/normal_gba.pal | 19 + graphics/pokemon/gorebyss/shiny_gba.pal | 19 + graphics/pokemon/granbull/anim_front_gba.png | Bin 0 -> 1268 bytes graphics/pokemon/granbull/back_gba.png | Bin 0 -> 627 bytes graphics/pokemon/granbull/icon_gba.png | Bin 0 -> 352 bytes graphics/pokemon/granbull/normal_gba.pal | 19 + graphics/pokemon/granbull/shiny_gba.pal | 19 + graphics/pokemon/graveler/anim_front_gba.png | Bin 0 -> 1087 bytes graphics/pokemon/graveler/back_gba.png | Bin 0 -> 490 bytes graphics/pokemon/graveler/icon_gba.png | Bin 0 -> 366 bytes graphics/pokemon/graveler/normal_gba.pal | 19 + graphics/pokemon/graveler/shiny_gba.pal | 19 + graphics/pokemon/grimer/anim_front_gba.png | Bin 0 -> 985 bytes graphics/pokemon/grimer/back_gba.png | Bin 0 -> 568 bytes graphics/pokemon/grimer/icon_gba.png | Bin 0 -> 356 bytes graphics/pokemon/grimer/normal_gba.pal | 19 + graphics/pokemon/grimer/shiny_gba.pal | 19 + graphics/pokemon/groudon/anim_front_gba.png | Bin 0 -> 2050 bytes graphics/pokemon/groudon/back_gba.png | Bin 0 -> 890 bytes graphics/pokemon/groudon/icon_gba.png | Bin 0 -> 377 bytes graphics/pokemon/groudon/normal_gba.pal | 19 + graphics/pokemon/groudon/shiny_gba.pal | 19 + graphics/pokemon/grovyle/anim_front_gba.png | Bin 0 -> 1676 bytes graphics/pokemon/grovyle/back_gba.png | Bin 0 -> 657 bytes graphics/pokemon/grovyle/icon_gba.png | Bin 0 -> 363 bytes graphics/pokemon/grovyle/normal_gba.pal | 19 + graphics/pokemon/grovyle/shiny_gba.pal | 19 + graphics/pokemon/growlithe/anim_front_gba.png | Bin 0 -> 1142 bytes graphics/pokemon/growlithe/back_gba.png | Bin 0 -> 650 bytes graphics/pokemon/growlithe/icon_gba.png | Bin 0 -> 348 bytes graphics/pokemon/growlithe/normal_gba.pal | 19 + graphics/pokemon/growlithe/shiny_gba.pal | 19 + graphics/pokemon/grumpig/anim_front_gba.png | Bin 0 -> 1361 bytes graphics/pokemon/grumpig/back_gba.png | Bin 0 -> 727 bytes graphics/pokemon/grumpig/icon_gba.png | Bin 0 -> 329 bytes graphics/pokemon/grumpig/normal_gba.pal | 19 + graphics/pokemon/grumpig/shiny_gba.pal | 19 + graphics/pokemon/gulpin/anim_front_gba.png | Bin 0 -> 595 bytes graphics/pokemon/gulpin/back_gba.png | Bin 0 -> 497 bytes graphics/pokemon/gulpin/icon_gba.png | Bin 0 -> 293 bytes graphics/pokemon/gulpin/normal_gba.pal | 19 + graphics/pokemon/gulpin/shiny_gba.pal | 19 + graphics/pokemon/gyarados/anim_front_gba.png | Bin 0 -> 1834 bytes graphics/pokemon/gyarados/back_gba.png | Bin 0 -> 999 bytes graphics/pokemon/gyarados/icon_gba.png | Bin 0 -> 524 bytes graphics/pokemon/gyarados/normal_gba.pal | 19 + graphics/pokemon/gyarados/shiny_gba.pal | 19 + graphics/pokemon/hariyama/anim_front_gba.png | Bin 0 -> 1808 bytes graphics/pokemon/hariyama/back_gba.png | Bin 0 -> 780 bytes graphics/pokemon/hariyama/icon_gba.png | Bin 0 -> 387 bytes graphics/pokemon/hariyama/normal_gba.pal | 19 + graphics/pokemon/hariyama/shiny_gba.pal | 19 + graphics/pokemon/haunter/anim_front_gba.png | Bin 0 -> 1321 bytes graphics/pokemon/haunter/back_gba.png | Bin 0 -> 651 bytes graphics/pokemon/haunter/icon_gba.png | Bin 0 -> 485 bytes graphics/pokemon/haunter/normal_gba.pal | 19 + graphics/pokemon/haunter/shiny_gba.pal | 19 + graphics/pokemon/heracross/anim_front_gba.png | Bin 0 -> 1273 bytes graphics/pokemon/heracross/back_gba.png | Bin 0 -> 690 bytes graphics/pokemon/heracross/icon_gba.png | Bin 0 -> 370 bytes graphics/pokemon/heracross/normal_gba.pal | 19 + graphics/pokemon/heracross/shiny_gba.pal | 19 + .../pokemon/hitmonchan/anim_front_gba.png | Bin 0 -> 1152 bytes graphics/pokemon/hitmonchan/back_gba.png | Bin 0 -> 632 bytes graphics/pokemon/hitmonchan/icon_gba.png | Bin 0 -> 306 bytes graphics/pokemon/hitmonchan/normal_gba.pal | 19 + graphics/pokemon/hitmonchan/shiny_gba.pal | 19 + graphics/pokemon/hitmonlee/anim_front_gba.png | Bin 0 -> 1407 bytes graphics/pokemon/hitmonlee/back_gba.png | Bin 0 -> 534 bytes graphics/pokemon/hitmonlee/icon_gba.png | Bin 0 -> 335 bytes graphics/pokemon/hitmonlee/normal_gba.pal | 19 + graphics/pokemon/hitmonlee/shiny_gba.pal | 19 + graphics/pokemon/hitmontop/anim_front_gba.png | Bin 0 -> 1153 bytes graphics/pokemon/hitmontop/back_gba.png | Bin 0 -> 892 bytes graphics/pokemon/hitmontop/icon_gba.png | Bin 0 -> 477 bytes graphics/pokemon/hitmontop/normal_gba.pal | 19 + graphics/pokemon/hitmontop/shiny_gba.pal | 19 + graphics/pokemon/ho_oh/anim_front_gba.png | Bin 0 -> 2369 bytes graphics/pokemon/ho_oh/back_gba.png | Bin 0 -> 831 bytes graphics/pokemon/ho_oh/icon_gba.png | Bin 0 -> 480 bytes graphics/pokemon/ho_oh/normal_gba.pal | 19 + graphics/pokemon/ho_oh/shiny_gba.pal | 19 + graphics/pokemon/hoothoot/anim_front_gba.png | Bin 0 -> 659 bytes graphics/pokemon/hoothoot/back_gba.png | Bin 0 -> 618 bytes graphics/pokemon/hoothoot/icon_gba.png | Bin 0 -> 350 bytes graphics/pokemon/hoothoot/normal_gba.pal | 19 + graphics/pokemon/hoothoot/shiny_gba.pal | 19 + graphics/pokemon/hoppip/anim_front_gba.png | Bin 0 -> 857 bytes graphics/pokemon/hoppip/back_gba.png | Bin 0 -> 582 bytes graphics/pokemon/hoppip/icon_gba.png | Bin 0 -> 367 bytes graphics/pokemon/hoppip/normal_gba.pal | 19 + graphics/pokemon/hoppip/shiny_gba.pal | 19 + graphics/pokemon/horsea/anim_front_gba.png | Bin 0 -> 659 bytes graphics/pokemon/horsea/back_gba.png | Bin 0 -> 585 bytes graphics/pokemon/horsea/icon_gba.png | Bin 0 -> 354 bytes graphics/pokemon/horsea/normal_gba.pal | 19 + graphics/pokemon/horsea/shiny_gba.pal | 19 + graphics/pokemon/houndoom/anim_front_gba.png | Bin 0 -> 1439 bytes graphics/pokemon/houndoom/back_gba.png | Bin 0 -> 626 bytes graphics/pokemon/houndoom/icon_gba.png | Bin 0 -> 406 bytes graphics/pokemon/houndoom/normal_gba.pal | 19 + graphics/pokemon/houndoom/shiny_gba.pal | 19 + graphics/pokemon/houndour/anim_front_gba.png | Bin 0 -> 909 bytes graphics/pokemon/houndour/back_gba.png | Bin 0 -> 508 bytes graphics/pokemon/houndour/icon_gba.png | Bin 0 -> 358 bytes graphics/pokemon/houndour/normal_gba.pal | 19 + graphics/pokemon/houndour/shiny_gba.pal | 19 + graphics/pokemon/huntail/anim_front_gba.png | Bin 0 -> 1406 bytes graphics/pokemon/huntail/back_gba.png | Bin 0 -> 688 bytes graphics/pokemon/huntail/icon_gba.png | Bin 0 -> 419 bytes graphics/pokemon/huntail/normal_gba.pal | 19 + graphics/pokemon/huntail/shiny_gba.pal | 19 + graphics/pokemon/hypno/anim_front_gba.png | Bin 0 -> 1215 bytes graphics/pokemon/hypno/back_gba.png | Bin 0 -> 658 bytes graphics/pokemon/hypno/icon_gba.png | Bin 0 -> 391 bytes graphics/pokemon/hypno/normal_gba.pal | 19 + graphics/pokemon/hypno/shiny_gba.pal | 19 + graphics/pokemon/igglybuff/anim_front_gba.png | Bin 0 -> 532 bytes graphics/pokemon/igglybuff/back_gba.png | Bin 0 -> 443 bytes graphics/pokemon/igglybuff/icon_gba.png | Bin 0 -> 322 bytes graphics/pokemon/igglybuff/normal_gba.pal | 19 + graphics/pokemon/igglybuff/shiny_gba.pal | 19 + graphics/pokemon/illumise/anim_front_gba.png | Bin 0 -> 1224 bytes graphics/pokemon/illumise/back_gba.png | Bin 0 -> 663 bytes graphics/pokemon/illumise/icon_gba.png | Bin 0 -> 325 bytes graphics/pokemon/illumise/normal_gba.pal | 19 + graphics/pokemon/illumise/shiny_gba.pal | 19 + graphics/pokemon/ivysaur/anim_front_gba.png | Bin 0 -> 1222 bytes graphics/pokemon/ivysaur/back_gba.png | Bin 0 -> 718 bytes graphics/pokemon/ivysaur/icon_gba.png | Bin 0 -> 326 bytes graphics/pokemon/ivysaur/normal_gba.pal | 19 + graphics/pokemon/ivysaur/shiny_gba.pal | 19 + .../pokemon/jigglypuff/anim_front_gba.png | Bin 0 -> 786 bytes graphics/pokemon/jigglypuff/back_gba.png | Bin 0 -> 451 bytes graphics/pokemon/jigglypuff/icon_gba.png | Bin 0 -> 315 bytes graphics/pokemon/jigglypuff/normal_gba.pal | 19 + graphics/pokemon/jigglypuff/shiny_gba.pal | 19 + graphics/pokemon/jirachi/anim_front_gba.png | Bin 0 -> 973 bytes graphics/pokemon/jirachi/back_gba.png | Bin 0 -> 738 bytes graphics/pokemon/jirachi/icon_gba.png | Bin 0 -> 340 bytes graphics/pokemon/jirachi/normal_gba.pal | 19 + graphics/pokemon/jirachi/shiny_gba.pal | 19 + graphics/pokemon/jolteon/anim_front_gba.png | Bin 0 -> 1266 bytes graphics/pokemon/jolteon/back_gba.png | Bin 0 -> 726 bytes graphics/pokemon/jolteon/icon_gba.png | Bin 0 -> 324 bytes graphics/pokemon/jolteon/normal_gba.pal | 19 + graphics/pokemon/jolteon/shiny_gba.pal | 19 + graphics/pokemon/jumpluff/anim_front_gba.png | Bin 0 -> 1019 bytes graphics/pokemon/jumpluff/back_gba.png | Bin 0 -> 809 bytes graphics/pokemon/jumpluff/icon_gba.png | Bin 0 -> 398 bytes graphics/pokemon/jumpluff/normal_gba.pal | 19 + graphics/pokemon/jumpluff/shiny_gba.pal | 19 + graphics/pokemon/jynx/anim_front_gba.png | Bin 0 -> 1764 bytes graphics/pokemon/jynx/back_gba.png | Bin 0 -> 615 bytes graphics/pokemon/jynx/icon_gba.png | Bin 0 -> 378 bytes graphics/pokemon/jynx/normal_gba.pal | 19 + graphics/pokemon/jynx/shiny_gba.pal | 19 + graphics/pokemon/kabuto/anim_front_gba.png | Bin 0 -> 578 bytes graphics/pokemon/kabuto/back_gba.png | Bin 0 -> 499 bytes graphics/pokemon/kabuto/icon_gba.png | Bin 0 -> 264 bytes graphics/pokemon/kabuto/normal_gba.pal | 19 + graphics/pokemon/kabuto/shiny_gba.pal | 19 + graphics/pokemon/kabutops/anim_front_gba.png | Bin 0 -> 1400 bytes graphics/pokemon/kabutops/back_gba.png | Bin 0 -> 753 bytes graphics/pokemon/kabutops/icon_gba.png | Bin 0 -> 322 bytes graphics/pokemon/kabutops/normal_gba.pal | 19 + graphics/pokemon/kabutops/shiny_gba.pal | 19 + graphics/pokemon/kadabra/anim_front_gba.png | Bin 0 -> 1579 bytes graphics/pokemon/kadabra/back_gba.png | Bin 0 -> 792 bytes graphics/pokemon/kadabra/icon_gba.png | Bin 0 -> 432 bytes graphics/pokemon/kadabra/normal_gba.pal | 19 + graphics/pokemon/kadabra/shiny_gba.pal | 19 + graphics/pokemon/kakuna/anim_front_gba.png | Bin 0 -> 621 bytes graphics/pokemon/kakuna/back_gba.png | Bin 0 -> 490 bytes graphics/pokemon/kakuna/icon_gba.png | Bin 0 -> 266 bytes graphics/pokemon/kakuna/normal_gba.pal | 19 + graphics/pokemon/kakuna/shiny_gba.pal | 19 + .../pokemon/kangaskhan/anim_front_gba.png | Bin 0 -> 1739 bytes graphics/pokemon/kangaskhan/back_gba.png | Bin 0 -> 881 bytes graphics/pokemon/kangaskhan/icon_gba.png | Bin 0 -> 389 bytes graphics/pokemon/kangaskhan/normal_gba.pal | 19 + graphics/pokemon/kangaskhan/shiny_gba.pal | 19 + graphics/pokemon/kecleon/anim_front_gba.png | Bin 0 -> 1252 bytes graphics/pokemon/kecleon/back_gba.png | Bin 0 -> 818 bytes graphics/pokemon/kecleon/icon_gba.png | Bin 0 -> 384 bytes graphics/pokemon/kecleon/normal_gba.pal | 19 + graphics/pokemon/kecleon/shiny_gba.pal | 19 + graphics/pokemon/kingdra/anim_front_gba.png | Bin 0 -> 1478 bytes graphics/pokemon/kingdra/back_gba.png | Bin 0 -> 743 bytes graphics/pokemon/kingdra/icon_gba.png | Bin 0 -> 385 bytes graphics/pokemon/kingdra/normal_gba.pal | 19 + graphics/pokemon/kingdra/shiny_gba.pal | 19 + graphics/pokemon/kingler/anim_front_gba.png | Bin 0 -> 1794 bytes graphics/pokemon/kingler/back_gba.png | Bin 0 -> 716 bytes graphics/pokemon/kingler/icon_gba.png | Bin 0 -> 440 bytes graphics/pokemon/kingler/normal_gba.pal | 19 + graphics/pokemon/kingler/shiny_gba.pal | 19 + graphics/pokemon/kirlia/anim_front_gba.png | Bin 0 -> 995 bytes graphics/pokemon/kirlia/back_gba.png | Bin 0 -> 723 bytes graphics/pokemon/kirlia/icon_gba.png | Bin 0 -> 351 bytes graphics/pokemon/kirlia/normal_gba.pal | 19 + graphics/pokemon/kirlia/shiny_gba.pal | 19 + graphics/pokemon/koffing/anim_front_gba.png | Bin 0 -> 1189 bytes graphics/pokemon/koffing/back_gba.png | Bin 0 -> 634 bytes graphics/pokemon/koffing/icon_gba.png | Bin 0 -> 315 bytes graphics/pokemon/koffing/normal_gba.pal | 19 + graphics/pokemon/koffing/shiny_gba.pal | 19 + graphics/pokemon/krabby/anim_front_gba.png | Bin 0 -> 875 bytes graphics/pokemon/krabby/back_gba.png | Bin 0 -> 710 bytes graphics/pokemon/krabby/icon_gba.png | Bin 0 -> 432 bytes graphics/pokemon/krabby/normal_gba.pal | 19 + graphics/pokemon/krabby/shiny_gba.pal | 19 + graphics/pokemon/kyogre/anim_front_gba.png | Bin 0 -> 1569 bytes graphics/pokemon/kyogre/back_gba.png | Bin 0 -> 497 bytes graphics/pokemon/kyogre/icon_gba.png | Bin 0 -> 444 bytes graphics/pokemon/kyogre/normal_gba.pal | 19 + graphics/pokemon/kyogre/shiny_gba.pal | 19 + graphics/pokemon/lairon/anim_front_gba.png | Bin 0 -> 1222 bytes graphics/pokemon/lairon/back_gba.png | Bin 0 -> 575 bytes graphics/pokemon/lairon/icon_gba.png | Bin 0 -> 362 bytes graphics/pokemon/lairon/normal_gba.pal | 19 + graphics/pokemon/lairon/shiny_gba.pal | 19 + graphics/pokemon/lanturn/anim_front_gba.png | Bin 0 -> 1216 bytes graphics/pokemon/lanturn/back_gba.png | Bin 0 -> 644 bytes graphics/pokemon/lanturn/icon_gba.png | Bin 0 -> 442 bytes graphics/pokemon/lanturn/normal_gba.pal | 19 + graphics/pokemon/lanturn/shiny_gba.pal | 19 + graphics/pokemon/lapras/anim_front_gba.png | Bin 0 -> 1259 bytes graphics/pokemon/lapras/back_gba.png | Bin 0 -> 686 bytes graphics/pokemon/lapras/icon_gba.png | Bin 0 -> 409 bytes graphics/pokemon/lapras/normal_gba.pal | 19 + graphics/pokemon/lapras/shiny_gba.pal | 19 + graphics/pokemon/larvitar/anim_front_gba.png | Bin 0 -> 806 bytes graphics/pokemon/larvitar/back_gba.png | Bin 0 -> 517 bytes graphics/pokemon/larvitar/icon_gba.png | Bin 0 -> 304 bytes graphics/pokemon/larvitar/normal_gba.pal | 19 + graphics/pokemon/larvitar/shiny_gba.pal | 19 + graphics/pokemon/latias/anim_front_gba.png | Bin 0 -> 1201 bytes graphics/pokemon/latias/back_gba.png | Bin 0 -> 619 bytes graphics/pokemon/latias/icon_gba.png | Bin 0 -> 396 bytes graphics/pokemon/latias/normal_gba.pal | 19 + graphics/pokemon/latias/shiny_gba.pal | 19 + graphics/pokemon/latios/anim_front_gba.png | Bin 0 -> 1650 bytes graphics/pokemon/latios/back_gba.png | Bin 0 -> 672 bytes graphics/pokemon/latios/icon_gba.png | Bin 0 -> 396 bytes graphics/pokemon/latios/normal_gba.pal | 19 + graphics/pokemon/latios/shiny_gba.pal | 19 + graphics/pokemon/ledian/anim_front_gba.png | Bin 0 -> 919 bytes graphics/pokemon/ledian/back_gba.png | Bin 0 -> 720 bytes graphics/pokemon/ledian/icon_gba.png | Bin 0 -> 377 bytes graphics/pokemon/ledian/normal_gba.pal | 19 + graphics/pokemon/ledian/shiny_gba.pal | 19 + graphics/pokemon/ledyba/anim_front_gba.png | Bin 0 -> 958 bytes graphics/pokemon/ledyba/back_gba.png | Bin 0 -> 642 bytes graphics/pokemon/ledyba/icon_gba.png | Bin 0 -> 314 bytes graphics/pokemon/ledyba/normal_gba.pal | 19 + graphics/pokemon/ledyba/shiny_gba.pal | 19 + graphics/pokemon/lickitung/anim_front_gba.png | Bin 0 -> 1337 bytes graphics/pokemon/lickitung/back_gba.png | Bin 0 -> 551 bytes graphics/pokemon/lickitung/icon_gba.png | Bin 0 -> 368 bytes graphics/pokemon/lickitung/normal_gba.pal | 19 + graphics/pokemon/lickitung/shiny_gba.pal | 19 + graphics/pokemon/lileep/anim_front_gba.png | Bin 0 -> 1097 bytes graphics/pokemon/lileep/back_gba.png | Bin 0 -> 679 bytes graphics/pokemon/lileep/icon_gba.png | Bin 0 -> 361 bytes graphics/pokemon/lileep/normal_gba.pal | 19 + graphics/pokemon/lileep/shiny_gba.pal | 19 + graphics/pokemon/linoone/anim_front_gba.png | Bin 0 -> 1087 bytes graphics/pokemon/linoone/back_gba.png | Bin 0 -> 546 bytes graphics/pokemon/linoone/icon_gba.png | Bin 0 -> 390 bytes graphics/pokemon/linoone/normal_gba.pal | 19 + graphics/pokemon/linoone/shiny_gba.pal | 19 + graphics/pokemon/lombre/anim_front_gba.png | Bin 0 -> 1032 bytes graphics/pokemon/lombre/back_gba.png | Bin 0 -> 585 bytes graphics/pokemon/lombre/icon_gba.png | Bin 0 -> 319 bytes graphics/pokemon/lombre/normal_gba.pal | 19 + graphics/pokemon/lombre/shiny_gba.pal | 19 + graphics/pokemon/lotad/anim_front_gba.png | Bin 0 -> 740 bytes graphics/pokemon/lotad/back_gba.png | Bin 0 -> 544 bytes graphics/pokemon/lotad/icon_gba.png | Bin 0 -> 283 bytes graphics/pokemon/lotad/normal_gba.pal | 19 + graphics/pokemon/lotad/shiny_gba.pal | 19 + graphics/pokemon/loudred/anim_front_gba.png | Bin 0 -> 1328 bytes graphics/pokemon/loudred/back_gba.png | Bin 0 -> 686 bytes graphics/pokemon/loudred/icon_gba.png | Bin 0 -> 387 bytes graphics/pokemon/loudred/normal_gba.pal | 19 + graphics/pokemon/loudred/shiny_gba.pal | 19 + graphics/pokemon/ludicolo/anim_front_gba.png | Bin 0 -> 1569 bytes graphics/pokemon/ludicolo/back_gba.png | Bin 0 -> 604 bytes graphics/pokemon/ludicolo/footprint_gba.png | Bin 0 -> 111 bytes graphics/pokemon/ludicolo/icon_gba.png | Bin 0 -> 379 bytes graphics/pokemon/ludicolo/normal_gba.pal | 19 + graphics/pokemon/ludicolo/shiny_gba.pal | 19 + graphics/pokemon/lugia/anim_front_gba.png | Bin 0 -> 1699 bytes graphics/pokemon/lugia/back_gba.png | Bin 0 -> 783 bytes graphics/pokemon/lugia/icon_gba.png | Bin 0 -> 454 bytes graphics/pokemon/lugia/normal_gba.pal | 19 + graphics/pokemon/lugia/shiny_gba.pal | 19 + graphics/pokemon/lunatone/anim_front_gba.png | Bin 0 -> 1015 bytes graphics/pokemon/lunatone/back_gba.png | Bin 0 -> 719 bytes graphics/pokemon/lunatone/icon_gba.png | Bin 0 -> 261 bytes graphics/pokemon/lunatone/normal_gba.pal | 19 + graphics/pokemon/lunatone/shiny_gba.pal | 19 + graphics/pokemon/luvdisc/anim_front_gba.png | Bin 0 -> 480 bytes graphics/pokemon/luvdisc/back_gba.png | Bin 0 -> 357 bytes graphics/pokemon/luvdisc/icon_gba.png | Bin 0 -> 281 bytes graphics/pokemon/luvdisc/normal_gba.pal | 19 + graphics/pokemon/luvdisc/shiny_gba.pal | 19 + graphics/pokemon/machamp/anim_front_gba.png | Bin 0 -> 1350 bytes graphics/pokemon/machamp/back_gba.png | Bin 0 -> 903 bytes graphics/pokemon/machamp/icon_gba.png | Bin 0 -> 414 bytes graphics/pokemon/machamp/normal_gba.pal | 19 + graphics/pokemon/machamp/shiny_gba.pal | 19 + graphics/pokemon/machoke/anim_front_gba.png | Bin 0 -> 1255 bytes graphics/pokemon/machoke/back_gba.png | Bin 0 -> 675 bytes graphics/pokemon/machoke/icon_gba.png | Bin 0 -> 415 bytes graphics/pokemon/machoke/normal_gba.pal | 19 + graphics/pokemon/machoke/shiny_gba.pal | 19 + graphics/pokemon/machop/anim_front_gba.png | Bin 0 -> 735 bytes graphics/pokemon/machop/back_gba.png | Bin 0 -> 584 bytes graphics/pokemon/machop/icon_gba.png | Bin 0 -> 313 bytes graphics/pokemon/machop/normal_gba.pal | 19 + graphics/pokemon/machop/shiny_gba.pal | 19 + graphics/pokemon/magby/anim_front_gba.png | Bin 0 -> 799 bytes graphics/pokemon/magby/back_gba.png | Bin 0 -> 546 bytes graphics/pokemon/magby/icon_gba.png | Bin 0 -> 296 bytes graphics/pokemon/magby/normal_gba.pal | 19 + graphics/pokemon/magby/shiny_gba.pal | 19 + graphics/pokemon/magcargo/anim_front_gba.png | Bin 0 -> 1220 bytes graphics/pokemon/magcargo/back_gba.png | Bin 0 -> 829 bytes graphics/pokemon/magcargo/icon_gba.png | Bin 0 -> 444 bytes graphics/pokemon/magcargo/normal_gba.pal | 19 + graphics/pokemon/magcargo/shiny_gba.pal | 19 + graphics/pokemon/magikarp/anim_front_gba.png | Bin 0 -> 1199 bytes graphics/pokemon/magikarp/back_gba.png | Bin 0 -> 673 bytes graphics/pokemon/magikarp/icon_gba.png | Bin 0 -> 381 bytes graphics/pokemon/magikarp/normal_gba.pal | 19 + graphics/pokemon/magikarp/shiny_gba.pal | 19 + graphics/pokemon/magmar/anim_front_gba.png | Bin 0 -> 1744 bytes graphics/pokemon/magmar/back_gba.png | Bin 0 -> 691 bytes graphics/pokemon/magmar/icon_gba.png | Bin 0 -> 398 bytes graphics/pokemon/magmar/normal_gba.pal | 19 + graphics/pokemon/magmar/shiny_gba.pal | 19 + graphics/pokemon/magnemite/anim_front_gba.png | Bin 0 -> 571 bytes graphics/pokemon/magnemite/back_gba.png | Bin 0 -> 391 bytes graphics/pokemon/magnemite/icon_gba.png | Bin 0 -> 289 bytes graphics/pokemon/magnemite/normal_gba.pal | 19 + graphics/pokemon/magnemite/shiny_gba.pal | 19 + graphics/pokemon/magneton/anim_front_gba.png | Bin 0 -> 1269 bytes graphics/pokemon/magneton/back_gba.png | Bin 0 -> 749 bytes graphics/pokemon/magneton/icon_gba.png | Bin 0 -> 416 bytes graphics/pokemon/magneton/normal_gba.pal | 19 + graphics/pokemon/magneton/shiny_gba.pal | 19 + graphics/pokemon/makuhita/anim_front_gba.png | Bin 0 -> 857 bytes graphics/pokemon/makuhita/back_gba.png | Bin 0 -> 579 bytes graphics/pokemon/makuhita/icon_gba.png | Bin 0 -> 326 bytes graphics/pokemon/makuhita/normal_gba.pal | 19 + graphics/pokemon/makuhita/shiny_gba.pal | 19 + graphics/pokemon/manectric/anim_front_gba.png | Bin 0 -> 1150 bytes graphics/pokemon/manectric/back_gba.png | Bin 0 -> 437 bytes graphics/pokemon/manectric/icon_gba.png | Bin 0 -> 316 bytes graphics/pokemon/manectric/normal_gba.pal | 19 + graphics/pokemon/manectric/shiny_gba.pal | 19 + graphics/pokemon/mankey/anim_front_gba.png | Bin 0 -> 1088 bytes graphics/pokemon/mankey/back_gba.png | Bin 0 -> 695 bytes graphics/pokemon/mankey/icon_gba.png | Bin 0 -> 374 bytes graphics/pokemon/mankey/normal_gba.pal | 19 + graphics/pokemon/mankey/shiny_gba.pal | 19 + graphics/pokemon/mantine/anim_front_gba.png | Bin 0 -> 1556 bytes graphics/pokemon/mantine/back_gba.png | Bin 0 -> 526 bytes graphics/pokemon/mantine/icon_gba.png | Bin 0 -> 374 bytes graphics/pokemon/mantine/normal_gba.pal | 19 + graphics/pokemon/mantine/shiny_gba.pal | 19 + graphics/pokemon/mareep/anim_front_gba.png | Bin 0 -> 875 bytes graphics/pokemon/mareep/back_gba.png | Bin 0 -> 635 bytes graphics/pokemon/mareep/icon_gba.png | Bin 0 -> 391 bytes graphics/pokemon/mareep/normal_gba.pal | 19 + graphics/pokemon/mareep/shiny_gba.pal | 19 + graphics/pokemon/marill/anim_front_gba.png | Bin 0 -> 933 bytes graphics/pokemon/marill/back_gba.png | Bin 0 -> 514 bytes graphics/pokemon/marill/icon_gba.png | Bin 0 -> 365 bytes graphics/pokemon/marill/normal_gba.pal | 19 + graphics/pokemon/marill/shiny_gba.pal | 19 + graphics/pokemon/marowak/anim_front_gba.png | Bin 0 -> 1308 bytes graphics/pokemon/marowak/back_gba.png | Bin 0 -> 687 bytes graphics/pokemon/marowak/icon_gba.png | Bin 0 -> 388 bytes graphics/pokemon/marowak/normal_gba.pal | 19 + graphics/pokemon/marowak/shiny_gba.pal | 19 + graphics/pokemon/marshtomp/anim_front_gba.png | Bin 0 -> 1171 bytes graphics/pokemon/marshtomp/back_gba.png | Bin 0 -> 748 bytes graphics/pokemon/marshtomp/icon_gba.png | Bin 0 -> 294 bytes graphics/pokemon/marshtomp/normal_gba.pal | 19 + graphics/pokemon/marshtomp/shiny_gba.pal | 19 + .../pokemon/masquerain/anim_front_gba.png | Bin 0 -> 1293 bytes graphics/pokemon/masquerain/back_gba.png | Bin 0 -> 697 bytes graphics/pokemon/masquerain/icon_gba.png | Bin 0 -> 371 bytes graphics/pokemon/masquerain/normal_gba.pal | 19 + graphics/pokemon/masquerain/shiny_gba.pal | 19 + graphics/pokemon/mawile/anim_front_gba.png | Bin 0 -> 1448 bytes graphics/pokemon/mawile/back_gba.png | Bin 0 -> 825 bytes graphics/pokemon/mawile/footprint_gba.png | Bin 0 -> 116 bytes graphics/pokemon/mawile/icon_gba.png | Bin 0 -> 433 bytes graphics/pokemon/mawile/normal_gba.pal | 19 + graphics/pokemon/mawile/shiny_gba.pal | 19 + graphics/pokemon/medicham/anim_front_gba.png | Bin 0 -> 1055 bytes graphics/pokemon/medicham/back_gba.png | Bin 0 -> 696 bytes graphics/pokemon/medicham/icon_gba.png | Bin 0 -> 369 bytes graphics/pokemon/medicham/normal_gba.pal | 19 + graphics/pokemon/medicham/shiny_gba.pal | 19 + graphics/pokemon/meditite/anim_front_gba.png | Bin 0 -> 744 bytes graphics/pokemon/meditite/back_gba.png | Bin 0 -> 565 bytes graphics/pokemon/meditite/icon_gba.png | Bin 0 -> 329 bytes graphics/pokemon/meditite/normal_gba.pal | 19 + graphics/pokemon/meditite/shiny_gba.pal | 19 + graphics/pokemon/meganium/anim_front_gba.png | Bin 0 -> 1902 bytes graphics/pokemon/meganium/back_gba.png | Bin 0 -> 736 bytes graphics/pokemon/meganium/icon_gba.png | Bin 0 -> 451 bytes graphics/pokemon/meganium/normal_gba.pal | 19 + graphics/pokemon/meganium/shiny_gba.pal | 19 + graphics/pokemon/meowth/anim_front_gba.png | Bin 0 -> 887 bytes graphics/pokemon/meowth/back_gba.png | Bin 0 -> 576 bytes graphics/pokemon/meowth/icon_gba.png | Bin 0 -> 304 bytes graphics/pokemon/meowth/normal_gba.pal | 19 + graphics/pokemon/meowth/shiny_gba.pal | 19 + graphics/pokemon/metagross/anim_front_gba.png | Bin 0 -> 1301 bytes graphics/pokemon/metagross/back_gba.png | Bin 0 -> 515 bytes graphics/pokemon/metagross/icon_gba.png | Bin 0 -> 439 bytes graphics/pokemon/metagross/normal_gba.pal | 19 + graphics/pokemon/metagross/shiny_gba.pal | 19 + graphics/pokemon/metang/anim_front_gba.png | Bin 0 -> 1556 bytes graphics/pokemon/metang/back_gba.png | Bin 0 -> 618 bytes graphics/pokemon/metang/icon_gba.png | Bin 0 -> 445 bytes graphics/pokemon/metang/normal_gba.pal | 19 + graphics/pokemon/metang/shiny_gba.pal | 19 + graphics/pokemon/metapod/anim_front_gba.png | Bin 0 -> 574 bytes graphics/pokemon/metapod/back_gba.png | Bin 0 -> 430 bytes graphics/pokemon/metapod/icon_gba.png | Bin 0 -> 241 bytes graphics/pokemon/metapod/normal_gba.pal | 19 + graphics/pokemon/metapod/shiny_gba.pal | 19 + graphics/pokemon/mew/anim_front_gba.png | Bin 0 -> 854 bytes graphics/pokemon/mew/back_gba.png | Bin 0 -> 551 bytes graphics/pokemon/mew/icon_gba.png | Bin 0 -> 377 bytes graphics/pokemon/mew/normal_gba.pal | 19 + graphics/pokemon/mew/shiny_gba.pal | 19 + graphics/pokemon/mewtwo/anim_front_gba.png | Bin 0 -> 1500 bytes graphics/pokemon/mewtwo/back_gba.png | Bin 0 -> 815 bytes graphics/pokemon/mewtwo/icon_gba.png | Bin 0 -> 368 bytes graphics/pokemon/mewtwo/normal_gba.pal | 19 + graphics/pokemon/mewtwo/shiny_gba.pal | 19 + graphics/pokemon/mightyena/anim_front_gba.png | Bin 0 -> 1465 bytes graphics/pokemon/mightyena/back_gba.png | Bin 0 -> 724 bytes graphics/pokemon/mightyena/icon_gba.png | Bin 0 -> 403 bytes graphics/pokemon/mightyena/normal_gba.pal | 19 + graphics/pokemon/mightyena/shiny_gba.pal | 19 + graphics/pokemon/milotic/anim_front_gba.png | Bin 0 -> 1786 bytes graphics/pokemon/milotic/back_gba.png | Bin 0 -> 588 bytes graphics/pokemon/milotic/icon_gba.png | Bin 0 -> 455 bytes graphics/pokemon/milotic/normal_gba.pal | 19 + graphics/pokemon/milotic/shiny_gba.pal | 19 + graphics/pokemon/miltank/anim_front_gba.png | Bin 0 -> 1271 bytes graphics/pokemon/miltank/back_gba.png | Bin 0 -> 731 bytes graphics/pokemon/miltank/icon_gba.png | Bin 0 -> 351 bytes graphics/pokemon/miltank/normal_gba.pal | 19 + graphics/pokemon/miltank/shiny_gba.pal | 19 + graphics/pokemon/minun/anim_front_gba.png | Bin 0 -> 750 bytes graphics/pokemon/minun/back_gba.png | Bin 0 -> 575 bytes graphics/pokemon/minun/icon_gba.png | Bin 0 -> 296 bytes graphics/pokemon/minun/normal_gba.pal | 19 + graphics/pokemon/minun/shiny_gba.pal | 19 + .../pokemon/misdreavus/anim_front_gba.png | Bin 0 -> 933 bytes graphics/pokemon/misdreavus/back_gba.png | Bin 0 -> 618 bytes graphics/pokemon/misdreavus/icon_gba.png | Bin 0 -> 369 bytes graphics/pokemon/misdreavus/normal_gba.pal | 19 + graphics/pokemon/misdreavus/shiny_gba.pal | 19 + graphics/pokemon/moltres/anim_front_gba.png | Bin 0 -> 1851 bytes graphics/pokemon/moltres/back_gba.png | Bin 0 -> 682 bytes graphics/pokemon/moltres/icon_gba.png | Bin 0 -> 421 bytes graphics/pokemon/moltres/normal_gba.pal | 19 + graphics/pokemon/moltres/shiny_gba.pal | 19 + graphics/pokemon/mr_mime/anim_front_gba.png | Bin 0 -> 1265 bytes graphics/pokemon/mr_mime/back_gba.png | Bin 0 -> 677 bytes graphics/pokemon/mr_mime/icon_gba.png | Bin 0 -> 311 bytes graphics/pokemon/mr_mime/normal_gba.pal | 19 + graphics/pokemon/mr_mime/shiny_gba.pal | 19 + graphics/pokemon/mudkip/anim_front_gba.png | Bin 0 -> 962 bytes graphics/pokemon/mudkip/back_gba.png | Bin 0 -> 627 bytes graphics/pokemon/mudkip/icon_gba.png | Bin 0 -> 353 bytes graphics/pokemon/mudkip/normal_gba.pal | 19 + graphics/pokemon/mudkip/shiny_gba.pal | 19 + graphics/pokemon/muk/anim_front_gba.png | Bin 0 -> 1344 bytes graphics/pokemon/muk/back_gba.png | Bin 0 -> 661 bytes graphics/pokemon/muk/icon_gba.png | Bin 0 -> 441 bytes graphics/pokemon/muk/normal_gba.pal | 19 + graphics/pokemon/muk/shiny_gba.pal | 19 + graphics/pokemon/murkrow/anim_front_gba.png | Bin 0 -> 968 bytes graphics/pokemon/murkrow/back_gba.png | Bin 0 -> 640 bytes graphics/pokemon/murkrow/icon_gba.png | Bin 0 -> 370 bytes graphics/pokemon/murkrow/normal_gba.pal | 19 + graphics/pokemon/murkrow/shiny_gba.pal | 19 + graphics/pokemon/natu/anim_front_gba.png | Bin 0 -> 512 bytes graphics/pokemon/natu/back_gba.png | Bin 0 -> 401 bytes graphics/pokemon/natu/icon_gba.png | Bin 0 -> 318 bytes graphics/pokemon/natu/normal_gba.pal | 19 + graphics/pokemon/natu/shiny_gba.pal | 19 + graphics/pokemon/nidoking/anim_front_gba.png | Bin 0 -> 1708 bytes graphics/pokemon/nidoking/back_gba.png | Bin 0 -> 849 bytes graphics/pokemon/nidoking/icon_gba.png | Bin 0 -> 420 bytes graphics/pokemon/nidoking/normal_gba.pal | 19 + graphics/pokemon/nidoking/shiny_gba.pal | 19 + graphics/pokemon/nidoqueen/anim_front_gba.png | Bin 0 -> 1651 bytes graphics/pokemon/nidoqueen/back_gba.png | Bin 0 -> 761 bytes graphics/pokemon/nidoqueen/icon_gba.png | Bin 0 -> 374 bytes graphics/pokemon/nidoqueen/normal_gba.pal | 19 + graphics/pokemon/nidoqueen/shiny_gba.pal | 19 + graphics/pokemon/nidoran_f/anim_front_gba.png | Bin 0 -> 762 bytes graphics/pokemon/nidoran_f/back_gba.png | Bin 0 -> 593 bytes graphics/pokemon/nidoran_f/icon_gba.png | Bin 0 -> 287 bytes graphics/pokemon/nidoran_f/normal_gba.pal | 19 + graphics/pokemon/nidoran_f/shiny_gba.pal | 19 + graphics/pokemon/nidoran_m/anim_front_gba.png | Bin 0 -> 951 bytes graphics/pokemon/nidoran_m/back_gba.png | Bin 0 -> 630 bytes graphics/pokemon/nidoran_m/icon_gba.png | Bin 0 -> 326 bytes graphics/pokemon/nidoran_m/normal_gba.pal | 19 + graphics/pokemon/nidoran_m/shiny_gba.pal | 19 + graphics/pokemon/nidorina/anim_front_gba.png | Bin 0 -> 1149 bytes graphics/pokemon/nidorina/back_gba.png | Bin 0 -> 693 bytes graphics/pokemon/nidorina/icon_gba.png | Bin 0 -> 325 bytes graphics/pokemon/nidorina/normal_gba.pal | 19 + graphics/pokemon/nidorina/shiny_gba.pal | 19 + graphics/pokemon/nidorino/anim_front_gba.png | Bin 0 -> 1277 bytes graphics/pokemon/nidorino/back_gba.png | Bin 0 -> 741 bytes graphics/pokemon/nidorino/icon_gba.png | Bin 0 -> 324 bytes graphics/pokemon/nidorino/normal_gba.pal | 19 + graphics/pokemon/nidorino/shiny_gba.pal | 19 + graphics/pokemon/nincada/anim_front_gba.png | Bin 0 -> 857 bytes graphics/pokemon/nincada/back_gba.png | Bin 0 -> 576 bytes graphics/pokemon/nincada/icon_gba.png | Bin 0 -> 352 bytes graphics/pokemon/nincada/normal_gba.pal | 19 + graphics/pokemon/nincada/shiny_gba.pal | 19 + graphics/pokemon/ninetales/anim_front_gba.png | Bin 0 -> 1453 bytes graphics/pokemon/ninetales/back_gba.png | Bin 0 -> 680 bytes graphics/pokemon/ninetales/icon_gba.png | Bin 0 -> 421 bytes graphics/pokemon/ninetales/normal_gba.pal | 19 + graphics/pokemon/ninetales/shiny_gba.pal | 19 + graphics/pokemon/ninjask/anim_front_gba.png | Bin 0 -> 1014 bytes graphics/pokemon/ninjask/back_gba.png | Bin 0 -> 797 bytes graphics/pokemon/ninjask/icon_gba.png | Bin 0 -> 324 bytes graphics/pokemon/ninjask/normal_gba.pal | 19 + graphics/pokemon/ninjask/shiny_gba.pal | 19 + graphics/pokemon/noctowl/anim_front_gba.png | Bin 0 -> 1283 bytes graphics/pokemon/noctowl/back_gba.png | Bin 0 -> 659 bytes graphics/pokemon/noctowl/icon_gba.png | Bin 0 -> 362 bytes graphics/pokemon/noctowl/normal_gba.pal | 19 + graphics/pokemon/noctowl/shiny_gba.pal | 19 + graphics/pokemon/nosepass/anim_front_gba.png | Bin 0 -> 949 bytes graphics/pokemon/nosepass/back_gba.png | Bin 0 -> 517 bytes graphics/pokemon/nosepass/icon_gba.png | Bin 0 -> 282 bytes graphics/pokemon/nosepass/normal_gba.pal | 19 + graphics/pokemon/nosepass/shiny_gba.pal | 19 + graphics/pokemon/numel/anim_front_gba.png | Bin 0 -> 835 bytes graphics/pokemon/numel/back_gba.png | Bin 0 -> 573 bytes graphics/pokemon/numel/icon_gba.png | Bin 0 -> 301 bytes graphics/pokemon/numel/normal_gba.pal | 19 + graphics/pokemon/numel/shiny_gba.pal | 19 + graphics/pokemon/nuzleaf/anim_front_gba.png | Bin 0 -> 887 bytes graphics/pokemon/nuzleaf/back_gba.png | Bin 0 -> 583 bytes graphics/pokemon/nuzleaf/icon_gba.png | Bin 0 -> 342 bytes graphics/pokemon/nuzleaf/normal_gba.pal | 19 + graphics/pokemon/nuzleaf/shiny_gba.pal | 19 + graphics/pokemon/octillery/anim_front_gba.png | Bin 0 -> 1019 bytes graphics/pokemon/octillery/back_gba.png | Bin 0 -> 558 bytes graphics/pokemon/octillery/icon_gba.png | Bin 0 -> 349 bytes graphics/pokemon/octillery/normal_gba.pal | 19 + graphics/pokemon/octillery/shiny_gba.pal | 19 + graphics/pokemon/oddish/anim_front_gba.png | Bin 0 -> 634 bytes graphics/pokemon/oddish/back_gba.png | Bin 0 -> 497 bytes graphics/pokemon/oddish/icon_gba.png | Bin 0 -> 284 bytes graphics/pokemon/oddish/normal_gba.pal | 19 + graphics/pokemon/oddish/shiny_gba.pal | 19 + graphics/pokemon/omanyte/anim_front_gba.png | Bin 0 -> 690 bytes graphics/pokemon/omanyte/back_gba.png | Bin 0 -> 661 bytes graphics/pokemon/omanyte/icon_gba.png | Bin 0 -> 308 bytes graphics/pokemon/omanyte/normal_gba.pal | 19 + graphics/pokemon/omanyte/shiny_gba.pal | 19 + graphics/pokemon/omastar/anim_front_gba.png | Bin 0 -> 1179 bytes graphics/pokemon/omastar/back_gba.png | Bin 0 -> 634 bytes graphics/pokemon/omastar/icon_gba.png | Bin 0 -> 350 bytes graphics/pokemon/omastar/normal_gba.pal | 19 + graphics/pokemon/omastar/shiny_gba.pal | 19 + graphics/pokemon/onix/anim_front_gba.png | Bin 0 -> 1554 bytes graphics/pokemon/onix/back_gba.png | Bin 0 -> 696 bytes graphics/pokemon/onix/icon_gba.png | Bin 0 -> 456 bytes graphics/pokemon/onix/normal_gba.pal | 19 + graphics/pokemon/onix/shiny_gba.pal | 19 + graphics/pokemon/paras/anim_front_gba.png | Bin 0 -> 797 bytes graphics/pokemon/paras/back_gba.png | Bin 0 -> 509 bytes graphics/pokemon/paras/icon_gba.png | Bin 0 -> 387 bytes graphics/pokemon/paras/normal_gba.pal | 19 + graphics/pokemon/paras/shiny_gba.pal | 19 + graphics/pokemon/parasect/anim_front_gba.png | Bin 0 -> 1137 bytes graphics/pokemon/parasect/back_gba.png | Bin 0 -> 602 bytes graphics/pokemon/parasect/icon_gba.png | Bin 0 -> 329 bytes graphics/pokemon/parasect/normal_gba.pal | 19 + graphics/pokemon/parasect/shiny_gba.pal | 19 + graphics/pokemon/pelipper/anim_front_gba.png | Bin 0 -> 1187 bytes graphics/pokemon/pelipper/back_gba.png | Bin 0 -> 737 bytes graphics/pokemon/pelipper/icon_gba.png | Bin 0 -> 374 bytes graphics/pokemon/pelipper/normal_gba.pal | 19 + graphics/pokemon/pelipper/shiny_gba.pal | 19 + graphics/pokemon/persian/anim_front_gba.png | Bin 0 -> 1342 bytes graphics/pokemon/persian/back_gba.png | Bin 0 -> 705 bytes graphics/pokemon/persian/icon_gba.png | Bin 0 -> 328 bytes graphics/pokemon/persian/normal_gba.pal | 19 + graphics/pokemon/persian/shiny_gba.pal | 19 + graphics/pokemon/phanpy/anim_front_gba.png | Bin 0 -> 760 bytes graphics/pokemon/phanpy/back_gba.png | Bin 0 -> 541 bytes graphics/pokemon/phanpy/icon_gba.png | Bin 0 -> 371 bytes graphics/pokemon/phanpy/normal_gba.pal | 19 + graphics/pokemon/phanpy/shiny_gba.pal | 19 + graphics/pokemon/pichu/anim_front_gba.png | Bin 0 -> 621 bytes graphics/pokemon/pichu/back_gba.png | Bin 0 -> 495 bytes graphics/pokemon/pichu/icon_gba.png | Bin 0 -> 281 bytes graphics/pokemon/pichu/normal_gba.pal | 19 + graphics/pokemon/pichu/shiny_gba.pal | 19 + graphics/pokemon/pidgeot/anim_front_gba.png | Bin 0 -> 1697 bytes graphics/pokemon/pidgeot/back_gba.png | Bin 0 -> 729 bytes graphics/pokemon/pidgeot/icon_gba.png | Bin 0 -> 456 bytes graphics/pokemon/pidgeot/normal_gba.pal | 19 + graphics/pokemon/pidgeot/shiny_gba.pal | 19 + graphics/pokemon/pidgeotto/anim_front_gba.png | Bin 0 -> 1321 bytes graphics/pokemon/pidgeotto/back_gba.png | Bin 0 -> 673 bytes graphics/pokemon/pidgeotto/icon_gba.png | Bin 0 -> 387 bytes graphics/pokemon/pidgeotto/normal_gba.pal | 19 + graphics/pokemon/pidgeotto/shiny_gba.pal | 19 + graphics/pokemon/pidgey/anim_front_gba.png | Bin 0 -> 936 bytes graphics/pokemon/pidgey/back_gba.png | Bin 0 -> 702 bytes graphics/pokemon/pidgey/icon_gba.png | Bin 0 -> 364 bytes graphics/pokemon/pidgey/normal_gba.pal | 19 + graphics/pokemon/pidgey/shiny_gba.pal | 19 + graphics/pokemon/pikachu/anim_front_gba.png | Bin 0 -> 937 bytes graphics/pokemon/pikachu/back_gba.png | Bin 0 -> 587 bytes graphics/pokemon/pikachu/icon_gba.png | Bin 0 -> 353 bytes graphics/pokemon/pikachu/normal_gba.pal | 19 + graphics/pokemon/pikachu/shiny_gba.pal | 19 + graphics/pokemon/piloswine/anim_front_gba.png | Bin 0 -> 895 bytes graphics/pokemon/piloswine/back_gba.png | Bin 0 -> 436 bytes graphics/pokemon/piloswine/icon_gba.png | Bin 0 -> 341 bytes graphics/pokemon/piloswine/normal_gba.pal | 19 + graphics/pokemon/piloswine/shiny_gba.pal | 19 + graphics/pokemon/pineco/anim_front_gba.png | Bin 0 -> 717 bytes graphics/pokemon/pineco/back_gba.png | Bin 0 -> 520 bytes graphics/pokemon/pineco/icon_gba.png | Bin 0 -> 290 bytes graphics/pokemon/pineco/normal_gba.pal | 19 + graphics/pokemon/pineco/shiny_gba.pal | 19 + graphics/pokemon/pinsir/anim_front_gba.png | Bin 0 -> 1460 bytes graphics/pokemon/pinsir/back_gba.png | Bin 0 -> 657 bytes graphics/pokemon/pinsir/icon_gba.png | Bin 0 -> 334 bytes graphics/pokemon/pinsir/normal_gba.pal | 19 + graphics/pokemon/pinsir/shiny_gba.pal | 19 + graphics/pokemon/plusle/anim_front_gba.png | Bin 0 -> 830 bytes graphics/pokemon/plusle/back_gba.png | Bin 0 -> 568 bytes graphics/pokemon/plusle/icon_gba.png | Bin 0 -> 303 bytes graphics/pokemon/plusle/normal_gba.pal | 19 + graphics/pokemon/plusle/shiny_gba.pal | 19 + graphics/pokemon/politoed/anim_front_gba.png | Bin 0 -> 1191 bytes graphics/pokemon/politoed/back_gba.png | Bin 0 -> 565 bytes graphics/pokemon/politoed/icon_gba.png | Bin 0 -> 428 bytes graphics/pokemon/politoed/normal_gba.pal | 19 + graphics/pokemon/politoed/shiny_gba.pal | 19 + graphics/pokemon/poliwag/anim_front_gba.png | Bin 0 -> 829 bytes graphics/pokemon/poliwag/back_gba.png | Bin 0 -> 469 bytes graphics/pokemon/poliwag/icon_gba.png | Bin 0 -> 339 bytes graphics/pokemon/poliwag/normal_gba.pal | 19 + graphics/pokemon/poliwag/shiny_gba.pal | 19 + graphics/pokemon/poliwhirl/anim_front_gba.png | Bin 0 -> 1073 bytes graphics/pokemon/poliwhirl/back_gba.png | Bin 0 -> 552 bytes graphics/pokemon/poliwhirl/icon_gba.png | Bin 0 -> 349 bytes graphics/pokemon/poliwhirl/normal_gba.pal | 19 + graphics/pokemon/poliwhirl/shiny_gba.pal | 19 + graphics/pokemon/poliwrath/anim_front_gba.png | Bin 0 -> 1201 bytes graphics/pokemon/poliwrath/back_gba.png | Bin 0 -> 638 bytes graphics/pokemon/poliwrath/icon_gba.png | Bin 0 -> 389 bytes graphics/pokemon/poliwrath/normal_gba.pal | 19 + graphics/pokemon/poliwrath/shiny_gba.pal | 19 + graphics/pokemon/ponyta/anim_front_gba.png | Bin 0 -> 1348 bytes graphics/pokemon/ponyta/back_gba.png | Bin 0 -> 680 bytes graphics/pokemon/ponyta/icon_gba.png | Bin 0 -> 457 bytes graphics/pokemon/ponyta/normal_gba.pal | 19 + graphics/pokemon/ponyta/shiny_gba.pal | 19 + graphics/pokemon/poochyena/anim_front_gba.png | Bin 0 -> 980 bytes graphics/pokemon/poochyena/back_gba.png | Bin 0 -> 676 bytes graphics/pokemon/poochyena/icon_gba.png | Bin 0 -> 360 bytes graphics/pokemon/poochyena/normal_gba.pal | 19 + graphics/pokemon/poochyena/shiny_gba.pal | 19 + graphics/pokemon/porygon/anim_front_gba.png | Bin 0 -> 819 bytes graphics/pokemon/porygon/back_gba.png | Bin 0 -> 537 bytes graphics/pokemon/porygon/icon_gba.png | Bin 0 -> 386 bytes graphics/pokemon/porygon/normal_gba.pal | 19 + graphics/pokemon/porygon/shiny_gba.pal | 19 + graphics/pokemon/porygon2/anim_front_gba.png | Bin 0 -> 800 bytes graphics/pokemon/porygon2/back_gba.png | Bin 0 -> 656 bytes graphics/pokemon/porygon2/icon_gba.png | Bin 0 -> 341 bytes graphics/pokemon/porygon2/normal_gba.pal | 19 + graphics/pokemon/porygon2/shiny_gba.pal | 19 + graphics/pokemon/primeape/anim_front_gba.png | Bin 0 -> 1309 bytes graphics/pokemon/primeape/back_gba.png | Bin 0 -> 714 bytes graphics/pokemon/primeape/icon_gba.png | Bin 0 -> 370 bytes graphics/pokemon/primeape/normal_gba.pal | 19 + graphics/pokemon/primeape/shiny_gba.pal | 19 + graphics/pokemon/psyduck/anim_front_gba.png | Bin 0 -> 962 bytes graphics/pokemon/psyduck/back_gba.png | Bin 0 -> 534 bytes graphics/pokemon/psyduck/icon_gba.png | Bin 0 -> 329 bytes graphics/pokemon/psyduck/normal_gba.pal | 19 + graphics/pokemon/psyduck/shiny_gba.pal | 19 + graphics/pokemon/pupitar/anim_front_gba.png | Bin 0 -> 689 bytes graphics/pokemon/pupitar/back_gba.png | Bin 0 -> 642 bytes graphics/pokemon/pupitar/icon_gba.png | Bin 0 -> 291 bytes graphics/pokemon/pupitar/normal_gba.pal | 19 + graphics/pokemon/pupitar/shiny_gba.pal | 19 + graphics/pokemon/quagsire/anim_front_gba.png | Bin 0 -> 1206 bytes graphics/pokemon/quagsire/back_gba.png | Bin 0 -> 602 bytes graphics/pokemon/quagsire/icon_gba.png | Bin 0 -> 362 bytes graphics/pokemon/quagsire/normal_gba.pal | 19 + graphics/pokemon/quagsire/shiny_gba.pal | 19 + .../question_mark/circled/anim_front_gba.png | Bin 0 -> 405 bytes .../question_mark/circled/back_gba.png | Bin 0 -> 397 bytes .../question_mark/circled/normal_gba.pal | 19 + .../question_mark/circled/shiny_gba.pal | 19 + .../question_mark/double/anim_front_gba.png | Bin 0 -> 317 bytes .../pokemon/question_mark/double/back_gba.png | Bin 0 -> 308 bytes .../question_mark/double/normal_gba.pal | 19 + .../question_mark/double/shiny_gba.pal | 19 + .../pokemon/question_mark/footprint_gba.png | Bin 0 -> 127 bytes graphics/pokemon/question_mark/icon_gba.png | Bin 0 -> 271 bytes graphics/pokemon/quilava/anim_front_gba.png | Bin 0 -> 1192 bytes graphics/pokemon/quilava/back_gba.png | Bin 0 -> 746 bytes graphics/pokemon/quilava/icon_gba.png | Bin 0 -> 402 bytes graphics/pokemon/quilava/normal_gba.pal | 19 + graphics/pokemon/quilava/shiny_gba.pal | 19 + graphics/pokemon/qwilfish/anim_front_gba.png | Bin 0 -> 868 bytes graphics/pokemon/qwilfish/back_gba.png | Bin 0 -> 572 bytes graphics/pokemon/qwilfish/icon_gba.png | Bin 0 -> 337 bytes graphics/pokemon/qwilfish/normal_gba.pal | 19 + graphics/pokemon/qwilfish/shiny_gba.pal | 19 + graphics/pokemon/raichu/anim_front_gba.png | Bin 0 -> 1405 bytes graphics/pokemon/raichu/back_gba.png | Bin 0 -> 625 bytes graphics/pokemon/raichu/icon_gba.png | Bin 0 -> 411 bytes graphics/pokemon/raichu/normal_gba.pal | 19 + graphics/pokemon/raichu/shiny_gba.pal | 19 + graphics/pokemon/raikou/anim_front_gba.png | Bin 0 -> 2028 bytes graphics/pokemon/raikou/back_gba.png | Bin 0 -> 745 bytes graphics/pokemon/raikou/icon_gba.png | Bin 0 -> 486 bytes graphics/pokemon/raikou/normal_gba.pal | 19 + graphics/pokemon/raikou/shiny_gba.pal | 19 + graphics/pokemon/ralts/anim_front_gba.png | Bin 0 -> 666 bytes graphics/pokemon/ralts/back_gba.png | Bin 0 -> 451 bytes graphics/pokemon/ralts/icon_gba.png | Bin 0 -> 262 bytes graphics/pokemon/ralts/normal_gba.pal | 19 + graphics/pokemon/ralts/shiny_gba.pal | 19 + graphics/pokemon/rapidash/anim_front_gba.png | Bin 0 -> 1871 bytes graphics/pokemon/rapidash/back_gba.png | Bin 0 -> 840 bytes graphics/pokemon/rapidash/icon_gba.png | Bin 0 -> 478 bytes graphics/pokemon/rapidash/normal_gba.pal | 19 + graphics/pokemon/rapidash/shiny_gba.pal | 19 + graphics/pokemon/raticate/anim_front_gba.png | Bin 0 -> 1183 bytes graphics/pokemon/raticate/back_gba.png | Bin 0 -> 676 bytes graphics/pokemon/raticate/icon_gba.png | Bin 0 -> 374 bytes graphics/pokemon/raticate/normal_gba.pal | 19 + graphics/pokemon/raticate/shiny_gba.pal | 19 + graphics/pokemon/rattata/anim_front_gba.png | Bin 0 -> 734 bytes graphics/pokemon/rattata/back_gba.png | Bin 0 -> 577 bytes graphics/pokemon/rattata/icon_gba.png | Bin 0 -> 318 bytes graphics/pokemon/rattata/normal_gba.pal | 19 + graphics/pokemon/rattata/shiny_gba.pal | 19 + graphics/pokemon/rayquaza/anim_front_gba.png | Bin 0 -> 1856 bytes graphics/pokemon/rayquaza/back_gba.png | Bin 0 -> 666 bytes graphics/pokemon/rayquaza/icon_gba.png | Bin 0 -> 507 bytes graphics/pokemon/rayquaza/normal_gba.pal | 19 + graphics/pokemon/rayquaza/shiny_gba.pal | 19 + graphics/pokemon/regice/anim_front_gba.png | Bin 0 -> 1492 bytes graphics/pokemon/regice/back_gba.png | Bin 0 -> 551 bytes graphics/pokemon/regice/icon_gba.png | Bin 0 -> 334 bytes graphics/pokemon/regice/normal_gba.pal | 19 + graphics/pokemon/regice/shiny_gba.pal | 19 + graphics/pokemon/regirock/anim_front_gba.png | Bin 0 -> 1637 bytes graphics/pokemon/regirock/back_gba.png | Bin 0 -> 859 bytes graphics/pokemon/regirock/icon_gba.png | Bin 0 -> 379 bytes graphics/pokemon/regirock/normal_gba.pal | 19 + graphics/pokemon/regirock/shiny_gba.pal | 19 + graphics/pokemon/registeel/anim_front_gba.png | Bin 0 -> 1587 bytes graphics/pokemon/registeel/back_gba.png | Bin 0 -> 615 bytes graphics/pokemon/registeel/icon_gba.png | Bin 0 -> 351 bytes graphics/pokemon/registeel/normal_gba.pal | 19 + graphics/pokemon/registeel/shiny_gba.pal | 19 + graphics/pokemon/relicanth/anim_front_gba.png | Bin 0 -> 998 bytes graphics/pokemon/relicanth/back_gba.png | Bin 0 -> 704 bytes graphics/pokemon/relicanth/icon_gba.png | Bin 0 -> 413 bytes graphics/pokemon/relicanth/normal_gba.pal | 19 + graphics/pokemon/relicanth/shiny_gba.pal | 19 + graphics/pokemon/remoraid/anim_front_gba.png | Bin 0 -> 756 bytes graphics/pokemon/remoraid/back_gba.png | Bin 0 -> 596 bytes graphics/pokemon/remoraid/icon_gba.png | Bin 0 -> 330 bytes graphics/pokemon/remoraid/normal_gba.pal | 19 + graphics/pokemon/remoraid/shiny_gba.pal | 19 + graphics/pokemon/rhydon/anim_front_gba.png | Bin 0 -> 1762 bytes graphics/pokemon/rhydon/back_gba.png | Bin 0 -> 880 bytes graphics/pokemon/rhydon/icon_gba.png | Bin 0 -> 381 bytes graphics/pokemon/rhydon/normal_gba.pal | 19 + graphics/pokemon/rhydon/shiny_gba.pal | 19 + graphics/pokemon/rhyhorn/anim_front_gba.png | Bin 0 -> 1265 bytes graphics/pokemon/rhyhorn/back_gba.png | Bin 0 -> 633 bytes graphics/pokemon/rhyhorn/icon_gba.png | Bin 0 -> 356 bytes graphics/pokemon/rhyhorn/normal_gba.pal | 19 + graphics/pokemon/rhyhorn/shiny_gba.pal | 19 + graphics/pokemon/roselia/anim_front_gba.png | Bin 0 -> 1203 bytes graphics/pokemon/roselia/back_gba.png | Bin 0 -> 774 bytes graphics/pokemon/roselia/icon_gba.png | Bin 0 -> 414 bytes graphics/pokemon/roselia/normal_gba.pal | 19 + graphics/pokemon/roselia/shiny_gba.pal | 19 + graphics/pokemon/sableye/anim_front_gba.png | Bin 0 -> 839 bytes graphics/pokemon/sableye/back_gba.png | Bin 0 -> 654 bytes graphics/pokemon/sableye/icon_gba.png | Bin 0 -> 319 bytes graphics/pokemon/sableye/normal_gba.pal | 19 + graphics/pokemon/sableye/shiny_gba.pal | 19 + graphics/pokemon/salamence/anim_front_gba.png | Bin 0 -> 1419 bytes graphics/pokemon/salamence/back_gba.png | Bin 0 -> 578 bytes graphics/pokemon/salamence/icon_gba.png | Bin 0 -> 477 bytes graphics/pokemon/salamence/normal_gba.pal | 19 + graphics/pokemon/salamence/shiny_gba.pal | 19 + graphics/pokemon/sandshrew/anim_front_gba.png | Bin 0 -> 894 bytes graphics/pokemon/sandshrew/back_gba.png | Bin 0 -> 606 bytes graphics/pokemon/sandshrew/icon_gba.png | Bin 0 -> 338 bytes graphics/pokemon/sandshrew/normal_gba.pal | 19 + graphics/pokemon/sandshrew/shiny_gba.pal | 19 + graphics/pokemon/sandslash/anim_front_gba.png | Bin 0 -> 1445 bytes graphics/pokemon/sandslash/back_gba.png | Bin 0 -> 837 bytes graphics/pokemon/sandslash/icon_gba.png | Bin 0 -> 402 bytes graphics/pokemon/sandslash/normal_gba.pal | 19 + graphics/pokemon/sandslash/shiny_gba.pal | 19 + graphics/pokemon/sceptile/anim_front_gba.png | Bin 0 -> 1387 bytes graphics/pokemon/sceptile/back_gba.png | Bin 0 -> 838 bytes graphics/pokemon/sceptile/icon_gba.png | Bin 0 -> 383 bytes graphics/pokemon/sceptile/normal_gba.pal | 19 + graphics/pokemon/sceptile/shiny_gba.pal | 19 + graphics/pokemon/scizor/anim_front_gba.png | Bin 0 -> 1603 bytes graphics/pokemon/scizor/back_gba.png | Bin 0 -> 739 bytes graphics/pokemon/scizor/icon_gba.png | Bin 0 -> 447 bytes graphics/pokemon/scizor/normal_gba.pal | 19 + graphics/pokemon/scizor/shiny_gba.pal | 19 + graphics/pokemon/scyther/anim_front_gba.png | Bin 0 -> 1543 bytes graphics/pokemon/scyther/back_gba.png | Bin 0 -> 744 bytes graphics/pokemon/scyther/icon_gba.png | Bin 0 -> 345 bytes graphics/pokemon/scyther/normal_gba.pal | 19 + graphics/pokemon/scyther/shiny_gba.pal | 19 + graphics/pokemon/seadra/anim_front_gba.png | Bin 0 -> 1285 bytes graphics/pokemon/seadra/back_gba.png | Bin 0 -> 727 bytes graphics/pokemon/seadra/icon_gba.png | Bin 0 -> 351 bytes graphics/pokemon/seadra/normal_gba.pal | 19 + graphics/pokemon/seadra/shiny_gba.pal | 19 + graphics/pokemon/seaking/anim_front_gba.png | Bin 0 -> 1577 bytes graphics/pokemon/seaking/back_gba.png | Bin 0 -> 693 bytes graphics/pokemon/seaking/icon_gba.png | Bin 0 -> 368 bytes graphics/pokemon/seaking/normal_gba.pal | 19 + graphics/pokemon/seaking/shiny_gba.pal | 19 + graphics/pokemon/sealeo/anim_front_gba.png | Bin 0 -> 1215 bytes graphics/pokemon/sealeo/back_gba.png | Bin 0 -> 503 bytes graphics/pokemon/sealeo/icon_gba.png | Bin 0 -> 387 bytes graphics/pokemon/sealeo/normal_gba.pal | 19 + graphics/pokemon/sealeo/shiny_gba.pal | 19 + graphics/pokemon/seedot/anim_front_gba.png | Bin 0 -> 800 bytes graphics/pokemon/seedot/back_gba.png | Bin 0 -> 561 bytes graphics/pokemon/seedot/icon_gba.png | Bin 0 -> 271 bytes graphics/pokemon/seedot/normal_gba.pal | 19 + graphics/pokemon/seedot/shiny_gba.pal | 19 + graphics/pokemon/seel/anim_front_gba.png | Bin 0 -> 1042 bytes graphics/pokemon/seel/back_gba.png | Bin 0 -> 581 bytes graphics/pokemon/seel/icon_gba.png | Bin 0 -> 382 bytes graphics/pokemon/seel/normal_gba.pal | 19 + graphics/pokemon/seel/shiny_gba.pal | 19 + graphics/pokemon/sentret/anim_front_gba.png | Bin 0 -> 884 bytes graphics/pokemon/sentret/back_gba.png | Bin 0 -> 549 bytes graphics/pokemon/sentret/icon_gba.png | Bin 0 -> 363 bytes graphics/pokemon/sentret/normal_gba.pal | 19 + graphics/pokemon/sentret/shiny_gba.pal | 19 + graphics/pokemon/seviper/anim_front_gba.png | Bin 0 -> 1488 bytes graphics/pokemon/seviper/back_gba.png | Bin 0 -> 934 bytes graphics/pokemon/seviper/icon_gba.png | Bin 0 -> 368 bytes graphics/pokemon/seviper/normal_gba.pal | 19 + graphics/pokemon/seviper/shiny_gba.pal | 19 + graphics/pokemon/sharpedo/anim_front_gba.png | Bin 0 -> 1177 bytes graphics/pokemon/sharpedo/back_gba.png | Bin 0 -> 676 bytes graphics/pokemon/sharpedo/icon_gba.png | Bin 0 -> 373 bytes graphics/pokemon/sharpedo/normal_gba.pal | 19 + graphics/pokemon/sharpedo/shiny_gba.pal | 19 + graphics/pokemon/shedinja/anim_front_gba.png | Bin 0 -> 1073 bytes graphics/pokemon/shedinja/back_gba.png | Bin 0 -> 763 bytes graphics/pokemon/shedinja/icon_gba.png | Bin 0 -> 298 bytes graphics/pokemon/shedinja/normal_gba.pal | 19 + graphics/pokemon/shedinja/shiny_gba.pal | 19 + graphics/pokemon/shelgon/anim_front_gba.png | Bin 0 -> 1028 bytes graphics/pokemon/shelgon/back_gba.png | Bin 0 -> 549 bytes graphics/pokemon/shelgon/icon_gba.png | Bin 0 -> 333 bytes graphics/pokemon/shelgon/normal_gba.pal | 19 + graphics/pokemon/shelgon/shiny_gba.pal | 19 + graphics/pokemon/shellder/anim_front_gba.png | Bin 0 -> 733 bytes graphics/pokemon/shellder/back_gba.png | Bin 0 -> 586 bytes graphics/pokemon/shellder/icon_gba.png | Bin 0 -> 295 bytes graphics/pokemon/shellder/normal_gba.pal | 19 + graphics/pokemon/shellder/shiny_gba.pal | 19 + graphics/pokemon/shiftry/anim_front_gba.png | Bin 0 -> 1150 bytes graphics/pokemon/shiftry/back_gba.png | Bin 0 -> 580 bytes graphics/pokemon/shiftry/icon_gba.png | Bin 0 -> 349 bytes graphics/pokemon/shiftry/normal_gba.pal | 19 + graphics/pokemon/shiftry/shiny_gba.pal | 19 + graphics/pokemon/shroomish/anim_front_gba.png | Bin 0 -> 642 bytes graphics/pokemon/shroomish/back_gba.png | Bin 0 -> 540 bytes graphics/pokemon/shroomish/footprint_gba.png | Bin 0 -> 104 bytes graphics/pokemon/shroomish/icon_gba.png | Bin 0 -> 317 bytes graphics/pokemon/shroomish/normal_gba.pal | 19 + graphics/pokemon/shroomish/shiny_gba.pal | 19 + graphics/pokemon/shuckle/anim_front_gba.png | Bin 0 -> 796 bytes graphics/pokemon/shuckle/back_gba.png | Bin 0 -> 483 bytes graphics/pokemon/shuckle/icon_gba.png | Bin 0 -> 334 bytes graphics/pokemon/shuckle/normal_gba.pal | 19 + graphics/pokemon/shuckle/shiny_gba.pal | 19 + graphics/pokemon/shuppet/anim_front_gba.png | Bin 0 -> 543 bytes graphics/pokemon/shuppet/back_gba.png | Bin 0 -> 485 bytes graphics/pokemon/shuppet/icon_gba.png | Bin 0 -> 275 bytes graphics/pokemon/shuppet/normal_gba.pal | 19 + graphics/pokemon/shuppet/shiny_gba.pal | 19 + graphics/pokemon/silcoon/anim_front_gba.png | Bin 0 -> 584 bytes graphics/pokemon/silcoon/back_gba.png | Bin 0 -> 396 bytes graphics/pokemon/silcoon/icon_gba.png | Bin 0 -> 329 bytes graphics/pokemon/silcoon/normal_gba.pal | 19 + graphics/pokemon/silcoon/shiny_gba.pal | 19 + graphics/pokemon/skarmory/anim_front_gba.png | Bin 0 -> 1559 bytes graphics/pokemon/skarmory/back_gba.png | Bin 0 -> 577 bytes graphics/pokemon/skarmory/icon_gba.png | Bin 0 -> 418 bytes graphics/pokemon/skarmory/normal_gba.pal | 19 + graphics/pokemon/skarmory/shiny_gba.pal | 19 + graphics/pokemon/skiploom/anim_front_gba.png | Bin 0 -> 717 bytes graphics/pokemon/skiploom/back_gba.png | Bin 0 -> 575 bytes graphics/pokemon/skiploom/icon_gba.png | Bin 0 -> 375 bytes graphics/pokemon/skiploom/normal_gba.pal | 19 + graphics/pokemon/skiploom/shiny_gba.pal | 19 + graphics/pokemon/skitty/anim_front_gba.png | Bin 0 -> 1035 bytes graphics/pokemon/skitty/back_gba.png | Bin 0 -> 677 bytes graphics/pokemon/skitty/icon_gba.png | Bin 0 -> 371 bytes graphics/pokemon/skitty/normal_gba.pal | 19 + graphics/pokemon/skitty/shiny_gba.pal | 19 + graphics/pokemon/slaking/anim_front_gba.png | Bin 0 -> 1335 bytes graphics/pokemon/slaking/back_gba.png | Bin 0 -> 788 bytes graphics/pokemon/slaking/icon_gba.png | Bin 0 -> 437 bytes graphics/pokemon/slaking/normal_gba.pal | 19 + graphics/pokemon/slaking/shiny_gba.pal | 19 + graphics/pokemon/slakoth/anim_front_gba.png | Bin 0 -> 652 bytes graphics/pokemon/slakoth/back_gba.png | Bin 0 -> 583 bytes graphics/pokemon/slakoth/icon_gba.png | Bin 0 -> 319 bytes graphics/pokemon/slakoth/normal_gba.pal | 19 + graphics/pokemon/slakoth/shiny_gba.pal | 19 + graphics/pokemon/slowbro/anim_front_gba.png | Bin 0 -> 1475 bytes graphics/pokemon/slowbro/back_gba.png | Bin 0 -> 737 bytes graphics/pokemon/slowbro/icon_gba.png | Bin 0 -> 446 bytes graphics/pokemon/slowbro/normal_gba.pal | 19 + graphics/pokemon/slowbro/shiny_gba.pal | 19 + graphics/pokemon/slowking/anim_front_gba.png | Bin 0 -> 1166 bytes graphics/pokemon/slowking/back_gba.png | Bin 0 -> 712 bytes graphics/pokemon/slowking/icon_gba.png | Bin 0 -> 364 bytes graphics/pokemon/slowking/normal_gba.pal | 19 + graphics/pokemon/slowking/shiny_gba.pal | 19 + graphics/pokemon/slowpoke/anim_front_gba.png | Bin 0 -> 889 bytes graphics/pokemon/slowpoke/back_gba.png | Bin 0 -> 494 bytes graphics/pokemon/slowpoke/icon_gba.png | Bin 0 -> 342 bytes graphics/pokemon/slowpoke/normal_gba.pal | 19 + graphics/pokemon/slowpoke/shiny_gba.pal | 19 + graphics/pokemon/slugma/anim_front_gba.png | Bin 0 -> 723 bytes graphics/pokemon/slugma/back_gba.png | Bin 0 -> 584 bytes graphics/pokemon/slugma/icon_gba.png | Bin 0 -> 343 bytes graphics/pokemon/slugma/normal_gba.pal | 19 + graphics/pokemon/slugma/shiny_gba.pal | 19 + graphics/pokemon/smeargle/anim_front_gba.png | Bin 0 -> 1312 bytes graphics/pokemon/smeargle/back_gba.png | Bin 0 -> 648 bytes graphics/pokemon/smeargle/icon_gba.png | Bin 0 -> 377 bytes graphics/pokemon/smeargle/normal_gba.pal | 19 + graphics/pokemon/smeargle/shiny_gba.pal | 19 + graphics/pokemon/smoochum/anim_front_gba.png | Bin 0 -> 678 bytes graphics/pokemon/smoochum/back_gba.png | Bin 0 -> 507 bytes graphics/pokemon/smoochum/icon_gba.png | Bin 0 -> 414 bytes graphics/pokemon/smoochum/normal_gba.pal | 19 + graphics/pokemon/smoochum/shiny_gba.pal | 19 + graphics/pokemon/sneasel/anim_front_gba.png | Bin 0 -> 1121 bytes graphics/pokemon/sneasel/back_gba.png | Bin 0 -> 664 bytes graphics/pokemon/sneasel/icon_gba.png | Bin 0 -> 347 bytes graphics/pokemon/sneasel/normal_gba.pal | 19 + graphics/pokemon/sneasel/shiny_gba.pal | 19 + graphics/pokemon/snorlax/anim_front_gba.png | Bin 0 -> 1368 bytes graphics/pokemon/snorlax/back_gba.png | Bin 0 -> 419 bytes graphics/pokemon/snorlax/icon_gba.png | Bin 0 -> 346 bytes graphics/pokemon/snorlax/normal_gba.pal | 19 + graphics/pokemon/snorlax/shiny_gba.pal | 19 + graphics/pokemon/snorunt/anim_front_gba.png | Bin 0 -> 914 bytes graphics/pokemon/snorunt/back_gba.png | Bin 0 -> 557 bytes graphics/pokemon/snorunt/icon_gba.png | Bin 0 -> 283 bytes graphics/pokemon/snorunt/normal_gba.pal | 19 + graphics/pokemon/snorunt/shiny_gba.pal | 19 + graphics/pokemon/snubbull/anim_front_gba.png | Bin 0 -> 929 bytes graphics/pokemon/snubbull/back_gba.png | Bin 0 -> 627 bytes graphics/pokemon/snubbull/icon_gba.png | Bin 0 -> 325 bytes graphics/pokemon/snubbull/normal_gba.pal | 19 + graphics/pokemon/snubbull/shiny_gba.pal | 19 + graphics/pokemon/solrock/anim_front_gba.png | Bin 0 -> 1585 bytes graphics/pokemon/solrock/back_gba.png | Bin 0 -> 802 bytes graphics/pokemon/solrock/icon_gba.png | Bin 0 -> 286 bytes graphics/pokemon/solrock/normal_gba.pal | 19 + graphics/pokemon/solrock/shiny_gba.pal | 19 + graphics/pokemon/spearow/anim_front_gba.png | Bin 0 -> 899 bytes graphics/pokemon/spearow/back_gba.png | Bin 0 -> 601 bytes graphics/pokemon/spearow/icon_gba.png | Bin 0 -> 346 bytes graphics/pokemon/spearow/normal_gba.pal | 19 + graphics/pokemon/spearow/shiny_gba.pal | 19 + graphics/pokemon/spheal/anim_front_gba.png | Bin 0 -> 768 bytes graphics/pokemon/spheal/back_gba.png | Bin 0 -> 405 bytes graphics/pokemon/spheal/icon_gba.png | Bin 0 -> 317 bytes graphics/pokemon/spheal/normal_gba.pal | 19 + graphics/pokemon/spheal/shiny_gba.pal | 19 + graphics/pokemon/spinarak/anim_front_gba.png | Bin 0 -> 759 bytes graphics/pokemon/spinarak/back_gba.png | Bin 0 -> 465 bytes graphics/pokemon/spinarak/icon_gba.png | Bin 0 -> 345 bytes graphics/pokemon/spinarak/normal_gba.pal | 19 + graphics/pokemon/spinarak/shiny_gba.pal | 19 + graphics/pokemon/spoink/anim_front_gba.png | Bin 0 -> 663 bytes graphics/pokemon/spoink/back_gba.png | Bin 0 -> 453 bytes graphics/pokemon/spoink/icon_gba.png | Bin 0 -> 277 bytes graphics/pokemon/spoink/normal_gba.pal | 19 + graphics/pokemon/spoink/shiny_gba.pal | 19 + graphics/pokemon/squirtle/anim_front_gba.png | Bin 0 -> 899 bytes graphics/pokemon/squirtle/back_gba.png | Bin 0 -> 485 bytes graphics/pokemon/squirtle/icon_gba.png | Bin 0 -> 344 bytes graphics/pokemon/squirtle/normal_gba.pal | 19 + graphics/pokemon/squirtle/shiny_gba.pal | 19 + graphics/pokemon/stantler/anim_front_gba.png | Bin 0 -> 1513 bytes graphics/pokemon/stantler/back_gba.png | Bin 0 -> 680 bytes graphics/pokemon/stantler/icon_gba.png | Bin 0 -> 356 bytes graphics/pokemon/stantler/normal_gba.pal | 19 + graphics/pokemon/stantler/shiny_gba.pal | 19 + graphics/pokemon/starmie/anim_front_gba.png | Bin 0 -> 1253 bytes graphics/pokemon/starmie/back_gba.png | Bin 0 -> 501 bytes graphics/pokemon/starmie/icon_gba.png | Bin 0 -> 380 bytes graphics/pokemon/starmie/normal_gba.pal | 19 + graphics/pokemon/starmie/shiny_gba.pal | 19 + graphics/pokemon/staryu/anim_front_gba.png | Bin 0 -> 973 bytes graphics/pokemon/staryu/back_gba.png | Bin 0 -> 481 bytes graphics/pokemon/staryu/icon_gba.png | Bin 0 -> 294 bytes graphics/pokemon/staryu/normal_gba.pal | 19 + graphics/pokemon/staryu/shiny_gba.pal | 19 + graphics/pokemon/steelix/anim_front_gba.png | Bin 0 -> 1476 bytes graphics/pokemon/steelix/back_gba.png | Bin 0 -> 819 bytes graphics/pokemon/steelix/icon_gba.png | Bin 0 -> 433 bytes graphics/pokemon/steelix/normal_gba.pal | 19 + graphics/pokemon/steelix/shiny_gba.pal | 19 + graphics/pokemon/sudowoodo/anim_front_gba.png | Bin 0 -> 1077 bytes graphics/pokemon/sudowoodo/back_gba.png | Bin 0 -> 696 bytes graphics/pokemon/sudowoodo/icon_gba.png | Bin 0 -> 395 bytes graphics/pokemon/sudowoodo/normal_gba.pal | 19 + graphics/pokemon/sudowoodo/shiny_gba.pal | 19 + graphics/pokemon/suicune/anim_front_gba.png | Bin 0 -> 2161 bytes graphics/pokemon/suicune/back_gba.png | Bin 0 -> 975 bytes graphics/pokemon/suicune/icon_gba.png | Bin 0 -> 471 bytes graphics/pokemon/suicune/normal_gba.pal | 19 + graphics/pokemon/suicune/shiny_gba.pal | 19 + graphics/pokemon/sunflora/anim_front_gba.png | Bin 0 -> 1050 bytes graphics/pokemon/sunflora/back_gba.png | Bin 0 -> 749 bytes graphics/pokemon/sunflora/icon_gba.png | Bin 0 -> 447 bytes graphics/pokemon/sunflora/normal_gba.pal | 19 + graphics/pokemon/sunflora/shiny_gba.pal | 19 + graphics/pokemon/sunkern/anim_front_gba.png | Bin 0 -> 592 bytes graphics/pokemon/sunkern/back_gba.png | Bin 0 -> 555 bytes graphics/pokemon/sunkern/icon_gba.png | Bin 0 -> 366 bytes graphics/pokemon/sunkern/normal_gba.pal | 19 + graphics/pokemon/sunkern/shiny_gba.pal | 19 + graphics/pokemon/surskit/anim_front_gba.png | Bin 0 -> 614 bytes graphics/pokemon/surskit/back_gba.png | Bin 0 -> 459 bytes graphics/pokemon/surskit/icon_gba.png | Bin 0 -> 325 bytes graphics/pokemon/surskit/normal_gba.pal | 19 + graphics/pokemon/surskit/shiny_gba.pal | 19 + graphics/pokemon/swablu/anim_front_gba.png | Bin 0 -> 931 bytes graphics/pokemon/swablu/back_gba.png | Bin 0 -> 740 bytes graphics/pokemon/swablu/icon_gba.png | Bin 0 -> 324 bytes graphics/pokemon/swablu/normal_gba.pal | 19 + graphics/pokemon/swablu/shiny_gba.pal | 19 + graphics/pokemon/swalot/anim_front_gba.png | Bin 0 -> 1081 bytes graphics/pokemon/swalot/back_gba.png | Bin 0 -> 687 bytes graphics/pokemon/swalot/icon_gba.png | Bin 0 -> 315 bytes graphics/pokemon/swalot/normal_gba.pal | 19 + graphics/pokemon/swalot/shiny_gba.pal | 19 + graphics/pokemon/swampert/anim_front_gba.png | Bin 0 -> 1868 bytes graphics/pokemon/swampert/back_gba.png | Bin 0 -> 768 bytes graphics/pokemon/swampert/icon_gba.png | Bin 0 -> 417 bytes graphics/pokemon/swampert/normal_gba.pal | 19 + graphics/pokemon/swampert/shiny_gba.pal | 19 + graphics/pokemon/swellow/anim_front_gba.png | Bin 0 -> 1046 bytes graphics/pokemon/swellow/back_gba.png | Bin 0 -> 669 bytes graphics/pokemon/swellow/icon_gba.png | Bin 0 -> 369 bytes graphics/pokemon/swellow/normal_gba.pal | 19 + graphics/pokemon/swellow/shiny_gba.pal | 19 + graphics/pokemon/swinub/anim_front_gba.png | Bin 0 -> 551 bytes graphics/pokemon/swinub/back_gba.png | Bin 0 -> 382 bytes graphics/pokemon/swinub/icon_gba.png | Bin 0 -> 320 bytes graphics/pokemon/swinub/normal_gba.pal | 19 + graphics/pokemon/swinub/shiny_gba.pal | 19 + graphics/pokemon/taillow/anim_front_gba.png | Bin 0 -> 999 bytes graphics/pokemon/taillow/back_gba.png | Bin 0 -> 446 bytes graphics/pokemon/taillow/icon_gba.png | Bin 0 -> 329 bytes graphics/pokemon/taillow/normal_gba.pal | 19 + graphics/pokemon/taillow/shiny_gba.pal | 19 + graphics/pokemon/tangela/anim_front_gba.png | Bin 0 -> 1274 bytes graphics/pokemon/tangela/back_gba.png | Bin 0 -> 676 bytes graphics/pokemon/tangela/icon_gba.png | Bin 0 -> 365 bytes graphics/pokemon/tangela/normal_gba.pal | 19 + graphics/pokemon/tangela/shiny_gba.pal | 19 + graphics/pokemon/tauros/anim_front_gba.png | Bin 0 -> 1766 bytes graphics/pokemon/tauros/back_gba.png | Bin 0 -> 561 bytes graphics/pokemon/tauros/icon_gba.png | Bin 0 -> 421 bytes graphics/pokemon/tauros/normal_gba.pal | 19 + graphics/pokemon/tauros/shiny_gba.pal | 19 + graphics/pokemon/teddiursa/anim_front_gba.png | Bin 0 -> 551 bytes graphics/pokemon/teddiursa/back_gba.png | Bin 0 -> 512 bytes graphics/pokemon/teddiursa/icon_gba.png | Bin 0 -> 304 bytes graphics/pokemon/teddiursa/normal_gba.pal | 19 + graphics/pokemon/teddiursa/shiny_gba.pal | 19 + graphics/pokemon/tentacool/anim_front_gba.png | Bin 0 -> 812 bytes graphics/pokemon/tentacool/back_gba.png | Bin 0 -> 556 bytes graphics/pokemon/tentacool/icon_gba.png | Bin 0 -> 333 bytes graphics/pokemon/tentacool/normal_gba.pal | 19 + graphics/pokemon/tentacool/shiny_gba.pal | 19 + .../pokemon/tentacruel/anim_front_gba.png | Bin 0 -> 1345 bytes graphics/pokemon/tentacruel/back_gba.png | Bin 0 -> 736 bytes graphics/pokemon/tentacruel/icon_gba.png | Bin 0 -> 486 bytes graphics/pokemon/tentacruel/normal_gba.pal | 19 + graphics/pokemon/tentacruel/shiny_gba.pal | 19 + graphics/pokemon/togepi/anim_front_gba.png | Bin 0 -> 500 bytes graphics/pokemon/togepi/back_gba.png | Bin 0 -> 514 bytes graphics/pokemon/togepi/icon_gba.png | Bin 0 -> 347 bytes graphics/pokemon/togepi/normal_gba.pal | 19 + graphics/pokemon/togepi/shiny_gba.pal | 19 + graphics/pokemon/togetic/anim_front_gba.png | Bin 0 -> 830 bytes graphics/pokemon/togetic/back_gba.png | Bin 0 -> 630 bytes graphics/pokemon/togetic/icon_gba.png | Bin 0 -> 324 bytes graphics/pokemon/togetic/normal_gba.pal | 19 + graphics/pokemon/togetic/shiny_gba.pal | 19 + graphics/pokemon/torchic/anim_front_gba.png | Bin 0 -> 871 bytes graphics/pokemon/torchic/back_gba.png | Bin 0 -> 576 bytes graphics/pokemon/torchic/icon_gba.png | Bin 0 -> 338 bytes graphics/pokemon/torchic/normal_gba.pal | 19 + graphics/pokemon/torchic/shiny_gba.pal | 19 + graphics/pokemon/torkoal/anim_front_gba.png | Bin 0 -> 1616 bytes graphics/pokemon/torkoal/back_gba.png | Bin 0 -> 569 bytes graphics/pokemon/torkoal/icon_gba.png | Bin 0 -> 342 bytes graphics/pokemon/torkoal/normal_gba.pal | 19 + graphics/pokemon/torkoal/shiny_gba.pal | 19 + graphics/pokemon/totodile/anim_front_gba.png | Bin 0 -> 850 bytes graphics/pokemon/totodile/back_gba.png | Bin 0 -> 599 bytes graphics/pokemon/totodile/icon_gba.png | Bin 0 -> 331 bytes graphics/pokemon/totodile/normal_gba.pal | 19 + graphics/pokemon/totodile/shiny_gba.pal | 19 + graphics/pokemon/trapinch/anim_front_gba.png | Bin 0 -> 621 bytes graphics/pokemon/trapinch/back_gba.png | Bin 0 -> 437 bytes graphics/pokemon/trapinch/icon_gba.png | Bin 0 -> 314 bytes graphics/pokemon/trapinch/normal_gba.pal | 19 + graphics/pokemon/trapinch/shiny_gba.pal | 19 + graphics/pokemon/treecko/anim_front_gba.png | Bin 0 -> 1000 bytes graphics/pokemon/treecko/back_gba.png | Bin 0 -> 636 bytes graphics/pokemon/treecko/icon_gba.png | Bin 0 -> 346 bytes graphics/pokemon/treecko/normal_gba.pal | 19 + graphics/pokemon/treecko/shiny_gba.pal | 19 + graphics/pokemon/tropius/anim_front_gba.png | Bin 0 -> 1876 bytes graphics/pokemon/tropius/back_gba.png | Bin 0 -> 632 bytes graphics/pokemon/tropius/icon_gba.png | Bin 0 -> 422 bytes graphics/pokemon/tropius/normal_gba.pal | 19 + graphics/pokemon/tropius/shiny_gba.pal | 19 + .../pokemon/typhlosion/anim_front_gba.png | Bin 0 -> 1448 bytes graphics/pokemon/typhlosion/back_gba.png | Bin 0 -> 849 bytes graphics/pokemon/typhlosion/icon_gba.png | Bin 0 -> 417 bytes graphics/pokemon/typhlosion/normal_gba.pal | 19 + graphics/pokemon/typhlosion/shiny_gba.pal | 19 + graphics/pokemon/tyranitar/anim_front_gba.png | Bin 0 -> 1876 bytes graphics/pokemon/tyranitar/back_gba.png | Bin 0 -> 776 bytes graphics/pokemon/tyranitar/icon_gba.png | Bin 0 -> 435 bytes graphics/pokemon/tyranitar/normal_gba.pal | 19 + graphics/pokemon/tyranitar/shiny_gba.pal | 19 + graphics/pokemon/tyrogue/anim_front_gba.png | Bin 0 -> 852 bytes graphics/pokemon/tyrogue/back_gba.png | Bin 0 -> 618 bytes graphics/pokemon/tyrogue/icon_gba.png | Bin 0 -> 321 bytes graphics/pokemon/tyrogue/normal_gba.pal | 19 + graphics/pokemon/tyrogue/shiny_gba.pal | 19 + graphics/pokemon/umbreon/anim_front_gba.png | Bin 0 -> 1084 bytes graphics/pokemon/umbreon/back_gba.png | Bin 0 -> 638 bytes graphics/pokemon/umbreon/icon_gba.png | Bin 0 -> 358 bytes graphics/pokemon/umbreon/normal_gba.pal | 19 + graphics/pokemon/umbreon/shiny_gba.pal | 19 + graphics/pokemon/ursaring/anim_front_gba.png | Bin 0 -> 1517 bytes graphics/pokemon/ursaring/back_gba.png | Bin 0 -> 718 bytes graphics/pokemon/ursaring/icon_gba.png | Bin 0 -> 355 bytes graphics/pokemon/ursaring/normal_gba.pal | 19 + graphics/pokemon/ursaring/shiny_gba.pal | 19 + graphics/pokemon/vaporeon/anim_front_gba.png | Bin 0 -> 1281 bytes graphics/pokemon/vaporeon/back_gba.png | Bin 0 -> 572 bytes graphics/pokemon/vaporeon/icon_gba.png | Bin 0 -> 393 bytes graphics/pokemon/vaporeon/normal_gba.pal | 19 + graphics/pokemon/vaporeon/shiny_gba.pal | 19 + graphics/pokemon/venomoth/anim_front_gba.png | Bin 0 -> 1534 bytes graphics/pokemon/venomoth/back_gba.png | Bin 0 -> 785 bytes graphics/pokemon/venomoth/icon_gba.png | Bin 0 -> 400 bytes graphics/pokemon/venomoth/normal_gba.pal | 19 + graphics/pokemon/venomoth/shiny_gba.pal | 19 + graphics/pokemon/venonat/anim_front_gba.png | Bin 0 -> 1170 bytes graphics/pokemon/venonat/back_gba.png | Bin 0 -> 678 bytes graphics/pokemon/venonat/icon_gba.png | Bin 0 -> 322 bytes graphics/pokemon/venonat/normal_gba.pal | 19 + graphics/pokemon/venonat/shiny_gba.pal | 19 + graphics/pokemon/venusaur/anim_front_gba.png | Bin 0 -> 1958 bytes graphics/pokemon/venusaur/back_gba.png | Bin 0 -> 980 bytes graphics/pokemon/venusaur/icon_gba.png | Bin 0 -> 447 bytes graphics/pokemon/venusaur/normal_gba.pal | 19 + graphics/pokemon/venusaur/shiny_gba.pal | 19 + graphics/pokemon/vibrava/anim_front_gba.png | Bin 0 -> 1231 bytes graphics/pokemon/vibrava/back_gba.png | Bin 0 -> 518 bytes graphics/pokemon/vibrava/icon_gba.png | Bin 0 -> 356 bytes graphics/pokemon/vibrava/normal_gba.pal | 19 + graphics/pokemon/vibrava/shiny_gba.pal | 19 + .../pokemon/victreebel/anim_front_gba.png | Bin 0 -> 1509 bytes graphics/pokemon/victreebel/back_gba.png | Bin 0 -> 752 bytes graphics/pokemon/victreebel/icon_gba.png | Bin 0 -> 437 bytes graphics/pokemon/victreebel/normal_gba.pal | 19 + graphics/pokemon/victreebel/shiny_gba.pal | 19 + graphics/pokemon/vigoroth/anim_front_gba.png | Bin 0 -> 1522 bytes graphics/pokemon/vigoroth/back_gba.png | Bin 0 -> 589 bytes graphics/pokemon/vigoroth/icon_gba.png | Bin 0 -> 358 bytes graphics/pokemon/vigoroth/normal_gba.pal | 19 + graphics/pokemon/vigoroth/shiny_gba.pal | 19 + graphics/pokemon/vileplume/anim_front_gba.png | Bin 0 -> 1085 bytes graphics/pokemon/vileplume/back_gba.png | Bin 0 -> 825 bytes graphics/pokemon/vileplume/icon_gba.png | Bin 0 -> 410 bytes graphics/pokemon/vileplume/normal_gba.pal | 19 + graphics/pokemon/vileplume/shiny_gba.pal | 19 + graphics/pokemon/volbeat/anim_front_gba.png | Bin 0 -> 1215 bytes graphics/pokemon/volbeat/back_gba.png | Bin 0 -> 702 bytes graphics/pokemon/volbeat/icon_gba.png | Bin 0 -> 335 bytes graphics/pokemon/volbeat/normal_gba.pal | 19 + graphics/pokemon/volbeat/shiny_gba.pal | 19 + graphics/pokemon/voltorb/anim_front_gba.png | Bin 0 -> 531 bytes graphics/pokemon/voltorb/back_gba.png | Bin 0 -> 475 bytes graphics/pokemon/voltorb/icon_gba.png | Bin 0 -> 242 bytes graphics/pokemon/voltorb/normal_gba.pal | 19 + graphics/pokemon/voltorb/shiny_gba.pal | 19 + graphics/pokemon/vulpix/anim_front_gba.png | Bin 0 -> 1225 bytes graphics/pokemon/vulpix/back_gba.png | Bin 0 -> 660 bytes graphics/pokemon/vulpix/icon_gba.png | Bin 0 -> 307 bytes graphics/pokemon/vulpix/normal_gba.pal | 19 + graphics/pokemon/vulpix/shiny_gba.pal | 19 + graphics/pokemon/wailmer/anim_front_gba.png | Bin 0 -> 906 bytes graphics/pokemon/wailmer/back_gba.png | Bin 0 -> 347 bytes graphics/pokemon/wailmer/icon_gba.png | Bin 0 -> 359 bytes graphics/pokemon/wailmer/normal_gba.pal | 19 + graphics/pokemon/wailmer/shiny_gba.pal | 19 + graphics/pokemon/wailord/anim_front_gba.png | Bin 0 -> 1274 bytes graphics/pokemon/wailord/back_gba.png | Bin 0 -> 368 bytes graphics/pokemon/wailord/icon_gba.png | Bin 0 -> 392 bytes graphics/pokemon/wailord/normal_gba.pal | 19 + graphics/pokemon/wailord/shiny_gba.pal | 19 + graphics/pokemon/walrein/anim_front_gba.png | Bin 0 -> 1629 bytes graphics/pokemon/walrein/back_gba.png | Bin 0 -> 727 bytes graphics/pokemon/walrein/icon_gba.png | Bin 0 -> 473 bytes graphics/pokemon/walrein/normal_gba.pal | 19 + graphics/pokemon/walrein/shiny_gba.pal | 19 + graphics/pokemon/wartortle/anim_front_gba.png | Bin 0 -> 1345 bytes graphics/pokemon/wartortle/back_gba.png | Bin 0 -> 656 bytes graphics/pokemon/wartortle/icon_gba.png | Bin 0 -> 371 bytes graphics/pokemon/wartortle/normal_gba.pal | 19 + graphics/pokemon/wartortle/shiny_gba.pal | 19 + graphics/pokemon/weedle/anim_front_gba.png | Bin 0 -> 686 bytes graphics/pokemon/weedle/back_gba.png | Bin 0 -> 502 bytes graphics/pokemon/weedle/icon_gba.png | Bin 0 -> 279 bytes graphics/pokemon/weedle/normal_gba.pal | 19 + graphics/pokemon/weedle/shiny_gba.pal | 19 + .../pokemon/weepinbell/anim_front_gba.png | Bin 0 -> 1099 bytes graphics/pokemon/weepinbell/back_gba.png | Bin 0 -> 625 bytes graphics/pokemon/weepinbell/icon_gba.png | Bin 0 -> 365 bytes graphics/pokemon/weepinbell/normal_gba.pal | 19 + graphics/pokemon/weepinbell/shiny_gba.pal | 19 + graphics/pokemon/weezing/anim_front_gba.png | Bin 0 -> 1634 bytes graphics/pokemon/weezing/back_gba.png | Bin 0 -> 623 bytes graphics/pokemon/weezing/icon_gba.png | Bin 0 -> 456 bytes graphics/pokemon/weezing/normal_gba.pal | 19 + graphics/pokemon/weezing/shiny_gba.pal | 19 + graphics/pokemon/whiscash/anim_front_gba.png | Bin 0 -> 1080 bytes graphics/pokemon/whiscash/back_gba.png | Bin 0 -> 690 bytes graphics/pokemon/whiscash/icon_gba.png | Bin 0 -> 420 bytes graphics/pokemon/whiscash/normal_gba.pal | 19 + graphics/pokemon/whiscash/shiny_gba.pal | 19 + graphics/pokemon/whismur/anim_front_gba.png | Bin 0 -> 787 bytes graphics/pokemon/whismur/back_gba.png | Bin 0 -> 493 bytes graphics/pokemon/whismur/icon_gba.png | Bin 0 -> 291 bytes graphics/pokemon/whismur/normal_gba.pal | 19 + graphics/pokemon/whismur/shiny_gba.pal | 19 + .../pokemon/wigglytuff/anim_front_gba.png | Bin 0 -> 1210 bytes graphics/pokemon/wigglytuff/back_gba.png | Bin 0 -> 526 bytes graphics/pokemon/wigglytuff/icon_gba.png | Bin 0 -> 327 bytes graphics/pokemon/wigglytuff/normal_gba.pal | 19 + graphics/pokemon/wigglytuff/shiny_gba.pal | 19 + graphics/pokemon/wingull/anim_front_gba.png | Bin 0 -> 694 bytes graphics/pokemon/wingull/back_gba.png | Bin 0 -> 684 bytes graphics/pokemon/wingull/icon_gba.png | Bin 0 -> 360 bytes graphics/pokemon/wingull/normal_gba.pal | 19 + graphics/pokemon/wingull/shiny_gba.pal | 19 + graphics/pokemon/wobbuffet/anim_front_gba.png | Bin 0 -> 1129 bytes graphics/pokemon/wobbuffet/back_gba.png | Bin 0 -> 433 bytes graphics/pokemon/wobbuffet/icon_gba.png | Bin 0 -> 335 bytes graphics/pokemon/wobbuffet/normal_gba.pal | 19 + graphics/pokemon/wobbuffet/shiny_gba.pal | 19 + graphics/pokemon/wooper/anim_front_gba.png | Bin 0 -> 644 bytes graphics/pokemon/wooper/back_gba.png | Bin 0 -> 533 bytes graphics/pokemon/wooper/icon_gba.png | Bin 0 -> 307 bytes graphics/pokemon/wooper/normal_gba.pal | 19 + graphics/pokemon/wooper/shiny_gba.pal | 19 + graphics/pokemon/wurmple/anim_front_gba.png | Bin 0 -> 890 bytes graphics/pokemon/wurmple/back_gba.png | Bin 0 -> 488 bytes graphics/pokemon/wurmple/icon_gba.png | Bin 0 -> 331 bytes graphics/pokemon/wurmple/normal_gba.pal | 19 + graphics/pokemon/wurmple/shiny_gba.pal | 19 + graphics/pokemon/wynaut/anim_front_gba.png | Bin 0 -> 787 bytes graphics/pokemon/wynaut/back_gba.png | Bin 0 -> 498 bytes graphics/pokemon/wynaut/icon_gba.png | Bin 0 -> 353 bytes graphics/pokemon/wynaut/normal_gba.pal | 19 + graphics/pokemon/wynaut/shiny_gba.pal | 19 + graphics/pokemon/xatu/anim_front_gba.png | Bin 0 -> 1027 bytes graphics/pokemon/xatu/back_gba.png | Bin 0 -> 716 bytes graphics/pokemon/xatu/icon_gba.png | Bin 0 -> 350 bytes graphics/pokemon/xatu/normal_gba.pal | 19 + graphics/pokemon/xatu/shiny_gba.pal | 19 + graphics/pokemon/yanma/anim_front_gba.png | Bin 0 -> 1088 bytes graphics/pokemon/yanma/back_gba.png | Bin 0 -> 796 bytes graphics/pokemon/yanma/icon_gba.png | Bin 0 -> 388 bytes graphics/pokemon/yanma/normal_gba.pal | 19 + graphics/pokemon/yanma/shiny_gba.pal | 19 + graphics/pokemon/zangoose/anim_front_gba.png | Bin 0 -> 1398 bytes graphics/pokemon/zangoose/back_gba.png | Bin 0 -> 734 bytes graphics/pokemon/zangoose/icon_gba.png | Bin 0 -> 419 bytes graphics/pokemon/zangoose/normal_gba.pal | 19 + graphics/pokemon/zangoose/shiny_gba.pal | 19 + graphics/pokemon/zapdos/anim_front_gba.png | Bin 0 -> 1576 bytes graphics/pokemon/zapdos/back_gba.png | Bin 0 -> 652 bytes graphics/pokemon/zapdos/icon_gba.png | Bin 0 -> 375 bytes graphics/pokemon/zapdos/normal_gba.pal | 19 + graphics/pokemon/zapdos/shiny_gba.pal | 19 + graphics/pokemon/zigzagoon/anim_front_gba.png | Bin 0 -> 1372 bytes graphics/pokemon/zigzagoon/back_gba.png | Bin 0 -> 683 bytes graphics/pokemon/zigzagoon/icon_gba.png | Bin 0 -> 347 bytes graphics/pokemon/zigzagoon/normal_gba.pal | 19 + graphics/pokemon/zigzagoon/shiny_gba.pal | 19 + graphics/pokemon/zubat/anim_front_gba.png | Bin 0 -> 914 bytes graphics/pokemon/zubat/back_gba.png | Bin 0 -> 526 bytes graphics/pokemon/zubat/icon_gba.png | Bin 0 -> 335 bytes graphics/pokemon/zubat/normal_gba.pal | 19 + graphics/pokemon/zubat/shiny_gba.pal | 19 + include/config/pokemon.h | 11 +- src/battle_anim_effects_1.c | 2 +- src/battle_controller_opponent.c | 1 + src/battle_controller_recorded_opponent.c | 1 + src/battle_gfx_sfx_util.c | 12 +- src/data/graphics/pokemon.h | 4231 ++++++++++++++++- src/data/pokemon/species_info.h | 2 +- .../pokemon/species_info/gen_1_families.h | 1334 +++--- .../pokemon/species_info/gen_2_families.h | 614 +-- .../pokemon/species_info/gen_3_families.h | 882 ++-- src/pokemon_sprite_visualizer.c | 20 +- 1945 files changed, 20365 insertions(+), 1437 deletions(-) create mode 100644 dev_scripts/gba_gfx/delete_files_of_same_name.py create mode 100644 dev_scripts/gba_gfx/rename_files_of_same_name.py create mode 100644 graphics/pokemon/abra/anim_front_gba.png create mode 100644 graphics/pokemon/abra/back_gba.png create mode 100644 graphics/pokemon/abra/icon_gba.png create mode 100644 graphics/pokemon/abra/normal_gba.pal create mode 100644 graphics/pokemon/abra/shiny_gba.pal create mode 100644 graphics/pokemon/absol/anim_front_gba.png create mode 100644 graphics/pokemon/absol/back_gba.png create mode 100644 graphics/pokemon/absol/icon_gba.png create mode 100644 graphics/pokemon/absol/normal_gba.pal create mode 100644 graphics/pokemon/absol/shiny_gba.pal create mode 100644 graphics/pokemon/aerodactyl/anim_front_gba.png create mode 100644 graphics/pokemon/aerodactyl/back_gba.png create mode 100644 graphics/pokemon/aerodactyl/icon_gba.png create mode 100644 graphics/pokemon/aerodactyl/normal_gba.pal create mode 100644 graphics/pokemon/aerodactyl/shiny_gba.pal create mode 100644 graphics/pokemon/aggron/anim_front_gba.png create mode 100644 graphics/pokemon/aggron/back_gba.png create mode 100644 graphics/pokemon/aggron/icon_gba.png create mode 100644 graphics/pokemon/aggron/normal_gba.pal create mode 100644 graphics/pokemon/aggron/shiny_gba.pal create mode 100644 graphics/pokemon/aipom/anim_front_gba.png create mode 100644 graphics/pokemon/aipom/back_gba.png create mode 100644 graphics/pokemon/aipom/icon_gba.png create mode 100644 graphics/pokemon/aipom/normal_gba.pal create mode 100644 graphics/pokemon/aipom/shiny_gba.pal create mode 100644 graphics/pokemon/alakazam/anim_front_gba.png create mode 100644 graphics/pokemon/alakazam/back_gba.png create mode 100644 graphics/pokemon/alakazam/icon_gba.png create mode 100644 graphics/pokemon/alakazam/normal_gba.pal create mode 100644 graphics/pokemon/alakazam/shiny_gba.pal create mode 100644 graphics/pokemon/altaria/anim_front_gba.png create mode 100644 graphics/pokemon/altaria/back_gba.png create mode 100644 graphics/pokemon/altaria/icon_gba.png create mode 100644 graphics/pokemon/altaria/normal_gba.pal create mode 100644 graphics/pokemon/altaria/shiny_gba.pal create mode 100644 graphics/pokemon/ampharos/anim_front_gba.png create mode 100644 graphics/pokemon/ampharos/back_gba.png create mode 100644 graphics/pokemon/ampharos/icon_gba.png create mode 100644 graphics/pokemon/ampharos/normal_gba.pal create mode 100644 graphics/pokemon/ampharos/shiny_gba.pal create mode 100644 graphics/pokemon/anorith/anim_front_gba.png create mode 100644 graphics/pokemon/anorith/back_gba.png create mode 100644 graphics/pokemon/anorith/icon_gba.png create mode 100644 graphics/pokemon/anorith/normal_gba.pal create mode 100644 graphics/pokemon/anorith/shiny_gba.pal create mode 100644 graphics/pokemon/arbok/anim_front_gba.png create mode 100644 graphics/pokemon/arbok/back_gba.png create mode 100644 graphics/pokemon/arbok/icon_gba.png create mode 100644 graphics/pokemon/arbok/normal_gba.pal create mode 100644 graphics/pokemon/arbok/shiny_gba.pal create mode 100644 graphics/pokemon/arcanine/anim_front_gba.png create mode 100644 graphics/pokemon/arcanine/back_gba.png create mode 100644 graphics/pokemon/arcanine/icon_gba.png create mode 100644 graphics/pokemon/arcanine/normal_gba.pal create mode 100644 graphics/pokemon/arcanine/shiny_gba.pal create mode 100644 graphics/pokemon/ariados/anim_front_gba.png create mode 100644 graphics/pokemon/ariados/back_gba.png create mode 100644 graphics/pokemon/ariados/icon_gba.png create mode 100644 graphics/pokemon/ariados/normal_gba.pal create mode 100644 graphics/pokemon/ariados/shiny_gba.pal create mode 100644 graphics/pokemon/armaldo/anim_front_gba.png create mode 100644 graphics/pokemon/armaldo/back_gba.png create mode 100644 graphics/pokemon/armaldo/icon_gba.png create mode 100644 graphics/pokemon/armaldo/normal_gba.pal create mode 100644 graphics/pokemon/armaldo/shiny_gba.pal create mode 100644 graphics/pokemon/aron/anim_front_gba.png create mode 100644 graphics/pokemon/aron/back_gba.png create mode 100644 graphics/pokemon/aron/icon_gba.png create mode 100644 graphics/pokemon/aron/normal_gba.pal create mode 100644 graphics/pokemon/aron/shiny_gba.pal create mode 100644 graphics/pokemon/articuno/anim_front_gba.png create mode 100644 graphics/pokemon/articuno/back_gba.png create mode 100644 graphics/pokemon/articuno/icon_gba.png create mode 100644 graphics/pokemon/articuno/normal_gba.pal create mode 100644 graphics/pokemon/articuno/shiny_gba.pal create mode 100644 graphics/pokemon/azumarill/anim_front_gba.png create mode 100644 graphics/pokemon/azumarill/back_gba.png create mode 100644 graphics/pokemon/azumarill/icon_gba.png create mode 100644 graphics/pokemon/azumarill/normal_gba.pal create mode 100644 graphics/pokemon/azumarill/shiny_gba.pal create mode 100644 graphics/pokemon/azurill/anim_front_gba.png create mode 100644 graphics/pokemon/azurill/back_gba.png create mode 100644 graphics/pokemon/azurill/icon_gba.png create mode 100644 graphics/pokemon/azurill/normal_gba.pal create mode 100644 graphics/pokemon/azurill/shiny_gba.pal create mode 100644 graphics/pokemon/bagon/anim_front_gba.png create mode 100644 graphics/pokemon/bagon/back_gba.png create mode 100644 graphics/pokemon/bagon/icon_gba.png create mode 100644 graphics/pokemon/bagon/normal_gba.pal create mode 100644 graphics/pokemon/bagon/shiny_gba.pal create mode 100644 graphics/pokemon/baltoy/anim_front_gba.png create mode 100644 graphics/pokemon/baltoy/back_gba.png create mode 100644 graphics/pokemon/baltoy/icon_gba.png create mode 100644 graphics/pokemon/baltoy/normal_gba.pal create mode 100644 graphics/pokemon/baltoy/shiny_gba.pal create mode 100644 graphics/pokemon/banette/anim_front_gba.png create mode 100644 graphics/pokemon/banette/back_gba.png create mode 100644 graphics/pokemon/banette/icon_gba.png create mode 100644 graphics/pokemon/banette/normal_gba.pal create mode 100644 graphics/pokemon/banette/shiny_gba.pal create mode 100644 graphics/pokemon/barboach/anim_front_gba.png create mode 100644 graphics/pokemon/barboach/back_gba.png create mode 100644 graphics/pokemon/barboach/icon_gba.png create mode 100644 graphics/pokemon/barboach/normal_gba.pal create mode 100644 graphics/pokemon/barboach/shiny_gba.pal create mode 100644 graphics/pokemon/bayleef/anim_front_gba.png create mode 100644 graphics/pokemon/bayleef/back_gba.png create mode 100644 graphics/pokemon/bayleef/icon_gba.png create mode 100644 graphics/pokemon/bayleef/normal_gba.pal create mode 100644 graphics/pokemon/bayleef/shiny_gba.pal create mode 100644 graphics/pokemon/beautifly/anim_front_gba.png create mode 100644 graphics/pokemon/beautifly/back_gba.png create mode 100644 graphics/pokemon/beautifly/icon_gba.png create mode 100644 graphics/pokemon/beautifly/normal_gba.pal create mode 100644 graphics/pokemon/beautifly/shiny_gba.pal create mode 100644 graphics/pokemon/beedrill/anim_front_gba.png create mode 100644 graphics/pokemon/beedrill/back_gba.png create mode 100644 graphics/pokemon/beedrill/icon_gba.png create mode 100644 graphics/pokemon/beedrill/normal_gba.pal create mode 100644 graphics/pokemon/beedrill/shiny_gba.pal create mode 100644 graphics/pokemon/beldum/anim_front_gba.png create mode 100644 graphics/pokemon/beldum/back_gba.png create mode 100644 graphics/pokemon/beldum/icon_gba.png create mode 100644 graphics/pokemon/beldum/normal_gba.pal create mode 100644 graphics/pokemon/beldum/shiny_gba.pal create mode 100644 graphics/pokemon/bellossom/anim_front_gba.png create mode 100644 graphics/pokemon/bellossom/back_gba.png create mode 100644 graphics/pokemon/bellossom/icon_gba.png create mode 100644 graphics/pokemon/bellossom/normal_gba.pal create mode 100644 graphics/pokemon/bellossom/shiny_gba.pal create mode 100644 graphics/pokemon/bellsprout/anim_front_gba.png create mode 100644 graphics/pokemon/bellsprout/back_gba.png create mode 100644 graphics/pokemon/bellsprout/icon_gba.png create mode 100644 graphics/pokemon/bellsprout/normal_gba.pal create mode 100644 graphics/pokemon/bellsprout/shiny_gba.pal create mode 100644 graphics/pokemon/blastoise/anim_front_gba.png create mode 100644 graphics/pokemon/blastoise/back_gba.png create mode 100644 graphics/pokemon/blastoise/icon_gba.png create mode 100644 graphics/pokemon/blastoise/normal_gba.pal create mode 100644 graphics/pokemon/blastoise/shiny_gba.pal create mode 100644 graphics/pokemon/blaziken/anim_front_gba.png create mode 100644 graphics/pokemon/blaziken/back_gba.png create mode 100644 graphics/pokemon/blaziken/icon_gba.png create mode 100644 graphics/pokemon/blaziken/normal_gba.pal create mode 100644 graphics/pokemon/blaziken/shiny_gba.pal create mode 100644 graphics/pokemon/blissey/anim_front_gba.png create mode 100644 graphics/pokemon/blissey/back_gba.png create mode 100644 graphics/pokemon/blissey/icon_gba.png create mode 100644 graphics/pokemon/blissey/normal_gba.pal create mode 100644 graphics/pokemon/blissey/shiny_gba.pal create mode 100644 graphics/pokemon/breloom/anim_front_gba.png create mode 100644 graphics/pokemon/breloom/back_gba.png create mode 100644 graphics/pokemon/breloom/icon_gba.png create mode 100644 graphics/pokemon/breloom/normal_gba.pal create mode 100644 graphics/pokemon/breloom/shiny_gba.pal create mode 100644 graphics/pokemon/bulbasaur/anim_front_gba.png create mode 100644 graphics/pokemon/bulbasaur/back_gba.png create mode 100644 graphics/pokemon/bulbasaur/icon_gba.png create mode 100644 graphics/pokemon/bulbasaur/normal_gba.pal create mode 100644 graphics/pokemon/bulbasaur/shiny_gba.pal create mode 100644 graphics/pokemon/butterfree/anim_front_gba.png create mode 100644 graphics/pokemon/butterfree/back_gba.png create mode 100644 graphics/pokemon/butterfree/icon_gba.png create mode 100644 graphics/pokemon/butterfree/normal_gba.pal create mode 100644 graphics/pokemon/butterfree/shiny_gba.pal create mode 100644 graphics/pokemon/cacnea/anim_front_gba.png create mode 100644 graphics/pokemon/cacnea/back_gba.png create mode 100644 graphics/pokemon/cacnea/icon_gba.png create mode 100644 graphics/pokemon/cacnea/normal_gba.pal create mode 100644 graphics/pokemon/cacnea/shiny_gba.pal create mode 100644 graphics/pokemon/cacturne/anim_front_gba.png create mode 100644 graphics/pokemon/cacturne/back_gba.png create mode 100644 graphics/pokemon/cacturne/icon_gba.png create mode 100644 graphics/pokemon/cacturne/normal_gba.pal create mode 100644 graphics/pokemon/cacturne/shiny_gba.pal create mode 100644 graphics/pokemon/camerupt/anim_front_gba.png create mode 100644 graphics/pokemon/camerupt/back_gba.png create mode 100644 graphics/pokemon/camerupt/icon_gba.png create mode 100644 graphics/pokemon/camerupt/normal_gba.pal create mode 100644 graphics/pokemon/camerupt/shiny_gba.pal create mode 100644 graphics/pokemon/carvanha/anim_front_gba.png create mode 100644 graphics/pokemon/carvanha/back_gba.png create mode 100644 graphics/pokemon/carvanha/icon_gba.png create mode 100644 graphics/pokemon/carvanha/normal_gba.pal create mode 100644 graphics/pokemon/carvanha/shiny_gba.pal create mode 100644 graphics/pokemon/cascoon/anim_front_gba.png create mode 100644 graphics/pokemon/cascoon/back_gba.png create mode 100644 graphics/pokemon/cascoon/icon_gba.png create mode 100644 graphics/pokemon/cascoon/normal_gba.pal create mode 100644 graphics/pokemon/cascoon/shiny_gba.pal create mode 100644 graphics/pokemon/caterpie/anim_front_gba.png create mode 100644 graphics/pokemon/caterpie/back_gba.png create mode 100644 graphics/pokemon/caterpie/icon_gba.png create mode 100644 graphics/pokemon/caterpie/normal_gba.pal create mode 100644 graphics/pokemon/caterpie/shiny_gba.pal create mode 100644 graphics/pokemon/celebi/anim_front_gba.png create mode 100644 graphics/pokemon/celebi/back_gba.png create mode 100644 graphics/pokemon/celebi/icon_gba.png create mode 100644 graphics/pokemon/celebi/normal_gba.pal create mode 100644 graphics/pokemon/celebi/shiny_gba.pal create mode 100644 graphics/pokemon/chansey/anim_front_gba.png create mode 100644 graphics/pokemon/chansey/back_gba.png create mode 100644 graphics/pokemon/chansey/icon_gba.png create mode 100644 graphics/pokemon/chansey/normal_gba.pal create mode 100644 graphics/pokemon/chansey/shiny_gba.pal create mode 100644 graphics/pokemon/charizard/anim_front_gba.png create mode 100644 graphics/pokemon/charizard/back_gba.png create mode 100644 graphics/pokemon/charizard/icon_gba.png create mode 100644 graphics/pokemon/charizard/normal_gba.pal create mode 100644 graphics/pokemon/charizard/shiny_gba.pal create mode 100644 graphics/pokemon/charmander/anim_front_gba.png create mode 100644 graphics/pokemon/charmander/back_gba.png create mode 100644 graphics/pokemon/charmander/icon_gba.png create mode 100644 graphics/pokemon/charmander/normal_gba.pal create mode 100644 graphics/pokemon/charmander/shiny_gba.pal create mode 100644 graphics/pokemon/charmeleon/anim_front_gba.png create mode 100644 graphics/pokemon/charmeleon/back_gba.png create mode 100644 graphics/pokemon/charmeleon/icon_gba.png create mode 100644 graphics/pokemon/charmeleon/normal_gba.pal create mode 100644 graphics/pokemon/charmeleon/shiny_gba.pal create mode 100644 graphics/pokemon/chikorita/anim_front_gba.png create mode 100644 graphics/pokemon/chikorita/back_gba.png create mode 100644 graphics/pokemon/chikorita/icon_gba.png create mode 100644 graphics/pokemon/chikorita/normal_gba.pal create mode 100644 graphics/pokemon/chikorita/shiny_gba.pal create mode 100644 graphics/pokemon/chimecho/anim_front_gba.png create mode 100644 graphics/pokemon/chimecho/back_gba.png create mode 100644 graphics/pokemon/chimecho/icon_gba.png create mode 100644 graphics/pokemon/chimecho/normal_gba.pal create mode 100644 graphics/pokemon/chimecho/shiny_gba.pal create mode 100644 graphics/pokemon/chinchou/anim_front_gba.png create mode 100644 graphics/pokemon/chinchou/back_gba.png create mode 100644 graphics/pokemon/chinchou/icon_gba.png create mode 100644 graphics/pokemon/chinchou/normal_gba.pal create mode 100644 graphics/pokemon/chinchou/shiny_gba.pal create mode 100644 graphics/pokemon/clamperl/anim_front_gba.png create mode 100644 graphics/pokemon/clamperl/back_gba.png create mode 100644 graphics/pokemon/clamperl/icon_gba.png create mode 100644 graphics/pokemon/clamperl/normal_gba.pal create mode 100644 graphics/pokemon/clamperl/shiny_gba.pal create mode 100644 graphics/pokemon/claydol/anim_front_gba.png create mode 100644 graphics/pokemon/claydol/back_gba.png create mode 100644 graphics/pokemon/claydol/icon_gba.png create mode 100644 graphics/pokemon/claydol/normal_gba.pal create mode 100644 graphics/pokemon/claydol/shiny_gba.pal create mode 100644 graphics/pokemon/clefable/anim_front_gba.png create mode 100644 graphics/pokemon/clefable/back_gba.png create mode 100644 graphics/pokemon/clefable/icon_gba.png create mode 100644 graphics/pokemon/clefable/normal_gba.pal create mode 100644 graphics/pokemon/clefable/shiny_gba.pal create mode 100644 graphics/pokemon/clefairy/anim_front_gba.png create mode 100644 graphics/pokemon/clefairy/back_gba.png create mode 100644 graphics/pokemon/clefairy/icon_gba.png create mode 100644 graphics/pokemon/clefairy/normal_gba.pal create mode 100644 graphics/pokemon/clefairy/shiny_gba.pal create mode 100644 graphics/pokemon/cleffa/anim_front_gba.png create mode 100644 graphics/pokemon/cleffa/back_gba.png create mode 100644 graphics/pokemon/cleffa/icon_gba.png create mode 100644 graphics/pokemon/cleffa/normal_gba.pal create mode 100644 graphics/pokemon/cleffa/shiny_gba.pal create mode 100644 graphics/pokemon/cloyster/anim_front_gba.png create mode 100644 graphics/pokemon/cloyster/back_gba.png create mode 100644 graphics/pokemon/cloyster/icon_gba.png create mode 100644 graphics/pokemon/cloyster/normal_gba.pal create mode 100644 graphics/pokemon/cloyster/shiny_gba.pal create mode 100644 graphics/pokemon/combusken/anim_front_gba.png create mode 100644 graphics/pokemon/combusken/back_gba.png create mode 100644 graphics/pokemon/combusken/icon_gba.png create mode 100644 graphics/pokemon/combusken/normal_gba.pal create mode 100644 graphics/pokemon/combusken/shiny_gba.pal create mode 100644 graphics/pokemon/corphish/anim_front_gba.png create mode 100644 graphics/pokemon/corphish/back_gba.png create mode 100644 graphics/pokemon/corphish/icon_gba.png create mode 100644 graphics/pokemon/corphish/normal_gba.pal create mode 100644 graphics/pokemon/corphish/shiny_gba.pal create mode 100644 graphics/pokemon/corsola/anim_front_gba.png create mode 100644 graphics/pokemon/corsola/back_gba.png create mode 100644 graphics/pokemon/corsola/icon_gba.png create mode 100644 graphics/pokemon/corsola/normal_gba.pal create mode 100644 graphics/pokemon/corsola/shiny_gba.pal create mode 100644 graphics/pokemon/cradily/anim_front_gba.png create mode 100644 graphics/pokemon/cradily/back_gba.png create mode 100644 graphics/pokemon/cradily/icon_gba.png create mode 100644 graphics/pokemon/cradily/normal_gba.pal create mode 100644 graphics/pokemon/cradily/shiny_gba.pal create mode 100644 graphics/pokemon/crawdaunt/anim_front_gba.png create mode 100644 graphics/pokemon/crawdaunt/back_gba.png create mode 100644 graphics/pokemon/crawdaunt/icon_gba.png create mode 100644 graphics/pokemon/crawdaunt/normal_gba.pal create mode 100644 graphics/pokemon/crawdaunt/shiny_gba.pal create mode 100644 graphics/pokemon/crobat/anim_front_gba.png create mode 100644 graphics/pokemon/crobat/back_gba.png create mode 100644 graphics/pokemon/crobat/icon_gba.png create mode 100644 graphics/pokemon/crobat/normal_gba.pal create mode 100644 graphics/pokemon/crobat/shiny_gba.pal create mode 100644 graphics/pokemon/croconaw/anim_front_gba.png create mode 100644 graphics/pokemon/croconaw/back_gba.png create mode 100644 graphics/pokemon/croconaw/icon_gba.png create mode 100644 graphics/pokemon/croconaw/normal_gba.pal create mode 100644 graphics/pokemon/croconaw/shiny_gba.pal create mode 100644 graphics/pokemon/cubone/anim_front_gba.png create mode 100644 graphics/pokemon/cubone/back_gba.png create mode 100644 graphics/pokemon/cubone/icon_gba.png create mode 100644 graphics/pokemon/cubone/normal_gba.pal create mode 100644 graphics/pokemon/cubone/shiny_gba.pal create mode 100644 graphics/pokemon/cyndaquil/anim_front_gba.png create mode 100644 graphics/pokemon/cyndaquil/back_gba.png create mode 100644 graphics/pokemon/cyndaquil/icon_gba.png create mode 100644 graphics/pokemon/cyndaquil/normal_gba.pal create mode 100644 graphics/pokemon/cyndaquil/shiny_gba.pal create mode 100644 graphics/pokemon/delcatty/anim_front_gba.png create mode 100644 graphics/pokemon/delcatty/back_gba.png create mode 100644 graphics/pokemon/delcatty/icon_gba.png create mode 100644 graphics/pokemon/delcatty/normal_gba.pal create mode 100644 graphics/pokemon/delcatty/shiny_gba.pal create mode 100644 graphics/pokemon/delibird/anim_front_gba.png create mode 100644 graphics/pokemon/delibird/back_gba.png create mode 100644 graphics/pokemon/delibird/icon_gba.png create mode 100644 graphics/pokemon/delibird/normal_gba.pal create mode 100644 graphics/pokemon/delibird/shiny_gba.pal create mode 100644 graphics/pokemon/deoxys/anim_front_gba.png create mode 100644 graphics/pokemon/deoxys/back_gba.png create mode 100644 graphics/pokemon/deoxys/icon_gba.png create mode 100644 graphics/pokemon/deoxys/normal_gba.pal create mode 100644 graphics/pokemon/deoxys/shiny_gba.pal create mode 100644 graphics/pokemon/dewgong/anim_front_gba.png create mode 100644 graphics/pokemon/dewgong/back_gba.png create mode 100644 graphics/pokemon/dewgong/icon_gba.png create mode 100644 graphics/pokemon/dewgong/normal_gba.pal create mode 100644 graphics/pokemon/dewgong/shiny_gba.pal create mode 100644 graphics/pokemon/diglett/anim_front_gba.png create mode 100644 graphics/pokemon/diglett/back_gba.png create mode 100644 graphics/pokemon/diglett/icon_gba.png create mode 100644 graphics/pokemon/diglett/normal_gba.pal create mode 100644 graphics/pokemon/diglett/shiny_gba.pal create mode 100644 graphics/pokemon/ditto/anim_front_gba.png create mode 100644 graphics/pokemon/ditto/back_gba.png create mode 100644 graphics/pokemon/ditto/icon_gba.png create mode 100644 graphics/pokemon/ditto/normal_gba.pal create mode 100644 graphics/pokemon/ditto/shiny_gba.pal create mode 100644 graphics/pokemon/dodrio/anim_front_gba.png create mode 100644 graphics/pokemon/dodrio/back_gba.png create mode 100644 graphics/pokemon/dodrio/icon_gba.png create mode 100644 graphics/pokemon/dodrio/normal_gba.pal create mode 100644 graphics/pokemon/dodrio/shiny_gba.pal create mode 100644 graphics/pokemon/doduo/anim_front_gba.png create mode 100644 graphics/pokemon/doduo/back_gba.png create mode 100644 graphics/pokemon/doduo/icon_gba.png create mode 100644 graphics/pokemon/doduo/normal_gba.pal create mode 100644 graphics/pokemon/doduo/shiny_gba.pal create mode 100644 graphics/pokemon/donphan/anim_front_gba.png create mode 100644 graphics/pokemon/donphan/back_gba.png create mode 100644 graphics/pokemon/donphan/icon_gba.png create mode 100644 graphics/pokemon/donphan/normal_gba.pal create mode 100644 graphics/pokemon/donphan/shiny_gba.pal create mode 100644 graphics/pokemon/dragonair/anim_front_gba.png create mode 100644 graphics/pokemon/dragonair/back_gba.png create mode 100644 graphics/pokemon/dragonair/icon_gba.png create mode 100644 graphics/pokemon/dragonair/normal_gba.pal create mode 100644 graphics/pokemon/dragonair/shiny_gba.pal create mode 100644 graphics/pokemon/dragonite/anim_front_gba.png create mode 100644 graphics/pokemon/dragonite/back_gba.png create mode 100644 graphics/pokemon/dragonite/icon_gba.png create mode 100644 graphics/pokemon/dragonite/normal_gba.pal create mode 100644 graphics/pokemon/dragonite/shiny_gba.pal create mode 100644 graphics/pokemon/dratini/anim_front_gba.png create mode 100644 graphics/pokemon/dratini/back_gba.png create mode 100644 graphics/pokemon/dratini/icon_gba.png create mode 100644 graphics/pokemon/dratini/normal_gba.pal create mode 100644 graphics/pokemon/dratini/shiny_gba.pal create mode 100644 graphics/pokemon/drowzee/anim_front_gba.png create mode 100644 graphics/pokemon/drowzee/back_gba.png create mode 100644 graphics/pokemon/drowzee/icon_gba.png create mode 100644 graphics/pokemon/drowzee/normal_gba.pal create mode 100644 graphics/pokemon/drowzee/shiny_gba.pal create mode 100644 graphics/pokemon/dugtrio/anim_front_gba.png create mode 100644 graphics/pokemon/dugtrio/back_gba.png create mode 100644 graphics/pokemon/dugtrio/icon_gba.png create mode 100644 graphics/pokemon/dugtrio/normal_gba.pal create mode 100644 graphics/pokemon/dugtrio/shiny_gba.pal create mode 100644 graphics/pokemon/dunsparce/anim_front_gba.png create mode 100644 graphics/pokemon/dunsparce/back_gba.png create mode 100644 graphics/pokemon/dunsparce/icon_gba.png create mode 100644 graphics/pokemon/dunsparce/normal_gba.pal create mode 100644 graphics/pokemon/dunsparce/shiny_gba.pal create mode 100644 graphics/pokemon/dusclops/anim_front_gba.png create mode 100644 graphics/pokemon/dusclops/back_gba.png create mode 100644 graphics/pokemon/dusclops/icon_gba.png create mode 100644 graphics/pokemon/dusclops/normal_gba.pal create mode 100644 graphics/pokemon/dusclops/shiny_gba.pal create mode 100644 graphics/pokemon/duskull/anim_front_gba.png create mode 100644 graphics/pokemon/duskull/back_gba.png create mode 100644 graphics/pokemon/duskull/icon_gba.png create mode 100644 graphics/pokemon/duskull/normal_gba.pal create mode 100644 graphics/pokemon/duskull/shiny_gba.pal create mode 100644 graphics/pokemon/dustox/anim_front_gba.png create mode 100644 graphics/pokemon/dustox/back_gba.png create mode 100644 graphics/pokemon/dustox/icon_gba.png create mode 100644 graphics/pokemon/dustox/normal_gba.pal create mode 100644 graphics/pokemon/dustox/shiny_gba.pal create mode 100644 graphics/pokemon/eevee/anim_front_gba.png create mode 100644 graphics/pokemon/eevee/back_gba.png create mode 100644 graphics/pokemon/eevee/icon_gba.png create mode 100644 graphics/pokemon/eevee/normal_gba.pal create mode 100644 graphics/pokemon/eevee/shiny_gba.pal create mode 100644 graphics/pokemon/egg/anim_front_gba.png create mode 100644 graphics/pokemon/egg/icon_gba.png create mode 100644 graphics/pokemon/egg/normal_gba.pal create mode 100644 graphics/pokemon/ekans/anim_front_gba.png create mode 100644 graphics/pokemon/ekans/back_gba.png create mode 100644 graphics/pokemon/ekans/icon_gba.png create mode 100644 graphics/pokemon/ekans/normal_gba.pal create mode 100644 graphics/pokemon/ekans/shiny_gba.pal create mode 100644 graphics/pokemon/electabuzz/anim_front_gba.png create mode 100644 graphics/pokemon/electabuzz/back_gba.png create mode 100644 graphics/pokemon/electabuzz/icon_gba.png create mode 100644 graphics/pokemon/electabuzz/normal_gba.pal create mode 100644 graphics/pokemon/electabuzz/shiny_gba.pal create mode 100644 graphics/pokemon/electrike/anim_front_gba.png create mode 100644 graphics/pokemon/electrike/back_gba.png create mode 100644 graphics/pokemon/electrike/icon_gba.png create mode 100644 graphics/pokemon/electrike/normal_gba.pal create mode 100644 graphics/pokemon/electrike/shiny_gba.pal create mode 100644 graphics/pokemon/electrode/anim_front_gba.png create mode 100644 graphics/pokemon/electrode/back_gba.png create mode 100644 graphics/pokemon/electrode/icon_gba.png create mode 100644 graphics/pokemon/electrode/normal_gba.pal create mode 100644 graphics/pokemon/electrode/shiny_gba.pal create mode 100644 graphics/pokemon/elekid/anim_front_gba.png create mode 100644 graphics/pokemon/elekid/back_gba.png create mode 100644 graphics/pokemon/elekid/icon_gba.png create mode 100644 graphics/pokemon/elekid/normal_gba.pal create mode 100644 graphics/pokemon/elekid/shiny_gba.pal create mode 100644 graphics/pokemon/entei/anim_front_gba.png create mode 100644 graphics/pokemon/entei/back_gba.png create mode 100644 graphics/pokemon/entei/icon_gba.png create mode 100644 graphics/pokemon/entei/normal_gba.pal create mode 100644 graphics/pokemon/entei/shiny_gba.pal create mode 100644 graphics/pokemon/espeon/anim_front_gba.png create mode 100644 graphics/pokemon/espeon/back_gba.png create mode 100644 graphics/pokemon/espeon/icon_gba.png create mode 100644 graphics/pokemon/espeon/normal_gba.pal create mode 100644 graphics/pokemon/espeon/shiny_gba.pal create mode 100644 graphics/pokemon/exeggcute/anim_front_gba.png create mode 100644 graphics/pokemon/exeggcute/back_gba.png create mode 100644 graphics/pokemon/exeggcute/icon_gba.png create mode 100644 graphics/pokemon/exeggcute/normal_gba.pal create mode 100644 graphics/pokemon/exeggcute/shiny_gba.pal create mode 100644 graphics/pokemon/exeggutor/anim_front_gba.png create mode 100644 graphics/pokemon/exeggutor/back_gba.png create mode 100644 graphics/pokemon/exeggutor/icon_gba.png create mode 100644 graphics/pokemon/exeggutor/normal_gba.pal create mode 100644 graphics/pokemon/exeggutor/shiny_gba.pal create mode 100644 graphics/pokemon/exploud/anim_front_gba.png create mode 100644 graphics/pokemon/exploud/back_gba.png create mode 100644 graphics/pokemon/exploud/icon_gba.png create mode 100644 graphics/pokemon/exploud/normal_gba.pal create mode 100644 graphics/pokemon/exploud/shiny_gba.pal create mode 100644 graphics/pokemon/farfetchd/anim_front_gba.png create mode 100644 graphics/pokemon/farfetchd/back_gba.png create mode 100644 graphics/pokemon/farfetchd/icon_gba.png create mode 100644 graphics/pokemon/farfetchd/normal_gba.pal create mode 100644 graphics/pokemon/farfetchd/shiny_gba.pal create mode 100644 graphics/pokemon/fearow/anim_front_gba.png create mode 100644 graphics/pokemon/fearow/back_gba.png create mode 100644 graphics/pokemon/fearow/icon_gba.png create mode 100644 graphics/pokemon/fearow/normal_gba.pal create mode 100644 graphics/pokemon/fearow/shiny_gba.pal create mode 100644 graphics/pokemon/feebas/anim_front_gba.png create mode 100644 graphics/pokemon/feebas/back_gba.png create mode 100644 graphics/pokemon/feebas/icon_gba.png create mode 100644 graphics/pokemon/feebas/normal_gba.pal create mode 100644 graphics/pokemon/feebas/shiny_gba.pal create mode 100644 graphics/pokemon/feraligatr/anim_front_gba.png create mode 100644 graphics/pokemon/feraligatr/back_gba.png create mode 100644 graphics/pokemon/feraligatr/icon_gba.png create mode 100644 graphics/pokemon/feraligatr/normal_gba.pal create mode 100644 graphics/pokemon/feraligatr/shiny_gba.pal create mode 100644 graphics/pokemon/flaaffy/anim_front_gba.png create mode 100644 graphics/pokemon/flaaffy/back_gba.png create mode 100644 graphics/pokemon/flaaffy/icon_gba.png create mode 100644 graphics/pokemon/flaaffy/normal_gba.pal create mode 100644 graphics/pokemon/flaaffy/shiny_gba.pal create mode 100644 graphics/pokemon/flareon/anim_front_gba.png create mode 100644 graphics/pokemon/flareon/back_gba.png create mode 100644 graphics/pokemon/flareon/icon_gba.png create mode 100644 graphics/pokemon/flareon/normal_gba.pal create mode 100644 graphics/pokemon/flareon/shiny_gba.pal create mode 100644 graphics/pokemon/flygon/anim_front_gba.png create mode 100644 graphics/pokemon/flygon/back_gba.png create mode 100644 graphics/pokemon/flygon/icon_gba.png create mode 100644 graphics/pokemon/flygon/normal_gba.pal create mode 100644 graphics/pokemon/flygon/shiny_gba.pal create mode 100644 graphics/pokemon/forretress/anim_front_gba.png create mode 100644 graphics/pokemon/forretress/back_gba.png create mode 100644 graphics/pokemon/forretress/icon_gba.png create mode 100644 graphics/pokemon/forretress/normal_gba.pal create mode 100644 graphics/pokemon/forretress/shiny_gba.pal create mode 100644 graphics/pokemon/furret/anim_front_gba.png create mode 100644 graphics/pokemon/furret/back_gba.png create mode 100644 graphics/pokemon/furret/icon_gba.png create mode 100644 graphics/pokemon/furret/normal_gba.pal create mode 100644 graphics/pokemon/furret/shiny_gba.pal create mode 100644 graphics/pokemon/gardevoir/anim_front_gba.png create mode 100644 graphics/pokemon/gardevoir/back_gba.png create mode 100644 graphics/pokemon/gardevoir/icon_gba.png create mode 100644 graphics/pokemon/gardevoir/normal_gba.pal create mode 100644 graphics/pokemon/gardevoir/shiny_gba.pal create mode 100644 graphics/pokemon/gastly/anim_front_gba.png create mode 100644 graphics/pokemon/gastly/back_gba.png create mode 100644 graphics/pokemon/gastly/icon_gba.png create mode 100644 graphics/pokemon/gastly/normal_gba.pal create mode 100644 graphics/pokemon/gastly/shiny_gba.pal create mode 100644 graphics/pokemon/gengar/anim_front_gba.png create mode 100644 graphics/pokemon/gengar/back_gba.png create mode 100644 graphics/pokemon/gengar/icon_gba.png create mode 100644 graphics/pokemon/gengar/normal_gba.pal create mode 100644 graphics/pokemon/gengar/shiny_gba.pal create mode 100644 graphics/pokemon/geodude/anim_front_gba.png create mode 100644 graphics/pokemon/geodude/back_gba.png create mode 100644 graphics/pokemon/geodude/icon_gba.png create mode 100644 graphics/pokemon/geodude/normal_gba.pal create mode 100644 graphics/pokemon/geodude/shiny_gba.pal create mode 100644 graphics/pokemon/girafarig/anim_front_gba.png create mode 100644 graphics/pokemon/girafarig/back_gba.png create mode 100644 graphics/pokemon/girafarig/icon_gba.png create mode 100644 graphics/pokemon/girafarig/normal_gba.pal create mode 100644 graphics/pokemon/girafarig/shiny_gba.pal create mode 100644 graphics/pokemon/glalie/anim_front_gba.png create mode 100644 graphics/pokemon/glalie/back_gba.png create mode 100644 graphics/pokemon/glalie/icon_gba.png create mode 100644 graphics/pokemon/glalie/normal_gba.pal create mode 100644 graphics/pokemon/glalie/shiny_gba.pal create mode 100644 graphics/pokemon/gligar/anim_front_gba.png create mode 100644 graphics/pokemon/gligar/back_gba.png create mode 100644 graphics/pokemon/gligar/icon_gba.png create mode 100644 graphics/pokemon/gligar/normal_gba.pal create mode 100644 graphics/pokemon/gligar/shiny_gba.pal create mode 100644 graphics/pokemon/gloom/anim_front_gba.png create mode 100644 graphics/pokemon/gloom/back_gba.png create mode 100644 graphics/pokemon/gloom/icon_gba.png create mode 100644 graphics/pokemon/gloom/normal_gba.pal create mode 100644 graphics/pokemon/gloom/shiny_gba.pal create mode 100644 graphics/pokemon/golbat/anim_front_gba.png create mode 100644 graphics/pokemon/golbat/back_gba.png create mode 100644 graphics/pokemon/golbat/icon_gba.png create mode 100644 graphics/pokemon/golbat/normal_gba.pal create mode 100644 graphics/pokemon/golbat/shiny_gba.pal create mode 100644 graphics/pokemon/goldeen/anim_front_gba.png create mode 100644 graphics/pokemon/goldeen/back_gba.png create mode 100644 graphics/pokemon/goldeen/icon_gba.png create mode 100644 graphics/pokemon/goldeen/normal_gba.pal create mode 100644 graphics/pokemon/goldeen/shiny_gba.pal create mode 100644 graphics/pokemon/golduck/anim_front_gba.png create mode 100644 graphics/pokemon/golduck/back_gba.png create mode 100644 graphics/pokemon/golduck/icon_gba.png create mode 100644 graphics/pokemon/golduck/normal_gba.pal create mode 100644 graphics/pokemon/golduck/shiny_gba.pal create mode 100644 graphics/pokemon/golem/anim_front_gba.png create mode 100644 graphics/pokemon/golem/back_gba.png create mode 100644 graphics/pokemon/golem/footprint_gba.png create mode 100644 graphics/pokemon/golem/icon_gba.png create mode 100644 graphics/pokemon/golem/normal_gba.pal create mode 100644 graphics/pokemon/golem/shiny_gba.pal create mode 100644 graphics/pokemon/gorebyss/anim_front_gba.png create mode 100644 graphics/pokemon/gorebyss/back_gba.png create mode 100644 graphics/pokemon/gorebyss/icon_gba.png create mode 100644 graphics/pokemon/gorebyss/normal_gba.pal create mode 100644 graphics/pokemon/gorebyss/shiny_gba.pal create mode 100644 graphics/pokemon/granbull/anim_front_gba.png create mode 100644 graphics/pokemon/granbull/back_gba.png create mode 100644 graphics/pokemon/granbull/icon_gba.png create mode 100644 graphics/pokemon/granbull/normal_gba.pal create mode 100644 graphics/pokemon/granbull/shiny_gba.pal create mode 100644 graphics/pokemon/graveler/anim_front_gba.png create mode 100644 graphics/pokemon/graveler/back_gba.png create mode 100644 graphics/pokemon/graveler/icon_gba.png create mode 100644 graphics/pokemon/graveler/normal_gba.pal create mode 100644 graphics/pokemon/graveler/shiny_gba.pal create mode 100644 graphics/pokemon/grimer/anim_front_gba.png create mode 100644 graphics/pokemon/grimer/back_gba.png create mode 100644 graphics/pokemon/grimer/icon_gba.png create mode 100644 graphics/pokemon/grimer/normal_gba.pal create mode 100644 graphics/pokemon/grimer/shiny_gba.pal create mode 100644 graphics/pokemon/groudon/anim_front_gba.png create mode 100644 graphics/pokemon/groudon/back_gba.png create mode 100644 graphics/pokemon/groudon/icon_gba.png create mode 100644 graphics/pokemon/groudon/normal_gba.pal create mode 100644 graphics/pokemon/groudon/shiny_gba.pal create mode 100644 graphics/pokemon/grovyle/anim_front_gba.png create mode 100644 graphics/pokemon/grovyle/back_gba.png create mode 100644 graphics/pokemon/grovyle/icon_gba.png create mode 100644 graphics/pokemon/grovyle/normal_gba.pal create mode 100644 graphics/pokemon/grovyle/shiny_gba.pal create mode 100644 graphics/pokemon/growlithe/anim_front_gba.png create mode 100644 graphics/pokemon/growlithe/back_gba.png create mode 100644 graphics/pokemon/growlithe/icon_gba.png create mode 100644 graphics/pokemon/growlithe/normal_gba.pal create mode 100644 graphics/pokemon/growlithe/shiny_gba.pal create mode 100644 graphics/pokemon/grumpig/anim_front_gba.png create mode 100644 graphics/pokemon/grumpig/back_gba.png create mode 100644 graphics/pokemon/grumpig/icon_gba.png create mode 100644 graphics/pokemon/grumpig/normal_gba.pal create mode 100644 graphics/pokemon/grumpig/shiny_gba.pal create mode 100644 graphics/pokemon/gulpin/anim_front_gba.png create mode 100644 graphics/pokemon/gulpin/back_gba.png create mode 100644 graphics/pokemon/gulpin/icon_gba.png create mode 100644 graphics/pokemon/gulpin/normal_gba.pal create mode 100644 graphics/pokemon/gulpin/shiny_gba.pal create mode 100644 graphics/pokemon/gyarados/anim_front_gba.png create mode 100644 graphics/pokemon/gyarados/back_gba.png create mode 100644 graphics/pokemon/gyarados/icon_gba.png create mode 100644 graphics/pokemon/gyarados/normal_gba.pal create mode 100644 graphics/pokemon/gyarados/shiny_gba.pal create mode 100644 graphics/pokemon/hariyama/anim_front_gba.png create mode 100644 graphics/pokemon/hariyama/back_gba.png create mode 100644 graphics/pokemon/hariyama/icon_gba.png create mode 100644 graphics/pokemon/hariyama/normal_gba.pal create mode 100644 graphics/pokemon/hariyama/shiny_gba.pal create mode 100644 graphics/pokemon/haunter/anim_front_gba.png create mode 100644 graphics/pokemon/haunter/back_gba.png create mode 100644 graphics/pokemon/haunter/icon_gba.png create mode 100644 graphics/pokemon/haunter/normal_gba.pal create mode 100644 graphics/pokemon/haunter/shiny_gba.pal create mode 100644 graphics/pokemon/heracross/anim_front_gba.png create mode 100644 graphics/pokemon/heracross/back_gba.png create mode 100644 graphics/pokemon/heracross/icon_gba.png create mode 100644 graphics/pokemon/heracross/normal_gba.pal create mode 100644 graphics/pokemon/heracross/shiny_gba.pal create mode 100644 graphics/pokemon/hitmonchan/anim_front_gba.png create mode 100644 graphics/pokemon/hitmonchan/back_gba.png create mode 100644 graphics/pokemon/hitmonchan/icon_gba.png create mode 100644 graphics/pokemon/hitmonchan/normal_gba.pal create mode 100644 graphics/pokemon/hitmonchan/shiny_gba.pal create mode 100644 graphics/pokemon/hitmonlee/anim_front_gba.png create mode 100644 graphics/pokemon/hitmonlee/back_gba.png create mode 100644 graphics/pokemon/hitmonlee/icon_gba.png create mode 100644 graphics/pokemon/hitmonlee/normal_gba.pal create mode 100644 graphics/pokemon/hitmonlee/shiny_gba.pal create mode 100644 graphics/pokemon/hitmontop/anim_front_gba.png create mode 100644 graphics/pokemon/hitmontop/back_gba.png create mode 100644 graphics/pokemon/hitmontop/icon_gba.png create mode 100644 graphics/pokemon/hitmontop/normal_gba.pal create mode 100644 graphics/pokemon/hitmontop/shiny_gba.pal create mode 100644 graphics/pokemon/ho_oh/anim_front_gba.png create mode 100644 graphics/pokemon/ho_oh/back_gba.png create mode 100644 graphics/pokemon/ho_oh/icon_gba.png create mode 100644 graphics/pokemon/ho_oh/normal_gba.pal create mode 100644 graphics/pokemon/ho_oh/shiny_gba.pal create mode 100644 graphics/pokemon/hoothoot/anim_front_gba.png create mode 100644 graphics/pokemon/hoothoot/back_gba.png create mode 100644 graphics/pokemon/hoothoot/icon_gba.png create mode 100644 graphics/pokemon/hoothoot/normal_gba.pal create mode 100644 graphics/pokemon/hoothoot/shiny_gba.pal create mode 100644 graphics/pokemon/hoppip/anim_front_gba.png create mode 100644 graphics/pokemon/hoppip/back_gba.png create mode 100644 graphics/pokemon/hoppip/icon_gba.png create mode 100644 graphics/pokemon/hoppip/normal_gba.pal create mode 100644 graphics/pokemon/hoppip/shiny_gba.pal create mode 100644 graphics/pokemon/horsea/anim_front_gba.png create mode 100644 graphics/pokemon/horsea/back_gba.png create mode 100644 graphics/pokemon/horsea/icon_gba.png create mode 100644 graphics/pokemon/horsea/normal_gba.pal create mode 100644 graphics/pokemon/horsea/shiny_gba.pal create mode 100644 graphics/pokemon/houndoom/anim_front_gba.png create mode 100644 graphics/pokemon/houndoom/back_gba.png create mode 100644 graphics/pokemon/houndoom/icon_gba.png create mode 100644 graphics/pokemon/houndoom/normal_gba.pal create mode 100644 graphics/pokemon/houndoom/shiny_gba.pal create mode 100644 graphics/pokemon/houndour/anim_front_gba.png create mode 100644 graphics/pokemon/houndour/back_gba.png create mode 100644 graphics/pokemon/houndour/icon_gba.png create mode 100644 graphics/pokemon/houndour/normal_gba.pal create mode 100644 graphics/pokemon/houndour/shiny_gba.pal create mode 100644 graphics/pokemon/huntail/anim_front_gba.png create mode 100644 graphics/pokemon/huntail/back_gba.png create mode 100644 graphics/pokemon/huntail/icon_gba.png create mode 100644 graphics/pokemon/huntail/normal_gba.pal create mode 100644 graphics/pokemon/huntail/shiny_gba.pal create mode 100644 graphics/pokemon/hypno/anim_front_gba.png create mode 100644 graphics/pokemon/hypno/back_gba.png create mode 100644 graphics/pokemon/hypno/icon_gba.png create mode 100644 graphics/pokemon/hypno/normal_gba.pal create mode 100644 graphics/pokemon/hypno/shiny_gba.pal create mode 100644 graphics/pokemon/igglybuff/anim_front_gba.png create mode 100644 graphics/pokemon/igglybuff/back_gba.png create mode 100644 graphics/pokemon/igglybuff/icon_gba.png create mode 100644 graphics/pokemon/igglybuff/normal_gba.pal create mode 100644 graphics/pokemon/igglybuff/shiny_gba.pal create mode 100644 graphics/pokemon/illumise/anim_front_gba.png create mode 100644 graphics/pokemon/illumise/back_gba.png create mode 100644 graphics/pokemon/illumise/icon_gba.png create mode 100644 graphics/pokemon/illumise/normal_gba.pal create mode 100644 graphics/pokemon/illumise/shiny_gba.pal create mode 100644 graphics/pokemon/ivysaur/anim_front_gba.png create mode 100644 graphics/pokemon/ivysaur/back_gba.png create mode 100644 graphics/pokemon/ivysaur/icon_gba.png create mode 100644 graphics/pokemon/ivysaur/normal_gba.pal create mode 100644 graphics/pokemon/ivysaur/shiny_gba.pal create mode 100644 graphics/pokemon/jigglypuff/anim_front_gba.png create mode 100644 graphics/pokemon/jigglypuff/back_gba.png create mode 100644 graphics/pokemon/jigglypuff/icon_gba.png create mode 100644 graphics/pokemon/jigglypuff/normal_gba.pal create mode 100644 graphics/pokemon/jigglypuff/shiny_gba.pal create mode 100644 graphics/pokemon/jirachi/anim_front_gba.png create mode 100644 graphics/pokemon/jirachi/back_gba.png create mode 100644 graphics/pokemon/jirachi/icon_gba.png create mode 100644 graphics/pokemon/jirachi/normal_gba.pal create mode 100644 graphics/pokemon/jirachi/shiny_gba.pal create mode 100644 graphics/pokemon/jolteon/anim_front_gba.png create mode 100644 graphics/pokemon/jolteon/back_gba.png create mode 100644 graphics/pokemon/jolteon/icon_gba.png create mode 100644 graphics/pokemon/jolteon/normal_gba.pal create mode 100644 graphics/pokemon/jolteon/shiny_gba.pal create mode 100644 graphics/pokemon/jumpluff/anim_front_gba.png create mode 100644 graphics/pokemon/jumpluff/back_gba.png create mode 100644 graphics/pokemon/jumpluff/icon_gba.png create mode 100644 graphics/pokemon/jumpluff/normal_gba.pal create mode 100644 graphics/pokemon/jumpluff/shiny_gba.pal create mode 100644 graphics/pokemon/jynx/anim_front_gba.png create mode 100644 graphics/pokemon/jynx/back_gba.png create mode 100644 graphics/pokemon/jynx/icon_gba.png create mode 100644 graphics/pokemon/jynx/normal_gba.pal create mode 100644 graphics/pokemon/jynx/shiny_gba.pal create mode 100644 graphics/pokemon/kabuto/anim_front_gba.png create mode 100644 graphics/pokemon/kabuto/back_gba.png create mode 100644 graphics/pokemon/kabuto/icon_gba.png create mode 100644 graphics/pokemon/kabuto/normal_gba.pal create mode 100644 graphics/pokemon/kabuto/shiny_gba.pal create mode 100644 graphics/pokemon/kabutops/anim_front_gba.png create mode 100644 graphics/pokemon/kabutops/back_gba.png create mode 100644 graphics/pokemon/kabutops/icon_gba.png create mode 100644 graphics/pokemon/kabutops/normal_gba.pal create mode 100644 graphics/pokemon/kabutops/shiny_gba.pal create mode 100644 graphics/pokemon/kadabra/anim_front_gba.png create mode 100644 graphics/pokemon/kadabra/back_gba.png create mode 100644 graphics/pokemon/kadabra/icon_gba.png create mode 100644 graphics/pokemon/kadabra/normal_gba.pal create mode 100644 graphics/pokemon/kadabra/shiny_gba.pal create mode 100644 graphics/pokemon/kakuna/anim_front_gba.png create mode 100644 graphics/pokemon/kakuna/back_gba.png create mode 100644 graphics/pokemon/kakuna/icon_gba.png create mode 100644 graphics/pokemon/kakuna/normal_gba.pal create mode 100644 graphics/pokemon/kakuna/shiny_gba.pal create mode 100644 graphics/pokemon/kangaskhan/anim_front_gba.png create mode 100644 graphics/pokemon/kangaskhan/back_gba.png create mode 100644 graphics/pokemon/kangaskhan/icon_gba.png create mode 100644 graphics/pokemon/kangaskhan/normal_gba.pal create mode 100644 graphics/pokemon/kangaskhan/shiny_gba.pal create mode 100644 graphics/pokemon/kecleon/anim_front_gba.png create mode 100644 graphics/pokemon/kecleon/back_gba.png create mode 100644 graphics/pokemon/kecleon/icon_gba.png create mode 100644 graphics/pokemon/kecleon/normal_gba.pal create mode 100644 graphics/pokemon/kecleon/shiny_gba.pal create mode 100644 graphics/pokemon/kingdra/anim_front_gba.png create mode 100644 graphics/pokemon/kingdra/back_gba.png create mode 100644 graphics/pokemon/kingdra/icon_gba.png create mode 100644 graphics/pokemon/kingdra/normal_gba.pal create mode 100644 graphics/pokemon/kingdra/shiny_gba.pal create mode 100644 graphics/pokemon/kingler/anim_front_gba.png create mode 100644 graphics/pokemon/kingler/back_gba.png create mode 100644 graphics/pokemon/kingler/icon_gba.png create mode 100644 graphics/pokemon/kingler/normal_gba.pal create mode 100644 graphics/pokemon/kingler/shiny_gba.pal create mode 100644 graphics/pokemon/kirlia/anim_front_gba.png create mode 100644 graphics/pokemon/kirlia/back_gba.png create mode 100644 graphics/pokemon/kirlia/icon_gba.png create mode 100644 graphics/pokemon/kirlia/normal_gba.pal create mode 100644 graphics/pokemon/kirlia/shiny_gba.pal create mode 100644 graphics/pokemon/koffing/anim_front_gba.png create mode 100644 graphics/pokemon/koffing/back_gba.png create mode 100644 graphics/pokemon/koffing/icon_gba.png create mode 100644 graphics/pokemon/koffing/normal_gba.pal create mode 100644 graphics/pokemon/koffing/shiny_gba.pal create mode 100644 graphics/pokemon/krabby/anim_front_gba.png create mode 100644 graphics/pokemon/krabby/back_gba.png create mode 100644 graphics/pokemon/krabby/icon_gba.png create mode 100644 graphics/pokemon/krabby/normal_gba.pal create mode 100644 graphics/pokemon/krabby/shiny_gba.pal create mode 100644 graphics/pokemon/kyogre/anim_front_gba.png create mode 100644 graphics/pokemon/kyogre/back_gba.png create mode 100644 graphics/pokemon/kyogre/icon_gba.png create mode 100644 graphics/pokemon/kyogre/normal_gba.pal create mode 100644 graphics/pokemon/kyogre/shiny_gba.pal create mode 100644 graphics/pokemon/lairon/anim_front_gba.png create mode 100644 graphics/pokemon/lairon/back_gba.png create mode 100644 graphics/pokemon/lairon/icon_gba.png create mode 100644 graphics/pokemon/lairon/normal_gba.pal create mode 100644 graphics/pokemon/lairon/shiny_gba.pal create mode 100644 graphics/pokemon/lanturn/anim_front_gba.png create mode 100644 graphics/pokemon/lanturn/back_gba.png create mode 100644 graphics/pokemon/lanturn/icon_gba.png create mode 100644 graphics/pokemon/lanturn/normal_gba.pal create mode 100644 graphics/pokemon/lanturn/shiny_gba.pal create mode 100644 graphics/pokemon/lapras/anim_front_gba.png create mode 100644 graphics/pokemon/lapras/back_gba.png create mode 100644 graphics/pokemon/lapras/icon_gba.png create mode 100644 graphics/pokemon/lapras/normal_gba.pal create mode 100644 graphics/pokemon/lapras/shiny_gba.pal create mode 100644 graphics/pokemon/larvitar/anim_front_gba.png create mode 100644 graphics/pokemon/larvitar/back_gba.png create mode 100644 graphics/pokemon/larvitar/icon_gba.png create mode 100644 graphics/pokemon/larvitar/normal_gba.pal create mode 100644 graphics/pokemon/larvitar/shiny_gba.pal create mode 100644 graphics/pokemon/latias/anim_front_gba.png create mode 100644 graphics/pokemon/latias/back_gba.png create mode 100644 graphics/pokemon/latias/icon_gba.png create mode 100644 graphics/pokemon/latias/normal_gba.pal create mode 100644 graphics/pokemon/latias/shiny_gba.pal create mode 100644 graphics/pokemon/latios/anim_front_gba.png create mode 100644 graphics/pokemon/latios/back_gba.png create mode 100644 graphics/pokemon/latios/icon_gba.png create mode 100644 graphics/pokemon/latios/normal_gba.pal create mode 100644 graphics/pokemon/latios/shiny_gba.pal create mode 100644 graphics/pokemon/ledian/anim_front_gba.png create mode 100644 graphics/pokemon/ledian/back_gba.png create mode 100644 graphics/pokemon/ledian/icon_gba.png create mode 100644 graphics/pokemon/ledian/normal_gba.pal create mode 100644 graphics/pokemon/ledian/shiny_gba.pal create mode 100644 graphics/pokemon/ledyba/anim_front_gba.png create mode 100644 graphics/pokemon/ledyba/back_gba.png create mode 100644 graphics/pokemon/ledyba/icon_gba.png create mode 100644 graphics/pokemon/ledyba/normal_gba.pal create mode 100644 graphics/pokemon/ledyba/shiny_gba.pal create mode 100644 graphics/pokemon/lickitung/anim_front_gba.png create mode 100644 graphics/pokemon/lickitung/back_gba.png create mode 100644 graphics/pokemon/lickitung/icon_gba.png create mode 100644 graphics/pokemon/lickitung/normal_gba.pal create mode 100644 graphics/pokemon/lickitung/shiny_gba.pal create mode 100644 graphics/pokemon/lileep/anim_front_gba.png create mode 100644 graphics/pokemon/lileep/back_gba.png create mode 100644 graphics/pokemon/lileep/icon_gba.png create mode 100644 graphics/pokemon/lileep/normal_gba.pal create mode 100644 graphics/pokemon/lileep/shiny_gba.pal create mode 100644 graphics/pokemon/linoone/anim_front_gba.png create mode 100644 graphics/pokemon/linoone/back_gba.png create mode 100644 graphics/pokemon/linoone/icon_gba.png create mode 100644 graphics/pokemon/linoone/normal_gba.pal create mode 100644 graphics/pokemon/linoone/shiny_gba.pal create mode 100644 graphics/pokemon/lombre/anim_front_gba.png create mode 100644 graphics/pokemon/lombre/back_gba.png create mode 100644 graphics/pokemon/lombre/icon_gba.png create mode 100644 graphics/pokemon/lombre/normal_gba.pal create mode 100644 graphics/pokemon/lombre/shiny_gba.pal create mode 100644 graphics/pokemon/lotad/anim_front_gba.png create mode 100644 graphics/pokemon/lotad/back_gba.png create mode 100644 graphics/pokemon/lotad/icon_gba.png create mode 100644 graphics/pokemon/lotad/normal_gba.pal create mode 100644 graphics/pokemon/lotad/shiny_gba.pal create mode 100644 graphics/pokemon/loudred/anim_front_gba.png create mode 100644 graphics/pokemon/loudred/back_gba.png create mode 100644 graphics/pokemon/loudred/icon_gba.png create mode 100644 graphics/pokemon/loudred/normal_gba.pal create mode 100644 graphics/pokemon/loudred/shiny_gba.pal create mode 100644 graphics/pokemon/ludicolo/anim_front_gba.png create mode 100644 graphics/pokemon/ludicolo/back_gba.png create mode 100644 graphics/pokemon/ludicolo/footprint_gba.png create mode 100644 graphics/pokemon/ludicolo/icon_gba.png create mode 100644 graphics/pokemon/ludicolo/normal_gba.pal create mode 100644 graphics/pokemon/ludicolo/shiny_gba.pal create mode 100644 graphics/pokemon/lugia/anim_front_gba.png create mode 100644 graphics/pokemon/lugia/back_gba.png create mode 100644 graphics/pokemon/lugia/icon_gba.png create mode 100644 graphics/pokemon/lugia/normal_gba.pal create mode 100644 graphics/pokemon/lugia/shiny_gba.pal create mode 100644 graphics/pokemon/lunatone/anim_front_gba.png create mode 100644 graphics/pokemon/lunatone/back_gba.png create mode 100644 graphics/pokemon/lunatone/icon_gba.png create mode 100644 graphics/pokemon/lunatone/normal_gba.pal create mode 100644 graphics/pokemon/lunatone/shiny_gba.pal create mode 100644 graphics/pokemon/luvdisc/anim_front_gba.png create mode 100644 graphics/pokemon/luvdisc/back_gba.png create mode 100644 graphics/pokemon/luvdisc/icon_gba.png create mode 100644 graphics/pokemon/luvdisc/normal_gba.pal create mode 100644 graphics/pokemon/luvdisc/shiny_gba.pal create mode 100644 graphics/pokemon/machamp/anim_front_gba.png create mode 100644 graphics/pokemon/machamp/back_gba.png create mode 100644 graphics/pokemon/machamp/icon_gba.png create mode 100644 graphics/pokemon/machamp/normal_gba.pal create mode 100644 graphics/pokemon/machamp/shiny_gba.pal create mode 100644 graphics/pokemon/machoke/anim_front_gba.png create mode 100644 graphics/pokemon/machoke/back_gba.png create mode 100644 graphics/pokemon/machoke/icon_gba.png create mode 100644 graphics/pokemon/machoke/normal_gba.pal create mode 100644 graphics/pokemon/machoke/shiny_gba.pal create mode 100644 graphics/pokemon/machop/anim_front_gba.png create mode 100644 graphics/pokemon/machop/back_gba.png create mode 100644 graphics/pokemon/machop/icon_gba.png create mode 100644 graphics/pokemon/machop/normal_gba.pal create mode 100644 graphics/pokemon/machop/shiny_gba.pal create mode 100644 graphics/pokemon/magby/anim_front_gba.png create mode 100644 graphics/pokemon/magby/back_gba.png create mode 100644 graphics/pokemon/magby/icon_gba.png create mode 100644 graphics/pokemon/magby/normal_gba.pal create mode 100644 graphics/pokemon/magby/shiny_gba.pal create mode 100644 graphics/pokemon/magcargo/anim_front_gba.png create mode 100644 graphics/pokemon/magcargo/back_gba.png create mode 100644 graphics/pokemon/magcargo/icon_gba.png create mode 100644 graphics/pokemon/magcargo/normal_gba.pal create mode 100644 graphics/pokemon/magcargo/shiny_gba.pal create mode 100644 graphics/pokemon/magikarp/anim_front_gba.png create mode 100644 graphics/pokemon/magikarp/back_gba.png create mode 100644 graphics/pokemon/magikarp/icon_gba.png create mode 100644 graphics/pokemon/magikarp/normal_gba.pal create mode 100644 graphics/pokemon/magikarp/shiny_gba.pal create mode 100644 graphics/pokemon/magmar/anim_front_gba.png create mode 100644 graphics/pokemon/magmar/back_gba.png create mode 100644 graphics/pokemon/magmar/icon_gba.png create mode 100644 graphics/pokemon/magmar/normal_gba.pal create mode 100644 graphics/pokemon/magmar/shiny_gba.pal create mode 100644 graphics/pokemon/magnemite/anim_front_gba.png create mode 100644 graphics/pokemon/magnemite/back_gba.png create mode 100644 graphics/pokemon/magnemite/icon_gba.png create mode 100644 graphics/pokemon/magnemite/normal_gba.pal create mode 100644 graphics/pokemon/magnemite/shiny_gba.pal create mode 100644 graphics/pokemon/magneton/anim_front_gba.png create mode 100644 graphics/pokemon/magneton/back_gba.png create mode 100644 graphics/pokemon/magneton/icon_gba.png create mode 100644 graphics/pokemon/magneton/normal_gba.pal create mode 100644 graphics/pokemon/magneton/shiny_gba.pal create mode 100644 graphics/pokemon/makuhita/anim_front_gba.png create mode 100644 graphics/pokemon/makuhita/back_gba.png create mode 100644 graphics/pokemon/makuhita/icon_gba.png create mode 100644 graphics/pokemon/makuhita/normal_gba.pal create mode 100644 graphics/pokemon/makuhita/shiny_gba.pal create mode 100644 graphics/pokemon/manectric/anim_front_gba.png create mode 100644 graphics/pokemon/manectric/back_gba.png create mode 100644 graphics/pokemon/manectric/icon_gba.png create mode 100644 graphics/pokemon/manectric/normal_gba.pal create mode 100644 graphics/pokemon/manectric/shiny_gba.pal create mode 100644 graphics/pokemon/mankey/anim_front_gba.png create mode 100644 graphics/pokemon/mankey/back_gba.png create mode 100644 graphics/pokemon/mankey/icon_gba.png create mode 100644 graphics/pokemon/mankey/normal_gba.pal create mode 100644 graphics/pokemon/mankey/shiny_gba.pal create mode 100644 graphics/pokemon/mantine/anim_front_gba.png create mode 100644 graphics/pokemon/mantine/back_gba.png create mode 100644 graphics/pokemon/mantine/icon_gba.png create mode 100644 graphics/pokemon/mantine/normal_gba.pal create mode 100644 graphics/pokemon/mantine/shiny_gba.pal create mode 100644 graphics/pokemon/mareep/anim_front_gba.png create mode 100644 graphics/pokemon/mareep/back_gba.png create mode 100644 graphics/pokemon/mareep/icon_gba.png create mode 100644 graphics/pokemon/mareep/normal_gba.pal create mode 100644 graphics/pokemon/mareep/shiny_gba.pal create mode 100644 graphics/pokemon/marill/anim_front_gba.png create mode 100644 graphics/pokemon/marill/back_gba.png create mode 100644 graphics/pokemon/marill/icon_gba.png create mode 100644 graphics/pokemon/marill/normal_gba.pal create mode 100644 graphics/pokemon/marill/shiny_gba.pal create mode 100644 graphics/pokemon/marowak/anim_front_gba.png create mode 100644 graphics/pokemon/marowak/back_gba.png create mode 100644 graphics/pokemon/marowak/icon_gba.png create mode 100644 graphics/pokemon/marowak/normal_gba.pal create mode 100644 graphics/pokemon/marowak/shiny_gba.pal create mode 100644 graphics/pokemon/marshtomp/anim_front_gba.png create mode 100644 graphics/pokemon/marshtomp/back_gba.png create mode 100644 graphics/pokemon/marshtomp/icon_gba.png create mode 100644 graphics/pokemon/marshtomp/normal_gba.pal create mode 100644 graphics/pokemon/marshtomp/shiny_gba.pal create mode 100644 graphics/pokemon/masquerain/anim_front_gba.png create mode 100644 graphics/pokemon/masquerain/back_gba.png create mode 100644 graphics/pokemon/masquerain/icon_gba.png create mode 100644 graphics/pokemon/masquerain/normal_gba.pal create mode 100644 graphics/pokemon/masquerain/shiny_gba.pal create mode 100644 graphics/pokemon/mawile/anim_front_gba.png create mode 100644 graphics/pokemon/mawile/back_gba.png create mode 100644 graphics/pokemon/mawile/footprint_gba.png create mode 100644 graphics/pokemon/mawile/icon_gba.png create mode 100644 graphics/pokemon/mawile/normal_gba.pal create mode 100644 graphics/pokemon/mawile/shiny_gba.pal create mode 100644 graphics/pokemon/medicham/anim_front_gba.png create mode 100644 graphics/pokemon/medicham/back_gba.png create mode 100644 graphics/pokemon/medicham/icon_gba.png create mode 100644 graphics/pokemon/medicham/normal_gba.pal create mode 100644 graphics/pokemon/medicham/shiny_gba.pal create mode 100644 graphics/pokemon/meditite/anim_front_gba.png create mode 100644 graphics/pokemon/meditite/back_gba.png create mode 100644 graphics/pokemon/meditite/icon_gba.png create mode 100644 graphics/pokemon/meditite/normal_gba.pal create mode 100644 graphics/pokemon/meditite/shiny_gba.pal create mode 100644 graphics/pokemon/meganium/anim_front_gba.png create mode 100644 graphics/pokemon/meganium/back_gba.png create mode 100644 graphics/pokemon/meganium/icon_gba.png create mode 100644 graphics/pokemon/meganium/normal_gba.pal create mode 100644 graphics/pokemon/meganium/shiny_gba.pal create mode 100644 graphics/pokemon/meowth/anim_front_gba.png create mode 100644 graphics/pokemon/meowth/back_gba.png create mode 100644 graphics/pokemon/meowth/icon_gba.png create mode 100644 graphics/pokemon/meowth/normal_gba.pal create mode 100644 graphics/pokemon/meowth/shiny_gba.pal create mode 100644 graphics/pokemon/metagross/anim_front_gba.png create mode 100644 graphics/pokemon/metagross/back_gba.png create mode 100644 graphics/pokemon/metagross/icon_gba.png create mode 100644 graphics/pokemon/metagross/normal_gba.pal create mode 100644 graphics/pokemon/metagross/shiny_gba.pal create mode 100644 graphics/pokemon/metang/anim_front_gba.png create mode 100644 graphics/pokemon/metang/back_gba.png create mode 100644 graphics/pokemon/metang/icon_gba.png create mode 100644 graphics/pokemon/metang/normal_gba.pal create mode 100644 graphics/pokemon/metang/shiny_gba.pal create mode 100644 graphics/pokemon/metapod/anim_front_gba.png create mode 100644 graphics/pokemon/metapod/back_gba.png create mode 100644 graphics/pokemon/metapod/icon_gba.png create mode 100644 graphics/pokemon/metapod/normal_gba.pal create mode 100644 graphics/pokemon/metapod/shiny_gba.pal create mode 100644 graphics/pokemon/mew/anim_front_gba.png create mode 100644 graphics/pokemon/mew/back_gba.png create mode 100644 graphics/pokemon/mew/icon_gba.png create mode 100644 graphics/pokemon/mew/normal_gba.pal create mode 100644 graphics/pokemon/mew/shiny_gba.pal create mode 100644 graphics/pokemon/mewtwo/anim_front_gba.png create mode 100644 graphics/pokemon/mewtwo/back_gba.png create mode 100644 graphics/pokemon/mewtwo/icon_gba.png create mode 100644 graphics/pokemon/mewtwo/normal_gba.pal create mode 100644 graphics/pokemon/mewtwo/shiny_gba.pal create mode 100644 graphics/pokemon/mightyena/anim_front_gba.png create mode 100644 graphics/pokemon/mightyena/back_gba.png create mode 100644 graphics/pokemon/mightyena/icon_gba.png create mode 100644 graphics/pokemon/mightyena/normal_gba.pal create mode 100644 graphics/pokemon/mightyena/shiny_gba.pal create mode 100644 graphics/pokemon/milotic/anim_front_gba.png create mode 100644 graphics/pokemon/milotic/back_gba.png create mode 100644 graphics/pokemon/milotic/icon_gba.png create mode 100644 graphics/pokemon/milotic/normal_gba.pal create mode 100644 graphics/pokemon/milotic/shiny_gba.pal create mode 100644 graphics/pokemon/miltank/anim_front_gba.png create mode 100644 graphics/pokemon/miltank/back_gba.png create mode 100644 graphics/pokemon/miltank/icon_gba.png create mode 100644 graphics/pokemon/miltank/normal_gba.pal create mode 100644 graphics/pokemon/miltank/shiny_gba.pal create mode 100644 graphics/pokemon/minun/anim_front_gba.png create mode 100644 graphics/pokemon/minun/back_gba.png create mode 100644 graphics/pokemon/minun/icon_gba.png create mode 100644 graphics/pokemon/minun/normal_gba.pal create mode 100644 graphics/pokemon/minun/shiny_gba.pal create mode 100644 graphics/pokemon/misdreavus/anim_front_gba.png create mode 100644 graphics/pokemon/misdreavus/back_gba.png create mode 100644 graphics/pokemon/misdreavus/icon_gba.png create mode 100644 graphics/pokemon/misdreavus/normal_gba.pal create mode 100644 graphics/pokemon/misdreavus/shiny_gba.pal create mode 100644 graphics/pokemon/moltres/anim_front_gba.png create mode 100644 graphics/pokemon/moltres/back_gba.png create mode 100644 graphics/pokemon/moltres/icon_gba.png create mode 100644 graphics/pokemon/moltres/normal_gba.pal create mode 100644 graphics/pokemon/moltres/shiny_gba.pal create mode 100644 graphics/pokemon/mr_mime/anim_front_gba.png create mode 100644 graphics/pokemon/mr_mime/back_gba.png create mode 100644 graphics/pokemon/mr_mime/icon_gba.png create mode 100644 graphics/pokemon/mr_mime/normal_gba.pal create mode 100644 graphics/pokemon/mr_mime/shiny_gba.pal create mode 100644 graphics/pokemon/mudkip/anim_front_gba.png create mode 100644 graphics/pokemon/mudkip/back_gba.png create mode 100644 graphics/pokemon/mudkip/icon_gba.png create mode 100644 graphics/pokemon/mudkip/normal_gba.pal create mode 100644 graphics/pokemon/mudkip/shiny_gba.pal create mode 100644 graphics/pokemon/muk/anim_front_gba.png create mode 100644 graphics/pokemon/muk/back_gba.png create mode 100644 graphics/pokemon/muk/icon_gba.png create mode 100644 graphics/pokemon/muk/normal_gba.pal create mode 100644 graphics/pokemon/muk/shiny_gba.pal create mode 100644 graphics/pokemon/murkrow/anim_front_gba.png create mode 100644 graphics/pokemon/murkrow/back_gba.png create mode 100644 graphics/pokemon/murkrow/icon_gba.png create mode 100644 graphics/pokemon/murkrow/normal_gba.pal create mode 100644 graphics/pokemon/murkrow/shiny_gba.pal create mode 100644 graphics/pokemon/natu/anim_front_gba.png create mode 100644 graphics/pokemon/natu/back_gba.png create mode 100644 graphics/pokemon/natu/icon_gba.png create mode 100644 graphics/pokemon/natu/normal_gba.pal create mode 100644 graphics/pokemon/natu/shiny_gba.pal create mode 100644 graphics/pokemon/nidoking/anim_front_gba.png create mode 100644 graphics/pokemon/nidoking/back_gba.png create mode 100644 graphics/pokemon/nidoking/icon_gba.png create mode 100644 graphics/pokemon/nidoking/normal_gba.pal create mode 100644 graphics/pokemon/nidoking/shiny_gba.pal create mode 100644 graphics/pokemon/nidoqueen/anim_front_gba.png create mode 100644 graphics/pokemon/nidoqueen/back_gba.png create mode 100644 graphics/pokemon/nidoqueen/icon_gba.png create mode 100644 graphics/pokemon/nidoqueen/normal_gba.pal create mode 100644 graphics/pokemon/nidoqueen/shiny_gba.pal create mode 100644 graphics/pokemon/nidoran_f/anim_front_gba.png create mode 100644 graphics/pokemon/nidoran_f/back_gba.png create mode 100644 graphics/pokemon/nidoran_f/icon_gba.png create mode 100644 graphics/pokemon/nidoran_f/normal_gba.pal create mode 100644 graphics/pokemon/nidoran_f/shiny_gba.pal create mode 100644 graphics/pokemon/nidoran_m/anim_front_gba.png create mode 100644 graphics/pokemon/nidoran_m/back_gba.png create mode 100644 graphics/pokemon/nidoran_m/icon_gba.png create mode 100644 graphics/pokemon/nidoran_m/normal_gba.pal create mode 100644 graphics/pokemon/nidoran_m/shiny_gba.pal create mode 100644 graphics/pokemon/nidorina/anim_front_gba.png create mode 100644 graphics/pokemon/nidorina/back_gba.png create mode 100644 graphics/pokemon/nidorina/icon_gba.png create mode 100644 graphics/pokemon/nidorina/normal_gba.pal create mode 100644 graphics/pokemon/nidorina/shiny_gba.pal create mode 100644 graphics/pokemon/nidorino/anim_front_gba.png create mode 100644 graphics/pokemon/nidorino/back_gba.png create mode 100644 graphics/pokemon/nidorino/icon_gba.png create mode 100644 graphics/pokemon/nidorino/normal_gba.pal create mode 100644 graphics/pokemon/nidorino/shiny_gba.pal create mode 100644 graphics/pokemon/nincada/anim_front_gba.png create mode 100644 graphics/pokemon/nincada/back_gba.png create mode 100644 graphics/pokemon/nincada/icon_gba.png create mode 100644 graphics/pokemon/nincada/normal_gba.pal create mode 100644 graphics/pokemon/nincada/shiny_gba.pal create mode 100644 graphics/pokemon/ninetales/anim_front_gba.png create mode 100644 graphics/pokemon/ninetales/back_gba.png create mode 100644 graphics/pokemon/ninetales/icon_gba.png create mode 100644 graphics/pokemon/ninetales/normal_gba.pal create mode 100644 graphics/pokemon/ninetales/shiny_gba.pal create mode 100644 graphics/pokemon/ninjask/anim_front_gba.png create mode 100644 graphics/pokemon/ninjask/back_gba.png create mode 100644 graphics/pokemon/ninjask/icon_gba.png create mode 100644 graphics/pokemon/ninjask/normal_gba.pal create mode 100644 graphics/pokemon/ninjask/shiny_gba.pal create mode 100644 graphics/pokemon/noctowl/anim_front_gba.png create mode 100644 graphics/pokemon/noctowl/back_gba.png create mode 100644 graphics/pokemon/noctowl/icon_gba.png create mode 100644 graphics/pokemon/noctowl/normal_gba.pal create mode 100644 graphics/pokemon/noctowl/shiny_gba.pal create mode 100644 graphics/pokemon/nosepass/anim_front_gba.png create mode 100644 graphics/pokemon/nosepass/back_gba.png create mode 100644 graphics/pokemon/nosepass/icon_gba.png create mode 100644 graphics/pokemon/nosepass/normal_gba.pal create mode 100644 graphics/pokemon/nosepass/shiny_gba.pal create mode 100644 graphics/pokemon/numel/anim_front_gba.png create mode 100644 graphics/pokemon/numel/back_gba.png create mode 100644 graphics/pokemon/numel/icon_gba.png create mode 100644 graphics/pokemon/numel/normal_gba.pal create mode 100644 graphics/pokemon/numel/shiny_gba.pal create mode 100644 graphics/pokemon/nuzleaf/anim_front_gba.png create mode 100644 graphics/pokemon/nuzleaf/back_gba.png create mode 100644 graphics/pokemon/nuzleaf/icon_gba.png create mode 100644 graphics/pokemon/nuzleaf/normal_gba.pal create mode 100644 graphics/pokemon/nuzleaf/shiny_gba.pal create mode 100644 graphics/pokemon/octillery/anim_front_gba.png create mode 100644 graphics/pokemon/octillery/back_gba.png create mode 100644 graphics/pokemon/octillery/icon_gba.png create mode 100644 graphics/pokemon/octillery/normal_gba.pal create mode 100644 graphics/pokemon/octillery/shiny_gba.pal create mode 100644 graphics/pokemon/oddish/anim_front_gba.png create mode 100644 graphics/pokemon/oddish/back_gba.png create mode 100644 graphics/pokemon/oddish/icon_gba.png create mode 100644 graphics/pokemon/oddish/normal_gba.pal create mode 100644 graphics/pokemon/oddish/shiny_gba.pal create mode 100644 graphics/pokemon/omanyte/anim_front_gba.png create mode 100644 graphics/pokemon/omanyte/back_gba.png create mode 100644 graphics/pokemon/omanyte/icon_gba.png create mode 100644 graphics/pokemon/omanyte/normal_gba.pal create mode 100644 graphics/pokemon/omanyte/shiny_gba.pal create mode 100644 graphics/pokemon/omastar/anim_front_gba.png create mode 100644 graphics/pokemon/omastar/back_gba.png create mode 100644 graphics/pokemon/omastar/icon_gba.png create mode 100644 graphics/pokemon/omastar/normal_gba.pal create mode 100644 graphics/pokemon/omastar/shiny_gba.pal create mode 100644 graphics/pokemon/onix/anim_front_gba.png create mode 100644 graphics/pokemon/onix/back_gba.png create mode 100644 graphics/pokemon/onix/icon_gba.png create mode 100644 graphics/pokemon/onix/normal_gba.pal create mode 100644 graphics/pokemon/onix/shiny_gba.pal create mode 100644 graphics/pokemon/paras/anim_front_gba.png create mode 100644 graphics/pokemon/paras/back_gba.png create mode 100644 graphics/pokemon/paras/icon_gba.png create mode 100644 graphics/pokemon/paras/normal_gba.pal create mode 100644 graphics/pokemon/paras/shiny_gba.pal create mode 100644 graphics/pokemon/parasect/anim_front_gba.png create mode 100644 graphics/pokemon/parasect/back_gba.png create mode 100644 graphics/pokemon/parasect/icon_gba.png create mode 100644 graphics/pokemon/parasect/normal_gba.pal create mode 100644 graphics/pokemon/parasect/shiny_gba.pal create mode 100644 graphics/pokemon/pelipper/anim_front_gba.png create mode 100644 graphics/pokemon/pelipper/back_gba.png create mode 100644 graphics/pokemon/pelipper/icon_gba.png create mode 100644 graphics/pokemon/pelipper/normal_gba.pal create mode 100644 graphics/pokemon/pelipper/shiny_gba.pal create mode 100644 graphics/pokemon/persian/anim_front_gba.png create mode 100644 graphics/pokemon/persian/back_gba.png create mode 100644 graphics/pokemon/persian/icon_gba.png create mode 100644 graphics/pokemon/persian/normal_gba.pal create mode 100644 graphics/pokemon/persian/shiny_gba.pal create mode 100644 graphics/pokemon/phanpy/anim_front_gba.png create mode 100644 graphics/pokemon/phanpy/back_gba.png create mode 100644 graphics/pokemon/phanpy/icon_gba.png create mode 100644 graphics/pokemon/phanpy/normal_gba.pal create mode 100644 graphics/pokemon/phanpy/shiny_gba.pal create mode 100644 graphics/pokemon/pichu/anim_front_gba.png create mode 100644 graphics/pokemon/pichu/back_gba.png create mode 100644 graphics/pokemon/pichu/icon_gba.png create mode 100644 graphics/pokemon/pichu/normal_gba.pal create mode 100644 graphics/pokemon/pichu/shiny_gba.pal create mode 100644 graphics/pokemon/pidgeot/anim_front_gba.png create mode 100644 graphics/pokemon/pidgeot/back_gba.png create mode 100644 graphics/pokemon/pidgeot/icon_gba.png create mode 100644 graphics/pokemon/pidgeot/normal_gba.pal create mode 100644 graphics/pokemon/pidgeot/shiny_gba.pal create mode 100644 graphics/pokemon/pidgeotto/anim_front_gba.png create mode 100644 graphics/pokemon/pidgeotto/back_gba.png create mode 100644 graphics/pokemon/pidgeotto/icon_gba.png create mode 100644 graphics/pokemon/pidgeotto/normal_gba.pal create mode 100644 graphics/pokemon/pidgeotto/shiny_gba.pal create mode 100644 graphics/pokemon/pidgey/anim_front_gba.png create mode 100644 graphics/pokemon/pidgey/back_gba.png create mode 100644 graphics/pokemon/pidgey/icon_gba.png create mode 100644 graphics/pokemon/pidgey/normal_gba.pal create mode 100644 graphics/pokemon/pidgey/shiny_gba.pal create mode 100644 graphics/pokemon/pikachu/anim_front_gba.png create mode 100644 graphics/pokemon/pikachu/back_gba.png create mode 100644 graphics/pokemon/pikachu/icon_gba.png create mode 100644 graphics/pokemon/pikachu/normal_gba.pal create mode 100644 graphics/pokemon/pikachu/shiny_gba.pal create mode 100644 graphics/pokemon/piloswine/anim_front_gba.png create mode 100644 graphics/pokemon/piloswine/back_gba.png create mode 100644 graphics/pokemon/piloswine/icon_gba.png create mode 100644 graphics/pokemon/piloswine/normal_gba.pal create mode 100644 graphics/pokemon/piloswine/shiny_gba.pal create mode 100644 graphics/pokemon/pineco/anim_front_gba.png create mode 100644 graphics/pokemon/pineco/back_gba.png create mode 100644 graphics/pokemon/pineco/icon_gba.png create mode 100644 graphics/pokemon/pineco/normal_gba.pal create mode 100644 graphics/pokemon/pineco/shiny_gba.pal create mode 100644 graphics/pokemon/pinsir/anim_front_gba.png create mode 100644 graphics/pokemon/pinsir/back_gba.png create mode 100644 graphics/pokemon/pinsir/icon_gba.png create mode 100644 graphics/pokemon/pinsir/normal_gba.pal create mode 100644 graphics/pokemon/pinsir/shiny_gba.pal create mode 100644 graphics/pokemon/plusle/anim_front_gba.png create mode 100644 graphics/pokemon/plusle/back_gba.png create mode 100644 graphics/pokemon/plusle/icon_gba.png create mode 100644 graphics/pokemon/plusle/normal_gba.pal create mode 100644 graphics/pokemon/plusle/shiny_gba.pal create mode 100644 graphics/pokemon/politoed/anim_front_gba.png create mode 100644 graphics/pokemon/politoed/back_gba.png create mode 100644 graphics/pokemon/politoed/icon_gba.png create mode 100644 graphics/pokemon/politoed/normal_gba.pal create mode 100644 graphics/pokemon/politoed/shiny_gba.pal create mode 100644 graphics/pokemon/poliwag/anim_front_gba.png create mode 100644 graphics/pokemon/poliwag/back_gba.png create mode 100644 graphics/pokemon/poliwag/icon_gba.png create mode 100644 graphics/pokemon/poliwag/normal_gba.pal create mode 100644 graphics/pokemon/poliwag/shiny_gba.pal create mode 100644 graphics/pokemon/poliwhirl/anim_front_gba.png create mode 100644 graphics/pokemon/poliwhirl/back_gba.png create mode 100644 graphics/pokemon/poliwhirl/icon_gba.png create mode 100644 graphics/pokemon/poliwhirl/normal_gba.pal create mode 100644 graphics/pokemon/poliwhirl/shiny_gba.pal create mode 100644 graphics/pokemon/poliwrath/anim_front_gba.png create mode 100644 graphics/pokemon/poliwrath/back_gba.png create mode 100644 graphics/pokemon/poliwrath/icon_gba.png create mode 100644 graphics/pokemon/poliwrath/normal_gba.pal create mode 100644 graphics/pokemon/poliwrath/shiny_gba.pal create mode 100644 graphics/pokemon/ponyta/anim_front_gba.png create mode 100644 graphics/pokemon/ponyta/back_gba.png create mode 100644 graphics/pokemon/ponyta/icon_gba.png create mode 100644 graphics/pokemon/ponyta/normal_gba.pal create mode 100644 graphics/pokemon/ponyta/shiny_gba.pal create mode 100644 graphics/pokemon/poochyena/anim_front_gba.png create mode 100644 graphics/pokemon/poochyena/back_gba.png create mode 100644 graphics/pokemon/poochyena/icon_gba.png create mode 100644 graphics/pokemon/poochyena/normal_gba.pal create mode 100644 graphics/pokemon/poochyena/shiny_gba.pal create mode 100644 graphics/pokemon/porygon/anim_front_gba.png create mode 100644 graphics/pokemon/porygon/back_gba.png create mode 100644 graphics/pokemon/porygon/icon_gba.png create mode 100644 graphics/pokemon/porygon/normal_gba.pal create mode 100644 graphics/pokemon/porygon/shiny_gba.pal create mode 100644 graphics/pokemon/porygon2/anim_front_gba.png create mode 100644 graphics/pokemon/porygon2/back_gba.png create mode 100644 graphics/pokemon/porygon2/icon_gba.png create mode 100644 graphics/pokemon/porygon2/normal_gba.pal create mode 100644 graphics/pokemon/porygon2/shiny_gba.pal create mode 100644 graphics/pokemon/primeape/anim_front_gba.png create mode 100644 graphics/pokemon/primeape/back_gba.png create mode 100644 graphics/pokemon/primeape/icon_gba.png create mode 100644 graphics/pokemon/primeape/normal_gba.pal create mode 100644 graphics/pokemon/primeape/shiny_gba.pal create mode 100644 graphics/pokemon/psyduck/anim_front_gba.png create mode 100644 graphics/pokemon/psyduck/back_gba.png create mode 100644 graphics/pokemon/psyduck/icon_gba.png create mode 100644 graphics/pokemon/psyduck/normal_gba.pal create mode 100644 graphics/pokemon/psyduck/shiny_gba.pal create mode 100644 graphics/pokemon/pupitar/anim_front_gba.png create mode 100644 graphics/pokemon/pupitar/back_gba.png create mode 100644 graphics/pokemon/pupitar/icon_gba.png create mode 100644 graphics/pokemon/pupitar/normal_gba.pal create mode 100644 graphics/pokemon/pupitar/shiny_gba.pal create mode 100644 graphics/pokemon/quagsire/anim_front_gba.png create mode 100644 graphics/pokemon/quagsire/back_gba.png create mode 100644 graphics/pokemon/quagsire/icon_gba.png create mode 100644 graphics/pokemon/quagsire/normal_gba.pal create mode 100644 graphics/pokemon/quagsire/shiny_gba.pal create mode 100644 graphics/pokemon/question_mark/circled/anim_front_gba.png create mode 100644 graphics/pokemon/question_mark/circled/back_gba.png create mode 100644 graphics/pokemon/question_mark/circled/normal_gba.pal create mode 100644 graphics/pokemon/question_mark/circled/shiny_gba.pal create mode 100644 graphics/pokemon/question_mark/double/anim_front_gba.png create mode 100644 graphics/pokemon/question_mark/double/back_gba.png create mode 100644 graphics/pokemon/question_mark/double/normal_gba.pal create mode 100644 graphics/pokemon/question_mark/double/shiny_gba.pal create mode 100644 graphics/pokemon/question_mark/footprint_gba.png create mode 100644 graphics/pokemon/question_mark/icon_gba.png create mode 100644 graphics/pokemon/quilava/anim_front_gba.png create mode 100644 graphics/pokemon/quilava/back_gba.png create mode 100644 graphics/pokemon/quilava/icon_gba.png create mode 100644 graphics/pokemon/quilava/normal_gba.pal create mode 100644 graphics/pokemon/quilava/shiny_gba.pal create mode 100644 graphics/pokemon/qwilfish/anim_front_gba.png create mode 100644 graphics/pokemon/qwilfish/back_gba.png create mode 100644 graphics/pokemon/qwilfish/icon_gba.png create mode 100644 graphics/pokemon/qwilfish/normal_gba.pal create mode 100644 graphics/pokemon/qwilfish/shiny_gba.pal create mode 100644 graphics/pokemon/raichu/anim_front_gba.png create mode 100644 graphics/pokemon/raichu/back_gba.png create mode 100644 graphics/pokemon/raichu/icon_gba.png create mode 100644 graphics/pokemon/raichu/normal_gba.pal create mode 100644 graphics/pokemon/raichu/shiny_gba.pal create mode 100644 graphics/pokemon/raikou/anim_front_gba.png create mode 100644 graphics/pokemon/raikou/back_gba.png create mode 100644 graphics/pokemon/raikou/icon_gba.png create mode 100644 graphics/pokemon/raikou/normal_gba.pal create mode 100644 graphics/pokemon/raikou/shiny_gba.pal create mode 100644 graphics/pokemon/ralts/anim_front_gba.png create mode 100644 graphics/pokemon/ralts/back_gba.png create mode 100644 graphics/pokemon/ralts/icon_gba.png create mode 100644 graphics/pokemon/ralts/normal_gba.pal create mode 100644 graphics/pokemon/ralts/shiny_gba.pal create mode 100644 graphics/pokemon/rapidash/anim_front_gba.png create mode 100644 graphics/pokemon/rapidash/back_gba.png create mode 100644 graphics/pokemon/rapidash/icon_gba.png create mode 100644 graphics/pokemon/rapidash/normal_gba.pal create mode 100644 graphics/pokemon/rapidash/shiny_gba.pal create mode 100644 graphics/pokemon/raticate/anim_front_gba.png create mode 100644 graphics/pokemon/raticate/back_gba.png create mode 100644 graphics/pokemon/raticate/icon_gba.png create mode 100644 graphics/pokemon/raticate/normal_gba.pal create mode 100644 graphics/pokemon/raticate/shiny_gba.pal create mode 100644 graphics/pokemon/rattata/anim_front_gba.png create mode 100644 graphics/pokemon/rattata/back_gba.png create mode 100644 graphics/pokemon/rattata/icon_gba.png create mode 100644 graphics/pokemon/rattata/normal_gba.pal create mode 100644 graphics/pokemon/rattata/shiny_gba.pal create mode 100644 graphics/pokemon/rayquaza/anim_front_gba.png create mode 100644 graphics/pokemon/rayquaza/back_gba.png create mode 100644 graphics/pokemon/rayquaza/icon_gba.png create mode 100644 graphics/pokemon/rayquaza/normal_gba.pal create mode 100644 graphics/pokemon/rayquaza/shiny_gba.pal create mode 100644 graphics/pokemon/regice/anim_front_gba.png create mode 100644 graphics/pokemon/regice/back_gba.png create mode 100644 graphics/pokemon/regice/icon_gba.png create mode 100644 graphics/pokemon/regice/normal_gba.pal create mode 100644 graphics/pokemon/regice/shiny_gba.pal create mode 100644 graphics/pokemon/regirock/anim_front_gba.png create mode 100644 graphics/pokemon/regirock/back_gba.png create mode 100644 graphics/pokemon/regirock/icon_gba.png create mode 100644 graphics/pokemon/regirock/normal_gba.pal create mode 100644 graphics/pokemon/regirock/shiny_gba.pal create mode 100644 graphics/pokemon/registeel/anim_front_gba.png create mode 100644 graphics/pokemon/registeel/back_gba.png create mode 100644 graphics/pokemon/registeel/icon_gba.png create mode 100644 graphics/pokemon/registeel/normal_gba.pal create mode 100644 graphics/pokemon/registeel/shiny_gba.pal create mode 100644 graphics/pokemon/relicanth/anim_front_gba.png create mode 100644 graphics/pokemon/relicanth/back_gba.png create mode 100644 graphics/pokemon/relicanth/icon_gba.png create mode 100644 graphics/pokemon/relicanth/normal_gba.pal create mode 100644 graphics/pokemon/relicanth/shiny_gba.pal create mode 100644 graphics/pokemon/remoraid/anim_front_gba.png create mode 100644 graphics/pokemon/remoraid/back_gba.png create mode 100644 graphics/pokemon/remoraid/icon_gba.png create mode 100644 graphics/pokemon/remoraid/normal_gba.pal create mode 100644 graphics/pokemon/remoraid/shiny_gba.pal create mode 100644 graphics/pokemon/rhydon/anim_front_gba.png create mode 100644 graphics/pokemon/rhydon/back_gba.png create mode 100644 graphics/pokemon/rhydon/icon_gba.png create mode 100644 graphics/pokemon/rhydon/normal_gba.pal create mode 100644 graphics/pokemon/rhydon/shiny_gba.pal create mode 100644 graphics/pokemon/rhyhorn/anim_front_gba.png create mode 100644 graphics/pokemon/rhyhorn/back_gba.png create mode 100644 graphics/pokemon/rhyhorn/icon_gba.png create mode 100644 graphics/pokemon/rhyhorn/normal_gba.pal create mode 100644 graphics/pokemon/rhyhorn/shiny_gba.pal create mode 100644 graphics/pokemon/roselia/anim_front_gba.png create mode 100644 graphics/pokemon/roselia/back_gba.png create mode 100644 graphics/pokemon/roselia/icon_gba.png create mode 100644 graphics/pokemon/roselia/normal_gba.pal create mode 100644 graphics/pokemon/roselia/shiny_gba.pal create mode 100644 graphics/pokemon/sableye/anim_front_gba.png create mode 100644 graphics/pokemon/sableye/back_gba.png create mode 100644 graphics/pokemon/sableye/icon_gba.png create mode 100644 graphics/pokemon/sableye/normal_gba.pal create mode 100644 graphics/pokemon/sableye/shiny_gba.pal create mode 100644 graphics/pokemon/salamence/anim_front_gba.png create mode 100644 graphics/pokemon/salamence/back_gba.png create mode 100644 graphics/pokemon/salamence/icon_gba.png create mode 100644 graphics/pokemon/salamence/normal_gba.pal create mode 100644 graphics/pokemon/salamence/shiny_gba.pal create mode 100644 graphics/pokemon/sandshrew/anim_front_gba.png create mode 100644 graphics/pokemon/sandshrew/back_gba.png create mode 100644 graphics/pokemon/sandshrew/icon_gba.png create mode 100644 graphics/pokemon/sandshrew/normal_gba.pal create mode 100644 graphics/pokemon/sandshrew/shiny_gba.pal create mode 100644 graphics/pokemon/sandslash/anim_front_gba.png create mode 100644 graphics/pokemon/sandslash/back_gba.png create mode 100644 graphics/pokemon/sandslash/icon_gba.png create mode 100644 graphics/pokemon/sandslash/normal_gba.pal create mode 100644 graphics/pokemon/sandslash/shiny_gba.pal create mode 100644 graphics/pokemon/sceptile/anim_front_gba.png create mode 100644 graphics/pokemon/sceptile/back_gba.png create mode 100644 graphics/pokemon/sceptile/icon_gba.png create mode 100644 graphics/pokemon/sceptile/normal_gba.pal create mode 100644 graphics/pokemon/sceptile/shiny_gba.pal create mode 100644 graphics/pokemon/scizor/anim_front_gba.png create mode 100644 graphics/pokemon/scizor/back_gba.png create mode 100644 graphics/pokemon/scizor/icon_gba.png create mode 100644 graphics/pokemon/scizor/normal_gba.pal create mode 100644 graphics/pokemon/scizor/shiny_gba.pal create mode 100644 graphics/pokemon/scyther/anim_front_gba.png create mode 100644 graphics/pokemon/scyther/back_gba.png create mode 100644 graphics/pokemon/scyther/icon_gba.png create mode 100644 graphics/pokemon/scyther/normal_gba.pal create mode 100644 graphics/pokemon/scyther/shiny_gba.pal create mode 100644 graphics/pokemon/seadra/anim_front_gba.png create mode 100644 graphics/pokemon/seadra/back_gba.png create mode 100644 graphics/pokemon/seadra/icon_gba.png create mode 100644 graphics/pokemon/seadra/normal_gba.pal create mode 100644 graphics/pokemon/seadra/shiny_gba.pal create mode 100644 graphics/pokemon/seaking/anim_front_gba.png create mode 100644 graphics/pokemon/seaking/back_gba.png create mode 100644 graphics/pokemon/seaking/icon_gba.png create mode 100644 graphics/pokemon/seaking/normal_gba.pal create mode 100644 graphics/pokemon/seaking/shiny_gba.pal create mode 100644 graphics/pokemon/sealeo/anim_front_gba.png create mode 100644 graphics/pokemon/sealeo/back_gba.png create mode 100644 graphics/pokemon/sealeo/icon_gba.png create mode 100644 graphics/pokemon/sealeo/normal_gba.pal create mode 100644 graphics/pokemon/sealeo/shiny_gba.pal create mode 100644 graphics/pokemon/seedot/anim_front_gba.png create mode 100644 graphics/pokemon/seedot/back_gba.png create mode 100644 graphics/pokemon/seedot/icon_gba.png create mode 100644 graphics/pokemon/seedot/normal_gba.pal create mode 100644 graphics/pokemon/seedot/shiny_gba.pal create mode 100644 graphics/pokemon/seel/anim_front_gba.png create mode 100644 graphics/pokemon/seel/back_gba.png create mode 100644 graphics/pokemon/seel/icon_gba.png create mode 100644 graphics/pokemon/seel/normal_gba.pal create mode 100644 graphics/pokemon/seel/shiny_gba.pal create mode 100644 graphics/pokemon/sentret/anim_front_gba.png create mode 100644 graphics/pokemon/sentret/back_gba.png create mode 100644 graphics/pokemon/sentret/icon_gba.png create mode 100644 graphics/pokemon/sentret/normal_gba.pal create mode 100644 graphics/pokemon/sentret/shiny_gba.pal create mode 100644 graphics/pokemon/seviper/anim_front_gba.png create mode 100644 graphics/pokemon/seviper/back_gba.png create mode 100644 graphics/pokemon/seviper/icon_gba.png create mode 100644 graphics/pokemon/seviper/normal_gba.pal create mode 100644 graphics/pokemon/seviper/shiny_gba.pal create mode 100644 graphics/pokemon/sharpedo/anim_front_gba.png create mode 100644 graphics/pokemon/sharpedo/back_gba.png create mode 100644 graphics/pokemon/sharpedo/icon_gba.png create mode 100644 graphics/pokemon/sharpedo/normal_gba.pal create mode 100644 graphics/pokemon/sharpedo/shiny_gba.pal create mode 100644 graphics/pokemon/shedinja/anim_front_gba.png create mode 100644 graphics/pokemon/shedinja/back_gba.png create mode 100644 graphics/pokemon/shedinja/icon_gba.png create mode 100644 graphics/pokemon/shedinja/normal_gba.pal create mode 100644 graphics/pokemon/shedinja/shiny_gba.pal create mode 100644 graphics/pokemon/shelgon/anim_front_gba.png create mode 100644 graphics/pokemon/shelgon/back_gba.png create mode 100644 graphics/pokemon/shelgon/icon_gba.png create mode 100644 graphics/pokemon/shelgon/normal_gba.pal create mode 100644 graphics/pokemon/shelgon/shiny_gba.pal create mode 100644 graphics/pokemon/shellder/anim_front_gba.png create mode 100644 graphics/pokemon/shellder/back_gba.png create mode 100644 graphics/pokemon/shellder/icon_gba.png create mode 100644 graphics/pokemon/shellder/normal_gba.pal create mode 100644 graphics/pokemon/shellder/shiny_gba.pal create mode 100644 graphics/pokemon/shiftry/anim_front_gba.png create mode 100644 graphics/pokemon/shiftry/back_gba.png create mode 100644 graphics/pokemon/shiftry/icon_gba.png create mode 100644 graphics/pokemon/shiftry/normal_gba.pal create mode 100644 graphics/pokemon/shiftry/shiny_gba.pal create mode 100644 graphics/pokemon/shroomish/anim_front_gba.png create mode 100644 graphics/pokemon/shroomish/back_gba.png create mode 100644 graphics/pokemon/shroomish/footprint_gba.png create mode 100644 graphics/pokemon/shroomish/icon_gba.png create mode 100644 graphics/pokemon/shroomish/normal_gba.pal create mode 100644 graphics/pokemon/shroomish/shiny_gba.pal create mode 100644 graphics/pokemon/shuckle/anim_front_gba.png create mode 100644 graphics/pokemon/shuckle/back_gba.png create mode 100644 graphics/pokemon/shuckle/icon_gba.png create mode 100644 graphics/pokemon/shuckle/normal_gba.pal create mode 100644 graphics/pokemon/shuckle/shiny_gba.pal create mode 100644 graphics/pokemon/shuppet/anim_front_gba.png create mode 100644 graphics/pokemon/shuppet/back_gba.png create mode 100644 graphics/pokemon/shuppet/icon_gba.png create mode 100644 graphics/pokemon/shuppet/normal_gba.pal create mode 100644 graphics/pokemon/shuppet/shiny_gba.pal create mode 100644 graphics/pokemon/silcoon/anim_front_gba.png create mode 100644 graphics/pokemon/silcoon/back_gba.png create mode 100644 graphics/pokemon/silcoon/icon_gba.png create mode 100644 graphics/pokemon/silcoon/normal_gba.pal create mode 100644 graphics/pokemon/silcoon/shiny_gba.pal create mode 100644 graphics/pokemon/skarmory/anim_front_gba.png create mode 100644 graphics/pokemon/skarmory/back_gba.png create mode 100644 graphics/pokemon/skarmory/icon_gba.png create mode 100644 graphics/pokemon/skarmory/normal_gba.pal create mode 100644 graphics/pokemon/skarmory/shiny_gba.pal create mode 100644 graphics/pokemon/skiploom/anim_front_gba.png create mode 100644 graphics/pokemon/skiploom/back_gba.png create mode 100644 graphics/pokemon/skiploom/icon_gba.png create mode 100644 graphics/pokemon/skiploom/normal_gba.pal create mode 100644 graphics/pokemon/skiploom/shiny_gba.pal create mode 100644 graphics/pokemon/skitty/anim_front_gba.png create mode 100644 graphics/pokemon/skitty/back_gba.png create mode 100644 graphics/pokemon/skitty/icon_gba.png create mode 100644 graphics/pokemon/skitty/normal_gba.pal create mode 100644 graphics/pokemon/skitty/shiny_gba.pal create mode 100644 graphics/pokemon/slaking/anim_front_gba.png create mode 100644 graphics/pokemon/slaking/back_gba.png create mode 100644 graphics/pokemon/slaking/icon_gba.png create mode 100644 graphics/pokemon/slaking/normal_gba.pal create mode 100644 graphics/pokemon/slaking/shiny_gba.pal create mode 100644 graphics/pokemon/slakoth/anim_front_gba.png create mode 100644 graphics/pokemon/slakoth/back_gba.png create mode 100644 graphics/pokemon/slakoth/icon_gba.png create mode 100644 graphics/pokemon/slakoth/normal_gba.pal create mode 100644 graphics/pokemon/slakoth/shiny_gba.pal create mode 100644 graphics/pokemon/slowbro/anim_front_gba.png create mode 100644 graphics/pokemon/slowbro/back_gba.png create mode 100644 graphics/pokemon/slowbro/icon_gba.png create mode 100644 graphics/pokemon/slowbro/normal_gba.pal create mode 100644 graphics/pokemon/slowbro/shiny_gba.pal create mode 100644 graphics/pokemon/slowking/anim_front_gba.png create mode 100644 graphics/pokemon/slowking/back_gba.png create mode 100644 graphics/pokemon/slowking/icon_gba.png create mode 100644 graphics/pokemon/slowking/normal_gba.pal create mode 100644 graphics/pokemon/slowking/shiny_gba.pal create mode 100644 graphics/pokemon/slowpoke/anim_front_gba.png create mode 100644 graphics/pokemon/slowpoke/back_gba.png create mode 100644 graphics/pokemon/slowpoke/icon_gba.png create mode 100644 graphics/pokemon/slowpoke/normal_gba.pal create mode 100644 graphics/pokemon/slowpoke/shiny_gba.pal create mode 100644 graphics/pokemon/slugma/anim_front_gba.png create mode 100644 graphics/pokemon/slugma/back_gba.png create mode 100644 graphics/pokemon/slugma/icon_gba.png create mode 100644 graphics/pokemon/slugma/normal_gba.pal create mode 100644 graphics/pokemon/slugma/shiny_gba.pal create mode 100644 graphics/pokemon/smeargle/anim_front_gba.png create mode 100644 graphics/pokemon/smeargle/back_gba.png create mode 100644 graphics/pokemon/smeargle/icon_gba.png create mode 100644 graphics/pokemon/smeargle/normal_gba.pal create mode 100644 graphics/pokemon/smeargle/shiny_gba.pal create mode 100644 graphics/pokemon/smoochum/anim_front_gba.png create mode 100644 graphics/pokemon/smoochum/back_gba.png create mode 100644 graphics/pokemon/smoochum/icon_gba.png create mode 100644 graphics/pokemon/smoochum/normal_gba.pal create mode 100644 graphics/pokemon/smoochum/shiny_gba.pal create mode 100644 graphics/pokemon/sneasel/anim_front_gba.png create mode 100644 graphics/pokemon/sneasel/back_gba.png create mode 100644 graphics/pokemon/sneasel/icon_gba.png create mode 100644 graphics/pokemon/sneasel/normal_gba.pal create mode 100644 graphics/pokemon/sneasel/shiny_gba.pal create mode 100644 graphics/pokemon/snorlax/anim_front_gba.png create mode 100644 graphics/pokemon/snorlax/back_gba.png create mode 100644 graphics/pokemon/snorlax/icon_gba.png create mode 100644 graphics/pokemon/snorlax/normal_gba.pal create mode 100644 graphics/pokemon/snorlax/shiny_gba.pal create mode 100644 graphics/pokemon/snorunt/anim_front_gba.png create mode 100644 graphics/pokemon/snorunt/back_gba.png create mode 100644 graphics/pokemon/snorunt/icon_gba.png create mode 100644 graphics/pokemon/snorunt/normal_gba.pal create mode 100644 graphics/pokemon/snorunt/shiny_gba.pal create mode 100644 graphics/pokemon/snubbull/anim_front_gba.png create mode 100644 graphics/pokemon/snubbull/back_gba.png create mode 100644 graphics/pokemon/snubbull/icon_gba.png create mode 100644 graphics/pokemon/snubbull/normal_gba.pal create mode 100644 graphics/pokemon/snubbull/shiny_gba.pal create mode 100644 graphics/pokemon/solrock/anim_front_gba.png create mode 100644 graphics/pokemon/solrock/back_gba.png create mode 100644 graphics/pokemon/solrock/icon_gba.png create mode 100644 graphics/pokemon/solrock/normal_gba.pal create mode 100644 graphics/pokemon/solrock/shiny_gba.pal create mode 100644 graphics/pokemon/spearow/anim_front_gba.png create mode 100644 graphics/pokemon/spearow/back_gba.png create mode 100644 graphics/pokemon/spearow/icon_gba.png create mode 100644 graphics/pokemon/spearow/normal_gba.pal create mode 100644 graphics/pokemon/spearow/shiny_gba.pal create mode 100644 graphics/pokemon/spheal/anim_front_gba.png create mode 100644 graphics/pokemon/spheal/back_gba.png create mode 100644 graphics/pokemon/spheal/icon_gba.png create mode 100644 graphics/pokemon/spheal/normal_gba.pal create mode 100644 graphics/pokemon/spheal/shiny_gba.pal create mode 100644 graphics/pokemon/spinarak/anim_front_gba.png create mode 100644 graphics/pokemon/spinarak/back_gba.png create mode 100644 graphics/pokemon/spinarak/icon_gba.png create mode 100644 graphics/pokemon/spinarak/normal_gba.pal create mode 100644 graphics/pokemon/spinarak/shiny_gba.pal create mode 100644 graphics/pokemon/spoink/anim_front_gba.png create mode 100644 graphics/pokemon/spoink/back_gba.png create mode 100644 graphics/pokemon/spoink/icon_gba.png create mode 100644 graphics/pokemon/spoink/normal_gba.pal create mode 100644 graphics/pokemon/spoink/shiny_gba.pal create mode 100644 graphics/pokemon/squirtle/anim_front_gba.png create mode 100644 graphics/pokemon/squirtle/back_gba.png create mode 100644 graphics/pokemon/squirtle/icon_gba.png create mode 100644 graphics/pokemon/squirtle/normal_gba.pal create mode 100644 graphics/pokemon/squirtle/shiny_gba.pal create mode 100644 graphics/pokemon/stantler/anim_front_gba.png create mode 100644 graphics/pokemon/stantler/back_gba.png create mode 100644 graphics/pokemon/stantler/icon_gba.png create mode 100644 graphics/pokemon/stantler/normal_gba.pal create mode 100644 graphics/pokemon/stantler/shiny_gba.pal create mode 100644 graphics/pokemon/starmie/anim_front_gba.png create mode 100644 graphics/pokemon/starmie/back_gba.png create mode 100644 graphics/pokemon/starmie/icon_gba.png create mode 100644 graphics/pokemon/starmie/normal_gba.pal create mode 100644 graphics/pokemon/starmie/shiny_gba.pal create mode 100644 graphics/pokemon/staryu/anim_front_gba.png create mode 100644 graphics/pokemon/staryu/back_gba.png create mode 100644 graphics/pokemon/staryu/icon_gba.png create mode 100644 graphics/pokemon/staryu/normal_gba.pal create mode 100644 graphics/pokemon/staryu/shiny_gba.pal create mode 100644 graphics/pokemon/steelix/anim_front_gba.png create mode 100644 graphics/pokemon/steelix/back_gba.png create mode 100644 graphics/pokemon/steelix/icon_gba.png create mode 100644 graphics/pokemon/steelix/normal_gba.pal create mode 100644 graphics/pokemon/steelix/shiny_gba.pal create mode 100644 graphics/pokemon/sudowoodo/anim_front_gba.png create mode 100644 graphics/pokemon/sudowoodo/back_gba.png create mode 100644 graphics/pokemon/sudowoodo/icon_gba.png create mode 100644 graphics/pokemon/sudowoodo/normal_gba.pal create mode 100644 graphics/pokemon/sudowoodo/shiny_gba.pal create mode 100644 graphics/pokemon/suicune/anim_front_gba.png create mode 100644 graphics/pokemon/suicune/back_gba.png create mode 100644 graphics/pokemon/suicune/icon_gba.png create mode 100644 graphics/pokemon/suicune/normal_gba.pal create mode 100644 graphics/pokemon/suicune/shiny_gba.pal create mode 100644 graphics/pokemon/sunflora/anim_front_gba.png create mode 100644 graphics/pokemon/sunflora/back_gba.png create mode 100644 graphics/pokemon/sunflora/icon_gba.png create mode 100644 graphics/pokemon/sunflora/normal_gba.pal create mode 100644 graphics/pokemon/sunflora/shiny_gba.pal create mode 100644 graphics/pokemon/sunkern/anim_front_gba.png create mode 100644 graphics/pokemon/sunkern/back_gba.png create mode 100644 graphics/pokemon/sunkern/icon_gba.png create mode 100644 graphics/pokemon/sunkern/normal_gba.pal create mode 100644 graphics/pokemon/sunkern/shiny_gba.pal create mode 100644 graphics/pokemon/surskit/anim_front_gba.png create mode 100644 graphics/pokemon/surskit/back_gba.png create mode 100644 graphics/pokemon/surskit/icon_gba.png create mode 100644 graphics/pokemon/surskit/normal_gba.pal create mode 100644 graphics/pokemon/surskit/shiny_gba.pal create mode 100644 graphics/pokemon/swablu/anim_front_gba.png create mode 100644 graphics/pokemon/swablu/back_gba.png create mode 100644 graphics/pokemon/swablu/icon_gba.png create mode 100644 graphics/pokemon/swablu/normal_gba.pal create mode 100644 graphics/pokemon/swablu/shiny_gba.pal create mode 100644 graphics/pokemon/swalot/anim_front_gba.png create mode 100644 graphics/pokemon/swalot/back_gba.png create mode 100644 graphics/pokemon/swalot/icon_gba.png create mode 100644 graphics/pokemon/swalot/normal_gba.pal create mode 100644 graphics/pokemon/swalot/shiny_gba.pal create mode 100644 graphics/pokemon/swampert/anim_front_gba.png create mode 100644 graphics/pokemon/swampert/back_gba.png create mode 100644 graphics/pokemon/swampert/icon_gba.png create mode 100644 graphics/pokemon/swampert/normal_gba.pal create mode 100644 graphics/pokemon/swampert/shiny_gba.pal create mode 100644 graphics/pokemon/swellow/anim_front_gba.png create mode 100644 graphics/pokemon/swellow/back_gba.png create mode 100644 graphics/pokemon/swellow/icon_gba.png create mode 100644 graphics/pokemon/swellow/normal_gba.pal create mode 100644 graphics/pokemon/swellow/shiny_gba.pal create mode 100644 graphics/pokemon/swinub/anim_front_gba.png create mode 100644 graphics/pokemon/swinub/back_gba.png create mode 100644 graphics/pokemon/swinub/icon_gba.png create mode 100644 graphics/pokemon/swinub/normal_gba.pal create mode 100644 graphics/pokemon/swinub/shiny_gba.pal create mode 100644 graphics/pokemon/taillow/anim_front_gba.png create mode 100644 graphics/pokemon/taillow/back_gba.png create mode 100644 graphics/pokemon/taillow/icon_gba.png create mode 100644 graphics/pokemon/taillow/normal_gba.pal create mode 100644 graphics/pokemon/taillow/shiny_gba.pal create mode 100644 graphics/pokemon/tangela/anim_front_gba.png create mode 100644 graphics/pokemon/tangela/back_gba.png create mode 100644 graphics/pokemon/tangela/icon_gba.png create mode 100644 graphics/pokemon/tangela/normal_gba.pal create mode 100644 graphics/pokemon/tangela/shiny_gba.pal create mode 100644 graphics/pokemon/tauros/anim_front_gba.png create mode 100644 graphics/pokemon/tauros/back_gba.png create mode 100644 graphics/pokemon/tauros/icon_gba.png create mode 100644 graphics/pokemon/tauros/normal_gba.pal create mode 100644 graphics/pokemon/tauros/shiny_gba.pal create mode 100644 graphics/pokemon/teddiursa/anim_front_gba.png create mode 100644 graphics/pokemon/teddiursa/back_gba.png create mode 100644 graphics/pokemon/teddiursa/icon_gba.png create mode 100644 graphics/pokemon/teddiursa/normal_gba.pal create mode 100644 graphics/pokemon/teddiursa/shiny_gba.pal create mode 100644 graphics/pokemon/tentacool/anim_front_gba.png create mode 100644 graphics/pokemon/tentacool/back_gba.png create mode 100644 graphics/pokemon/tentacool/icon_gba.png create mode 100644 graphics/pokemon/tentacool/normal_gba.pal create mode 100644 graphics/pokemon/tentacool/shiny_gba.pal create mode 100644 graphics/pokemon/tentacruel/anim_front_gba.png create mode 100644 graphics/pokemon/tentacruel/back_gba.png create mode 100644 graphics/pokemon/tentacruel/icon_gba.png create mode 100644 graphics/pokemon/tentacruel/normal_gba.pal create mode 100644 graphics/pokemon/tentacruel/shiny_gba.pal create mode 100644 graphics/pokemon/togepi/anim_front_gba.png create mode 100644 graphics/pokemon/togepi/back_gba.png create mode 100644 graphics/pokemon/togepi/icon_gba.png create mode 100644 graphics/pokemon/togepi/normal_gba.pal create mode 100644 graphics/pokemon/togepi/shiny_gba.pal create mode 100644 graphics/pokemon/togetic/anim_front_gba.png create mode 100644 graphics/pokemon/togetic/back_gba.png create mode 100644 graphics/pokemon/togetic/icon_gba.png create mode 100644 graphics/pokemon/togetic/normal_gba.pal create mode 100644 graphics/pokemon/togetic/shiny_gba.pal create mode 100644 graphics/pokemon/torchic/anim_front_gba.png create mode 100644 graphics/pokemon/torchic/back_gba.png create mode 100644 graphics/pokemon/torchic/icon_gba.png create mode 100644 graphics/pokemon/torchic/normal_gba.pal create mode 100644 graphics/pokemon/torchic/shiny_gba.pal create mode 100644 graphics/pokemon/torkoal/anim_front_gba.png create mode 100644 graphics/pokemon/torkoal/back_gba.png create mode 100644 graphics/pokemon/torkoal/icon_gba.png create mode 100644 graphics/pokemon/torkoal/normal_gba.pal create mode 100644 graphics/pokemon/torkoal/shiny_gba.pal create mode 100644 graphics/pokemon/totodile/anim_front_gba.png create mode 100644 graphics/pokemon/totodile/back_gba.png create mode 100644 graphics/pokemon/totodile/icon_gba.png create mode 100644 graphics/pokemon/totodile/normal_gba.pal create mode 100644 graphics/pokemon/totodile/shiny_gba.pal create mode 100644 graphics/pokemon/trapinch/anim_front_gba.png create mode 100644 graphics/pokemon/trapinch/back_gba.png create mode 100644 graphics/pokemon/trapinch/icon_gba.png create mode 100644 graphics/pokemon/trapinch/normal_gba.pal create mode 100644 graphics/pokemon/trapinch/shiny_gba.pal create mode 100644 graphics/pokemon/treecko/anim_front_gba.png create mode 100644 graphics/pokemon/treecko/back_gba.png create mode 100644 graphics/pokemon/treecko/icon_gba.png create mode 100644 graphics/pokemon/treecko/normal_gba.pal create mode 100644 graphics/pokemon/treecko/shiny_gba.pal create mode 100644 graphics/pokemon/tropius/anim_front_gba.png create mode 100644 graphics/pokemon/tropius/back_gba.png create mode 100644 graphics/pokemon/tropius/icon_gba.png create mode 100644 graphics/pokemon/tropius/normal_gba.pal create mode 100644 graphics/pokemon/tropius/shiny_gba.pal create mode 100644 graphics/pokemon/typhlosion/anim_front_gba.png create mode 100644 graphics/pokemon/typhlosion/back_gba.png create mode 100644 graphics/pokemon/typhlosion/icon_gba.png create mode 100644 graphics/pokemon/typhlosion/normal_gba.pal create mode 100644 graphics/pokemon/typhlosion/shiny_gba.pal create mode 100644 graphics/pokemon/tyranitar/anim_front_gba.png create mode 100644 graphics/pokemon/tyranitar/back_gba.png create mode 100644 graphics/pokemon/tyranitar/icon_gba.png create mode 100644 graphics/pokemon/tyranitar/normal_gba.pal create mode 100644 graphics/pokemon/tyranitar/shiny_gba.pal create mode 100644 graphics/pokemon/tyrogue/anim_front_gba.png create mode 100644 graphics/pokemon/tyrogue/back_gba.png create mode 100644 graphics/pokemon/tyrogue/icon_gba.png create mode 100644 graphics/pokemon/tyrogue/normal_gba.pal create mode 100644 graphics/pokemon/tyrogue/shiny_gba.pal create mode 100644 graphics/pokemon/umbreon/anim_front_gba.png create mode 100644 graphics/pokemon/umbreon/back_gba.png create mode 100644 graphics/pokemon/umbreon/icon_gba.png create mode 100644 graphics/pokemon/umbreon/normal_gba.pal create mode 100644 graphics/pokemon/umbreon/shiny_gba.pal create mode 100644 graphics/pokemon/ursaring/anim_front_gba.png create mode 100644 graphics/pokemon/ursaring/back_gba.png create mode 100644 graphics/pokemon/ursaring/icon_gba.png create mode 100644 graphics/pokemon/ursaring/normal_gba.pal create mode 100644 graphics/pokemon/ursaring/shiny_gba.pal create mode 100644 graphics/pokemon/vaporeon/anim_front_gba.png create mode 100644 graphics/pokemon/vaporeon/back_gba.png create mode 100644 graphics/pokemon/vaporeon/icon_gba.png create mode 100644 graphics/pokemon/vaporeon/normal_gba.pal create mode 100644 graphics/pokemon/vaporeon/shiny_gba.pal create mode 100644 graphics/pokemon/venomoth/anim_front_gba.png create mode 100644 graphics/pokemon/venomoth/back_gba.png create mode 100644 graphics/pokemon/venomoth/icon_gba.png create mode 100644 graphics/pokemon/venomoth/normal_gba.pal create mode 100644 graphics/pokemon/venomoth/shiny_gba.pal create mode 100644 graphics/pokemon/venonat/anim_front_gba.png create mode 100644 graphics/pokemon/venonat/back_gba.png create mode 100644 graphics/pokemon/venonat/icon_gba.png create mode 100644 graphics/pokemon/venonat/normal_gba.pal create mode 100644 graphics/pokemon/venonat/shiny_gba.pal create mode 100644 graphics/pokemon/venusaur/anim_front_gba.png create mode 100644 graphics/pokemon/venusaur/back_gba.png create mode 100644 graphics/pokemon/venusaur/icon_gba.png create mode 100644 graphics/pokemon/venusaur/normal_gba.pal create mode 100644 graphics/pokemon/venusaur/shiny_gba.pal create mode 100644 graphics/pokemon/vibrava/anim_front_gba.png create mode 100644 graphics/pokemon/vibrava/back_gba.png create mode 100644 graphics/pokemon/vibrava/icon_gba.png create mode 100644 graphics/pokemon/vibrava/normal_gba.pal create mode 100644 graphics/pokemon/vibrava/shiny_gba.pal create mode 100644 graphics/pokemon/victreebel/anim_front_gba.png create mode 100644 graphics/pokemon/victreebel/back_gba.png create mode 100644 graphics/pokemon/victreebel/icon_gba.png create mode 100644 graphics/pokemon/victreebel/normal_gba.pal create mode 100644 graphics/pokemon/victreebel/shiny_gba.pal create mode 100644 graphics/pokemon/vigoroth/anim_front_gba.png create mode 100644 graphics/pokemon/vigoroth/back_gba.png create mode 100644 graphics/pokemon/vigoroth/icon_gba.png create mode 100644 graphics/pokemon/vigoroth/normal_gba.pal create mode 100644 graphics/pokemon/vigoroth/shiny_gba.pal create mode 100644 graphics/pokemon/vileplume/anim_front_gba.png create mode 100644 graphics/pokemon/vileplume/back_gba.png create mode 100644 graphics/pokemon/vileplume/icon_gba.png create mode 100644 graphics/pokemon/vileplume/normal_gba.pal create mode 100644 graphics/pokemon/vileplume/shiny_gba.pal create mode 100644 graphics/pokemon/volbeat/anim_front_gba.png create mode 100644 graphics/pokemon/volbeat/back_gba.png create mode 100644 graphics/pokemon/volbeat/icon_gba.png create mode 100644 graphics/pokemon/volbeat/normal_gba.pal create mode 100644 graphics/pokemon/volbeat/shiny_gba.pal create mode 100644 graphics/pokemon/voltorb/anim_front_gba.png create mode 100644 graphics/pokemon/voltorb/back_gba.png create mode 100644 graphics/pokemon/voltorb/icon_gba.png create mode 100644 graphics/pokemon/voltorb/normal_gba.pal create mode 100644 graphics/pokemon/voltorb/shiny_gba.pal create mode 100644 graphics/pokemon/vulpix/anim_front_gba.png create mode 100644 graphics/pokemon/vulpix/back_gba.png create mode 100644 graphics/pokemon/vulpix/icon_gba.png create mode 100644 graphics/pokemon/vulpix/normal_gba.pal create mode 100644 graphics/pokemon/vulpix/shiny_gba.pal create mode 100644 graphics/pokemon/wailmer/anim_front_gba.png create mode 100644 graphics/pokemon/wailmer/back_gba.png create mode 100644 graphics/pokemon/wailmer/icon_gba.png create mode 100644 graphics/pokemon/wailmer/normal_gba.pal create mode 100644 graphics/pokemon/wailmer/shiny_gba.pal create mode 100644 graphics/pokemon/wailord/anim_front_gba.png create mode 100644 graphics/pokemon/wailord/back_gba.png create mode 100644 graphics/pokemon/wailord/icon_gba.png create mode 100644 graphics/pokemon/wailord/normal_gba.pal create mode 100644 graphics/pokemon/wailord/shiny_gba.pal create mode 100644 graphics/pokemon/walrein/anim_front_gba.png create mode 100644 graphics/pokemon/walrein/back_gba.png create mode 100644 graphics/pokemon/walrein/icon_gba.png create mode 100644 graphics/pokemon/walrein/normal_gba.pal create mode 100644 graphics/pokemon/walrein/shiny_gba.pal create mode 100644 graphics/pokemon/wartortle/anim_front_gba.png create mode 100644 graphics/pokemon/wartortle/back_gba.png create mode 100644 graphics/pokemon/wartortle/icon_gba.png create mode 100644 graphics/pokemon/wartortle/normal_gba.pal create mode 100644 graphics/pokemon/wartortle/shiny_gba.pal create mode 100644 graphics/pokemon/weedle/anim_front_gba.png create mode 100644 graphics/pokemon/weedle/back_gba.png create mode 100644 graphics/pokemon/weedle/icon_gba.png create mode 100644 graphics/pokemon/weedle/normal_gba.pal create mode 100644 graphics/pokemon/weedle/shiny_gba.pal create mode 100644 graphics/pokemon/weepinbell/anim_front_gba.png create mode 100644 graphics/pokemon/weepinbell/back_gba.png create mode 100644 graphics/pokemon/weepinbell/icon_gba.png create mode 100644 graphics/pokemon/weepinbell/normal_gba.pal create mode 100644 graphics/pokemon/weepinbell/shiny_gba.pal create mode 100644 graphics/pokemon/weezing/anim_front_gba.png create mode 100644 graphics/pokemon/weezing/back_gba.png create mode 100644 graphics/pokemon/weezing/icon_gba.png create mode 100644 graphics/pokemon/weezing/normal_gba.pal create mode 100644 graphics/pokemon/weezing/shiny_gba.pal create mode 100644 graphics/pokemon/whiscash/anim_front_gba.png create mode 100644 graphics/pokemon/whiscash/back_gba.png create mode 100644 graphics/pokemon/whiscash/icon_gba.png create mode 100644 graphics/pokemon/whiscash/normal_gba.pal create mode 100644 graphics/pokemon/whiscash/shiny_gba.pal create mode 100644 graphics/pokemon/whismur/anim_front_gba.png create mode 100644 graphics/pokemon/whismur/back_gba.png create mode 100644 graphics/pokemon/whismur/icon_gba.png create mode 100644 graphics/pokemon/whismur/normal_gba.pal create mode 100644 graphics/pokemon/whismur/shiny_gba.pal create mode 100644 graphics/pokemon/wigglytuff/anim_front_gba.png create mode 100644 graphics/pokemon/wigglytuff/back_gba.png create mode 100644 graphics/pokemon/wigglytuff/icon_gba.png create mode 100644 graphics/pokemon/wigglytuff/normal_gba.pal create mode 100644 graphics/pokemon/wigglytuff/shiny_gba.pal create mode 100644 graphics/pokemon/wingull/anim_front_gba.png create mode 100644 graphics/pokemon/wingull/back_gba.png create mode 100644 graphics/pokemon/wingull/icon_gba.png create mode 100644 graphics/pokemon/wingull/normal_gba.pal create mode 100644 graphics/pokemon/wingull/shiny_gba.pal create mode 100644 graphics/pokemon/wobbuffet/anim_front_gba.png create mode 100644 graphics/pokemon/wobbuffet/back_gba.png create mode 100644 graphics/pokemon/wobbuffet/icon_gba.png create mode 100644 graphics/pokemon/wobbuffet/normal_gba.pal create mode 100644 graphics/pokemon/wobbuffet/shiny_gba.pal create mode 100644 graphics/pokemon/wooper/anim_front_gba.png create mode 100644 graphics/pokemon/wooper/back_gba.png create mode 100644 graphics/pokemon/wooper/icon_gba.png create mode 100644 graphics/pokemon/wooper/normal_gba.pal create mode 100644 graphics/pokemon/wooper/shiny_gba.pal create mode 100644 graphics/pokemon/wurmple/anim_front_gba.png create mode 100644 graphics/pokemon/wurmple/back_gba.png create mode 100644 graphics/pokemon/wurmple/icon_gba.png create mode 100644 graphics/pokemon/wurmple/normal_gba.pal create mode 100644 graphics/pokemon/wurmple/shiny_gba.pal create mode 100644 graphics/pokemon/wynaut/anim_front_gba.png create mode 100644 graphics/pokemon/wynaut/back_gba.png create mode 100644 graphics/pokemon/wynaut/icon_gba.png create mode 100644 graphics/pokemon/wynaut/normal_gba.pal create mode 100644 graphics/pokemon/wynaut/shiny_gba.pal create mode 100644 graphics/pokemon/xatu/anim_front_gba.png create mode 100644 graphics/pokemon/xatu/back_gba.png create mode 100644 graphics/pokemon/xatu/icon_gba.png create mode 100644 graphics/pokemon/xatu/normal_gba.pal create mode 100644 graphics/pokemon/xatu/shiny_gba.pal create mode 100644 graphics/pokemon/yanma/anim_front_gba.png create mode 100644 graphics/pokemon/yanma/back_gba.png create mode 100644 graphics/pokemon/yanma/icon_gba.png create mode 100644 graphics/pokemon/yanma/normal_gba.pal create mode 100644 graphics/pokemon/yanma/shiny_gba.pal create mode 100644 graphics/pokemon/zangoose/anim_front_gba.png create mode 100644 graphics/pokemon/zangoose/back_gba.png create mode 100644 graphics/pokemon/zangoose/icon_gba.png create mode 100644 graphics/pokemon/zangoose/normal_gba.pal create mode 100644 graphics/pokemon/zangoose/shiny_gba.pal create mode 100644 graphics/pokemon/zapdos/anim_front_gba.png create mode 100644 graphics/pokemon/zapdos/back_gba.png create mode 100644 graphics/pokemon/zapdos/icon_gba.png create mode 100644 graphics/pokemon/zapdos/normal_gba.pal create mode 100644 graphics/pokemon/zapdos/shiny_gba.pal create mode 100644 graphics/pokemon/zigzagoon/anim_front_gba.png create mode 100644 graphics/pokemon/zigzagoon/back_gba.png create mode 100644 graphics/pokemon/zigzagoon/icon_gba.png create mode 100644 graphics/pokemon/zigzagoon/normal_gba.pal create mode 100644 graphics/pokemon/zigzagoon/shiny_gba.pal create mode 100644 graphics/pokemon/zubat/anim_front_gba.png create mode 100644 graphics/pokemon/zubat/back_gba.png create mode 100644 graphics/pokemon/zubat/icon_gba.png create mode 100644 graphics/pokemon/zubat/normal_gba.pal create mode 100644 graphics/pokemon/zubat/shiny_gba.pal diff --git a/dev_scripts/gba_gfx/delete_files_of_same_name.py b/dev_scripts/gba_gfx/delete_files_of_same_name.py new file mode 100644 index 0000000000..1ff58cb8cf --- /dev/null +++ b/dev_scripts/gba_gfx/delete_files_of_same_name.py @@ -0,0 +1,21 @@ +import glob +import re +import json +import os +import subprocess + +# THIS IS A TEMPORARY SCRIPT MADE TO DELETE FILES WITH THE "footprint.png" NAME +# FROM THE "graphics/pokemon_old" folder, AS MOST OF THEM ALREADY EXISTED IN "graphics/pokemon". +# +# I'M SAVING IT HERE IN CASE IT'S NEEDED SOMEWHERE IN THE FUTURE, THOUGH TWEAKING MIGHT BE NEEDED. +# - AsparagusEduardo + +def rename_files(dir, filename): + for root, dirs, files in os.walk(dir): + for name in files: + if name.endswith(filename): + fullName = os.path.join(root, name) + print(fullName + " deleted.") + os.remove(fullName) + +rename_files("graphics/pokemon_old", 'footprint.png') diff --git a/dev_scripts/gba_gfx/rename_files_of_same_name.py b/dev_scripts/gba_gfx/rename_files_of_same_name.py new file mode 100644 index 0000000000..cbee489de0 --- /dev/null +++ b/dev_scripts/gba_gfx/rename_files_of_same_name.py @@ -0,0 +1,22 @@ +import glob +import re +import json +import os +import subprocess + +def rename_files(dirOld, dirNew, old, new): + for root, dirs, files in os.walk(dirOld): + for name in files: + if name.endswith(old): + originalName = os.path.join(root, name) + newName = originalName.replace(old, new) + newName = newName.replace(dirOld, dirNew) + print(originalName + " -> " + newName) + os.rename(originalName, newName) + +rename_files("graphics/pokemon_old", "graphics/pokemon", 'anim_front.png', "anim_front_gba.png") +rename_files("graphics/pokemon_old", "graphics/pokemon", 'normal.pal', "normal_gba.pal") +rename_files("graphics/pokemon_old", "graphics/pokemon", 'shiny.pal', "shiny_gba.pal") +rename_files("graphics/pokemon_old", "graphics/pokemon", 'back.png', "back_gba.png") +rename_files("graphics/pokemon_old", "graphics/pokemon", 'icon.png', "icon_gba.png") +rename_files("graphics/pokemon_old", "graphics/pokemon", 'footprint.png', "footprint_gba.png") diff --git a/graphics/pokemon/abra/anim_front_gba.png b/graphics/pokemon/abra/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ee466f539acff33a65ccfb709415cf9876fc817d GIT binary patch literal 698 zcmV;r0!96aP)!0RR60|NsAc|L!T(v;d1@01yxm?q=0p00001 zbW%=J06^y0W&i*JI7vi7R9J=WmN9SJFcgHjB||O!IvL%%DNE5Yo`Phl?Zwa!lIJWw zQe!)aq_-9bWofeqN-X6%vMiHnrvL%;>_GrO@ExCy&=E4$hpdTseJDKuN+NbU66Dei z1R6yODpckJvQ3(5fG8gcD zde45Ec^o~FfV#Gr$E!Rsi#UEFA+|2y?y!u$9PV3S=9xBgXtqgPLvT$6On`om(8|g)u2RPA z&C*t@Rs#{n0=3$(4249gtgFoBAwtg4NWh4!L76*TS92Jtm~3R2@9YM{F<2mPDqR~{ zg}kx0y0Sx1$-O%)$okR7UnD~pdQzs0ng>^0H^2s zW&Q<>HP%?KHRgv?i}%eBH#3)pbAGtVrK?SsAIt;XGEVuyG&A=}yZo@9xi{$Y!@>h} z`C;Yy^pjqGSb2usgR`FkHJvHAU_yA_$ZC} gp{p@JjP*bD2YY$h5silS`~Uy|07*qoM6N<$g4&Nl?f?J) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/abra/back_gba.png b/graphics/pokemon/abra/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5035bde913a4173961e81bd21ae4d9a69952f2d8 GIT binary patch literal 616 zcmV-u0+;=XP)!0RR60|NsAc|L!T(v;d1@01yxm?q=0p00001 zbW%=J06^y0W&i*I=1D|BR7i>Kle=!)KoCV$328)r9RrtcvJs#JE>}$+O&Asd_%~^G zYB!vZLRCo#j#4MoAmN3wZFrXAfE|BVH9~ePt0cITp z$_C)`05ctRHdUa_5-AEk8q5R05)MS?0c7wTOux;DpTd|xk?~&uItUDQzCoad2Eeyv zqX*`Y+19&_ew$e$c8~hE>|Z}FM@la+K+ytr-}_r7 znZ=j3J1MUs?(M^pszu37ckj$R>YZLR)AMSlu=UNh1b}OMZ}!-Fz50Q5i&n0Lkq5*i z-kNnuR1>c&Thj_P+AKKs zR_;3Wdh71LCLf4-hMTVnDV$@k}(d$APhx00o<}HW3B)bD_-!`Si4ZB1Wzt%8gMdK zmD<1YWU!H+Qa_$jFMyC)KTZH5p#a81^b!z3boG1%TaZ^0G#6AEfSq%p>NE-#c44i0 zKD%1xo4w~zf!o5&e)M797TZJ{@`P){JOPA&2oo3x4Cp1O22znm%}+O|+p%AdKp(PXw98U^-7n4^-6W Z@&q*zq6#4RJCy(c002ovPDHLkV1gM&hSC54 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/abra/normal_gba.pal b/graphics/pokemon/abra/normal_gba.pal new file mode 100644 index 0000000000..b688ea0bc0 --- /dev/null +++ b/graphics/pokemon/abra/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +246 246 246 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +213 180 82 +172 131 41 +148 106 16 +98 49 0 +255 0 255 +255 0 255 +255 255 123 +255 238 41 +213 180 0 +139 98 0 +16 16 16 diff --git a/graphics/pokemon/abra/shiny_gba.pal b/graphics/pokemon/abra/shiny_gba.pal new file mode 100644 index 0000000000..4122603ff4 --- /dev/null +++ b/graphics/pokemon/abra/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +246 246 246 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +205 180 180 +172 148 148 +148 115 123 +106 49 123 +255 0 255 +255 0 255 +255 255 222 +255 255 115 +246 180 41 +164 82 0 +16 16 16 diff --git a/graphics/pokemon/absol/anim_front_gba.png b/graphics/pokemon/absol/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5b459aef06fd1e216aae1e1b8c568ec719854eb6 GIT binary patch literal 1339 zcmV-B1;qM^P)tgOw0gRELwgDE*Vl%%9{gM(6HVgLXDTjD$B00001 zbW%=J06^y0W&i*Lxk*GpR9Jd9 zi#hJ!hK9KTVWl}XR9*E51_~qXA;qMGTc^oBJAsl9Q)!z6U;gF!+3ykm5c)rt7KY)j zaX#mqx0~wmKIe-td`|p!_xgF{jCjvW-BjprKJGhx-phu4+=Li9qnvT{xDK)JIE%c* z3eIF5pr4*U2JYf_XPh^V3d7rVin#$0nny`IIydn8C;h`s16?+W0GOdcNQI_}7#KQD zv`2^_nrXn5IYJ6o0?_G23K*?{J#sLUA-r6GEn4Kakqlub0X~O2G{*Q9sSAM6%k6QE z@i}Cr@gDz3=A2~a0Dud?LqV&|A0uFrNI?P!?JZhWKGkVeuhPG_fS%2{EW#dnrkCF- zT$N;&*yaQIVRqDl(U4ZFsby$ftaGnH4hJpT{&$v+fRHT!v5Wuw)n;Ex5N47DG+7>N zR&pNM;8y{p3a@eT+90LjcQ$g^ECUo)*J2Sh((SWhe>6+(q)1=h!e{4);}^!3a!)o4++4JR#7%Yy~>bf zy`J5NfFA3HoC|i<^OG9^Qyd}x(vW~IwjFN)xG4Y+^#J%RW=fY5yZD?Gp?5>W;1Xyg z6F`eq6=p!)v2iNORjJ>n0Ke8SJPDkM$*7qEFtsf4?81R@3V=@U_A`J?%I0O=!Vp-%3}}~`nImNja4mb-dsYJh zob7za3`mp>E6%p}U)r0%uG}PW_ZD#TUZC?{KywCf0dFj`(|;$RIiuY`r@yleP@A#1 z&vJE;yKoXkK)w!k8OVbK@^lbMxfsb5a&<5YAr(QPg96}k289laIV7Oc!3b!obx>S3 z07@N{fV)cvV?eEgB8TQK9h3s$71TN?1fq5wsC6(Bh(N7_^5E1@)H)a)-iJyZjF10A zr4FuvC!)~7jX)F?I=B&tqDlwX0zs5I7zspCt%Fh^&Ufgb6o@CP(7}yB6cswS7KmO^ zrGv3RbV91o!B`+V%gcNn+z3QPEW^m^pkKR|Uze4u5&$81)IlNzKhgtG2dK7`JQ;NS=|u8wo1kRfTzZ!07j~d zBv#wHxb}x7@d{DTQxi9~r-=RGiA**C8YkPn83EGNr1he_>xrD9a|zu4o;MD68xxTv zt=E-+cO?Rh=eYp%jB)k=ve?V_2V92e72lw&mG2K)i=KR~EUHZ94?hRAb7S7VTqyhj xvxV6mm^@JV1Lp7mABTab@&_DBZNN!?_zy*c&bfxw{4D?g002ovPDHLkV1h-WX*B=< literal 0 HcmV?d00001 diff --git a/graphics/pokemon/absol/back_gba.png b/graphics/pokemon/absol/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..876ba48aa0ebd6c4e239e19fdf727f53aad7b1e3 GIT binary patch literal 673 zcmV;S0$%-zP)tgOw0gRELwgDE*Vl%%9{gM(6HVgLXDTjD$B00001 zbW%=J06^y0W&i*JA4x<(R7i=5gFZ)I zDSdz{FQDG$T8>j`OT`pXH^X8NFAgk{rG}zF&-#D*&y{u*{cj<}&!8Sx{636`o&yr} z5S;Uya2ex7!K;TL5w~R-Zst&ypRR+%u`EA^lWfcK%imj!REm@)IxzfV)LJ8GwZsxRX*! z2uhMS064Rpf;kMB9s)5&3p2+IfZelhZ*{vK}9AvJ=_CSaiOOuLoTbg zGqC*0fDpljHODCWrA`g2BFS1XY!5P5rAm3q;>Q#Axs9Pf#p#lc=ogyZ$)2y!l4AkVZ zt91!@xpDOd5wV6oB!ZUDU0p8%kPd*<2BwXEQ2=CK;9tjYr1LwK_qci|00000NkvXX Hu0mjfLo*i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H@kvBMR5*>@l0lAxFbqXA7a-yUk<1>e_y8QCyKd*|Q1+0d`?$1? z<7U*VvmA{#F;731MV>K#xxRe;ZJjjyID_YV#0H-OOyjK$PHqsjTn<|Un{y?wx63ej-NXCl66@b+HD5yJf7DxHOnyue#<0tQER6Ud!W4r< zm>TTD*ja!Gvt=uPFARMYrh5VpVQN1rVQfd|RQoZmKm717{LqOxWa@hF#}%gNp5+;e ROgaDn002ovPDHLkV1n~-p_u>x literal 0 HcmV?d00001 diff --git a/graphics/pokemon/absol/normal_gba.pal b/graphics/pokemon/absol/normal_gba.pal new file mode 100644 index 0000000000..9900389176 --- /dev/null +++ b/graphics/pokemon/absol/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +123 156 180 +255 255 255 +222 222 238 +197 197 213 +148 148 172 +255 123 115 +205 41 32 +123 41 49 +172 172 205 +131 131 172 +90 90 131 +41 57 57 +148 164 164 +115 131 131 +82 98 98 +0 0 0 diff --git a/graphics/pokemon/absol/shiny_gba.pal b/graphics/pokemon/absol/shiny_gba.pal new file mode 100644 index 0000000000..4b86195a7c --- /dev/null +++ b/graphics/pokemon/absol/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +123 156 180 +255 255 255 +238 222 230 +222 189 213 +197 156 189 +49 180 255 +0 115 189 +123 41 49 +172 172 205 +131 131 172 +90 90 131 +41 57 57 +205 115 98 +172 82 65 +131 41 24 +0 0 0 diff --git a/graphics/pokemon/aerodactyl/anim_front_gba.png b/graphics/pokemon/aerodactyl/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5ea3378a3060440ea1cbba4fa81f7e31d465cf GIT binary patch literal 1464 zcmV;p1xNacP)&DGwNth6ywTL1t5xq%4W00001 zbW%=J06^y0W&i*MHc3Q5R9J=Wn8A+QHV}q&TfnIKROusl1N5|)YJnhK>>=sC!uAc4 z01bR-wuoZ6_gc-hfIVdQ)B-d~=#&&P$zI#TBAp>6S(2sp1;PYaujk`GBXY=JNy5DM zW%3`x0sx;taIQ;8!6D*L!pv)}Ws=;a=@lYiJo8Bh^G=&ABk7xSLc9Wxf0oT`uVwZj zO~Y@`kw{bT?N&E{1y|kSmlxr;vqd1Tlr%NKEJ&QbIIq(^55$$uji`aGyi31cEG}Ch z5Si9)8#8R3S>U*?fiwJ!z>};6gwbyni^oX^APFb)8o*CofO3$8Th3w)mfwAaz{M%h zETX(4(d!ndbLg@GGy%s90a&D0GU)*q{|8(Tfp5$a_^@b~@d&gvM&R)Ypj#kuBMRro zhls$%5V#5@#FlZ!cWaCb<-$YQG6L$&vI9JO^yT?gEWwHZIQXFhoZZ|!dt`a|W)39b zVf&~9e4D11&nyq(3{ZkOkT;#3xFNzT83A5pcn>Q;LlMoxSRGUx@Du;oYw~eG1zR$o0!tx-W3p0RH8nym#BT-`#$1 z`U0B*4uyia3HhHdZe1TZ6j*_XajngZ7q<`n67~q_x=#@J`}X#D#$pBlyaQ_iRJipI zJz!pdc+XTVp#S>k^>2LzOBGmN3usqmZ~M!Dfc2XuuInqj2cW>F4r8o}S9lk&*1{1u z83-taaTkE)2p~fJa+c#WR;Te~j)1N(FDB2&6d37KSsunyU=iF9V6hcPYQ*yl+L!=V z*_Z$xcx|<(yCY;!P{~seYWNUKqkzr!a~}$M_V%S zqH70wh?6r*gvF)8`^Si371c7Ct?^l8Uaj#8)KCtIKxJ9Bu0M=D?C0@$j152dc{1vb zWokJE#Ex|^1w?DcGc=W=wdQFcTJuzf)|w}Q#+oOA#+s+%tu;>r(VE9@ySj#G&EqBD z`up0N%dx#+P_Ch|=0h33>j7$u7k{v3fK}Ou9*5JmwPv2b4|94?Ag>?vDbZ;w0zNgTdP3E-cJh&Wh0p`OlTC`>~7D?8^ zyPN9JyQ#WdZF9O&=~`7vwOir}^lqHNX?CvHj0nzKcR*7_@5br`Nz-M@EGg*PKgs>k zyU|XzWXTd(e!=gl%(6xbDb6nKRShT%fuN;;>TwzFj2f>w5i&MygC zYg_5|MMjZzTdYaJrqblk&DGwNth6ywTL1t5xq%4W00001 zbW%=J06^y0W&i*I*hxe|R7i>KlQD1OFbst~8?gTWRCqSxbU)>KdrAhK6Op~ywVe4< z^m3$Rw~nm9z|G|l$KvNl@kuO-@A!|Xey;%TX$9z?S0v1uL`iEB9uD`DEFZTH?@Cm= zLoJ(t<2}Lvaa|H1cg;4e3@=H262d!#cWYIp`t>)FAfn^o0O<6ylh@Prnp7)=U;@C8 z-qz-1Z7NZ;LMU*3Xj$@>Y(_##!0Vq2Sq)A*@)OY77(bSPDK`eD|H_{i0i2bW1A$M zh(Aq}%LlJ}Air?%761qA^N0dI^f+AdC3++ut?Dj0z(@-m&BV@RfJ*HhqQ?GQF9GR5 zV+d9rw%H0HuNM#ST&Eg+0Jv$%YcJ>RB^A&LEN3LYvJZT`1!SsJKxG@Re&K7K9ZX zsF}C7SL?)|uY1alm=qd2~SI5pxzWN1!;9K#M`p*z9EzT)aoQJ(M7a oh&aw;rp89s-88e9ZR0zNe=m0afa+ubi~s-t07*qoM6N<$g7Uc$;{X5v literal 0 HcmV?d00001 diff --git a/graphics/pokemon/aerodactyl/icon_gba.png b/graphics/pokemon/aerodactyl/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f90e269b07e675464a77abd0376aa80699761c7f GIT binary patch literal 369 zcmV-%0gnEOP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H?@2^KR5*?0lCcf~Aq<9zgChhU073^xiH~&4J@?_@NRAG!SP#l6 ziIbDD!v(%;%kY0f{9>sQ;5sxw_}o$G|GI;+(h-Zw4HO6%3Sf4;3k(8y3_O880D#-y zP)HykAfmlZ(PpFdQh~h9RwjQ=3`C@p zv{obrGSO$@+uzpcLm7O)oF^X}si5kR4TGiwrJveX(qT%8((iSg&+qA&CUP+|ExJm-fC+9gM(_l{{R30T)@xq00001 zbW%=J06^y0W&i*OJ4r-AR9J<*mqBkE#}&s(6%cciW|ok+8=%Y#2^7hN*c~3)T#V%| zkYm0=dRaTZ)Vh?GdQj;W_AnQMX<>2L1EI9A#JLzf%a`=5&tiLNA(3pL)BmhUahIZe z3OW!3i0{WYZ{Ey%@2^tnmtC92n2(v01FhBDyY1Gj)&ZYLDgRvBd}z&Uf$y}|Q$UH^ ztE~mfJ8BGO^wh1V>gYwXW_z-4o%g;4Fx2{wYmm+R7EsvYF?{JHzfbpiCHo`Sx^XR# z4`dSos*!xAhl#Zh`x<}M^WKvLpU4AXSVy(Kl6$M!Op*rxEOAtm@)@ah@!?kCxSRK_ z{b+Aj$~~f#?mj9tzb-hbSo`ZYPdLxAsZYA`y#jCm`>+3d*>@G^62!P!1S;6SJ}^?b zYGO<(6_2Ar41J~ca2Zdys|a_5N#i0=!TE{Q-+y@JDhhzK$tNGqe^iPx z;lm!~flri5@fJS3I{%LvaweP@0MBi4piD(i>SyOax&Rzeg+0gtmFWb#O#XCs?oAaX z*$%?c(RL2Vm_&7{~F8z`-%w zCfrDx+5L9M5pDtaV#pZwC#+!sB&y?(Jh0J$(H*ilYPaFQraJWVLAJj<=9DOc6i1Qo z9ND`dDqRB2-)Tyj1>)GJUe5ycL$$pG0>S}&Z#Qo^o)Nf=dzWgNY$u=@fXy3`bI+f) zL#NKvu)av9^Tn|R(y-lW$4%j%8gDXV{b76Y^vj=*aSD~j1U>+~q~3t@+K|Kx7xfwA z?u5k-oWHEsMwSFh<45!7KyXO~F|Ze~`{RlGJx>nS1VLjZVCD9@Sw97RWnAp}29mGsqfcdQ>Kf4Gy7Pk-On&-IJDiHG`ulHZQ?9a;x6MgJrRO6s-5 zW|AaYPt27Xqa%>kTR>#=kT4*s9o7-|V@3lx~;GB#R9$pmtKI@jQUWS|ZtKwL=9> z_Z`vt_{RRLNKmU62DTRNG7BV`F^DcJB`ncgoKBk$2AW?Evp|yrZDP2>WugVD(L1A80wjR z;Kn)tg4&E&J+Cn4`eA^PY=f}n9~30YTtCRS*<}CuFL&vOc?bT#>WBXUn*Mg*{%FD^ P00000NkvXXu0mjfsEWqM literal 0 HcmV?d00001 diff --git a/graphics/pokemon/aggron/back_gba.png b/graphics/pokemon/aggron/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..24ade1ff437757c655ed57b055a4c3e9267f7ff2 GIT binary patch literal 860 zcmV-i1Ec(jP)&CUP+|ExJm-fC+9gM(_l{{R30T)@xq00001 zbW%=J06^y0W&i*J+DSw~R7i>Klrc{mF&Ku;(xg-3FmO=^bY>_UBF@&Ks>t5Iz*Nyr z+;k)hf=Z1qOB9wn--1|Z&r8MHPM!NJ_yZ*g1ImK?+UAH4N`F9A>y$+IKKFj#_u3ai z{;x;t**mPi==EF`QhwTf5*R5ZrBq*@BI;I``IE$RtHVN_{~7q;^wS%qoW(GXBOiD# zL;^tTzKmmGt<+Z^*rPN6v98+_rz&+g^#O_%NIB7M*|&14t34Qi!h-f?+cZ;soRC^S zbrx7Dt_P2k+Ca(3S)hzOyouv#>;n^XR9et;VP^6YLyRCy5#hqx6GQD+8CgIIc(iTa z=M@F?}5mvSoi{fHESb`(jt~l#U>!&DOq1gIXhfP^|_p(kav135EDvBV_oL^jYT=? zK$SXUFGYUV1R+tsv2df_8$>O}LLp!MAY?_G1{;ghG9`0J=$N(uBxgTiLF{pAOqUf9 z;FyIic97)XFVF^AX?iK)aZENw1#~H2TzqR1+I>?3E06=>02bOjCS6b_h~F=w39p3#>EI4#1p5K;!6bEA6(HI+Gl zbEk8odj|D8V2-<1<6X|Tz4y+vkb$}8{2JZuSQG!f1c0MzDsW8a0IvXoq6awZWd&1$ zcPcM-4To_p88Z~-U90m>(+38oN6Od+pKoxt*p_clWOp%kN}y8#>Sauf&6$z6;pPK2 z=tLY@fNga2OwS$zSvJOVAs~$p-SV3p**6wFP`1U)g)P(Gn06-+18!4jsIvNC2xT2i mkBrVupW7Jo!9U=?zkUOmPr!v)Il!X;0000DV$@(lKttAP_)NPOxZ5w}p`>T?(T$eR77)5mV+=#s?S{ z+r zUA#4Oq2bhSp#h(@*af%tg+e`)Sn<-o!DFF+j6y9ss!uXbQ+)Tdl>UI;kRk8Gy?5`P z?)x<%|K8FAJYGHRVbM!cl^F0YoKzJCjKT>SCkPO$62Oi7v3!LSQpyhqKwJR&_OKq@ z10b~KsGdgOa6qaq0LluuDw^Rn%qH$ws<+rV$xQWw76y<{Nzg#TaG%8CNRH8HLP&rB z-BE-BRoMl=!vN@lLrZ`P%R7PqejP3~vg|SqqZELtwc)Y)*a9FHN}IQEGr<9H_=&bu zL5Qf)WP_hvTPJUW(f$GjJgQhLyR58?lu1_5k9gaM$m zPROy(761f>3#m{_6LGxD(xBl`+Fl2kM*~`WKzSqa;m@#Ji8>+7}*H}CVK?#uO4kj2^F z&d#=cUVk)f$_qm?HyV3e82~po!)9pw{?g|8ri2}ChPK=Al$Lo7^}uwQumbf(>-V2k zD-*(WThNL(^Z9&yk)$HvhGW1MJ+1X?C@`~CA(T=@{>)MZ5!T3U7W@T*sVD0lCIxd>Rg1RK{a9a8Vg|BVZy7=#$v?9vACUMu@n< zqy0=uECF#(;rqbs%2f_%2GXDPGGf3E(VfKk}+=MFc3vmNOkTYXD^_k>J3b?mH{q-q;lunAk+zB zI*r>njZ+40_G$tW#O}B=l#N|+l(-1C%P&Nj|M|~w$SnKT|IyVMKUe1f(R~fb3(*vx z)t0|RV@5NkWhA8d0LaU7Li>dPJ=#TH0{o;x24oMY*|5R{Ky+$a(yGa?ehdKsP*!3g zBnCaQQa9_27pAs0{IjnY&GG4G8H9MKw{(fLl3lj55g-dkzqxmAJqBcNJ#bhsAituoHe`qJ&VlJA66)0c`>kt#CqQ}G zA5bVg4}0ex*iDr5;sGo+I^SbJGKYdLSQx06EjGG${!J$lR${t=YwS)1te{eWrW8!Q zL@zwKcCF@Y2G$lpz}h)%A#~Y}O}hu&-NLmm=zBIy3AIOJvAA`Q+nsl-X9mEv?}4aQ zS_7YDee;Mwv|G;r9ENHR?k)y+zuKh0MZBuz@&B96mYo!bsOLTceiH(JR2THt4iw?H efw|xMTz>#a8RFWBBrz2L0000DV$@l1*yEFc3y{0{Je z6|_uHnVM#0Vwiraeyn8IMHlTX1oM~~3C$DYPX|Bb#cAXRzyr=Pff<0sty@4h4+HBA z%zfYA0626NTL)Cfs`jL~s@Dy`QB8FO>+9Q|n_UyYRy_fXlRAbWpRT17ld9v(RvV2Q zrlyJ)e=r;H(nN4MytgDI#av!grLB=|DxmU(sHFrXA%xXw1W;qL5iahMe-*!~Lz)qE zSU}Jr2j4nmEnbJ^AwdVhu_)+(6~`**fKAypTIY1oSU#ybC<7e`;JG?`AfbaLYv^1V tUr<5^4LhXIQ2`yu!0RR60|NsAc|L!T(v;d1@01yxmAK;Va00001 zbW%=J06^y0W&i*Mg-Jv~R9J=Wm(OeCMij>dHB^_#B=nq;ANSHE(4MyWVYUnHQfN2n zf1vE8?QNx-e5m7rI_p2k-a}!bhP-jwn_)GQmtF#v#)cN#2P@Mzl5CG;Ik~pbfe>%r zXJ_8LH}Ac#HSJ%yHu{eM?&y&Xpb+qu8_+_)of8JoLLW9DB?9n@?D!vnr@#GT-&~-4 zgYy9B8Xy4X4S>N~zyLOAwc#PaYqeSr09r6e0Jau*7Xy@eYeH>63w@xBvHm*XMxGEd zRvalAB7hc0fEAx%ur}QAO|<8nC>^Ix{t-a;lWnvMLNdU<(T`8)ehghM?ba((B}#{b zH$2G}bYr_^nr2lYINlBk9(COi?GA2WnvMblGJJSS*+XDBapVq`0&GAR0d)N8HH1Ae zu`OJ-auLiDbVE!4Au>wDs#{i5sQ0IVG>o)H4`_4BCQZ_e)P$80xMNJ{l)&}ay!LG& z?lUi21l@zm^Kqj?0y;J$Iw6i0^wdLU-oe(9*|_ZqVO}~g!7Gs3g%XL#JK5ZO+PK9( z)h!2ni;(kk(^kBgB>;ZZg@BG-L;Ix~s@cg_3g8|ydS#;BYO287-6N|ZuU4t(QHNZi zT@96Hj4IEFtfoW9b?60pWDR}z& zxk;*c<;bfX(Yh^G5dHkpmbVN2QiWYz+Rh4)#?QbjklLkH09ej+wAjtM&!3@NPUO!4 z%x1XK2kOqUZkrPaYaoBsh%S1A;oq(TTgs%D_rit+5N71PeTates7tf((X_k?Q!PScUMs2szt~0hBkK^S+k!vm7we(&jGd0Pj4`+Y$)oKwQ+PJNqesMeP9s*sfc#%1K-} z+nocl&WBi10gV*~a}$;GcM?5Z*9b&Yc}X|kpCv6oKb+sV#0ONCu=J(q%u)*=Pw4>M13BRe81^kK{LrN6PncGEoX|hG_2j)$y8qQqYfO{+! zIqt3Oaw%Yb`VBV!u{Di{dTmq;+nnEytdSNc6tKJ-&qyZSV1hC0S(B6eA#zIWAlozO85U?<8VHPkjUmcm_ z7_ghZW^^u8jS>PR-x)Baj@675Y z>2d`ipcnbYMqGT@25ZQ?b=?T-asbe!Ucb8p{RQ!r0z z7cXPaIoI^MoflFuV3DOdSW!|adKH0I``&U^9M!F8F`4x->We&K2zNQG#j1ReDO)O# zS;3c`fvOm0sa($hs(zTk4dlM6Wc5P?H*MEDR)MU3C^Oz=86c-0%HB>G{kg9IdHo;` tw#9HW=ccM3v{4x!S`Nsp@_$Gl`~yHvB?$gtwq^hT002ovPDHLkV1leX*OUMN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/alakazam/back_gba.png b/graphics/pokemon/alakazam/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..aad3363af2846f599fad26632b3f77942d659518 GIT binary patch literal 864 zcmV-m1E2hfP)!0RR60|NsAc|L!T(v;d1@01yxmAK;Va00001 zbW%=J06^y0W&i*J-bqA3R7i={l)rDHO1!vhta zVsB*0iw7hBLC+#f6-DxyY;6X=z|XH5%`p00!0Rk(f7Xwc~@t5sEc-g3mRIV?8Cu+2M)HA>xO6?M3~SmVYh= zpXjJ~;bnq1Cv}R~IuMG%lvQ{igEawf2$<^@aVW$EZ}nqbBYr1B7htT4LZEM2G2S5l zXq>#=6JRVs5#Yj-NJXxPX(`Vthyt%yQh8iqInTI<6xReKbe4dM3s$5EE>#h;Ql5ip zQU??tqiH$Mc*``+_Y$*+rsV=v9xRzjU?|EC?s*fS-OnY2*sqb_tN?8L0SLvVo}VJ7 zZQHh;orf+_6@cjl0lgd`4^84;L>&b+fD~zR>{Y-Ey#80=9EPsHH;RM9&X=5xeowP z9(>DBDOM=Isc98zBz4M@h}wzN!&L1>^jKvDfHc~tkgeUSgYymjLv=tcwOU&WH;l&B zFH@A`0$@>}J0KV^L(0jBl>xHwmrh9a&r+i}D1L5c7T}~{B>`=8Qh1+Y@zZRz6yQ@Y z_u-ILBmK6Gh1pbpJ(?zXNkB!$cTAUPDFs_i%Tp7WMB_aGNFfujvJoZmd>>FvDxj-? z-*V3(2lyi}IsmkHfZUV-o{e#t19!48=7(95fV12-fg>sRzc7ZHva_@S)^Qvk0GRrG q_$zvBq9{59EESN_<0*xII{pBFcyAvx90>>j0000DV$*(lKttAP@!6IRSHxRM{Ks-iFp)T&9btLTegxHKa7_ z1|wS{(0Bq-z>r*EGX;XL(P)Gozyp^x`NX3J%WRM^${H}G;}j=%21`_GIvW61rIc`e zFbisem;>qBV7?2{3_GvCrCD5PT;dU8c$`E=ZW@Ye02?7D*cG12BxH)DG270fHxkVVDEtvWv&rj*ThT6ic zP3Qf3g|3)2@Zak}z$6Ymn9QLAlQ{HX5{DiP>I{Z+7b*uy*b2%VU~L3_bKtF@v|D=QeVnKr-2&~orbF}Vai^V}|obLAj-rnx4w8beoS^xk5Q1sQ+00001 zbW%=J06^y0W&i*L{YgYYR9J=0m(OeCMij?~-fV2;UkK`P8w#uA+Wm7vDU==)_S92% zoI4i!QHvvG;krFlp?Lty2K=d2G%mwfSRDd{8m*R2XN&tyx2Pi-vVnA5&d}E-8`PN7H z=t@^9Br7Iij01+i_6nc^0i_UqD^kGEz%<(w(r%>CPk{4htm@{Y0O78)R+yUMvVd%q15${&#IOJmp+u;#oC5?*Gf`-g93Wu{!dc)#E|c6W z5ReftTGqaaxPqLAHA>$tZWhpQ?Y}^;p$K=L?>|oRv(_1mxG`UXutK6xU1tbb4HzIO z4EDnzYWr`>URq%^AicNWz!8{9z6!hHtQjGD8#d>CDO39wp1Uu{5%2|Vx1ToTh@@lM zA)i``8NuH8QI3KjNC8HNd}5Ln$deh{F-YLc<#QE?5wv%S0j`goL3=YV0FOYtL6iv1=fRXCPd1==@bYimQBoeg&exV9zj>jajzr_A)@;3yqM)Qdy z$6;Qxf2e1pbAtq2EKU`m**})-g%VBWJ4!&ae;EU<+XT?@z~*$dt3Dsx%NP}e_YmVd!XAt zsT8yay8RoT-X6pah-UwPw*H>C2U2p`M}cK+N33h@!GPO*Ki3{icMjtAz^1mnf$f3r z|5L`97qtg__A~n_v|D=QeVnKr-2&~orbF}Vai^V}|obLAj-rnx4w8beoS^xk5Q1sQ+00001 zbW%=J06^y0W&i*JD@jB_R7i>4ls#|TFc5~hMu_zr3QrBvO`{F;XUSbV)KpQZMVDAc zAZM$sp+i=xK;Voz0YNjhunKLpj6%qmj}ASas4tpE_uL?ud>`JuccRSLGmI#T^sS<^ z6RkMs^NT)U7xf`a${5}r5fBp1IDcQ3O9QbA5Q*^Y*Bny#Kn|1Z+8(kpAeK6R_oUN-yNeHz$zuqImb%(a+p4*MX1s zxlwO{-MZfT-PIf59A14_TXy%pvij>v#3j67hOlM?d_Z7m(wP;g3gXhJV+|y{;4_#D zU=#sGX)ZuDWQ2EzbY>H9SeGXL0~7`TptE?8K;GAdfCkEbNnp{{j|B!nQg>eO0ZF9` zamCocsen*VK=F+Yvh3E;T^wZ&krJ?gh8SHt4pcx)kDsW| ze1Mxlc2fgR(gD`=ulWbkjfl~=H10G-s0Q5`|8I(?VgxptF5rY$L_)0(Km!1NRQGbx z0i3$gM8q+yUlI^JNk?pRElrLamq`L?I^_KAaHs$nlS^nb03;{gsSq3G@)^WGVx-t{ Tssx1?00000NkvXXu0mjfgKIU2 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/altaria/icon_gba.png b/graphics/pokemon/altaria/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..300dfec82c29b14b23c949639a0372ed51d00d46 GIT binary patch literal 419 zcmV;U0bKrxP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IAxT6*R5*>@(y?lUFc=5$JVAU1yB3A}FAh>4u1f^bwS{sI(<~kY z?-hz&GL(3jB?UPf(lY=6 N002ovPDHLkV1gAvz;FNn literal 0 HcmV?d00001 diff --git a/graphics/pokemon/altaria/normal_gba.pal b/graphics/pokemon/altaria/normal_gba.pal new file mode 100644 index 0000000000..d7af0b531e --- /dev/null +++ b/graphics/pokemon/altaria/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 139 +255 255 255 +131 131 148 +197 197 213 +255 164 131 +255 98 65 +131 32 8 +172 213 255 +115 180 238 +98 139 197 +65 106 156 +238 246 255 +222 222 238 +172 180 197 +41 57 90 +0 0 0 diff --git a/graphics/pokemon/altaria/shiny_gba.pal b/graphics/pokemon/altaria/shiny_gba.pal new file mode 100644 index 0000000000..0ebea146ae --- /dev/null +++ b/graphics/pokemon/altaria/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 139 +255 255 255 +131 131 148 +197 197 213 +255 164 131 +255 98 65 +131 32 8 +255 238 131 +255 205 98 +222 172 65 +156 106 0 +238 246 255 +222 222 238 +172 180 197 +123 74 0 +0 0 0 diff --git a/graphics/pokemon/ampharos/anim_front_gba.png b/graphics/pokemon/ampharos/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cf05584119a639a26425e0e0f445fe4deb7eeeb3 GIT binary patch literal 1303 zcmV+y1?c*TP)Ww;M(R^C zlmo~Zzn;$snfR{42zPYn>=hx=SY;^o^fwmK+u)5tngoOzOm&Wk033yh2vrim$N}@0 z8Q>H=Y|kvjwJLBh#vy2VM zhjSw)yV+>I{X6qvjZ*3&zt6J4&@%ckrEou<9On`u`ysF+_~|urDyA6#i#TfiQTAI} zDK;9YXk|VQivXG)jp!;TaH|Bc0fcNxV55{D9)Hq$7}`ppS{0Gk!@I(UlOph-3ItCt z+Um#v{1||$#{v5f@yiWiAbvnjfe?*t%HG%y?$ zuqEEowVm=g5`J!(qEh3ie2#@1-2@m*Zos?yD?p+E;reqp@BSbPQ3{afU66w&JcKQC z0+R*@x;{LmZOc@cWWs?*pdgUC>5&Eyy&jwfwk_#t&A{C?cfI7_Tn{ zfI^}>Lba~|d_oiJ{reAPK!xaOCgP93k(^^5#`JgT@OV(8<$B8jhg9}{nJXf7L;qj6 zFer69yylhre(T1SZgeWenqSDI&gQ?vY(3pm08bjfTwGoe_sOmTSaZKT2cYq&*tix_ zVf6LPBs)xLXh`n7f{J5f#W`9_W~ZyT0ikyVV5sxSOf@Khd#8ll9$f>t05nE4Py$}E zLR=5%Mq5_$iL8k^6RXPx^So&u2LR@i_KZ%N78?4N9h(?NwK}Jo}6NR0LiOpBYx`wiwJX+!F=b(>&liV))l# z6H45h4)gh=eU{92CrXohTI|=!^oJ{wQGsa@NTz>{ZwKPaQlTvXU3j4#+r>IsUjm>4 zPoD+F9ADpGZXkB#4_H_*VXONNqIFy0eY3L8kdS>R979fz+6 z!#!vua!Lax{NC8*~+mr6suz*nM zdcnJh&KC@yuQ1YH<2Q-nGB&nt=?24hd`st-M|LUFsc22z6`-o!nM436R$KvYq(x~_ zsfv4BhsFXZ|8D^DdG|0;9qjFYDD@&r|E1LSx*y1`TnHO{dp+>)$vP~feL9#($DS%sIIpZ(!vP# zjsQEFeFooj3L-Wa%MlrrzUe;UYYF5rxM>GMETEJz0GI`iTp)#K1b4s~M)1oypcXIT zqj8TI#^t{mfU!{TE&)pe;j71(1@XTFcVz^YETbC)0Kp6pt%LxV@e~S#T!La2xDiR8 zg4B3_0K_sq(*rP{uV1&9!1^L!;1+KI7QF!MPgy)up&p2rdh;5{1gJEyIDS6`3H9`M zYSAnYry@xUvq%KX2(MEC*6;HZAI= zJ~V{@G*MS%CssOW|8z}(Gb0*OsDcSx9VT!iFYILsmG-c9$FBQ95YPgvz*0R)(zR_n z08e&GwCbc#S6%n3kk`c>U#6%Y=?Rc$`G+M(qXUJ7^9_Pf1Bh)0=MpB1Z_Nbk9Dk2- zu*o6L%%GI-s<)m8I5qkaE5UTmeXg7gKnLLJps#A#2Vl6@<{a3400iKTKs=$tao6Jx z0PI6_2C$et5NGzzz)laqD2rYITV;SL#E$A5CO>pm1;Eb)#AsEBvd>qwQw4BKr|+!> wi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IEJ;K`R5*>@lD|#_ArQuSf~D{cw6}2m(`hpoyCo(}y_NR{`n;Ry zwIk+0%W)WP4=~YQX&@ipd<^h2=I;y+%$<<<$uoz%w7L^do{=9^*x%&I-f!{U72#T^ zk4I#u)t_5+T%j+9LxxRw2f8EYsen=;7ETyaC;~X=c!NIZ>2~8G@{EX%XU&T6W)ou+ zIUf6yfSJV-*8c4{<{DRTv>z{f;bpuMV!qMn23HYQD9vD z>W~V#1sIN!?bh}L7#UD6QGkKi66CX^0;0e`b8X7NG(-(Zr_>TO5D`MpgYdERZ}|fs YU&AB9waOlWyZ`_I07*qoM6N<$f|*CY*Z=?k literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ampharos/normal_gba.pal b/graphics/pokemon/ampharos/normal_gba.pal new file mode 100644 index 0000000000..f7fdd3683d --- /dev/null +++ b/graphics/pokemon/ampharos/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 238 74 +255 197 16 +213 148 0 +148 74 0 +255 0 255 +230 230 230 +172 172 172 +98 106 106 +16 16 16 +255 98 0 +197 65 0 +139 32 0 +90 0 0 +255 0 255 diff --git a/graphics/pokemon/ampharos/shiny_gba.pal b/graphics/pokemon/ampharos/shiny_gba.pal new file mode 100644 index 0000000000..f29dc710fc --- /dev/null +++ b/graphics/pokemon/ampharos/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +246 180 213 +213 148 180 +189 115 156 +139 82 106 +255 0 255 +230 230 230 +172 172 172 +98 106 106 +16 16 16 +131 205 246 +65 106 205 +32 65 156 +49 74 139 +255 0 255 diff --git a/graphics/pokemon/anorith/anim_front_gba.png b/graphics/pokemon/anorith/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..17d439d83db4fa43a34ca6680ba90e69387596b6 GIT binary patch literal 1161 zcmV;41a|w0P)hI3Bq8aARWB1*m$B0MlNpLZ(*Bu+1$f z|BY;&I>)PIAeluM^=vVyp&?5_MRNiDa)C@$j+A@?tVrbR9VM&0;|~p;TI3BPr2FvQ zyW{bFzfzR1ks8R~00dryWdkAMDT3@gh)Y`1+c8a||A#4h( z*Rt(~xB}aKOFq4X^%T4IjgY{$e{tROpvx0@1_Q9;ivSz{@I9Y_fLF14eGqrE_SPfr zhZ3KF5LyXXhUb@J0$31_-OUkd1}*$TD6($f;Ep?Ma3J&yv)97dj&Eh%9^o#0X$;`% zH-L&oypSy;1|S&0Lg#?vz|;)7EzEKWRW7{I`Im+_a~wJ~VSzE0o+ffTaMFOeb4yEr zJ5mWez(*y*fOi-AE8HDRt5_yEV)L>J;1w(!A6A0JEr)3n~OdVB?>tyH#)uPt3a zG_6OU)gxzTai)PXH7f83yq*-Gtm!;2di`_CAfG`i=+S+2a+(E{BH%&WPX)F#opJyj zWC7=;sD8zZCy4 zPyD$O=83<0eHQ^);;*OI!(zfTfbmokX)|@z?JiW*>~IuOP>{P27K} z?6_@O41u+?@vf7YqJDd+j0OimpU^65;ba2G`E|H+Y;l88VY-=EiOSr;$6-0>G2vvu zw+b0bz!j74L9y3nnmG;HeUhkB9l7mEB+cG5=-=-qmw|%b(t$98@wtVayTmr2aP2_4 zt=(J6AJmvHh&hm!Cyp}*;tCFg$Q5#n5_2GlGgXf)O3Z=m!At^V2ZC)u{?&J~19>6I zzvMvfF}@Z6bs;zq2=7^nI8YZINI2X9p-R=h5go{0avLNEB5f41Z>Fbl2QtP(k$~yh ze%yhK@t$-h&$Pm0%z-34&bFo%mJS5oa0fDGHc5CK&$Pl}mA^FTCxf!@JM*RpoE;w; zOKqkH+7GL~^xuIQ;2B;MmumPc6w(@nr82a)$bZwYMjC^>TT b-;KWk4Ce0oVsdDS00000NkvXXu0mjfzbYK@ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/anorith/back_gba.png b/graphics/pokemon/anorith/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9c0efc01ed6ac752b15a8395e44f8457d224f6 GIT binary patch literal 445 zcmV;u0Yd(XP)KlCe(1Fcd|zW{KrJQl;<-&Yl4?XXpp?msrCeV5ZD0 zusaFtB!WG$D>V!t;)mZ$3msaC8Rd@e9^YqQIS3XlTJ$FYY|mN7pg(jLPWw#j*8q$$ z07yi{AFJnm&CmrR232eiO>VkgD}5Ecc7^t!P_+tP8Mi2VgZ-_tyGQ#%7b1c7}zK2qTV n?Y!U3fN_4u*-x=((LdKWBZ~UvYG$+f00000NkvXXu0mjf%}c+? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/anorith/icon_gba.png b/graphics/pokemon/anorith/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..936355d61784d67859b9018690a60440549ee8e1 GIT binary patch literal 377 zcmV-<0fzpGP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H_en%SR5*?0lCchgFc60C3Fspb>)_Y~2FJdEFT=p5kLd*E1t>^O zI+e33y%rW17vn8Wzx;QXrXRqM6#}p^UK!RS%p(%8m670Zh=EcHbZ&?N^moHHrKp@lXDa@RJmoUj=pMI=_`L-Vq X>}tI9#Yi$^00000NkvXXu0mjfF2tk0 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/anorith/normal_gba.pal b/graphics/pokemon/anorith/normal_gba.pal new file mode 100644 index 0000000000..01bb5c13f7 --- /dev/null +++ b/graphics/pokemon/anorith/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +172 205 172 +139 172 139 +115 139 115 +90 115 90 +246 238 197 +230 205 148 +197 164 98 +148 82 74 +255 123 82 +222 82 32 +222 222 222 +180 180 189 +106 106 123 +0 0 0 diff --git a/graphics/pokemon/anorith/shiny_gba.pal b/graphics/pokemon/anorith/shiny_gba.pal new file mode 100644 index 0000000000..dc1fe03744 --- /dev/null +++ b/graphics/pokemon/anorith/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 213 172 +230 180 139 +197 148 106 +164 115 74 +246 238 197 +230 205 148 +197 164 98 +131 90 32 +255 82 74 +222 82 32 +222 222 222 +180 180 189 +106 106 123 +41 41 57 diff --git a/graphics/pokemon/arbok/anim_front_gba.png b/graphics/pokemon/arbok/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..98ca8aab2d0cba3d4ae52373cca01f924098be45 GIT binary patch literal 1515 zcmV7@#mjb~px?3|O_7-P|&7Op0 z4Rr@(JyRMw%6uGdDIiM(@-;dXS$jZ%wEst05+zHXS`9v)`P1X$dykKQ2f_dISRvMD z=cSb93=zt&e^;3iv%o=q{rsoOXwJrkl!~7LV7&2Os!HXy@cq2F@5dxlOqcJ)XAjut z-U6voxe)Ky-#i29W6$FKDi_OD;;pLnV{ZWN8};$$)xfRXGmsHc_3@__^;R!r2ZT~l zS<~(B03JLSI^X~ULewUIy?nauc0sxI3>YDjBLC<8Q{0)@cbmA7>_I7nwquzW3&K9pAs00RT-7VaqDQ2RZgurcXL^%d9!o<~cK~!umBXM*h%7rbK@k@vGLn!v0YaB-4tC9dju|-I*)|u86vrWP`NBtieDAPVUEbhCDUMIl0*GH< zFp6^_w%7dG7F{TNCxQwEv$@_x+epNv2eeKE3xrBUcy2^@e4ia;??iA56Yl`@2Kcb5 zehp{hU9=M3`LCq1<-mk1n(iC8o~z9Bf{EB~AR$h(>c5DU3ufRwl~x|H&>Ziz57e$< zbOin#0U=w+tF|k}8g4xLKv08#AIQU_TZ4xKAS9i0S2AQcSK8Wo2n02H0v2{vP!|{j zv_lhynzx0e!mVbg^!+G}v6Ym2nW8^w=>W=nLevTk_>TAcpqn*!~Kut526H0&0>B6kgghFCnDH0O0~HuU~$^jCdnntj0@_1n{uwfUyry zA4lK@z?FEBjDS652UdBw`vF9ks}X=L)&LaW{Rn{j8~{)m1y>3hagx}?MPU#qtY3t# z4BXXj?Fe9%xDKFHk>=7xQ6wW58bEb-|7e%toq-q#*#+GFOQ#M7F6{TJ;Es=G8?81= z;R5XgBpKi}#3q6`SdLuaJTU+h4=fH`Dn~%-O7s>cwo!DAyL(tJ0Gxzau!$|i0hwVc zE42D`Yl5XDu0Vf2(CS#^Frj#UT=TenRC7*l`P|ajfNS;*uyBAGmt%+sG)_3JU`{KZ zk9^S$Cr%ySGnH%7iy1&?6$C90aeZYI2b=XlL&V)`69Dc45$D#Ts!rB`7a89+6jv&< zP_=dlSiWu?P*i;R(@0-uGi__YxXQNID;61xu&?4liikplSOd z?)llj)jI$tfVmC(Zi2g#Z{rE^Y5mUn&?3H{5SgoQ96<`yPkjY+-AaHSQ6uenZFk{$10;N)(tCaO|zc3j}DUa@pTws4EQdDY# zm@j7|x%R>!cC9}4N5CNzsrE*&2=uE>hdiN(tNcesTzn4@LY!ZzDh^l>RUB|m3}=8z zObb|R);D8JR?8VyAwNlHZG~7d53O*7sh^p^b{JZ7k9oQMi#a%?xt)KP)DV$*l0j<3FbqX=g7`q~Nv9{s1UmbCh!$N&G*_6tgJ+<- z*jRO1sJ~}lXtnzfNw)Fpy1!j!4_UP#PD|YhqywyvfLoG2FSZG-Sf9l5N&v7ZOP$Fu znO?UFoDJhJZhY`Q4gdppnWA)DW@y1JB40U|t7EP?h-wb_Y3ViV`|N$42`Owd2y|YT z7W9ChX=xb>2z=~8+Wc?J*}ct4*M=NAF!>UQh4}^~jMF!jtU@b3U@S~pAO@?#I4?1t zh5WGnG@Zc0xbyVl8)5c%Y5j1PA=jG2Ed#NBWv}HmLVk217h%|sE`{>jzvss%4@2CF Tm9GJX00000NkvXXu0mjfi@v1A literal 0 HcmV?d00001 diff --git a/graphics/pokemon/arbok/normal_gba.pal b/graphics/pokemon/arbok/normal_gba.pal new file mode 100644 index 0000000000..afd5a0a161 --- /dev/null +++ b/graphics/pokemon/arbok/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 74 +238 222 24 +189 172 16 +255 172 131 +246 115 74 +197 65 24 +156 16 0 +16 16 16 +222 164 197 +189 115 164 +156 74 131 +106 32 90 +255 0 255 +205 205 205 +255 255 255 diff --git a/graphics/pokemon/arbok/shiny_gba.pal b/graphics/pokemon/arbok/shiny_gba.pal new file mode 100644 index 0000000000..6c88ffb429 --- /dev/null +++ b/graphics/pokemon/arbok/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 74 +238 222 24 +189 172 16 +180 197 230 +148 164 197 +106 123 156 +49 65 98 +16 16 16 +222 180 65 +180 139 24 +139 98 24 +98 57 0 +255 0 255 +205 205 205 +255 255 255 diff --git a/graphics/pokemon/arcanine/anim_front_gba.png b/graphics/pokemon/arcanine/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d955b812fa49b7148814ffc669c6434fa5034a08 GIT binary patch literal 2014 zcmV<42O;>0P)01yxmv}Jv^00001 zbW%=J06^y0W&i*OTuDShR9J=0m%ne^*b&DGq%whMfh*Dl`3sWZpdtuTs4-HevR$S* zoXfP-rZ|^+PlY7Fg*Ze&E^x&zi9q`YNQqMhIIfjefJn-|_^h>-+;xPD#kH4{?>zpH z9Lr9bdsy4toe$^Dyf^R7*OvAF8TM^IdX^O}n&)uv;VX9@SUv zW)*bSA8jncO-0(h;8i)WMyeiLT@;^hEcuGK^pA_YjK)e~J{gZ%;A^ zLrH;!l*j-Sag&Gt-Iw=ENfGviB~N5xpxT8U(s%dnnxCU6u!^EEK-dLo6TP@w1LPgd znb{C!Yex+Jz2DVHKS-gB-a3;iTXRtZ;U zayZ(Ou`#a+N(LMxNwzw(MyT)BMcHIUXc2?0TxNq8|DT?216oA;^6lbYZPJJta`9E;8Ya*!zmp!WFLauCRs z{mwH3WL%-hy8RxSlcKTTMF#g7r&+cF(C((i=D3LmEZHgrkYtGfUJXRHIc(xVa!eBg zAP5>XNe-Q+k^^30b^xan1JqfBYNrA8+=MshB95~PS=2yJ`R7WTLY-%l;7+vzpwzC{ zByr`Za`FU7;+W5O&H?aL>n2NE`KbmVt8f~}$LDyS0qBlJF9d)C-T+T=^8GlTpaPnO z>}fyUnG)`{umJFPgbUy)_`R-Z(>$dsO=a=U0NO7KsnN5xpk`90OYN2Z+amyoPBt#6 zx`LWbm|xjC=y{ii@s-lsfw8AuS5sU;ZX$MbRQ6Le;cWtgUZwvaoDqb-8}b zS~hW9p)eL5fIY?+e7;?0)&YREPW~oO^Lcl=-_6o4o*8EAvg_6$5yM)riryl}0MxGsIp9I!8N%<3Y4F1&nKlEV_{s$0Bb|0vM8xHz=mOXZYkJ$%y zKd^_6^RapCM?)uoz5lUQ9D0s}&y5-E_rkIJZyaaeacI9YkCYzR(KP_?uu~A>MI=1Z zQHT~vZAe4B4ZHl+53G@A%T0i@)rI`VnD8+t{tjdku0@L4!*BP*RGZ0kB6F{5xra>{ z;TX1kv=VeOXDM%}E!7aNOcMqO&!LOMjQU#+f`n#*z!0r4xU*+Mgmdjb;cR~&(Jn?? zoAt#EHPGZBv(KP#5GVyp<6iDOx4FxQvH+z>Bm&yW2Lb9t!#)N7BKpd-Y!AI(H)5qt zs@M1Uv(kU*&?{;8Bixv7+kj{+0R8!wKTluEI!tNMlM7W-H%uLQc|x#z1)6v7+7?QC z01!Fm>wf>hwD)Ry4Hyk;n~gBN`GCAJcZBEG3gqkcUpdA{zfV)Bhm|3q)Npqjh4J}D z>GU6C4fbhFxwJ&Cum)=PN^P48T!%7v{QYl@C_!sqWh)UNdUw$(5W9r^?iXZqkuUNi z;q3gzC1BIze?R=<*LB$5TpD|p;hvAqT4JMC4w8chd0_}XL)oFS2ek`n>R9Fj4vf4o z;^16+sB9|~VhrI@=k812W+M=$KJ0t8+LLRW*=shBlbQg4UH2h)0n9eIU0kJMt%I0K zT}LL;O8_oOXNP3ht6E-gfr^8Zoq^Ru3+dO5SthCV$BI)j8Wj~JKTL4x4Co+FtW zp{(Hn{R-0F$P1AVRRff@Pk6xM?l(C@{rcwk@ez9WKj2O_^fnI{X#UdudkKWXZNS^fX$_>`{PpPU7T{fam`=pN w@sryD>HcEqaaG-7w|Z5a-D+~1Z~y=R07*qoM6N<$f}0@M(f|Me literal 0 HcmV?d00001 diff --git a/graphics/pokemon/arcanine/back_gba.png b/graphics/pokemon/arcanine/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0840c8ae480c12e144653ffee65066a38ba7b2 GIT binary patch literal 790 zcmV+x1L^#UP)01yxmv}Jv^00001 zbW%=J06^y0W&i*Jlu1NER7i>4l)-Y^Fc5}ytq=HN@&J7-`wb%b5a(8}rvuy&n$GY5 zVupK14Nu_aiW0`ot=LIWSCUO)1=@4F9ANx^+WmL6hLHa@mVW~lw}eE01TsRnxTJm( zWRcDZ=T8@aC|O;nc|_?2pv3dP(yX(<{2cH_EYj z<#`uTLVWN?cx$MwSiFjh<11m~qx-?4t-GEAkE>!$!v^#k_+V|&C^ zU}JxmB$xqQhP_hiF7&97U|<1ugSy%V0I$`~HfXz?S|F&fq&GF5bqSzGJ!m3MQcn8> z3==dav~Zvq9ReDq_N$;mLHVGg({BQ1-AKm{^TR1cCIGSdn;se zeTci0`QF0V0ea}$KSi)mk-eTNKKDI*7&O7s-EOJ}0JmWb#CAV)qoHts#wi9R40@`M z8g>Zi=@Ijh4>2)EsCQPLzUrb7BIslCC^xm)p=?a0fen9DJ!X!N_`XV`8`GHA>L=c9 zzt+NXvAMds`fQ}!9F0L80haYHIsRyjk7v2IUsYAzV?X6Ep=@QOOOJ%wx&)Qcew0E8 zw}-1|OKgl$$|b0p!N04yCaU)S$m=SK>h5h?OUPRIX#3B~BVPXGV_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/arcanine/icon_gba.png b/graphics/pokemon/arcanine/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3fed9199ac0126d84643ea8e91581b3e8e358c4c GIT binary patch literal 445 zcmV;u0Yd(XP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IJ4r-AR5*>*lCg4wFbszM1kRR~myuUktd(3Bvn5;D`mDJt&Zy9< zp<7i4OOWebmQJk)W9feXlFVn!-(I_AzpUXnjrl{ZCMHH6jm1_a)8waviHJqAW5ffD zCVIq0vO`1HMG5|2lA@C@(cR+)$I#X|K`w zI8aX#+df85M;ne(B%f^C9gPai{d5g$Br1CP{{L<*z}PKZfU)tSi2_W-b>sz@{Ica= zD=-$F5>$Y(AT&GxBZ>_eR}vdAlbWu;h{py@z4oQRXxZNaGpxYevPtHHNPw~DJ1~@~ nkTz_$0Q1NP+4d(N^qh}x*8b~9{hbQm00000NkvXXu0mjf84JpH literal 0 HcmV?d00001 diff --git a/graphics/pokemon/arcanine/normal_gba.pal b/graphics/pokemon/arcanine/normal_gba.pal new file mode 100644 index 0000000000..46135bf321 --- /dev/null +++ b/graphics/pokemon/arcanine/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 246 +222 222 213 +90 90 90 +255 98 65 +197 49 32 +82 16 16 +255 246 172 +255 246 148 +246 189 106 +172 98 32 +255 139 82 +238 115 49 +197 82 49 +98 16 0 +16 16 16 diff --git a/graphics/pokemon/arcanine/shiny_gba.pal b/graphics/pokemon/arcanine/shiny_gba.pal new file mode 100644 index 0000000000..99edcb435b --- /dev/null +++ b/graphics/pokemon/arcanine/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 246 +222 222 213 +90 90 90 +255 98 65 +197 49 32 +82 16 16 +255 246 238 +255 238 197 +230 197 156 +148 115 82 +255 230 115 +222 189 74 +180 148 32 +115 82 0 +16 16 16 diff --git a/graphics/pokemon/ariados/anim_front_gba.png b/graphics/pokemon/ariados/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdd513628b9acbd38b1d17381c8b5df4c706f46 GIT binary patch literal 1466 zcmV;r1x5OaP)8U!ewDVm3Yq3g{tIvV5yN3 ziy~0X$ky?l32K-)rwwt2R=$Wz85j_@r6Mu3^_`R;HA><;^^}3Jq%I?kec-batCl~$ z=ldJ`iWwL{>XYK<-22_g5m|G3Q3z^uESfRKjWiG{29?QP4FH5UXlb(E^}Z)1u1m1EQ)LQ8n{{gzCpS z)x-x|_(}8m7pk!x3CQch8TxK|PLB$J_aJa)KAlcqkRmb=f53^$xA}NlVUV2wnh$X^ z$R%jEyKl?OlzuodgNIn#3M&meps;SHFdjlw_c24I4DA!fiewJ#&rSnv)u@yO7`EG; z6SmnS1^E0l(0Xnv#l&!)kSm=HFfv)leii-!qjk=VOYj>`;jIpU{)pzY;T^1--=r*o zQa(wN0ch4K&C0=Yi8XUAc}NMNU4ktKdi4>d9|b$2QQuV#Qh%N&ncM;aLX>6ZX$%3~LHDA3S5<9#)i3vqs_n~14lsn(?!_XgjV)RT6-nzW*OG^rA02jX zn)D8+_oX|*dg(R8GOj)0Ib?^Orb#L2jC~ydl_g`lN!sVL3p9s7-5vqU{&v&WX-}K4Z*}5NE8+fy-y_(c$n|ubC8ZMcI!YATy~f?hx|F?^`$`>8g=~-p9(4 z=BL16BG6E*_3jJ@@Z5P;OC2Q8^OJL^!7mAfkxNZpp)$*$Fpe!6LQkv^g z4j>PJV+q}Vif{|Jexa1UX*fM67vKSegeAQ01i-qvfZ+5MZ(GcQTi7Md1r%!(aN;S{Js`pRxHLW< z08YT=DL`WKIoBg!F8?a9JMCDhOgS{B1DjLEU$y^4i%$be(-u1Pc76#kWwVVbLu?{m zjD=792%+&GeCPKffG_r}5IrdnGu6<6TZwR(nMMGJ)d+_XL(XK+q;o`imx|HxquA1N>Nw00t4atuy$}L+|K7YacQ+%L7-;)2Ez40 zZl&ybg8l{erJLplo4U$Yd;{V7pd4|(AXz|1LV?H)?lbASmjdd;zH%d(dWM2gXu~oJ z1PA=Hit9tXxOOlCa>L^l6bOJyU>JM>;?kWK*Cd+juniOlfWFL@T!8CCe0ArD=Rgaf zV1fofena;3fa`;@`rUiaGWiSwec(W^U~QV{8+W7+f{6f_i#ZewAppSHYy7{?JW3)s z`sNG7URm(;LFl2Oz#_Gr%DF&k1UUMTLdkjmLe8z6XBZrC^r7_xfp?y`hT#cByzJ@2 zYzkh>4_$`|9sl6z!|WTQ&*V5D`1;^nIEVmF=|k(O3%u<3?+8->;hzGp1Y)B71&W0@ U?vJS^EC2ui07*qoM6N<$g74U=Hvj+t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ariados/back_gba.png b/graphics/pokemon/ariados/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b677b7222e26d2e74dfb65db9d82a8cf44422e23 GIT binary patch literal 706 zcmV;z0zLhSP)KlRs!{dpecy{L-ART{?UZNH{rTPVKKDnK^`if& zo4*Yw2MIfB0CI>(bbx;C8jwh9Yn^6QtOKNNVH0WsA3Fvb06oGVjCtqI$aPJ~To^#k z3DW?Z@ms^f;r#Bh&;Y^j=a~ldIOjqGtX*zeH zCukFVXaIN}q9mJ@hx5ZD&wB&FuTucBq6Xw_<+*#{SXmTXp6%2=5_n5ejwb8j&~;r8 zfU&ap#Ivn>=?TfiW(48fBhW~$e1D9<3;;}FPl*s~Oy;33@TlOdgf+kmnw@1&ZC1_F2=lG3P5EoVwX06?#T zz*Bo%E1;BNSOGLT!})jp!Q|}Ne->nopB-{Sm;#=reL}xf^ZqFSaBEipe5Wi0;Dk&E ogt7AqfUE^xYkJ`2z3AWQ593~-i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IEJ;K`R5*>@(lJkjFciS?eggU-ZugSA!MNb!d@PvAA{%bK;SxGB zk-+4}%2#W0O3vj;JZjmVr4$a()j{9Tz(1uO_!08ghAxAwm%;lf;AC4{>T~>AK$Mq2 zYw7VMyPVTLQy*o1*$^UPbMGZ%P#igixE}&O@kH%0|FqxG)tblpqs+76yj}AM^D-T- zMO23ZvpX5o_726jMI(L8N)ujp*W4|D1#o&a0lc@abm z!4Z9!50L*lzW|2T3ovat2SXo90|xCoqSt}ZK8C-4Yrsr=Xby?$d{{#CWAI@QIirdr z7Nng9R* literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ariados/normal_gba.pal b/graphics/pokemon/ariados/normal_gba.pal new file mode 100644 index 0000000000..ccf5f7fe71 --- /dev/null +++ b/graphics/pokemon/ariados/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 172 57 +255 123 41 +205 82 0 +139 32 0 +74 0 0 +255 238 90 +222 180 74 +148 115 49 +189 148 255 +148 90 238 +106 49 172 +189 189 189 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/ariados/shiny_gba.pal b/graphics/pokemon/ariados/shiny_gba.pal new file mode 100644 index 0000000000..c2557b5894 --- /dev/null +++ b/graphics/pokemon/ariados/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 139 189 +205 106 164 +139 65 123 +115 16 82 +82 8 49 +255 238 90 +222 180 74 +148 115 49 +148 213 255 +98 164 230 +32 82 180 +189 189 189 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/armaldo/anim_front_gba.png b/graphics/pokemon/armaldo/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8f07191fb768c3ee1c5da8de953d9d884d1ce794 GIT binary patch literal 1876 zcmV-a2dnsrP)O1(J%-rnA{w7qI-djJ3cun1xM00001 zbW%=J06^y0W&i*N(n&-?R9J=OmqBma$Q6JIbag0W~v# z(*!n$fHycx4kQvKu!De zV`mH4v&T*KdN6n!nxp^KAG@0~e6d%5%;tl^S@eElUDn52fMTD|;JbfbMG|0Oo$UZ*%e4GG05CIq08kEH z?6;YfVG?%w_W@6--+))naOW(#CytutP7atG_|9EDx(~o8Ow;9o_m}uQI^F91efqEI zNQVG{5Ape}szA_&wwY^o4CvmrPjZ>rn4=*vw=-oU-K&=GX?Ug_gr7DKC=6o@U z3a|h$i0qAwQWc?XmB1MW*%b(25Ps&y=Z}X79NAWH0er?Fd5?ljlh>Z};gX(bCbPma zgtL>2j+`P1IL|k` z;t(}vmS=3A0Lu-$HWYw6Er7)tscBk+v8FpEV81~C;CI-13E0%nESP%TFk?(NEdo@w z1jg8nu|wc-AHTvhG0LewVP>oN${G$2)VR+%KxUfILclav0KV4r@lbpla1YqT#AE@V zEP=y}hVW_A(@Kn+nPs{XScGucU@%lUaPR60iERG~0W`-F05P2Uw|Q@Xt0}^L&1xZV zyaYx~0m{_9#a&H%t~b^!2aCmV8G;h#xat{u-4WL`LVB|c&Nl$lvm|Amty>uFBT#ggnV`5wVk+Z!%iZwSqcN zLtMOP1rcJs#+toWLUI8|NW2s@i)GH!WU>yZkm2H)*5sLZX7M)0}14AXlKi!R@U+mR#LY&Q9zjoB0T8_B{Y6nQK*TFX;|LMprpV_#{ zjrA!)_?=kYRWM<&b@8Z`Ip?93gb&?J)b2vK3h%x9%F%{O{!9J8*0xZfMcbCBLV=V- z&iCQSo;30`B6zK1RtA`}2RG^0?N-9t!9+oJnKoL|VYD-~If%>qL zsD89%2c$qhONl}tjW&UuccefhQTZ!(nAYo?cmLUGh6+RyHT7P(aXsFYxwGhWq?sg9 zC^2X#m;DVz`5eWU`#MUL7h-w%a5?*7!;@4%uOW%@P(ZwJR{!#cjVR7wb^&>Sl@zOe z_#v);xsk2U(djghMKDSDo0vRlJy+^yyxZl~-$RGFyM#xZsdx|QK-X7P$^%cpdHqpT zXpXv^W7d`SAcH^+s#7XZKNi21?kciq?Yk(Xf>7`>$hmS=n z@fxt<2Kx=XnvGkL4lstBueB#G_yr&`odDa$QqSDBl$`O`4c(baJHVaP((@a+)>yWT zTQZRL7z!zkLOw zFc4*IxAx>W;&qbQE(u1Mxr}LFfs_~o4pCB^=UBS&!gi%#z(l}bQ5B>pWe1d~?D;ED z)G>}D0m#KOSO7I<D^!yuAk(J$_|~_m50HoX642?G6=_vV z!4QE5|GtrP)R?|Hhw4%=xaW;-3Jqed3P6H!EoD$}xFNw%8EdV!o)ir92P`y60UVDH z^h&Lef-$%z!9W0{VCa<@@X`u8LXMCUfUUj$|Bj*UwnZTrfsbp0f-!L_GgSQ{m^1VT z6pYFMRyMW*XDUALQ8@?`xz7)fvbiO!5az}oP zwP2S15LEnOO;JjJAjK&C!L6R~r9YS}e^{>or9Xhge!(9UO7gGLAN~(QxK%ZE=t83a O0000O1(J%-rnA{w7qI-djJ3cun1xM00001 zbW%=J06^y0W&i*K07*naR7i>4lrd}DP!Pv8#DnqRxoM#wwL_+Yo-$}M)K5dElvp*O*)qz*vtLi|K0uX z=``)X4uBVbOSfFccJCoT&b8KaoiWR694a(h1D*BeeH{U=0(j^NXssJvH<-onk2`Y( z=u<`<&_7EVo_88I^i5RVr9T2J%&P)gmsPWQdVkX`3_Jk&FH4Aw>l4A{%0PE zY`~ZR0Q`C3T^4oI0E#P+5O)EZC~LGJ0KB6!Y3AGJstd=1;r#1)G;RRCUIE^6JBm*4 z1wbz2NCi5Rahn+%U>SdE0O!%^j2RYs$omM~#_=>d9V@{52V|j?GIJexhrmOn#`7rh zEl1`enF$F5e3z3t(TUD{CqGFjL$;TwfXM!YV z0)e>ECf4{U_(f?!ks*Kz<2n$XYgIJd1Ib zCXH+FDZU4p{7~o6y}mf`nL!GpX9#?YKTni#Cy9TvQz+PG4`0HYyfKVi@9U>i(&f#0-mBkP5P$A%h#}rc^Jmi?W%@O z6kQJ1&k5fwMLc~hs~#p;g0TTc1W45=nOA_VX9TD|X_aDYoN%sBUQB!&`>b8vZ8M4S1{mIL}Uog5$xV0fee zTP))tGYH^b;E_|unOm!J#BA`*5&(%B;O-sOs%#sqC(<=QdEgG-u>rPlflFo@7A^?f zKP2Gtgcj^0!1`;z;T-Q+18p*?ho1#0KvoF2bca`!P%LVL_g8>}3V6p|3;AD+ Y-`GscuxjENJ^%m!07*qoM6N<$f(jLqi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H{YgYYR5*>*k}*#MF${&nFR)xyVk1fxwnj`HQKjx#V7}kL#76&X z7q;r+JLZR5HO@6NLg4YqelM{<=l)F5*a?z4VG`iB1I(a>M)z<0Ah9{oBfp>0(?ZyM zejJ|{&a^olBd`dU7_pxY&Q*}M{P)&CUP+|ExJm-fC+9gM(_l{{R30T)@xq00001 zbW%=J06^y0W&i*Iwn;=mR9J=Wma$U8KoEv+XrMcwkyK2sgTmC>_)1zKc6JF(42}a^ zU7Muwop=BUN0X#r-2gfkw`XDHn7`d`?*7}^xqpRd)#^{HJL|jai!>=*z#@%6JLZuBT(fVjB^=_Uu7C^)D zaBm05LW~4xe6xC-5^&s*hgW00L((htZd(mb&9D&{zzpUbkb%D5R7Uw%43Lt&eWH}F z2G)0Ws1N9AH5jUq^#nPMCjiDzhx;(L9#O{?j7^or$N+Ky<3iS1Axb+SBnFMwLP&1# zkP7uXQ~Wx{Ikv4@wQBVX%^uwK$2=Ol>b*QvE+zn*`$sue1lW8COmK;V0qw8 z^qTC|=l~iEuZ9Pn@>6m;0J5;g3W}LES%okJ=xqRd@5K%v0mtJm@j~XM@(gHLa~lMi zG}}Nk@qg|#qBn#IV^UDQ>pd8a9AHvI?@&A-Q-lPS$6g`IEWyxtY%gVqrVNem04SD! z1Y+g$GlfNoX7udZ_{uN{W7k}l>~ipFgI^B5Gp$pLn5b_60000&CUP+|ExJm-fC+9gM(_l{{R30T)@xq00001 zbW%=J06^y0W&i*IGf6~2R7i>KlfO>GFc8MOL>8mF08>OB0MAT318-7QLRGRvY!zF= z&|a2|)LwYBk}#kwJ?`8{NcA~FV$HYu=g;5$@nSJ+)<2{+tLgK?y>F&~!dYm_2?OUE zm?D(3)&kU@@fTjn0a}a$z^XB3Q5-w~<}nsw1OQ}$=afA++~OwAME-JsE)fJCiKC+iv-V f$imK=^%wmB{&D3Idz%|@00000NkvXXu0mjfHbuXh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/aron/icon_gba.png b/graphics/pokemon/aron/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5478463741fb910818aaed48112ab6756baf226e GIT binary patch literal 262 zcmV+h0r~!kP)DV$b%7 M07*qoM6N<$f)f*Kk^lez literal 0 HcmV?d00001 diff --git a/graphics/pokemon/aron/normal_gba.pal b/graphics/pokemon/aron/normal_gba.pal new file mode 100644 index 0000000000..b5711fdada --- /dev/null +++ b/graphics/pokemon/aron/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 172 156 +74 74 65 +106 106 106 +139 139 139 +172 172 172 +57 57 65 +123 106 106 +156 139 139 +189 172 172 +222 205 205 +255 255 255 +172 57 74 +222 106 106 +255 131 131 +106 189 255 +0 0 0 diff --git a/graphics/pokemon/aron/shiny_gba.pal b/graphics/pokemon/aron/shiny_gba.pal new file mode 100644 index 0000000000..eadb9aa81e --- /dev/null +++ b/graphics/pokemon/aron/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 172 156 +32 90 90 +65 123 115 +90 156 148 +148 197 205 +74 41 24 +123 123 90 +156 156 123 +189 189 156 +222 222 197 +255 255 255 +172 57 74 +222 106 106 +255 131 131 +255 123 82 +0 0 0 diff --git a/graphics/pokemon/articuno/anim_front_gba.png b/graphics/pokemon/articuno/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3e92cc8b313178e043cafe3a3171509e2bfe2332 GIT binary patch literal 1935 zcmV;A2XOd_P)5dZ)GT(CbN00001 zbW%=J06^y0W&i*O4M{{nR9J<@m(PnM#}&uxqPhqKt$6poCAE%gnCk9RP!_4WFAI|y zsjDyJ%qsn(Adt-eBQNaHuo@VQV*;ar@xeYi@jnoVuy=IW4IL%{A8d&8ebv31mPX@K zLh3Rjy-&X%)vxM(#n^vuwTwC1{C{-cZYDywv--nicF$gjfid}@cJRS2z>BWQm5M}V zINk-!an~qX>5)y~c)*ek($ZQxgUYT_pS~G5gTmhc$ByF+GU-n}08wCpZX|-c>V%L| z22&}$8sL$LddXb^DF~BE5CA+2^fP}&raBQMA;}IPl=PKRH>Wn1aIIbRq%2^c`buR4 ze1DjHN94q$^btGQGcu6AB;XlBd|&?kC%IyLphibkoogv6iCC#AT=Or3U;Yh1YoLN^ zYYnO(7plsVOZEG20HncKTA(GRpTR{=0Ah1beJk*HlGngg4%c!h0~LZ8KVw{#e-Zr| z?*Xu7Bxc6tTE2;L5Lv+Z;a?BMfKrgzLA~Rxl9hO!xs8#UFTWK}kwOEY)lv41WdkA3 zgm{VwN(Kjw*6OTtHHC`>$z4?zx` z#{ph#kZl8N)Z&eVpcZiqA`G)EV9gjq?)&KNTLK;{GaMp|CeT^6Hoz}(0A*(baAT_8 z0PuoyHnh1NuHp#eA*P*PV_&l#ApS_WG{z=s4h_K?RK2p};b;JEuMrz=b& zxgsQcxlR+ZyTbj+5zXwmO2SZ=NWexATHkhiO(0is9G_Au)-HPft;kjlAVwR6D_aAs z1c+p~6#>mk2dVw11Dv4)95fv?9kc+1hm5^jej;&1e4G&3bik<5;u-5K7K^Mpq;kta z1*`y+<=UA0cFHk~kii9IffJz1ZTtHa-d?cwl7f_s?E<41!17bpUR)y#+XecQk2m0~oFBIgj2QfsZ4nV3FHTqX<2qC`UaYp#C~^MJ-Zx{X z%%h^|fR-tny~@ko&itRQJ#S}w;nsZgvj_(36X(&%-iEGY2tpnwKSNCD+IV7S4@VjG zWRi-(Lj>xGaVeOG2+F}tF#JL6^)IYGC}JXZU2xRjqD!Y*D%~xGlTUPd&3Nf??JVo#9^sGvOUr+z`TjK||-GyGy@ zB)RYaMDkP~u}Pr3P;G94686YundFE1JL!`M3S+O{dv4BfiI7g3&R*m_oY?QYcNqeBrpEN~C=gG+0A&0Fg2cFq!`# z(PPe|P#q<81f_I%R_Y>Q8qd-hqtmSNYMbp{u5baaPxXvvQxtG)wOSn2%|g?_W_xop zOWg_S3z9)jQE#)I?bcbRtR#qMfnfH&^~1h93N4Vj7O+CgaW`kf?e~Q(hs#Rjyl@}~ zyPH!u>5G1S;%breYv?Ga8|(op2d?P9fY9>qLTrG~U_KCT9Ns#jw>hP0h-YlT_Gk1K zN$1>lUHQHU?88J&sEX_5AL(}j?h4-#$(<780Ah7SD(Dlsif{|~Li1Szpsfzs+eNv; z)Kb*^nl%^AZlz8aG(y@C_fp;cgu2^nMe?M5wWPK!*!Hq9P8XlA*>bTsZ~P*>144DU zJXdPHyt>*oRx#Ac@8&OK^?Y$pLshG-NaKY1`MKH+U#~0DI7*$oiYtN_+jX)wX`J}^ zCA?5;@f-twn}EjoJiMI0!WN;oilh{y?ONJDT<~}E#m5EO({Nqrb>H1~alK;yfKFQ9 z#9<5(u*QXOzm^|gFISxc=jYyBuU6;vyrikFO|sfw?AuC3ot3lwcKrN!!0`WH{{ieP VsSv!A5dZ)GT(CbN00001 zbW%=J06^y0W&i*Ic1c7*R7i>Kle<#GFc3xE*rh*0?kQM1B?VDZGK>?c1doNb41Y;S zOYI>HrM>_rto#~3B&VTBk=rEWdv^CqUI)Qdm#Yw$eOV^OVmX6MT0-KZyBq{+sS#On z=P55)f_TpWvdUS`SOS1Ay3n39~z)OiX)^n zRn!65dNw37#wO{2y(5K{VhylzU4&IxUnT*b20`8eKA(VQM&$#-b3pWOfH!0ZxOTb) z+I#Q=x6447G#%z&MXS7N;0M&X4xeW_#OtO3?21V?W9lbyw=lbE?3VzW1O55xfz8-Y zQjUU%W4CeRi^v&}FGLZqdtjI{1W32^(Umu<-&sfpZ-Z8uYc6OVk9`D42ggt;-|o4j u8+hnj03RGfacaQHOS!~$!U(wPBJ>AZzm;slJ;UPw0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H{z*hZR5*?0l0AyVFbsutg7`Xf#Ag_+HmP!*6oy9A^LrcguS^kd$yXd9Xe~vzY1Y!Nks2&iA0cb(DawQZy9X`#_M_m$yD<Qgg^WYc-c86jq)X?+)s#(Z ey8U!tzdqlxExYb9$Q(@o0000={zCy2>mkQ#u`rN6A~5ZpBmQ_av}3PzL{T6&2Hj?@WZ3| zd}8y*xPJ&$p=Oio3V_fSfF2(R@nI7}Lj_dgpEQgj@qq&v&MWfIutFH-VweLMdK8I- ztN{d98K4=u9EtEOg{2wJ37tuN3*0Tj#fQ)akW5wqLnB<7jyBo=;y%9xq_LIT+NUWC zfG!U_4}shUjJyp61ViKNfGH5rDTK&%FRA=i0iJ_O0r1{W0|AL5u$o$gavR=8ve@aG z=ZBRL+aBg0=NLg|X#2(DP{G|=rCLi@-6FfzT3fVI$7gu@`|yip?urjAm6#uuxDL?++$a4{e74&T4i?au4&i-fCd-6sz3819$DInNe*uv|Z^+;%Zb%T@pw zz;<*0Faw#IKTY>`Z~xZX2E4M&&s+Ucm?p-pQE^mQfbvd6M@3=29a8Ax)Mz$dFDZs< zp_=W+$x4Mk&NN^N5Q*XG^+ad5G>H!?!bzc);_x^2$%&_j3ZS2C!=DedyucES8Ok(R zKK*J}2ZWsb$fFypyg*A*h)%5f1TEG2BC)2Rfe?O+0wHmr1c*^TEC8Veh&2RV53~ST z4k9U=01s4=%N%P^op~BK80V!7(Sv662pS<$_;MBh9{*GU^$_U1z7-HO@Ils3rLIvZ z{;LCS1;8p1s1H5$MB6ykfEpe3H>U*hd{#zKqoH2HnqD60)6k8`8yC<;c`({U?EuTU z)V~XO>#7Oy0%!~uwF}QXko?>)f&KcSy17MXI o31q7PXBFVC0*LJ=(tmBg0BRh^Zc?7uasU7T07*qoM6N<$f{!}zW&i*H literal 0 HcmV?d00001 diff --git a/graphics/pokemon/azumarill/back_gba.png b/graphics/pokemon/azumarill/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ca59011c64c5b899c1ada39aa630a0425eae577e GIT binary patch literal 541 zcmV+&0^Kl(AC7FbsyXaF>i;TINoDoUoOV#VI3;m2Mn&!SdFH zOY*izwp%B%OOF{er^~F*9%~?oTacwdp8& zQKAL|y&E{SV2lB5*MJ289DD)b=mp?cgMtVQ@`fv5A>|Ti7eGNmTpT^%s-FQVVF8pi zM&O(P>2v~`0JKHG-3EfP1jsJ$1C0Qr4H00K2`vIR&qW)82t=Bi*BijZbw{oB$!jbC zh;B4mcgJEABm!~dQ8QrkapHJDM<;n&ZvfT7dqov^AD?p|7!(H<=NzyrV9GzNF#&8y z2GpF7}K;Y}(20;y*%~#7FYrSD$kBaIee(ZL5z^Hlf7KS!>hYlk@2gKNLTQ%{ow*sgH f2FD8H|2N|stH^&h5C{Ea00000NkvXXu0mjf)r09= literal 0 HcmV?d00001 diff --git a/graphics/pokemon/azumarill/icon_gba.png b/graphics/pokemon/azumarill/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f41d53d2cfb5cc4084165acd23254d6ca2710389 GIT binary patch literal 445 zcmV;u0Yd(XP)DV$@k}+?aNN?bGH2)wp00000NkvXXu0mjfSU0^B literal 0 HcmV?d00001 diff --git a/graphics/pokemon/azumarill/normal_gba.pal b/graphics/pokemon/azumarill/normal_gba.pal new file mode 100644 index 0000000000..429d3feccd --- /dev/null +++ b/graphics/pokemon/azumarill/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +205 205 205 +156 156 156 +106 106 106 +16 16 16 +131 205 255 +90 172 230 +49 131 197 +74 74 131 +255 0 255 +255 0 255 +230 82 0 +197 41 0 +123 0 0 +255 0 255 diff --git a/graphics/pokemon/azumarill/shiny_gba.pal b/graphics/pokemon/azumarill/shiny_gba.pal new file mode 100644 index 0000000000..5f185cecb0 --- /dev/null +++ b/graphics/pokemon/azumarill/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +205 205 205 +156 156 156 +106 106 106 +16 16 16 +255 238 82 +255 213 57 +213 172 24 +131 90 41 +255 0 255 +255 0 255 +238 74 65 +197 24 57 +123 0 0 +255 0 255 diff --git a/graphics/pokemon/azurill/anim_front_gba.png b/graphics/pokemon/azurill/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..212454b4e9ab6bcbdeebfa1aabc019ca26b7350e GIT binary patch literal 1007 zcmVNSZ6MypnE7dEW@m2xqtxU1 z6VE98js2n=@;>0Wlw#2N7mOIPID6xSFBj}; zZDlcoB0c*oMyMisx!28mNUsPO<8+g*J{u9hn4P>hNV5^_O4p_~yB+2^q&X1ADTI|V ztMkxU?QX*+==+H|hWM^aNb?4Q7BpTUVe*4fh^gVqNunPqh}4*K=DHC9ZHx_I5BU3o zdx>Jg^$%#qB_zjJorqFXC7lzMPI>Er(%8eWgjFEAb}a0*w%Kt<0dpvPe*o}|ZhMdb zyKP$C#DZY|^0J@IW;int_a@NY*aP(c02g)( zOFS3)*9}!5ChC0bpze7m@2n@*zP0Otu&z2ESRb|sfg9-^?U@++&^)aFfo+8c>~>Xt d+#mk>^B?J|O{JKl(BAuFc5~##ulI*x<$EWsKi9QATdNj41KNO43;wV zSz0fZ{8B+(veEOMQ;eaVI`%{obN`p$_W3}F|M>gR$80eQqi^Af^BQ2cB+{N?v|yynoPpC97AZJgRy>2XHU<ayN*XQz zmz27P0xS)W5m371x$D}3y<*_}$a>cm>B7+5x$R74oWkY&AgAn;MP~avs#`3(AcMml9f1NLMk-*Kt$SPlHsni3u zX{59(K;Z#{4!;8I@bV*2vcn3{djqQD3gCC?kFt5YtZ$-Z0|XAS0nK2&j@?jA+Bo8# z?yL)Q)8(hU1OOtR%_I^~Pr!C?$b$;?O6dvMT*P)92dx9-paUQo@Z$gsZYHg+vwj%e zSFVG2#VZ7|n7D>B;41lMBDQ#iMcNFsl*8cl92Y&S;&z}?T0<*6j<3-<;2s6NS4vxB zL9X)!l1}dxd`Fe0=1DFKUEDhWn}Ku{SZr8NPV`WDi#j+6EFt{>JyZ-RrLu4eck|t` nk{yC}VT&1n4)cBd#~;KO=QIOy&>OKn00000NkvXXu0mjf(>oBl literal 0 HcmV?d00001 diff --git a/graphics/pokemon/azurill/icon_gba.png b/graphics/pokemon/azurill/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b69acc7fda6676b1dfd09a3441dc5dabe93a87df GIT binary patch literal 342 zcmV-c0jd6pP)DV$o+?5RAr3;^H|CNER!BWYJYakJU z2Ow3wE$6c>=MLbvp{F;p07^-`1fna6rz&@)By#^K31sF2@iBrOpk_{)>rP>!G#G2< z$PVeA+R&bDeIS_In-N5kw=xsWG?CvFYBh2)OwA^!C=dlNI{LIWEP$~*+C)olaZT{> zH@MRMV(aGq-ci37_pP9L#Ogj^HXGyWz6B-?iv8-o>_kUS&Haf|rjSDHW-o)ICLcRk oRD9)9U<_4QaudSo8w4)H7pW(Mf6%>`1^@s607*qoM6N<$f@z(V8vpPu zN@9C+lzV&LtgQdVgJS=bV*iw4gOrr4q`ltN?*IS)0000000960{}>n;fF#B700001 zbW%=J06^y0W&i*JwMj%lR9J=WmcMS>Kn%vEbn)h%q!dvWN0bqu?O@1MvId3^T{5MG z@&IY8)vu7z@lNI9OVuenbW(YzbR(5Hg}He6ekOT$0>01lcJ(Z)Go7~U zv#M$(NU!Fqr9bJ5StSy)uT{0OODIU8@h*6M!@}>=wT*P(A=)#xK!*D2lT7A;ny{ z?7d#SX;vBWfLoQ0feOX%(vJvGV+LN{CMrZ&$|Bi(KPL}AN*J_=kk^z0 zRI2fa2gcDm`Y02Mj{KUm{_zzpK;ISro&f=rFvxiYz{Z2}GX#_{1ox(RP`G#?S->P)Pu zN@9C+lzV&LtgQdVgJS=bV*iw4gOrr4q`ltN?*IS)0000000960{}>n;fF#B700001 zbW%=J06^y0W&i*Iyh%hsR7i>Kld*DwKoEw(%FX~ufsL|E8XE@|>WqOma7dHh_sEPd zfZfq#ETKzl<15)%o4q|X6K}Cdot>fjKlc9J`_FOy>(2!+y{~uO_Tj!xM86z$T!-G@ z$68kEQ`QIFR_m?$@MIS=23qCy`JC|ys_yeS=rqu(@qK_BDAfpOxNJc;P*f72>ZWV; zr-51ow4h80t1v*QAukkn6`q0GkG3)p8o;M3QPOp2U_%XJO!gw+hV0QtO!t$i1n>}b zyhPmLYcH_LkC=SnLh?X>uL1(n083$&C0);;oDk6auwBp7IwU>%aE$=>fOT209;5tj-LfoF0|ZhK zhL1nM?T%S5HGl?4=YoMnmX*jrDV$t0+9*;e_uIcqXPG40*JM{4H&eqIE@znvjv`ou)k z?;sy^Tm^!upHay7xJjWk5O}c=J$~ea!vxTT$ir{u;~Q66a~SeJNO1rF002ovPDHLk FV1gM5nu7oU literal 0 HcmV?d00001 diff --git a/graphics/pokemon/bagon/normal_gba.pal b/graphics/pokemon/bagon/normal_gba.pal new file mode 100644 index 0000000000..c71cdb94b7 --- /dev/null +++ b/graphics/pokemon/bagon/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 98 +74 74 98 +123 115 148 +123 123 222 +172 172 255 +197 131 98 +255 148 98 +255 148 98 +131 148 148 +172 164 189 +222 213 238 +255 255 255 +0 0 0 +0 0 0 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/bagon/shiny_gba.pal b/graphics/pokemon/bagon/shiny_gba.pal new file mode 100644 index 0000000000..6cd8ce5ea6 --- /dev/null +++ b/graphics/pokemon/bagon/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 98 +16 98 32 +98 156 106 +98 197 98 +148 230 148 +197 131 98 +255 148 98 +255 148 98 +131 148 148 +172 164 189 +222 213 238 +255 255 255 +0 0 0 +0 0 0 +255 255 255 +41 41 41 diff --git a/graphics/pokemon/baltoy/anim_front_gba.png b/graphics/pokemon/baltoy/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..94e7fc2c7efd9f80311875b016cb722854e05283 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!VDxm*B3#8FQ96 z9zB}$?Ae-oj!EC9fb^h){|u>FzyAV78B2ovf*Bm1-ADtn4|}>ehD5Z!owl*>wgFGu z+UCY}sfsrvKdXs4Y~RjhF!!c|ONs4+qF3B8i;mkxdfrxCX0nBKUF&~UX8S+;HMkXL zr(L$!UUB8>$H)0hcQ1;)&V8PHa*?cB|2hXAn+dW{Crta9!MiA9B14)M!~OG|AC$c$ z{bjX=^Izd${-pU~-`h@}jLrBR${fL&aWQL4N0dj# zeuMK;lMnA|e5JuTsr^E8+^f8(cY@b+MEF=3429Gti!upJ{`&6ETT{m7-!=0mye~gq z6Tx7$&P8Wi)~EJ_#*AItPo#&dbG@`wd35j5D!V8Bxfw!v!HISLT^V9JL90*q=X}hp zx8<2QW#fLao;erqFsL)w&pFaF|3C!ev0L_@YxiYdURJ*B`v$pyT-ycv_sAWw`IGv< z@Yo*v4$061hn}XM6j*=zhuwzdhrXEWec&l-*~U;M@l;RbR>7jH2dkMcw3WhP%fwOyT!`6magq!l@O zzo_VnM`qdzZ0}#QMQ#dXD6>?>3Wl@IJEHzrCahunG<$DmJhR!~<5kRe!z+rXPKlWc Oig8a@KbLh*2~7Yy4*c=} literal 0 HcmV?d00001 diff --git a/graphics/pokemon/baltoy/back_gba.png b/graphics/pokemon/baltoy/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a8d124481cf3a30b9ef38814b59f31965c79b047 GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*Z=?jCj|vHHzxrZbCx(B zJ(~3F*_wNfN#CY`^q_Jm+C*``zK))LWO#HTrGUC!}rRd$aE+1AG0?zqkE1y|HhJsMTS( zeOM?!pW!uYLTdR>odr7Qm|u&fXDcwXrF{w$mhuv6wG~i&C9-fECmxO?%IU|(OBH4lV3W-U|XpCin$^({k2 zrci5IQ<)rtE~DC$xlLEp_C1hDW%|)lKKV3;^Ezy+4ZmQ%%AAqc<|5F zZFe&>Smv?v95{NZj%As@Gw z`BP6#sGPCAZtkHYi(9&0hpw;Vn{d!&QOE1j-(Pm?EEBreA00NK*Q}n0H6fVo`Jr<^ yRB}E&@L@61NdByHS7)j|!$hB}KTJPde zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hl}SWFR5*?8l06E;Fbsutg7^Y~p1Gr-jnC3CAndt=LpvI5HEY1F z(xq6=(yoO(wCLmMXLtaAFS7+@-WZCV+rIY=d8SKG2L002ovPDHLkV1fZYcJcrK literal 0 HcmV?d00001 diff --git a/graphics/pokemon/baltoy/normal_gba.pal b/graphics/pokemon/baltoy/normal_gba.pal new file mode 100644 index 0000000000..3356572671 --- /dev/null +++ b/graphics/pokemon/baltoy/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +98 82 82 +131 131 98 +255 255 255 +156 164 65 +197 197 98 +230 230 172 +222 65 98 +246 148 82 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 0 diff --git a/graphics/pokemon/baltoy/shiny_gba.pal b/graphics/pokemon/baltoy/shiny_gba.pal new file mode 100644 index 0000000000..39cfa55ad1 --- /dev/null +++ b/graphics/pokemon/baltoy/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +98 82 82 +131 131 98 +255 255 255 +205 180 57 +246 222 98 +230 230 172 +90 172 106 +115 189 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 0 diff --git a/graphics/pokemon/banette/anim_front_gba.png b/graphics/pokemon/banette/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7d10d2c50f4d134628e819ad92932ab5a8e75c25 GIT binary patch literal 787 zcmV+u1MK{XP)nSa86PCCTsSPqdU34}5!tO}u=K zRaBCFVkvFsh!!j`I`I)N#|Eo2I1QwWKjDajJ-aQ6Js>H=g^8&!2xw|}bN;Cp3 zrV3+R-CTtiZVzDrYLu4CtMGZq0ys0YPGqyX88a;qnv!f1D-n#xW3GaI&J7qLmY46j zJOB*I9_hhHwt#(Dn1LPhfX$;sX1CiD#h!QEArA5H#UHADBkn~{ej{$>CGN%TCH^;Y zFF2qpZq}+@akGo)iaX_cJcwKKquPnP)ci1a;@+5#`xd(ww-5$-S6L6@#@p0zUVU0_ z#f`uRp2cA#H%4~%iNcWB2F*ktBT|~#+EYLN#ZKfUrt+~}CZcBV|)__Y< z6Dgw2k-R-|*Em%TE)J1BP=n9~gf37dvFa|xr_fcq2udqvtM1ip7_#2AVxCn-F2^3V zi+pSDJCE9T<{tRej!|c8f_r^xZ^evV_|)FIJ@cy_C2%PE)IRF<`XLS>#BX!+iWEz6 R8B+iN002ovPDHLkV1oY*Vov}7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/banette/back_gba.png b/graphics/pokemon/banette/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea5f30af9f097c266060292626b931172e5cd0b GIT binary patch literal 503 zcmVK)G=XVW!Rx|MOlYo|i zy$o;y@cNWwm;tU7@Hx8k@p_%G?jb+vh@Mvn0lLDmo*;9RQRE7I^4|~U^6mM5Z>>e2X{XC0*oJRUxQp* t46Km|C!nGX4CIFi6xJ^PSKaE5>KAwxyE+VKfL{Or002ovPDHLkV1j#Y*NgxF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/banette/icon_gba.png b/graphics/pokemon/banette/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5cbaed142f7cc61f6518655f40d9f06c56ccdb GIT binary patch literal 321 zcmV-H0lxl;P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hzez+vR5*?0l06Q>Fbqa>1Irhnr$ZeXd){2Yjt4sCBPqpo$_5j{ zOO&U?e|jnXcu+ar4H$r#T_PcF5lIISIr3D_%vID=-#Lo_Qq{q9)so=AI%p?eUua=b zB$_>KT_kf^R|f=4thb{Rn%G#wJfzvY#1;iA14tF)i-c59D|y?|U&qJ7_{UwCWAVE% z(U0732nIDj5Gvc#pird?)17j%38R=tVI&&Vg^|$yCXB?i1+C3tV$eyLul#rbARCwX TH*ak900000NkvXXu0mjfaO;O_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/banette/normal_gba.pal b/graphics/pokemon/banette/normal_gba.pal new file mode 100644 index 0000000000..cebcb7757b --- /dev/null +++ b/graphics/pokemon/banette/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 230 213 +255 255 255 +255 255 49 +230 164 24 +255 189 49 +230 49 49 +222 123 49 +189 90 16 +131 65 41 +255 255 49 +255 255 49 +189 189 205 +148 148 172 +115 115 139 +74 74 98 +0 0 0 diff --git a/graphics/pokemon/banette/shiny_gba.pal b/graphics/pokemon/banette/shiny_gba.pal new file mode 100644 index 0000000000..b6df68803c --- /dev/null +++ b/graphics/pokemon/banette/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 230 213 +255 255 255 +255 255 49 +230 164 24 +255 189 49 +230 49 49 +222 123 49 +189 90 16 +131 65 41 +255 255 49 +255 255 49 +189 205 238 +139 172 205 +90 148 172 +32 82 123 +0 0 0 diff --git a/graphics/pokemon/barboach/anim_front_gba.png b/graphics/pokemon/barboach/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c8dfda78e32b442d048a35ae54c86bc3c479db76 GIT binary patch literal 936 zcmV;Z16TZsP)JlaHnTg5(v0{ee~T5S*r z3G;6cC!7z)62PMlO)ZMAw>js7(6^RLnwC`1Bcl&KMi)f=o4fePGVWu^)qeaFVfK z9zgHv>(-!8c00_qE&(~5@bQV1+fpVib&VQJ@_5FN$Vu78Sys_?T^pbF13nPxESr(G zbv-e@?gxmlyW)`)2=M9<&DiBwe9X7XzUquAnymO%*#{zQTaSlfz+sl8FCh^E7Ab3E zDhv=}vBWqA1evT20bD~~g)1l$>yW}g#XQf9&}euX0*+ez_gqo|O9+_VwnCF(xP$_q zr8Exr5a2cOe^9{yBv9jusxBet%=u4s89U~B*O4a>pBy>N`GNrf<}xe;A-0o6eIgC< zul2tPo1B-kci3bk*ktrfZ}`FL3>lrn0WlgwC?Hf%P&S>0u)1w?$n^-1WwU!+8|~6iSox?4Z>Jfi)Um zJ+(XcAz(x|qU(&wV1$vFCTlsy5kQaXxd>b&nbi~FcP+S0qCD236NpcOj=qeJoOijw2imrq2tzxN2lUu+0-nr5j(ePtXRsVqC8mubImBVAYB-khmK{inDvL7j znME*5Z6>N@`2~1W1lh5wF2ApV*PV0fs;U~f0CPAI4_M&l9SE=+B1O%)fPi4F`bJ%- za|QvP#_CKl)-AkKoEw5IS7V=F`ilqii)Qe;uw0W5VPXFWPJm3 zE_e_M>9eE<5rjaYx0d)Cg0g|0goyhL-9%e$l1)MA&Hu88|J#{=W?=>4tpC#cuOmfs z=lDp`Meqk81;<>PeCLSchmba0Kw3rz;fL4(-s!;J`U{X&JX-{{cxaRq^sJ#?hfWQk2ffxA>cED-{#0u>HWa9IR{C5Sga5HpPR61M|W1DjO^Wdmv^ki#aFP(K@x zvjGHpJrgk6db!I7goXjAgt&W%0A0=kYDP;&s4{c7A&hpljQVuTBXR&;HYf49|5qIl pD`69#SE6npR>FSa|6gaFt}jnvs=8xkoi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H&q+ii2;LuWF1RxlswNmbVgRB;i@XK3~Ec40}Fp0 zsV|Y~KgeW4V2)HE3&s&6EPRYHBj^i^P6VyMTuNXPK`SsZP2B+ocYq;=1;YtJ+EPGJ jD@lnMx`GgTEysETsBUH8Mc9TH00000NkvXXu0mjfrb>yC literal 0 HcmV?d00001 diff --git a/graphics/pokemon/barboach/normal_gba.pal b/graphics/pokemon/barboach/normal_gba.pal new file mode 100644 index 0000000000..20167a5573 --- /dev/null +++ b/graphics/pokemon/barboach/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +164 156 90 +57 65 82 +115 115 131 +164 164 172 +189 189 197 +213 213 222 +238 246 246 +0 0 0 +197 222 238 +255 189 41 +74 90 156 +90 106 180 +90 115 205 +139 164 222 +164 197 255 +255 255 255 diff --git a/graphics/pokemon/barboach/shiny_gba.pal b/graphics/pokemon/barboach/shiny_gba.pal new file mode 100644 index 0000000000..e29a020995 --- /dev/null +++ b/graphics/pokemon/barboach/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +164 156 90 +57 65 82 +115 115 131 +164 164 172 +189 189 197 +213 213 222 +238 246 246 +0 0 0 +255 246 123 +255 189 41 +131 82 0 +164 115 0 +197 148 24 +230 180 57 +255 213 90 +255 255 255 diff --git a/graphics/pokemon/bayleef/anim_front_gba.png b/graphics/pokemon/bayleef/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..aa3606d43187beb17d45c21bfe57eb20bee0756d GIT binary patch literal 1183 zcmV;Q1YrA#P)q33M6dWk@W{wHY}tFcx5n{+#a$8*M&5>gM_qOTu5Zt0}(>{3u#j4%}Cyyr5Pn< z$i2d{{XRX-JdH-5ru|%CUATZYm!^<*|aDWpLKY1Ee2O6(*>Uo@4;B2$%ARGP@080?7=4;t3KVeUi z7&S9R7xec7=mPZRS&ZWkzIym*3>`IKn(+B=wlz}Zbue44Uk+?|tODBYHe|ncm4na$ zBm3hY0f3;hQBg;oJvFyUw&rgjT~eyIRXql0%EAc?kZJP=o_0JdqiF_ZO8EFf7h<2Ejp!zjAu zR{-)lDK$c~aj6{6Cv4W{VRAHr}p zyDSyJIPy1(MM|LCB?wdt;2g6o9YmHz$ng1o-pJP(5PCBApAtfn{XQ9Iu#1R=*B^a3 zm@f7zh`d;>hb)?2Z-N1vEh|7z0CWGjGoNhOdan&X@B)3_0L-N)@#NVp+q>NlZm@Uf zKO-^smvk^$q^E52_B9?Hd`-5RK?qzeQfI&>TYBs7Er=gqZt>IW!O=5H2J>l3&-Ztj zX8!9OJ3*YmBuVK=lSPyFYJ3t-Q*x>VtSwzH9in*re?lPhvJ{&w-{d%enbaXfJ_rQ( zsZEOaQwkW^FkU-#y(iLZG~s3}0Q%WWIq>M<8(zDasdnORmPvN_cQ_IrD`mQoh*$GW zg(NXg2T3@U1NrG}rESVv-COxEoM~ElGrh})Jn-y>bbOePuEG#s&GG@pEJ-$z2r1EE z37;h*m3^=Pg8ZOJbAM1I{x#4DxPjCGxq;LWg@GvZ@4A8PLKsL#2{aNk5O5`mQUv;g zc=^~Bf4BqU)fm9(R{UXi3G@feqcVRe0A9k8`a==i9~`Ma>`JV|S8{(4p}Xfwf8c4) zuJZ>?$8?=PhE^&l0DZX~oCz;5^8L-AP6g26`xhL@)g+}}88ALPc<(#S xuyTDEyWdv)!pm;3PCwTNBUAZ<`(M?EzW_02L_5h4UTpvX002ovPDHLkV1k^7AMF4D literal 0 HcmV?d00001 diff --git a/graphics/pokemon/bayleef/back_gba.png b/graphics/pokemon/bayleef/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..63ba17c5ef995ecaa42c189760e30577e9244ad0 GIT binary patch literal 737 zcmV<70v`Q|P)Kl)-A-KoEv~=|O@X`T(UMKS8ug4~AZnZJ~x390N?)1_&r}Hi4i^M1dpK0)PQvMnLTVFcy51sJI@0 zVt`VJ111!mbVWM9{nHQ8s8Vr&(zWVk04VBCm*d4??E$f_I6mp=P>j*fA=We9>d8=K z)^AljYh3+lLVy_iRmNZe44x%PB7_)ux&zE&nmFLyJ~T-YQ{1p`l)fh0KbiE!)W*W-7ep!K5FMfN(BB|sktBvI$E173vy+VA@g5Hbq@ zbewLsfXF@sfqdD@r{bbt1#}iGrK&E#h3r)k>DwK!^*Bf&Ql*PAyHPujgA^kAA6*J7 zr8_|OQ=oxVdf|%D9dJ}6tQ6uPrZb7UY7Gu|A}&p?k%1i1Gho2Y3swa^^#kc%7pXqF zHgvRSG=|TOC;urhNj}5B|Ai>P+$8Y5COo_WB@EPc}Zodd=JpY z5d+eprw`1}vyWI@o4i`@fVy-9 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IDM>^@R5*>*k}-0`APhx0fprcaAt_RkB57!r+ULTBsZkNGw38hd zreJm^c3~O?vR)%^kvgHW-bnfkenR}|14MMF7p*lXrPilwZRlo6S}F#t60@uw)FFXn zJC@{no&r97J=^lJ4FTfv1JVJ|72JJoLPRSmnL7aV=*d}Ia}&CRrUpSmuh7(+E$`${ z$<&b;#t?%UcF^D$&>g@>aMQrR3!dQp!lKd z8y8{J!iCZE>lGB6=&V%0CWF3b*YeiVHYCxtBc1s@-i^cgmH?!Gv^)jL&*Q10dzUZFwo}UX=p2mQ#L3@cKznk@>2Zf$2UC( V%pf){k~jbW002ovPDHLkV1iT%z5)OM literal 0 HcmV?d00001 diff --git a/graphics/pokemon/bayleef/normal_gba.pal b/graphics/pokemon/bayleef/normal_gba.pal new file mode 100644 index 0000000000..9fce320093 --- /dev/null +++ b/graphics/pokemon/bayleef/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 255 172 +246 238 106 +222 189 41 +164 131 24 +106 82 0 +106 197 49 +74 164 16 +49 123 8 +16 82 16 +197 197 197 +98 98 98 +16 16 16 +213 139 82 +172 49 0 diff --git a/graphics/pokemon/bayleef/shiny_gba.pal b/graphics/pokemon/bayleef/shiny_gba.pal new file mode 100644 index 0000000000..573c02e75c --- /dev/null +++ b/graphics/pokemon/bayleef/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 238 197 +255 213 180 +230 156 123 +189 98 65 +123 74 57 +230 189 49 +189 148 24 +123 98 8 +82 65 16 +197 197 197 +98 98 98 +16 16 16 +222 156 115 +172 57 57 diff --git a/graphics/pokemon/beautifly/anim_front_gba.png b/graphics/pokemon/beautifly/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7c1cffea856521c3b19608b54687c2c23519126b GIT binary patch literal 1081 zcmV-91jhS`P)nmVZ9}p00001 zbW%=J06^y0W&i*Kw@E}nR9J=WmN9GFKorOCGG&YIuuUCsY&~K@C~0W>1=?af*Cx_h zEUKel!<#b&byJ51cdNQ(Yw{_Y-GP=YrC{tpyA}1_NwzHOBtr|G{OC~fe*VAr?oM}q zLbj0)wjocS7#jdE%0;-jK?Hxzp#<1zAy8I=5@NQ>S}+JL&0~e4`pk$cm_@b4KvgI# zPy-<)cv7H)kri;kLW$jBk`@@9XR81JAaJIDj_~>bwivAR%i;LOGIoQZ%41rFvqB&M zmT?x0a2+r|ncQRvYI$J6n;;ksNezF090N!!fVS`~w;qHaN6Z7qg#-X+A;B%-4nALB zg+UD*Az%VY^p;aNV*gqKzJ(LQGTI9X1`2>9AM>6ZQrH;@JV{rdu0H&@3~HEf3l;Wi z4a@u-2~ z;Ndv*r_<*Z&;Tt2-Uhw|rgtow=PI;tOh530^V{ikeLyv&TFJUUI-lGY06?HQ52D}l z#A^ZkAPA2PI+5qK5WvN2V4iUep!zW7uAa;Z60EsC1$IHDHpl-G#^7mosSWi{O7E!z z#|oDI#2i!VFAi+x=M^balyOz>g!*58|0AQ)BL!xs}NpaXWL ze{j2}Nur|t4B{WWa1y7D*?@rH1Q7=N4B5?694d1 z6tqAS|4>uUs`f0z{-GxGx>X>Fe?ZTr7r?`y{DafC^#UaE51u9ZT7bs>!RkButzP&C z4{aT^v;xvU9EBVYo3_W;KOBYCf+3dv!3MMsnw?tu2i$Bo%I8!6;D~uecb>6tX%9l5 zv4cB(3yFU~gYiwRQ}!9m`Um+!@4@3NkopJZ4|X^-v%tbX97_PN36}Lyseib~FHK{m?-R#6as9lV-rzQ0d1(EX)xhA&$;eW&*9j11n6^=Xb00000NkvXXu0mjfCPD5@ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/beautifly/back_gba.png b/graphics/pokemon/beautifly/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1eca6edc97dc370f39ebafc69ab498d3b3be8d48 GIT binary patch literal 771 zcmV+e1N{7nP)nmVZ9}p00001 zbW%=J06^y0W&i*Jfk{L`R7i=1mA`J=Fc8K`!w(=5Mi6C4qC=&jfa_PNfuOsE%6kGx z@6k;e?WxRSbk*Z{7lNR33^iLO_wFcJ|7}i+@2Btk?np60^p@)X)LJrgE&$+N0^ov& zhH(!`0jFvl&>6Qd-iHR3m!lF=+ZJYLLMSROM*%9%hCGz2gHaP*4;&7hnwzS=2c`$` zDnibL{5}BG#L}5MLqJU^F#vd~PAZ*FO59>~mEfw9s?M|}mY>KZc(jE3tL>p|nF-GC zrY(tw1WqehS|DvmOzZkQhX5ftxMsk-i6-Hf5`Gl<*W_T#U#CTYm4FC6Eb!Lc5Lq<~5QQstXahpoam68;cow*A z0g`9Ejw6%+cNE~|hZfirO@NLahWJTD3G74%povFOgp79n=JV$uSb;PnM1@HtbH&UMDXgAK7oAS?QSAKQ9l1_0i#5>PGxcG(W0PQXejRJbb! z0J2c(_K>?<@SqD2f#3MyaCm26a^D6deg6PhKjg2*z*pS?1lNHD2)OA1l7Vk1kbfGp zz4_<@q6FUa{GV$!Sr4EPm=gtFg*<-l`XRA%O;-Q{VzMYYZE~IWBhT>xYap7VR$OOb zUIL;7=th$Y7F4$i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IKS@MER5*>*k}-0FFc3v`0%Xsmrr-dkz(xAVtz2zO4nvhDnaL?K zE_?}JL||xKe31!mQ9xQ8Lz&Lo>Fe+A%>F0Dqg7P3bD?w#!Nzlo{ElZ9>DEpN=iKz} zl#7KUdSzFq_Ul*@PzOP(K`>WbjtIh!%C^1D8-29FP`o^!_8ll^gDkS5NOetm5>DC2 zXNo3=<*hDzOB@I}FO_AIq`J|&JsaA{_D@^XId@1S#CfX#OdU}#kZFt~VZ0zkRh>6q z?`^d4f{`LZwK<>#!q%}DrnkP~?k0;HK1xMmfkSB)IFxoZx7b!Ja4_!vf5c%nVZb4t z8Pr1XI1F8%B$5KS_jRV00000NkvXXu0mjfz(U6? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/beautifly/normal_gba.pal b/graphics/pokemon/beautifly/normal_gba.pal new file mode 100644 index 0000000000..65a02145f4 --- /dev/null +++ b/graphics/pokemon/beautifly/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 246 +90 90 82 +139 139 123 +255 255 255 +172 172 106 +230 222 115 +255 255 49 +255 255 197 +156 156 115 +197 197 115 +238 238 180 +255 255 238 +0 0 0 +255 148 41 +156 131 255 +24 24 0 diff --git a/graphics/pokemon/beautifly/shiny_gba.pal b/graphics/pokemon/beautifly/shiny_gba.pal new file mode 100644 index 0000000000..9f04181876 --- /dev/null +++ b/graphics/pokemon/beautifly/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 246 +90 24 65 +156 65 131 +255 255 255 +172 148 106 +246 238 148 +255 255 213 +255 255 197 +197 156 115 +230 197 115 +255 238 180 +255 255 238 +0 0 0 +255 148 41 +156 131 255 +24 24 0 diff --git a/graphics/pokemon/beedrill/anim_front_gba.png b/graphics/pokemon/beedrill/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..169d1481237cd5c229befc360b971fe14df32cf5 GIT binary patch literal 1431 zcmV;I1!($-P)Eh1px?oEY zz-l&SkK^l4sV%6O0MxGA-HlMt2{*MV{!IZYYBkrFW7U`3ZcVPUUIgH{tGUb4g{mTu z)ii1|Dk76)7m1DYpU-gU5)^t;t1&4t0R~!E>s>Bg;e>}kwyrTjryiw=M$Hxca)T%y zQBOXrH$+2YbPAC7TGwUP)sIyZU7S3r3r!P^=?*CIe(Sp4^4E2@Ovs2gmf^bI-H10v zIjgt0xl;IWkB~kW08rmMi34QU>HoHp&+B?Q%Ud1jzzAF~ww|S$^ScDr{;cv2TyX%O zx8r~1*?P`2UtwXUx{dvRop&iLj5wwm{10CC|j3H-y>&0|Af+NSQq~;W#c%W^~0YLVtH3kM_fGo%s09=Fs8B74&0oA}WLjVW_D+&uwJln*BLBpzN ze$3;M7s2zxe;sUx2Su3_kbs`g7j&cK`Oy)Mf$&^ZZ(aWmds;Cf0Dnia`ZPRx1il7Y zQy}sfwhX*Vunr$14-+742#^eX#7>z&W`IyYmB4-MWN8M-jvFSMQ;}yOTkXaGg+&7R zN*G45QVO<<0il2&%vG^ZUSK!|gxv^%On$XA(HmEIFwxAzJ7q#<_K0DGe0#^61B`uV zz9i{DWNYE>4Z)O}v%_uO)_<6p>kK!P7rF`4`vBg^9KdR8!vjmI*v zY$X6z7mLwQP_~o+sCeAm8E?i?07csv?n=PPF5=ZM5+0Pg>-QJsXTo{XY}zRv99Z6z zfC|H0Q?R50V1_{xE;;b~Il&TraIc$7m%|@f1$SM)_r2W^8%ZGB=Vm_t;hw%)U3n46|;)m>@D9!t<_9uSwM#ed_NWF3SZKkT z2cU#)pXV?zx#@tE=m`u=ZESTapyv3t+~I90^)aziSG58Z4#kAw|zE=V6J=0nj+c!(P5T4?th4<+krm^-_HH lGB8&lm_EsrQy2dK^)E(blz{8yeqR6p002ovPDHLkV1g0WpQZo+ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/beedrill/back_gba.png b/graphics/pokemon/beedrill/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..166c399e5fa3959db731c8b1695fb8d14f0c84b1 GIT binary patch literal 734 zcmV<40wMj0P)KlreAGKorMsC{h?|>BLY=l^Ea?kaLGfQHS~%B2|bA zSR-XI^b7Rip-5gZQ&d`1nz3uMq;roWJU}P&e)oU> zv)?mgkMaM3SNXCn@1QbEvW>t3$P#52NHNWYvUE!YmgYi^T_P(1#q1K9DggSXHVFb8 zWh#-+hXDOcZ8a$4Tn`2s(0;5@=}S52nv>Y`J<$-N-OcM*!WWH3lL)&!V^74c0ldpC zKu-fgi2d^)cEA_f0s-I7>=s24`(ID(7Fs3n{kgqDt(F7c&r_?3H?2a#yRZYjQbE2x zR}U&|14;!?`WIH9QYc92U)lk43{Mj9(w1keuXpS4JNI&?2P?jp1EPCxyz&kj$oAoi zfEViTrlU(^>rl!z5o96TY&y)$*i~LNJ=u{y31EtMPlBm~G}=9C7b#aA%F~uRfF5f^ zyxt{%BoyUQVYUe{T%UYwwDuOVgE}@ETMrYfE+K5zmf^wx#h*o5UspdrgHVVs5H8TD zJEe)IS&|Yk4~7tb+8YCeC&kUfyvlKsB&n)SgW(t!2N1(JycISgk?}MqAcmCz;Dfoj zY3_wZbz0Ya8jL^#WBR<+0?94Fk4b<>L0kY3A1MtanBdKo24=A41WX~6a!EC&L7ggS zYX}C2Va{Fd2E$3e0Jt&$-Wb4*Lv8?=ATDA2Zp3+=A?1Gq0Xy6!0Uq(`5a|6vKyVas zuAj$j2JoJMnW>-wYJ~$HMO*{yS1_8zIS^_A*M*5RfUEI3+X(^#JjTDpAEY~7kk#kq QfB*mh07*qoM6N<$f>9PhTmS$7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/beedrill/icon_gba.png b/graphics/pokemon/beedrill/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e6471ab71e69337cb63567b7fffd30d8a0d0c9 GIT binary patch literal 437 zcmV;m0ZRUfP)DV$@k}+L5?eSfJi!=PxIvVWoB#c1(7(GUq4h!Xx>9$Rg;=(`x*nxDy4=R+BlQ1N?nFeNli%TRgEv# z^P_3D*#|(X@p4_Lm4i3*>HaZZ7P`^a`wpDhawggo_H(gt|DCj(;})bXyC7W`_r-YC z&4r=6x6(i?_5Uj>gnNH5Pvr?p59yR6Xg30PP94AqTgN63jI3PLPHZ%L(Gp fVsUvKOI_42DF)Hi{b3Ze00000NkvXXu0mjfQ}@50 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/beedrill/normal_gba.pal b/graphics/pokemon/beedrill/normal_gba.pal new file mode 100644 index 0000000000..24c875141b --- /dev/null +++ b/graphics/pokemon/beedrill/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 246 164 +255 205 74 +238 164 49 +139 82 0 +238 230 255 +222 205 246 +189 172 197 +164 148 172 +255 148 106 +213 24 49 +156 0 8 +98 98 98 +24 24 24 +255 0 255 diff --git a/graphics/pokemon/beedrill/shiny_gba.pal b/graphics/pokemon/beedrill/shiny_gba.pal new file mode 100644 index 0000000000..f35f264deb --- /dev/null +++ b/graphics/pokemon/beedrill/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +230 246 106 +189 205 65 +148 164 24 +74 90 0 +238 230 255 +222 205 246 +189 172 197 +164 148 172 +90 139 222 +49 98 180 +0 0 115 +98 98 98 +24 24 24 +255 0 255 diff --git a/graphics/pokemon/beldum/anim_front_gba.png b/graphics/pokemon/beldum/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..85d936d3e7e8c8b82c0352c09d7dd81640d62080 GIT binary patch literal 723 zcmV;^0xbQBP) z&CRT=tdxtCb82(m-rj>sO8;tV)k;!>&Hw-Z|5~K~N`uuoVze^RRe)=00001 zbW%=J06^y0W&i*JQAtEWR9J=W*RhV%KoADtmAH zXyaUc%B)3u%Fa3kUA$`$2&ITU%*Ka=bUS+`5@g!>ygQEL>>s5r^?%j`%s$)Rmdl)& zmWy%;bq;7ifXosDBHG*%vz`S&$cfNd7N14owC({+CG~Bob<+auge4|rsVi&%s!bZ) zmkS1X+G@K`f-M7!*lBH(_c~oH))tIwI$gOWC@bO#eG?Aphh~=@4Gb^@fGz=AOYc8g z2196#|N0mlZt2DGRHJ2JeUq5smgdKSun8d;ml(6CcnhL_1m^J`h2|j}>IVj`OWnu8 z5D#j42Hu&(5Cz|X!N!j(B!D8c*!14<3T+Z73hw0FIs#0BIEc4~_W=ANfsF&lA0>Vl zK%pz15zxJSn+7whwO%7O5>UO3ef)7FftlwvrXKg7qLVHk1<|W4P*<<7^FUqQ!5-4_Kgb;!9`WzuT8JrV@%Yc|5P##kGmO`N5#RnehnwSJB zwHCEE82jyB02>c6e)v`xqNqH-c`=|!U>EpF@eYX?_HY+EUf;^!sXpct4)7@S`OUN2 zm`~*Ib$s&>J%=P) z&CRT=tdxtCb82(m-rj>sO8;tV)k;!>&Hw-Z|5~K~N`uuoVze^RRe)=00001 zbW%=J06^y0W&i*Iy-7qtR7i>Kl(BBYFc5}O)sY~Tu>(WI)S>Ud+JX18GSQJYKu+0F z&S9?bxm03lYrA~|dgq9RoLQ=Fcu0o-%l}{OKN$?J>pvI3C3Ogms`eN3l~StC14*w; z7D&3P@h1mt=y9#hTTXA3(yI#wL(+KycgzCxd}Yw#w+#4B$AFm-5BvrU*nJMDUXT*7 zSxfo|HYvejqqSr)GOtQgf&&6tDPgBHB!CDhBd7`(@BpAe$oNn-fa!on07h(Z0zd$Q zs+$Ca4Dh8OMS!;=FtWN~2MfV)R1XN&BnKb|3qmCj3_Fm0Fb3_mmp}kJ5D<|rz2l4# zTb_-92z>yx*3qXC2yk%TDb}@KTL#(~<9VYB-K~}rwxpj2>^i*$-o)+kc&?ueYC|Ut zLK6ruG`gmJ_R=0w0v(ZQJ(YoG5E{LsrdpfoP8mS}s79FDN}%ZjMKZAIgFr60oneEP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hq)9|UR5*?8k}(RyFc1XQrip%%XZbBF2vMtR;_p~+k8tTq1Oh?^ z!9_)soc)1d$aOpHz!qoB!OqGq*ZA0Gj$VV719YWEB6vkCi3Dg#coHbdUYSu;#WGJ= z6)3F$zkHqI1?=w_J1NhhvLE5PwB}rSq~f|{^B`{3pbeu20_L}qh|;Oe{{WMcS)|~0 sQS%o7X;$Feve{hP<)hyJ9e(=`FKqzI|I?9;rT_o{07*qoM6N<$f?NQCcmMzZ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/beldum/normal_gba.pal b/graphics/pokemon/beldum/normal_gba.pal new file mode 100644 index 0000000000..41b48bc089 --- /dev/null +++ b/graphics/pokemon/beldum/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +205 205 205 +172 172 172 +148 139 148 +115 106 115 +222 222 222 +131 74 74 +255 106 106 +213 74 82 +131 205 255 +255 255 255 +90 164 255 +74 131 213 +57 98 180 +49 57 115 +16 16 16 diff --git a/graphics/pokemon/beldum/shiny_gba.pal b/graphics/pokemon/beldum/shiny_gba.pal new file mode 100644 index 0000000000..8fc3bc4be8 --- /dev/null +++ b/graphics/pokemon/beldum/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +238 172 82 +205 139 49 +172 106 16 +139 74 0 +255 205 115 +156 65 65 +255 106 106 +255 74 82 +238 238 246 +255 255 255 +213 213 222 +164 164 172 +115 106 115 +82 74 82 +16 16 16 diff --git a/graphics/pokemon/bellossom/anim_front_gba.png b/graphics/pokemon/bellossom/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1549e692b01b0f60804fe7c4c5c979166320d716 GIT binary patch literal 837 zcmV-L1G@Z)P)5cX;S)gSiO67%9ys})XH{7!aq7>RY0s@3S<-NPHM5FHEzb17ru(iR*+Iy?lh<0HdldA;CA=1%enLB&(i=6X9<7{SMt2q)9h$C1w4S`0}v_Q z4PCbk0XQuB=R;i|KF28Jk>jc**8^v2Sny%TEu(Yo2B=c;a^b27{WguMGK_p$^Lu!p z>ig?j*Sh}3lBgIw6a*&_X`MenqBcd1KU_j4Cjd;a>~^KH?!Z%!>`uhu{yV!KgFonj zt<0C7Se$lpY=Rt%Su2))p6Mkf5u^B)CIb9HuOQ8MoVDnk0DnLnWnyhpx_uA+fB>Ye zC{;H2111>8`|M`-!+}Hv!f5T@?3h-Dvax&!G&on3zL*pG~306LV(Sqhj0%UK4J&3A*}p?>w+8l&M^$&K@f1Q zJ~SY5EBP2yz=>|hnTjC%7t0FJ`-KsO;ZL_7;Eq$Q1VrmFkD{>bu7FcSauhcJ81z-H zzYov{^|M+kQ%M|@aOM> P00000NkvXXu0mjf`3Qs> literal 0 HcmV?d00001 diff --git a/graphics/pokemon/bellossom/back_gba.png b/graphics/pokemon/bellossom/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd8b176ef502da5181a901329355b270a1a3d50 GIT binary patch literal 633 zcmV-<0*3vGP)5cX;S)gSKlCf^vFc5|{6zCGc?;yW{sRt-(PF*<3LzYao$4>5= zmCn-D&eADB%0&-wDv-gOPEd9$@GA(gYP5|2_9#nsL@8^#JwSrE5t;y`ENB->CjcU*W5z^@33PyM1sI<(zl@>N35_5^+_OqPnjfiSMbH+j zRU&o(m$vpJ&#M4ofZPHy3h+E{*Z|rdWP}?EI41Zd?mB~vaBl*JO&{0~)Cqzbedqw= zbAmv7)&!)CY8cfCh!)@iZrISs0GxohJ!+SlV58A7paRgkRT=KsNnB)TUn=*h`6s9Z zUZ%QxEwh(^eSp!RIGw=Do?A=AxC!7o?*(|{i$2?NM8S{#D}Z1Hucdozu9<%VdWd&) zQ+&bCMDd{we6#?n#RACZ`V3IV?TEecYd{oLL>m|sTraMQrU0{Avl{3iP$uG&3V&Yd z?kwIfg3FcEg}#^a<}T2kVSkxik|n?XqD9^;g3orqbZUHA`BL6ZCV3}dDdlqcn^yV? zr&9|!%)hTl->P+W8%}1|?GtA6KkN1SHdJdPr4AM_m|ZKQP^rpShj|-#(?8H(y(?ok TR5n)^00000NkvXXu0mjfzuyvD literal 0 HcmV?d00001 diff --git a/graphics/pokemon/bellossom/icon_gba.png b/graphics/pokemon/bellossom/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..443d7a98ccff5671a910e57d8b1d3513bd1e992f GIT binary patch literal 363 zcmV-x0hIoUP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H=}AOER5*?0lCchgFc60O1m$gf0>W4qS?QqZ+R@1e!J*7F5nsl& zkwHu#v0(sBOz^}3dayVfZ|Z%y_P?YbA-`1~%mA2r!o0l!*wzRf`o2RWkM6uQsi_fY zBxnRYScu22LyuhVYiV%IO~?)4ltzjZ>dEsS2##)eM+q(8qmZm=IoHVus$$jh*91gG z$h67_U<;OoELChAxm4MT#cqPwDz&VP9UxTEoLaOQ$;ltp&jnf{QCag=HKD}lh{q8AQNXC64(F5aEJU&spm za4?NMu=9Q3^6cz`TtOIqnFkRR+Jm~Ro-Y=d4hKsfM2^0M%a7H?i_D89kD@gJTvS&G z428uI&}RVm{Q61=`L>_tyqgm5>iPV-{k6N=WZ?VSKE>`Xx2Sx^{0F^C8&0~40>&aE zP-Mq3ix~F|`828B7z=Pi2}fk$#uLT@x`bVUQ^Rud)lkB&Y6UPh$45>8ncQpz7Gs=8 z#2n3W$K%xHGIXGMNjL}iLacOP`+sRpq_x@y>@tU42}$e&DU@Y1Q?^Ba&DYTUT;?T+ zk|415-ls9%1P*bCe7;c+NmDuLrh`uE z4@I&e^2$j!%4#4IVwToPjagk?D2Kks(jRKorNDDGW3jGm-wv6N6b)qA@5)@`nG->|7`@i3{jxX-?)g`A0p?zGMgnaM_e^pQz|!>A?9R(k@yHhP3O)w z?x15UQ4&^|cBG6HLWK*E1L9LE(*t(n-A}+$y&97NIzwT{9MXMs5D!wB+}y%U044u@Gk>2iwHpRI T@cWxc00000NkvXXu0mjf#&O*G literal 0 HcmV?d00001 diff --git a/graphics/pokemon/bellsprout/icon_gba.png b/graphics/pokemon/bellsprout/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f67c94eecc907f3df1c74f724b21ef1b88506520 GIT binary patch literal 252 zcmV zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*HdPzh_Ldu5UngIzHq80000r4IsvU}=HLj?=;X3fxylFc?DhgPMyjGlmC`zwuN_yO{^NXltqCw($YBI}j^i-qPBNg?LLeb$*FcqijQ2Cfo=$?VTh~CMatl{aj51(Zdpn&6 z0x-uWRtK(*%fNOD+}j#r6$Yzx4NkHUOtS#mpLKR)!a1**<{CW7LI{XVt9oPG+G}?n z{BF3^b-chd0p4anWhD}4T*zNtSij%t?82~*W$_0ljP2<|NEr#oXV3TA?auBNkUq8^ zPu5^_^C$yOgC*fUW&iq(W$gmoTVif620tF#M^iwMj|J0SZ0mb|| zjiF;54;3)B?Z@v29#{u3;bQqK`*FG4Mh;lJjf5=UwolIA3v>|pHI0|)$qX?6@)|fu zB1Ky^LyqMKo=YFWx8&Kj_YDE1_G6e6E5*FL8Sq!HHp`>4GaTmY@2cRn7A$` zacKi=8uTb)z~;9ieEDMhzc#A@o>Dylo@|zYO8f@H#8c`I8PIq&J}Lp+^VK2trY%Ekj9#^IvT1K> zQO-M_Py@@7C^Z-pv~g_Pn_86ft_Z)~mj?-R+zTDd6^3 zIJ5Pjg5}v4W^p1l7 zMhIXKkH6IN6bY=gniBZ21_+=NeFr1K6?Bdt|H8U&s#jq~9^eQQRe%GD!}I>%q+F%9 zPu6t+ry7l?(;cv}1f^vOW6ZySZ1Nt!zUoe?bFr;G1kVoq4^no#64}9|CI)<(iImsZx7q(XbJ{Q|*9uoDGs1`6?{d|CjstpAGhPVqV52-#t zty|3ZNm|DkG9Rj}s7LhidIQg(bl~4r-H&q_<%BF%QT^J81Gj{r0QlIhW8GiBTA8K)IU$#KokIQORy5;e1M=For$P-5Y$7$;%~vwp?rx9 zmx(2V&r3RV$u0Q+i7IvOg=}3a6T;A?j_sJJN-W~*d*^cqP0P@kH-MD)%lpR(!+4GV zj6FZRdnxaKABdY5gx`k{BK$`-oPI?x01^Jh>_MjA&r3jT_gRC10&)wK@MHb`{vg;c zp#a8B__IH_5u>dVK_U8|`yvXqK~dr>bctjzjElt1$=&lFLW)ERzW_VOR#p~0?g(`x`Wgc4H(mk{rDzD^O? z6hdO1nkoSCQGq38E~V#hsEX?|7Yey1fCQ#xk`*o>DXfVboZPFreBk9k~ z16^PXur?tiGEb{nv7`b;2ijsXA+?z)lLHNQ84j^ngAS8qW|~=4+XPK_-C^14$SMGf z6t4l-XtH$yx7A6iX0>7^1;8nuXVh75Ap5ys3oWc^5T67QR+HLj_xXhEh3wg#K zP6*sP$>5ET5YUDy&_aND=n(;U6eD=Rkzv%;UkZ-oIT|o2=N$kd6Jm^D0iEGU+_})8 zEgKzD6Ifyl9q2-J29T-}T(wc)b~rZnDP1xR=A3(;$B{`w0x_IU5wvpPaR;XCb~%Pz z!m|;>6@WTCfi<|`SOD_#t_0w(ZpX#~-jD{iOnLtOxy^gTngWQ81=|4gJa5B~-l4Tp mV7UpPht6}yLQwpRc#Yq%j;K*f*Werg0000DV$@lCe(1Fc60Q1og&_hpv%Y%19PhV#3Saz=Xu$H7~&s zCQp^%?J5CMr>G=$RHmcEq~~~r1#a`F`%h>46XI``+-HD_40MY2f|3S#X)98k3uLYB zl3W0)`XvL2sC~cSh(`q7-xt*>f#8igKdU%lF7!LKmS_Y752VdJm$`ry32yw5&rErsQB0CIy2q>UV@Wfl-(^B@reXGzfDj@J`W~ISNyU rwV4RxRuCqB)S=A$aDJV1{LGI}$9Jc09+F|h00000NkvXXu0mjfOZBs8 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/blastoise/normal_gba.pal b/graphics/pokemon/blastoise/normal_gba.pal new file mode 100644 index 0000000000..632bbc021a --- /dev/null +++ b/graphics/pokemon/blastoise/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +213 205 205 +148 164 164 +106 74 57 +172 98 32 +238 172 90 +255 213 106 +230 172 90 +189 139 57 +156 106 74 +131 213 255 +106 172 230 +65 131 197 +74 74 131 +16 16 16 diff --git a/graphics/pokemon/blastoise/shiny_gba.pal b/graphics/pokemon/blastoise/shiny_gba.pal new file mode 100644 index 0000000000..d0547a7065 --- /dev/null +++ b/graphics/pokemon/blastoise/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +213 205 205 +148 164 164 +32 65 32 +172 98 32 +238 172 90 +255 213 106 +115 139 41 +82 106 8 +41 65 8 +230 230 246 +197 197 246 +139 139 189 +57 57 106 +16 16 16 diff --git a/graphics/pokemon/blaziken/anim_front_gba.png b/graphics/pokemon/blaziken/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8639d034cd1444355abb3a880f11f1f68f8d2662 GIT binary patch literal 1484 zcmV;-1vC1IP)PFwdtkwkat?m_cQOknHBrK9QQASKSlSQ&z-1$qHZZY5A6(W_1z;e((oeU z92aSC#0mMugDB*Do9#OQYG4Wj&spLyWxZMXYh&V0WAoUq9;@emnC2o*L#Q?~z^PsUz zv7(WpTsDc?aUhU9%4piUB*W|EM1v2fz_$09jl!{0^`IHgt6XBxE&MV4P6jxJ$@=o z`(_2!YQRj!6@|0`z_02q7cdunOr%zVj36;0$qiNGHN5{rqy(Xakd?wESckHlU@2Sy zKieuR3CXPC3@9L=WFVRH0N4>l)Z=<7k0w|LNFJ7QrZARK&U$jG!80AP%zoA-a@0s& zVXukv2GW-SFcZUdKSPch#g}^{z~hqvN$es=jbf*ZmMj1*xd2T7bQAESrOuuMc+lzW z=?5mT2f)(tCIIMKz}S=Po$iT1mjMTMeQY0q?!NilfzbEtO*Hq};(l+Kt)uHUU~I?C zaPS`J+JUD2l5NsIWO%CEniy*uS@qEj_AXgt-G|i3Fm{V|**vh-c+h#+8GbMx7=Uh1 z@sM(KBpJjXO|JpT?STAiM}Og^Lk*?#ls5I8C!lb*e&+(zvjhb1z58SQ4?;Ov_J!h( zQEt;WHokTadn=d&Tx{K0CYv6Fl;eDxtu1gBZFho?gNthkWrb{d5QW^m_C~CM2_ux8 zTM7a;@24AtIXxlnLZCAFB6E~r1boR|h@z~Cwcn6BL)N93^!@wuCs|4E=1}LyG&tLBye(|LIbE4Y0S?AZ7F>1+=a&&B{Kksa^?*QpR=F! z;?L8h5X*uKONpqo`i78|6h5A&#qeN?2LwgAqKpMlEw;oZ;rex$##s1#rYf zS^TjaA&ua|&|EOxum@BHKfD1xY@6IBB>!k&nG25D2Rf()XPHYQ>UQO@T#wZ0?$BI7 zR84zOCWZ-%9>#-Hv(a74T$rcqfjywrwRL8~?nVV=`p=1ee&of6=HPR~Ra;@Kf*uuw z)mNcf|M>R@Tw1tmkpPul!Ppm+~>04(v*}Ck9ixA zxw#TZCDVXhbpbekiWv~Ol=8AD*suq=oZrKN_)UM2Gp&kC7wq3;&Te-H;s-~73X5UG#u!XaK&jbcsB5@)s%2qJP}9>*Y_L-gTD@rz?#Ns^wJ4%-=F3mZk^^I?w{r# m?w{r#UVQWq$KyZt5B~sUd#fv7)coE60000@J7y>~<&IG()WFgMJkcj$;{v`c9{lPV$97-z4AvcmMaE-sz0c z|3vs6FkZd`91PTxb#4T(uPom3Iz6jfRil0AX4clwXwW$1oJB$!eK+b~xCkJuzR4ih zIh$Lj#tM2o5Bfq(25nvfCWAIDfw{o|(_5u8IyV&fxd0fYHzu9ZLZ@^uMFNYrnFXaL zpe+^|W1KM~km=wc!USNNhuU8QvI4WXrzW7(XVeHJQjFvH!3f9#X;ijY1&RVYZvcr} ziXM2;gZ8T1<)*F%6vJwidc;jYr|5kK$Ekb|^U@$H5&+PV&x|RcM`s6Ap+{0DyXS2pjs!0Ow1Vl2#6lnJ=J6fp zpE&C0VL06iVB_^qf?=@e zgZG1wsRZm!%dP^*wMQOU3^o9KbD(Ibssi9w&+`bxj;E`Z0GgF5!w~eo00t?-7qDN; zV1?ntQ@R|>h27GCk*CQSfbgYl+eHc-!nDY7ILrwlfQM7ou=c~SkR^cd#??OHHPJ)f zva2J#$10I#Yn3kXrb6sr#Fn3?<3jiMukx`U1XmMP=Wy@u$Ra`TQ*=6!4*ppUH~=8H zO4C>AF${v5g~$MLhOl&~0~VM{0IhR}YK{XaO8~G9=MGhiu`eC!z&{PYl}~#qPQ(BJ N002ovPDHLkV1moQg46&2 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/blaziken/icon_gba.png b/graphics/pokemon/blaziken/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6197cce23c44821a17f56e1115ae48e93f04917a GIT binary patch literal 448 zcmV;x0YCnUP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IK1oDDR5*>@ld(?2Fc3h^55yxMkPkrgn4N)2Y;>yF7&9h9qTEo) z`Kzq_iq$Cc=2lH^R8?Q-#N;^PTVRnXzj=oDt2yg#c#c(ts#w2JW{x9L5x7 zqe}u22>;aEJO@YukXW8AfV~GTVwRp8OAZ70sME}X*j=JG+C{ZyJ+N(E4 zqnz{~EuZzv>vTj$MeDVi5*xIf17-~S59iOqe2*!dF#Td3@WO}y24RMfAWRZ~7iKW% z#tUPO@j1LO-XO+XFU-*y#7?+(!W7ORR#mDOrY-!cD&vG{SH4K(g*m}p=%((3X(-5U qS8s(Wn$+}u00001 zbW%=J06^y0W&i*Lj!8s8R9J=WmcMV?Mij>h$U~w!-_pZrptzy)C`J|TvV!wN|f1A~Coka7wJb_{CrNZxj zX9mu%6ImxD8Z#+8%14y0^$L3EzH%kQ^5nRU@k%lHXzlpb@w!Mh7`<;@_Nrd!!#C~- zA>5HG>`qvK$_dWB5!z4WW7$Fz=9h*8#`_IqDn+6LHY`)ry%A|3Y)ct%106j*Dh%CU z{%kj}WlKfUE<#O^2oZ);1VIOPDnsDlsg3T}|qP}^%7>{XbXj>GSEwmgnFGvj*j3?MG54KIa=A(Aw z0IG}Lr{(pr{ej45u4k=!7{^hRq!~yD)PdaU+6qn$wvvRTIw2kPu}Y&~ln*T=Pqy{a zA#{4JGZ?f_vKRz2O$vzD6k?Dhuo}H#nIFU}^|Y*GT8zBndc%EIj7+pT7+&aw(!f7s zFy{Ky|Hl^=|BfGC7Wz(p$Q(QQA%f#B2xKQe@L5J6yZC{J8G(4?9sJ-G1mdM1+x*}U z*MOnp2bDlH{Gbqsh949H(ecAXA`mS^a=_c}P%^ZTNxpadO!FxtaBt$8VnFEJ%?%e0 zeG0dmV%WpzYnSCIrbAa;FP5}d@DfH3n3pfqA2T47!L7Uuxc#BXd?TMNdC&k{kYD&v z!<1d*81(Fbp97&-vZ063{^OtX6`t1PpOA^kv2y!o_kKnoP$Jr=iL#l{h-OJ3r#&d) zI0_U*F`GAQ0y%}0-zYc29v1o+M7^MPehqeiX&>}^pVcM;20s%*Uwe2;UqPr@ASUqf&d_bwlp%MtT z-%9`iCkiVB(uUzR`N^P3f+Ye`hnHtUA`sHqe6WlS0+}u00001 zbW%=J06^y0W&i*Iv`IukR7i>Kl08zxFc3yPL*;ZzI04}RFr-MAhO@}S1-!N|;I$hM zO&qxi%rM}%;cAA8q=A(z$-mIU@OAP&Kdn}Bod5i}xT5;0S{!nKmM8|W`^=*k0C+HU z&illc`w+$eX|t?2_n=F--19&N52ASeJaG;kofP=Kst1Boyi(O6YJt2F1Y52GI#%K8 z54z4hy{-)~Yu2%@TSIDre5XDbfiYyZhl3LM8t{z)Z4+`v34o`5w}Jrc4uCoMI;xmc z-2yIzI}(7`MExG_unXj&YSa9$#)Oy^_L#A}h<<_+(|tRKq+bnl2?zr?CGPsb_6~v! zlMayg>JbkBGZc0Xv$QXW=p>k;uyb(A0U)PzOynVMuIwngd7&MII62N4TdF|}4;f*4 zEcUd;H9PM<7e_$G{i zx_tVO4|52_#(?5|Jq1_;0jq3$*?|=haM?bZ|NMr00l%lk+&~`gEdT%j07*qoM6N<$ Ef--ORS^xk5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/blissey/icon_gba.png b/graphics/pokemon/blissey/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..44af9704cbfbfa831e3e732b552f0d7c107a02e0 GIT binary patch literal 406 zcmV;H0crk;P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I6iGxuR5*>*lA&_LFbsx$djRJh93BvnBKMs}Jk)}K2*s~Am`jL} z)=NQ*>d9N|Htr3LY-0NEmvm=;Lj3KLAD2CFC%X@z4MEU7C9TK)hB@_e@yKN{MV4d7 zy+^-+3cSUG#ePlTz!Tn@b4WY9!*|56<|`qtL{lGg0*P-dFp9Ke0EfP7bpkMh=Bq>- zn7}cxK`q!+b4hU&Tsp;NxVkDx6{_7FV zxCgQb{NMV$F!3{Y!c>JY;#vqJ{7?w94uvq4XAoXh2J0K~iB69x5QSk-pAv||^g&Sq z-@=$u7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/blissey/normal_gba.pal b/graphics/pokemon/blissey/normal_gba.pal new file mode 100644 index 0000000000..edeacbdaa2 --- /dev/null +++ b/graphics/pokemon/blissey/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +222 222 222 +180 180 180 +106 106 106 +0 255 0 +255 213 222 +255 172 197 +238 123 156 +213 74 98 +189 32 49 +0 255 0 +0 255 0 +213 74 98 +172 16 32 +16 16 16 diff --git a/graphics/pokemon/blissey/shiny_gba.pal b/graphics/pokemon/blissey/shiny_gba.pal new file mode 100644 index 0000000000..d6d75db9e2 --- /dev/null +++ b/graphics/pokemon/blissey/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +222 238 255 +180 197 222 +90 106 131 +0 255 0 +255 238 246 +255 213 230 +246 172 197 +222 115 139 +180 74 82 +0 255 0 +238 123 156 +222 90 98 +172 49 65 +16 16 16 diff --git a/graphics/pokemon/breloom/anim_front_gba.png b/graphics/pokemon/breloom/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d7aab2f39b10027ede2465121f9b78fc965f14 GIT binary patch literal 1188 zcmV;V1Y7%wP)A00001 zbW%=J06^y0W&i*LB1uF+R9J=WmceQxHyD6*njAv)2tBya2Z+p)L%VyhFouGkplr?B z*gowV3K^QAJ~Ux0ddS`G1Gtf?*_-Hy&c)ZXTj-%Z#EoG?GB6wU)>9hymnN}iteJ$K zT1tKgJdQs7(r8BdKZO35u`MC)Yd;=BOkNiP-w#cEQ$%bF*9#!YXsQZ;J=Sr7;HPgE zxd8UNtnCK;yAyenZMbM8-^_fZs~w>H87$ z(tzaqLq0wpnG{U`F3({WvbP!|mHl zC%pvlyM!TcHOlv3Xx$Z;BAi}eoxY7sn-UJ8f~ z8yTP;!F{Is!2eP}lhOr_JdtWgEs_Sxb$#pU5zyNd05|#+ZAKb6AY^y32{hM0xAXzo zt=k!%+~)6=N+nW0e7OPO1aR61L<1E{Hwc)R9^(Zx?!XXbx=G-Q0h)vy!lSG}hSmnr zqE%!b2_a9)(g@@%k%pDCuF5yeuwjSpDG0}EM!7<3idU;yo&RQ6ydv#A(9mP ze5f}OpNP;tKp@2cj*bxzfDob8j&K(M$N-y=^X&VyA_h{Y2VmlD&LAN!VhO_oC1fsu za16U%z@L{hg@o|*789PxPhhrSh+&}$0Ti1ioniiSK44}S2mH&EXL$rpj*V?8uIIC7 zd4S8u3q99xIXj)@q`3S=5Pg7RwY>iLk;0g$>nd!ADf zuCAZIx$U<;aWa#f}y90f4|98I6=6CWvCL3G4o$iI#C7&!`JQh0ELUg}%z+6rO< z6k^O>C=5F}3IgH4sUn7BQ6>#0h zY0nRG6hv3OSoZbxtK~u2QV?9J>NCS!zxtEd3gX-qZ;0yKGOgnc1#wb-(4xAiszGL{ zn`y%^3WBl<(tJokn*Ufq8W!+?f;bN<2(9U)#R}q3qX+jW2)wC{`xOLgKM=T3L3C~R z+sG|ckVFqUJWLd%Zz~8+{9zIr1rfG_ptkXc(Znc-=-Ubcg!Ts*ghTZXv85nDbhJN6 zcy}fELtbU+Xn#lmySonO)*ob%KcGi{NaE2S3gd4O?*~CU6e7a_0000` literal 0 HcmV?d00001 diff --git a/graphics/pokemon/breloom/back_gba.png b/graphics/pokemon/breloom/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..85df0804099d7ebbf6ba47266f68ff228e41e188 GIT binary patch literal 825 zcmV-91IGM`P)A00001 zbW%=J06^y0W&i*Jw@E}nR7i=O$zm3}QnDG_Uhbg}R%&I|Z-sT0T{LGF}8*%wHNGqd*E*0IngTOeS*{pX+AS-VpC zPnX6yKNGI8kW$Jwr{Zi*2mvBGL4*XCM=6WW#1ZhBN}@(eKwkkYGXOj=RSqd|5*W%1 z>o00RX1I%Q_bNck;&0+O{=*a|rG>Zg&E0`1%9IvXF?*Hl&jTNmeQ?_2>h{;CWPjSD z_dZFIgTkW(=sN(uDJ*FDIjoa|B12ZChizVeW!qzgk&OF{vA|LQG>yYCK%ec-F))Xf z39y~rR490!m&GGn1qcBV4|cYFaRj)OdTAUIC;^uG6A9XrV?bls5((_%GIIbEY!sJI z0%M4`p2YZl2R`>gpW9Cy4hDVwL;X2?(}5UoDwv^D5)NtLI`ukw(#5skqJ>g>;Fh?~ zi)Z;?Rl_VRXiGStnPV9F13>_V2W^hPU|>EBvKhNZpr}Hlg!<6r0i`pse`+95m;jG- zHU|*^`<3d;Yr`>T^?wj=A;Ka95?Ql#myI9=eI)(@ z{=PB{%g$CW72zDR`2HgeBX~Zdf{>Wlw%N$ixFHS0k?+qc_s|e4RcLo@%gWlJ!x=3Y z3peS0Q0U_JtBLHF{s3nPbEKoimIV?M*lqQ=?5_SA4hen%V754FG(f>D##*0FQ*;Nl zjnT!$4kU_hRwbZ=N`yX|I8_DEolf%aE&@iA!CbX}=0FJ^u`K}5UOweFC7>gZhWL?V z^a3{+^CbRU0CGTT#Agu?To~T(YZWl`aI!~u!=lUI5^!=rBM1cI3P+c#95C%h8ebB; zyl#5Oi#HpNi6~ zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hzez+vR5*>@(lH9dAQT4RcLKeXUG1W4uhD~a5<)yrLE;hW;NoI4 zB$R;7t3%Uhpld04+yBACC;R~aJQT6cqZE~lQcBj>AlR{hA?FHcjzhUakv(o1K13Bh zGf=z8WGRZ1l2mg^&!$3r6H}5j0qaA1$0KwjV(`W zEH`=u?{Q?omB6Kl#rFu02j)tM#B->IoKH1Cbg+xrS7F+p6eey8lWAL+@BMfI&B(f< Txc18O00000NkvXXu0mjfb03dV literal 0 HcmV?d00001 diff --git a/graphics/pokemon/breloom/normal_gba.pal b/graphics/pokemon/breloom/normal_gba.pal new file mode 100644 index 0000000000..f01f5d9479 --- /dev/null +++ b/graphics/pokemon/breloom/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 238 238 +255 255 255 +255 238 156 +246 213 123 +213 172 106 +82 24 16 +98 74 57 +57 82 24 +164 131 82 +172 213 98 +148 189 74 +115 148 49 +238 123 74 +172 49 16 +0 0 0 +222 74 41 diff --git a/graphics/pokemon/breloom/shiny_gba.pal b/graphics/pokemon/breloom/shiny_gba.pal new file mode 100644 index 0000000000..ad89e65f27 --- /dev/null +++ b/graphics/pokemon/breloom/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 148 139 +255 255 255 +255 238 180 +255 230 148 +230 189 106 +82 24 16 +98 74 57 +57 82 24 +189 148 82 +255 115 74 +222 98 49 +180 65 49 +255 222 139 +238 139 49 +0 0 0 +255 180 90 diff --git a/graphics/pokemon/bulbasaur/anim_front_gba.png b/graphics/pokemon/bulbasaur/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..bb5fb3d23a8f7d4d52dd01f33ab6d54105d9b7d6 GIT binary patch literal 809 zcmV+^1J?YBP)1k}5T_0n21Il?&r}X|<9vO{8(kB$}<5Ug| z6UOoFcr24yY?z?|-62kud4ldRP1Oq$NaRvCm`;`QNMI%LDdV5vwNgN}DEKn+#8j01 zS>#cG3&S?&!r>Ya1kkKOwT?*5SKyKWcN~ELcmcRPKci4}5Wofi0SF4f^D=K%0u6Y4 zkRJh6r(AcQztaE^K;eDW;kC+##}RlQ2^=*!uljEf5b&cQzk_@FiF4j~eSjMb9t?@6 zJkfv^~*QKw41d1+q>j-!PTTlQK5#Ev~&U+A%FOvnwBk``+qYw z(E8T_!nCKh`*#`tFh-Ch3mC?DP?E7d9;EW?*8ZeX(EeXC`y1lHU-qW}w0}9XzbPJY zhp+9g;{h?_xBb`gAa5;ge`jZZm(bdu_Qy`S8QT8k%>LK}2;ivcZ0(O~&2QPbh2UjZ z+rI}soiCav(7))s!Ul8zDOM|?jt2rlpn-=RFdhJ&8wB2J38v!#m<(Uc8eKlQC|CKoCVK>?V@wk^|T$a2ATBiVSHeEJv0bA1S9G zva6NI1+a1f77lz8md zsJnTI0DC5463+d>`3`_j7mWFPzFW-~&sKdVpoaF$8x}Ig9ueHwfRvrctD?g?F)X$$ zs-o@$R6-!}y8Q)cWm^akf(V}gJ0+GyC4?qOR!Udof-a?o47O&<%1Ezy#~muKE%BNv>M3BA0KN3wq9%kbn40|8l@ zX`rMz_qP$UjDS=*6uAQ4B4fzY7uM5M4G9XcBNW&m)pJM%gahCrkU(SJb|9d=)N@GS z-~~np0{}?M#@m@2C4T@QfFWS)gA4sGA>(zAmFI9zrr0B-`CfkiejU3Y5<{OEb=zwm}Y7=~vapj3x2 eikwlS2KojWF>N0ru532|0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hx=BPqR5*?8lC2T~F${$J2KOikz@k!{nnw545zz-CCvQUdX|C-I z3KYY--D$R&_6y+`rPtn1RC=#5bzYcRHyZ?j8N6jtVPFIwS}55O;3mka4JL|^Re)=U zMluO%+JZfZp<^I^Pvz{d^3?}nZ;>Kk$Z O0000t7e literal 0 HcmV?d00001 diff --git a/graphics/pokemon/bulbasaur/normal_gba.pal b/graphics/pokemon/bulbasaur/normal_gba.pal new file mode 100644 index 0000000000..5147bd9747 --- /dev/null +++ b/graphics/pokemon/bulbasaur/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +131 238 197 +98 213 164 +57 148 123 +24 74 74 +255 106 98 +222 74 65 +189 41 32 +205 205 205 +16 16 16 +189 255 115 +156 213 74 +115 172 49 +82 98 41 +255 0 255 diff --git a/graphics/pokemon/bulbasaur/shiny_gba.pal b/graphics/pokemon/bulbasaur/shiny_gba.pal new file mode 100644 index 0000000000..86a5358318 --- /dev/null +++ b/graphics/pokemon/bulbasaur/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +205 255 41 +164 230 0 +106 172 0 +24 90 0 +255 106 98 +222 74 65 +189 41 32 +205 205 205 +16 16 16 +57 197 90 +16 156 49 +0 115 8 +0 57 0 +255 0 255 diff --git a/graphics/pokemon/butterfree/anim_front_gba.png b/graphics/pokemon/butterfree/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1626e11c0b4f6190f67cd31db8273e271f9609f6 GIT binary patch literal 1151 zcmV-_1c3XAP)#agtB38otB00001 zbW%=J06^y0W&i*K{YgYYR9J=Wmc4G{Mi9pd0XhaqMFWl+Cg3eBvWWE(h78vdObdaP zLn7eTMSwsgtXm);&9aC9hYh#M1IU1ybarM*NhGBuuSpRg zo<<+@bl+)bE;5le~eA~1je-6cR2MfrLS0N*o| z^D7OK;&szZGVmZp{{m=Q3V{!(puR}ZOZ@Qn0)Ss6$|k z3|Nsju~!)!sy2v~tD$B!ELHX4OB#TB0U-optd?o04VQL@ixM0fIJ7}{jwMjDC~^8x zT7pa`4)r{qV+BaWaRUQmgpvRwN>!EnqgCH)flKwnJ<~)|Jq{>^D!i;lZo9veop#qe z{y3CF2Y|p)`DSH6jefXo@0sr}e{-WarhygkX6Lv2+l!mFd3+9l8-}n-%Y!~>IpB+n zoBjRc^Ve6mj71Kwa@EJw-d)@rn%|wj9^WSZq*aBt;oZgCeE=@U*Ae07sA?gA^#1Ct zX&zr*jjvtCLTHqy1Z#i^z<4~qhNoj*gG%y#>6bT0gC_m}02E1}3Py$npr%{1IsR$< zX3&BRyu@MvNycZ7bJz`CAGpvd`Uz=8K+=CiUtzFU7_}(%5nBgpueci{6St-awb%wA zAwBV%*kCR+Yr5`-G7vH_Il`J7xnW>$0+MXwpXWN(WC)Pk=^XH&;|CoM7h%!*!A_0L zPyRaL>qBC{B-sd|Gg0uR)n{}0ab5v*?uWos1o-A&tIrTD0WDpE z80e$j2_C>O8s$cA-g>lu_a{PRLONo=_8CLw(XQGnNn!bHY9jpHYdDq&s5=wZY`F;3 z#YhodGBtNH{oV*&7)X6FAWx^vh+*XQye&-#u;w%hLP{NPBm%k|aPQ(ccF2|}MWR4l zmxU7&`=V8*3Iqmo6o#Sz!ukP7`E zb!PMWL&fx$UVuL6RA`j?44$q6WUgPVDu7EQ`Tp#agtB38otB00001 zbW%=J06^y0W&i*J&`Cr=R7i>4l)r1+KorM?shwGY;za=?a5aVe4?(4~jSmlrz<9U} zg;EQYx5&+!uHEt{)LFWvWK$q`IWGdCCAatwP=beMv-{r3Kknqxz13o*@8`bn`|h33 zvi|Gm0F2j~>sItA_^j(*keLMVi(- z2S9+m{V-HIOSK3i!-B{L=UuJB(MYpU6^8DnM7>K9nwmw8^ufli-aAzZ@|^`n817o? z`6ZxY9IhiYc6#0Sy%K0{Ee2&98qhH;8UxJ$D{O%#{kAA$&8h%pjXpppIkW&mw+eJ} z7@@)WTW}t@?=w~{L8AhQlH@TKZQp;-`g)g}HX(K#r|&%Ue0FyI?N7icNfHr1Fvfmf zfBmr!^vOX?McV}GTcC*b!oh*XH1kq}QZZnHB4Ud_D*np84{*=&|ajNec078?Ldd{F1j z#*7KXG7mZbcn1qDT0BG$4jx&9l$$ac`juSPeQSOx8jKxfjGZ%Hx z{#(6GpLvW;<}y!F-&H6N9RWG+l9-KUkeUW6#K_LUAt0A>%qoC7_?TjCkjY~Ymh+Zj zLGx4wQz>%)`sbO$097OFld(ikBTw16a2ygADIL&WB%$qNM}pYXf)g*T+PT2u}2?sZ+Dy;h35uUj5P$Yi>&=s@rn c;NN|I17Nn9GM0)V!Ti+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IBS}O-R5*>@(mig&AQ*t*?*woI_Xr)bTD_95;Vxy3m-sB+Kfx7T zdFg<#C8Q`(EhzuNS-Vta;}zI|9)Q0*>;^#QI#__Esh7|V7XFx71BSGZU^lYS5d2mj z+@cWd>2)h#HElyr$Wx$lma)~Pc73_F7l9wIfAcMlDy71R9D5a|FlJiAj{UV^$rC#9nsE@-O2zd$s z^K0P!XtvwtI9kgm|b8A0ZePK zDds#Ff$}AvB7kXd%3dNEl)QL}V5Z7T0HdnwMlgrRa9|F%^*J!}X0(_I+pwQ2Y* zd)fD4=4ED{I+fB1v|gX1$1L+C!g01)Hf^KChm&xE}u7w zP}2E*Isi}en?-;**WnFepR&@90W6W7ZQcyku=BE147+KFaOVhCv&Z#ZF8iSkA^v`( zvmY7o`d1rZkyk&1?D31-YG(vkut&-PR3OZL2XuM}sd3F)oVEomPLv3A6G?}WfV?b- z{Z=38CjfFLs@~4Hw==hkX;~uxA+6pArdeI1N;K<6UG`a|GHRWXHv51$yQ+mGq|q)A zB9e-f0eYneOs#Fl2&QUsn*rgrG%vY`X#jhn2hg>3g2~n$*=Ie#{=9L}axh^-F4UWY zMhb{6;m#mLCPaBop)fKtx2g`oU8)S@7WK zh&^;{jr4mEP7-eCOJ&TM=ApWD)&YVlYT3a?x*|J;mf<8ahbo?xOg41TQIkWPZW*SN zP|-2Xi_YD*ZgzgUQ^F8Ax2zBgijkw$X;|LXnOnY|JF2V&KFs5`_Ion4(1hV3uL-oKH$ zjRu}<0qhOizZSDv?s&Ps4+Mlv|qA^(MU7^hQjK}^O zs}GEJAG574dF+pvSn=&9o2H%d+JB_ZTK(yKlFy3TKpe;Cum>qDVf+JSZ;p{JUP^aTSiCGIQi>Px z5E0K+i#l=Pd<8Y4A(wrT?DhpreE|z;x6~pm>2KneLX*5e@k z{mlfSz4nUGoh!NUiu5ICb+_`IRV1)lG{>Lvq!Ky6$bXtV~jnWfR8l!~|Y{y6wLHZPu5FpW<$#1{Z>G^!MQpetJb zD5NmO#FPm+_JIM*LrI9pvu@c#5_}agA*TTF4+3DET9g)HV#_${A&G2f;1f?K$DG3% z!JAT#($WOuRK168&)&9Sc_bNxgNU3t{YcMTBj0Ibtm`fStPMUw-xUGyBBcNzZ{Da* zc0hj9J9#Y5LwgQ>pK3IJ zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H@JU2LR5*?8k}+-sAq+)*0yxq(uA$g*I~*bRNt1q?z0ycKv@nHf zQs6MV8W@O@K2mJ2k_S=vURn#xBICA;LneDsYa4Aal5Cjwoj6S2p%oklbb^n z>kcD&H^)R`j~UL%C7LYPC6b6{Mr=`p=n*kCgA=`747uv)l&-7s&Cx3}TSIg_q%tA~ z_EghCC{l(_dsPS!R$SW6YJs(wom5!hUr+rG42;0Q)&m3D^}v*$?SX+z12Fj;Fm?n+ zegdW?c>zPzl01Pa1l5)um}qEfLpv}fPixuvP<}ogxLW~DZ`Ib8}KsS`ZKrVMVfC00001 zbW%=J06^y0W&i*L*hxe|R9J=WR=;oCMijom1I>jvws2H?2zUw#*BK0$1&Vl4+i*zi zsRLa>9SS?JEI32Z4wgnqh2(=e2+8UpjAR!IJqT_A!!U>b3Hetf|0rT*VBfo=WQryU zWXP7ch~)e3d+*&n-TMgnNIP;;-D+{0x6%nV_#mC4)K5=A?X}YZjS6?t{EA)SsT2(W zq*c+hZO&6-D7FA3Q#5S*XP!a<0qlDSXvOZ8(<}lYkAMmw?y$Ip;`X*}XTZO|zu$6q zBYxGki@@+x1qr}fZZu4AP%MKW;S{548ZAiX0|WxGA{{bK)467a!2f-2wlZ>#~i zjxA(udx!J>yDI=_u^aJY502{Q-QilS7i?y!(!P2Nby3hW6Tw)YY4yxWpl3lo7k{mT@V>#hzM_}3_&xc@jBU_ zT2}&ppfX9ye;EY11%Cj|7yGdVJ`p0*4%SWg?@`U5_sV!ItUi$IrrT59()9{2LykIg zNQ^0PBH!`fDK!|2y-Yi>;}&0mEoNUgs|kQ5{{jw)l^XxX0D1sm1644@4h_B~0ceXc z040xYF(9u5A})uXY>SQnEXM%4VL)7+Gw>abRR9)?F)@^949|TQ0nP20IzMcP#t>yJ z#?`5D0nie2AYIV_T4EJMeT=QAtso%&s?>b!oDrT$>U{QnKYf0GdOLDb-Jdmx4DeZl zd|C~nR)cAsq(P23Ij)jwq6Sf~TW%w-oD*fDL4dG&3%JPC78dJI3g0)XV-0fb@Y}(w zGQ(K#ytCeeCl2wY25IC&(;aREoZMjNUj`aP%hcxkqcNbnVi;nOEO`G6)IY2>M;nT< z;rArq5-xB#&ne5jeVOeQhVrd-7642(wrp;~liX1tK^V<6Z5VIdMBdw1+s}PuMcthJvFg8vOQ7(ma$HC(H1D z34>z{xV2d+LF7P2fxz8qKp;WnKwi;x-Cc?RCK3cGux@AiSVIy-?2nWMw-%Nlviykn z3`-EOzPUP0FfBn45$PJhvY_DE>BSP9aB zWx8yR06=0GBw#j{0n~@iWcPFhpcy$06()Lil}rG41%^9muWo|Ca9vkKASnVvTAF^4 c_Obfme`tSuw8gn8F#rGn07*qoM6N<$f|Z46&j0`b literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cacturne/back_gba.png b/graphics/pokemon/cacturne/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9a67227d0415a76534f4a28dc447bf06ac952cdd GIT binary patch literal 653 zcmV;80&@L{P)`Ib8}KsS`ZKrVMVfC00001 zbW%=J06^y0W&i*J3rR#lR7i>Kls#+QKoEwv3d%NSF4%-?!fha!bYWANYg|}GaN|m{ zabp~iqJI#TR>I1InyW(^9p^g^xlon=Wyl%AHOj0$d?NZP(uE8NR{K7hd1o0dWB;Qy zZiayIfNl%`s4kMYN9X(d2i~kN!`!m*p%38JL2m-amR|I?fZy-IuzZY%fL@ns2yh7K zGhtX7=rN(Ja{{_+gqC%V*jvrCSj9U%QI_jCRTD)-$<7ET$#tzK!1wb++j@q}!b8#J?Ja7;sr9mqS*CU# zlQhd*FRgb$PgVhGW}Y$jc=cziciWt{c+c7U&P11HCej)_^?uDda%oF2F9l)+1-j?S@O{mS(Yi#o-g z)~B61#e#sQ1KtMIeFXaDMz0KcB;`8MtNK(b8sca9^*5IvPNt}0_B_BWHl6^Cve1i? zgiag3%JqzW`)*?}zAwudHeQ2=AB9L3M~L$6Hkm*e08|rYTwDXZ355`^;Sj$F09qbS z;AM4Vu0w#4pakL_j1cq-g$9aWkV8=J5un#FDFK|n+NR9V-xPb49EceeG>qo}_cNyS nH=^8w7n3>-(T{<9_n(R1-(&XV;aik(00000NkvXXu0mjfd~qi= literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cacturne/icon_gba.png b/graphics/pokemon/cacturne/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..948bea2d89ae98e4197323cbda1cb2fe9b132524 GIT binary patch literal 299 zcmV+`0o4A9P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*HsYygZR5*>@k}DDeAq+q{0bDBBjR6Z+Uy-$;0!#%dTa_THI~&KF ze23@UpGS}l^z^b|77HYDGjEE_DkT6E=B7x$fi4QGg@~zLg*dL zF#$_9#}MY4Q4tzf8dCv(Q3^h2+VxBj!ica^Gc#bf#3o|!iJbZ-_ x1#V%gT8x)4t?DjIm?IVqCV}~XzYFujj}JL!l2Qol?Bf6c002ovPDHLkV1i?Qb<6+& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cacturne/normal_gba.pal b/graphics/pokemon/cacturne/normal_gba.pal new file mode 100644 index 0000000000..cd82816416 --- /dev/null +++ b/graphics/pokemon/cacturne/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 172 98 +180 213 115 +156 189 98 +131 164 82 +106 139 65 +98 197 106 +82 172 98 +65 164 90 +49 131 74 +98 115 74 +57 82 41 +205 238 115 +255 230 74 +139 115 115 +82 82 90 +16 16 16 diff --git a/graphics/pokemon/cacturne/shiny_gba.pal b/graphics/pokemon/cacturne/shiny_gba.pal new file mode 100644 index 0000000000..11914015b9 --- /dev/null +++ b/graphics/pokemon/cacturne/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 172 98 +238 189 90 +205 156 57 +172 123 24 +139 90 0 +205 106 57 +172 74 24 +139 41 0 +106 8 0 +106 57 0 +74 24 0 +255 222 123 +255 230 74 +139 115 115 +82 82 90 +16 16 16 diff --git a/graphics/pokemon/camerupt/anim_front_gba.png b/graphics/pokemon/camerupt/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b63d901ba51b0652df8ae09fbb0fa956d89ef0c5 GIT binary patch literal 1252 zcmVOVd$67{n9xHj z9k*X10YQ%WDh&koE2u6kq^FJy?e5JU(cK(v4fGRa-^^&Fk*v7KQs@I)w%&i{J&iQ_ z{VnT<3!8KP<&a>zUeZqo1)Gcs0Zzm_E2Jo3k1c!oF2h5YfR+Nc5w?*kAc+s7&5IR1kL4Ezw2VF00T2qr_TkAgUwMVQht zYzQW?3aG{HFk=fTHaG+CQ zDFG0bHwAB1ld?n<;+3`qpHix8VLF1wjzZlXG9ikuRILKc#2%?D_o_ zas6ftl;HU(#rS-Gde_Pm%asCqBLtb7R~ZkJ_!;XbZYKpSmuJODf9!}~)l)5JUY2c12|f)zpt1$1z_q<^SGj zM5du@JsblubJuISHPg@d0pc6*xA=OwI;cSU)4vYnHT@3==wX3|`!@x4w*x8ZF9gf9 z%U~$_GtNJ4I~_<#f4)io-KJd*q@sWNUK)&jfu{eO@lFR))1U1M-gY2;tPsa<1pUz$ z>{iRR1DOo%zfrJO^hblyb|4DPn*NNh+YY2eb4h_MquNYBVc0gH+WH#6YvQ2hq$h7zUa({Tmj=M6;&`{h-U3T3^aGszee*zf*Q?1x4=Mi&}lGgG~+!CU~$tK}am>JKE_#rdXxsHrd6F5%zw4;A$V+ZEg&@DD%ZJI4PdYfy@0J+|@y O0000Kl1)y-Fc5{SvZjg<2Pl6BfB|-0K-~ir(Gyha{a6o; z#Jb~1tQ}iOEMxl&JjaFpvP5k98abBVH*Y3MJDr0L`WFQYeP9!#-RJk%#c0a3VYYD( zuzb_h`~)QSJckxviIgt$qc1T1Y00q$kfcXlpPr--Os0vg_k=ot=DMZE2rgNwkL*SF0EuTB~+gVk6h zIxcMjj=q6l<~ADU(u-lK!Op`w&hPq5z+*hG@sT{9(QECD-2{4~T}+SXu>@;MZ9}mR zT#EJ*Pz}lj%cVFX5O+`6?@pe{>Jq>w(dWQ2ZbXkbf5^bqWb%w$Np;X5-&DUly6$w& zQUHK~Ao002ovPDHLkV1luk=(qp? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/camerupt/icon_gba.png b/graphics/pokemon/camerupt/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..372fc7ce0a86d91e271b301ff08ca963d72e82ad GIT binary patch literal 404 zcmV;F0c-w=P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I5=lfsR5*>@l1*yEFc5`v0tva$?qa0wQ_=(EIAgT2cha)A(D~9V zl-=NLqNO_eu@bj*(M6$jz~J}hJr9O&v-$fI<4Vl@aGIOu2YlfV`#aJzcGV(&00=G?Rg9gtwRspeY>=Ay~=-xNO8QSjrd;E*tzYOQHfpdJPO|$UHP)+!tU* y$b1kmN+dq862Q9M`<6O4J}?2Z;sfzVe0%`VV$N`einzT10000|6)oxF-n|4d%a?$-n}_F_BlEKgM-bKDek=~|IJc+IXM6T0RR90-xG3p00001 zbW%=J06^y0W&i*LKS@MER9J=Wmrsk^Mijth90&yD;zp)_pf2nsy|gU&CV_*S@zs#V zy81)ZhjALbJ>($eUwPBLGc_2;4CrS4~3$pvnPP zY{9IX-%L=20fK5|C;*yinjh8?V_F1=74B5)^#ZCLu^9)3VucKv)sUtgH8_A4uF&M? zTJMv|pYu2C8NbG)R1$!XdQT_o?#uP0hw}Fg3U|fX0WKeOTHmfm?MA+nCxk+r2fM(? zw%=S`{?2;V0`hNZc{i_M+qSI--Fdfdu@V_Dw%^0tj>E#(!+0TXb$A0{+$Q49RBz?+ ziC93%Vf$y>=Gj&YuXM>{A7bi7%dyp6>Ec5TC5Ep&?4Ln}VD)Pt0!r==`pPF~(1D^h zWq>l}`|II$pycF$!gNA>#&ez=P;!j1=mZH*Koa3dh2XOh`&Yz4%L0ii_X7hFQLV&FZK4EHRJfj*2?&yd)` z2Iy-r+d~-uUG_mhG#LK%nl70*8G{>2A8i21?0!PPP$GY*qlMHTbo7K9N;KOg)4#wC zL<7Ot_=C_y0R-a+T?+;&mG(|`4t!nT2nL##=>BeVpo(I_sN_Kp=-%`$n1#m(6+3SM z_>|CJ*3BV#)^N}i>%fjOSW3cXvNtI zOlx()uoO@-ACLX<KU403l(uzgOYA30|-IncglRBG9R!5|M-@;bm`2E(K-w|6)oxF-n|4d%a?$-n}_F_BlEKgM-bKDek=~|IJc+IXM6T0RR90-xG3p00001 zbW%=J06^y0W&i*J21!IgR7i>K(lKk>KokdX2h9x;M9`_9p{1KdTmq-1P(#4?O$wUa zsUR)(H%Os)F;7H`w>zBA&>>(gDl%zFaNwX@r;vBLlkU#3lG3$(i;eE*|9iUU!Qg*A zS;J?Zd-pxyUHzxvvIj(k{#-r>p#EDR4-N+&?*Zx{s`~-cfb9iC2?_}!8yt3Dn_m{# z#|1BD<`pz3BCr#(_Im`^3{N~(aDdkalx;)^cM8lA6lS)QHo}8>h#+F~r31n?!UI`y z!nZEC&=CsA2}2ivjxYcm;4vMcfShm#aL_%%KEQMj1=t?2=z#BE?*aT`s=!yD(!0Gt zCA-@v{#@c3{13Uu4 zx=Mz%n7UvpzSs$QzDOOg&Th}01inaYAa1iV?RuzX*g){5sFEG<$$*i(+u_9B7J><$ zjhkI<8{vQz-Xww;3t!=TnBy~Hcfei9A;z+*buw#KTw>2 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/carvanha/icon_gba.png b/graphics/pokemon/carvanha/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0d48a8a95fa2fd419edc5a91f724d6bda686c8 GIT binary patch literal 392 zcmV;30eAk1P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I21!IgR5*>@(y?yBFc1dddjh=jBrKH(L#Wazt>j4EQmLxP@Dflt zQ zS09`}#?#i!2*?-NDi64nSxtbIYq`d@$uEQ8AXU;7MR_?g`J5zbUTP2Gp%O?&?}bg3 zde|2h_GFIH_EB^_0T^}L;BNtT_63^&g5BvExSQxx0Z8ms8?7V21qIG{1Q^3AeG1@p zHLexe582Yz!GmdK{dH*2pEwNl&u_u~B#8Kqb5e)tUxMF=qz-*jiHdyozYYXk9XbN8 m4isD+0&sN*VH3eMbvObfO?;9keOw>_0000s1^Y#1d2Ml&%z+a4?|E2_N1 zNR&R7qrHVStpJ%p^tLn)z~rF}_@eOnyv~4NOhc~%I7qa55x{&tpL*!orMl5Z#MS%S z!5|369{LF{)^*cQ1aSWf;yOg^BP76!^(ajpQF~k*0B||S;tJxcBpH#Zj~-;7iFdzm z;{t5h18@T!O`?ts;QRh9fNj_^Kr_H_9N`1*){&km(@g=uaMPByl^tv*PDv+C)4X{n zv0%mj!*t0Co9bLqk`^T;C8a-;$`854zsV1Dw5ZDuCySc=K)Vwl&ks=+9-8ul&>c4A xhYn)Wm>-a5A)zTh}z5tB;EOKigbqD|e002ovPDHLkV1hLK^=SYA literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cascoon/back_gba.png b/graphics/pokemon/cascoon/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6bc2955fe1589d55c29412252c9ce99faf80f9 GIT binary patch literal 404 zcmV;F0c-w=P)Kkg;mRFc5|OLdGY>%Xh6?*Y3T=Xs<2bzpY~sHyoaU~jZ2 z=Xq1pRX~ek*y>^$B|Wqzk!M7eo)bXRM-(HC-SgoYV}14`LA?~6104P)_B(Iv-dC#J zHvwd+$m5%|aeV?Fp5pt2_A&dNfn{hrgs*%f9e`+VcNgDY%CK2q9nz y0py3z(*%euolDLD9n1xg6Y@GvfLXKtkbVHFsfYa79wGYx0000DV$hA>F?%KiCp+9_Nf4yjkqW43rzVl<#VX8W$qYleAI%IIJLmB0{4mp8MMTdMSS4D^H o6iqto(9GQJues{bpO5@_0iF`hh1rw%+yDRo07*qoM6N<$f>p+r4*&oF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cascoon/normal_gba.pal b/graphics/pokemon/cascoon/normal_gba.pal new file mode 100644 index 0000000000..05dceb9317 --- /dev/null +++ b/graphics/pokemon/cascoon/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 246 197 +106 98 115 +139 139 148 +172 172 180 +0 0 0 +172 156 189 +222 180 230 +238 213 230 +238 230 255 +115 0 0 +246 197 0 +189 49 0 +148 148 0 +246 255 197 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/cascoon/shiny_gba.pal b/graphics/pokemon/cascoon/shiny_gba.pal new file mode 100644 index 0000000000..e8b230ed1a --- /dev/null +++ b/graphics/pokemon/cascoon/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 246 197 +49 98 16 +82 148 24 +115 180 57 +0 0 0 +139 205 74 +172 230 98 +213 255 148 +238 255 172 +115 0 0 +246 197 0 +189 49 0 +148 148 0 +246 255 197 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/caterpie/anim_front_gba.png b/graphics/pokemon/caterpie/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..602b7e30f5df2dbc940ce303594230b5450600a7 GIT binary patch literal 761 zcmVLn)yiqCo^xe+Lih zsNzLyjE%V=(An-6Fn0%;s}smz53%n+Um|l8hzUV5y}oOp(>g2dEpiN)V+ACoj^>>2}F zpQc|MrZvZw_Yt*9Ed?(Z;w zY&Wwq7my?dsGoDLpiGGYzEHf8AZHa6fX!T$7I2+|7hV#wVX9Op@DY-bYS)v}xOVWu zF7ZAX6OSvS-9R6naWv|4Svi5I56uX}ai7oKRZal#DE(e@?!FHbNS%fqs(J42ws%Fm z_hJ0DuAEicW3)TaPVKG|0Cq#eC^py*0Ejh>pi>;Xa9dtz4ZT3`H1tswk{fIR(vqT) zHI{*u(K$Cr3D2qyhmShysMoISh0sZW+K1=R@DR|puTvE8k{~0)({zdE0PZ0R(x$`- zGYFC&MGW07t%Tq_c@F^ zm%c3I9t9@Ry{D@(QnGaC2*AjgC)zW6X9~pYlSv%YceN~#=?@NM62+Z5M`p8sMMiNa zrW%{gK3h^6j=FV)nMJmUCv@Cp?qec$`s9w10#-@cB_k{fGVltVm=H_xtE700000NkvXXu0mjf*im9X literal 0 HcmV?d00001 diff --git a/graphics/pokemon/caterpie/back_gba.png b/graphics/pokemon/caterpie/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..801748d1c38da0e61ae5b880d52face3a4657d6f GIT binary patch literal 521 zcmV+k0`~ohP)KlQC<;KorNbS+I}~69)&OgBctO8T$$9+Ah_xf*HCw z$8V5(0XsO|3q-I}Jn);e0i}Zpr1wr;yqA6f{X-z+etGZz{&(j%H(j;Hum3K$5%H5= zT0Ga5LWpFg*WaF4K*rHr6GdzE%mVju6h*p5HX06JI3SOXfchQ27fl7Ig|{8E4$d9c z-#zYs>JZbqSpPioz+tXMK)q`K;y4yZAZ0BGVG4*e*kv5xij&fZeggnX>8t_Qy#`>T zGsp#Ey5T(}v=a*?*;9Pz2ThJ83*31VvlZGRl}M9IAoRMF15F7vVrcl!VS zQ?GLdbcf3Jpn-{#9|3{e+8QGCI>j+ckN|<5f$RAMD5X#$3>d)o^_&&WASKZIWex@) z6G;B+e{&P11i~!vxf55d95*)})7p+fm&eSs zfP-AxGY|k+P}G=#KjQ#b14`w93-lR_blx!2x3-jWKVX8q={ocW#wG`Qbi?`<00000 LNkvXXu0mjfwu9f) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/caterpie/icon_gba.png b/graphics/pokemon/caterpie/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..be20669c3c667d90fa582549373c4bf43db6a61f GIT binary patch literal 277 zcmV+w0qXvVP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*HlSxEDR5*?8k|7R+Fc3xO1oTpaL9}LT;c$!J6A>yF+f;yQ0;P+Z zUxOjpgz(+G{F#h+M7K*QW;Lo%fORaufFKTOhMkz2-pCE^-VuPUKLBW{V{a;1Ni&DZ z$x4?BU|$;mWsTPGn*Xu~P_cG|6)ZeC$sdJrf*iuMvXX__B=`w~Ap61c#^DEo><3}I bqsy`bi!WC?hy5%j00000NkvXXu0mjf@85K; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/caterpie/normal_gba.pal b/graphics/pokemon/caterpie/normal_gba.pal new file mode 100644 index 0000000000..c672687ac6 --- /dev/null +++ b/graphics/pokemon/caterpie/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 197 98 +238 238 123 +213 205 98 +255 172 115 +238 123 49 +197 65 65 +123 98 57 +189 255 115 +156 213 74 +115 172 49 +82 98 41 +255 0 255 +131 131 131 +16 16 16 diff --git a/graphics/pokemon/caterpie/shiny_gba.pal b/graphics/pokemon/caterpie/shiny_gba.pal new file mode 100644 index 0000000000..4b797001e3 --- /dev/null +++ b/graphics/pokemon/caterpie/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 197 98 +255 230 156 +255 213 106 +230 172 90 +255 32 57 +148 0 24 +148 98 24 +255 255 123 +255 246 32 +255 189 0 +148 82 16 +255 0 255 +131 131 131 +16 16 16 diff --git a/graphics/pokemon/celebi/anim_front_gba.png b/graphics/pokemon/celebi/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b6a9d619c21c4e642c813002c76061b838131c GIT binary patch literal 861 zcmV-j1ETziP)ZJw{{a8Aw7qI`gAfo9ch?_i00001 zbW%=J06^y0W&i*J+et)0R9J=WmOpRPKp4hPNVY^WRA(rAFSZwks!ijyYJ2r+>|n1= zUHinAF-Qn?qL{ESRYEM?O4yN& zM`)6eprh)tb&lG{gb-^(F=s1B?IUauA^`>flN?1h#)NcefewJ}Ba?M+SKDVsT9T_36~h_K61p2NL-Dfj(i_1c4<1c%0L6%P^}$NZ^VPlT&xg z5Jv$4h?CVTVkQDp{2Y2hWTV9N21^{s5hBDGi^(1zppp%%L=c7nF=G-kj>=H$?GZr$@B0T3jIM+kgumsZD zA5?_S>)$V85sUce0urNNA{jJgs1fEl;5Mv|-vH`rg0$WJl8hlMmJ3P5|Xg0aCzpH+Yme~itWPlri? z&fdNO09~BY>g~lLEheK82&@Z$UrgQBXq25mHD>OBPrcKp*%)ksOW~c;G|R?d0%OcnDwxxWNE_)<&8X|PzA7&n)$6^QmsG3WxxeG})VZbr0y>01YHcJrbJH!e( zrIcU8C4!CE5*CGX$Y96{q+6!ZFl4X|ngP;#2nNhADs&wA&=pr7g+XUN9AKj62}A`& n?(Z%18g`gAsDHnRzZ>5G*meWQ1hr+<00000NkvXXu0mjfD8+?l literal 0 HcmV?d00001 diff --git a/graphics/pokemon/celebi/back_gba.png b/graphics/pokemon/celebi/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c43e455dc19bc639c68549875e830a7a07a9febd GIT binary patch literal 757 zcmVZJw{{a8Aw7qI`gAfo9ch?_i00001 zbW%=J06^y0W&i*Jb4f%&R7i>KlreAGKorM4St1O`d;<)0$P$SIuTkUUhAvcz&r-U8 z;C!pcKt2J`xdO~+q6Ao?Or-u2{U{8EyG`000_^p$|$vW7TOo4Qz0p07`!KoB=RH+~UBfw#2GR42xjI5z^eymUOEULNPOI z^ag3ggV@=m0n@=CQLE68n(m67i(>#Y$1<6TYNg7RR^Da-ixCSO*hIQkF6kr#D2#y# zlVh`1(zIfwqo|iDfMCahHZTG}D-xxf0vr-aAl}sh&@PnTHZ=&$up@}dm5``}W(p`+ z91|d*QIII=Z!IMij4*6a3)S=}n%guGVrYR=GtTRm>Aa!}3B<2Y0tGH4YE>)BSKSPt zgp63U?M9cF=oXahza2^@Z80p$Qi5Q>QEUIr9GhI=ULvwbgp9ET9282I^BmIoJb zA)*p{>HC95xEYx!@8xe?NFWjQgFG*0Azai+<{Op@tsY4M z-6{ov`E>X|r-P;6;)cqP0JWsk+q>b=YdVvWhuWOK;iD?_S}UGIenEDRa}R~KOYzaW z=)wt~&%6cR?jF5yeP_EndIYEph}8nS;B@0Rc6LbU@wHaD7$A)JtpDV zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H$Vo&&R5*>@k}(RyFbqX?0{bvMKu*ysXtXaEx)|cCWYQ8aDFH7Y zRJBXLGIi+Ee!TeMZv=WoKc4tHkg>%c(l}$=2>-!!SVFyT>@U|dGDK*z=yiy~Kzx`MClMbG@s)-&qg*Z=?k07*qoM6N<$f;yv-p8x;= literal 0 HcmV?d00001 diff --git a/graphics/pokemon/celebi/normal_gba.pal b/graphics/pokemon/celebi/normal_gba.pal new file mode 100644 index 0000000000..aed1b3ec2c --- /dev/null +++ b/graphics/pokemon/celebi/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 255 213 +197 238 164 +123 213 115 +65 189 65 +32 139 32 +255 255 255 +172 238 255 +115 189 230 +57 139 205 +0 98 180 +255 0 255 +180 180 189 +106 115 131 +16 16 16 diff --git a/graphics/pokemon/celebi/shiny_gba.pal b/graphics/pokemon/celebi/shiny_gba.pal new file mode 100644 index 0000000000..b90d6ed435 --- /dev/null +++ b/graphics/pokemon/celebi/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 230 +255 238 230 +255 205 197 +238 164 156 +222 106 131 +172 57 65 +255 255 255 +189 222 238 +106 213 90 +74 180 65 +41 148 41 +222 32 222 +180 180 189 +106 115 131 +49 49 49 diff --git a/graphics/pokemon/chansey/anim_front_gba.png b/graphics/pokemon/chansey/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa9b268d1b8e6133b145effaa44a8326dd29cb7 GIT binary patch literal 1018 zcmVdzoY0t)oSEVTPCG1hfJ;b8VqTmyu^o4lkhs8}+N#p~^!m(h!-INl$+$-ky2pZmiSS;z|RQr zFOmCAD#3pjN&v|zlz=v4hSP9c$xRS`eJ%kz>{UTqcoub2fH&tDuf`M=NyUV_FhLC; zE-%I!(P<#hk)(BeiI68XfeQr)(jAoWVr;W;lqUgIT8pl=EQ218U~;MFkz~ft4D8((f%mX>A6A z$aw<5(rLD$NC8NvZU(K-0a!HKcmTK@Bn!&N^GAy%rvt!gA^{cs`D3wImYx78r7WjZ z?zE!ibIwb&p=1COc~&+pUp_+!3qWMZsnUl{uMu)Fu4CZ`pwWh1rvf;Rg&&?pqYlEV zX$ioFb_N-=0G7Q?;cOoF0AnY)8o;tnXzGmqn~C2#Vsvn`d_D17)|&NR#<;-^XWMCn zm*sq8@WcPh^_!Z>P6a6K9D+7ux9Ly?Mh1JDRreUtZNh-$3vsj^Fv zbU*?{?y#~7cb)+H`$Gg5l(Ry*<3Nf^5%>BtXwO>d@^vNyDO8{WJFmUD2yqvqEMQE^ zxqIrh>JQ?cbVnv}oD)UdkJh06At>*!{p|pjzNX#e3dDU0zN*tj9SDW`F9Vv6+ARY! zk_+`O*31l;#9ccuQ*pO6U?T2n1cSJz>Mds??ln!he6pwF4xh4oPsN>SHw<0enLcez z+*^Mk`!#Wg0J(CeEKS^P$C>VkQQQxxqTPu*-H{DLEv=S$^;{X5v07*qoM6N<$g2~e6Gynhq literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chansey/back_gba.png b/graphics/pokemon/chansey/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..db61e1c11662da5e2b795e4853f8f3fe98fa3a5c GIT binary patch literal 552 zcmV+@0@wYCP)Kls|5RFcikwvW2U%Ayrj4Mnx1UV^o$L04|X5fD07T zEkmfuhKej+pA9&+MbfEKhkOzPe82Y>u;V=SPt_pe=Y8Al(>R8rzw2LOp%j{Vf5D|6 zCjj`!rwjns8K58igfc*GnbbR8(jh(-8NeLH4MWJ2M206agO$RK_I;gBlD?6`MdSq} zqd=Dk_K=SfReG+ z_dVsiwGEUNW2+mmuzbi$QZ)ig_8S1r9pI{#gtNd&+oDZK;5@Y`MriFRbU-el1y-6s zrGTY;hUJF^s6$|UmBi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HyGcYrR5*?0k~t0oAq)Wh0(i`p`LQG6A{{RHO6o1F)VOe#Xv5(y zQkp34W@JD}1Mu@>wqP`7bIkl0T(ybPMWqWbD^c}!u#Oew(iq<>@nq|wv@6ka7qvZW zJdV(&tem?5-H38U8m}Oc;SeF^9gn$pA<{TazYDTUy2CsHR|XLHqxmog@Hs@EL-je> znFF~Ts0)4NKvb6;3h9~ytIOevYYtfFKIF)O>XburIRpXO(dQs5f47e(Gnv7_O_PoV P00000NkvXXu0mjfR>_G4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chansey/normal_gba.pal b/graphics/pokemon/chansey/normal_gba.pal new file mode 100644 index 0000000000..556aaa5e1d --- /dev/null +++ b/graphics/pokemon/chansey/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +246 238 164 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +16 16 16 +255 172 172 +255 131 90 +238 90 49 +255 222 222 +255 213 213 +255 172 172 +246 115 115 +180 65 49 diff --git a/graphics/pokemon/chansey/shiny_gba.pal b/graphics/pokemon/chansey/shiny_gba.pal new file mode 100644 index 0000000000..e8107f8d5a --- /dev/null +++ b/graphics/pokemon/chansey/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +246 238 164 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +16 16 16 +180 238 106 +148 213 82 +106 189 49 +255 255 230 +255 238 205 +246 205 139 +230 172 98 +123 90 16 diff --git a/graphics/pokemon/charizard/anim_front_gba.png b/graphics/pokemon/charizard/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ed3233827164ea868e58030d8ca64c55aba616 GIT binary patch literal 2039 zcmVxV*ivu-eMq>F#y%o)&Kwhs)udI00001 zbW%=J06^y0W&i*ObxA})R9JdBGz*M6vE`Y?wxx$r{BGnZl3j;0; zgj)z_wMy+2UIvI7HRJ(jVDCeR%yCz&y;O=T$(hBu(IuOGdtd?>$Z}__+J$i40Rqm- zy*IndT~cxm0WyU}cz%5E&CL7wld+$(lK->6@m28wUfvBXzFK~m-?eYe-13vS!`X(; zWC<_@w@f6N5K(0eR!!iyg^0ne0J&nq%7g^&)qzmeO;`dVZXXb!wa$S9r~#Ser#1mv zi(rC`wnAIgd}NVL%h%`O%vT}+@I(7|ZVfo4{li6|<@Cq5LPnf`DhNxS_BvgA5d;%? z`RD)2XwI_4KCB&D+MQ0v_5wUBF1#*FCbm7TJY4h$7>Rrz2tcQDUICpYAORp^7Dc^0 zh9${Br+aV(R{$FDmJRU4T?6cE{x;>l0&rJ>*mywTFiHJ(icTU`0F7D*9plvB`HcZy z6~J}@?CK< zxBDbXzxzN%bWpsf9;QsA0QPtHJH1}-5H9s)7GVs4KnLHV0`@v+!L}EPmTqQ%9s&&$ zBm%p;yIr(^FFwJ<&F~zl-Ft){+U@)h1boyb6P&v&6BuRBeuRf;x3>-O@#!ac432qs zh!0T!lnw>3@3QyzK6=bp^VC*}MNgVM?h?>AX%p}eKkh%KfSb0`%Dnk}!!^JO0rb(% zFXdFnc~ZCpG#bN`?E)y49~W8UHW?O3dx$2oi+Y8G1mHz*X5F}r;b3sWtXhp(VlfG0 z0z7x|f;9%t{Z$}CK+;Wu@)yw@fvpw5iseE`kAUR$Il37<-Rc)WqV-FrL?}Y=z;V8a zE*1R4z5jIUGsfoBAA%r|*d!96A~-ra`ZNl$A+Yzy69YJ~!Bo72D>Cm|%E#&le*OFZpaJK3#Hj|CfY1uC zx}}P)htF`|`GYcLUIBP2`ZpPVIdo_#ET5<-3>DKG!-&obKMV)7-^crk$}~_Qalwc# z3xPfX&#`eX8_Wj8aSV_dAQ=n>WB{rb#+qQBPXqx)GVJ&JXaLe$8kzTv#B4Gl08Ko{ zBh-6&GY7=XSQrjzKdB`uV=4WwNmoFC`>^VPh%bjj&j8rPEKrbmdX=y^r;L|m*)l;3 zm#r;Raz1@RADBIF)&V7|+ehTzd>yz{I#K2IG^r1)dAPZ{xxBjNxON$Q{AQfKd!G=u z`4a|y>1BG;yA}@A_Ri2Wz&n>d$AZJhdxsGVf)|Y)%BkDL294xwHgy|2PHW5QpKLc) zznc$Dtd+*Ep09lv&Vz5M%D+JbN zjm=-T@z3f>GaAMQXl*kc%xPS;R}B~mf!Y3Ei?MId=|3B525_|69=+#1wqXFaT{CcD z6haQ*odhq}0HYw#gg37N_i7$4iuvy4P3PNl0yi0Rmq0P!pO~z*0!e>%m^Cdu^osdz z0PJd}{oT6*po^fPLm|9}8&Tzf#<$%)M6m_2C}p8l^f?4L-#gU$)d85vT-HwkpofP+ zz||}WZI08RY7SP8BJejH2k{Fn^nuo@Y91<#3J)Z*X5$~TKx0R*%GP_OOi#afIKy!v zuYXHjn~y}PWcVT<^`r_f*AzO5lTX3fKN`(`1D$H4alvR3-)v zJ|p9BJfjXXF%Zyul$LoR1j#s0yuJ!?I2izVuahiOPl|8?IGe|Bra-C|fh6Ol0R(V# zYR<)U>`jyMIY1P@CCmuH$*H~Ri0hcc*N#Ij0A|71EdiXIkr-bmTKS|v97q8c63*Th zryz@&IP+5e`V9$?PrpbNq$=gS28;xcJk$pUa8$(4LM_Ye#eE!V6#g@w176~exhj7` zG$oypfUlir1~|r?;jCFswkA$>QV#(AfdQQ3e6}u2Xe2UH59%9~7kLP<`dh6zouN38 z$&mB~NfZTjfq;t}Erx*67vy0LumThZ0=^j-fk6h==6g1q2_s>Qz&I{SqqatZ11ZZ`2(f3r5@eB5a6o99gwge!!ls530>nQjo) z!=&G=(ef*v=@xa3VVQ}w{Dx&Jw5~CXx~QKVMNL}M7`eJwz1!6@7fzn$;(s5? V_GY^l+mQeO002ovPDHLkV1g;bsh9u& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/charizard/back_gba.png b/graphics/pokemon/charizard/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..22cf6b0432c0c78abd7b744982dae0876a215d9a GIT binary patch literal 829 zcmV-D1H$}?P)xV*ivu-eMq>F#y%o)&Kwhs)udI00001 zbW%=J06^y0W&i*JyGcYrR7i=?~<)UAEobRWFr)#bIIlbtRsQ0 zvW|c{ij=x%>YSl}?nsf6?bzLl(tsoQe){e^9*?Q2|9WlR?YKDV+r&|U>Td}s4ccCd zVlTV`fbojNRy}zV06Xrk*yFcZ0AB@STs;wBUIkKI=>UMkE8*!#$=Lt_?)f4*9y!*K zh6`Zi%Z0d#_8KZ+2+&q%7CI=)et!XT;V>9PXMi|6{rE@%r)#RjAf5YB1aj2>j#79p8sY(-pb`(EPfj)Nuxg4{9zklAYGO+0wM@+!O z{r&K1F*-6pX8@g)W5<1ZxO@BI*8+rYqDlb<3C0nCZu)ljPL^&71@tVWB$PeSjv?&| zmd$#j%f@*w0SAn$oNG_Q`H>5C>M_QPhi2J0RxqA{NtU?KfPHqu3SJ+iTs6b50k+_^ zJ?Rz677MI^PMva2tIU%fw1c3)|4WWM+RUun8B0-I9m{WwwEM< zwzmL~0nj;#pmREp>1@GK-4>d!8L(y0eX`K|2B_(W#RAxV7GMiF(H{b`O|k$Gfo+^D z1{zCEpPjP>Ft%hMk3ngR^t3A$z_i&SS!ii`Ban;f3yAoogNxmae;NV00000NkvXX Hu0mjfDq?jH literal 0 HcmV?d00001 diff --git a/graphics/pokemon/charizard/icon_gba.png b/graphics/pokemon/charizard/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8140887b1fc9d0be5119526f54ea54506168b8 GIT binary patch literal 462 zcmV;<0WtoGP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IOi4sRR5*>@lEG@jFbqKT1@_wO{(+(8Q$ z&c~VS85>xZ^Bi}ev0X)r&zB#-EhqRlq581(HiQQvHmlJ6@NMyeJA=Ufg_q%Y+JH{s zqF#3fIV@4LYr-^xOc-X`8)U-Nq1Kl)gA_@u5zL!G$o!fFS7Blm$S|RtR)fsqkw=s} zYz7Hl3pLOUa)HQ+{R%#Q=D!gPbeS?|0v=y(120*j;s0=5HXRsaA107*qoM6N<$ Ef`?4dcmMzZ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/charizard/normal_gba.pal b/graphics/pokemon/charizard/normal_gba.pal new file mode 100644 index 0000000000..154a0f0c55 --- /dev/null +++ b/graphics/pokemon/charizard/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +238 82 65 +197 49 32 +41 172 189 +32 123 148 +24 65 106 +255 230 156 +255 213 106 +255 164 90 +16 16 16 +255 197 98 +255 148 65 +222 98 32 +148 49 0 +213 213 213 +255 255 255 diff --git a/graphics/pokemon/charizard/shiny_gba.pal b/graphics/pokemon/charizard/shiny_gba.pal new file mode 100644 index 0000000000..0704ae619e --- /dev/null +++ b/graphics/pokemon/charizard/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +238 82 65 +197 49 32 +222 98 106 +189 65 74 +156 32 41 +238 238 156 +222 213 131 +205 189 106 +16 16 16 +131 156 156 +98 123 123 +65 90 90 +32 57 57 +213 213 213 +255 255 255 diff --git a/graphics/pokemon/charmander/anim_front_gba.png b/graphics/pokemon/charmander/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b4f1a3c73708bed697ea997301fc3f2fe0feebd3 GIT binary patch literal 873 zcmV-v1D5=WP)JqwEzGA|K^VsONOVXiWfR$ zLAC?~OOy_LfeT%bSn}*8su<$4P_2|ox$`GL;sdbs3$XC++yWBMCm|Mu@-m#2_tV|~ zo}cgjjBVrJ4c^@I=SwKOgq8sBJo)|t0q{)0bJaXjL>+=@EXFwYMvYR208%lVT7Yq-8cJk#3$PmVgvgyZ z&0f1FE}m*iM3!a~_wYdoofF%@O1iQ76g6|8O1W|C_TOF}NT4cp1MuSVG3164u{m=9 zTpkQ+r3eu#2e9xk3KK4L*iKi^D}W|Jkld#w65Ev6 zGUV%WL~T@<)FVT^a3{1xeIe6StzDe2&oRY;>Zx{yFdQ+qUa#v8;0NYE3%9Y2ZTx98 zp+9dVc)v?7CFH&jvs~cS>9Gg)I7Nrhkqp|?6vzt)V}idsc)2%SK#IS+b89dBziA!9QcNzv-h*w}82zjUB3UM4;08esSWHuG?o80ATAc&`8 ztP5C<=oMHx&cvAGS$@``@kNX#0{!M-F{CSr7UFcmdJhZ~9hGzzVpW}#&~#K%qJ_|n zsL{2Oz(%46(N!ddCFx1q%e!|!+JB-*Ps-ct|Gm4rDG{3%ICQr^RjL-)J?!!iOfMYJ zX)v&#?Yx5<|3IkJ*siRH{$c-Ekp`pn52eRoDE!}e4F=BqmjfLb-48p|7m;&m2AU05JqwEzGA|K^KlfQ1lFc8MgP7^-O9Q4tU&#QdgZg-7EKGrODFA1`5h}x203Dwm zfN5rXu)uc!6xmHc3KYl(&H+%`HV+2)aofPOEE99@4N$v-z(tuR#=`<^I5lXQjsSBH zAcWom@-!!z?_oIo0hs1Q#+%!v5J%(zNluiBiO%mtGk1ZK6l)DEM)H!#2wkU6g&>bm zmeM?NEQ)ZS)(K576=szgV;cZZA5`_QSGxkd3ITL#)X^~|!C4&wy?UCNTG#L)w0R3$ z_7(c8oi#vb6ng(96i^#LdDseo#i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Htw}^dR5*?8lD!VXAQVQwC+K|}M<-vQu1?-=GMI2jUbSh`j>uve zv8Yh!?$E?L@x0Za);BE-kqG2)c6y#U@6_Qbco`T#rGsz!4- z)&RE0KPew!kbn6r43&QDMVMjS2=n%%_TjgFyZ}9hhL8VL-Xs73002ovPDHLkV1jr+ BgXsVO literal 0 HcmV?d00001 diff --git a/graphics/pokemon/charmander/normal_gba.pal b/graphics/pokemon/charmander/normal_gba.pal new file mode 100644 index 0000000000..1e542aa488 --- /dev/null +++ b/graphics/pokemon/charmander/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +180 180 180 +255 255 255 +255 230 156 +255 213 106 +230 172 90 +213 65 8 +246 148 8 +255 197 98 +255 148 65 +222 82 32 +148 49 0 +24 74 49 +65 164 123 +148 205 222 diff --git a/graphics/pokemon/charmander/shiny_gba.pal b/graphics/pokemon/charmander/shiny_gba.pal new file mode 100644 index 0000000000..3b5bff449f --- /dev/null +++ b/graphics/pokemon/charmander/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +180 180 180 +255 255 255 +255 255 180 +255 230 148 +246 197 115 +213 65 8 +246 148 8 +255 246 90 +255 213 49 +222 172 8 +148 32 16 +24 74 49 +65 164 123 +148 205 222 diff --git a/graphics/pokemon/charmeleon/anim_front_gba.png b/graphics/pokemon/charmeleon/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..909f4f394e1c0599438097b83f6d1fd6f0d54e0f GIT binary patch literal 1386 zcmV-w1(o`VP)>Og*`P z7lT5909^!W=wCu6=jESn_y;7ZnV?fGmA!kUD3YQKbSsLS9m~#r z-rc>Q_tmsd_AgD&=;u}EYD;sj+JI029mmler;RXNK_AXw3WEWDPRlzwr#fn{v@FqwGR15>qT@K2UVr!T-&zu{CU$KdW?${f7{0xr%#<|R`*9P zV~k@JdhY;dGX9=TYQWU>7>gJsvHCNu)42-0T8Pl~ZYID0bLiU#Gqo(W5LkixdWZ2; z)4zPvPZYqbA-X<)@uBAmXf}q+Ryn51&q2kWBaqS{mR2UgaX93jB>&LDN`%OdAy~*5v(L== z0z?jo5-J^qBlm`VCeA9%VBlVg!h&@FT!i0R4?XaC?bR zk{|D=3GBdb@YMyzz*@0J!)G9>KqzIL9UYwmNLmgf=DfCBn&Ghkemy!?s{xA`d>_&( zpk&@_{FJJE1WMQaIofpE7|I-+Zn%x&LQ zV-aYNpl?qV5MvFpHG=gX5cQ7wsF-8N^4Lv3wvS_KTZavjmX^&N869L9?! z&?y7eM8K4%<>&%*?9mFq*MGfKd$Fng&wHwu)heOoLPc0l)a&&M`s_718~ zOZa;+P4G!QAYlC+u?i8s%s-77)x!?MR%|Z(O0A_rz}Gv8eVWFHKNzeY*(J~=38du1 z%#5iYl^F_^f|Kx<^1%S?tFtD+CqU{zwW%yFo7GAPp?E-bK+(m#(l5hOjbTuq@2K>_ zyljVt=Ph@~TwtdFkvGh_DB?!7wa4=!uoW(lSXRJTwQ~{>+-4M`c<7@B@ECTpEN}fP zFiNl55sKu}oi}aCIjb~pBgrzKlS}6EL6Uq}t+|X`Ix^^wpdufZCFqMA<>wImcE)p; zT9ai7)*Vw?4}w3BZ4N6dGU)vSUu~sGpB>p}6`%-Ue(c9;D^u+=6bF}ieEe5lB) z6sv&7Ga`gfhenj0Q}5kL>zyh&{#gO49+{PkaG2`7_bOogiUf#i{;=|^B$-tE0VF{F zB7IR;IEOiIdi)g%kQSgY6L<9M69i~c+vI^k)n8oRyBMHdU(kU>)vb1=6~J2|KuWdm z?akfH=IZEY>r!x8Mv*<+l;lZqj11VIlMbKES`}}F&?z@6-c3MmF=HEQ$W1q*#e;xp s>7U0BN)YSgUi(6oInu)i{r@@p2TzX3-Hsi8IRF3v07*qoM6N<$f)hrEu>b%7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/charmeleon/back_gba.png b/graphics/pokemon/charmeleon/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fb0c7769071a0e96964d06dad54e9b32045cd6 GIT binary patch literal 583 zcmV-N0=WH&P)Kl)Y|)FcgKou>|GmP_pD5vP90%p$md%A#+tJcGN6g z!nI(m3W!(mo<#KehXxZM?Vh_Ke?I42`x-)?_3xUA2S8OkAgY2*69r?eI!*vSAaTg2 zJRT7~q|-#D0d^P_V9EjuCA=YEmY8)W5m*lZMY1!1@}L76rxy4a24?$Yuh&7fLFs+Q z-A*fTkR!m}3XB4_2Y^fxFB$DhM56Mf?UG!Evw(m2z0sSMxj_z&9D{rfIJBL>z}(o4*I<3Owr%^#g-@ V;`83NP!s?F002ovPDHLkV1jI?{^$Sz literal 0 HcmV?d00001 diff --git a/graphics/pokemon/charmeleon/icon_gba.png b/graphics/pokemon/charmeleon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0f1550d0c9be8190c3047640ccd962e35df2747d GIT binary patch literal 412 zcmV;N0b~A&P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I8c9S!R5*>*k}+1!*r1k<1~%Pn%rk?%kY|9BB2BH!kw zC z7$LD-yNSZM8h{U+S>NiagYLjsBz`n=a|uQr{aEZT`tbwSVXHdvg4J#S0000t9FzV zN}VE0_(|BZYN~I1rIICIxDDpFtP7Rv{l(2aY}a)e4=hU`fv;!vo4}3%n1IK1t@UyN z_GcHiV4{WgZ-8^NfEGRl+`ndwJ-PZ4P{6a_06hKifCOG%8sOmy;HLq;(?I*zZ2;=7=St{o3ZV$jB#=Whvnj8g1iT#xC9P~HIf2&KJJ7#;50{! zHAgSTBEW%gYt$TVji3!51)N6>2Da%FZ}gSx6-5Am9j5IzMA?SGUdN^jMhQd+aOYe^ z1wjCt@F8cyAU@FrsGf<)0K`E75JuYLnLZ=04?T0t=RmxyLT^8HbP$kPc5)5gP~7eoyvjp!Q)ZyHdWReEZE|cp_ujrTiV2iBR_C9sxjfH@NuL zlM;^{ll=`Qf&o>8S7g6G>=Q+Jk4^S-@tUa8E^qSr6t8jt30Vi7 z0&^HPD(+U!+WwYvcD zKHChE-7`fJQ&1aXUF3fR(BVNxWIQ0Za72{B2oXfoc;I}T)x#Ntdvr#Od)oX=xQDpE b)>_tI4e%J6|C9K|00000NkvXXu0mjfu1sf8 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chikorita/back_gba.png b/graphics/pokemon/chikorita/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..18c3569bfa4d264da7379af546f6ba1bbb22c8be GIT binary patch literal 569 zcmV-90>=G`P)Kk}+Fan4}C>ew`dT(mNha3hW^h5VX15C@iz!@C6p(emQ4uLc3wXPT0I>>qr@{}4N zI5W@!{xxLu#vheW8_2U3}{{l4vbM=Cm>fjrZIvAstpj<0mn^p9qrXY?M@9K z%n_<|9gw>?EDDVIn?H(vsXx{aab3!YB_KUa00000NkvXX Hu0mjfnD6j{ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chikorita/icon_gba.png b/graphics/pokemon/chikorita/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bc40d0e26145d76883441b1897cdf9ee99d29a GIT binary patch literal 334 zcmV-U0kQsxP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H%t=H+R5*>@k|7epFc3v^g61^k0t6kCk4z0+TgOqsVj7u2kl2v6 zqPtNbVcmbTyR(@*rGCD2dCHue6(j-1@&;#&m?^dtv0=)SSec1NKA;bDISFv3V{i42 z^o{O4UJOtLX<$P+6W|yKL^Hra2ml_uV{AaEU}m6;@IEr2RP-V)ME!HgzpNR9$QrN$ zBp7K>6-Z7rLRDcJOV07*qoM6N<$f^_d(|K^nc)mlMHYQ;)odnrNoT66ZjTC8(QltxAx00001 zbW%=J06^y0W&i*JO-V#SR9J=Wma%WsP!Psnhb+cYYEd>83>##iXD^mKfL}VWRrMR1 zxr+LiROy7ekxsFk41E(w-3*dJY;gzDF@667EC{A@cG}H%Z-|71$hY24zE8S)zE6mM zP`BSL_2FBV=$;IZ&p6=sXmmQ>=72G3Euf2a)`R#lKI1-sy0FxhQf&P|N~yW}P_jfv z4gpg6x}<w~QFr?YKpvX~(c^*C00S`Bi}&romuH|g#0GYs5P%Pj z!khp)as@#2svU54?g3&RQ<($-)(0sC^ktGD5D*=NGnKUqDanaDJBijh*r)19c%d42 zbRFd>zAnUUvL@gt3ouiI^#BLgo_!dd#0r2Fh*%E@e6s+t6}Yjr=<)CW0Ae0UAud_q z5-cv=(C{wZD`R*Ql`*`Dd1WjnipubNJ1?rwEa4U?)@Ox4$u_Cx#RnD;ZdLKXMt?=! zTTA`tF;DzD8J_aT{oRPY?)CLw4`>nwyRpv2*zz}b_yA(f56Y4s)ZP)FANqSo5K1{A zfx{f&Fb~N5@O1^men|kAZxD#UQ1QU^lL$|LYz)!E^`C;y!I+rJC~0zc{(WK`*&Q(0 zZ3i5ApD?BrkgoCpWP}GTWgRfW85JNzCh-G7LI((uMOx>Q>QL*UQW?8aTaWfFk<@zr z#jM$v3RMzcP*PdISO!|mYY!)xoX(MJD){s47?>ZRh-S-=1Q002ovPDHLkV1kvZ BN=N_z literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chimecho/back_gba.png b/graphics/pokemon/chimecho/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3fedacbaf0bced63430bab05b40767a20dee0e GIT binary patch literal 507 zcmVd(|K^nc)mlMHYQ;)odnrNoT66ZjTC8(QltxAx00001 zbW%=J06^y0W&i*Ic}YY;R7i>ClfO>GFc8L_fh9s}D<&oc%pKs&g4BWL+JOZs$kG{A zyao$$-yoStm3GNv@CKCG4}noTA=UY9M@VF2VJlK{wVsw1aIM@dA> zGB$FBKR{E(^k!3jjv85C-Ov;er;@&hNErZ8YV;m60MHt*qy#epvMkd=isje=T5G^- z-eLR@GJqa&dWwj?1UgtTz&;MwunW9pfY+h5q@B~Tc+3GO*1nUthJm$j9ME?Fi7q6- zf_qr7XBfIQpbl7zs z)EJ0G%>(Ju|1fabO?s?F;l7K4ikmu1N91!)W^Oh9#MVrSTjc;d^u7Ii`xPkxx002ovPDHLkV1is@i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HfJsC_R5*=eU>IuP{|8h)e`q|az}L{w59k8(QFMrehIAk+;XmWz z(b112@F(WX8B~EcM^EqAk1TNR$+_Lg0{myryy-@<_g_aRvJpTf|1sRofX1IQ6HVaE zd4d9`(G2~w8%^LhibEj|VHi1JI3*YcbpFqi6Ho>I&^N^Z0JOkoRR^dm@&Et;07*qo IM6N<$f=aM%OaK4? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chimecho/normal_gba.pal b/graphics/pokemon/chimecho/normal_gba.pal new file mode 100644 index 0000000000..9dd34b7c4f --- /dev/null +++ b/graphics/pokemon/chimecho/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +0 0 0 +255 123 148 +156 197 230 +197 230 255 +115 148 180 +255 255 255 +164 164 164 +255 230 148 +255 213 90 +65 74 106 +197 74 98 +123 41 65 +246 90 115 +246 189 90 +172 115 74 diff --git a/graphics/pokemon/chimecho/shiny_gba.pal b/graphics/pokemon/chimecho/shiny_gba.pal new file mode 100644 index 0000000000..44983802b3 --- /dev/null +++ b/graphics/pokemon/chimecho/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +0 0 0 +255 189 90 +148 230 148 +205 255 172 +98 189 98 +255 255 255 +164 164 164 +255 230 148 +255 213 90 +49 123 74 +197 106 24 +148 74 0 +255 148 24 +246 189 90 +172 115 74 diff --git a/graphics/pokemon/chinchou/anim_front_gba.png b/graphics/pokemon/chinchou/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a573e698564e515613f49d28fc89896fd231e921 GIT binary patch literal 962 zcmV;z13mnSP)OlVi=?V01yxm)9+#p00001 zbW%=J06^y0W&i*KKuJVFR9J=WmoabJKorMM2{;jsguJ14a~qZ{RgE%MQQ{=((pC|6 zlnK-tBf6NOAu~&4lBo;oQB@@iBBT<{2BlHDw*3(O3LX-wD1&?FyR*;6WNuZS#Bsj& zyZ<{I#QOulEdJL}6ji%3Zyp@f^yzuo#AC9E$HbO7B@e(Z9=5CV#YldRZAn(iYc&F7 z*(B)@m59V#a9IX|gWtmv*6$J)10|Zl1a;jbo1L9i-;Jl)kr2>%{p3x&pHvH<%4ERb> zR$)^scpFdO6JUsdPoBWjo2H^vKEjfQB}CXF!b7_O`<_7G?I_A?_ok`gXZZ!v%0mcS zeW0#^$}iZ#3KtzzBeCY6{X2xc%Y>X2_CBC9c2;F(Pa*}CymBA0#I&%bBHg(uk zpQ&3Ab~Jq~uhbc^)azY1!uqnFHw^@+l~zeB?5wZYcB4;j<96f%fW$S`3*FSTQtsjH zI~!6U?c#eh)N3t|@*0l3>WUCDfIeo|()_Sour!3NOArcopXJN=LH+EVIbi^#_qjYs zk0Jtit>)$F7s8DS;N#*Lo7O~z#)6kxxC`)9Yf}N>l1h`sXEBRe{Jk+JKjJU9%wjk% zn+I=HE?*4y#rdp>`^B1{M~&^AmpCLBj7Z?dCvwelk+mn%GQl<;#QT0eb;M@gRyv9q zzgu>Ffb88R+k7BZ4*;*R6X0BG)5U=l0QeNd9)J^xo>Ht!_rgGxF4KM85P-7eXEG(R z<*p=U+5zCud-a!7^$-Bcq(TJX{DDQ!*k#M&6ksq75Na_1_Z)nKfdIQrXPM&|AXU%M zeWHC7=V6fXV9O&u9{}PAOa}Ha?)1Ajl7t=YfZD*X0)x0R44v0uPhkke4HXp}M?>xrzellLpMg{6-e#Y9k7G k5m=P8TZ{u{7UkcLKj;W!e6kEWjsO4v07*qoM6N<$g34RJ2LJ#7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chinchou/back_gba.png b/graphics/pokemon/chinchou/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b11b2dc5f7ef57710474d46c2078fb139a55d0 GIT binary patch literal 637 zcmV-@0)qXCP)OlVi=?V01yxm)9+#p00001 zbW%=J06^y0W&i*I`$KlfO>fKoG{Kh-@h!MeeAr{OM!fAba=$l07RO3eLKW zMSR{8r88x^TfYHzcmR|j(sM=nhrF3?@_AzS~5Iu9cJI#K-`{tWH8Q`fNS?%e? zpL=zs)G;C2pBJ{itdy#MS^O!{pD(LQ6YcL&$4(KCqbk@UK>NLK)q3Q{G6=Q~*T6;< z1VN?y;}JNi0`#nZjO{n=a7ad;RM@J85snxE|43mq?Im{JM}>qwsLcVur(SNF zvtI8z`U~*bs=+$L*4uxzYK&t&0;z=6`JjV%lY=4Z!4e?W@6E0=0a&g-&wI!9gq&Py z+Bcg$(RSwS83Fv*d?PXHFee7(2*2pMQHP8I;3xw4nM3y|uIBh@x=U25`e+O`a6&eHgyBfFefmz^urVuhA`lp@#-$ zved-Cw_&(r0gDezN+GX!qF=lN8NReL_@6nKQeJC$zQCutv;GWBiKFEKPlV{;sT}nm XnpF$TaD`D?00000NkvXXu0mjf?|vh+ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chinchou/icon_gba.png b/graphics/pokemon/chinchou/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1b585204b9559f6629d5e4cda1aae320b4a39500 GIT binary patch literal 378 zcmV-=0fqjFP)DV$6f2(X))f{}{=bRkd zbjkr7>y)%(AF3)NB{r;07*qoM6N<$f-3N;FaQ7m literal 0 HcmV?d00001 diff --git a/graphics/pokemon/chinchou/normal_gba.pal b/graphics/pokemon/chinchou/normal_gba.pal new file mode 100644 index 0000000000..fc382ddbb3 --- /dev/null +++ b/graphics/pokemon/chinchou/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +205 230 255 +164 205 255 +139 156 255 +98 123 213 +65 90 172 +0 57 115 +255 246 172 +255 222 123 +213 180 90 +180 139 57 +106 57 0 +139 98 24 +164 0 0 +16 16 16 diff --git a/graphics/pokemon/chinchou/shiny_gba.pal b/graphics/pokemon/chinchou/shiny_gba.pal new file mode 100644 index 0000000000..babb781788 --- /dev/null +++ b/graphics/pokemon/chinchou/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +148 238 255 +123 222 255 +82 180 255 +41 139 222 +8 90 180 +24 57 131 +213 255 115 +164 246 65 +123 205 74 +90 172 49 +57 139 24 +32 82 24 +148 57 0 +16 16 16 diff --git a/graphics/pokemon/clamperl/anim_front_gba.png b/graphics/pokemon/clamperl/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..21e547219de83ba1c17dd3b8c0edbfb5e48cc835 GIT binary patch literal 860 zcmV-i1Ec(jP)OEQgv!ypiakZX6%xL-T`e>-#IT3{{@!e`}@A{JKJ|Z zO)K<;6=ns|^8U<}k<5ud>_0w900NG8~3z5Nu*?YRW-v6F* zJ@~6Jq0()1VU@gE9<|Ajmx$+yLVyz^xPXw8vFwvyz>(}Fmt7fWr7U9|5% z{!H$+7XBf!oANxk$VMkga+lsCeku*1fn)K1lBB6{b|eEBy}>Tp6K%GUjo({YM`+y~ zcM$%_yTs_Y^K~S(S!HtvA9%~9bA-K~{NMrzC*FiOgm|RubRm?A2%Cg-iG#66CWMUT zCqImcsr#7AH+2%phOs^}`s4`X15ybsQ!!B?oEj4cLa!TshK5uEe=#V9R#-VTMlhht z_jgKz2BZNj(_o;AYaj{&O8JLIiUjK{JbFge<8K@*<;M#ZDpV*>r4^zKhPm-;v3gww zXL$}DqQg=U&7E6{R7HF1VrI=Z3m! zDddnNwr5l4+p=}3Xk-fO0wH4YwJxAkCpcxZzYx-BDIjM9IBS03X|g%Mns7G!pkNpv z3i!tlv9z&*LHRj9G^SYt)wk#VAAWFpyJohHQHve!dux7hTwCU(F`ILKI1&7C?<3S> z*?kdkgWa|TKe)CqWNXkOpJM|j49*wG-SefJA^4$#_CBQPeH*zi^F!OldHisN9nKH9 mlgkfR2L(T@vK0LA+VvZ~cmmhd%!us(0000K(y`KmAPfg^*SdA>6GL4(l5}x|_&tD@t#cphOC)$w zsC)04LGR4({t&S1e)Ww7a69auVqD+|+#}b>@I%l^`tvBT9n=f3m|#ozSsJ06qApeD zLpKcr1EOgVfMp-<5sfi%L8MudmJ$GeA_m4H(U6j={RahJ-kel{wEi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H*GWV{R5*?8k}(d0FbqX=g60lkX%~jFH0NW9rHY{}F+-W#vv7!t z1B8kR7O2w!8zFVT8sq>1#b!$X_z+tQtqk+dVo;lZy!T_A67b`> z`5+>3O#Gs~SMr zo8B?7N~d>A0IPIp1N0AoC4h2~POB2YA{|sK3s@T9bpu#ffTW)oNNV6C*3tkk_JFf2 ziRu(YRXIllLW;xRly`qW+}D$2i~k8*SrJBq#l!soAu57}pKTQ!<}ezrwi~lRbg*j+ za5f^?B)_lMiQI0I;d)KUR?x=U%>ckvLUaY-N)jo#6@guN4oR;rrC?|2^OL7KRgb16aw`;p~-F}3g<^21Cbo_vBFLXIX*eW zIF%8ZgEPtVOvERL7(iJ3is!FqD0&7Yy=csF9Lqifzv+S)h}@_V0m~r!e*kz>xDjQ* zqh<<6DG~m~8H$Kxrj)B>0}xV;44~atp9R)QsQ3t=k*tByXW^5;Ukw{6x}88~42WPW z{EQ@t2Eajlq?UOm2_IeaPIEXu?|`3SpK{T5OF6j#@{BKm)@!Uz!6R$G2@x3qi1(r$ z;7K3~Ut#SRC0Cs^l_$>t$*wNt-F0p7lfL z|JM(@_~;cJK^zkouKp7jZBOeDAbfq3HTA>AFStK5)o1DOUdY)E>jQhLmp7~#NW*!tmtmoV6}qgn-9Z@>z|)(=~PW}vO-t=FHt zU^5x6SG2WvJn+zuldbm>Mj0uAUrqgR#br`UgIY>V&gh5zIIi5U=?BLM+5OvQH2jdX zmVO{px;7!|g5K)~G6K1K0+@4UGANuPtGhe=Q=(s)qr>GZ%o7VhK$&ap!XM5w`r;8_ zj#EY&%{lgU;RC=chgmvf?q_b;XP{pQX?mIJv2WzbfFkV z|Aq`eAl!2Ymyvq_B=mw9-9G{w=mRA!1>vCEb%h&-GX@|X{S4BLWK%&P2G5=q1m<9- z*4!{hNHaI&mwBsxfN;nj6-2v!$a9l|1w@;_!`dOM6-3)D$C8ufgHaG?1cqSwzzX84 g`oVkF58p7p00SVv6nPv|0000007*qoM6N<$fCmA|f=Fcik&O4(yaAtGV1QMW9CzCg!r%|J3U#F@!( zd4UdOMCuT;F_KqE7w%AX@I&<++XSK;(djPjiDbavkMH>S4{@CTFkUzx2f{d>jvB;q z%*KI;e=raNz{f`UHvozNU?fMV0ZyJsljIvrBFqBloDt%XM{2Uqc^JjUfOE>pB7Y!2 zkE75UfCc5uI}Qdr$hGDfjSTj8e8c;^MvqF2aq#i0{V!Unhbs^ z(qo=E6{uF$tsaB&%ikTay8Rpgfd-slSt`YP2YpknRa*t7Ot-xT3Wj9f zQ^u=atEI_+79>z_y1xd1AX-tl3A#P!Ql{RpzoGz8y;xMWtTS*N!UIKdxj9oUXRzEr zQg+|8FEM3!++ZUj0A~{)`c3VG5uQmsNpa=iWfe?E}Cqpi`3liIJV41AxZV zPBi3ZO2{+wL!D=l|_=WM(A;8D~JN~Ws1KvqHr3~^8IsgCw07*qoM6N<$ Eg0%cv!vFvP literal 0 HcmV?d00001 diff --git a/graphics/pokemon/claydol/icon_gba.png b/graphics/pokemon/claydol/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3f04ead94c3b877a349564c4faab2419361ae0 GIT binary patch literal 331 zcmV-R0kr;!P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H$w@>(R5*>@lD!UsFc8Q41T?2{VW7#eLoAy%eK>$-HZY1+@X^)B+gCX^#=?H7acYnp(I$0X9c)4NPnGItc9m-7_Lu6&55n z0O|;(E#X7ajN`(t*>ggIjdgp?89i(IF7zqeB3U4!$5p dhe#0ibKVF_ht@du;N1WK002ovPDHLkV1n~}jsO4v literal 0 HcmV?d00001 diff --git a/graphics/pokemon/claydol/normal_gba.pal b/graphics/pokemon/claydol/normal_gba.pal new file mode 100644 index 0000000000..cd7f876c53 --- /dev/null +++ b/graphics/pokemon/claydol/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +82 82 41 +106 106 65 +148 156 123 +98 98 24 +156 148 189 +197 197 213 +255 255 255 +255 197 164 +246 123 90 +172 90 0 +255 213 115 +180 164 123 +255 255 255 +255 255 255 +106 255 106 diff --git a/graphics/pokemon/claydol/shiny_gba.pal b/graphics/pokemon/claydol/shiny_gba.pal new file mode 100644 index 0000000000..e4203b19b4 --- /dev/null +++ b/graphics/pokemon/claydol/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +82 82 41 +106 106 65 +148 156 123 +98 98 24 +156 148 189 +197 197 213 +255 255 255 +246 238 90 +246 205 57 +197 156 16 +255 213 115 +180 164 123 +255 255 255 +255 255 255 +106 255 106 diff --git a/graphics/pokemon/clefable/anim_front_gba.png b/graphics/pokemon/clefable/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ee7af0d1bba897d8c3a0e3c4c4506ff15260f89e GIT binary patch literal 1065 zcmV+^1lIeBP)l3Qc^c5Z%pcAPzMT`?p0Sueow1nzxSLoE-(AIUH!v2-^JZ9iEqFnBM>=elt2S;5l9sr1b{W9?lxkiJ}0_I^nsFGq?DVf1wDEt<#D4qI<>?(RS6&d zItZ}fyq&BeCxQffC%;Zi7t-dCFPwa&@4^^}eLXEAYIl&G^4b8W4*I^7mZ0aZB5smV zfO%gi&Zkw{o4|ZsV5_DAISS~w*H!2Ax=COJqrVm`Y77YWN&QvurMpR5B103>L z&Mnh4E3dQwP__!QYfrGHUyM>BOXRB;9fJP?5P*v%uSJqe*`aTsPZVp#Yedfb$~Ry$ zbJJTT7Jo0fd!bBRN^{2I-B+~>~dSa?v$COIDK$w3Q7JfN=bCV(NUDL>FUlgTOfgk=e6 zep|28S$Fh3j$i7P{kol{BO4qC+jMfHIRk4pqw~6!^smx3P?giowzKg7l?NEK&u$dt z>$-IS!>UAIeNGhQ%?3+Q@T#x8x!H|dDAv`w^5$Y}35aq+vwOU8)JGo=nz2hA`gm}0 zN#2JplYqN;aPj-ALsAEUn2QJTub5$F30ypgk!vu~kr|kD@gQEjqvzMWGJvt8!*kov zfB8hU(PSq9H4;4lnf>{>-LM%Ks0DPG-j8cP@Kuclc$dNPZxjMGsQhHgcPQWgd)5^E j`nNYfRkY6-5sH5R6c0!*Y~<#n00000NkvXXu0mjfQO?_0 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/clefable/back_gba.png b/graphics/pokemon/clefable/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..42592b8d7b0ec3ee8bde766923f57f07e9c67588 GIT binary patch literal 638 zcmV-^0)hRBP)Kld+E5FbsyZ#aZ%pR9&FxX3AL(T^zYv7AeY7WVr-> zpl(LqqCgJ_{0t@K$P$eMy4-jgEJy#BpA<(EBrAux{TpbAFCzsKMLS%lSS>~E$}8B0-VUArF-supyv} zI>BEA;L-4DECRh*u9OI|^_Gvh2K;g$!1N-^Eel*qV`l>j)R%xawhuhaIs-pNsV%Ei zg8H0oOzaV449dR^ zA$yoB)CIxA(t0Xi8mY6rQpy6*o&&fvlmicWuH}YsobNd&(^4s*NV9uN@ylid6No5E zNyps`_<8D$9d7m_02fWLk9{EEQVnVikU!mj?v#}?n*e+QM)o>hllo+?39zEqpX-Cx YKX?9U`vbSgYXATM07*qoM6N<$f{>gf+yDRo literal 0 HcmV?d00001 diff --git a/graphics/pokemon/clefable/icon_gba.png b/graphics/pokemon/clefable/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4078e285491965c896f5c9d3ddb4902b2f41804f GIT binary patch literal 339 zcmV-Z0j&OsP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H(Md!>R5*>@k}(PcArM79fgULLNt0ux8$pXeiXB+5vap?nYdyjm zcS+)CiZmgF{6g?Cj*dJbemE+YW#V9oLK+T2R>XlIOwNc556)+CwEg4rtje2~Q3T7zQw9pcViJYk5QgwTILQ0HF>i zecAJIXXBd!5lYM?nt15IeC~h@;xD3N4>n;Y4vH}At1$cnc40iL`Ia#FMi@e*Mi{vZ l<7*G;J7IP|__&|;;|9Pe)ONOAED-QVDOaSvj#O!r>iXm(pj5P! zsdBP(IzB_BOA(DR(zUD?MNuky*W9)K!(E9uHV0UUE_VvagO!h zmd29U_9iX(Cm$XKH^J2tc^eRiPB~ z$4~rJ2&*GNS8$xACo?N6UBuiQ*v4PyWm#tGw&dT?;*IUxUcEf<2DhJ_R!Yh1C>&Id zb*y9k+tth&8`#zH7ON%fWjw<#oUxh)FwzqkV?5y9-(HldjR&7t_aEdC3OOJCH$NyQO**^zL7(uzuT#5p syS(KA=lsZ_R12)^Y;E9;FNB{r;07*qoM6N<$g6j%*tpET3 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/clefairy/back_gba.png b/graphics/pokemon/clefairy/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6720a786524eb5ce2c51a5f05d7597a10565a7b9 GIT binary patch literal 561 zcmV-10?z%3P)QVKld*1tFc5~lW`M_}b0;gx(2jY7im8tgRcEng;2;kG zb~081O!l^+X9J0C@&b|aOPTKDzyEv}#-4gqMM~@LZe>eiEUo|q>O1vS^1?Uj)BqS_ zVDa~M`|bmL1CYT8XkG1-6Sc(~hsxvj=>5 zb)dR$umI8!SWP2LTBkt=0vb0$x&TAS#{$Qse4 zcnBg!W=S??)&e%L0OHwSx3nyR?*N6I7@_D_o)#fXZCgmwfo|d)7-YJ}vavpeS$7Cf zG=Y||_d;0$fT95s0Z>m{8)6U0N5Hh7*ZS(lG*b!#l;nZq+IH^sPaO!r9*ZAh>26&M zJ6L}qqQzeRS{C;=Aj-|tfcP^24r3ilKLT|YhZ?7^jgAf=r~_^2=mLfF5^IxLY;JuR_5R0xZXaA#HXA#-~3yFsrIC%hTEkK$x%HSkB`bH7a*OP(l zeITw;N;O=hoD4cY16jyXqeG#j3jcXeJ%IiJP7NezQ@$_t00000NkvXXu0mjfU literal 0 HcmV?d00001 diff --git a/graphics/pokemon/clefairy/icon_gba.png b/graphics/pokemon/clefairy/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7895bb93c438e9c9c87988ad45c976213a91164f GIT binary patch literal 305 zcmV-10nYx3P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HuSrBfR5*?0k}(PbF%U&_g6w@1_Ba-LEV~4fLf9f7%vHADVptF? z64;n!A(PlCf{4GH$IGOcFT{^0J%eRVa|5DV$L002@_QVl00001 zbW%=J06^y0W&i*I+(|@1R9J=WmcL8GKorMsFj9vQ@IUaS1vjCu2|AR5iB6SD(##4{ z&_NtiH<5zrCKZ3&zbu=~*Rss&DdhrtE&pJsQpRC1%t^Ku`O~XHF#Q zy9qHK`k}tfsQi~MqQ?M12_O$x+m+7(QRymxX)^ANlpWv~bDGO%<@y-8`yz$`V&@>| z@1-5?ycWV?3kWd}>uBO@atnh42$JrF^s_ET!nMDj0KJCnC+Vr@zWX{6&@ zXvTP-jx#N=l1=d)a{|(-wuVE)d!uN(8AXsoZ3!7I;sF;yKC6JS&PEUm*2>X4mDhS; z8#YR$%j{s?K#LG6p-%_ZY;URQ%$!FKeRAoCo*r=8v_4Szz}Evyw8s!shUqZ?RyoRz zdrw-xt^f~n1`q+30i!@~PY*mV@&$e{fF1k*%!s$cVHlF%<1&C9?kS>kz=nkRn^k

_3i3vJsn*aa+07*qoM6N<$g4D7MJpcdz literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cleffa/back_gba.png b/graphics/pokemon/cleffa/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b110614e1b7c1fe0f5b496162c1586cc79561bd4 GIT binary patch literal 461 zcmV;;0W$uHP)V$L002@_QVl00001 zbW%=J06^y0W&i*IOG!jQR7i>Klf7<(Fcd~TBvm)w0lxtks&189gVKqrkU5o*qGalb zyLF1qRtX8kQ(rLy&6*m-pKag)+I%DD_+nrCB6Q6^&SG<#<^C)7<_zDqZ3ySN?XM?G zEFH-)fInd@B3yHTaMTdFQ>7B%S(rS_09UDn6&Ifx=jj33_26=veyGN6N^|IP&sfSb zML2Sv^umg!l+rI%$a)T(F~+%a6mdKZgdLX=ieQOc6GVYjAyI@(i0>I;FJ#`-KAZ;} z0?CWhjPS4*#kfL9>EOjAvB|%~g&IH_%@u03m@X`0J=EA%z!R z@EkjM>?@FsULvwFP6mR$3HhQOxa;;vV!gr=_h+aCV>qH=8{{91Mpc4WcHEquSQair z(r~j+$a<0>ByEgCBCB54^0DbG<@cYs;nM?t&EL*13Vog))sgkt00000NkvXXu0mjf D>;1=p literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cleffa/icon_gba.png b/graphics/pokemon/cleffa/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e866394f00a453b81f62b655653490dc6fc287f5 GIT binary patch literal 302 zcmV+}0nz@6P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HtVu*cR5*?8k}(d#FbqX=g5*G~-MI(ci@``?KyDh8yP?;dCe#LN(V zpUZQt(3t=kkglkOdRu!s<(`N6+2};strrKi;4{KMUt|%+0~JPm#hWmf9bppogi$HI zFuVwZn^Ov-7!V1_l#Q0E2a&yh+z@88t+hYP3q9$AgwAEA^Z)<=07*qoM6N<$f{ELL A!TllpK>kf|SQBy1Ow#zJ(Q$#MSg0g?b8Oy|5SZY&;3q?=3IcUxn)=3C6$N4ENPcCtP-zf|Uh{m%#6l!N z5Q;^=Vczc;LWBSTl$bZvpROoQwBi6g*&yHqNlU19AjE>|0#8{=!bnIVgj`a+m2^s% zVLKF&7NTcJ4<5fGj5j$B zqfZf_$VQ12l8|1K`zAQ?skc0(pT|W$O}Ggu=3_GY+iv)MKQj4jcs`x9xJy>VggBKQ zk4$l1{C>p(83h`Z^r`~yv^dYk=aWziG&2-n%c5J$>cQ5pM%xE>wf*DvF3}pF(}CbcEC2JJ z8{x)@Ce+aL_m_z()BI|S>3cL&6YfyubJP&3*JI4DH||{vyRkeJL?V_s8u{D9nvb2M z_%J|hRJT~a-(25f5glwq_4@m^?Y9|BwIJuuY!3H+;Ns zC#B6D87Yjw2J+}U_#y=!92W@iM-qfb>+r2j4cvczECC)-+lKuf5%_T`6yrljH7krY zqRmd6Hixjvwir-^Y{G}~{=@H51n9^{fsO+i3U&+las#S)Q6dnXofB91i7)mDBRWk0 z0ufBJ7aRS=7kh+pYLa$Hp^V*<4MRL#)USkLx)8ug1~3yg_@`&&8)4*=FofTg_^{YB z%_qX>jxWMc?)ZZi`wM*}j6A=9sbVvkQkIo>v?Pq~xVVHsu%VHON$>AC6UN)w@E7)e z5vS5{oCBha02s3p4uTdt^Wsq8&G3>l955;>796~m-ql%_U2>nPgF{n}Y6<{Ic9#%S z!y{f)&mHqa=KkV^F3KGhRm1RZAo$=MNzq~BX49%XiZ8a?;jecvwH-ZxK3pZi2?Ct0 z88H4X0VK8uzK8&4t^|ySGK3*hbtDkX-E|2V50g@$tAZEXO(8oaU_5|Oa2T|zEaGNU zc%oYZ#=`}`IYqZBf}+5g?(P8Nq9wW2J#%>SJ$X|C#;he7K<56TH$=K%z;KC_Bvy4_ z^Fmz$#+L;4*^BFfNa!g8#uw}c4qWX40b%Iw7=Xb$zHFce5Qa8mgjg{b*8pS}MCDh& zhqNTcIz3?Mw^>nqoM7HI0SI2mqR6uR5?x|NLkJ*9k(Ywre9#mE2tv*+REestDaQhk zvV5Y0CKrAwEw0pa4)18NQqKu|{Aj7?9Nwo@|5*a~Q3>N;3i`G?c@hz!00000NkvXX Hu0mjffNiZ( literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cloyster/back_gba.png b/graphics/pokemon/cloyster/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fa69b7b59c14e64a993d04f26c6c8bcc1dfca319 GIT binary patch literal 769 zcmV+c1OEJpP)4R7sBGFbwp;zUC3~H7?UMjK|as<=2^_rC=5&-s3$pAkJ7`uYoZ`RAw6{{C2MN}&gZ{g|(So~H4W z$l2ItLMgt9^k!_lUMbw-j2pp13k^dgHJ{(}7YJx!jnJqf$b*cH18L}101{Wy}DVZ%CWOkl+R3 z>RAriq~j2Rju?Mnnaa-Ytxeo}NGV@hNbJi>LIXUkcv#2;_-^u|ln7VREdaHU0lFoh zAHwSyRzPM?bx&67Z;xf2(F)B9n6+L*rEvYrsND*v6gpJk?)8HJAe9C=NFj(>rvMK4 zQ2a@mgYHYRgN&*c6o4NPl$@ZfA28Rb_o9=G^w2Zb8G35@c9JmzW-tV9J#Gnf3_9xE zTXC3Yl6C;0lfD!#^&!VMKnSvwYixhS{_*$&uR$j)b-wyF00000NkvXXu0mjfrBz)1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cloyster/icon_gba.png b/graphics/pokemon/cloyster/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..71ca401c40290ca4d50d106ba2e7209aae1c21f2 GIT binary patch literal 507 zcmVDV$*l0k06AP_}!0wb&YTFC{n=oMI6=Ca;lg^hQhaD`Or zt`>=1b{_c`+u$Va1zJ|{1T(|`f4BSVE4ySrz`46Toav$1FerUe+>Scyr1 zj9spf28`#VjJ~aJ6z8a}8uAp&f|veEQo^S`-U`xE@ePn4j#|oEAT}<6fpnv}S*il% zkWZmV%dr4bVqfHWp=+$OvT@k=`AeuG((nfi`PU5i+GarC=Wp{MZUtaA)Cj<)zq1Aa z)t?&(zrXgxt7em^8;$*NZqqE&C+D(D&@}<~BvHQh)&Lg!$|4H9oR##Nk;Q`bAoU*($uAm zGkIG$=!VAxG3|%E58jHDF{s00cD;peIAUMSAO+@#A|y(xDNe?2)b{~2scRTM{7qL6 xfYBK(|GZ0-+2&li2hBR^oSSvs6uxhNt#7Q{6x^Q=sy+Y!002ovPDHLkV1ns{?E3%! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cloyster/normal_gba.pal b/graphics/pokemon/cloyster/normal_gba.pal new file mode 100644 index 0000000000..a53db8d442 --- /dev/null +++ b/graphics/pokemon/cloyster/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 0 255 +222 180 238 +172 123 189 +123 82 131 +74 32 82 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +197 197 197 +148 148 148 +98 98 98 +65 65 65 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/cloyster/shiny_gba.pal b/graphics/pokemon/cloyster/shiny_gba.pal new file mode 100644 index 0000000000..8a0d5bd4b4 --- /dev/null +++ b/graphics/pokemon/cloyster/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 0 255 +115 164 213 +74 123 172 +32 82 131 +0 41 90 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +197 197 197 +148 148 148 +98 98 98 +65 65 65 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/combusken/anim_front_gba.png b/graphics/pokemon/combusken/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa1748b3a370c447327b9987d8249390d3df24a GIT binary patch literal 1577 zcmV+^2G;qBP)p|7tnaS~*%dF%S?CH`2C%00001 zbW%=J06^y0W&i*Mr%6OXR9J=Gm(Oe4W*Em`Xdp6!2zeB8nwfg>VZAjb4s{OwG0}LY{Reg%6lG(F9%icM)@_C;?NUfmXlx~> zwKM8y&nqjo99cS!u?O#B*K93RlKZpJ-TEAmN0831d07f66m|^@B4%{`C zt{cWL;Tf(Qx?vdkP(Aj@fC{2YFpcF$hFPzN1LkAX+%nBVSPIj8^2THlmL;1d2TWfL z(N7VGm!|n}DOAtpFPP>hA^ON!fe`va*TdE@B?!j}4J!{~4jgiHHdG&B6=sJ4ANGOi z^&!B>bRRe!0649_HIwyfAY?WGEDA~O8*;_X@-fK;0ZtQycL-r7BZgr~n@0dn5kzJ| z2<%_kx#!IX!D50f@C=ISpi_GQC^^nOQFH-vW-J#3Ae@6bz2p*gG891VZz*+L zVmmh!P{y5x@S3^^rNKLz6NHi@BsRNw=Ycg{&cuVhzb~_2+)?66? zO3w_MXowSSU=VsmtQwJ^&b*%}3JxzW?1}qJEkeo`X|Sb28m(Vq(Qalo(&pn^gq(ju zY=;qYy|)^tEiN=O&ol5WkaOoq&PL8vN+r4fZ1G~MnZcPg)7m+|_T(zm0)!;XTE7ac zrg3SP-J`aozf7Sz=39y#wSdL!NU6BxWvG`HAL2Q(ei`&!T!159tp@fFDbQD`znj21YM|uf|76yUbk#l_U#*bWY35HRHmP;=W0Dq?zUB}q30IXC=eRD8F{I7{F@YV_p zMk}i?%}og%0q%DJqY7gU3>9<$P~!0k(FN`r4<4Ss8AmOTT3KKJZx^aSgUhs?^}l{W!MeVqZh(;h%P zd#T>n*>shg_W{6I+%#$k`j>vCs}0rPPN^mA|tr_BzY^6ETm z{lCQ>v9;?5V45rzPuQqzcFbxQaEd8EkkG_5G?_a4N>E;VtT~#Ke$UrBm0h8U)ePE5 z0q}HRZ>F(>J65F!@No2DoEg(FSXdROoyJYBuG+aBosz;UYLlbOT+ zkKxH+?}Z7b_aPo<0y_AX`bBB)4*`^Zx8*(<0vz+DRfpC1 bACG?k;`2F1l^mj=00000NkvXXu0mjfqcYz_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/combusken/back_gba.png b/graphics/pokemon/combusken/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6c6d094ddadff67da8ca54e5be2c3990fbaacc0f GIT binary patch literal 812 zcmV+{1JnG8P)p|7tnaS~*%dF%S?CH`2C%00001 zbW%=J06^y0W&i*Js!2paR7i=1)iH0{KokJr8zMy+;N(h`vPEWM<5wi@5Ty&pm@MQN zDj8L3YIOmcDOu#ovP&RBgFq`oqGE3`C~oeWz^e6Hifdv5A1q6P;D>35 z82noT{usf5p1}+@^)7?q65trO83A%`0;>_YG__cX0AB{KOf6zCFadO+f$`^#x3LTq zN6RXZ9m5pa>j)T%WPOJuv6GgkwK*U!YK(m9N>DV25v8sIr5%wbRNi&rSnpFRUe1x# z`8t3SO+;zFU0>zLp#&g8K`GSQr{$;(mT9*ZqM=*`fTr+Xl2#W{;NzRR7^+2DMOX@H zqaydN4xdo9h_ui#NO}N>*4~AQ*wTA>Qu%reXjvd!fzQg3wLVBheHwwX8uT8%{?;)mYC!Y^Kk{?wz{-h<$`Vn^5((x!TySK`4}L4 z%a|X``b?AqSprwFy@4kAK2~N@3Kc&Yqq%tJO+4v>hNu|Dc9xyN++rCJa7PC qZz|C5r-9kklWfuMLxW@&I{pLdEdLK?8k2hf0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H-AP12R5*>@l06H;Fc5}sa8Cb82NC=Mwz#!R-ZgHHLP5;tZw*T6 z);L(Y8Pku%#K}>;?H+P(?%*N%>Pp^0e~Wt~bv#g2=NL$NzP*9EjKH=451({-4nzPD z2xk^RgI$;bzD8!EnLEIZk4dBrwN*Njmmp8 z8Kl%SCn*)10V!hbVF0OLgtcuW6shp!8c{nuqW`F05{8!_3F82>!tfTaudlhb!WgHA x1;r?g(}U@g8%>k-|xD<00001 zbW%=J06^y0W&i*KMM*?KR9J=WmcMV>Koo#aau_lphKya#VMC(wvp1wen5{_pVOdZG zDO2rq>XevForuijs8Iu%_#d)%b23`$)c=EEr*Wi6*JpxBY;3Adm0I3l3Erpo?%f^u zBV-+aF*fQea?ztT$;=h%aV`(Io#!^b=albaiPkP5YA%2!T8xlJb_eX?)=5ht8#E6f z-EGo<$qHbfHYx1vSM&0uK(|Fu=rhpNlSu*IVhLFUwZWp#YQ;@-5^A2viPi!cWEC^2 zTX7SuYMx7h7d%x407f=ESEDQeP)Y$bPgOzDVAAz&e0U8AbO!8oZ}G7OyyBIe<|F}> zH4&iHbwMe;(OAV*&iMK30i{kKd*5{_0(Y81#kOH2rqJ5Qps`X7_n}nMrs8`e1#B9I z-iIwuoVA#W9mDuYQh?QmCs)^C?+5q{3w%oM93|I?RGMjlmEBQDlKC?Pd^xVOqEdNn$)ul{{cL6~%Bg4%Cbi#b^p^ z3T!kQ@F3%I7q5)o(3-MvFt9n#y8S<|hL+_#+5_(JjI^ph8kS}0w!98U@|Uk0LIEe?M` zalm3T3&3R+pSg%!o|C^6LNfPHVpVD#>-cwLtp|Ui2iYZF^dLK4^dPTCtOvOjVm-(M zVm-(MgoPgD0L54ja)DS6@_God9^?YC9^?aaJu^#w9(WH`qL`4MVdT@_`cawN`N3JHaSPz&6)VoQ{DtQP%tOr&7LQ3_h zxeEaGfZ=vj+=LBQ5CEOc^`Lt40p~~pxCX^Ooa+HRm|wrpluzOg+s<4M!qDg?jZ~0m zr{BR;qz66Qc23OHk!m6yL+?J)gPA{YyPtgX7I@n{<}*F$&-`K8Pzw6tZ}gxT>j4Tz pwjMMVdVuv-`a`4%Yk&AZ;}?ydyOwpLKaT(a002ovPDHLkV1hv&w~YV* literal 0 HcmV?d00001 diff --git a/graphics/pokemon/corphish/back_gba.png b/graphics/pokemon/corphish/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..01d60377840eed872376cd38fa7d2c5662c77c70 GIT binary patch literal 662 zcmV;H0%`q;P)@g8%>k-|xD<00001 zbW%=J06^y0W&i*J6iGxuR7i>Kld+22Fc5|fR=@8sO1a>mS$79Ew#z#VSqzs43OLnW znR^{`r6ENgAg^H78%PtBe|6^<9Z^YxTe+%5b2_zc< zHF$^K1KASr(sAcP@lr>NLll)XB3@NQ%P#pMn2DGR((3{M_8nEK>wA&lEuicJ zuyCkyzl*-_2p$W8lC%&pp#%XAqM$;SOsVg*10)XM;X6bP9VVxE59{}6KvI2<5+;Rjl0x%t3fg-hl)w*W@Ao?csFISxD*!0ng687| zz)1W{fK!;P18DR#X@;o}4xnj04FahRyVzX=vqQ@1d?dvR!0GV+RyW8?(iJ|!^ez`alq5%ym42tjC_sF*UVnw`2w5;fU-euRnhg*pg1%J+3TQy^~@c8G)Zx|Nz00kY#umAu607*qoM6N<$f?Y2#pa1{> literal 0 HcmV?d00001 diff --git a/graphics/pokemon/corphish/icon_gba.png b/graphics/pokemon/corphish/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f14b262d2b192882dedbce3a9cdf999fd9a1da6d GIT binary patch literal 286 zcmV+(0pb3MP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HoJmAMR5*?8k|7SmFbqX=0{0Fb7>qQ7u_nT~Q!J&I^5qz)2dP zffQJe6NYgGCg1Sv1g{!v>IV|EE06~cG+*?v%>9W|i3(yuORNBv^tlF~#U7duMDy2% kj$0ToO<~^Y^N#&^0Y&(FcL?;d@&Et;07*qoM6N<$f?eiyh5!Hn literal 0 HcmV?d00001 diff --git a/graphics/pokemon/corphish/normal_gba.pal b/graphics/pokemon/corphish/normal_gba.pal new file mode 100644 index 0000000000..0fd4ea3304 --- /dev/null +++ b/graphics/pokemon/corphish/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 123 16 +213 90 8 +172 82 8 +98 65 49 +246 238 197 +230 205 148 +205 172 106 +148 115 65 +255 213 90 +238 180 65 +255 197 65 +205 205 205 +131 131 131 +0 0 0 diff --git a/graphics/pokemon/corphish/shiny_gba.pal b/graphics/pokemon/corphish/shiny_gba.pal new file mode 100644 index 0000000000..a3eb45805d --- /dev/null +++ b/graphics/pokemon/corphish/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 148 148 +213 106 106 +180 74 74 +139 41 41 +255 255 238 +255 222 148 +255 189 90 +213 148 65 +255 213 90 +255 205 205 +255 197 197 +205 205 205 +131 131 131 +0 0 0 diff --git a/graphics/pokemon/corsola/anim_front_gba.png b/graphics/pokemon/corsola/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c37d0e054af243a3e03c88bedc55803de1f39d01 GIT binary patch literal 980 zcmV;_11tQAP){x*Su*#cD5y&t`~mV6s#ck+E_TwT ziYoa%yd)wLe(i-W1;YZHjfdo8Rq9ZovZPt)d$w`l?g(3@O1xq)zQ@mde=PqV#`g8! z6)JzfDdTnb_WAmjHJnHlIHJ1lU9q7iU_G}o9k??PYKw5-by!wh4T0TDL&NaOjA{b#XSaAX8n^Y!-kc0`LSb=N6`8wTA;E1S(h1A}x&7y&yqZa+?~6 z52_#yXwY*3Fr8Yl(3WaNw430N54p#H6K$QBDdqy&NDSmkm8v`OvjA~6Qd{(#tDu-e zK;!+UF8H)sgvd{8sdn(b09@w^>7buh9d1DW$br+TXydFQ$8tfpgRF{9ixd2z=xQ0ei$4;6AxN0!Vr5?wvl#r*L(ckKJS2@J_O) zQ`(0kOhnYR?KcJid(Yv3^Vgzp+ih;LsPViW7WVlTLAy|#oX;1=7Hw{S;B9_*GG{fD z0SQi;%jK&>FCA>=(u>{~8DOYguk3JGCMXO?(|1R=@#IR?*xCNyExY(NOK61tTILsydwiRhSgab>CV{q!azol zmMKscXa)}OwcENg2}Kle>1pFbsw>l02w<+6RaXOFIRHg-p44Arpiwyjmw( zrdDz;jqM(m4()&rOQg^Gf5|3_9`Vm(MfrW80x0g);}qcOS3t$UT@!3U@7xr~O|*p|B8a3Fz6vK5|2RO%@DqB?NE=WNRTH zx->{+3ia0AG)Hotfl^^kA;22r4VQ}QIsh7;Y}8H2^g)M}j6P-ij%bvdBSWn8m`zwL z07|uHV}r(zK&%eZ*QQSc5W8=#ze$}MbNM`4;5J|WG$$u>(;?rw1+L%?B7ivo0Pjf) z5ZI`x$+%8n2PWhFF&M}@kWfk#@*N#~ptp5M(N5fStp^ww8z`)~LvB0^(UA}HFXfjb z9cmwl?O_S)kz4r77WEi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H>q$gGR5*?0lCchgFc60O1oRzncVYL19DFN>GpU1H{{&veI7)Jo zxY2~#0;Q!6#?g4&eZBwMz$e6SmCbsIj95^&9>6)D@W9GAW_-k$W&u4}7Dk7l?0N=V zE<{W-01UlcWwdGmkiCWok?ZxNsN+r#&Wt%D6+BSOd*$hZx+S7}0LKGR6RBc(=-vgW z43`M;tgyS433zO(a?1%Q_~trJKR}TjPsQSYN_H7A&6>#gRsDy00000 LNkvXXu0mjfg?XS3 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/corsola/normal_gba.pal b/graphics/pokemon/corsola/normal_gba.pal new file mode 100644 index 0000000000..95c7616fe4 --- /dev/null +++ b/graphics/pokemon/corsola/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +222 222 222 +172 172 172 +131 131 139 +90 90 98 +255 213 222 +255 172 197 +230 106 139 +189 57 90 +139 16 16 +255 0 255 +255 0 255 +255 0 255 +189 57 90 +16 16 16 diff --git a/graphics/pokemon/corsola/shiny_gba.pal b/graphics/pokemon/corsola/shiny_gba.pal new file mode 100644 index 0000000000..13daa4e263 --- /dev/null +++ b/graphics/pokemon/corsola/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +205 230 255 +164 189 222 +123 148 189 +74 98 156 +156 238 255 +123 205 255 +74 156 230 +41 106 197 +8 65 148 +255 0 255 +255 0 255 +255 0 255 +238 98 98 +16 16 16 diff --git a/graphics/pokemon/cradily/anim_front_gba.png b/graphics/pokemon/cradily/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b38c51c8eecac770abe4fd73f6c7eb722cdfb955 GIT binary patch literal 1342 zcmV-E1;P4>P)FI6 zz$zJ02^eNf2_cgm2Z(0RlQ^)g26ld;0U=4EY-U0!u`CPYc0YKLc*E&LBofd66X=uPGdIkL3Y|F9i7s1& zY$3~VDjr$wZ9abyEdUrWb{)~DSt-~vbZU5_|4FbNaS z>pKpdyzWGE4(tFRGH_{Gop}VnAai!(jEMVyzVBRO%z+N1==>Gxfzx?se(Eshuy9KT zB2eq_lZr5Y=ddjRw|(iIsx3Hh8Z96~=BDi9LVoG^s{n&I3)UN;+vO)|9+~;eLfnrF zMpE-)p#TV80YVtN`?PUV^Gb<;Y8ER8h6rz$D$sQE>6Z-*5#GF4BGj5+!XfsaTlg6= zuQUMKSmhg&qCZd62v9~hpN0(3OAG6+JF^SZZTM{KmL5PRD?Wxgyxd1G%H1lsIJ9bh;2OLW_sMCy3ILaS%1Vd`C6 zE-=6?M{^t64?o9vLo@(sepQBttb3Q&i6_i{P!{Kjw8zIqyUxSrDOa`|D|)dPs}wAgm} z!yj9$3-QRMXsb(7U9B9(s(2)a;P_SX7_Rj5&qxFq%;FAASB7l6#(k*&46YvMpWJ_ z!}BU;5PN=r6hJV8Noq(jVp=r=pQYvTKQ0kh%>dGz$(~d-gXA7W>r4U!GZ=Y_iHT+~ z@~B*fWCp5;iDnQmNj?-aU`)Cg0& z-V9)_|FcwuUQDk|_kU1_eEh%k zV541T=>Y##PYGq$&Y`2YOBdv~YjPUn9O@y2HX zQ=M+4)6ENf*8zE0e=d^ruYi%J=~4%z_3!dfZ(!7b;dy!kBdJO|^t?!?cZ|S`={fiO zSPyvKCwhMK{LilearFRg38X}=5`@?T=%;yIf*}&vA?AJsl!Gwx6v9pK>&O8mHvw3= z7kH#_ub~LUdZm_W%R62LvMK&b<=YcH9tUS}En4Y}gQWOtIJ+1y^O1^80wX73cUU@w?jAnq9SYrtf5kmzxAs#>hK z254cS#ftO0))CiR1GCRQ;6WUI(`rJuG3c=gJP>f90`D4wKC|K#v-tZTDsWcS$9fpd z5;JCvg-}ODCG;5UV=!hxBm_`g#$E$VHb67Z zOVt4T0M$5O0jQG;9DR{y%Lc#<*Q**3Qd*olW7+ib3Jp$0?w0z81@-CNQKxam*kFmN zUD6?Pu+wtI?X7;m*?=!|AHKTo1ZR!@_MKFL(TLkd03cAs67SFX^{wPf#bJPe??<>R zF#?gpUv5__Ko0W&Wi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*ILP*k}-~hFc3vKfvr6NyO&8DrJ}UbrJ=~}Xk2iHNTD1| zq-<#`kphin{tgN@B=r`%MndxA&lq`Lmi^@gWLWQId4RsX1j_mVtOLH*fv|wGh6dVH z1<#*#8J0G1M7}(lR72E~!2)_>V)P>d*$@>9`nX>JKNya?2o$NJxye2zY+!J{$xS@g zB5!CrhGLw7Fu*2+K(?Df{)OJ;md|!i!v9G&r|CUsoOAYDwI2ygb=Sg@b*ozvS9|(g z-(x1+8{k%5_V1T`^CcUqS6>*s_`(&?zFvIcfQGME25|)$CdnX)(UM`B8V4Q-p$f?l zHI2v*kElaX)D%Y7Ne2ds_P&Y<(Noi?y*$K(Fca7bY{u?M?48uv1Y6iyhsz0%Ehaza u>5EAf_M^Q-9fWfo`@uTA`*HduKYjqHd<)F1J;1jB00009 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cradily/normal_gba.pal b/graphics/pokemon/cradily/normal_gba.pal new file mode 100644 index 0000000000..9167eb8795 --- /dev/null +++ b/graphics/pokemon/cradily/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +148 230 123 +115 180 106 +82 131 90 +57 90 74 +255 213 172 +255 172 115 +246 106 32 +255 246 123 +255 222 41 +230 172 0 +213 213 213 +172 172 180 +180 82 74 +0 0 0 diff --git a/graphics/pokemon/cradily/shiny_gba.pal b/graphics/pokemon/cradily/shiny_gba.pal new file mode 100644 index 0000000000..32a3b9e8ff --- /dev/null +++ b/graphics/pokemon/cradily/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 180 189 +222 123 156 +189 90 123 +139 65 65 +255 213 172 +255 172 115 +246 106 32 +255 246 156 +255 230 41 +230 172 0 +213 213 213 +172 172 180 +180 82 74 +0 0 0 diff --git a/graphics/pokemon/crawdaunt/anim_front_gba.png b/graphics/pokemon/crawdaunt/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f150b6d1573cd029d7ada124d681f7d1c9a49752 GIT binary patch literal 1483 zcmV;+1vL7JP)TM2&)GA;irbtBHMH z2x=m8-8E+IBAhv}Z*4ca!j^R;AV>-$b&(8rn#OHFN~#0`Cz2*@$RFSoy503JL3nwy z(#oszuGFOQR+8q^yf<%V=Y5*?e?AK@=K#+KbAZkqVBz7M5cisuIVtSD(X?7Ee$a6= z?Fad~_Uge-JTS~i=R@fw0l=37I&}E~8 zfL}@iw5ubW;)JopDPA=@P3bYl6M?v|n&6A~lMq7a8{KaA&~dgH&ss7&O$a=!P~GX) z9LK3JZc5pjDn+5uV$3+VaeQmJ!VKAwEgDJVPNOL)Gv3&1%Z|w_%##f)Rs{G&eP_mr zZ5f!N&n$`mARNN+G`^G=g14&{y>KZ*prZgL#(;${Ey*%r3PLyn#vM1XR^3PGYSA>^2w9DHVoA_C^Inv-%6 zqr<0w_P_@Kwq&m(VdiB)olF2R2B=2|I>1Kpg>A1f!yUGb0#yJA6(dc#Uea{9wD-R# zmsiC_#pRePE3pCi3efR%3^ahMU8$AJ<=VRA;w8YChZ#VSrK*@3UmsL!wVJ)P40Z4e z3@b9Jb`9X5ye1x{mu%ay_}No{f)NF(IJLcEWz8&ZXRdhm1Y>ZO#^f+bxdIz7*fzh35%=ef*mN{0Ptrl9BBGt0C)z5`zQjq zeEO6AZw7ZO0_cxlAjPoG6HzS zK)en%y%10xNwzVwYXdpK#(LeFU23o#%Ta!9ApR7PVxTL4T^k6V&t_{918+MWno|u? zj{!mhv4#Y&9m6z$H+yIxFvPA**n3A0fr)`&=f$o^Ck7G%p@DFQU+O*$4P=}GKxiQR zi2~3b#s(4sm!W}-0SFBwjBp+rNNEg&1`-0*&9Q+@01(C?62TrD$Y&L7-579UAma%R zR&8Gy$kNvG2*8^{4~wOb`~j4K9HKwq{O8fjCh&{Z6-y`sSwnw#s(`|^U<7`#fjcbF zK+qqQU|dFlyVX^@?xQ~h27>;8No;si22z2*AC!Sq&>yyIJM|laq5MG^NCo`?${TP) lFrxl|tI}@>#;x{;{{XVlm~X)Z0*C+r002ovPDHLkV1k&rw54l)q}+KoG`-tzNiGcQ8_==0Ky$jSguG;YKeLPzr+` zxWc(2b(AJ>q)4{O1KeTKr8vkl_z{G6;X-1wnVFUU6q2tE+2RiE_tVU`GqVbU|8Iqt zhk#dyfVT%ig!P95fa+cj5vtXf1HhTSq~FE3e08-{wf?MB-H+-~-I1vEQmw{;z}5t; zD9V(NNcpw;Hs#TZUX#xkiItwPz^4Qto0FvoOQ5Cnqy^C-S#=XB!c+@UPxa$e>$QY< z_i0o={`!%Dq)aAye%cApSePhv+DVFg2hC`+j)eKqPvvNdf znhF5(cIknrgye}R*Fywo+T}uG@^s|SEWoh#?ULU+mg&KTmz{gC0LfkZx|h1~#&94D z^N06gzWecpwvK2x7?2zh!0jW@Y_=C1pkpA;k)x4XKFDyl+gxyKJ5J$&D1&0qHI#q0 zo1eb-1fXRgL>w}lX|R7byXzo0^NlGAHfab@ijpKW_Ql<1d+moq8p9T-IdtO^1@m+b zMZ4R6=Nlpx1c(rGNx(tkyglFCP-mnHae<8hg9ZAFao_H4hC2x8)N>%FKP2Ehcm!hW z0soAKbad@|uAIDqP>6>j6CLR|i1xzv1Av(EDG9)gXbRYibn8EBky6>TXaKoQu+DV67{ zaeJPPh|7>WLmPBTr2be#)u+|`YI!z(%bk)f=MR&xaR RhzbAz002ovPDHLkV1k6Ib`Jmm literal 0 HcmV?d00001 diff --git a/graphics/pokemon/crawdaunt/icon_gba.png b/graphics/pokemon/crawdaunt/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..605482d25313e16a913975ad96b302c9d7e20a7a GIT binary patch literal 402 zcmV;D0d4+?P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I5J^NqR5*>@(!EZ@Fcbw~Kf(3GFt9Nt9g_vGL_&(Qpm;#a-I@t0 zFUH10R8?`dYor#uVd^AyY9521||7e+23L ze;U6I2Iw1@5zPc<<$x0y-USY%ComSn+XCetO!RSneGkT<3#Ww{Odl3yFoSXHb!ISS wY%sHciGc^x(ghgp!6ZJwgGqb literal 0 HcmV?d00001 diff --git a/graphics/pokemon/crawdaunt/normal_gba.pal b/graphics/pokemon/crawdaunt/normal_gba.pal new file mode 100644 index 0000000000..7fe04e329d --- /dev/null +++ b/graphics/pokemon/crawdaunt/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +230 106 0 +189 65 0 +139 57 32 +246 238 197 +230 205 148 +197 164 98 +148 115 65 +255 230 90 +246 172 49 +82 156 246 +65 115 172 +197 197 230 +24 65 106 +0 0 0 diff --git a/graphics/pokemon/crawdaunt/shiny_gba.pal b/graphics/pokemon/crawdaunt/shiny_gba.pal new file mode 100644 index 0000000000..21b58b2a04 --- /dev/null +++ b/graphics/pokemon/crawdaunt/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 148 0 +205 106 0 +156 74 32 +238 238 238 +222 222 222 +180 189 180 +131 139 131 +255 238 139 +246 197 41 +222 156 238 +164 90 189 +222 156 238 +123 65 139 +0 0 0 diff --git a/graphics/pokemon/crobat/anim_front_gba.png b/graphics/pokemon/crobat/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1843423b7675a56b6ada8ce8bb08b7e91caf3877 GIT binary patch literal 1132 zcmV-y1e5!TP)PbXFR9J=Wm%WbLI1tBGh>aV=50FD(C-ngts&NVj7FAsUEtX_+ zjbF#!CPlD?w($W$09(yIz!mpON^BRG9H5(_z9@>ai!>?1YGwX3U!2jO8w5YJ!u0w+ zi&wYyi|hN#=c@+dWquV1A?X`vhc|#`+cgC@Y{h6O#|yOk#N! zDHRbm2t4)A=6So5DH`VmwliRw?$jN&JF2CG1kZKF3$-j0o#l8=L_UBLq_kZ39oW5MDw9R6yV-SkeN4 zj>Rw+Sp$MjRl(rn!}z5JHu$7s?$!&NQ5p||cCay=Z+VCnR>nYL0L;~yXnsepfiNBr zh@lszX}CZMQ5ir$^nHW|U`ps}<`9S@8@T6&XJtK;OrHg}eXMyu=xH$(!ithD_@FT7 zK2Qf|8&TFTA*R0>n6Q8tlJer3ur0*V2IF#lSXm5@##uK+bWD1zC2x2Llz&*dt|oL&J|Vf2Z42T1Gpb+UrQE8fKC=ifKC?2qHASwWOcGQ=A)IxvDM1r7|_UKI!3gz zI2Pu#kwrCPV%o@}9x-ugWbq97s74lr5?((770k*4tMOj@fs+ths z%A%|;C$!4yqTA%RShFjZKuTj@g z*45nxz#a;E3!tS2Sa^>*I6-&j5J;DR`pylkYheQW?Dm^dfp5nSxPSy~EI_G4<+Bb( z0@MOXCabD1jqq>=);p-}6`7B7L;EP(U8%gv?BzQvF!kM_JYf4hwV4O(fD(EUtb z$am{{)xho+cR9+7bevmScKssdt=Ti+f|z*Ua)BU4KA-X~8tGEXK!=*cS%w zNgu~w3y{|Y4LUqdsv0J)Fh1sp#(blBYX<1}o$!>>bS|Otg@uh{>=pp~F!9~dfcbxe m0q3|T$D(<~9`arHPd)EDV$oQ#;&%h-U>uLd=NoVUS{CW*sVmJ7^fiF?h& z@_8}3dy9B_F2jnw=XL{lr<=B#I{=7)JGeTSXuj~+V!5~d5&!Wc1Zi^sRogyd_s8pw zqU{0T=CTJMZ9@-8+aoC2?t4gO(pKv>Pw`I>q^&MOepJ7LPDSiwavmC(<`apX5Z{_l z-F-Ms-f6t9w!BN_!E%kWlofFAIRWr;+-Gr?xrsb-0MONpTQXV?R`_dt13!7f$)87E Q3;+NC07*qoM6N<$f)~HNz5oCK literal 0 HcmV?d00001 diff --git a/graphics/pokemon/crobat/normal_gba.pal b/graphics/pokemon/crobat/normal_gba.pal new file mode 100644 index 0000000000..9c466e9e82 --- /dev/null +++ b/graphics/pokemon/crobat/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +230 139 246 +197 90 205 +156 57 180 +115 24 148 +255 0 255 +255 0 255 +74 156 189 +32 106 148 +16 74 115 +255 213 0 +213 148 0 +164 164 164 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/crobat/shiny_gba.pal b/graphics/pokemon/crobat/shiny_gba.pal new file mode 100644 index 0000000000..8f22fd4b05 --- /dev/null +++ b/graphics/pokemon/crobat/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 213 238 +246 180 197 +222 131 148 +164 74 106 +255 0 255 +255 0 255 +139 189 32 +74 139 0 +41 82 0 +255 213 0 +213 148 0 +164 164 164 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/croconaw/anim_front_gba.png b/graphics/pokemon/croconaw/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e7d23841b1a00a70998addc57d09a4d3573fa0ea GIT binary patch literal 1225 zcmV;)1UCDLP)AbS7+|Eya7S|H6S7<&K!|K?)mv{IaN2oMku&TozX00001 zbW%=J06^y0W&i*LM@d9MR9J=WmoaSHMif9fn2QWZaM6y10UF(m7U(Cp*h0h8RJ0T% z5`kJk+?d%N!lg}CyL*9B8rq>l%ntTapm2r)&5-3dB}NvVgf<1T$gLAfF`Cr9{v)NL zB|q(IJ!0p3J66{_A+}^twsO?4<0JTF*5FN&qNNtD- zqNBlSB@lhTA4U7$R&NmvqbM32TmVFo7sr)5D8K{rhiX8Nz5rb9YM|EzKLx82==Pu~ zB|zmK9e^k6(uR*>`bk?ZG=sId4Oa9O6<;w7)_i8002bYftA=_6cn>p>toQXb7;6!6RoTe{6*pO{T!D_A zW*;W^)qyfcmJ{d}e*Whs&j2wYO2i9&`tv4NgrI@+R8zp+D_jUcbfMAE>V}~*Bx3B* zH@}|)TjCMfCr#h}F{@!~yy$fCMY8fXwwm7s@dyFzks(gr{id!zuy9LCD;ffUR>0^^i1 z=Hp+n8M$x|uRZeJG`5tx{P1^vp$4-NYJ7 zaeRv9w{)}XkgtfpmnVrGUaeQ_|6l*vfO4P~SMRVl(6so=&ntmA8fx+G-mogJ??*$7 zS9{X)f!D)0EkVp{H@?BC-HRep4RG?mIv8p+n1a?HsV~5T>O!-w8jNGi4ZHktXJ?hdXDU^LnL- zHLiuX!ceZwph~mm*TOLT?AM8{iioKLpDQ2{%2VQKKyC6k4BzA;#ct51cJpztgMcc+ zc|ja_{k0px^*^|9)pPiBDuV)&V;mAV-YGdaL12n@0nlP#mhGVaFbJ;W4tQre2IU|1 zBn&^z^rU0tL$SD~YG9(CSgH!ja2hzQ}Y9 z-MJ71pkwKMHp1aQIVbhuDt4!DY~t+S5|loyfXAF105K*+4JD~H-!^y#EcBs3wAxA^ zu!gOrJ``44=>r-N7r8#5fD{o0pnxp&p{9%`wBX^Q{sEd4>sxtTjm n@n-(pAADJ~q<^fJ(I5T-1E)rN5|myZ00000NkvXXu0mjfhGs?_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/croconaw/back_gba.png b/graphics/pokemon/croconaw/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..991be60bc8bba33d928a422af39b523251fe7703 GIT binary patch literal 709 zcmV;$0y_PPP)AbS7+|Eya7S|H6S7<&K!|K?)mv{IaN2oMku&TozX00001 zbW%=J06^y0W&i*JLrFwIR7i>Cl)sMCKoG`VkR}wT8jPN`{aAl-M>Q zjyEz*uMUU^u`IbIgqY^-M%<2*5O`K0D6M)02g5wi1lYMT7`qibx|5cD>DEQg`4CjjUdnQqED{CTifYF`Kyd_{+q09g8Lq54OBHL9GAI*J)p z1_^g9IGa+)LYztVsQ^mB006j9n>gcL;9$Z61Yi;? zH-9qyFaU@^M}QVDrhg~`0w*P?BD}E{fgc(jWphd)%5}&k-HpJPiZWfSk)U)aH2@ys rohVAmluG?G4*+;AuBv99|91TWS=)iy)9O-100000NkvXXu0mjf9UnK> literal 0 HcmV?d00001 diff --git a/graphics/pokemon/croconaw/icon_gba.png b/graphics/pokemon/croconaw/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6f57e56561cd13f4dd184ae5dddf986fb55ef4bc GIT binary patch literal 356 zcmV-q0h|7bP)DV$k7R5*>@k}(c~FcgM+0(u0m;ciKEftc`CdL3Mt80hRIiQzQP zIzZy|!cYcCOs&S)*Lnfa@5Kpr=#LdR+A8g7gLX;O;7m}$2qs#INy?(!~h zR~0>?1K=u3NF2cM8Rn-?f+7luzsVN~vkirzepq1+wOEi5v9iLX1esK=V{fY!X3UI- zKuLwchcKNJCITxApS{xWV2DiYFl02elMS34n+-#HTlC~xubetz%W^I88t zLhJZ9!x-H^^pOhif1#7JK==Df;4a8A=4U+>aLlqSJLufSDnLIJ0PQd(V8}eBy`u^s zrF36iVIT_d8^)kh=(6lIOWU3|V9+W2pE;0NjV@!OQhw+k$uc?u*&%@G2 z0=Nu6V2hLwfi#=O4|Znf=V5&V6JQVMRU0+M3}M*ZcxW{Mz>Lw=RT$=g1C>DN`q8H_ zeCKXp%Yl}SkXwtwFcN#T90D~#CjJ&h(R+-EL%>U+x%SH_`iSK+!5Kc=^&00}&k1=9 z=F#n5EtZ{5W9!&hP2cYN)U||pHHVE9?gU#F?z$LUvlB>T8KpwfgSN}SOdmycmtAC;x z0?pOmu~kFl>Q9`u1p|fpiyjW#p-_Jzys-vub4mSOP`j7Z9~Spz^^YN7N&Vp|HMcQW zf3SccEGJigMPB?Gvb32H#U9Lh{;H`eVWveQ*;Dl3#eKa^RYS~6DK7Rp{`dF|hK`9k TS)kbu00000NkvXXu0mjfDCL7J literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cubone/back_gba.png b/graphics/pokemon/cubone/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b879b40d95ae807692449f54ee5f331302d8d0 GIT binary patch literal 673 zcmV;S0$%-zP)KlCf{oKp4d>6)B!Fb?Ss1&kR0GAcl(8hN2E^7iX%M z_~OY#svKu(BY_=HX30SR1Tru&!9Noz!79sbCL70hcd3Z&qYGl|CwY3md-uL~*0hKD zf73~l`+=CT>AeO%tMKgax()^v9;n4>KIS^hQ%`wz?z8PR=!4=GkDKCHc!RkQ{*<;t zeAwnG699}yOT20VmC&)AtDp(!)xhWH!#t3P*8sW_2+ICSY|%7JD?2$2&KWbP~a>ovcjr6(~aguJ%{x_$;gtLP5KeE{Cs>;g>yfEqh_ z?E;~b5HUvp5aD_|+uxGNxkM--(Dh2w{dgbH=tKac%cp(vmT>@kNsYJ_#Aqqcf_fP;q3Q71=#+db^8sKq2*vvHOImMV_fr6H6gwV@+z+Dw|5>bTStib`3RT}_=AGS>QKVM`g4ym4MvBJo@}&VZ2aglr^3&Zx)6!gxu0NUw(2d)g4qCSmxKI zqw0zFb`IvZFRCIphFlUHKyMe>J?$Y;6YB9tSH8r<{OkM%>edm*3l!-u00000NkvXX Hu0mjf`W`u| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cubone/icon_gba.png b/graphics/pokemon/cubone/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..679d8e7e55bbae2de824a26d3154131d12537fad GIT binary patch literal 350 zcmV-k0iphhP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H+(|@1R5*?8lCcWIAP|Oqg7^-%Wr>iRGUXk+1xoWgh0?x4NT)y% z(a9xO4J4jIr*5VH=EvP}>L z{`r(r7*PllDl%cD2@Y{#Tps}w#;FLHFj9$J7-`KW%sTDF(k9I7z5}{$!ld8!;~It0 wM~gJo4E4fws5I!@k6_F)i7a#J%NKgQ0Y{;J{@W6}g8%>k07*qoM6N<$g84L=u>b%7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cubone/normal_gba.pal b/graphics/pokemon/cubone/normal_gba.pal new file mode 100644 index 0000000000..faaeef75c7 --- /dev/null +++ b/graphics/pokemon/cubone/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +222 189 106 +197 156 74 +148 106 49 +106 49 16 +230 230 213 +197 197 172 +139 139 106 +90 90 49 +255 222 180 +246 197 148 +230 148 82 +255 0 255 +255 0 255 +41 41 41 +255 255 255 diff --git a/graphics/pokemon/cubone/shiny_gba.pal b/graphics/pokemon/cubone/shiny_gba.pal new file mode 100644 index 0000000000..51b6bc8ba8 --- /dev/null +++ b/graphics/pokemon/cubone/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +172 180 115 +131 131 74 +74 82 24 +49 57 0 +230 230 213 +197 197 172 +139 139 106 +90 90 49 +255 238 197 +238 213 148 +205 164 90 +255 0 255 +255 0 255 +41 41 41 +255 255 255 diff --git a/graphics/pokemon/cyndaquil/anim_front_gba.png b/graphics/pokemon/cyndaquil/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3974d5b40a79187c8cfb8b6631b4cf92247e16e9 GIT binary patch literal 869 zcmV-r1DgDaP)TWslql_|N# z70r@~D;h{bMN(knh!?=g6MzfqWGwLj_B&85P-X9RkXD=zMq55c+tDM^iBr-#v z%9=vCT;Y6I$~2Q{l1b$@>Sda+W8>oq4oR|QqF%1xgdGbX&wVV9zzx+e0H-bTkQ-gL zP^nY^;IL)OSk7W8v!&N4RI4=voR%F=fa3Q?O&lRG<=^VPwWf(>A;`jP@!&h*x zx(+y(do)40=mM{~zKbKg*4_w5XgtE8h=3CuTQ{0(Vg+y+>jHFyu&#AK1q%l`0A6rx zlSRb@$;TDG)7e)o{slY$@u>dY7TR#zj^`u53==k7A%B=a$^)vAw*&ZP&7_`aP`J=Q=wGo~H_w-b#8%I>2!0icTo5gc)Ej;&J}c7w1NRQSiU? vR`dtb#)=iWdd8P{)o}X_pt$Z3A6b6@@~yBIfhR;{00000NkvXXu0mjf=L?e` literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cyndaquil/back_gba.png b/graphics/pokemon/cyndaquil/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc64164e139c46dd124a091e7456af5da50a2b8 GIT binary patch literal 670 zcmV;P0%84$P)K(y?yaFc1Jx4eii@=s(2h4^&<}moB`uKwI<&igUJX zWin+b5X+Ma7>Jv|Ms~_SP(}FwStKC9lK|d7WGb?yM=G&J#cqlM-Ey!YoA-3QqZ9;B z@gJkym0*v8lGT@g2ioOuCotOV1grt{R$v#6vVd&|nx-S59|7tQpbW4EW;;+m@C|jy z6b7g$N(WkJMGY{zcMUKwtzAq>pmYG~7upTIK+Wjh8Xy7F2GoH|DOG4w&>!um179m257nlOKEq5EguIg6X%rd_-vwf_eZCoWh|^k7ymnLLB~}>yZyOA*Ld}7zx;KmUsdC z<2pSQB93mxw>JW=Jpgdwb{8UwZ=>k?Wh4%Qr}+E$4T5{U_^561*#H0l07*qoM6N<$ Ef@cLFE&u=k literal 0 HcmV?d00001 diff --git a/graphics/pokemon/cyndaquil/icon_gba.png b/graphics/pokemon/cyndaquil/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5f174dcf17649148b5da52816f2898163d8f0ab3 GIT binary patch literal 360 zcmV-u0hj)XP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H=1D|BR5*?8lCchhAP|Oq0*P~*zIc;900~292&Q8bQ+E@BI|gyp z+AG?W13PwW`m=r9fp}k*{X)Pm3~@vgjhjI9>{r+>3Q#`o4Ti$@s)@mYU&f}<5IPJO zBV|k@DEA|!p=BueBp#F@*l}K4OGC?0LIr2rLpaotX{u$obcwM>v@x)pS24&%*WKcR z-1=<(Mq05Hwb?%y; z@QB(ABU54Slazh@H<*cfbU^H%nq zZ-2T;7k`BiqxYG4Z+2Guz9QsN(Hi={$T;}EA1cR$I37qb2juMjo6Ip8nN1G>VsLs7 zTpx|V@&M%8w8W8Pa5S8v`j)A}dJYj((arKP?)*B66xmNR6JC|xCxLoQ|K zoIGW$CYzazHS({K{(EvKODRX7M{aJ!C{V}l#FH$Y{rnBfHOWn11PV>$XSTC+X1m2$ zj`Tx-C0za~oy8Q4H8WVQKSLr<>GV3*$T%m8aB(7Xkg($ri!ge$*Y=P_Jq&Q(YVXwh?1VD5wQZK!L^Fl}*w?P`q z?#;j)EfhdCzQEIB^I9a3pt&+-g2?VAQh^m34)aLrMK?skCkAc~!psS@x(uf68P4aUrfJ#Tz_ozqxr+WWD z-1QvsfEn`i_W9?BDq9fz;_+ z`gI*#;u?m1pB+qSD}T{Hsai)u2slFX=L4p)lRKklD%{C&9O*R}`Rv4JbH6=@k1~A* zBR@6qD;@RG5Q3BfK=izR5_?T{hf-(cjIKCu3o+RH#Sct9rIe~{k)s!s@@mERz*Sc1 z7M*$0a)Gv#gWWCS2fn0qcKZ#haHD2R+45y@n~{!2tHt!1v~@09fk%2$t?Mdw)o;+~ zXl4F~KTe2RFS%_w*K7B*(qgbDI2-!7Z?gldr@aiu6}V(*a!l#@#-Ii*O*R74Q@XrSIUp7*1$8AuM~o;Aj!RD~5$S zn!Xa{4w7hLUcgncq<$3+r1V{l!X?^=Tm;alyrRzDCfN;ha;_RLbu=KGq!k4uR+{Uo zQH<{2DcVf2sM+HcvQ3hYwFh{k#XAt<{$Y9m_@C-u&e(A@^P}NH00000NkvXXu0mjf DIrCie literal 0 HcmV?d00001 diff --git a/graphics/pokemon/delcatty/back_gba.png b/graphics/pokemon/delcatty/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..38bcfd5a74f266aaa8551d8903a39a80372b8d71 GIT binary patch literal 737 zcmV<70v`Q|P)Klre7_F&KtDAtWU3$E16fLyFWP%ekt=g4BeCii|AT zP^w7%Ge}8UP?Ir>FKk)BN0zd{eRm64Am@Cx&p!K7wLhSJ2RQqEc>VdaIYR#H&&vMd zx99FC5OV6-16WRo5C&jb-ri1XKv1xS0hVljU>>lIvjdAa21psI1}qulxfvEXihTfo z5rds7Fyb+He2|ez1q8742(@Gk8&Uys$`Z=QfC@-KMzBY<@3!`1fPvj~oPeGcAY{SX zU&bbK%eanU>BH!fl?zD1BmmbD=#NIq$6rXo);${naGXcr()jDyY*uZ&0g%c?9*obE zp4&Lmf|AgF%K5^2`b>wC;L29M1%e>X^Af;d6eypYHn$OY)r z1Xe5gaOVfuyOO0md76~_sDNZ*0UQ--bnh%7Y>Q+9D4=;#lnH6NioR6b0`lQjR_&(~_XWw^${Z~B7rwleT~yiW z8gZt9WS`hp_w*~HR8#HhmH({Hdx691kEp8*ggtLalc@`oRpN!%U;`DF^gKWpL0aE$ zK2YqkBsOjhSVT{LUXPDD6eWobanDV$@lEG@kAP|N<^*BD#zKyx9xAoNIeF94!rx2JJD7YsR zp^!kpOigyxq~~7Rxrm=L@r?P5N2o zCk-R{u26jffC{_m0D5b264%2IfFx;7;0h(2Kp#NQ*a@-!5LxzDEPnsY>=M5V#+xQq zAZiyZP*cpHK&Y(|4>gMI(W(@J3w_A$b>tR9cWgclUPBf z*>8#jsYh0SR)Vz3_JDy1jVkl=?8iHfMFs#JY9S68%+R!opLY07e|!Vw#Ll76Ncy$_ O0000AnX5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/delcatty/normal_gba.pal b/graphics/pokemon/delcatty/normal_gba.pal new file mode 100644 index 0000000000..7d7d44e120 --- /dev/null +++ b/graphics/pokemon/delcatty/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 205 139 +255 255 255 +255 255 156 +255 222 98 +255 189 65 +222 156 65 +115 74 82 +246 180 197 +189 131 90 +106 74 156 +74 41 123 +0 0 0 +222 148 164 +197 123 139 +164 90 106 +131 57 74 diff --git a/graphics/pokemon/delcatty/shiny_gba.pal b/graphics/pokemon/delcatty/shiny_gba.pal new file mode 100644 index 0000000000..caf7d7be8b --- /dev/null +++ b/graphics/pokemon/delcatty/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 205 139 +255 255 255 +255 255 189 +255 255 156 +255 222 98 +246 172 65 +139 82 65 +255 180 98 +205 123 57 +139 106 172 +98 65 156 +0 0 0 +255 123 82 +238 82 49 +189 65 32 +164 49 32 diff --git a/graphics/pokemon/delibird/anim_front_gba.png b/graphics/pokemon/delibird/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..43ba20e19489d02b67c3a02885824d8404e9a6f0 GIT binary patch literal 1198 zcmV;f1X25mP)}f`t1QWSmnE>B4YHDzSuc zN+bS^t@0O`+*cd8u-ZK&MU`6ABOxmeJuwdD&=YYI&Q*TUu+pYVnSEoYY1e+Hf57HR zV8i?Py|KqL->;@U#DBy6dKy2Yfc_bE`Ymvz-Tfa28ZbU|)$v3d(m))#33W)!LxLRS zJS0=xUx`gf+&XRqp&zDF-O=cSGl&>Ody@LpkfTed zO$>rR(X^%A1vW$UG`(?bOXLc2(Xw1ETzTn&os@s5BbK!li(jbefe53w2o& z&VYK*vj|vQApd#kxGs4U8OCybc(o&h+dijC_`r`Z5jd2R>VW{xw-CaSoc~M^MJuON>*))U!Ttnq4w2vWMvbsZw@5O#^9;gppcn zwLV&T0>J4g;442k0Jld0bLq5M0I{)Y^r6Sgp;5*f2rPpbZze$jq16}LUNTJ!-tx6R zh#nt7;H`?)>_3(mdsgO;@nMehiQoc`ZQC`**z!307z~-8h-RQf?76*zKnWl7L67r% zrxV;ncJ0caY}qI=mLDS^I!0iH|K0v1<*2m*6<<(gR~&a=!1L@xwj=`ZnF9EbLR zn<@f1c?TT3q1B^fE`OzYW%90jPQ2QGOT0)&LduDIN$)}!Qhut|bs3pgqpek=(-^Pp z`jqSaCR5W7@xO@pyKjD+P{1O6{`F7eZ2rr6p9J9Oz+3V0vw5HZ^bbuB=)WEYw--N# z(Dz>E;UUmK9N=n(=QaWTLyIB?eK^geJ^8;C6fo>S61NB?|FpcvmH1npf1rd@yR!%Q z6_KBLa&Hg*BCpRp`i?!wq`zYiGUm#3dyp}w+5^-RHq{;|V5&X9+hi-#?19qemBK>p zMU*{I0NR87YNS0tU>ViF;n@Rv7c1VWKiUIQx)In?Gby@~R)1}lKfSjHWQkc{{ZSJc zt^V4z2PAu*`d>r>M*EFYf4Ddc1D^UPjIL6D2abYy-SpL894qzjgcpad>;bC3+re>` zv01RktgrrSU?}y+3c&@6fT#Y-=kSSukUyU_O{M<4X`uRF2m^xddwof%KW8gK=Et8= zn*-9T6-|_XrOeV(R$&BZy{P=dM%MDB*A2g!*9a8e78S7Cn7Hl<1w4CSRM+oqPcGcc zKwcYrEmVH>`A*|Jtj&6s`ThBxU8@n=s^7bZ{YteSN~<2q7~nmw+7(*7^$lep19MgRZ+ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/delibird/back_gba.png b/graphics/pokemon/delibird/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b4dccb1191a8fd9d2abb6b9b95db6051eaeb9452 GIT binary patch literal 786 zcmV+t1MU2YP)4l)sMCKoG{a;HpTDwxEhdqzxTi_O7}j61H1{;L;$$ zJq=RC8&E-g)fq}#vRu%R34Vac7hH$F(%v|aX|x+Bm|gm zB+#K+z%@;fE?w%HGtX-y9TQ--D9oT#+yc_{8vq1_8Gv}HX%q7>BcxjhY}yq<37|Vy zFMzcRV5TbQx*$G)7l`bR3K(5KU;{qNP++0U6Y`5O#`#EZ!AL#vfw6PX<2zXB07`oU z#vb8OjPxFTh=v&GRP5$Dj~)2PG0tVLT7dWk!2LS_yowytp63BXLbE@ibjEog_roE( zY6D$>a3W}c`6v_9tEVku7lsrgP{8y}3s||7Dk94I)9H(5-cV^AJBSYb*OOWwj{KAY zaw4_>(rL9 zk5_ddw-FgJw&lD4#y4qDuYrpe0t3!ViFKpM1uho7a7#&~@oimVYun!|3ihGV2k92T z@Tg!vSvLn;IGo{OoR$hs3m{@RECtYzGfrD`+m&Y_1srU3Y`w0r*oqSh;3Y0J&7C18QJ2h3sD3f9u#XLPx#07*qoM6N<$g3}0LssI20 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/delibird/icon_gba.png b/graphics/pokemon/delibird/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..438f808631b55d29a9870c31a69cb518c46db5c0 GIT binary patch literal 357 zcmV-r0h<1aP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H<4Ht8R5*>@l06Q>Fbqa>0wQsQb`JvY$t9R!3tJhG$i`VKBFg4g zM65L}X@0sf0^jDRFOG-D*jK0P<}+7n4ml_fW1ON9<_+_JHg5oxd4rJ!koiwe${uoH z$tkn;cwv7G00001 zbW%=J06^y0W&i*MbxA})R9Jc<(#}O%y`SHE^X9#IZxQ-GR>>_F%RjwREd&c;q%7h=%c+5u-}k$>LA*yTp9Apd z$tX>^KCh<04!`4f*#0Kn1UcfC{pgQT8tZ=SfQsJC_dC81aRWWVl0hCl8;KXQizWit z<$XU}-OOp*<*9eQ7>xliQw2FWvWevxWn}KctMHP~q=IxOrSo8el+Rp7W(yhe*uezr z_{Zt{MipVpGU!#*yNwK4KVXHmvJ5LVu9VlJ$bqB>z>YHj!!Enot3eypCwn+>$2LfJ66E6Oc7T87PM~zYuaz zz?H>aqI>1kfHy+3zS_%J7~qzRFzbJF8c0pU@r!)qY)1jeL`@U+`1B=IT5ir(-_db^WV^2l0QAXC_Ty{f4YdHi^_Y)I@=~v2_B)I&VaR{hs`#PpB}o+MjF`O< z=V5Xb{Hivx4>Lk{5Y7(<2lrHj$yjTj2Y){a1_Ra^s;oeP6LO7Aeg{lpSA>pE>ErB z$v6QFKih_GB+AFAELF_X2@3lJ(qXs`c{5JyYh}YsM#fL z6P~2Nb2kH48x_PH25v}}^=^1DyqJE@^$sBJ1Vb3vJ#gsdU?>NGT&d&PJQ#2>FV4D< zRr2ui&BL4qhoP7(FaQtA63FE*W`i*MlZOvveVqWNHwKYJ2f=|9a)O dXgkbu{R5qJ9En&e8`S^+002ovPDHLkV1lTs;ywTX literal 0 HcmV?d00001 diff --git a/graphics/pokemon/deoxys/back_gba.png b/graphics/pokemon/deoxys/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ba065fdea90690b751b767ee83cca001b52aff GIT binary patch literal 1190 zcmV;X1X=ruP)n;cwv7G00001 zbW%=J06^y0W&i*LBuPX;R9J=Wm(Oe4NEF8{Uz(dTa_+94YSTkNSd;8&A&2N6XknZz zETnkxY;G=vG{=UN4GIK&>S944|4R!Y1%dySMBX|H6lULyC0Vg%)YI;%gB^(8N8k6I zUvI{Z#(&kG9sdA0V#jam;x=P^R0n)xtp6iG+}Gs53xQj#hrS9qrrK3S7h4xToFot;k>*n>>{}mti%^UJ9}icWPGIp zwS^#XN1EihjH7{3Wn10@{6Sl^_hCkHb}Dhp!I^Yvk5cs8<<)JC6HY{mNZ{gd^Xj%H zi`kIf)yDBnB8LeSP>nakT^h878ZK88Z)`{)pATIL-Uzde(M3R0mn;u5fH`WlQ~)%% zNMQg-zEa>73^W-CEL-Pw6|nM+tAK;5fQRXw0;pPOZtVgYs8JqhJ86Z1%eh?gomVJP z1zHs5oWH}_mVl;{t-$A;$eqz~bOII)aQ(>5mG8<5fEn;T+c5w?+yC5--_*ySvAy@T zfQ=WDdXYI2wIcQz615@^*Bq}5$+{7+H?gp=-+N{vy^+M{9n;MSOX&p?!!Kqc-8@6$ z&`j9yQW7`RNTlFPB0|C_nWmOto91zse%1nCatS}sR8(vq z+ZoXMRS%?2R#Io(dcX~?2inC|Sb%H&-T%~I0C*LdY5^PW)F}>|Twf8_z$Jv>>G;xg zr7ngtG61I{0#i|5m`IXS1sDYE$IIlVMnFX8mx-J(aiWjMada_7pN306z8}Zq=~(FF zYvTz=AU6GESUW%e#P$)mGWZvh_%8)a##%!7R|x!uKon0j@isg@#t}mg6a1cN;s{J4 zAu~uDt8s#-xA+>xS1Lmstpa%W3w$wE@|WMgPT2m*YMlDF4;M)s<4k-{{$BZUL+}RV z-!>lhlOz!r2+Uc(tU$Ix8Ei+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IEJ;K`R5*>*lCf^XAP|P{3E+|XFqQCB*o?Zw&(Xnel&D*x4#Z6H z(h?@3N^!4u*v6K}s!NcN%m;TM{~y4^4UC($ZPrAhwbraaGOwqaz_oyvkE2o%?sJ)Z zZXK#-0f24yRM{xsOV`#NE8EDfwEcEURVyG3Cd8P5M4CyVqH6~RxR3H?%o{QKq|L+7 z-AqIRZjaJag}ZlACN#+)qzJ;f;S7C!QNemqdw}qD_5@Jtes|G)r6AfjkhJKvpWh)G zpj}bcR4CMHmCxwyPxV{yFypT}EMU@MDVcOw^&E8o_?eH4I=~{xs6z&v{;UHGF{fX2 zV8H3)qyw-poc?Lj0a+MMf6_sJ9{6pPewcLF1yl^I0YWH=k2+BO4E|S# YU&iL;ptoLrBLDyZ07*qoM6N<$f-|(sb^rhX literal 0 HcmV?d00001 diff --git a/graphics/pokemon/deoxys/normal_gba.pal b/graphics/pokemon/deoxys/normal_gba.pal new file mode 100644 index 0000000000..90fcff114b --- /dev/null +++ b/graphics/pokemon/deoxys/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 255 +115 74 49 +213 106 106 +255 131 74 +255 172 131 +115 213 172 +131 164 156 +57 98 90 +82 74 65 +156 156 131 +139 8 205 +222 106 230 +123 115 82 +197 197 213 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/deoxys/shiny_gba.pal b/graphics/pokemon/deoxys/shiny_gba.pal new file mode 100644 index 0000000000..74b8fc7775 --- /dev/null +++ b/graphics/pokemon/deoxys/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 255 +106 90 24 +197 189 65 +255 222 57 +255 246 139 +115 213 172 +82 172 123 +57 98 90 +82 74 65 +156 156 131 +106 8 156 +0 98 230 +115 115 106 +197 197 213 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/dewgong/anim_front_gba.png b/graphics/pokemon/dewgong/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..035275cc0f41a1719f33b6e30505b1d76c0f4f62 GIT binary patch literal 1304 zcmV+z1?T#SP)U=dwUQN5dZ)GY2+k300001 zbW%=J06^y0W&i*LmPtfGR9J=OmpzZOI1tB?aC?ykXfFsu9W9tT3&u71(pR5!AK>ni zJgJe`Z24$?V`F2RWw*HYaj^=_kD2ky_&*y(zubts^(X1}fZ79|V#h&pb%2!ZC!lvg zdy#SueGtLe3d8{7A~Qb^QcHl;zNrBpgv>nPM=oc8%z6_Hkrteb-`+F;Iz}ugr6qb1 z&c)%DD?1$3LqqkbA+6V}#~Z-!(-I@5W`KmzX081H`wvnWl~7067(L+Ee@_k&V!*#e zK3^@M;v=N+kOFF)YCwghm__Y7N8Y=0d}b{ zjY1>!yP3tGnAg;=Ktl^DrFsOD<%81fXKjI4*&%Hzk>+-(IL$s_^-zO=lviCe^cEoW zc++_;PearTs@9~p`xR4fo_a%RrB`U(FJ8EL;=m1E0J9J*Y7Ah$;AK;F9#9KnW}cc5 z-E#0PKwzX{4D-HNfujYUoezKk@DQ0SrSwatHvk?YxYNZh{gUb7w0Jt*fSZ-TihT^H^)E zylQ}!tifYlsi1WAu7*AneEHdHU^C7R5RiNZbcE=jz8C13Z_KPYFIzHF+N(OdZ|sa+ z&8Cj0GnUB)K>K;!_KDpX4O1vR2a(=5dfM90o}ILu@_T4+eFuk8obD(7r9C=a5BPj| ztogAqu)A!z`Fz?nt7ODDO_S)pvj1vBV8PlF-W```7sEFI$>o#h={Eq)<$EBDdN^@M z;mhUg+-(3S?lE3jdHVJe+I?|v(8c^(g@6=oE@mk1RNrWIo~#}Mao1I%t^t_WECX>@32_yrm`@h)#a$DbCUWZ`5O-zoQFbv( zzANr3hlDDkfVa*9;EB7rbkf8DWcn)*y+)`mq)x!jle~{NUyw)_E2Jo_@RD~i`r@t= z#~T4G5dR^VFYe|uR4JqW(PLn(7Wd$kkqSPnzk!V(zBHR9UxBE_8|E`WT*%l8PI$`d z6(Cl!!js%PkBtG+uK>PjAS`foG4{lL4+vt^J3#KaAmD(tN0HAjfJOZw5dS#vu+tv! zB-sLCd(aof3dB3@0ins!<+EuIB7Gi;lMe*#fj~P7@!1D9gg)BW0Pw^gm~IaOpj6^- z38UX-=K)Fv5NF{#`D O0000Bzm&| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dewgong/back_gba.png b/graphics/pokemon/dewgong/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ba6c297ea4ec7331e5c9765a698ac7214e2d7123 GIT binary patch literal 523 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*Q;0eK701<=-GF3mh5#5 zYW~mg9}`_Yd$zf{T0lVH|NsA)PgJaddKpWC{DK)Ap4~_TvO7Ip978-huTI&R*K8or zrhHK5<(hT5PmPVaW=Jxo`o-<-pP)8#;xCpjInEm%72nyo^~Rr{pX<|S-+i~g@67~; zReFjI#ZC(I7;joIiGBRJhg~4z*mM8SJPpYr78gw#jzo0S{4;A1*l7E!Tzf)?tbW1i z)&nQxX3lhv>VK-epP4bk{pT^Jse(5GedbT(*wNF;J&|S8Z@v!Qa+$sC3MHHl`!+Ph zEX#i4SF$>YS7yS&y9;h{Uw$LAjb~Tlt25@zi~`#(ZAmm;(Pp{!l<|XJ%eD86A6WJz z@K>8|2tQ|T@H$pG-1#`;)wG28uz6hx(wagCE_2LG?+`6CKf>@an|b!ZZ02ZJzD~Oe z*DE>d*Etf_n@qkWx=_+1Yeu1w2dZagrJVb!J|7ff!sGfHwCICy7g;Ol2HTpR%vYu`S$X5(B^ zd6h+ER~^R&u9lzrD;8dH(bz8>mcaX~sp`OLPYJW%{QdF=cXH9#t?(2tDnm{ Hr-UW|#J=c< literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dewgong/icon_gba.png b/graphics/pokemon/dewgong/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ea227df7c55946ec8af154e9150fb1db6c85724b GIT binary patch literal 415 zcmV;Q0bu@#P)DV$zl1+-nAPhh~fj!GdaN8cDWUE*2P~2t&aobGlZ!OIJ z%RiVZk)S7<9i|btnd@;YT&-;YTs(;YT)zW7nY=6o(GQpg44B z26Y`c8N46UMfb-;>ajskNl3ZZ z&)N+`RJ@_$50DRt^`Z$Y{TqP151dFMgs3k~`Sx-rnH=;8qq8q@s%u?u^9@_B&-wsF z5XEf6>Wo9d*HPLBqQwOQCCekW1ioQ|6hRQgj04LrVqS`Ln1Lio!j8g!$)Nn)BnTKY z*U@^{<@lR4Y0_IO`0N4B7w&o(aW_D@@K}hI2l#(k-##xo_st>n0jT8P!VCpI^T_3n zhof=jun(}Z77i-|6uHOhr0FauTYA#kpJzfmkK*rQ=3tTz=p_y1tNQ~I_Ji>TuQ(}M zk53Cf%~)qETCjT58$ZoBfKqIh6|77r6zfAcA;|I+8tg=l!+oui3l0D>Eua~5p#TL` zs62zwVTJ&rl2U#xw%KrhFekc+4l!I?GKYCkzfAtBxle7j+y`f N002ovPDHLkV1haSAkP2* literal 0 HcmV?d00001 diff --git a/graphics/pokemon/diglett/back_gba.png b/graphics/pokemon/diglett/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0b0863b6152be0353ef6a20d5ec0b0c87c6664 GIT binary patch literal 409 zcmV;K0cQS*P)Kkg;xqFcd|ZqAc|9pe&WT)RsDBNgndl1r%9ozo8S6 zkn#o27Zj5jrGBV;Bfg=55ERvZM9R!v@8NKtJ#WgCyW=-aGuETgS~ov*U#JtH_Y~n5 zO6@v=0F3GZ?N+pc?iZB89|Yz=0$pF0U(|$NV9+_@TdATq;ODpj-N5hVhLQk|yR(2c z6vKo&4M(kS7V(kLVmBIPe4_Ag!;HJS)hWcV?fj7JNKg=)z57It#UE?6YiVF)! zo)FKy+*T=A!2Bh8$L`}C@|-(>WfZk-m9jW~-N52MFiVqQyG{bhn9R5Y`-*w+DB^%Y z#s%ZBv4L3#A_+NU04wegoCq%B5I_Jd;MoOCnc{hWIMNyfYQDfO00000NkvXXu0mjf DEUmP4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/diglett/icon_gba.png b/graphics/pokemon/diglett/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..43db9f62d30006aa2482bc84bfdad2be2254d753 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QU(D&A+AYtnyag;_wL>D|NsBu z;eb>UTY{R4HKX9-K!%~A;s5{to1BiH1nOlh3GxeOaCmkj4anZ*>Eaj?(fT%QchMmO zfspizAIg957a95P^0;7-IbmVqrHLjr(xL%BrHj;0_q!}V&13v>i|Y1U)fH{AOS!n_ zwc4$C-0rfWV8!)G4!pmo3aXfx=$i^{2<}T@yc1Sg@tjjsVNN!qQFDcoM2H~AdI1GZ z789F;ZAzUVc4z6_sbW36&e7ZC`@D@0RSt2SRTlUl#mN`=H|4PDx|1xcrPM5@f4Sk$ zlFaKZF~8a%@9-OoxK67#EQe-UEs4I-`GDgj&-aOm=X4TZ>R8-f@8MBhqWjnG%4N;K z$BwMYK5mR34?Ms2jVruwLEhij@48<*Tu5y4Tgk1zKSOmh{c%B2TpxS>RvG?P2X7X$*zOdQ=Qp|8E5ZNnU4O-f zEeU4MHVM@Xkwrc1?rjafnXT?~&Jx=@eP+|SD-(==Ni7Y!pV|EPadt_)ipsVX;mLLu zmk$az&1dJ)Yy1)EaF9=L=MjCUs*Wtb2WzTd)|DjenQPZ7{p!pFL)jY<>38i7+8QSQ ze2{$Lfo$CIhK;uApImt)cE4Wq__bj|N}RCQ0gWH!HOyVL4nHp(eJ%-%QU*^~KbLh* G2~7a%`v9W= literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ditto/back_gba.png b/graphics/pokemon/ditto/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..002635423699cb98bbf315d8d862840c8d4ae6d5 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*Q;0eGW`D!N8gUVdpGCm z)#4>vf|`ppqu}B|hM}S1|NsA+oQ|Ia>SZhm@(X5gcy=QV$maEQaSZY3d^_22(jfyL z*I+B(Jayyhh7-=4@478X+;;OwiOK1fw#|X57Hpds)gzkLZab}SGxNpM-=~YZk}fW) zpZLEn-u%Y9`$@7^YBpzO>Rd?@qZ!#JXT#ix#UJ$Mq(?u&6I8Xi1l3Qe$VcbCo{G5G3Er zcV|}u^Q81d1=j@%6Bl~3J*<9eP(PpdNMNDxw|Nft7p{raR6N<(|J`yA3t#3mzq1L? z4)=*gb{H88)J|Jyus*mW!e2dK7X)! g;Xj*hvA-*|)429B9ND$49~epup00i_>zopr0PA+JcK`qY literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ditto/icon_gba.png b/graphics/pokemon/ditto/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e6328feb5ac9083e37e2dd3a9743cb42c1dcf221 GIT binary patch literal 270 zcmV+p0rCEcP)DV$w6(MDIw(sc^o4jt1QM z5?hw;Q~F@ZL7=b6Vs9N*!zWn_u#^A*6imPz;hIsvYyykF_b{W?Nzn_4*0CdO&Aaz) z3zuc@=i3|ge?8QbePR2Z?JL_?wl8d7hW#lH!~Sg?6cmTdAT>_|u!ZA24X*~`1Piu; UZ}Au+0ssI207*qoM6N<$f+yy2Jpcdz literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ditto/normal_gba.pal b/graphics/pokemon/ditto/normal_gba.pal new file mode 100644 index 0000000000..262742c15a --- /dev/null +++ b/graphics/pokemon/ditto/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +246 197 238 +238 156 213 +213 115 164 +180 82 131 +115 41 90 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +49 49 49 +255 255 255 diff --git a/graphics/pokemon/ditto/shiny_gba.pal b/graphics/pokemon/ditto/shiny_gba.pal new file mode 100644 index 0000000000..9879583123 --- /dev/null +++ b/graphics/pokemon/ditto/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +139 230 255 +106 205 246 +74 164 230 +32 123 197 +24 74 139 +0 255 255 +0 255 255 +0 255 255 +0 255 255 +49 49 49 +255 255 255 diff --git a/graphics/pokemon/dodrio/anim_front_gba.png b/graphics/pokemon/dodrio/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..96cead2d15946842914763870b8c69853c31057b GIT binary patch literal 1876 zcmV-a2dnsrP)V=!nkZ^1*es%!#~ zlp%y9NV*^2dw2JE--pmgUFpUL#_M))`QOaZ(Nq689^bhPWGK7(y%da_JC}yp4G=&R zMfp~J+ezGc0USM}oW$S61;b6mUuM5n0@S7yslw_T$*3g)pylI`g8T?=imTnCoeY4M zpTWnA@V^w#m);a>)>g9mr||JK1UOMF37VS^W`F=?{P3$R3m6lP%&bBC7_CG=3d5Bp zxtS#x`Ro;@kQqT{BV_!X-w*3b5uD9ti82!**IuI?DJ1eTWKd>OqzRuzTNnGBq`PI-(a*pF1Ytaf$y?;r}o);K_$!g`0zZY#B+7L2fzrRIYR zAQK=}#a%3^8`35(7RnO4cfYy&kO4k>al+qle@VbMG0zt&Snn@A-fuR82v~uQQqNRL z`cueuc=4*?V4U0Ey#QVWY$xSwtNGGvOgaL;YN$}mZ@c@g-GdP5{?Xss%Hu*A)+fhf zVb$njndJ7o-Fr<|M7uNUZhXo?k7rwL_EC2&wfz&UIK|a^zMJ%xt zIQPi&_FMNM`C7*pG45-1bD#|@ECAr(tW3W4APE5C8ug(;B%^L>*1*hba@Mq1KfLrF zc`aBfm8TsZXNz{-IbRML+-! z3+qrqHisDCd~O()qFE|L$cF(C(pZ0KL`QCI$+2<6){17qf`*`;_c-iO6~h`si@JA~ zDo~wf6zo&8N65>)s3p|DRjJe?TgVO46&>S(S#wVt0OaD9N?q$}=j;~))GWT`mJY4A z47g||qS$#tpwVjS3WrJQuyp7Epp1JmuNW58h|&%;7LiMbU(vzues0pVnqq8+<-iBm zBc+~FwDmUCC;fWMsEog7dOqnD?S8vG-SyS&$#-q!E4tnvC4jnpXA)urXUw6k`_s=v zdipq|ZE79b)_ed_+Zotae;Poplfdo1Z6!~zMlFFuh+>ccGKmu{Z9AFSM>mrME+4^( zD{Tggf%^91aa64=9#0#076YFcAE>dq{XQX@4v-X*OBGa&g(=c?!!#B|SgD(aU0tva zC;!^EQ=ieA=>X?He*e#Lzx;%j-_5T9q2~cwIa~xVfqj1o zW9glnpN*|70*)`J$<>(N_$lcfkDJqrej&Yo938bs@pz3UfKYlve?j%@*HOc$B@@Qd zyL{B{tHM>OG4>BDD4Js=y~{^5P;agZ(xh(~z;Z>>>(hX#KOA=BJ%zc4(~qQ=1}G)) zx@1ob2#m7XO{8~|Up<#>R~rM*&`~fgytE1Az=<6BHIFU}Y@5 zaJ-Z3P%3 zmY_iWFH$Ho={@aoo9miA-AUXv4QppaDOQ>Eo~k0|CDYQUL!3#azlcUd={+s;ya)y& zsv&YYc~Z0pxsF2V9h7-NEPy{?A(omyggHpT%rgm#0n9T1hbHEJ2;>V!Xpi06D`#MI z1ffvIv5ARn5LY+CT<*@R%7)PepaPr4Oib)@;9v`%AeRm+vGO|!J|OSz1;I!t$4YI@$P^PUGP!X89%c7p zL*nNg<|yd|ODqEOFy5ps;;m&104+&L=wZAEXcmy6UBjLQ4+AD=HUL5d|4Kp#x^{0? zJlUday4LQI2)KMZ;xxmuZ~JVxr(YgMs8}&A^EQO|((lcBe|BZ6m73eQ+wRfZNsBTD z8kM*Gb8r}=cH4i?ILe&qXZ`bmL)-I#fpg~C^MQb~t)X4p0bri!6t$tfb7$ngXN{tZ zqr=7y$_(bK^EY$|W5xNv?*V&8-1#OXax)(?A?XjBkdFnxWGn{2L@YEqX~S6Tga!aC z%uzS&g*h^{?P1k^vLM61cfWh`?fLu=&(Duf{%fDlwIR%bJb#ByBH(|!{~KZ%7Qfa2 O0000ay1$qB6|xu zB-9kai`A+9jUI|@7Fat`Cv(c4-b+fh9zlX?(87=Bp8KL@{m=Jd`yNrq_axLChr1mB z#qo{XNbJ-bL3TT35!DEit~(NiQUIJJ(&VNifv0D{N%{at6sH)QWYzUUwuLGRRSPV8 zexXc27{K|u%z9~Hcycr@eu}g!u+@M%s^MsAk^6^f_x=$9GWodoKK~w+_q%?8EdYNe z9;M@BDP94JZ6ODq>jI#TA}jj9kw|+u98yY^DpkL)L=ico`Wq|wdcy;Sel+LQS4#8& zOR3Af0a&OWUg5&K21wp@Q!L9(Ng5;V99=5~}r)OYRCny(5c8JgqgdIpGJRS1Df zZq!sDrbIk|b&#YA7c~IuU@8o?-31)sKplXH#VwzwEx=qAYve2|7QYr{ zdbjKYQUjnPr6V@02B7U*c@1Rv%lkl?Y7aU7tUP@km>R<%ktW}}fSsZh$1D{Qn?@S3 z$ZU9{QWM=gfq4^9xAT1{7crh03mEW}ryY5F80FC@#^}ZZny6h~PCVE1a7-3T>M9st zH4u#^L(jZll+J697-M77xEfM@o#U`mcp0)2pv^GQH*=~tW_AXM25fj5^zu_?)+ZEo zcE-fOts+$WN%yg=v-=BxJsDPeP^~BT&l}}HA#9T$zD;`CVO-fs!OG8XM@``q_Nf8b kv&K2x*7L5K3h#XX08|2OkuPfJdH?_b07*qoM6N<$f`NjH9smFU literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dodrio/icon_gba.png b/graphics/pokemon/dodrio/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3d462999e5e45177e977193bf304450fccec83b2 GIT binary patch literal 446 zcmV;v0YUzWP)DV$@k}+<>FbqX?0tuPA)wgIyAEp4anOnSB_vw%`2`JzI z87Lb9C?JDb+q9iJQ`T1F14)Tr&zL`SY%pYZfb2WDZbt(3oe3MbwpA?LfNPPhL8R-s zFP0hsoKSJdq#$uV3!=!WQ4q`Q6Xu9eYtJ=#V64x;)jZZ7;~S4-5EzCTG^Y0;@X1`= zr=IU%vWOS_VEnp_fQ<8oDAPNNM_ zMH9y}HN)APDOkE&T98(LZ-Q-Q3sa?;RLpjhA`>%T1m^?k7jqXLa> z3@VHY6dPukg;@m3H6YBwECS^-qY9$}8HN&7m|39la!$AkGwtD$$DJ_on8o}OhLYql ohlen+bbk8&%>dWA;blL506(hv4IGh!F#rGn07*qoM6N<$g606k{{R30 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dodrio/normal_gba.pal b/graphics/pokemon/dodrio/normal_gba.pal new file mode 100644 index 0000000000..445bd3377c --- /dev/null +++ b/graphics/pokemon/dodrio/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 197 +238 197 115 +205 156 82 +164 123 74 +106 82 57 +238 222 172 +180 164 123 +98 90 65 +255 213 230 +246 131 164 +180 65 65 +213 205 205 +131 131 131 +65 65 65 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/dodrio/shiny_gba.pal b/graphics/pokemon/dodrio/shiny_gba.pal new file mode 100644 index 0000000000..e7c27940f8 --- /dev/null +++ b/graphics/pokemon/dodrio/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 197 +197 205 74 +156 164 32 +115 123 0 +74 82 0 +255 246 139 +238 189 82 +123 90 0 +255 213 230 +246 131 164 +180 65 65 +213 205 205 +131 131 131 +65 65 65 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/doduo/anim_front_gba.png b/graphics/pokemon/doduo/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7c0576996586ca5d3c98b1789d0ceeeed776edb5 GIT binary patch literal 1129 zcmV-v1eW`WP)dvj_r{{a7DVqy>w5dZ)GsDas+00001 zbW%=J06^y0W&i*K=Sf6CR9J=WRxxkmHWcP`aw9F4UMYQ>EWD#Q)M$PPAPRW5b}5xVxD(091qM+QV1E79U^;g zShys_69B+v$Ny8TE%1+#5K<;~-ow(Aaop>2DLX4rBVM44UeX^9Y{1DUO8;b0`~5<9 zNVwS0w|_B?+_l#U2sAysgBZoc;zIX2HnF5^39|MigzH6iW&z%SOaT%iL(0|*NUfuk zTwQ@oJfI9qLEqYFFIQKb*B)amMgX$_Bp>}Mk1%Kl<1*EF~8pIJV5uE})e_`cg{lI4Os_yC}AR0CU)K9X;j0{BmZpvTxtT zx9BAXkepX80MXe}W`pz6NkNiGS0pIh6!?IaH{@}0;|2tin)nlU4dPD`Fxvyjr+6;Y zJp_im*drmIk-ZYyYw?{G{L&D#EZzB{n3M+Kl5ktB3L`<44ua>+)8htT`=gPAqG~q5 zhUC|im;SILs7dWVKi`%c*EUQvn_ImXKWy=7kGHB6L_7XB8#`ug-8hShk2OV4v6 zs+F3MHA^!W#IKZ^ZDBaNfiddL5}$c&=9>6q#-6k5GUcf(?*H>p3I83=LK|AJ9j^^t>p4YRQ8!4@k2~u0;u9JRo&=Sa5!3@40URef`in*{ z7({&w;fY^HDVMcODl@zz`%2E$C>2R9c%yN8b8GJ6MkhE*^W zL0AqYf2z&0kXs95Tbz8-E*{_Jg|ry9LoPx00UXdk>}v40053y>V)C{Dd2tJ9h^4VO zuFfL8thF%N&^d21!yzA<(uD{f60|_NDV+#!F~n@8i>XTnG3KHo%^rVHPSBnduJLdD v!)%|&G5!H_Ke!CWKmNhxvtIqfe;0oPlx#sa^RraG00000NkvXXu0mjf;;ItP literal 0 HcmV?d00001 diff --git a/graphics/pokemon/doduo/back_gba.png b/graphics/pokemon/doduo/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4589eff60724b206d34276c3da35db3e5d24ce80 GIT binary patch literal 651 zcmV;60(AX}P)dvj_r{{a7DVqy>w5dZ)GsDas+00001 zbW%=J06^y0W&i*J2}wjjR7i>Kl(A0aFc5~_CDMt!ot>=^jqPo2MHAbih|=sXhs4$g zG*@z2DWU~lf)^l4gV098yux|xY&K2|JODRJ;mLgY=bt1tLjS{y_^W!Riqp^P0%MgP z@?s2Rgi<=|QcgyR`DdYRWH!xm6oLX94oc>vUz%x%Jn z)f>(fyIb=839_Y?W1a~C4YDV$!c7I z_6}7ev3z|?ao)q2-#);h4U(m{;1HR0U;4r%mr4KU@BJ1cv{h)kpPXW*G5 z65`Q-K1hbI1&;=J$r4WsQVn*WBG!>kCfM^t>bfZe*+*@(l@Dg4PB+b4v*9|M_4X># zG55~jo`$|DMrdcC&{sjSnSRsH^p!An$n>=^EcD|g3?K>phY}`c`fH^xG6?d5bh0pav`wIwrX!iZ8A8+|ImREIMaA5!d002ovPDHLkV1oY#nBV{a literal 0 HcmV?d00001 diff --git a/graphics/pokemon/doduo/normal_gba.pal b/graphics/pokemon/doduo/normal_gba.pal new file mode 100644 index 0000000000..d3213543ab --- /dev/null +++ b/graphics/pokemon/doduo/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 205 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +222 172 115 +189 139 82 +148 106 74 +90 65 32 +238 222 172 +189 172 123 +115 106 49 +255 0 255 +98 98 98 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/doduo/shiny_gba.pal b/graphics/pokemon/doduo/shiny_gba.pal new file mode 100644 index 0000000000..fa2c1c8fb9 --- /dev/null +++ b/graphics/pokemon/doduo/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 205 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +197 205 74 +156 164 32 +115 123 0 +74 82 0 +255 246 164 +230 205 123 +131 106 24 +255 0 255 +98 98 98 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/donphan/anim_front_gba.png b/graphics/pokemon/donphan/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..23181fc634ca29e680ebc5d1ce14910453914d3b GIT binary patch literal 1356 zcmV-S1+)5zP)U_nec0vC{STz7%UXBWXLE%&h~8EcFIqE-_ISdIvBWwH}z|fw|<$qIJf4-4F7W0 zC>+?df){%Lz}V9bL50Ri0Yb2`1TF6$Iwc0cIS1cgTY}*McAS0OpT~a}11c*IWMK`|^ ziyXVDfqS;&)~E_(5D8G?Vj{6jvx>37~t{=`a=3I-s7MmVuiv!}zTGqp*owT=3Re=cQN%Vj<8z zl8g0kf8#=Nj&?S}rI{6Fb7K99WoUIF;pkN()J{&s5n}I~yEj1~Y9-8WYr$V+Ba5N8 zcpfaH!F53klrgvvHG@q7ryO?31&{Lv{=6_B zJh7}u3X-<<<-7iOTEO`w3Cy3ZHzaW5Bz$LC{e-UxjFI&ksG(z+|7~seg-1#toicmB zP$^3Byqo;d8*ttpHf0J*VB9>TQm}Y__QTEK18-laIi>>RPwFQWbUHtc6CMS}Fl!3S zwbutbbSLYb&MTZ%noaEerl^P(6nyMJ=ACt3wfO`EJEcSlbTMMl)2(hJ;WnGaObNoe zE+^I7odqEeZD@uuBf)S*P!v5|Ut9w0QZKP&Cu?T zf{$O7tM@2~2Dg}15<=?r6CUx?7cj*MW;E&#IZ#$)gv#OMWP1^PuTH#(M3GG1j(GAx z{@A{H+wP_N6#;0TIUMz)ff5)|!Xf)rGe#G^!Nu}NSRXe`xEX}TgHha=^cauvk>jHh zNRA{+AUOz&B$trG}`IJ3tFfdm0~E7NlbMDqi^^>!YC zG*Ube?&T1O0*uP8v*%QE2_zIrRA7FNhu$O*T2G{4AYYt6Kp+^Oc3wU}AO-=(*#iW! zV$*+0AeDb3km^GOLVzJ(B$iJg1Q=Vgl{gP_1Oylr@iyOsC2E&1V4UfSe^c(KDBq9BAE z%@1@)q9`da#tbP4dj~W>9Ljs-aVana__S`JpHv=W>M~ikOaftNG#Xy`Z2BKV;yd2&4X3{%{{ZY{JO@ApQZy3poe~Vtyn5 O0000u4^P)Kk}+=UFc3stNOkT&A{Q`~+JLpJ`4MYt9z(f7%BG5pE8i%8(TJD=93{;1dd9n zLsJGSylWfm-!dQpLU}^1v7-&;CF(-GThBpd&LDz|8PLtr62XAnJPaUUk?*N( zZ2VR<*?D;FhchfPaI({VNfb>y4}JeKz#?Zng{4Mf_JRD{Yv1?71qtG<=XMQf+1m`9 zzaslIqFet1{QWe)^$B?Y03jY7eUs%I@B-j^jYw6x>Ri+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IRY^oaR5*>@lEH4nAPk0if<)duL1FhrD(9;2FA-IH0GdR*PAnwX zRNil3UDxX_(@-w{Y{0>vQh$Bb{18WC{t>SoMJ}~0dA*XRMF3J9HHhg+r;4@Hglxh~ zCTxfz$bMeRi6FSexuG13q>0*LjpZH?()$gdn#c$l{32~gPnv}Y*sSH%L_V_Vw3mw2 zB261R@GAgFkG}Y@yOEpJd=&x(dw6$#Y}#~7h1kBh;d1ep{PQz~FwIRng(-u;aZ+=s z&wHp54^|-q(qumH05`W5vOq#E+re1Co>~pqB8d6XHi{LtG)zh6U8tp4jwy8&^ZuRPlTg zXHWYXJdG1dqVWwraC{Y@LYUh(2;#%d55$MLp_?BSwWzxHhh(Mr01defrAX-FeF<=>$>BUPSN?P&( z5^o)4_yg32mVO31PEjzCz2_qsk{2b5;XA{1y$IqFl#$jDD)BS)-H|*VNnHwbYi^Tb_l|e>{+jk596JBgRs#;x^bIx8YA^~ZL+EIe11Czr?4AI%p_-%10S7rRRVnUm zhoR;?=M$|3%=6L6N673dfD&rnjEUK^c9lhV7*96pT~!qZhB0Z>Un_L&BffEm6U$aE z!$*Ai(k1qu^i_B#J*>v~^zsvVEd^NNK+0e=#;*H`Q1P9yBnv6Pp8#NYNT`S~|6!_S z09FL10tkQJ&!jsWGo4UBnc&6XrwqVX0e~dz)0<;ATjeSOk{q9o4)O~UuEHf2DLnNH z08G=wB8BUNK~WDaFG-<77R3Pb{dWRb5=qy4yVFceWPdd!5cT+cx@Hn)IrkKt-XX;J9JP(p(mZ)dauxXQD--M zrefQ)-ff40j-H#Uw%OX8jjrYh)qDK0a+e33SKbK!+UPXC-X{# zRWQDEvDMk#Yp(_9YJhvApxY#9A) zQ(dyYeeLq=Falm=d*Tx3+HUzx7O3F3v5VvXG{}}g^FaBRTwC=cKol1q`Fe&!-XUkC!MVnSQY`;+FNPU&j8G$u+Neu0~rs3 zw)~JCzcfn;h&>9J6dCY{01}UaZy%8O7TR<2uka`sy1xu0y)X7CUKXfe+7L6u9>v2Q z0Pd0;1(13a%7A!8U$V{&#BcTv zLQUU@=hzVeA_Ku%GxHBqUI4Z2uR_=KTIvtD+4*YQ-%Gltb%frG_De5p%etmp!XK>J zhCGB-WA*|91nU8A5177Kug3&c>yd%*zwHlPS26#;V*CZkRN_OOii~>z0000@_9~}pxIQ+eI@xac=i)a-WJ;l~WrhkMm+fZvQk@Ks#@F;iwWa5BjK%o+8wt1u zkhzp!i^mOsRw?Qy*211z{3U>Tg%Cg20k2$@__Yq)ttvI}O9VARgqZ8V~6FQ@xDu51Y9I8MAbWO8`o$b$OBYIKx zB4GPfeo05Xv%rv^E+Wc`c}+XIW4RIVYAvtt;R-oca6iWv>i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H{YgYYR5*>@k}-0`APhxy0&@pCSDsln>uL{|hK@GBS+17Z^d81E z&_oelV<5#=X%fbbz9kLzdqjWxD4(CEj-EoB1xv*2!>uIIk}}55`Un(z6%E_lR41Z& zW4D!#m;;wK&F2Uu0It-e;1w8%wsgo#z9vLtkCqL_nS}IiN{a?~f#hWi>uDaHtT`{w zVTMB!(C0-;-0KHF^eDkc4ThYo?LQjUwX6Tt>FDPZnqUVc^iNQc=}Eunpsr8)RR`mD z`aGRW4*I%|?DRLTBRhSr+&pFajUOyssr3V#gnsJ>5SAZ)gvGt~<4c0hkKr=*ehgao de$cP_@eQpK$eoyF_3Quu002ovPDHLkV1i&Nup9sY literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dragonair/normal_gba.pal b/graphics/pokemon/dragonair/normal_gba.pal new file mode 100644 index 0000000000..4297fb8e9e --- /dev/null +++ b/graphics/pokemon/dragonair/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +222 222 230 +180 180 197 +106 106 123 +123 197 246 +82 131 205 +32 65 139 +24 49 90 +16 16 16 +123 49 123 +148 205 246 +82 164 213 +49 123 172 +24 65 106 +255 0 255 diff --git a/graphics/pokemon/dragonair/shiny_gba.pal b/graphics/pokemon/dragonair/shiny_gba.pal new file mode 100644 index 0000000000..da7b6d02ee --- /dev/null +++ b/graphics/pokemon/dragonair/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +222 222 230 +180 180 197 +106 106 123 +255 246 164 +255 222 82 +213 139 16 +131 82 41 +16 16 16 +123 49 123 +238 156 230 +205 115 197 +156 65 156 +90 57 98 +255 0 255 diff --git a/graphics/pokemon/dragonite/anim_front_gba.png b/graphics/pokemon/dragonite/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..188c9ee595947a3f4ee6f838d8bbf9cc4bda147b GIT binary patch literal 1895 zcmV-t2blPYP)`AF_RZDRq@0{;)z#i}b8`?75dZ)G6(CKp00001 zbW%=J06^y0W&i*NV4F9yyQD~oxkUiS znn$yeu*M{8VXN4`_!+N|Y)#W8V2uEioM)XIGyHS)FC0T0lQO zJegiM$at7$^}Fb4{A6UT4ikC|F0@)`Juy~4PRrPigwpo(FglDCdl?`` zgAkM25YGsHtL~yQwsA@bVJ>Z9JOH#Rc9&8cfVGngDhw-TIcF-x6oG@E3&645_T1jI z9`s&70Aww_pdz~F!>#!qXzzU%z`t+|{Eqc}t2oCB+I#B=;3@dtE7tR#n+MT+(Cc=$ z3~r}X0M3Ispjus6&lb02|MCi=G#XrTiDWR$|ePR}JK05%7}!FB;S z_tSsC-a92tLfr%a8yz5E3kRv9fW5nkCrDk~V`9PYPkY-uN);oyjk`=J^@2Xw%@#NS zpj(_1Yms%kX&MB9OJS!oI5z_F7#cI65`YOq0hq0A4s6O?jva$%$$A}xp-V9x4^s}v z+enE>@*^L%=r?&jlrJw|e35{bIoxjJ4#BR-c>DIt`1Y>?&}S~cqYdAG^UmKT7Sb){ zm7=_qTj=*LFg=-%#4cImcN)VH&+>{G4*_`O<9Z_i!t1I4^faBY{cwQ90U?QSp(wXX zb*pAsb{YQRLky(VlrB^o`a&dtjSLAMB%$bnmu6ehZpJZBHQF-~B-nWA@H|IXV|axw z>4by5?DCQa31{R0zo{r24;9z2;OqP09tP=PfDXPu4$LBpsfJ*ANu|!M!=ZEjOOJU=fCoTn(;_y%r|^Inq6vu%WNnn3~)ks#eXoR)J0f+G0a5)g{ zLpeHR18xQZUIwRxhl0mQXeWSzcPwj|jUxI30CsQ)%SJbN4Y2^)B31xw1T66W%M1bj zMn?h(?jTpSou~N@NddIWfTDAtRdP@ZB=j3AfVcwSwZPZC zLBQOa5Jc7~13RQdAPWvK>z@7H}c%fhR*g94xB;NsKQaa~w}$I9O7D7?2DK+K$4jpDW6u`YWo3!vku& z)b6VKLofK;XmD*eB~Vd+91l)Sq3vd!`onnO5xLA7^~dpGD+g$e`r~-8)hz5w>MzCv zw<-MBsJ~G6&3U!kRrQzS!47m^Sm*tZB^JLs@5O2r%Q6SzlDMO^ z0?=pjLi6BD0IGG%Aq&8*3ScHhN#)&3o#!EGnk||;aEtaf&m{Dx5pBv1+~q$JY>(1U zsBh?hvfRGhhLs#&k0Jl~dl#j0p;QZj= z_`shhI&YeC4;XXA{D9+w1bA!(0NLmB!)^hH@qm;7K0i3*jzKDbe4FqApC6o}9=Ktp z49NMR0yJ{~_rUq#pePvHYF7Z2iur-kyvMk98+Ir%rFdd~n70@hD41i;i&vSn!ZKi& zdJ$jno^gJdYx;sTtH|=HzSyAxXbuJrVJ3?XYylj9Isg(KQU?X z3J32+2;4}dD$mGlZ+@Q2TY{q2H;>(T6*9|3OWYdCm2S<+|y>Q4xq4;5;f h*2#C8GA~~G^gkrvT8n$f48;Hd002ovPDHLkV1n%^d4&J~ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dragonite/back_gba.png b/graphics/pokemon/dragonite/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7107f90cff8675cf71461856b9a3df80d9792c17 GIT binary patch literal 622 zcmV-!0+IcRP)`AF_RZDRq@0{;)z#i}b8`?75dZ)G6(CKp00001 zbW%=J06^y0W&i*I>`6pHR7i>4lRa{zFc5_aMxi+bcrPHy=>)4*Iz?HK`ox&=0R|7j zY_{MFu*G((`I|vwJKgPoqIe&#UpFF({-=6)qf2)mIKQHP?kA$IZ-I|L2n|Euh>Y}O z|9%Vfb=_C(P>DTS9T9yW`;HY4!%)3NAEi@GbQ-!A%^ptG%AzgH2Hz>4)gd}#zxG(2 z$~6#mluHy+L0gjb@3O3#%`k;>+Aqld006RJN7aKqiTzdb$I+ zWCT>eoys7PdLZ0GsM%p31a=6d=_etal!;^q9Sq@AnvM?P9!6rZu4Eu4u5mU{@<$Nh z_rc)hF$i!#z-6ms+hYR219CgZZZ?4Mw%s=Y)G1|Pmu@y7i@>H9AP0Eab{GNhKmh^3 zEP#c>Ru@Zz3)p}`yaK##vk>5C=t$os`@4Ym|M__M9C+3@lZXZI&D{h{S@LC%#hK$qZy3fc*$u7Xb&}hasnYR`La~4ET?GnSt@n2Wn_uO4S7by#nwI{t5ya1A6s* zy5W&9rTGdF;CF`i*Hak(&@y238nDX{{;N#1g{xYhoqxan0&XiTBw*sHng9R*07*qo IM6N<$g8H5mSpWb4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dragonite/icon_gba.png b/graphics/pokemon/dragonite/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..efcbd8f11f69eb6150f6655e13485a68a1534265 GIT binary patch literal 414 zcmV;P0b%}$P)DV$*l08nuFc5`vg3K*w={SK&OT!6J^yqA9SBgt_C>6Bq z?N$_7Z4+6Fu;~WJKS{L90a(k0=jqLi$NsA7wwC=vpiRhgH1BLASY{4^Q&|v7n{cMK zNf!6)wTG>o5Ya+y5Hu9EkD}pOVAlHyipBR6#~kw7OaPc{s^Nn$1Ob*z5}fV;2PmKV zP9~h8H12gup$Fz4!0&vQuNvb1Ewq6u!_@N7pE~)zOjqBXKTnXyb>1&I4v?D%sE<`W z4jV^wy<7T1uxGr#r|FOlvsfYtDK8J`yp&|Ts!of8Km^R`-XiUy%3l6Wzvf_}1 z6$f{PL#najklU^}FsB*|4jQFR#-ZbKHFfBHr#`q0^AB+N1vQ(*QTmg4&j0`b07*qo IM6N<$g0l3x{r~^~ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dragonite/normal_gba.pal b/graphics/pokemon/dragonite/normal_gba.pal new file mode 100644 index 0000000000..80f21c5c02 --- /dev/null +++ b/graphics/pokemon/dragonite/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 0 255 +255 238 148 +246 213 115 +205 172 82 +106 90 57 +123 197 197 +82 164 164 +49 115 106 +255 246 205 +213 213 164 +156 156 106 +213 213 222 +115 115 115 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/dragonite/shiny_gba.pal b/graphics/pokemon/dragonite/shiny_gba.pal new file mode 100644 index 0000000000..4e04571b1c --- /dev/null +++ b/graphics/pokemon/dragonite/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 0 255 +156 180 123 +123 156 98 +90 106 65 +49 57 49 +222 156 213 +180 115 180 +115 74 123 +255 246 205 +213 213 164 +156 156 106 +213 213 222 +115 115 115 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/dratini/anim_front_gba.png b/graphics/pokemon/dratini/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b80476eeed182de30979d77886ad6da430ad6022 GIT binary patch literal 928 zcmV;R17G}!P)3^%D0zNtSk*|PfwfI&yTI&o|k zXnC@~X6z;@Jl6tk`7~mT^G!|+`tLY1-2gJ8$qIxLUvpUbX^Cr8&@TuHxWoN&E~5#UE(~xGR3$xf|UQ;^Ptx0Q#ll zyQ|>(;|u#s2bkf&XH*5;9qj?Y)WQgq zH(|Lc=b$@RKu`lLD`t~`&D5I}(`tFGe-g&jctE6MIQD7_>qDHdq^x7PCTgtk3e|50t%E|NZOaYUNK8AKa~Qx8xxMY%lnA7TtUTch>@qm~%zg z%_cdWccPHAFSG!J5Qq?41;E`ke~G|(PqYAL2-=g@W#i@7`5uK-dbbe3h~Q_tz}xS0 z49*MY-PZzPe%lVE^Uf#`YT_6|@{z$B!dSsS)gZ+R+x)~A!dTgpzQYkH-sg@q)sAA}g+&o?P=GD$Yz%maZ4tmoz_jz40H+3&LkR2&ynCwOu4{nw?(A7( z1b|fm(C`*HP>C4QyY(hafFnF}yC1NY2q=lw$PgfIh5O50V1W2j1!RB_*#+&N)x1{) zh-qxOm>*cb3g9M$wQt1O$92Fd#sg+D=VgHy_v(EqA&Ifsy_Xq5sVRZLNhN{)ZVVWb z5b?k)0OdZ5ctF4H=|iOu>bvRwJ}i@_`}B|X=IcLQz3&Q|28{Ut0000Kl)Y}kPz;4LWQ8bFUmy;1QRA!yN-|dJySClJf?&fm z4^V>GOK2e-De3*8Ln}LxI&+pg_`CM8og2rw=>KxtfV+_pNYCf~N&v=ZV($wnlE4!C zKuD29_Nog4;G(&@eh1)dcnB&*NjX4IsuA?cY?4DL096Fni!93l@q;%J!8TJsh$xsa z39@+@Cj&OY0R{?~RK6cSaKISwmQ)3d0>8iEJR)w1D91R3{*tp0ry8IdF}2L?FckZyctm>wEn4tONwfzz^3eZr7t7&9K6x?2=0 z%EO}qh8*BHUkad_NZO}U7KQPN>@u_s3*?_dTmz~GZKSwkT+)je*Dh6!=Qbb`TF@%n z0MkY^Y6MpF*lz)54S?x$CcG>oy^TeaOS7&fmv#^hHOwHMWS7dM0vg)zB%rfX+87HQ z(AmAJXT4n4r-B8#ZF1jnSfF;x%{`_I|gEMhU5G|x{`XWi+c;FbI8u58D P00000NkvXXu0mjfuFT^t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dratini/icon_gba.png b/graphics/pokemon/dratini/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c26efee60215607ea35102673b786c5e51d8c2b9 GIT binary patch literal 334 zcmV-U0kQsxP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H%t=H+R5*?8k|7SmFbqX=g8B{_Sy82#l;v`=qWF%Un1~g?<3Bb{>DD_Cfn@_jFS70p% zn?qf(JqMu*%*Gsu6#&b;Y0#A;%=ZTL4KR-a7X7`awTliE@@(J#`D_GA(V%o#Gf~uj zz%-I~Dg#7r!k7=RA_+Q~-vBOnm5a?4?9HZu_*hA$`;cd4P;r50?Z>w3(F)V^*$;00 g=pJW3x^MdN0%I;~o_zzO8UO$Q07*qoM6N<$f+J^-3;+NC literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dratini/normal_gba.pal b/graphics/pokemon/dratini/normal_gba.pal new file mode 100644 index 0000000000..97c442e6d8 --- /dev/null +++ b/graphics/pokemon/dratini/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +238 238 197 +197 197 156 +123 123 82 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +139 16 180 +197 164 230 +164 131 197 +115 82 148 +57 24 90 +16 16 16 diff --git a/graphics/pokemon/dratini/shiny_gba.pal b/graphics/pokemon/dratini/shiny_gba.pal new file mode 100644 index 0000000000..b2e5cc7817 --- /dev/null +++ b/graphics/pokemon/dratini/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +238 238 197 +197 197 156 +123 123 82 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +139 16 180 +238 148 197 +205 106 164 +164 65 131 +123 32 90 +16 16 16 diff --git a/graphics/pokemon/drowzee/anim_front_gba.png b/graphics/pokemon/drowzee/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2e74d279ccfcb72ec0d00bcf5f6c47e8e92854a4 GIT binary patch literal 1082 zcmV-A1jYM_P)2QX9X#O9VN-i08rI_n^j$8rPwzB zb&7rwlVXjSxeSBANY#i138Vl5%rt!Ehy949n`N|&Oo!jp)o z2UQ|A!z_bYL*G@*zOnHit&eg z3xq|)7~gzJV`dlUK^x->Hou8~cX2iifujq?;x8m{egIgWyGPminavRZyXnpZ-o9O) z90Ha`U^=zHK#JXTVFmc|>~s*Aumv{?e0g#*IEM-2kK9I>1;SD9_!T#6VM`bQCY=9e ziC@j->N)^odRUv_f-Z|)P=lhpd^^@!U(6J0Wqi9RsV`q|xhi4gp9duv>yekpDgUylD+|LXOsfsmQw)B!L`b89eUdJu31 z19WhhG(ctzhFpiIe*-iIV}B5^1|x@kxu?4$9ssSuu)v%2(g#|DvBB-pJOny}Q4s(v zeF#fv36R8666j0r1RVyaP7(zTB@pgE6^U{HpQ7AV%xEo+p%|M;WIn88dxwa+`^xxwJ*mgor2U~nI}^$mu8PjTMm z2o1)O){mq2oxrfc_)WCoLk45!^_SQOEk#^oCaXbKm`gLi7Jd?=*Nf zHLGNKRftz&M~py&xy787>lmE^xcssc&V1e0+P7~lOV*#Tz+Ioew8hQ(;ZypGA?l#m z1nB@>&ou$2t60wXGCUVDu<+0BuVUnR)KKy8z(c+X?hAhT@Uz!&`h>WjuDw;Z(ZSoL zVQpY@pYE1@%#96wkqu_ryp0tqO{q^;HlO>i{@``;k##1CjB@+c8=e*HGYDi3F5}$K z_*8DV$s zf{3}J0XF>su#p9k*4#lc!3*uc$cDWhb4Uo8ZpI}bOw56eQ_sX%la9A1Q0W?ebr8JU zLDSSTC0MO?7(Nd}8XO)v6hqHZx)KDYEgF(7b0?2@`^bI-lEql|St0NB7<2oFHxnMh zP;xg~=m#~DOTZa(2XGGd4x(-bc!NuN-s->o=$8GxKYq-=^y3SwBER_>Mv2`30000< KMNUMnLSTZ7G`42| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/drowzee/normal_gba.pal b/graphics/pokemon/drowzee/normal_gba.pal new file mode 100644 index 0000000000..2fc73cae96 --- /dev/null +++ b/graphics/pokemon/drowzee/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 205 +255 255 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +189 139 82 +148 106 65 +106 74 32 +74 41 0 +255 246 65 +255 222 65 +222 189 16 +148 106 0 +16 16 16 diff --git a/graphics/pokemon/drowzee/shiny_gba.pal b/graphics/pokemon/drowzee/shiny_gba.pal new file mode 100644 index 0000000000..f192e20d0b --- /dev/null +++ b/graphics/pokemon/drowzee/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 205 +255 255 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +189 98 106 +148 57 65 +106 16 24 +65 0 8 +255 230 246 +230 189 205 +189 148 164 +123 82 98 +16 16 16 diff --git a/graphics/pokemon/dugtrio/anim_front_gba.png b/graphics/pokemon/dugtrio/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..81f462cc6f1edcd9327e3febe296b483d8652279 GIT binary patch literal 835 zcmV-J1HAl+P)as>@9LI%#e{tE^76bK0L|GWeKNUc|(Tr%gA>>g;q&+Y?CuHHurUd|F zY~{l|=dSFm0Pym^&lewD*_G8+39#V`)XVPy`)^_0+X7%yFL%}urtE_TG{L8p1J0A1 zju;E+>jg~9JMI!bCbvaD0l>$3B?oN!$bovj$$`UTzz&4kp5w64gKnc7Q2PO2qaQ~A zB;$hL5x^(#dU+LafY&j=CjfWZ48j!fqyXGy5XGxhKmx#BMghOhWc>)Rg)Rp~eLDag zp&MGiCIa|+AmK3TnG?3O@N8hFh}CBHTr| zKiK!6>pI4GXu)4c2Q?iV?eD`-Ce1t-{%?qC31%Emi6o_cJ zs%h0~MJubUvi_`2#{+UQ9)SDbs|8Z`e^Pgly1%ak!2R8aq6o50&HXg+q5@W_`{xZ$ z)Xx120q*`qK;r%<5(p~Kld*2XFc3gl+D^^iB?CjnWKbs-YAZw41rk-_AG(xE zmih(BA7DovQSn*q(0oH3$95obGFBZp30cZLy*uBT(dZigGeE^)o~bAY@>xDe+-F%< z0qoEN>@86A3v`J-g{#m9xC%n}YwS%0&iODP0OVi`Tusy0gaUGHfF2;&Zns8ImgScR z$ZG+IvYJ)b5m-T~dnr1O!1$#ZXy>W{ld3kr(N4TwBq;TseliQR71De@_UzQnsmSVX z+cn&(*eUld{p>Lm=DxfGn8#4m1|ejtf)OxwtOd{pOlzEvZ)rqmSgZ0Y1Stu%qxzNfL$;#tlHmYY_S`l`bQ?Nj{buh#jyP6AHUj{Zs-? zNxV=8#`6Y1IHAihp^Fe9l}R@0oZ{vZH&dL(VKj?LROK;=)rrn-d5bW44^fh?v;fav fCX>nN8h;$Wu&fQ*lyZn000000NkvXXu0mjf{Z8nq literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dugtrio/icon_gba.png b/graphics/pokemon/dugtrio/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a837c7f6f39974c30e02f988970be752d1599975 GIT binary patch literal 296 zcmV+@0oVSCP)DV$Fbqa>f<)l}u3+exLos-4wszz;3_TTLU^Iv! zl~{~HYW^+&NPJt~XFJPN>gU6^`fa8|4VDq>k^8;@>>KbnB6A5M;xZO9hS5*x%TJ>3 z`wWb&Fugn0-^$W0sfz0000i;IiJ&DCmJDZPsz-n}{I=7aY3#sB~Rm^<6i00001 zbW%=J06^y0W&i*KXh}ptR9J=Wmd{TUK@`Vlqlu(kY^V}2`Zq{+=|w$|edqz)#Mr&T z34h!OCdA4?%8hDb45vC?XcN6`A(40>cIbhGQ&|rtdeKf#4H&SKc*366H`6U0pwtVA zmwuBb?Y>XnOlEfXGlX>0&Do^zk9u$UVrO9WS6iTGA^Z}l{K~ciUjJz}D6D*FQ@;=# z5Rz66YTtA1MhG6`X9*iHue^C=&IKfybnVtXv1AmpZ zALl~aNeXWBtDuk%vp9V6?R8W6O$e`!>rB(wWfp4xmx%tjX1$5vo zF;*CB0gf202<`%m`Y~9pFFCawxmseam2{FW=id@Sz{IsX0qqA-ytujx8iRda&T6YP zJgI=6^TOIj;7JvVT)!K7-LG($C#J=&u-K*Z}7 z*m~%?x4zyMVhRxWEVo5lMhv)a!rp@E9cv5$N%;PV4#X`0@WC{(!G^E0r32?4#K5+0 z`T%21U<LuW|pAJ1er-E`BbC05Q)J##d~isqH3 zOV6}vAjK-pJ26AjL8c9WVy)Dqc{h6~T{;OUu`2VHUaTjzlSw51A)G?fyc01|9VLrN zRqpljl^+Udh*g?*>>Y^2vmjW&%hA=MC@Qx##VXCa22MH%f;aeH&sX+q1!eG1tjfHF zs;t)~;H~mvNv%vMR%PD86S^Ew`YKBd=JA4`Re%y}XkICIy14h9kSlDZ6zUbl>e``s z2e6#R~!L(Ew!Z z<2!1^qi;IiJ&DCmJDZPsz-n}{I=7aY3#sB~Rm^<6i00001 zbW%=J06^y0W&i*I&q+iKlf6m0t~deAk(HUY#S&ll~ICAd;^W_WFR4 z1mJN5I!9zUjy`IH$NPN*HV$9Om-35jHtCRQkmEUvZE0crK-bz##$W zG9<1z_ffdgJ5#f0B!J#(9s$%NEvzeGMsy-T+U2|f9wK0xfSgWXR(Y}?;4sH%;8g=y z%g?To0qg@+Ws%-)773<+$|6q6y{8@abPs|=dcl0tN=iXhz>Aj?<>H3AMJxyX+;r*oh55N4q&Q>(5IAbDL<^`C?KaQ zO!xrv*tS&;12UOiwg!O7ZyKl?pcVpIHdP8csOSKRMaDn;RK$9N*-g6Gi3HFPNzLN5 f*>R0S{Udz?-(~0O{)QaR00000NkvXXu0mjf2eAy& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dunsparce/icon_gba.png b/graphics/pokemon/dunsparce/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d2896e72bbcb3664388ac98bed2a1a775e1e6c89 GIT binary patch literal 341 zcmV-b0jmCqP)DV$@(k~9fAQT4hcY<;l4p31hFq;{oYS%$+rcL_HxLQTU zW+(}mnz60TC}1Y)ihEx^{v|(vT`rObllc=6yhW2YKx7mUTEc|V#DRZxNyD*j3HO$&yI{a>HP3ZTZIk&MFT^SIcb@|Vbp)*3@+`c=-m9>K|e_xAGbw!wItyR_) z09Hi)5VLCl5|#S=uNFm;B!!xP^ko>|PHq;33Vk7_>h)wYR4n%b=971S+%T2D_2dBH z!(TT_<)H^4=I)(aE0sx4j%gG-7pZyZ0rZRP>S?D~D5Y%8F+-IZV_1WfZHI#DtY8aW zgrcqIL#?S-)C~Yma|Cbzqwnz%!kQDn`9kLuA;aTV*oRYq%mu~IBCT`Qb}~!(On@|8 z6!Q5Lzl802L2g#S~`WBqq*+`8J0LT(gzH}FLz}B*% zz87UFr%Fn}S9JhZZJg2fNHNWrWMKmkIL2eQALs(5jvW(>+sETo!f9j7eS#XX*con_ zUG0tmduute43i|@T<*;hd)glZ0$KyJ21Ug0tyygmp;m}`idR@{qh89Oe15WQicMryEGg_B`~0o8)%`#o1MG!8JFa)^){+5nN&YC5*s6>F ztO16h#F=$_!@_9>fO)J}lWFRvaGQvlng+Dn+Q|&GV(`R9qgx>W)|R!63=@SeNjAU* zz%V(yc`k=V!rqATWid|@DX27!qaQ>FUG{veW;~{w?bi2fZ^4ei!0wiJPKJJ}jNHhX3vd1em9b zpfke04%DvGJlBv9p>`xI`^LGYmK2AEA^uf z@K%2}i9nvdx$CR>WO7qvkst8-r}qNQfS*51BBg|f{QJ=l?mgIFg`OP!EOR6u zt~})5o2kL&QWvXbRjEofd>Gm`#4M`>5GCvqO=Q)Ls|)t=c&$9(V`!MhnH}=&{-Ph@&I{o0^kpl z1XL>7C<25t*-+&@&U6H$~ zM+o3F7<_gOHmU$%=Hm##7HLT}U~ZDHfQtRU8l(RmSS6hoB6plRUhl@ats;Q@Ga`4H zN&3mLdKi_^HY5*F2vk~y0$0hVCNSddj^sfY8zO%p!2XZCE--e2T&z+D@*~)P=^6q< z(n!dHRB^@rt93(Qq1>Zy(NY`r$vezX47)=BsB)`}P0;002ovPDHLkV1ng8U)BHs literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dusclops/back_gba.png b/graphics/pokemon/dusclops/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9362e84213d5b79b6d81574e0325ec760e133940 GIT binary patch literal 559 zcmV+~0?_@5P)Kl)G~4AP|Pl8+d2XC6B|*>hzvr)u(`-N;##fpfc5Q z-Zl#oHi{5M+LJA%kN>h*zFdCiCnMl;0l1z6y$A4qt|;{Xrs=*^G(Hs{KWI{$fETVk^qzWyb0+tBj2(&u@k2Pi5K`0qAe*5}F zEVx}10|@R`a^Rl|I|QJcc9$U@5wr>sP)&QF&q~4uG+78SKi-ccL3G#w{hV&v7|sY0 zkl7}BN$LC;GD>#H0pXj0w(}-rR1vu5fF@c4P%Oa?A6bijX-H9;bqjxI_1xu)^ z*x_wfe%?gH6aZ3?1NT|E-d}SdA!`IbW50ZUM4+48KnZEK2wn!veFunc0Kl)_0^rt| xfi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H)=5M`R5*>*k}(d#FbqX|f)sNAteQQMSlGA}7p}|hG(JE>P#c=G z3t|Fqe)@?c=QYi5myx~(LwBlyy0Pk8%Nua)YM?P<6(AxgBkkitu>^X(3zTQ3>z!O! zBQ2e8!eNc5O_z4Ty+KeqQs*h3F+PBj!xdN;17K7q3-Rhxt4h!>5fn%X$9V qFJa`6$BxMlk5loo{dfY@kck63m?Cum0000N=Xi2-93-xLBG#^MsPkqwNpTIeFeux*UX>BNj} zuVT@dxfPl>jMNeaR$&OsT22L2cO6O~q@-M{?6!#k6_8f`k_c4X8rg&)kdEIZ5jiM8 z94LVhdbFL;rQ&wTmh+Sjfk-o9S=wRCS!ci+c{SA}=eh)15RLXIt)cBCpn-4GF`)!n zY=)z&fLv*ls<%Vxn2lK?s?GuVPQx3X-i98mgzY14li5yV=Vz2BDqK@nQ4ygL541jf zJj;`=Wx=CEJ^^_D`%|9O4Fh2|NE$#VpmXrAnu8f=3kJ~O0J+d^cwb?Q?ghZLpl?<6 z_6bo<^BmyTEWjm$BLI9qfHe`~4kgXQV?oqS(+q;XigfOWKHHgRKrvv^SBk@{z@WA3 z1Sg~yjDs6tuG@BcdGd0c?{jyOzPTIGchVgLTn8wz*BagMj>iCB0EkGE7ebU);36WF zJi#OuLUCTwtb`peg^W$%2$F0uz)$^0m92OS{w*hQ>PN*Oio(<$aE`h3>~&nnzZPP@ z00SwD^M7F=Pcnck12J&6qKt%qnhj(q418xqmzr6j1|lFzRAEF@V4AnA)G=moS*H%e zf9xhed8thu2I)#NkSn;ga{(y^i2yZ_*kLMmKLKEZ5erDE^Lly^CKyiaFpH#VCUlmZyDG3i%#tN|RLgqr=!? zbfo)JdN3f>`)48e1rVCzPy54wcs~w8($WkA<0QcV;PbB#zW$bFBpJ#CNcIcZlT_~< zTn4xnid(DhpB<9c7~s~dusa-qBtZIaicndJT+Jvl002ovPDHLkV1kGt!7=~< literal 0 HcmV?d00001 diff --git a/graphics/pokemon/duskull/back_gba.png b/graphics/pokemon/duskull/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..52a5c867d944a1e1acb1655ad745973c3748b339 GIT binary patch literal 537 zcmV+!0_OdRP)K)4fi^Fc1guq+;uW8!1b=i&R45B?1ylmb7ypiaR%D>-ohEE-knDe>V1?+=s&GV%#h@sTl20Y@7=2PvAQ5X0jZ9(g~YT76XEUbXw zYp(7!)i!_zic9@q1z=QFLWEsltuQ1|@;!tGeDIFKg#`jyQb=sBN;IIhK^(|{9uZ0oneEP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hq)9|UR5*>@lEDqbAP@wpz~~wX5-9*B6p+%=DoO!|5B^;62M#_~ z6o2gf?Pxjnu}Ym@JbPFNufdD~f-#{J0n01w9hiq8*+0qT{z_->>lI@^@R9J=WmpyM9Nf^gxiBg<&5*`o;n-_bB#wZ0c(>PT=!xrmn zuAwll(}Xq-&HAKRLeWVKQjpTcT!ciVYvL3~d*&-_9EwPZi#1>=O6AQnvu`sC#EO)X zM=n_Yzn$l0#Xf%{w2q&T-~YPo{t_-xfY;2zy)ofZY)r~y&u`jvGmfE`gWrM#l7P_vE0 zoHcMP0A5>U5y%gH;FQ-ubg%0&Jz>vn4%FX1$eIQK4(P{j&_J3#d}#|H|MtPZ06>ke zMVGoiHoE`PW>_3>J~T7Aa11`6K@ql{Ki~iv31Gm_s09Ge(XsQ8BY#dthM5y%2%8W9 z^zkPE@HjIV`$e<}nW8Yq-e!B$sDB03nc$#=5I|{+7%ObMS<}SM#PA*#kslQ*GuAfn zp=lI9%nVD%yHKJG@L82G+@C34I=oHYol6;b75i=b8fQ#n`_{ogw21D`qzuqV+n!BK zBV*VT=bOb7=(5fm*)D#7B!+!^%@2qJDE){OFD;CnZRgrLh5|_JSE$X2{>?h(Gn`md zpDR6zND@-sKP^oh_cJ7@y3;s-Qt);4_NFwuf%B`2I?_`5yj&&KWNNt%Nv3mAyt_i@ z$ecgo8e$2#O7cjyVaqg-n^2HcAQX&U=!l~sVhb>cuxzTAxi@Una+Uv?;^ zQx!PrNS77XiUDN>&=`Xw9;pChk$gw65cr46QlNWw?E42epnC>O zQ3A9Seb{%}zJK_Qbq5XPWwg|*;=u!8L`BE1**2ch@G?o|L9 z_=g-XZyU zyRoLMr5o8laM_9jk$=FtU!%Nwkrw%fl(iI){lhW<&Eoz60ObXci2Q@6XCo& z4sc`3SMd)bgW?a67WoIEw}@IJ0J47&KC?jJr18k1#9I(a)S1)1F?I#i01tNw#n$2xvVdK(lKtrKoA8`&k4d>N+JP8a2nbu4cEvKC}M7aYl=u? z3ZziQH;Ax>l$J$`Xw67m15vCX7a+3(CN`09nG_z$js5n|?5-WBs;d59sgm#TSi1~d z@1YFbUyK0H^IB!#VuS^qLH@;=b{Qb%w%Yh8f-mlXh^J+sb?qFq8JwEHB>n|Dn2V^> ztN=hp$VD_s7lydXKo-%Ye_*s1*;?A4#r?~Ct#t1AW#hkv-#o&49z+mvw+2I5cK`7W}qkA3>cns z9Y)*)_`C1>b=!bwD|caseCG!vZX)X~m?uQ5<4JM8?SWzR3OxzvrbKBX0S>r)P`rsD zr$o_BUjm+p*QdL~b+=rUeOmA~==FR7X|md7m(}8Po(e#G>DvJRS?%{F|9Vwb{ZV}b X&3(Frv~F<600000NkvXXu0mjfVffNh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/dustox/icon_gba.png b/graphics/pokemon/dustox/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0d140017fd23b4355e9a1b38f10ebab2fc158d GIT binary patch literal 428 zcmV;d0aN~oP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IDoI2^R5*>@lD%$&Fc5%w0{l|Uuy7-9QOR38#&5w4OP|K0Lk23O zN--H~IYgpY<3GaOslDm$)7d__FU$U1kb6qe)z2Ncbm?9|OOW*QetPL2=cQ}iY1c;H zIe#jf5-c{5&n@Rmdnc&DgW|zCn`{X?I4jCPO5s2@8vfQztP#!NMzVl@_7l}of}bU? zDC^xFb?FD087d~V6cOYG={kJdN3H=3l;XO6)DdL2t>ZElW&E04A+B;PV}lKKQZ0H0000l?uP1N)wEF=$2HdqT${rFtIpT)JH;gf=8M30> z;v4{`0c4Xl9Egl-04w(+t|C`Ini2uRG}r@HL08Y}Sb|iwsB7q86){1UQj;(eaSR0@ z?<0fMC5dXf+8U#nkOrGlkdPKM-WDYZb8H=?tSF_cbwomZsWmA8pji@fg5@nHA_c%! zp?Sl~#23i>tikg}zy+Z+ddb#!9)KzYfUpFe5L)mmpe!m`vcLgTNE)-uXUPozcIv0A zR2>+$n_b`?cGoOx;MCo@H#jhMYE>X{U3AKt-`W?FF>$W}q`Vt{d|wiG?z-rZCb3*+ zHgR3|(;Qs{OfetN90h3h!7#+r%$Yz7-CxLv{W^1;$>RN12hhizmEV@r>ut<0bs8fdRuk?sLLf|nYP5pvBwJVw7`S&a1Mab0oLY{ z6UKNq1a`C6S)MSy2P$NgfcrE!00pw`CiknF^L7Sn{fP7^lds@7ZEY*U05b_=o|6zB zWr+fUq#<02@HbnK2my>hNsyG8XQ2uNK-o$V&qoQ_Vt|>q5>)513_J{g9<2m5vYiww z(MgcViRO)%Bxxl`=+0ifcN~trD?{l)=Qw_Yj|f26I*u6*$hL zavW4)409*xrc)GDVc_F>mu5`^5`-IyVccFb_E{(i(g1fLL2IcbNFx}QyO*H3=57Xs z=_F{O0g8jdEYmGofUdrG3M12419(bdysZYPR%=5k44^66LoO2o6vl%+WlIkM%o|TB hjCv%Ry*@@?`~eMW>FTl!<0$|D002ovPDHLkV1oXylFk4C literal 0 HcmV?d00001 diff --git a/graphics/pokemon/eevee/back_gba.png b/graphics/pokemon/eevee/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..79bd1129c6aac100c0e9f5240487025fac940d31 GIT binary patch literal 641 zcmV-{0)G98P)K)4gunFc1J>E?xvg4?)9|(?x721)b8RQ;k0~2T*{TcNHk^ z0oDMG68~*2P`n35+4B)#iuPyY;=La4`E~YuEp9)DfIV1aOsgv_WCkiw4QuPQ%To?iAYjU(c)|Cz z8LGgn$sh64!$$RDs6vdH=|pm!YyZ-BtHAD-pur*-Nfmr7SJW%yMbfhq|++F|fE b{%`yR^!&s4fHvE400000NkvXXu0mjf`t2vR literal 0 HcmV?d00001 diff --git a/graphics/pokemon/eevee/icon_gba.png b/graphics/pokemon/eevee/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..13b90c2e2d1a7e27b535f7cb429a88c65507e956 GIT binary patch literal 296 zcmV+@0oVSCP)DV$+&JQB#aro_a`9TzWC;#Es9VC|>?ZtHI-6Al1Z6_u%O?Bm#cfrtCg>6{9aH{QaS uAcru0K6(ga;ETd&D@@gB7pAWFi61Z5P*z)R0000^gDW*z5_Zw)N*U-ZlWzFX19-oPpMmu0rdJgA%X zeP46adHn}_*>`MedTsvjsJP2Q=6#3WIz{Z@Vi)-A&(TxR*sHrLI`bX^udrpwC>EBQrm#FY#XEsSvhd zhokmy1+6*3?BN31t4g{j)(0ND_BvCpcag*0=RxZ)O_0>c88xo(SA#Q pqWz9_SN<;e{m`JqUZehixUNj;hlq#9VnF{gc)I$ztaD0e0stRLkE{Ry literal 0 HcmV?d00001 diff --git a/graphics/pokemon/egg/icon_gba.png b/graphics/pokemon/egg/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8f6ca5dde3b929e97a723a19e0c15012385f0548 GIT binary patch literal 310 zcmV-60m=S}P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hv`IukR5*?8(lH9cKokVfoFIFclxepS#3ueqZ>H!WB!x`CCS3-- zf~^pi6s9tTYnA`g1+2vB{#&M4m?ZhVxNdUq&Q^v~elyS)`NcG(K-C$5g#l7-j|yH9 z);9xy*DwewYG|b*uL@Gq^R8h}ztE5b*1`TROzwYXXZB#6WVxBcQ!+r$q2BYbq;MW!C9)j_QgD}I-@;Cw zz(&?a>0)GwgbENZ;R0nBU2J!0GLD;VR`|{=RU8dI0}|3E^31*YpKC+F_l_wOMLrE9 zouALg{W^aDvNFAcQa<2OYOR3kPz_Ux#fckcFX?@|tse<_ZxQzr0|e z=>`Te)|1#2;mVOq8Q<(SWv8HsU?O962!MA-+sjvxbSK4Es;{|z` zO)X$eh(4hU>UjAmj6+wV9BsB!&zCqH*{==&B{Y6aync?Y%ZGM|V7*#v^b%jj2&H1X z+Y*3QkGi8lEJ?+GSisGCwchF_s31})rQ^j-U%T9>HrmwHoIofwUMwQ`jj#*}5fV)M znk--q%|(f#2^MtflMS33fCwu}9XEgzM`{8fiB$n0IY2~R{H4|+aP>=lcCx8WYxA9np#f1QmWz5yW5ImM|4x7aQkLBMPD9XW) z7mw}25ZQ1tAKVW@l#Y*&@4mH^7En6a-TmSIF`o*&-^T88l#ceAM@Qe^0e+?OvilGS zK0IqangvYc4|1qC&4pQU3Ibzl9wHc60>ZECY|9wW^n26Rz|sePW%D@zGC6{gwC34I zUzK@`(1bOP*0#XdDVK8w2t{CT?W1u!%YYEqI2_V`WmRM{@KECn_MQZ})M5r8gFX1s zhBlMi05Wv|YN^7TX2z%|3vn8^(N9jQD&6TyA_v)K9v| zpc#l4av1$U0%JF0jgnfD42z6~;7yMuc1ERtT0n@UO8MA8c6O!{d@K|Z)G(McrU^~00000NkvXXu0mjfzU1bv literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ekans/back_gba.png b/graphics/pokemon/ekans/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e72a7a9edd89da64379cd7a14a90148201f969d5 GIT binary patch literal 616 zcmV-u0+;=XP)Klsj(1KoEvqvO>zrO(NPHAva3nh!Ys(DxD*mq;Wt= z?tqjc#l~;}BWje4Ie^2GHsZ0FS=+*oHIY&?1sKhzfBtzG%R0rs<4jDB=eH4Tj_0G< zF=7`H0OO`S2LxdB5;qFKX9SB*w@HEnMR5KWP8)!)83E4QboJfP0x2v!4`68mw$uQ| zQwU&^;E@){!eDb(%o_l{c*&Eo5J_F&C+Oycur_r8_TV`El=x7l7FxD*!V>2B7l{qu#)>#9m5iXp%kSn1&?X zp30;g3~0D#=A-*nx(34%&;q&V*&^4% zP@#{XXPBjfP^wmjU3>I}Ch(+GEM=8o?ts49fG@=yi%41Vp*>>YsYY9zMs3pCBL+u; z4!bJB?0)vd!=<*N$`Z`>@<%?!DhfL(tvmCWS6QNqSQTHJ+@p?mNH*iLiDB_qdka;7 zb-f}G)d9N*ywh1oS@aOty#t>Kl-hiB4*-7$EwCvA{(bhi3H8RSlg!)XBAP2Lur334 zB9o^-7=`)jz5{oh=C%I5DuDNL;~nyHT|byp{29N*PLl1iz{KGI0000DV$@lEDgtFbszK1o5>y2JTu}(feK@GS6brSLjg@oJXZ) zU3ZzOmz_4)a?8ixB+yTYUn@VyeL`JC5=Yc=u$DwL^9M~CgOY09RD6f6HFA(#EXIJ) zasa~nC@~lz7CddB4`7vS?U2JQQ+GB)POdJb*?>kzZJ%zDvC=dl17QRqUfE@EXks9G ziD)>0UQQw^*!BNZ-w?*)UKsyI7_$=w@{l<)VIU2ktK{YfsA+VWTFi?K=StTF^8=oK fw0l3A5Bl){Utyzc`sWND00000NkvXXu0mjfE7FZ; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ekans/normal_gba.pal b/graphics/pokemon/ekans/normal_gba.pal new file mode 100644 index 0000000000..55289888c9 --- /dev/null +++ b/graphics/pokemon/ekans/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 189 +255 255 255 +246 115 74 +197 65 24 +156 16 0 +255 0 255 +255 230 156 +255 213 106 +230 172 90 +131 82 16 +255 0 255 +16 16 16 +222 164 197 +189 115 164 +156 74 131 +106 32 90 diff --git a/graphics/pokemon/ekans/shiny_gba.pal b/graphics/pokemon/ekans/shiny_gba.pal new file mode 100644 index 0000000000..5298644301 --- /dev/null +++ b/graphics/pokemon/ekans/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 189 +255 255 255 +246 115 74 +197 65 24 +156 16 0 +255 0 255 +255 230 156 +255 213 106 +230 172 90 +131 82 16 +255 0 255 +16 16 16 +213 197 98 +172 156 57 +131 115 16 +90 74 0 diff --git a/graphics/pokemon/electabuzz/anim_front_gba.png b/graphics/pokemon/electabuzz/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7edefd60597592217035a88812b23114601ef2ee GIT binary patch literal 1548 zcmV+n2J`ueP)@00001 zbW%=J06^y0W&i*Mib+I4R9J=OS3PgsMi5=VthKP?(t)5vePZa!6ihTt;3M~MsSDCY zzlAh}0M~gb7G@LRmQ2A;y5(8k#yFCj8Q$@@OF1%vGy$>@1WEI5zIJxr6J!6e!^3|I zXukxwe-fbCN%|z;Hb&kVqLzK}8l zY1fvu1X#`MXfLEPLblbGb%c0SX!|~@U@2vXfC?Ren1y)zJ~DuxR87bc08q^UH@6E| z=B-q!3N1QleSp17TLAgtRi+RD9e!7CBTn8Wzn|92{P`=gsJc@{rra#C^8DpWn&)4W zT{m0-cmRg!8=1Ydo53D(15p89j`uQC`=e|8C_3=#1R*QcVR~^{3&WU+3eho=zA3BRi zTfI3Z>*R0=Z6V031$0mu0MYbLAA*aeESLqbu*7Q19;1hWTf_p&n)O`;aF4gu=%D~U z&24}kFsxTK4Mc{K20*WmK{_1PobeLxGshk(O%?Jf&69PKq;kuP#S+ttu!3>`lw%{f zOp;rq0Amb(n{BErG>g4GQs~DAg(ceN9t^5tbB1P$LXX0LD#7FK%^kFmwtacCLd!Ym9(t z7SIo)0FNG*LhmiU;ArS1!>RKDO^1Ujvm#PM1Z=er2+CeX*k?Fg76SYfAgXBEis7z+ zHl6mj&{0_ua8HxJ9hJ zsm6obZJ!i2a#KM3$N^qNHGC!j9f4SB5c}Uo1;X!=GF41%jt5kef%q$7O~~ z*HIvJTg1)b2tWeR!cicU7?Jy!<;MlSd~r}987UCjHwunYi!VUU6bNNGaW_w8Ia44^ zxZKSXS3mfezU$1t^xtHS1xzQ7Z6VhM2jB%ltA2lU}s(c{&iF! zW)Kkjg>_)(0QYx83gns;NKAPYgJERn9TI@H>eKaaSHBlduIZJ4cy|`*-T(C;$9Ch7Z_BfFBxY7!>^J6Gl4-xc-%V|7_5WX z1Iz_RfDg{K&jm&>=iZaX6BuOoxi_jDfnhE2yyqYwb#N3IW{?4%gVq%oHF0<2Ibh2b zlm~&)Yv>BycqL++TBV1;q%a~?*qI%#_O{vX1%|<~d$jF&YvR4SLV*!0cm%*UX8Xs6 zjSLEy|Lb{y_DTE&YMobJ4$q$3PEDGlSGX`M*GF*q`a3;^jY->AU%4)V7j9ZYH)mb* yji)fYtOIDy`ubs(r+45d2!p2p>}l&iI)4Ea;v38lu3tw00000@00001 zbW%=J06^y0W&i*I;Ymb6R7i>KlrhuWAPj~XGKU{i=3efsHTEBOu8YSAe}l&&d{>VJ zDj@lcG2hU+)sW--K1ia#xew!OWvSKDU7P*eN#=iyDAvXd?qh`dJ zZ|&UW3bZhAcz-V5Fn&==LH`2oSl*aBYRgC7b=d;-0Q`zeKofXG;0y^^79M=rNY7h5 z>X;$TlDN?PtpGp)I9xbEZX$3Wn^HRvw^|*&5BWU&0$ulgPjOK|medYdUaI2eU!pM| x$JA#)g}5v(CVz)t@ESDhux{+8etrLR`~fd0C55TQ$;AKw002ovPDHLkV1hwH5y1ce literal 0 HcmV?d00001 diff --git a/graphics/pokemon/electabuzz/icon_gba.png b/graphics/pokemon/electabuzz/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4c9babe2a98cf3bb79bd76b979f57245bbe8e9cf GIT binary patch literal 321 zcmV-H0lxl;P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hzez+vR5*?0k}(njF$hKD39^*gOE?~t5*udA(CpPRV+9SyQ4_Sa z(UFeFCotis^xNSnTe25GEt^M?vx_$4Dbal=)(KREhV)D)qBraBzL!na~pHl4WSl6c%FAfASg5q)4kBs0`c58f4rUl1Aklr>aUWR Tje#R*00000NkvXXu0mjfprwY0 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/electabuzz/normal_gba.pal b/graphics/pokemon/electabuzz/normal_gba.pal new file mode 100644 index 0000000000..1a18eb70d8 --- /dev/null +++ b/graphics/pokemon/electabuzz/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +222 222 222 +115 115 115 +16 16 16 +255 0 255 +255 0 255 +255 172 123 +255 82 32 +189 49 8 +255 0 255 +255 255 213 +255 230 156 +255 213 106 +230 164 82 +164 82 0 diff --git a/graphics/pokemon/electabuzz/shiny_gba.pal b/graphics/pokemon/electabuzz/shiny_gba.pal new file mode 100644 index 0000000000..df9fa23e84 --- /dev/null +++ b/graphics/pokemon/electabuzz/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +222 222 222 +115 115 115 +16 16 16 +255 0 255 +255 0 255 +255 172 123 +255 82 32 +189 49 8 +255 0 255 +255 230 148 +255 205 41 +238 131 0 +205 98 0 +164 41 0 diff --git a/graphics/pokemon/electrike/anim_front_gba.png b/graphics/pokemon/electrike/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..396dd670bf912c579fe4646c3ffedf7ecdc2b4ba GIT binary patch literal 809 zcmV+^1J?YBP)iBe2ysRS2nJt&rNR zY^+`B*pZ)wI=`RLK0jdS=3YB_6g!laC1(J^IllMCSIRjEb?9(M^m3x{`Z`U?kZZ6! zg`c*nNB9dEr5y1=Gd`NbD&o;AOp^V%OP>u@H3LigML(&%`Znts82IV zHGrNff${C{HuaGAR5|f38tm(45zw z4?@|8)uK)y1I=%I4~3TNIdwi+YJOcYFDOL20Q*`gewBcA2IHw&fWaLk5CR}RBuX2M z4O_u{0rwZ{c(Kygm7T1NQ-&&`K)zUobVb)xTk8A}KlCe(1Fcd}IR_fZAgb~!Z3N!9AWke;;j4I*ofCwWS zd@chY(4c-mcy?^ZX;T)~+`*M{Pv5(~2_b_9{YL4t#nm$*GXywjeHj0Ze|0>Zb2>UErGTGm@7|T)ze`F_4 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H-bqA3R5*?8(xDE*Fc1ddKEe7%7!HG2O;0efy%f_J5S!V{U`Zx6 z0phlV)lBRdg7!d=ATWe;_viX2O+KZ5bM$L4_F`e~p8`f}^w5hP4Kw&aBW5mfWFCP- zbXbg;2?zF&R2J9=tMpP15IQDYUbfK0J{aR`3o-c%UCbo|bdL%Z<(rcc4NB4JI1$w1 zCq$}EU%ndE>OY^(doY^$DbNmq1(Nj&cR`r!GAU?{r3+7-MJg)@K6Gmr y1vEn8zFXKh_)ud$JC#1pv*Stnh=}U1`nUmF4|o?3W)VRE0000b^xQ6#P$wAEeRd~_E-ymKcDw^#LVpm1i=e4 zz|;h<_YI82zkQex>N^1NSUn#nggsynevVly0zfm}1zrI|3n7uBS`SY4-I&n zWosM~N@eHyFCF-lWhWBcTnJefMWF-MmkbEbc`jvG=J}cKTUQ@1Gw`L1y*W(KZ-guP z*%np=EOHKr6F>#O4g>gGMb1-ET=aeGit`HpxRF!#Ujg+5FF@cLK9kr0uU+H z{xJRExYOlOe{hzrGaKj+Y&MA|vw{A=eE39vs6Y4*^#`^KQ1yTvN|joe-4x(SNF^>X zR1yl1mmHO2BAm;lS1{hyxymt?s#2Wm1!J3?Dqt-oO9CSIwpmt*&k)N{b>e`?ty_rh z(;KX7jvc=wfPKvNH3lmHCEXw3hDrgYu|Ht+x(AS~hW@}+JrJsZ5d9(R-bv8?L8;DO vLx1Q1Q-5eTnEL~7^WWGX8jby7)F0D5N#2>f0rb6j00000NkvXXu0mjfR) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/electrode/back_gba.png b/graphics/pokemon/electrode/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..74ca458d39eace70176f9f2c4508b64ce51e060a GIT binary patch literal 477 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*C~6S{r~^}-Me>Z&z@Z} zXHHa5(0_*i2()F+|7x#ijtpB28JYz^;EvSW9-v;vk|4ie28U-i(tzw}PZ!4!kIuJ~ z_vSSlh`32!675u*xq4T1+YH;p6B3#pXT5jjH+cSLn6WU(-Ffm>j$7_8zVaXJEBqF= zQ~CbIkLA292Xp_u&iQ7LonP}^rgP@o+DfJ3o{woJ^OqRSXKHYl)#`tz81J@wB6EnG zB7;EH2kr~PaY`b8D_FTIN<>!nnLg0i;^4BWdGU+zn64P6;OL1wls^*r~PA zsIimxgz+=w=?RS2kgrKl#QUYwk9J6`? z7;fA=(Di7G8KYC2#@XD%=U64odDR5cS~w0EJUO;ng5mOqOs0e46Lo(J9V*z;;KsO@ ziD&8G(00iwGS?WIYne1OWW5T`ojN_=SmeM?my>#|+nS2q3uf;(*#Gy5dYz&}2q@YZ NJYD@<);T3K0RXFG%4q-q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/electrode/icon_gba.png b/graphics/pokemon/electrode/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e46c57974f17871f4f8e70ddbf137e2c69fe3d7d GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QU(D&A+AYtnwy)8_wL>M|NsBJ zOB}y_)4ZDG_-%@2clG}yue0xp=ltKYWXaM0S!?DbB}F+pI!3OXkOI`pSQ6wH%;50s zMjDV)?CIhdV$u8bq9Ip<0T1hidke}tE`%DepNN%_vE7y|Sllq<)diIYIxp`3TfC)p z{-y6qLRO1f-nB{xyq8@6=KKNko_BuR3Je4vr7V_0&tE%T=?s5wlYN8 z_W>IaqI-%Id4eQ;Qur|hgB1(Ef?!eQQ3gbpTrwb88PaCQJ(5CLIMJ` z0IW57`4xC+0_n-SP94Caqx99O1~A_QmQ3#LBaR73u*ch0U>xzBJ|__;K$t+9a~>`| z#(SLe4wx~dz_sCo|L{HM0X#K;O8_7s%gBI;p>F{5Gl0R8g%1O6jri zAmXq7jx9iAF6F{w0JI1M2#qM4F~HFK4*HM&qG-UZnC2%G3vUJR=J!8zyoHw+x82OA za#5rJKmGQr1~A8Raf@h5DRKhf^)KWB5e`eZO=MW8jDWYP28vY~m*vH`fUlO`bqtkI zF8s24-urQPwb#?jC*|d1NlW(6${r7P0VXx@L`ur~JnNF(L#1xJUVDAQ)k!fG-qxfv>Nk-<$h5o)7XE-(hw#Er1otEtRIg0nY^YnR> z7fM}g=L(0mdqUCQiwf|R^&X)Gc*Qz*-!W6AL$wtCR?X>bsn_BLBmvBJytm3_wseJ8 z$yU+dit*rIftp)XYh4pxCBG)Vd)@2*s_I_o|k0)6L{5($D=Dg377n8LH`rQ$5vjw>7 zJP=r*D3X3JeVE#SlS~}MoJakA7^OzK8(qlp#e1%S5oG3mG`eSqhi3%vbV9F6x$A>< zOGMRckp=o6@oE?FXVS3aDhX0x(hHxK>9X)q~G@owJ{RqWkY~Ih(D=85SW|u^xDE!p`&a!UjTFg z@fX1H?D?~;hkn)$s2O<#Yk0rXtcD21=mO_t|NOZ$JL{CGnFW>Po^YJ2q( zv$)r>0|~DhUIGHUi6p2jtkKdrS6bbaitp@$e5I;CS#7TFbvOM3@w=h_<`G0i00000 LNkvXXu0mjfg0t$u literal 0 HcmV?d00001 diff --git a/graphics/pokemon/elekid/back_gba.png b/graphics/pokemon/elekid/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8d9428abaadc973389f7de2613b5943972ece8 GIT binary patch literal 660 zcmV;F0&D$=P)Kl)-M|Fc5}wAV-=9;AYeFN*VWz6voG0qd-n8k!RkO zIFd?jbHp1}aBRIZ2_!b5yuj{UkTswG`Dex}U71#CjVpg9qM9gu=T9Rd;!tQeq+JMy5=jDe>!kg&rmKrKpSsMU{103fF@FWrByqO*j3=9jM+NxT}B|s*ZX$mH>tgsmdkH$j!ZHGzb5CZtob};~J zwG;vH$z9YwunvKIA9NW_RDK2UlkMnI8LT=HAnjDUw)O4gvf4))js z*5)M9X007t;4i0-4UR34OMS_bhj9g}@un!aMSaTx*Ql4v&Y>NT>1?x$8gB|*Y}UM~ u+dyRB+BLiKD zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H#Ysd#R5*>*lCciLAQVOU0{9E*t~^1P-2%W9l^u zVg{N6z!L`%sGX#^ZmjA01j?sQMw)rURw=j!g#`D!6AIlCD77Rfn!)ldOaFp8ZS)&2cOJ Znm6}Yxi4gJK|3IRO8ADds5voB#m-=9K@<0M(QL)z#IktgK>UVh|7zb=_Z300001 zbW%=J06^y0W&i*NY)M2xR9J=G);nz5Mi>Wh0#Seffu-IMv;!prq&#>sV3I?ZDzL~w z1rpkNOtB$!Xqu^8YcEA%1cd zb^Y#+Px&#o?G*Xl{J)@Uz-u4IzZv@Z-ph1U_vxo39pst<|=_P@sU=K}gKdrTEKu zQhCrE!SHsCC^^)^*ha0k*bxS}~@_+Cyi|v z_Z`0%HT36~k6yzn^NOjT+iu5ATMlYled}0A4q4#v;V0wH+pqJAUN#|sEZa@D9o#-j zy0l1b_wfDNxRaxSi9ST_%m7v~81~y4m+fP3SA6%~xVK93ifZcj)7U+SZOp{Jh0u@% zcErDO)3a4sp#eATh%?%#b{9jh2o0R>me*F6BncAw#I;>TETjl;^$khVBnWtmsObEt29Gra zlrM8>OlYSxh~0Y zo%RWye+Za7kXK4@-{>}O7Ar+rsX#HKs8vb^FMCsi^D5g$lAw-SHeeUYI~(F;TIOr) z6Wr;su#3cwd1kURggcnu!Adqb1HhjS8 zT%rr7mLHf}=gvrA0mlnKRR`NVAPjnTZ%AiLI<{l8t56lgsn^}4cYnM)#jc)@Z0Ecu zTz#a1=zsS3KOx8V4HFSa3^~X%OjICo;D8;K!jv&9TU1ri!2h8)ZclS#u{6&fanoTxxN!^Dvj6^Lh;7;;Ed zAlxu<J@tey`v2kWd0hM6Y{7-k8G5*lU>7}PLJoG4(JKp^3}MGYeXLAYT8frKAjY8V(7 z@A!t{0ttaZ4FiPn3=;?>1O_$CCTgMgs!}N?ke~z@W+NahFv z0a1?Q0*L|R5`j=)TrZFaFfI`Y2gY>*VZiVO0>H@43q&YaD!yCu^jTULd|=G`;R;}c zez*V(wz7yHE(b=`4*@V-4h+_vh#!zEju0q&M9BWJXv QL;wH)07*qoM6N<$g8mvQ3jhEB literal 0 HcmV?d00001 diff --git a/graphics/pokemon/entei/back_gba.png b/graphics/pokemon/entei/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..902b4461a23a5a4756aa83eb39ababd46137d946 GIT binary patch literal 859 zcmV-h1ElgJK|3IRO8ADds5voB#m-=9K@<0M(QL)z#IktgK>UVh|7zb=_Z300001 zbW%=J06^y0W&i*J*-1n}R7i>Ck}*%)KorL<0b{9dU^A#X(;;hY4@^|}dFbS{@hwn^ zkI|8CbVG6{Po4S^x|Hb#wsVjNwp`puj9_I55<@Kaot<;+0Q~^%o8r9R{onup?hNBU zuFZFUX#yC=$&Z)&b{vHU`!#r}zY$aFFvebz*f^k;4L*&T8una2qP7D=+KT~T|Ea$t zN-e+vHjU$$zIoE8lo+vPzy+@NYa&444G>onFFbst)+Ur>;;XW8! z$7{f597UE(qbPQ5^vaGe*MNh#M{O4s;%`G6z`y*t7BY&|7Wyi}(7~K1>jHS*UIH!( zg#KENBRp>d^Keb^cNBOC&ekTV^Gptv2`dD6JpJ5}*u?V=6Jls#j%W^W`t`gcaisd3 zkR7|<>(M!c!9`hiw#2|EyPRCvxJT-OAAIRpmVBg$v6mSTB_qrzpD@h6ASB}?L z0EBIeugJ1Ya|c3{a6*{3fm8#8b9UqPEoTmoZHrT~lK6B37zly0XC^2Kk%TpHzM8R3 zS_%kww&O$jJWwfko)^HNHKPrn!VNf1;QOyHbYC_hIOjyj4DT|4z|b)yN%j1yWL831 z`avtgRF4;eb0P1gl-B`kEorI)V3|oK2^r6WW|LD5C;=>4q-6IRf-McCra4^+h$Ksu z0D7Eh3!K*qwLnr3B>*jtrkU0YsDVW#&;mFgbu281nL`WMHqAY4;SL3od;G|6!EXR< zfs0Y4P(7}_d>@!(wKO5tfR_#$at3osu@S3o{z$AIo zuGXOUhzZNG7*DV(M)|F;*I?FfNhcJEl#{Z^<_%Dpt^^c-tH{ejd6^HEfG!oWP(LcK lNX)tb3M>IpbclbT{s8-rDV$@lD$sDFce1f1diMcjHu~O)ZC#WgZ&iD-P##-@YXy8 zlc%U1knoaM3X0S*KUh#D0~b>qlkfx;mY45X{(NN}&%5&FIbtwB> zGl&M#Nttyz2F8agFNWl>0Pb6G|Af7YL%PsEmr8(l#E|k?cmV`fyF}$Jz?&VWTh(#HV=NK00001 zbW%=J06^y0W&i*K)k#D_R9J=WmpzXgHxP!|7$6V0pJx}2+oVpnXSh*!TrQNT^K#b$ z+?`0~N&^zd*Sg6SDy1B@H*CPJ(gvR4u5?;1DR(Ih6Obrrp5@H&YhE$-v!$BQS})Gn zbqfGq=I!1}S+=msjSqG%thFvj2-~s7&bwU;votYh+%Ab!>s%DVZmGL;;~~T`vu5!A za5n}vhfiwR_m{9u1LXj)>g@dJMdLfB!c+ zC<-}vu;YEj+j|1cm6RbDrp6&K_9g&xDe-rWo6e3s;8Z^S3wI;X0GdANXaMo#LA(QuESve!66bCQ4K&7xYxQ%`>4R*;=q@C zJ?m5g;Nbh%xnAO)j29!!!@NI`bi~yZP?X|%U^eXKG{7+|6|xT(nVJOo2q>HbKFxyr zMGtUeXZUTh-rVEqCdb_1d(}*)n)_`qG1j3?>FHW@y{T`PyNUg0`=8qdp76J4?1C<+ zjm`tDH?_1bPc*A76H>dZ0Kl3SZV{6M@FKQGb~-A&r$dkvbhXI>{Vgu?Lk#MpI;T^p zU1asa&_p(fLoD9|Sep#u;!#5-0qgwnXEmGJ8+f#*fD$jUJn-aSiEDJS%uNJ5`_Sm=U6kT?9@FH)ou|gQs1m5M|`{^@Dl#>W3bxcmKLKs3?+>Jihws*^or}> zS$qo$eD;q|Xh-u^xtPW%dhh-k^@Sc{9AzmsK@zxCL639HwTX6Z+h7{rLEUFG)faeP zaGp_ZEryII`U0>Tx(17LT_yDemTo*OYYQto$cGpZR5D9kFYHtL0z*fO!NtPPC-emo zC9bxnnRYIrFNnZHtB=J$0kG1Zv{dO9r$Flbb2u33HA!Qb3=$6}qd;(5Z_uK2mlGJg z-8gUeo!lo>PyjTFUb~ZenG2#M1<~QZ91<8QKxve{GbFlQ8W5%;4PRo-R7rsMKrb+o ze{)nFmXYK^^F1ITFbG)D$Qk|c2xRob04%clfwF)KH)BpegfxND&*=wj(j1l`rypeg dpX86-z5x%P%^hQr#Z&+Q002ovPDHLkV1jgl2jTz# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/espeon/back_gba.png b/graphics/pokemon/espeon/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c3e5d96dedf16527adbd16d1702c095ac6d6b362 GIT binary patch literal 554 zcmV+_0@eMAP)h(#HV=NK00001 zbW%=J06^y0W&i*Is7XXYR7i>Klre6@FbqXK%0ut$QI!xNqgAK7M8^lHm=n|>T&+Tad+xc&_#tb;UZ3GG+woT^H zBD5JWLeQ&cg9vlxVM18F(jvwjs3%;ATI;RTCk_k6K z*C=yR(Z~c?N)X^hz^4p2v<>hrK-Z3azHkh%z>w=lO$h@e^EBh`ae)n^8D$^JpT z+){ih0M897pG+ch`n6Jyaz~wq)@sPK=nT>(3r#0K?JsQ s^52n30{z|;1VCexfLPc7kMkGj3vO4Mly1ADV$kgoNUSG5zk$HtFKPd|e#)isPgwThMxhy0|b9pny<;E88oUzuo3F>RE4JWwV zT5f5nsJDBzfHtyrdZo4FUX=bxd?QSNLzplqgaO*oA&i-vgaIT6E{vG$-#dgc+wAZb zA1>NSDt8IcQy_&mVCP@UXZ{i}rh3Yd-`9;?3(+F55qLksbjYLjzO?*oI$+ zDNz!DC`~Qq2yhBFJ|Glgp(1g|2f*XU&<7M1N<|T5O9F)caJ}*CfLKOR4Al=jfZqOd z?MA8fU4@uM2Ef%}54*=tr~dewHZ|fe0su4~DTdwS=kNXL2_mMt`GUZ@pe%&eKb#Di zkQ!(o_QbB}hk_o^F(fsn1@PKaxhRc2piQ%m%NibTQ?-kkpwo^BdD3^bj0C{_t5k`S z3Dj6{Onqa^D9**(R~hWz6A|fmD66h39RMP@BH-e^0{z=1rfVttD$JAtstj&|;CFZv zTwof8;h@Nn$Sb51f-eddLFG@LGO=eFK%uFSR8kK(7n&Fb%n}UDwRAeYUt9rH9gtKg zH&k_}nJS=xL<4AT0L6W+dw>c>k>zxJ1PW>RX=bDNe(iLNJ}i0CxRM!nWf#RaSGF4! zmsV;#m{w$R)kLc@d&Dg@sG=U3mDVdB2Zrqt^ZH0}!rJW1(+c*B3og&kK2@r>g71>| z<&r)TQ05v$pU7WPq#&UtNqOXpA^1et+XKE`mK{(mXY~OJ1U2?1gG8sR5=4+2UL9A&6jr;SR-|xQZ8l| zpsa$|7C4g`^5Axp&3W^sL|goIjae=2WOE-i-xxb;XS7??_G(Z}CM0JTnK;=$=ZL&- zLoh@b_Bgkj*YnS)=`+gbAL28~`%_Q(rfK8E3f-7q*2|&`IMVCkn&*g<1l`t2|Imo{ z#N3{n`#&-HIf%Ext!y3y@)sk&Ll5Ue(B2LDJ=*$&Huu*64j+w#)bg>cW|VI41Uve<*Ppy)?oZe8ViX781+ZTU;z0C`(}3PkB-40IdB@=s=sG2 zoWAzzZwQFaFoyEqsK0A4LL>jseWg+V z!ZjF1{z3n238VfD&|oVDTKR{rnj{A#**PR-L}yj0G%DvR@0|3-7>wk=2II(pnd0sn zG!wF@tifQQ$cOSj({~y>gTb~JhVoBK7AI^C#uM^SDhJu^3LAs*g#42O`I}5CHU?uX z|Lj2G-e8R7zjGj)Q`p=WU;aA>VyDEHf6sx8_EI_9Efrqh!2b%$Z$R7K!(7J1NrakUzNmyu#CrtBLDyZ07*qoM6N<$g0GfO@&Et; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/exeggcute/back_gba.png b/graphics/pokemon/exeggcute/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e340cd0361a7ff67feff5d33b59b0717ec6b9eb3 GIT binary patch literal 597 zcmV-b0;>IqP)Kld*EbFbsyXWF^PYwL|Z^@+@>tg$l?(wp6n5^=0%v`ZO&}wn@$ykhg%!+c1mI9u*5d+klEdZ#$YOLgYLP=u zD63!$BDy^y6UQlRK+G)w`?p2s0cO@F32c@pVD~e9>2U4>uaHuOgJ>8KLQdCMxWKO+ zZ4Fhyz;1^%%FY2IJ2@^K_)L3s4?i?>RCArPKgy z8OTSbhb+sEBk+`r7OcoQ`tyuhSF+`N=lNwh0Av%5D=bWh2i;r&C>f|$w$Zz5m;ulh j_+&rsUwubC;}PNy+64X;pA+Va00000NkvXXu0mjfGe8Y? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/exeggcute/icon_gba.png b/graphics/pokemon/exeggcute/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5d0306610c87cba147d75e8518954363b53e56cc GIT binary patch literal 383 zcmV-_0f7FAP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H{YgYYR5*?8QZZ`9FbvHJ;`{s#KE3}6TyL^9}#8~se_=WRL+|Kz!cX8s6^%)9Dp0&fHSaf06c*qFxbsr4{T+25RMal z$e&!9?dQ31HgaE66d1A!0pupP#M z(Jvh41L#rR#P?)=)o#%^2$`@3NZmwuvB0S0+LvWuXuu8klr+mTJ@;pZrt!t~mcc7$ dBc=OQeE`}mxu3O_pTqzF002ovPDHLkV1gfutGfUI literal 0 HcmV?d00001 diff --git a/graphics/pokemon/exeggcute/normal_gba.pal b/graphics/pokemon/exeggcute/normal_gba.pal new file mode 100644 index 0000000000..04f5ede317 --- /dev/null +++ b/graphics/pokemon/exeggcute/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 205 +255 255 255 +222 222 222 +255 205 74 +230 156 0 +16 16 16 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 238 197 +255 213 172 +255 180 139 +230 106 82 +148 49 16 diff --git a/graphics/pokemon/exeggcute/shiny_gba.pal b/graphics/pokemon/exeggcute/shiny_gba.pal new file mode 100644 index 0000000000..4b18e5857f --- /dev/null +++ b/graphics/pokemon/exeggcute/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 205 +255 255 255 +222 222 222 +255 205 74 +230 156 0 +16 16 16 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 255 189 +255 255 98 +255 213 57 +255 172 16 +131 49 0 diff --git a/graphics/pokemon/exeggutor/anim_front_gba.png b/graphics/pokemon/exeggutor/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f4100b755d781e3f9800a0482a83964bf97f6c1b GIT binary patch literal 1637 zcmV-r2AcVaP)w5dZ)Gkv0?L00001 zbW%=J06^y0W&i*M<4Ht8R9J<@mQ9G;MihVt8fvhx!AZ|s7;ke7)LPn`X}#{LunPs* zw-!=%bc!1SmQUTYoP|AWWLWmN8i6rM4z>nz>?vvY()5yKMRw~gF&UE(dP=i>Bdu-y z+3Brwkc8*coA;h%eS^?q41%NLqa{OegOm3G;1bIOn7r5PF9#e*La|o?2MCSm(iD(F zdk8sH){^IZkOi2&(%pwE?l9I*N6L3iKW_ryQA*vcm5$88&>SGoOwKEud-6QAdPB=s z%&xVUxZh)pAIb_2pon4DOwL1r)Nv0{o*q!jDYg7O7a|^lTBdslb<*C5(tUo^wHc3w zQAX4>d)%={J*Z$}cHziki55-xvFF(%mqHNBG$j#h`UGyWJ?44Tg+(lC_l20m()deu z2LLA9WbTVptBWIQ!@TD@5K3hAQF+Oj$6k62<};=r3Rsi%T>#iav?b0Gcgy}m>3lMQ z!{AK4aj_L^!%e737OVmG^2XJgzxd*FEcwJS+OWMQb`qyiV6&$EM zZ(3B;A7G5t>WJNg^BnMOCgl5Oin>}WUBzXHA%PonK+fl>wO>~^N+lrFv#JEDbD$rr z(>+twjkVHR3D!_yzPvF9WX~LWu&Jt>)6%uGO1ZjOfmG&YJ`5A_YgpaBD1CbIrmO<1 zs?lDXr5K=cSS=%YbzJIN+k%^vyc7_$t0pR?l}6 zuRT)ws0Nvz%IseNK!|ZW4)_7Ey(Pr776Pp}fC6B>4$q>derW(e;z=M>!8N?TzNv0N z0fgv;v=YFT`WuXE0Wb~#JrUv~Ec?Gv-;@Dhg%p75@=-$vs(%Inh@M=d_yU)=;En%A z3jz>BM@d5d8**(;Yjj|Kr%i4r2|03lr$ZpdPE%_nlL*I-7LN8ZpdHRPwbeiaPN_O! z6pm3&&g&9O^%6Zth4(0D5WN#bF}_a%Cw}2Kzuj!_1c^3xv}B!6-xnU8ceEyHG#Z*V z*0f|2Palh09j&8{3B+g-t(gQ0e`pQTZWt}-v=|euodje7L~j@bzDF(SXfv5)PQ$pN z!(+USiY@4NstR-y&wUpMKGPc$`Y&4!*93af>GxV)`z%Mv;)+%gg5i6*9iryIJ4q%fXjV1w(NHLRrdr zEU>?4XIMJ~yg=@jw`_;uamSK!=NxgCwT=>%JImT0MCA^0%piu=-jIfJ2YP(;eSaZ$KUM$@Wob^l6?3^WCT6)s zrZeRp=@s-J?p!K&4gmtW+w4;AVE?Gx zA%JyP%AMIWx!;S)9S!N-xZJ5U^Fr=Q*Pg`X?zuQBcL4mj+`kQg>H_E|^Klx;&E#&hE9I;`M$QQ3-qgW?Uu11U z&OvA3tET=PI4}b!Y8_&LyY<%1Yygrp^c~sAAG3i@$IzjZyZ$c8%mIpM8XdWvEE<(^ zYAYoJv}b#;^Yl9rq|h{UKfD&_nJZ{|+S!ZoJ2Y|b){G(k7Oz$UC%<02d$MYU!n5h) jRRLfWpLJHw{~zODD6q^(`E?>E00000NkvXXu0mjfL=PQ; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/exeggutor/back_gba.png b/graphics/pokemon/exeggutor/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ff28c85550a802a4ab9ec9ef023ff012e299ea9e GIT binary patch literal 946 zcmV;j15NyiP)w5dZ)Gkv0?L00001 zbW%=J06^y0W&i*KFiAu~R7i=Qe98kotB7BBgf@4q=lZ?ZSPFkZcj(!5WO~I5WGFkj_CVlM%?pJiU4I-mHV*zpPOI zr4RY;zLL}3eNpTrm3hJ4x9EnKBmqYsfOew))^!&Uo&OmJ@+Bf#~xXI#b~n}0hERv8JvUQHA_@q(P|PC&_b5RC>klD+!#c2RIa3!dF|FB zicLgRDkpp>+Mw`KEJOfs*FtkP!YEYeju`Oc)dXcR-DUByots1IW&hyWET8H`XWN?IyEIB<6zG6=r=M$MNfW37~I$5f^g;a9)>+ zXV-Bn?gSOJLKla~vfG0KYG1$1WX%% zB7TR9U$Ns>tu@{h|tw2 z-hY48I#f$Q&;*Qv8LCW@O33eo*k%amyd&x#luF*c91&FH=Z7SDyEv zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H?ny*JR5*>@k|A!yFc3xO1ooxI*u=&;*A#eh4Qjptdx0Jz)CJap z38({R6SAHZu2j%|h4|(B%hLYvRD_^FhzV` zu_Dn&R-u+r*yjH literal 0 HcmV?d00001 diff --git a/graphics/pokemon/exeggutor/normal_gba.pal b/graphics/pokemon/exeggutor/normal_gba.pal new file mode 100644 index 0000000000..6c375af6dd --- /dev/null +++ b/graphics/pokemon/exeggutor/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 238 164 +255 222 106 +230 172 90 +164 106 32 +180 156 74 +139 115 65 +98 65 16 +189 255 115 +156 213 74 +115 172 49 +82 98 41 +222 222 222 +98 98 98 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/exeggutor/shiny_gba.pal b/graphics/pokemon/exeggutor/shiny_gba.pal new file mode 100644 index 0000000000..c06646a6c5 --- /dev/null +++ b/graphics/pokemon/exeggutor/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 238 164 +255 222 106 +230 172 90 +164 106 32 +222 189 82 +180 148 32 +106 82 0 +255 189 123 +222 148 82 +180 106 41 +115 41 0 +222 222 222 +98 98 98 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/exploud/anim_front_gba.png b/graphics/pokemon/exploud/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf38b83ec020c5400613339549bdec479432e31 GIT binary patch literal 2048 zcmV+b2>N{j#ATHdruoO2leb5hkxF`PLVYB3nq-v5Jxg8%>kWUJ-`00001 zbW%=J06^y0W&i*Oen~_@R9J<@mrsZr*BQVEvcd}~9(3qYHhGeKs%y~9#)l>-NN;M$ zQl^pSksNBjOBnf3@F8VKhk|@4@*E5zgdVh}H7)euSvRJI9(HALdMVgeSt{r$%r2tj z5YpI_)jaPyp?UqjH#1skD=qZW&S^F8H{W~jdw;&)YTAGCta_c(feqJ-P7UC?-VIIj zZ!T%}&$z9Pj&{qvzAS#%ZFxNmv#_5tE&$#}gw#S{)x8eidPlC?YA+d~58t+9!(B4h z75V~zpAlksi)XPynx^Mf2r=JXoQp=eQoQ^D0l;1~03QHST!R2b%Hf5S^I^K)ZmmfS z69N>i2zW0Usqbeq@H(VHj05b!iu|s7=(QolE!Xu^;C&muH3$M+{?Og+dHyH3Hd$8x zLgC|Lg(Q#bN&tFV7m}7HMQ?^9Qc9XHj$DY)24DkIn*g~m3`vcUDkB#|0KAAuW&KPHq&R-Y?tWGoqilX0tP=Q1V#+ZQj69C>#fgFy_ zV0?m00qsm`DUj}sCZrJ`k^qhkJw))EW=qeAMe#8bfKph@m>Gt})75kghsuA2`*AV` zKy4{Vd<^6qY6rhB>_4iJ%bsvBmeB~Su(By|?Y#Ut__*-JU;=sW0Z^}$Nm!*U1#;gO z;+-IPHW)m5-EARYz|s|~ECXy;cGfq8oxx!E!u8sMQe63>$bgkgZmYB2SHNzo?F$*F zKsrVMJh|S#6AT^>hljl*XgHVyYUHp(oqKn-5ZLv5kV#GmHS82vp_NOq?QExj6bV4A z40wf<>NJ`Hl%;^l(=pa?uWM64Ehi@>$Fx&`){Ai5a&I34f(eMgQeXxCq(9bj>&Yy3 z4FnEmx_AZGI0B%Lc^K~2ZH7RZnKsXcU}V5>IQ*t*b4GE8u^GUIF|2Rie-gkmv4vwJ zVDbzonic|qY6pPDF#mU=g`Pt>pO401TFA zIQ;7#qc&rcHCXZao6?z>v__0II90G6Vkv}}2XdTB8B=xWATfyXd4NiYDh0*U26Mz; zv+ZZ|6!#+6(>oeB?rb8pasHii`QukPoW)#-FZc4}!v6G)&Y;J4&d&h449A7z5-=`Y z%YQa5%*{jUGl?0WyOw|cZDDyC{&N3p{`uKcfag+!{^Zj3|KoG(biIK3-#Xn;Knymp zW-e*=Z-T+JqSX!e=92iR4{h{|#r$Rmlqq1Rx3k2{Q&I%hoH-oE14sp4_+m?&ou2YDTk|>l=(Mvs1MCVA0U7S!+~~~ znj%(PKaas+jGDR}fxqo}?c18t12yMv%R2yrsS;HcSAF+72#6mg)jv`>K)*0l5wT?K z{`Bb3n-+HjzJr27jMP6axHpat+W>T@fF|Ay3Hk*-;RT2weE&8M!ApUwVK^$0k}Vn} z99;mT6Yph)k^sK~;A%H{;YV z;Fi{FmnLu*rkm%tW~FGty;n;F1ulQ7UmaE9GED`gV#0t_!A=26Cyi0HJ_Q;kIt4g^ z0r4I~ibMZJrs}pbcceb!{w`B&D>9iu)UM${*!VJLh$QLP4nkx7T zkxZ_q0ABN%VKiwfLCm02AhysZ6~NXqOCrqS835_c05J8pQUJ<7y_W)LqmXS*vSXN( zf7?;OlK=s08uBiMXp3l3CIIesM1}fU~l z@#Z|h*-1e8$6YfSB%Hw6vYGqt`on$(2u|xJWpjZ3><2RdX6l3<=wQs){0sm%8Qfqe z{6Ysoc>;$s|M^|WA>+2>b3JH!e(x!2QvOq6g0!<3HDvD2{_5}LA*^=(Q`|*5I?@RM zZYT1+;V}HnQ7fpk6Lz3Ihr~jmtb(oR}1_>k91`> e$*=#hKl~e$x~K1gpe;E70000N{j#ATHdruoO2leb5hkxF`PLVYB3nq-v5Jxg8%>kWUJ-`00001 zbW%=J06^y0W&i*J#7RU!R7i=vmCtJ1KoG`#h`^`#5ehOs8@lq@5RGd?4+@P$DHIH$ ztbFsu&G_aVf})!qpohFdpQLY)wog!u|ChFGXLi@IWp9#8>0X31KY#P>%nuCddNf)CtfQ#$+NRVCV#R2L!Cxh||O^Vk8+zF?8m*#SvtPV~L}% z?E-2e0Cq_nv|JLkI>4Ip11)jxlDGiqk<$eM?i{lKA`5_UVa`L zRPqLX-W>rm-vB+O)&#t0mBLA7=38Jzz=RY^CS$+v`}KX`-QDNC_(}7PnE4_!DTWGf z;Pt0{;7rX$`yvRm1b1`^Q4;Oth*S^?5gG;9V3F{1w+*jBB@k8sAW=zD?uKXVh0y(= zyO1RDLAz`XU-7(Z0-|LS?|`ZWx(48WzyEUoZD%rT1SNppe*d}ux~qb0mVgU-Q>S~t z*`+T^KoWPRr}y8t@&4@6b^%dmXyHfl_hTFHP#fx|1O|xSBK8m3V2Wrm^cgs>C}n|= z+Ym#b1+;~}TH~~~oqMmzZLki|Osn5eN<9D#TO^Kaf$*izYgkAmt3b_N|jXvL_p)Lfy$D!VheP~Xn;l3;epq{LJzjDV$@(!EZ_AQT61o`Cx_?k0uiPG#XFHx6ZS_BlFv*LJCc zA48w2$>o~V0Xjf(bttwLXzOI0jBNbFIeh&P`rE_xo9WI~+vM{8P#xC`ayTE3EkdgG z0p$Qgjc`@ZfdPQLtNN}i<|P(r4p8=8F$cS6pl<*|LvfFMaPtAVVSMkK+OYsMaXdqz zsk;I}xbp!PgHmvCl={=2xl!s;84Es;#Jt|=n#2HSvU!n=SnfALI&GRKCLoWOOPc1^ z3JAL*Y0^hxauuKC#0+7CuEqDfB?YtSgjCe#`p$sw4%_JvsT2PJ5x<}R@7?(v z{+hPaGo_FI0gQ*+SLj6f6U-p_K8)S2`*Pj5ED2!c=J({TVG0=ey%G9gNG@HL4yA!%iVc=PdSrb?M}tG*;KMl3djtps!oZr91<)N6EhG>^6bJ)L^tkT! z362FosJAj0pn(JwyZycvg#ZzyL2Pi21`?n{zZ*njY(eQLHZajZT4oU(e+tWC2oAmB zi#ji%!GQp9BmP_fn}&?y5IUg2m1Pl8*Fx|-k1+D;H3HnAj0Urx0?>ha`{9z@z2v~! zK$-!U=y-eKnCu~7puqt*kO8!%`yp_L8-|;Ny0R1id+akt?!HqR;wD*^qYl|&;DirV zww!nr4+3{kR{6rV*(s@1YPD8G;WDmUo;;&%+efTYsn!}M#chu3GkJu?iEV#I;N#MK z8;`(ekO9qD*iCFPzc)>@)H!38{HWG*HY?S}5!TqE-EPk;5^Mnm8vM5HFIa6KFTOcU z%K+F(OdPYtEY(3PV2ArREWV!u+Z{BmSq*SRK0{}LpQ*Z5VA?NSgZYki&LS^e=PH`9 z*o@`?MqI~@DyJt{>52o^6F~8OTu-ktQ4~L@!+D;AW^kfBpJy#|1=Ja14KO7M8_ z)mX;^O0j<9PL%=Wc;Mc00@Meq#DfbQ0vuO8J1;tFJOCK_>SLR#@gQ_zs8~#TM2QEd zjysSSqIZW=B_7~&Ro;Tz{`iLy5Ag5|yCRw!H$ISNH4^av7c%f6vC#bKlf919KoG}WpLDiT(VWC{q~aM;1WGDW(@~~1G%0A} zG%l`+LCOQHNm_)*wxA`J-N$i4VO>7trc%Ra3>_kpnSdjKBd++w7-_`0A+h5Stt_c=rVW?p zHt>io5kQS|6d{nA7Pr6|V}<3Q#^;bWY)znq4FY?MfAhQ<&?FD0Leu~$#*hH)E`TL^ z-{Yp^Q~`Nf7z%8O*$OJ-{RcXa1vdbUK2GB2*jV*u#I02{;_ijvJDZdY-yfJ}*nUXS4xT-M`_fp*> zrsN99p)mpVYZFLRzj>)NQt?Iys)&&TkQa%7`+78brJIaY2x$~`+)4d%G3Izncidrgm_otEIYV&_0RxH-YkfcN@N*#@5aMnPYYVEq{lM+g11=+H1Q5s zXeMly(6@?|P%I9v7}ta6e*lNc65#jbf}@BASP%4?18)GvRzlQz6PCc&_xZX>OaCoc e=|w!vKhGn<*CWNzWE0W=0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I3Q0skR5*?0lf7=kAP|6g0+{nCnY?uGOGI7!EFDjl%-kiOlatJ= zu%?kPQLnA;z$2=?F*pbk0Fl@OA1WbQO@&%KiT7)~pr( zb#OH=k$%JqYGFc5t;rw=BNVl{XAwq$!L=~q`B%aKBCmugeiUKSqKhy9CT|jjf!QV! qg(-gg2xH2ZP~I7y>o4-#etZKr8`Hlaexxw~00005D@=^bM{g}%^(o}&3pE=TGgC6taA{1K>+r&TL1t5iMV2400001 zbW%=J06^y0W&i*Ms7XXYR9J=Wmc4J=Mijs~=r$AiQ##Nd4F|A|7HI+za1W9#GMQvg z9R;~Vf-b7HXln*a(b$EywrHr11cD+QY#vboF%^CAnyEvEPI5)yf_9lt^ z@x6D)kY|DGzZUv?AV8i36z7rm3DN@N&|jUwn)_lBr(w(+sC7!`9|2VHXw z$UWb%F9!u+_G)AjF9rq8$GrW;>}G4 zpkI3gLfHBHTm2jJ(oHU*9!4e#Mj!wYa?H8_s7XC9IkC7s$VHf$c_1R} z*V`Fz?V09)WI&Gu1)y)5SydPS81METiX{xwznIrRZnFsT;O7%N$pFJ+j00(e(!ry0 zEf)aZ3}H}2`EE^=l!NezmYep>;3;e+On|*Goaidc0dbXg>;DI30I*z70fZTIvuVKn z535sk(#Ud1m`CuIw-K=)?$%dz`7E1-#G)J?6d_|=Qk32Lq%H)Q!KQHuJqqvU1BQ>3 z$?4?#GZo=%VT?ZP2+LQ(M{{@yN4r0ro;Bor3=B&_EbmBpWWx9bPtTg2Ni$aj-xB3HFB6@nN%8TQA0i=PAV$)>?xB&!X0g=Y{8W zs%aF410}$yKJAOoI|0@_8jUD9s^oy0MLo^=8`FT__v7T1zj70#o(@Y>)hNc8#iyrK z$ybThfa1nE#=z3`^pH3WgmI$*8=#7lt&aXEEG2HXu!<_xbbTrXpmGlH7d5k8lCP3S zY)+@DRC(S>w*eA?!$x(gmMS<02umsLtJSJn+Ci;sBRv(0IFzdI)RKxiJ6ToY`-G>X zK-pDP0Mt0p|KqNQI_E{$x#Xq!rFqo$s&Sj_LV&)$+545%O@JMQh?F7kKb-9+sZlz zn0YzT12#?rfDy^#@Aj3rM=9;^g~|l$^&~{#MrZi&XfJm6!Cv@b_f(rS)*T3Dv1X5%T4mAIR2;g3|EQ>-1>-l;0&$`gz zjHTGCF3bhY)BH2v;B=vv^WixQylR10vC|UFtOEeuJFG?GRVBU7#K&u4}wjCn}M#=*vwvZ2aA9t zk0sD@Z02~IHH!_1+6t(XnOVLNohPByc}pL|N9e7ed|w1EqPN%9lgI_FuDx5$I>@5i zWAAn@#-9Mb?r`rms_pEmpw-y8T)x>gp*x6;dnkP~&92E}m635vJ3Bd`ApnPQpuCK+ c^zRw}0KaVjiV$4h(EtDd07*qoM6N<$f*>RK4*&oF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/fearow/back_gba.png b/graphics/pokemon/fearow/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ae54db9a73308a31d879c5db73c7c350dd3d00cd GIT binary patch literal 635 zcmV->0)+jEP)5D@=^bM{g}%^(o}&3pE=TGgC6taA{1K>+r&TL1t5iMV2400001 zbW%=J06^y0W&i*I`AI}UR7i>4l(BBxFcd{O)SLMe+JpQ;U}!90Es8rdqs1wsLoFJO zXwe7w7o@dWL}zn=qNM@BfUVRrkujSG!x;nRQA$x*BB_o+I0%sM;eGc}k4ESdF6?vx z$hQkXOJMsDb)hk8TP1Lff_)YAlp;`4b?!81U2A?nl3I$y*~`6@>PiD zdGrX8+t=U1DFha?*-SL7E^nwGiRHna2I9|bzu(i~qzy45ezarv<;#fD{j==HJ#EAD zqu-3NrS-tvFiVx`nloh}MCQ(_zF70ia!Zh)P5*U`} zuMGCHA76({bfKtFT4&W=SRBivOx(6O6xCf>ln2Wmvi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IPf0{UR5*>@lEG@jFbszM1ok`h0a9oVyCrYq-0GWk^!xO%+kLA?d4`clVp7rsgD*V9L00000NkvXX Hu0mjf$#>Ng literal 0 HcmV?d00001 diff --git a/graphics/pokemon/fearow/normal_gba.pal b/graphics/pokemon/fearow/normal_gba.pal new file mode 100644 index 0000000000..6b73e3639e --- /dev/null +++ b/graphics/pokemon/fearow/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 0 255 +222 205 164 +197 180 139 +98 82 49 +16 16 16 +255 131 115 +246 82 65 +205 32 16 +255 205 123 +246 180 90 +213 156 57 +172 115 16 +123 65 0 +246 180 90 +255 255 255 diff --git a/graphics/pokemon/fearow/shiny_gba.pal b/graphics/pokemon/fearow/shiny_gba.pal new file mode 100644 index 0000000000..686e65a9c9 --- /dev/null +++ b/graphics/pokemon/fearow/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 0 255 +222 205 164 +197 180 139 +98 82 49 +16 16 16 +255 205 74 +255 164 0 +197 123 0 +255 246 131 +255 230 90 +213 197 49 +180 164 8 +115 98 0 +246 180 90 +255 255 255 diff --git a/graphics/pokemon/feebas/anim_front_gba.png b/graphics/pokemon/feebas/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9afa332dc1ecbc4e42d082624ae0e838aea979fb GIT binary patch literal 913 zcmV;C18)3@P)jbEK@r&EEg!-sb=R{}>n;_yF~j00001 zbW%=J06^y0W&i*K4@pEpR9J=WmN9GFKorO2$zTu3IR%j>q3CSLlp6aPJeo)c`8<*g z2VG3Itl5&Oo+X1b>jds>3rs#h0?7wxoqBMw2KC7al*Z3eX{HvxDWKo|@7-C-`)S&? z{-(+|IY2ncA;M_V&q)Z!*}#`U4si2!Kn0nA3RLzv5$IWx4#2Pk$;$yo-_6~YAA z-5emWYS6$x>9ck%-V&w|yIPsPP6VnLAx<{{#j3!BEP$sy2(v172Lq}JCtYuMOeXuz`X4A+I`!IU}$SQa>6ANE}7 z#zX+#Q>z6hF97*oxd3qTEd?MB`Xt~!Ctwfc7W4KTf!n=3=+JNOyfcT!9djzs@fGpB zu;?Mcm?53Iq9O{{*9?xCjzAoYs6CRWs|x2vMe?P(A-cqb59h}=GWC-3*PoXaV;4Vk z{gda-w3q*btz*t zOo+#twlmWTiImAs=GU3vVtW0yw)MZ(ALv6K5M>W$1fqV<7I{GMb|7!I2h_jV-+-KB zsvJSd1&TSqN*^}M!HYgLRz#T$_@xh8*e3&kKkLIrz{2TWOM&u~crl6=z>7YhKafDP zn(9LfBSK0KR)TW&F4YGFA`;-jMt!I@O5+JJ-JLXnF_X7afEXAKHefO4fMve-M?{a0 z2%H@mI*$0m!P4tfK&$=nK?mv9r{20>BVbwP{R-$PVm24Q3xMYR69PE>6}5#6?Pi() zV5sGKlZD3x^qTj#HUhCC-rd4u0tp;3g9Bgs1W~9Y?F5*9EIE%oqR9f^zrJKf3eI3>ijQ%i9Rp50gh5CU0(8CjuqNWnmhbP&a n#T!1)l{M_(Vj_K8|497=SH6sL!5EAF00000NkvXXu0mjfI-8>Y literal 0 HcmV?d00001 diff --git a/graphics/pokemon/feebas/back_gba.png b/graphics/pokemon/feebas/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3eabd602147ecc52e21adb030df682687bc167f6 GIT binary patch literal 666 zcmV;L0%iS)P)jbEK@r&EEg!-sb=R{}>n;_yF~j00001 zbW%=J06^y0W&i*J7)eAyR7i>C)W3_{Fcb%HX9}o8Ps)%kJ@E5jxDFv!!Q%}v+`m(7 zgXWGM?>|U?K*0)JX1zf6L=difDfAC0*)zCLaY9e(HMylrD?*IX$KUs)M2@2WbReFY zwswAE{+YE;0MnDeEY5(rIS1JK6ks@K_;*2s3wCZN*X9hs(?CB3yg3CLY(C#SBAUZB zl{D(#1v~72zi=QgZvF)74#*;mu(MScP)wXiWcoO$yLnk<5Jb%Oe*y}SM-W8JRt|Il znUa-+JZN(5YIH58D#@gL?bl#ducE%1bfC&5PcFh5i)p{86V_p8>*+anW+6Ush zxb^|Mjp#sH$|}AeT>B*&=9+{70j2U}%m*XCNrnbLKnyOS5&#_dtq1f0K$c~B2>|iC zTR#9BBR~NpNkRfJDiu)e$w_oi)D#jpyw! zhIZ>-BX@q2cx<|DTe@FtyhTvN(z|6gnE&U;PZN?DO84y7^Z)<=07*qoM6N<$g2iSk A>;M1& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/feebas/icon_gba.png b/graphics/pokemon/feebas/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..19e08797ac120aac45889dd21d460dfa9dd9e54f GIT binary patch literal 359 zcmV-t0hs=YP)DV$~EFlVvx!ib6&Ml`%ILNPB4|LsE<{yOD_ zsYcMe2%{1w%$y%FPMCxzUYJ-ItU;V}2oMku@!1>t00001 zbW%=J06^y0W&i*NyGcYrR9Je zYY!42usFbx92TM}euh!l^rmsKt!skTIpXQn(LY<)&JnCPHb?%oaX||K8k>{_ zey6WB&Ir~w*Bgz^jZKvazBbRqZ+_ZnY~wv-f>`GW8e5IVMvLC2SdI2s0c@>JnQX64 z5J>rs65J;3c#c!+&0CBuv{Ukakv=^$iN*DAf`tJaILJhX!XFn*S+8*RS0`8qx1F#T zuxL?S=6nc2&7ufS_)HsNiu~~TbBJSEH4^*Jv;d~d9A}<6?|&R0Fq;A}UKVf`IG1E} z+>PU)MggP@|J3J*@bZJh?~l9tF}`xfE#dh_DFTnX-Md`~4wS%_po<xsNRnU0^`>$i;ATu0R_DAQ7Rzd_M*ca7b~jyWthSS9xduJ z6;||x@Mns0n~U5Fg;Zr^%Lxm7F%Y6R(>7-E0D*%hGAe4-xmP_+FD3YUrnR}Hf=HW- zkfuFgD!J-u@<&Ru+-@s@iGGkOr3#fvh$xbgOd<$cTeqOAQwwEv8z_O0o|K8~VT_G7 zbaiUCY)*YUQwR?+NYH}dh0BbGPDEqL8g(BD1PNw#wp(rAFc;X8sYZ}I>sY1mlHSZ( zO9|$yhItBsSwoST63~a=Gqzf-n;2VG4TA)MUC$!~cu?91K>`!b3I*WzRL?ta)oWJG zp~`KywIvH|ekY6Y(8hY&aHTspwYI6-ymOBtoE+4sBZNS?laauzGv2v_04MuDBZ6f+ zB0^C`(Yy640q=C~vy<+AfC#Ur1L0$?qoxR~D-i6TptS-nW&N@*{6Q3I0>=5HP8Yow z2OL8<5cmUq5)iz)TL>5lP|%(x@cC;bzy{@1jYtVb`^ywQ3yvYc7N^s~8_;2mE)W>$=}PrNfl=x8 z(hCLux1C2ICI5K@Qu3dX8|ia_c-2%J=gd59@QR`|peCeg(gII>^2hJ@hec%_>oaJ#zM z#+p($wdSKrh(6xR517T=AEk+UiVzc)eK{CzfBa4Fc!WAFm?5KIz6su2Q@W2;q@< zH(w4DEHXRWXg|(C3kSh2mzuj z4e@~N@6WcM69x%Y#pQ%Ex+-!!fK@hbtPm$1s7qORUey_3Ept489j7Nh5-1&s?DF@j z)zcLt#{(r$G`CM2mEHYOHCi!pJWzse2QY>JZY}_T6nH@Pcn>rO&}ufRPc10t}q>WjruzEGLj5V3;L5Ai&58 z#LEF=P{IQOj3I#(fT81o0*s76?hgT@ga-;RG6E?8ql^a%Ffsxe0>&5~@DYLJfKkGO zF#^c}L%Y@pFbV=G07JtARHY!05n$-o9sx#1AP)<`DB(ecjR<5280CAjKO~R>FiMxV z0*stMGQjZ0FU1gPWdxD~#<-vI$_XS=fKm2K>LW2Ekc0rEq)_}I3IYjL*NyW70frpb r^*nw^%Ybn)KUDhv#t)VM%n$znOdJ6`H{cAz00000NkvXXu0mjfv=Kvp literal 0 HcmV?d00001 diff --git a/graphics/pokemon/feraligatr/back_gba.png b/graphics/pokemon/feraligatr/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d996dd8ce0564f66a0e16e524664ca8742eb0bac GIT binary patch literal 999 zcmVtU;V}2oMku@!1>t00001 zbW%=J06^y0W&i*KWl2OqR7i=Pl)sPLHWbIbc<3!ghHeE8p-xK{10=n4h=7V(f(ANR zVz=U^u2}|KK#D# z`#}u`|L2^&z7Lq)2h5lE0Okbn&60o|5Y{d$%FH>mmck%EvW(5 zoy1Sy*#iK?ngE@*8qcbO97Noj>nRJhC*tTXVCFAP7BI#%#pSo6N-hs_;9R2tj0FU! zUos&ReFw-;KO{)t{l~W%es>2s0B|mx!qd%W^QRDX*v#)WMo1aD^CN(FnTVoh2sb76 z$o$sD<$C}d^^17p0Iksn_S6A? z{qxbshXowmxE5+#aSg!b_+#6YnSGBU)*6GF2tKw|#=|WU+YgO^$RP2CfXr61f{Abo zV*8;L5ZRN}0)P^ljcbj5g+Fh%U7P?}tTg~+;9-zt99FMv8y_-Ji6@+zQokRwQu?Lj(L=GX@6|#qGK^}hX|l+S>OB7)wQRVfxco%(X?MgX!}CAOx&whG|GK5$k?ULc`mq=sADF5gA% zfW3$ba0?~r`mS!D@Yo5&k`y#=S2BXF<|Dv&t`Q`V{J=!BlXwiSmPyRB$Ymgf)W6Az z!0Wxlw=SOKT*u)<*Cv%VXhkLYC$-5go~UpK|a$T4~dVBqHA+LVe05UGtFfEKh{?}5)x+m4e#7xlwJ zimFG{lR^L71%hCI2<(-VGP!D>KF(br#?dr#f1j~5In02pQdi1P)DV$*lCe(1Fc60G1ieS;00UbGE)r#k7vG8>29RKZr9(2Y zzE zoCza=NT!?#lbjI&bmXxKzwK9){ebRx`w6Kh3S3_mBz}8u$e`lfM(VHYjZ~l*)K3mZ zzc+VL{7~%r>xXdJ3llX491Qx(!tD1V(9xhQO#MVNVSJT^QRCJY+Gk;^F(7`3Fy3!x e$L9T?{rCn|P5H{e8vqIb0000J~bc%yQy15P& zWa}n>gPf8j6q@R!#grzs#K*~|4#k_++aTqqPu@qaV# zr+cUOp8Wm*%=I^9nlrAQ5PJD7Gp;_|Kxi8wy;!8#K>G-l zUL#c9YGnf;YFRr?vreN{b_$^O9@zG)s5g=v005=7eGvIHZr4g*1Qy!1jUC@Gc%k6c zjR2I}yG`u8GYnRT71;kg9nZl>7-Mo~7#0IQ^}h%}V-343Lq#{%!OBMwScF;|`)3A1 z{1UfU!pqhmTnh~rM+S?neiiQ6fV@*E1%OzM2GnY-RY*_TEdq!9=m09Y2( zN=Vu#xXXIcb|TUOW0#%^K$ix# z-Q07|iAP7cCj#sY24G4E8JL|`Mto_P1N&iz9Mz+&saj?L#sT(7k7iDlg82d1Aq>bI zONEUC-Zu#cvf@B-IiNjbKxQ0(HV5Ei;z{Nnob!4t2lI>bBa@?UBo?)PQByBWdPk}`0_uDg8u<9Kg|fjJi9iGN^#M=5r)#)kgj0MB7M zB*S5-_CC8qY!B*@e<}jzmJ_4^&G0xNr&WnN0W#u1(Q(8HBJ&R_anDICPqLrWFp(Mz zX2HT3kQoe>y?b~$mS$iMk3Xq~QVWyn!abM`j5>Js5$aoQefAN9*?-4#{i%KeCR2gP T72O6K00000NkvXXu0mjfp98KN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/flaaffy/back_gba.png b/graphics/pokemon/flaaffy/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ac771bf4bbe101b4cc058bc392ef28de904538 GIT binary patch literal 663 zcmV;I0%-k-P)KlfQ4%P!PwTM6*#@&+1kdUtHD-J$Fv)zOt60SPhdG z)cyxJ8w(=N78YR}wq29?*Fk z^$N`9wM6@_CheeS%YnOffP=GA9{@xRFnj)b3G8D~BOsGAn|Jr{K0B=GumWOC5vvlI zmMsAPT)=77gtPc$>H%<`NLeG{6y*#Gz`7n1tOYmfq}MGjj_opo6cd0Oyli_QWJTV^Rn~ft>UFyY1kD5fI{lcF1p@GAV=I{BeJdP_n-H)*mx*`3@e!1bsEb@59HD3cHp0BDcx-)gN} z;PW+rtlF6wV6`djp$f3@h}3TY#i@Rau-v2pjsyCdc%r{8&kkY)g3fyiTpG&}_;%HL z$~gt@FOA+j>YD0%s<9I;xBHy;~%hSc9#GE002ovPDHLkV1fi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H_DMuRR5*>@k}(RxKoCW90vFZ;glrBF%z%Xmxlufal}E5okzi{; zuObK*Sr}qc1{@PLyR(*B>2&+}GdnQP^M0#@?~?=Csf=qLn1xe_7$ATEA{Obw5a7zD z2vW*Faxf>Nf=}(rq#%!K2B?SxY)ng6W{sld)_^2ig_7150LgwaJ43VpaU|@&qG$s} zv@!q>hYAr-<9o8urPg_B!Cvn%&r`c7Vpg4P#|xq7mK*r%`cN2p6DHn$A`D9m!l>Gw zzj+A56lw=ydSDc424Q3^j6wqX>J2h8uz^6`ZkO>rSs+%JqdE8J$I0yR^uzJtD?jc% W{+niY$1Okr0000D00001 zbW%=J06^y0W&i*L0!c(cR9J=WmNAdwI26azq@f`7wTbo%;LuD%5l=(0j1FjM_N#Fk zXsjW8ifcxot!U8Nx#FgY6o)&QCL+ncXP7zcc(c;#%5ep}KmYe^L;gR<`B=ZO@_Bn* z^21N+`__7QziKx~S=>58w`O^(L3S!$+Xep)`tNSG4oU6zAFgjo%e3A7+9&twW$k4a zK~^k%LLVL+&*LJov?$pp5KQ|{S*Ee=z)I$WVAA*ap2fBU^Ok-P(#fb4jAe7XfPet& z)(%enN(iN2pl&yK8SKDdBvLeRod>h-lJj;#L4XG9({$KynADpc{aW%=%7W5pYIbo) ze>`zqIb)O(Li$D%cTha>Z^fGDbX22&-0O<*;Q5Jv{f&Wuo}dLN?hL_Z!=Kq&Ky`#Y zLaI&S5>jq>!b%jJ)DZeUI*+8>HeoSv zyscOz)fr@590_F&!FeOrGOxEH=kgfN8g*yI#k^+g4NRHa>drdZt5HS4miOis)eHEjP3_iWQ|@SjV#L;B~7OL!X{*frb>$i4{YH5^9o;jXg1XGAmL!6n=;ct9aWLw(Be z;M+5XJ6GWzVFnHjff|ut@c=m(+WK~6(rB1#03QxjCG)LFxs>xUH3It!iUuK0k$e61eXF4KE>*Y~R`HTUOOg&*sGU*7># W%*5biWMoVL0000D00001 zbW%=J06^y0W&i*JLrFwIR7i>4l|hc$FcgNfs5eN3JDBzYJZHluqp{g!QKCt^nbSoA zHkD>hLZ*9!6AnKuS&j98;J+r%3)i*T%5tn9OA{^7>}BZ#xoon4Pz^N4 z{2H*AG7Hj=IF`}}#`|2#UGVTB!9Z65t*|3>+5=ulom@}%Q9u%bo*nzB?_o&o}>Ft6)YoqQlUD@6L&MxF%;d8fd6J<~lq zxeAW}odN^n6`gE=%sI?V1kMql5ZS;xw(2^mk8%ZgE@0oMl&$;2&txpJuOUjY>Yyo2Vtbsv>k#Or-Rn{&X0kQn$0Bctv)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H`bk7VR5*?8lCg5bAPk0e*WEl$$1a|mrChgoV>ClA))u{LhMG}k zFxD28YhxgpJN2ps@gYF){{Vk8H0}w2$%C;wkO(Q~Y1m7}8#{oeey=bgok&U70v16c z@l?R5D8fSZK2*F0@dX$}Jo_mY@Pw#NU2L{|s9Ux6ER)~-p&kKUaO3Cer2$8t`(_R> z+aupSyyGxF{6%+x|M&?L9|3{UZw+oMW{P45qoBJ%uKx6{qG}6JMA1po;Rd!vh|UXE z!w3nnpQ^Z$?aTK}}P=5uq+F);uD0RR90S5&7h00001 zbW%=J06^y0W&i*NR!KxbR9J=0mrrQhRvgD)?7$!-qFJ`&YBcC!O0pD_q$e*2({^U` zQlzdW9fV9T7cV0?%VRlsmr|6TM#)%|!^lRqG-CK*Xb!WwgP}Rha#{k*C03?6ZPK{$ z>tV3L2JL=Nwk6q;3)^Y$B>DT%@BM!7-}f1z|JLHHwN*Rg36-_WluiWc+NP?m`y%w1 zX8mbXxxF60q$tW#lU&Ha(Eua>@(E3Qzw~V11EABrIv_$4{73N% z$%CO??-+)PjS!H;o1%o1J44Xe+V|1 zy}i+xJv_NA?}RA2BY`@i(KDbIU~&q)6T+wsMjfzh9VcC)Y?|htEMi=Wpl}L$*w@+U zNN%>20)sI&0hmdn9{9dCJ)U|2*~1_2q9=G3?Hd5wbu|@ChfEtd6N34z0d`iNAsaGx z(I~cr66kgxqSOR1Vpzo1;2!9b1o{ng7&Q~-TM{nc2SAqP03F6`6o4WWZAb9yh=akX znv_<}Uu5~luI1Aq0IsqX4@HZnPe+F$9>cU=bn&1?RhJLN)bupAP;>;b@ox#BDeCf7 zaqPvh#ZAxJF`D&71%T-*v-Hmq?#1uE&e3Zhz>Zl?UHSZQJc{U%KfTdwimEOX9G#j! zj-~$a1D{@lJ+)32@WA|Wicp^(7Ow;F4e6gE2};ub6vCposjg0uxdD=}sJ{a=E@4so zet-}%pYf|Kz!+Ns40t0J1dNLPpidDp*GB^4BP2^H0Mftp4g@90dYB=-cJzk@Z<>DC~~`7NBZTp;u1^(LTO7i6)qYq*sq07MIM8_qa~vRk6K z;|0`J04gp}kafdy07cU(8oav0zzrICcU5e{`A?e`Nj%OAIo%nF6J^6K5L#DUqh&Y( zoUPrpGUJ^jZ6iYw_Y6*lMhI>b6L*>uIL)59Z87JBIKeYyu|{;pwM^})>`9YbU~nwXPWAyDw`yw}RHZpBMB(r1W@GT_57J zHNcxgXfOvx87ZBO$1fCj?$`IeCx=1Zkl-4_pM`^@SO)iN2@x{DfUuG67zM*H%Fg}4 z$szOr3`|O9(YYuA%Wb+I)VqKPGP?-%_V%CSApjp~2J8??=A*WGBVG>xWNg?#jOoP| zfb}7<8wP^24D<(iO* ziG-`$NyB&)2%zdPnEPq*fYN{*?GXLb;Qj|zunMhD8XLn^D;y0}ZTJ6#!u8;2EGUNU z{t|t@V4>&FNBnxt{ja`=E{wpAnDyxm_a7Trh=z~f^#cv}XXZXWp7!U^aDM^-2{6}Y z_YXMBn%zI3#{Zf7huQ#+`@>%c*R<=+>;9pwNGR93yS?r&h}jVSsTFYCe}Vym+ya2P zZ&V~G?;^1yY_;wR=Kd$*S`7$oW$%eQd<(Dyz=v=yE;1m0Pd~!E4^UwaC^L8=uk*5~ zTTOtXWwZ=CeBn(PW_nW=9JqhRanVrb)X4Ex3qTf~w@QZd+26^nhI2E(LcVt5F@H`A z05~x2#?Qw=^9|-t>MM;4UNDt~nHtcUSPTR>jo53QCbYmc3n8@6R7xL%{|5$OA=u>s uW38?KQy{(~=~vtjfY5?2)E*-Edhri8$CZR5fqO~-0000TK}}P=5uq+F);uD0RR90S5&7h00001 zbW%=J06^y0W&i*J_DMuRR7i=f)xS^MKoke?i`h?+s&dnXx!I5`OM0FPsMXrZ2rF!u2y4HC`>q#VkcbCBm%La5zgaWQh;Ow~)W()*6LV*=b z@S=kArivx+rw71;IU3Sc30^dXUs25Ll?ikOPL6_yu%Z+0A`sP&dtWcjF-W8=fsU(z zP-|)b$7Q(>l!!TiAaGCm_4H1huv7 zKE{Ht5~zcK$OF6{pad0Rb>Wu~t9igH0EY@Js+VF6AOQ>1!66c(fbkQc5bUTZK#wv1 z=Rc(yj7SuqA-R(~EKig$K;l-q@HPji=5R66pvd?O*}OW5s)4kP7ms`VwOos@3Kf## z#nv4U$r^LTVdwdhyBChN8O zeOVj_p3v(lB~B>E6tIG$Ur*VT;~S=QL$xQmv!?gt-aJn0|xZP!1zKPX|pix3$A O0000Kn literal 0 HcmV?d00001 diff --git a/graphics/pokemon/flygon/icon_gba.png b/graphics/pokemon/flygon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f033c9a880c6725d5d9bf4823b254b6f9bfc88cc GIT binary patch literal 411 zcmV;M0c8G(P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I8A(JzR5*>@lCf@sFcd}o1@Jprx|!8k?A6)a33V#on!oIZKq^+I z8cPMy1zrr;52s%c)nd7ai?Q_%Ay2%(KL8GM{sCZnLM(!}ft~>t-9|7_)=_#M5l~8P z50j4H^c}U}vUe#$<+j-V#SvIK78)1$J-J+8L54kqm}WPrSG|Ny#$s-uQc7LpZve)d z&t-#0<3iS-WrL^x;kg$ z!MU;uU+_7h=h8PUw9^*Aar*?@t)~Ib%Y6VC+PT{*3V-sR2WqG1is9=G>3&nT2k^ zkDByR^LS|>M_`BJSB8l|(!)sA+~Y2?b_<%_!cz^3T5y`r&8r52haOjdN53#&+aSaP zjZo-_3(j2&TOs;PlzK!u(pauZEs~$>8KPb45xUHu^MJ9z_euU&!{G91X&A|MzN5x@0?MGT z*+`P1n#R@mHu@>0F%!@e%J8it-jf09X_#(A@hP4DYewN#j>l7mR((Nw2(lP_m1Td# zdPW8SwA^Du{)N#}?*tiW-y285EDib>=i?n2==6jw!}X`U$e=q9A>Qq5PZ`|WaQ*2y zQaLsC+Vkwgt9N``eTp6kXH0_%hG=|R9Vpd_`jM-t+pvtlAXogtm0iun_S}#%0 znctFB2B7;-tJJ=|Lq~i(TwH2k(Hz<%7;9&Fm;f1Q4PIS;BONT~_sbchD;O}5h0yHhpzQ$sc4(&kvn=l4yB&C00yTG%3*5s$aN*yJJbeV zbtbsfrM^~O0OKnFMuRW907Gx`MF(JPk|tlY07FUz7<&HP7jXNj#`uyFFm62{7pU`tkz9R4@3U4HzjfDYs+*!UNN2 z85CepI$b8}^ZIhYgKCHZFwB}C4tP*~GYY_H@WU}4D8MMvt#)h^>&JLd@&lzKJQ!^| z@SxxaN>|{)XnlkSnkGwrc+-ssO5gKCHy$XR_<@!D(18cn#D+3mi_s}OxE^N24}=Hu z6do9IL;UbBc#y!&IXuwL;emDz4|=;Zc+iu-oxuYMXYc?nc<_Iye*l%cR-UkN8jt`0 N002ovPDHLkV1kbH1o{8~ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/forretress/back_gba.png b/graphics/pokemon/forretress/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5761be13799dfc30c80e7d6cb7e7d90573d30a3f GIT binary patch literal 525 zcmV+o0`mQdP)KlRa*OKoEtI%mIv?E|*9&KyNWX9kD|n8I}`-Jx`P_ zS8$mw%AqndyT%|ainQ@7_}TaE%wvEky6djL3JZAJ@?+=RX$z>F8|_w!%8flW(hA^a zhhemY2oVm>?QZ}D7ifqG-R&%pJ4+dnVcXg@0A}C>tXljvu;ZPV0#>vP5kpFq2P$zP zv#*PISyPH55d}cRc3vVL`?NGx0XcOH03T-nrE~?@XS}Q3G}L-Dr8qK$oF4$?ZkWxY zehUC0^)cRDg$X(iuR8Z!#%>J_G|)NF?8auK++hV4}c|cgZC4 z3Gm_$;8W%@Lc}U`n0!2dri?pYy$pdrmB~M*2L*PW?nP7|3-bLLz+=dufPPXZ^nelI zP$c>?K78$x^hF84cJhGuaQyjBqUiH$>aSL&)d3LG$MgC8zWP7z`q%metkC52BneU& P00000NkvXXu0mjf{{7=f literal 0 HcmV?d00001 diff --git a/graphics/pokemon/forretress/icon_gba.png b/graphics/pokemon/forretress/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..056683bec56e914e2f0e30115f58f88c0005313d GIT binary patch literal 332 zcmV-S0ki&zP)DV$@l0goGAP_}8ftb^w!lB$vETen1NUaw8PA2+HNod%swN! zbi-DffqW%c2Ml~GsTMQAlqexkXo$K#x3sh@6lK@%AVnFPsH9X3W>O^Ab$DbA79~O7 zb5iR@GJYuAO&0K_Vcl-hdh+KV@~87(*9UYE7agkSMTaV0br7sWeuj0(NwN;yl6A;{ ebvOk3Ivw68;p%AjJGv790000y14C literal 0 HcmV?d00001 diff --git a/graphics/pokemon/forretress/normal_gba.pal b/graphics/pokemon/forretress/normal_gba.pal new file mode 100644 index 0000000000..285c562915 --- /dev/null +++ b/graphics/pokemon/forretress/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +255 0 255 +98 41 90 +172 74 139 +197 131 189 +230 180 230 +246 222 238 +255 0 255 +255 0 255 +131 16 49 +189 41 65 +246 98 115 +255 189 205 +255 0 255 +255 255 255 diff --git a/graphics/pokemon/forretress/shiny_gba.pal b/graphics/pokemon/forretress/shiny_gba.pal new file mode 100644 index 0000000000..7b894a11a1 --- /dev/null +++ b/graphics/pokemon/forretress/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +255 0 255 +115 82 49 +180 156 74 +222 197 106 +246 230 139 +255 246 156 +255 0 255 +255 0 255 +82 65 32 +106 74 49 +180 139 65 +222 197 98 +255 0 255 +255 255 255 diff --git a/graphics/pokemon/furret/anim_front_gba.png b/graphics/pokemon/furret/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0e35ee1049d0c500b9cb2809bd5ce16573c215 GIT binary patch literal 1122 zcmV-o1fBbdP)(h!pn%>5?W$ofpUpT zG{x#oWTH97&8ob+7o4s3USX^1f0JtWq_PL41tE_5LR39E-*q{YmckJLNS(OLDz)D z{HU#=DFuMV6jpKl<@lIE9LE^2;5``vC=zg!U3M=G{{h^53pRh$yN-M3-DnxPB)m&I>X)tcp?j>Lj zfadq||NX7ChdIaN@u?%RX_ueEtYczpQKu;M!*LYAJoYtwwJ*}R)zd1!T^_uU{=|AI zy(RwaOR&p>7k=Nf()9Y3b#=$oP_XCkhJYtaT%P2E0gz|JcPIG(x|%}~mj|t5Q6ORocm^~T z9a{nQV6u8RC_wahmnh)v+w)b3KL!#g)a+*UIUwXwK=IpAtsxHw`@m@$RD9ApB(Qhr;y!{rjsE@IbE({(sd0$^)9&I!t$q@?hujJB#0&$Kzu?pQqXxd~PnR oMx}@2F0z-SfKxqKluwJ(P!PZaLTFEZhXfH%LMCPH$wObw=ATl#vkv}V(M%T*715}e7OHh*6733g7Q^UH7MP3F}woc zU^oG{pGXz}_kD&GapI<$M$GwKQ5@9~DQ>=Lx&v?#)jCug#P2WLhAYnFR!S;@A78f> zTpgFOlw894{ita$O_nN_0p%n6-`}=^CEHvOIdA`b(4I1tL1qBkYPZP|%WF0)#won& z09b(NNx0Dh>)e1*dg1GVAU8x2=uW`~%mHv8w7@VZ0k4sn8-rU0@)mFc@9TNfnwxKK z&jxUtEzInDJ3JfOEtuALKiV0C($H+dFdf(f0oVml4S=u&78>9S0pk*gT0Ig#D>vFD zoq%bR!R-Nt4lnI)Q_QIi+}R9-o31$xK2aWoj~&2ZEhh|Y%TqQ0$_MDV$Z1FaZ`Rci1-8irD5qE0C=Z~D{;a_I2`ri}YpiIDDnaRhe8R-=1f1m^ zW1eDzi4&hRw<-2W8~lr*cX+ljU`a%B0K)unE$F-ULGiLhSX5Dool$5pkS>Vf`Nehy1^jhfnVkU!V{#L#p*NV00000NkvXXu0mjfmru3j literal 0 HcmV?d00001 diff --git a/graphics/pokemon/furret/normal_gba.pal b/graphics/pokemon/furret/normal_gba.pal new file mode 100644 index 0000000000..5996436bee --- /dev/null +++ b/graphics/pokemon/furret/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +255 255 197 +255 238 148 +230 197 74 +197 156 65 +172 131 41 +156 98 74 +123 65 57 +74 24 24 +197 49 24 +156 0 0 +255 148 98 +115 115 115 +65 65 65 +32 32 41 diff --git a/graphics/pokemon/furret/shiny_gba.pal b/graphics/pokemon/furret/shiny_gba.pal new file mode 100644 index 0000000000..24ebc5bd63 --- /dev/null +++ b/graphics/pokemon/furret/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 246 230 +255 230 222 +222 189 172 +230 98 139 +148 123 90 +197 65 115 +164 32 90 +131 0 65 +197 49 24 +156 0 0 +255 148 98 +115 115 115 +65 65 65 +32 32 41 diff --git a/graphics/pokemon/gardevoir/anim_front_gba.png b/graphics/pokemon/gardevoir/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..88067c8c0712edf14fac19f87994018c8b91ef14 GIT binary patch literal 986 zcmV<0110>4P)&Hw-Z|IPobl;)Iky>l^pN)Qkb`XQs!00001 zbW%=J06^y0W&i*KSV=@dR9J=WmOXFNKp4k8n2}iL?jS!kqEjO^9S}o9Oy-1znNPtt z0Hq&l{SENlt#5R^kWv;$t2&~M~{9dIgQfune~Bg81!4OCJD z9)&vq2829*Wd|~L3FN5r)(%|F0gldJ+cOL+m%D+lo!<=lJ2 z?HMvQL;$QA?#B$T5xle|NaCv;sG4=2#BwjYUcOwDShBpI@D;#ec9?=Ff7ttnWt)5dP=wg~2j~CzhsmAz z2e`#QfCX6j2eA1Eq5T7x{R7$ub%x9HdD}lU*X+ZVe<;}lb--`X6)V;hhe&_7H=krQE17>s%mpgqYwgd{+017YD4rWi{3 z2XcV^LATjn4a^gZ+&{&Hw-Z|IPobl;)Iky>l^pN)Qkb`XQs!00001 zbW%=J06^y0W&i*JAW1|)R7i={l(B9TK@f(wusd?rT+&B3m>S6m5*@_4f{F-vZ$G@);zol?e$G9*Zo|$)<{0hU86|KJr^Yy|n=0_c0apO0V`q}-$u@9PcDH1LnCSNfU~~eZ zrLjq8e&E}@89{SJL;`Rh;tA}3{vZL#HG~NJU%oOh-3D$MFtk7iJQOsm{LNsXO-f6| z2wuJ~@_buYfnj}uT=3$!$SWmLi7F7EiNK7Pxfo$n z1}3WhiAHg+BPY}^h`#qOq=ab+{OtJ?0=Luk-rKos;10uC8#{u5DQAfRVIBF*Px)0t z^ln8kPMZ6ZigzPPU4cQJ-O3;QeC z=m3#7qhZ}~thIqB5EUI1OK*u1K%}`aO#gLxc~qF07*qo IM6N<$f)8Rg3;+NC literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gardevoir/icon_gba.png b/graphics/pokemon/gardevoir/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..958ea7f625bc99c7d2ad01126977f0c7f970b747 GIT binary patch literal 386 zcmV-|0e$|7P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I07*naR5*>*k}+<>FbqX~0($CPfZ1h0+|#ALLAXYDPUZlC1g}Kl z)MM;OH6`2G3S?-x@qwS9pjTCYx~A!=XWo#SV|}f_&>ooG3Vd_B$<&`|pjk3?O7w4| zT$df}aB#HO9){N4n${7?3_5q{&)7N?nnN8=h$B0}-5i2Q-a8(Sg1QByHyqDrZ**<= zxQG!xq5>eipAp3uU;`0Ff_fV4i2~V3@~MGLNF$~IYh(ie1rjK)tGvXiWknph#_Lx7 zf3BAaQ*=;a#-f7?b1OPzVRl)EEKK}~IaGwf3{)8Z3t@m76-G}3>+h!@Ve+k#bcmn7 g_+g*?0Q*`U9x}hD;Q|KDeE1ah&~5PViHdrVdr|C|_u?CWCi zh!~d025TUoK6mE_*xmgD?970E%d!hufnf7qwPrQlV=K9Dnq3=QPp_)0>*HxK_}Y)s zFBpuWMdSAicI%CxUH~ZLz0(S)#D!8V942oyQAQn`c=%?f?o-kSLD7lva?G;-k z(6igv^08+7wXH-nL?Zs|T}HMxW3W*mxL!IUK(TjX2jvWLSIS1zDp{N{Do6|2{;i`9 zK%!Dw$SqgD7Cy5h;1X2v(`1oUcAhW9a&2{tb~Bp~?m8v0=R z?$Zyy)xkQ;G`59<9D0BM_UQI(dWpSw%_wA~wPH)*73#-gI61o?_F249xzAu^HEv81;G*ZgRGR@hIbabU|m5Sj7Hp9ZAN!ni7TtB z7LXS_n>q+V2cQnZ>UM;!cQ=|4z`dACt%GL0kgfOg2}Mk-%5FAoSXY;mH{S~oYzws*(a}olR+~3TN$iW%aqSwz%O6Z4AP^`1% zCS>1UzW4~MzptP#C~^9qAFy*<{qWrCR%}=wL_gqyeFhE}%9Mc5yIi#MXc>|6r2*~G xx5qDHSld3Ac^QwkZl7HWW3PR%S37*&=O2anMGD$U#QFdL002ovPDHLkV1g|Pgl+%; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gastly/back_gba.png b/graphics/pokemon/gastly/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff1badde4394788d650180ac6864f2912946b8a GIT binary patch literal 613 zcmV-r0-F7aP)KlQC}NFc3vmlNH^$47N&XQ_HdLfp>BvX&n{AGM=ZVmIUiuvNU9cKw%ka4#HD+>0<;X5|1(u0zuKxW&yGf^CYB@ zFc4$x4b)z!mGdmEO@W4UYl`~IakzJZV(C5F>+-&7%;A~j4S`x1Z%tz+)rZYF+_HpW zDe?JQ>v}{S)H81Oj*w`;@1O6w0Q862?){wy?K|Su!OMstrd#+Hy9~VP6_zo{LYV1EZOM992tFDV$@lCf&UFc3ub0cs|0G&COAmvBr+~l>I96=}c?#;4O&j`i0oi=F^G`q55{!dYMao`dMdlv^y zL)xItUNXi2FGlhf7>OpCFC`x8t$OXZ0L=+#J~nR^G}-*+kWPO+JZoT#0;VHC-=0!} z^!Ebv%IQ?Aw|T1W(N`@#wIx?~(lk`Pf;=dvE9y1{s7$Upxi1^IRBJqLyBLAPaPKz9 kaoEMdmS^3eANqIo4cjBx7b2+>)c^nh07*qoM6N<$f~yU}ImN)QkbS`o7S00001 zbW%=J06^y0W&i*Lgh@m}R9J=Wm$7o=HV}sK03kH8+BBBhJI}=RwU;-r+f-5K@F6|--LW0!zk47I1Q9N zvG0F7y~F_9`{l*9`^nZa0!Zx%O{y(9zymdm>v#_%kSMmc+89`9E5_wM0cydRZlqzV zd4c7O33Z48szkY|g-}XuZ0qLLOA6Ei<`Gb;X0U-uTmV1`!MKnPaAe{FIH4er(gQ%K zYzIQl8Vqz6{K$b;u(A}xeBwg!L})7nSQvoV1y$?_<=|PjgTaqD3zglGA2`I&8F0Yk zDT=YOq}o&r4b)OuN3m@`U#Q3Osr=)iLIb6EUguF1o5ylfe!73CF^Tfm`;n6sV;lDA z{XOhm^XEGcm?#hbdf@dp0Cv9vpq&YN2!1w;<+b>nt*yWxCN?p)kOAqrM*Ab=6 zwwTrB2L4ztFp7%h9cHEkQ>4|Z`B=OV#dr=7yiZzgL724XJ-lE>z!^*k5Ew!==dWNO ziwc2S3fCAmCqPFH1_10EzI9-SnE+f{=-cfGm}!9mqX+UPM`rHQ_iak;^C%op4#3&w zfB+YG)bStF_XR0@3_~l8ygk<*HfvY{O_N?I0d3!y}+<(A~aWbUz`G2zphbWSjOXAsvQW7^%@lje4@aBUb-9R z4T}YaI^KY#Rt!#1#z8;ygk1vAevP^{y!rv?^o2dHt`X3ea|b93N6>J+SbBl6TwOyr zjjjVw@z$D#^}zLFX_RJiACx(T90MRf!_4)3emh^>Kr~G3YY!9}G&o2U0RYSg0A4Wr za0+ls0N^?RD|CSm!rS5@p#nL2;OYjy3#kJ@g#+M}Rt|WBRn@9~p5WWiA|M4u@y=D9 zu|qv*NDc~&RDqbRU}*mG9~I0PcuD{~j|@mFs%X=i9|JO<&w*I7P5~859nfPS*#U(> z0u&JB$8$U{asYhX2LeFpx0r)zn{${IOC!KJq w-wd|V)VoTihqVVfk*OTAr_1GkfNyO42QT#GC|oy+=Kufz07*qoM6N<$f{U+H&;S4c literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gengar/back_gba.png b/graphics/pokemon/gengar/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1132f45239485b84da406cbfe0b59914ce80af7b GIT binary patch literal 605 zcmV-j0;2tiP)ImN)QkbS`o7S00001 zbW%=J06^y0W&i*I+et)0R7i>Kls!_zFc5{gfWvqw>C!UHa0yzfK*jAy_57iEqpIIPV444RL-5df?JKF=;>$yiRgKpgcF}`wO#%G>> z#{fjK?n2Th7D$Fz{pq`W0u1BJ>X8ZlB(Fd zWbq($Rl|l4Wv>_4sY=o-}V1QjZ-uqE@{%r&b(5+_& z8WUh!KLS>}t))gcC|;}@S{zJDV$@k}+<>FbqX?f*RZf3djMnWY>YS^bFdC`UFL-&IVuVX(jR2tt|&Zd;>v!J!5`#y)5fFOk0=bI!ZH?Wdo&|HkM^5VF$6fz^+74z)>2+ z7@STVV2&{WKnEB%unqKX_dO~}ooyUD z@Tap+U_({l=;A$OaCXw6NR$9tvu~OP%T}@)g94LR5P(q=GKok4*1b0gCb9t^BBdKV zY|M?J5TwC9Nv?t}#O zx&+rOyOjn4m)=@_2}T-!acmPQe^Hz|^_Rl-I9}GOIz-9_dv}<^SvUp?YI-^ZDzZ2n z0Rg={N?{Q@b&#U0C0aTJbV3VTpls(?_))~6qO_@@Y`Yu(7#RYC0ykUSZ-xOI0HmFP z%@&~Q{llR?{KM{g z8Od-qm##dx`VLjx|q3;Tzk*UMMF zU1gs5;~)6)j5#2ES^NV7kiA|%{e#yuK_-Rpj)=WSh(qDCKpz>PKoi@EEHH;Be%NS1 z%2hcf-k|4wW?)lf>4chy4HtQ6h2C@_-kMRx$QH;0sI+bKO=EJA4aUSi4Mw>xL4YQS z>{MxzqvlbyD`1qI0-Z>X;s|o6!RA~;+H&J P00000NkvXXu0mjf_A^-F literal 0 HcmV?d00001 diff --git a/graphics/pokemon/geodude/back_gba.png b/graphics/pokemon/geodude/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..29a4e3f3dc36b70e6bb98b385360e548188371b2 GIT binary patch literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*L(Nw{r~^}?Af#b8UABM zXRkJ|*^*RTZRqGF00gaJNq2#I8B2ovf*Bm1-ADtnD?D8sLp(a)PBtuRG2n5nWqj~2 zy-`}hxk_hatnr_+ zE{lNa`Va5yVf(}#zvYxGbDnzVAvVj0E7+E(rAS?P(wUd$9NZAi#rx@s_4cA$9Zbe8 zOq0#4H$Pw8$>iN2$Id07U(N8{g)!NMdyo8e_Ch9}waa-qHeL1fSybH^5x~0k+e!z| z4E?5@8{Z097QHmS-M#Hk&4wNSCF7Z1A9U;#eB6*UXWo;$53YX8F2fzZ|-xgYPH`hBKn^x&Ft=RuHYn_^UQ_4*5 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hu1Q2eR5*?8lEDqbAPhx4L6I{+Exdr${g;V40Ks11m!u>ux%N`2 z^$9&bV0aMyXeD3-5mpD_5p~ZJ0Tu2YAZp5!B$FpdVdkn_ojWj*&~SlvkWpJGPg(ap zrizT)0zOU=XXcrX#_qhpuWv0~3Y9W{e))f$tLg2dv^{?^-8D4XZ5m?M1I^=VA0izz z*{l8VzGRcF0pa|TJ=#z0YYg^jv6Fo&C;Kb literal 0 HcmV?d00001 diff --git a/graphics/pokemon/geodude/normal_gba.pal b/graphics/pokemon/geodude/normal_gba.pal new file mode 100644 index 0000000000..0bb2d6afd7 --- /dev/null +++ b/graphics/pokemon/geodude/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +205 205 205 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +205 213 131 +172 180 98 +115 123 49 +65 74 16 +16 16 16 diff --git a/graphics/pokemon/geodude/shiny_gba.pal b/graphics/pokemon/geodude/shiny_gba.pal new file mode 100644 index 0000000000..d980620679 --- /dev/null +++ b/graphics/pokemon/geodude/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +205 205 205 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +246 205 65 +205 164 24 +164 123 0 +106 65 0 +16 16 16 diff --git a/graphics/pokemon/girafarig/anim_front_gba.png b/graphics/pokemon/girafarig/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fded8246b690cdd6bd453be82b989d4db8aebcf7 GIT binary patch literal 1504 zcmV<61t0o}P)hiGqeqv>hOmq0lhkKu)0O%tnIJK(c8> zPNE{Vbw$(w844tSKpcQlyh#dlf~Wov%JbZz)6N}ZZ5@({Q~fdc*;`reTe zCG#XN9g3pQltJ-*{O;Y6yzkeF^3O!<@g>0S;w1&N<<#8zu}|mo0I2`$Yz~0+W4mW~ zO7l_x>&F)9;~4EGq$Qr65rr;i-+a~mNe;y5vZ3u><6XNxql@BhLDRH$mzm}a;Ejd= zXE*zkm!mnyKT|!xZmv%PQG=#O#4hB`w*6$?nE;FzWjp7e7qsQ8=R2G=CYp$T`J(b| zJpdL~{{-N-QzrnPKlx_O83EeD!Zps=`fv;wljh{1z=zv6#*dc z2EPmk?}q*8{uJ&9sboLx299eERGMrP&;YSAC5y?)c!aEhZISZ)3!C{y^2~ey-W(1gtFtEcpj!wl# z0>s-K1IEWNb76pSFEC%002cE~u;w=8!$2IKNg!;-nkGgFsByTRA_TB?ai!wNyf_zl z-L;!OAVwe;fOyw#S@%Va<|Y=n*aF<^1J{N7*<$5Q0tF-h)U4U8ZY6v0yj~muZbZui z(k>yo9Oxm?O2I3WmH}$Za$v0v#47_O(jkCbPK~oe0XWb_A_UZPRe1jp$RQL0?3El$ zWekLG=H@;CR%$j7S#^roBh11PpHR3;k>$M}Ba&%C#BG)mI|oc6JOadPj?1kl-3Sfc zD-p2JjyFR1W{Sx21^_((^rWnX=-2v+qFjNE#aJ!NfX~L4(`8cz7^|bpk;&~Th@AZL z|M4FQa>?x_bU!&S59+ z&Nt2%&Eu0J)Z|oPb6_*{ofJ_v3dLi)IRsgDhxxoesc6!5Msp}EfzN7yWJ3+}17_8a zO4QpbaSj_`w9o`GL`uUvWJ^QG@bn$#Knel?wM69ep;H>Vrvu0ETq?}rlMkSz+Kk-o zm(U@+_bmp@!G!!$k=uk+Iu!g^Ztxx)f4 ziVg)11j>QO05_;@wqX|~!eex>hbcfQi-;UX>ZZWMOppn2nbsc zc94qd+fNno*HYjWypCvgSA_g0E&>niL)dnp1zq@qaDgrWiZ0YW7m*kYmD_o7;+vol z5ZTl{V3vOvDgI3Vu;EMlO#d*F_Bs9`h#CH2qTzp;QTQ84BW3_=sL^Tw0000>Rzv{KNRGd}{(m&ZT{&)cFX>kERwC`^ctp9LK&ej-h;DWZM@L z<17wrzpj)yXYo}&@0kJX7U;{92;f}MER<5xJccEfE{&knz^tnN%X4+EPNQ<~r_yEA z@Bs7ez!HJV7Jxlp1LjF45Xfx<;@5XT-!%ch;xV<* z0Ip(FvxRy4ScpSv~e7(LmcAx>F#{koUksMu7rSYmKKrU(*T*w1pzB9sPdnGAfQcaU_A#* z=i<<|voO`BXWCO35a~3)RGXd!J;gxhKs6!Ls38R0R;dY-6aUNyM8--!vU4J_!q^#ed+N~`<^)57Y!iO|&$n_~gY3MqY0 z|F>2d0c!A_0FdGP%c}H!U``t0Kt^4G|7QIKZKQp8bGWNj00000NkvXXu0mjfKr?O` literal 0 HcmV?d00001 diff --git a/graphics/pokemon/girafarig/icon_gba.png b/graphics/pokemon/girafarig/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b79b132d607872094051f09d0e2f9f2302ee41 GIT binary patch literal 370 zcmV-&0ge8NP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H@JU2LR5*>@(y`OCyv}0l5pXiBO`)pvW;$r zi?Bf%HUzhA%VBfxXt7Q^4jJX!^vD6vZLZT}8-lHy2iCJyc*MP~Eb8{Nq4M3Ovij8X zXQ(fqxi0mCn8nNEl1w3 Qp8x;=07*qoM6N<$f?pJ&#47Ot37I~1xC>Jkb6$=?EdkF#Auywk3ov2qi_!s>3x6&FAE5|$$9ur{v21TqcGP;5tYKdXR{Z4=m}#BKrX z#eP;%Vzy)WpXutbP1pE=KwC)9GjcR2C63;ZlJ>IzycCcpjtWD$r~S;SrGVNt$*E94 zHwGB5d5Id;9_dm6x(2Y9gXp^}o4OGOK!CeGGk|Ag3ueSFlyxtnDmIFlK$Z|r?42g=0`xex zp~=>bA~RE)l9$7u*}BI$d-Dl_iV0X#N_K|l@m7>ENR1^veQ_E zoD>llVTd*Ybw~m2N%8FLeD{pka2YKZ5*hH#pRLc%N5fz6^+uo$Z<9c`vBH?z*-lss$XjQ%V=pzXIwqToMp4{~b?%xtRXpcP+;i6{7UJCF9(Qw0>94X z0V^S(6PP0jAl$gq4{Lg6C}CbCvHxCRc&PxHXC>4R_5vudHp&At!dFyF7_W2(2r+wW z0DAh{9(3n^=AwQu6o}Rrr07CanhOjNvowHPDdb)ZtSb~CDd2^R9lVYMlwsz1W(}=I z{)LNM7!~IF0tJS-ib;(S7tc*J7a*uFxCva#JaP4*VGD`E19LJ@VM1QxhFoI-zOMmO zEoO1H<6deBQ$IMxvC9J$B!H6%ap9_3J~%nWJUIF)3E=o>57k=v^ryiQ#=+5O&hBmb z=MNvS88_b#4g&-N=$b&sjSfH9^i?z%ywjENC^6hSIq;7Np8I_a09CCY5`uF>!Zx8S zR;xYKa!L7+ndUY~aTco|9xIe20C*r;y)N@w=og$fle5j*EWGUX>T#cgDA{QZ%;@fD zgd#=@kQonB!!rwo_U>pnnsU(cpqHMm?dI0)+4;p3AJ+09Jzl%9I)G1AJ^lHL@tp0V zz=*)%j^E-d=W`Yv^&VzO%K8WMA@Y4cwLoLBk3aon|GoVUor@%GgF_)W00000NkvXX Hu0mjfn-6sM literal 0 HcmV?d00001 diff --git a/graphics/pokemon/glalie/back_gba.png b/graphics/pokemon/glalie/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9c73ee9b221d53303d662343288498a64ebf3458 GIT binary patch literal 701 zcmV;u0z&Kl)-Y^Fc5})A;)^`rVoHTJ!goVUNZ#4)eS+t(#|lw z^29PvV2PxL8`}OW*@iZOV-KC^z(M=*?Jun$ir&|Mvncwoy;!Fxt}YO?0iZW$>#m}0 z6xZ6Gt82@E(Px^(x*`CPtF?I(I6y!wg5oX0v48Ri8Tv&KXz7|S2^Q@-cSpW zIaHSZsynSw4`yy0HB!~l)qIBJv^C1ZScj%Yf-8G}GiNnS#`drX%s zFxU=_V^&yd#z}e5dh;VmZ*X#FAqa(bxX$teN+8YLeWv!9_Z<-Hf243H+HB%iJ6ITaZLxfdLP zcr3EKSYu0gfs`fBhjv|yRho*TBn;rC1#&M?-&z@2ys=; zMON|)pa&QP8z4ZLI-n8RjPHg8*;Gj{P`Jwg49cAlxF;_V)AfEKb7b^yJ={}iAH-)U znw0B!Jd26si!<#naz*Av2(@k?xMR^?`H8w7a0bnXslX_ge$bp^`UgO`3cMxhqXL*n jdB?wni+^zM>tCi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HuSrBfR5*?0lFbc+Fbsv6fC#t~#oQBt2VldF))`99RUqYxY-lCS zPZubvZ~pZBY)damE>&tc1N{X~5*3(^pdVZ2MDYq;m}{V{wogjiG!0ZzYvERs#ld|h_6^S00000NkvXXu0mjf DV&;3u literal 0 HcmV?d00001 diff --git a/graphics/pokemon/glalie/normal_gba.pal b/graphics/pokemon/glalie/normal_gba.pal new file mode 100644 index 0000000000..aeadcf7824 --- /dev/null +++ b/graphics/pokemon/glalie/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +230 230 246 +205 205 222 +164 164 189 +123 123 148 +82 82 106 +164 205 255 +123 164 230 +74 139 197 +255 0 255 +205 205 213 +164 164 172 +123 123 131 +82 82 90 +41 41 57 diff --git a/graphics/pokemon/glalie/shiny_gba.pal b/graphics/pokemon/glalie/shiny_gba.pal new file mode 100644 index 0000000000..c45ff937f0 --- /dev/null +++ b/graphics/pokemon/glalie/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 246 255 +213 230 238 +180 197 205 +148 164 172 +74 98 106 +255 148 90 +230 74 65 +205 8 41 +255 0 255 +205 205 213 +164 164 172 +123 123 131 +82 82 90 +0 0 0 diff --git a/graphics/pokemon/gligar/anim_front_gba.png b/graphics/pokemon/gligar/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ce592ebdf5538c11e5f70909b72a7b6cca881e GIT binary patch literal 1479 zcmV;&1vvVNP)|MuSh7%_7YT9itQy<)}g)ml0Klxh$V5dZ)G_hi^R00001 zbW%=J06^y0W&i*MMM*?KR9J=WmoabKMihW)lLneah=+LSU?ctmF+fv53xqbHleDP_ z$dfk~g3ROQ45`U22+$?aU}Scd8eU=wFwiZv{z99jYXz{NDYQayfrn}=``%F!k2ICN zK_3iL64k7c9hicbjechXPq6L;NfR<}* zn70h_sFeB4J6!oQ}q}T*kV+M>ge!1P}(EYsYskbJ@-vrFFa@ z&6VgRsehY3Vs0-@sl|+90!3|7hfbcSTa5M6zX7nQBPUQ4lP5G`cXx~(?7){@YW}Gd z!@xdH?wI>c0s#D7l>n969Y+k8>R99SrxNgm$?3r@4qs1n=I~(|I1fYPpwBsvXYs_H zhNJiQfy;yV=f8gWt1=QnhS%A0fDG>j z(4&-MZJUP!09fGT(t$4C4M&>~3srI`;kql<9<|`};K#IA9Ox8=nTU4kAaIe+I6aHT2M&sS$a|lr~ufILE)8p%K)fu$4xw4B^P zFo6tchr)7%fy8Ja_%ey)+i)l>M;OR48i*!5Ogmfx$HH=Q1JMHXllC%6+eaO+as#OY z;1GWav`})Wg9hRY1DSZtCf?~1&^+8K?4^Mqz`P)@Q|;nTW9J5vfJQOb&WC{|(A+?1 zB6ct7eJVUCHxQbDN5Oktx)b|NDj5jHjK%j=W;qK3vDD1|WB@D&3`FdEAUMLrit7q2 zhs+Hmrh65@1K4cl29j9OBq{X(z&-#8N@6|U?@SznepLj{FHPRjMQxBPp;lb-q_-eB zR-&6ch9Nd@DVg3BdjMa!CX;OUxA!}wGyI{LKuFFJ&Nhsc6FwalBnKQOlnsP~#T0`0g-wowa*>qa&92bYm^)rSUAkmK(5Y9nv^-rB%28Xdbk>vfZg3MLp?DQp(rRA zgPTZhUr*B>pY-=?U?2ucPL-!}h-s{{re!-ffXn?y&#>002ovPDHLkV1k7ZsdNAU literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gligar/back_gba.png b/graphics/pokemon/gligar/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8179867e9c4c1c622e30e22dc3599906e14543f2 GIT binary patch literal 768 zcmV+b1ONPqP)|MuSh7%_7YT9itQy<)}g)ml0Klxh$V5dZ)G_hi^R00001 zbW%=J06^y0W&i*Jen~_@R7i={ls${wFc5~#$=e=T@&nSOk3nmtTMleCof~_i~=x(se$Zoz_3p3>T-&JK%+6+0%`-KXs{!o2VdC&>mGK! zL6tdRT6aRAU2x7rOT9)lP*^QMn{Z>aCmN&el7;}+1hW&?8-tjI7VMJLy-Ao`DM57+ z9|NE~zy)F_keU&w-2w;b05nL2X(7Ow-l3-nkXa%WQek5g6X4G!ZS0bINOCa)EsFsZ z>|Kc&I3FDV*o{y+0IdMwEd$qy2bvr%1mx%k>7Bt2ei$5315{;}1y~vPG%IMW15hn_ z=3{+t`dQ&P+ybZ<0bCnD#aUue=vIKh$XElX81T5{KcbES??V3W=Tdkz+V27Q^g~A! zRQuaY-2Lie3IuqG57@}#lnHJTpF$VRMJUfXJzi|wuXZYY z9_r#y+Eb%ENsr?SAb%Ckjb(xJrCS{}6l|n>L7p5BB(eR;*(M}K$cm~amlQVwbg#di z=}mUEKq77gKq#^gYp^ZjfaJ%~l>p~-ab1Fa?u{N9=L)L99m^JAIa;@m4dm`Jx}Vsl y#fJP&|EV`6CqQih=06a$Al+3E0M}jq>*EiMJft^eR6Yy<0000g literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gligar/icon_gba.png b/graphics/pokemon/gligar/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..baa8414a75344e7b89d144b7da34d7b2d66084aa GIT binary patch literal 425 zcmV;a0apHrP)DV$R5*>*k}+;4^{iEEE{V#(LnRL=QKMF^s#;k zEUE8FJCd=3^ofX=RIG+h*F-0+aO;qr4@oQEQ)IqXq*$U%|1~dfPb_Cn*CMp#ltT=s2PBO2Z}bYz(|?V!YKiK80!eW$^*Yko`9H07Y|XvhK5XC4_b zPZZ^$<3AkW1Nf$+FkKV|;xz+CVI0)~@M2I9Ci>t-$%U~=7?i1F6-J|7JG^~C7_^v# zX@W3Kn0F<=FbCje?YI_hdS`ZKr$LenF00001 zbW%=J06^y0W&i*LJxN4CR9J=WmN94>R~W}1GzYE0dKik)5HII;cF|pyE(ZH)2`vha z)h&o@9qOUeiELV;cUm&m=S6`QqG-|5P8TQ%p-bPz1Ul-Syjwb{l}x4L^XvCc*W!D3 zr$C@X!5^F?^!@I8-}~Ni|35-E@t?$6x4Sa`(J`elQN5Q1d}q}gbRvIgq>@#@vMfq_ zPnX0b-9W4RZExPAt%x{Gt+Dp3PP@h~wd$=1NUhO<`rm&p{)8`C;&4|5nwHfPbJ}WJ zQJ;G%@S(L)?^tz8pVc=`5W1!Bs4dht;AYrGi*B@$wwDH|tZp^v6H43F`-c8m3Mh7> z3iiC%Ci_N7-R2s#J5=^y&+RrL#vLWERTs|uA*HkkK#!2JQa~dFfK5spUpsSWc2Q9V zt?iqn;w+#*!*-s-3hF@|=msIR#qncmJ16ZKF_bB3y1s1+s6naYw8bIpAz4Bz>D#-6 z5aBpZFXUos=$|G47>k$!P!mFgob&O4ZYF@KaRHZElSvt8+P0C{=5!ZfSR`bOy^+8G z@I({S2>|-!lAXIO7>C?PSOqXH0r19kUocr>BJa5lTnKFJte>8{uFE{mM`s8pn#8jT z^s&w$?-Js1Unqk_0&4CS7}H5rh%b4cjnfZ3zH`N1!5qX_N1QXyPXUE#t^XP(MYcAN z!oD|10p~x9ko`sofBSaJ5BWF+481|vhe^RExL*+I9^gL=-Nj?biTEti>n|ffcqH>d zPJsdoU>%67oB}YX0FU6<@>W12&H_jd(lh#}1WXWskmYV-#QPHooaUAo@d)s8OB4e5 zz*z@zJ#hY{;t1ab;Ea>HiJSQUM(-UD^be%+SNEy>m1Qv2nyoHG^HDe3V1PY{wOfjN zhQa7qkCxiqDE3g6!DvPRXm_L7Mi~Y}+JjiTX#}YL0qg+iAA}eLzs85250c}LRbVOZ<&X~_xGlYw?;NP-~j^&xb4`{6f!rl=H7Srji{ZjC`yQYHj| z{u21*XdHPGHHI<3^3;FmjpDqY4P5f8*gvG*M-*6~fUmL#GJ+rwS2+dZD&WCZ0R0F<=FbCje?YI_hdS`ZKr$LenF00001 zbW%=J06^y0W&i*JL`g(JR7i>KlreAGKorNlc*&5Hmx!+Q2dLz8mM#ojmoBbIGgmAX z-@t5DmhfQl%1y4+1z7kZM?Zlt;R8ej3DTOV^!n}`0%xqURGsplEWMxq?|<+4>^Lv_ z&vHK;0WOXJu73n*oCG9CfIqylmMx~>la#z^!g)xgOx?jWIZ&KCzAC<4Q7 z90T;fyzJ2pT=mVd?$c#sZ;ND#1lTp*w$AkozU zx^XwLfMv+mkN~y^Gyura$C~Dn8o=|Q&`Pk`iW_L(uK6CDbGGY;av0QXKMP*{Y~&B66N&7K{mD;6F6034j;)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hw@E}nR5*?0k}(PbF%U)P1j%jG!rLsQT1>HEt}ue^);3D(ZNx38_`L(25SI zfJxhk{XK)!COoMbOg{-qrFI6)9hRd-7beXMWBN^57=Z7>{N9fjo+7C8UlBlE00000 LNkvXXu0mjf_=Af4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gloom/normal_gba.pal b/graphics/pokemon/gloom/normal_gba.pal new file mode 100644 index 0000000000..7b08612490 --- /dev/null +++ b/graphics/pokemon/gloom/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +246 246 246 +255 197 82 +255 115 0 +238 74 0 +156 49 0 +213 213 213 +213 164 98 +164 115 49 +131 82 16 +98 49 0 +148 180 197 +115 148 164 +74 106 123 +16 49 90 +16 16 16 diff --git a/graphics/pokemon/gloom/shiny_gba.pal b/graphics/pokemon/gloom/shiny_gba.pal new file mode 100644 index 0000000000..c5e9139803 --- /dev/null +++ b/graphics/pokemon/gloom/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +246 246 246 +255 213 131 +255 172 90 +213 131 49 +156 49 0 +213 213 213 +238 180 98 +197 139 57 +156 98 16 +115 57 16 +180 189 131 +139 148 90 +98 106 49 +57 65 8 +16 16 16 diff --git a/graphics/pokemon/golbat/anim_front_gba.png b/graphics/pokemon/golbat/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ba99936a9048c1b60be1607ae909fea1833ce3 GIT binary patch literal 1123 zcmV-p1f2VcP)DuTPZp zE+n)-y9gz-a|t7mHD@zP*xd5c+P5{PHV0*YNrL{~A zB+1E^xGhVoQD~LJc(h$`m6vU+K_L-BJO(`=5oKp$1@-jwt*;<}Xe6EhD0?2X0$i&l zX8O3K6|k>>Cs2T^)ip<}6}3n1b_#+t7Qk^)dt^cFA#dxBFkPtt%!~wAGHL2)rRz0- zca$=XDVaBobWB|X1nU0ZZz)`ZR_ARO2$b_20P04*|K<;Pg}qg3H5zU7qeuh9nD1|2 z!W<;Xh3Xm&1XxZPVj!@kF=Z5bpW1+KWlG%_9~ZA_@E4(bm{KSkSea*mKfl}tWI^;B z3m0qvnw^#by899k7~Z-dWFu?|_$?{e&;K2sKgpvil`}oQL_M6d|NTrZv z{K)`h1Q0U&Wa@;6mw=KFL}j0K`Rbkd3OGFvGX;-sM(#8)pBo_RP2@b7KObs9KhSO8 zNu`IcVTSo!F9UBcjet-EybIzmqV52Iq8gwqy8KzHONa8?G1NjQ~rJajI+B9k$?NPT63s0&d_##_O=k@tPU& z^~BwJYw`VHih%D8rNgVM2B&*6viy1qGPeBZ@jU+bBMztQ*uVLgAj)_CG=XWnn-<{= zL`IRl-nk!Rs*yf}>)Tx&#LAcg;)ga6RcAUs@S~DI&|VO&_Xm?7@OMZA@fi@AvnoGe zCLz7Wy|9b7JnZrVlLcgkr5$BKI_&ZTlUgEMTFc-^9=7=b@k5^W0tC#UfhIq={2)b< zS#=b#f`?sx@D4Ih9(n>AX!C;yfD}J0fYXEIq0{7t4Lu}3Ru+IM04D&N{BTlv<`5fz zh5usceUl#wmDo#w87g4elC?2n9SPzfO_!&jx})1i!MLx zYycknrXcGgPrCeY9uH>!Aee@9`GKDO_vOH6lXdyQ8HzA7*UArr8OOEq0~x3zeP5Fw ph6n8alldWzuBYC(y?yBFc1b{1|;$TeV|mba0k{zeSmUwVCWEHh71fX z~25ZLJ&+60%{!sDX#2bp;TbX9M;hedO?|k1Doy+kfcDMdx*)L04UYHjXX(U z0HnPM5hU|@KS3%VarGS- zpeZBe>sr|q2KLl6|M0|)Hl{ptDuX_u-OeMJkZ00000NkvXXu0mjfV;JzN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/golbat/icon_gba.png b/graphics/pokemon/golbat/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..25b3f6821fb9fe2d0bc034096d22714c5adce63d GIT binary patch literal 355 zcmV-p0i6DcP)DV$@(lKttAP@ymPT;u%qEEH;N@&uWB1{`!onp5~f~kLO zt&xG`0ISgP7y}-@F>gJV8J_76AoQ>rqmtW{UcjM2g>s_kxs^aR>|k9hQQ5Yn?ClAp zatlViv*$M?+l>*u_3nhbMy}plw40#Rz}9_S_X3#V@&yDAxpq)cIaBv5T9mu>?8SmD zGV~JBl8o`CVJWMyr+kGyWiboMdDBDAyE*g|lzxIzId)x^g2O2Ch9xDhZ@imWl1Iv^ zheF=Xo}b>lc{9@d6y-ktyU?6wG0JZT^7_!vt73jiN4hE z%SyCu6&P*bbHw-BgWO!}g~485lA4iuq9jST^u*xBcgI{1d~1VKm7-@B6URb4+1_O{mNau?Dcv-Df&52tYUz1jez){-??bG=i#cNR}ziV>l?0E zp^Gshqa%sDp(Hn4hiZTN!ZC#JY2VL*>R1btdumR#l7QoPknLl{Z z+=kY-$WUhf;PEuDB>W+`@rT}l@P}lPQ~~)zaN`e;I{|x+VX6Wr?GK$j=AR{jd4FJj zvW73_{DE%QhqEFyGwTmzrAa+-W&Xeu@-6d+J|tA^JmU{9=|4SrWWL6_YP)Kls#|SP!xtyusT{gl#(r$-OOp4s2$6PNJo%Ge8)tJ ze6Kf#O7&&y2opc8>My7u4U9%Eak^AFJ=dmu|OkXzvBEwNtMG?r7uSRKME^G}rH4!24jEt|7b?Z=xmdZ3hkog@dzl z;0!~bbnamJG&RH@>b!G}StDfoXNNY{(dQY$GBcHv?#35^(8oPImze+rDO22#?n!?M&u0W6JZ6FTE_qVQ zr5jXqwNfK>uc-*(d9gkfE&3x+3!SBbhVbQ>^wCtfidbai+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H;7LS5R5*?8lCchhAP|Om0(l46CE>O|jLw0yy3xrgioir+c)FV~AqvCO-G$+6c45+yUkfwV{TPKw zI#e!1VfuX9a}?&>4kD{@4hmt!bS?hF6$Kyj2HYKcxuK%$P5=M^07*qoM6N<$f-9_- AB>(^b literal 0 HcmV?d00001 diff --git a/graphics/pokemon/goldeen/normal_gba.pal b/graphics/pokemon/goldeen/normal_gba.pal new file mode 100644 index 0000000000..d88f149325 --- /dev/null +++ b/graphics/pokemon/goldeen/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +222 222 230 +189 189 197 +139 139 148 +98 98 106 +255 197 123 +238 123 65 +213 65 16 +180 49 0 +131 16 0 +238 123 65 +213 65 16 +65 172 164 +0 106 98 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/goldeen/shiny_gba.pal b/graphics/pokemon/goldeen/shiny_gba.pal new file mode 100644 index 0000000000..d2a8815232 --- /dev/null +++ b/graphics/pokemon/goldeen/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +222 222 230 +189 189 197 +139 139 148 +98 98 106 +255 222 24 +255 156 8 +213 115 0 +172 74 0 +131 32 0 +255 180 139 +213 139 98 +65 172 164 +0 106 98 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/golduck/anim_front_gba.png b/graphics/pokemon/golduck/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..87b2327ce6f062995180c4c1d47640f9957632ee GIT binary patch literal 1234 zcmV;@1TFiCP)a}fUk|E%8sl(f}ad#o{1Y7h_*#W~I(00001 zbW%=J06^y0W&i*LP)S5VR9J=Wmc4EpM-a!iw2E6oam=J}s24CI1jq}x$RngnO{ED- zT_e+R=SrmvKg$uS5+DKRD7mr&-rOD2u(-V?-54r#yv*#86uG;{DnJq-1F_NmZa#Kr z_di1X>nzBHNDl$iTm+NWujy};i)kxBUr*ya7_|eFU=-)mcA$t0KpjEu3y%g+aSG%_ z1a=`fzo5^G3B(CNyp)L*B{=?iK4A~QhAZVn(c|kExhTv!qzYhZ0Y?gA1ANyoP8~-B zh*P29m(PFT^*FPEt1}gA0)GA00BENW%n3+yrQmzx0PPfl-U~p~ss|8h&C$$%AN&NL zB{3qZ#|o~W_ckd^ZysEvBL>PR3Kriy-K0?L6e|k`Qi}5AIRVWAAN|%k^@;%99X_NW zx`(_#Zy`?dPe{V^Prm{#l9iM`{my5V_vS=YEu!a1{7{qwW1=4`Vy zaJ#qu=(yhxUm{z%Y=Hf~IqLS$!U{0~EVBm4Y#^*lOr}(*$s)0VFnlRWfP%J_T}ZG1 z@wQ%4@o*mjvI`er3r285Er;bTrQid^n3^(8Fy#hwJBw^e4Z};QeXS?>kl}`xkkUm5 z2=KO`EO`l2Y9i;Qn1a@$1$Sjdg`m^CLg^^hlmRYyztL%4x?y~40QtnoiKn}<9GMIo zz|HZCVZ`^QGC=A9t_FY*a{^RG=B7ZGIMx`m1BfdhAbaooC7PaqGV|=C{PMg%V1S>A z%ymFzyy*{0+NALaCJT36OpD*I20aEMeoYQ2?^^&#$B^+6 z-9rmdVpeha+zh@VlA7Xk6G-1#3-Ru^VOp9K2GjWb z8$kBx!F_|CGcrq-m4`@6O3eVtx#*^s@9ME{Oqq%C= zcs7~?+BKeYnEwQp##=z|BDOT%0%#7{YP|0a5@{4$8gJX8UTrkq4+yc<_*THu_?-+J zsorY5Q^mWlaszBM-T~xAn(t}66+`NT<$j~_E--5jc&+g+AiMN9QX{g)(@CP6gkJZ^ z+q$BMxB+k%m;>vG7CISkfFRl#Qsh(AB@-o(S~S4)dN+q&PH#04lZ3m8g*Pj9yHfHl z$+Brzqq~@?{aMUliD`MB+z0>{pcLu*x~bC(2s+0aHh|~q(2mz|5D<%|=XtA@HwkqZ zpu6_~NLSh#DOsl=JbqKR=2e`9Vu?0wzvf3S`7~st|j}-qbK+-`&$^ic=uEhdO zft08sPm{`Ry9S_EP!UZSzQ!d$8~r9A^R+(Dn%S~b*W)!{-!9Gb0e#dVSDEi}m3pz- w%nuX^E#(Z7jaM^2P$VnB|MP=uf8+e{7s<%h%4K7q&j0`b07*qoM6N<$g6Dfg4gdfE literal 0 HcmV?d00001 diff --git a/graphics/pokemon/golduck/back_gba.png b/graphics/pokemon/golduck/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1422a73ae1d670fc07acbd8f45d9437931bff925 GIT binary patch literal 630 zcmV-+0*U>JP)a}fUk|E%8sl(f}ad#o{1Y7h_*#W~I(00001 zbW%=J06^y0W&i*I^hrcPR7i={lTC8lFbsutfKt9?rnx}1OplQJNYe`#w7fS#YUj>W za8{eWi%B)b&G5WfbHHv&kAJgmxy zxu?o)2ZS2)45~=Yb%{6$1v${nRP%tIfn!n~zzbQ0N!}Bnu!}YU9ulIAiou>CD+V5@ zb#QOOzFsk)CT913X+{g&paATD^ZNMbVBlw{-!Gl&e#o~RaQz7AZMh#{L;W0p%isWY z9JqcYY}D6BK)`GbEcUy5`W^tV!0ZA3xOU%OGoXbN1epk+BV4V)36!r(0=`DTWOqE% zHQ#Nd?z-m)7@dI*0A2&oGQb9~H~?v37>!|p8RYxIo0JP`dP)Lb18{0KFo4Pd$WGVp zX$=6Z8~R()h#NSsIP6c80L`YNYveiB1fUFQ4cs{| zWMNX^1C^C^n3nWtd8!dnvK-K+XKxp@VUTH3ix!>5F71Hb;()ou+9v-x1n}x2!Zm?! z0bmOq2$N;-H`<|&GAy8dhJSSl77tBi$_EYU`sQrbE$*^8EPI_)0RC}(0{>R@>_fiy Q5&!@I07*qoM6N<$f(WG-?f?J) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/golduck/icon_gba.png b/graphics/pokemon/golduck/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c922834545021c9681551281bfd354fc3d420c GIT binary patch literal 351 zcmV-l0igbgP)DV$@k}(d#FbqX=g62}rS}(~8_uvGX%1W=msXBCGup-rw z=oH#22}zkiVgOJ1PqJf6Pl%r?>2|=o8U-JG1-xhPLIK#I4##rlNo$4cBY~?S?Y7|& zn8T#e6@YFNAUdfM=(`aDpo9qK-gZj{&fsF1my8&Hne7>Q%?aEsJJzT|+Fu56(g2%$ z5TlS@v&!o?gBaVfh4y()1Jn==#euZ2GA}jm0g?F2`l>J)Bws#{UK^-h0)wTAYhHT1pWA0RMx7gAfo9X2s9E00001 zbW%=J06^y0W&i*LjY&j7R9J=WmN9Q4M-<1max58P!Bx>khmtQqL7BpzVr?r8ks=0n zTg5{WX>x__l~QaQa1lkRm_@QunptVDyaN=z!nsZ1gIIX+F1nZhEX#Tq+eDF);v`RD zF!STRH#2XUpJ9B8gB$F;(Xv4#X`J zYk&UFCf2{`BYV>|g04{6?50z?6)Cg*l8L_;)=;`*^vB$%xO zTL&|92{4WnA_kls&@hi03BVYC0DM+AO^fOIrUshCnk}2wfn)3wz8M2Vb0-TJg!1*` zk)Hwped!0{zDjRI$4y#D=@KWi9`FcngLJpOVf*I;eEVIyBQI#S&n$|@3)f!(JKc60 zy;xtg+g*e(8M~9-r8`W4zU+2Rv4XocBFN#4Ssm%OWu$@?(3kQQYroSGmVoPb+=WVx ztI(4%AW(vi;4|y`VsY(zDp_Ws9|KJ>&;fc1KsoZt3onh(?@0w98~~K0{9~)EJTQJM z0mAVx23}(RqN03mRR$hjS3t4yW~_+uuma!)6M+bOZiLqrP?}6fbj!mRsG#;z`9xJI zm84Ze6f4E@WLt>(uLIdDDMe?mzoJlHaK1Y3Ns)|geqy3Z50Qz#uAbq#m9vpa zo=BhYMHaYhOBV-Xqdq*CLI;q&YzFj-i{n8Gh8>JENcT;q#%>q8gq6i(1!RgS;D4ni z#(X)ytNLqzF+d3(UTOKuqKkA@CWS!*r84UtA&2ra^TjgJBJ;rz$Eva!ir1x4_JbiB z!^>tcc0ZP~J6lj54Lu`A7-wA4}Jp=8fX}4;$y7 z$NxW`1>;#TjQ>I~3J(OMmlF)*5y80E13k20B>tcUBM1ScdVsN`1tawb#;h>D=2yVZ z=rR$EZUQg>$gu+YP?W4cB!Ij6Y2A@B22y{(i1dY$0&XlAsXu5SzA;A0Mhpf^VC4^b zzX*gUlMutDqNM)7u?i;;*cIs~z`)gl0e|qcKLngvcEAVer8Dlqh#(l@PJzpOv{9#&kN|hzBYkZh!!MF)sb+hLug7MeUK^-h0)wTAYhHT1pWA0RMx7gAfo9X2s9E00001 zbW%=J06^y0W&i*Id`Uz>R7i>KlCf^WKoCSJBL#^ch{RW|p`-Gd&K;Z1G=_AkFUl7< z6sfsLPKy;Ozmmo_N{Y+w-T?-iq(~X2vY59sW1!c&=%T;q{q+}LKR*BL>xb1@qW_j_ zon_hToWId|ChDF+zSafVMP|sXvl$eok!0Ju8>2FAC$h#)E< zn0Ep}s#r+C?Ga#0<$z=sA!5Q$O(2D_3LQ|R14c<>=Yp&yM^LyWBC-5%*m))MW?UYj z6%kZ{n(qrhA~+mt8EGjXP}4>Lz(o8+rhu{(pnQY}fag)LQyc~a#Ek|RNqOjjpyo}} z{X3A4c8PeeV4ufh_*WfNa)r3%3Kbp!Jff_W1i1ZG;M1%lai8NJv*8R6jAqd zaSY*@nVbLwNeKaB2^-83Cj4h``okX}@SB zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I2}wjjR5*>@(!FZKFc83T^#yE>PFiwUTPM$*@{Ab|O7t+D1fqTg z7f)W)NSO)_7di5WZ0O$B;K6@&IJ*^8jxf7){jsgNyA{`N}{xskIdF;V6shG zdXd^%>5;6N&Xt2TQZv83&%xW%i$=I|o5B;q?Ny`H)3UR?Bdi}MK_@21G@(xD_#-_zYmCrh%|4mmJb z_x$v}@7?L{9?QCEt6Q`}Uk?wL1J~iK_{Cq#fhhEKhOi*VdX&6Y1bE)n#id^gcs)W= zT>x_vKp@k1KNHIFyRziq-3_ylz(F%6i47?x+n&SCAz4EFV}C{O-mc{yrrKDoZ36I zU#`QUFTUAQ0?~Lc*N9&NxK!>t@}ew2d{pp&Y!`=cZFQ6c+l^8{?#X}^g@`k#P3ycY z1Js)+UnWeU_w|nk@b(#!;$Ud;@mvC#nQ(;th^MJ#VZWdV2keDhsBY3XGJx0~$c0LKZ#NE804nzABG61N zinIszB9MBN*dD;u-5eODe@Ovh4{UMypG>}G0G-1V_5d#b=H$u%{w4t0A+db`V44wC%`oJ7+>1`y^G`{Gto5vHa)Q-FnCNFeY2<4JUw2gJSC z8N~+TIOBuYm1RXccH{0tvC=S4gCd~9K3@Ko_e|5s06AuA8ri}3@4dXPEx5bQ4!8u0 z_cYW9DL$F*CDWir21SD2@QVR4&HJB9b#?oLyC~6-T&H%490!2&qTTM4oNN#PtcfL% zVgl*01JW%7(z$7OO6yQDPWM+3__VVe0AfW53wKulH|>9J{{TzmDfgfuHYfl9002ov JPDHLkV1oZ$`oI7H literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gorebyss/back_gba.png b/graphics/pokemon/gorebyss/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf24366bb10ee9611d4283c7efcedd17b865209 GIT binary patch literal 560 zcmV-00?+-4P)4lQB=iKp2L*(U8te{tySp@)N#;fwhM*9UKTUIAGFH zV)`Rwa53UL>~!}8?nHwg@9*pYZxVK7 z148x=kE=ci9Xz|~;N-wj!zo+f76>gkgbfNoIiX1p20Vh62@ehE-hf_B`uxGl357X5 z#w7@cr37Ju&=3>Ky1a+dT#Bb8By^=yDjGP1TnIpK4}^2P3r<%^F!u?|%?n;Q;;SmS zn>d*PxC>Qi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H{7FPXR5*>@k}+z;Fc3xO1UqL*yG?Gh<>nghdB~1r1_b&~qXD5u^cRZ__JPROuaNT`$ec9o1FS8vvpEBP52OQe z^SBZNEpg?c%P+_yCAKaBz`$m%0y>Vb6>uT|4*Vt+Aa(uJ|G=ZPo8-GK`7k~mci{Ob zz4ryUPEM!uC4;Mr$G&8`Vo2rbAC~Phe})>Y4S=+r0VIJ~0IVT7QHE~gs_&1V!XGeS z698ehZUh`IsjGmEPAU)$k{1BUAP-7uZ0PZ2+W85=W)M1dH|PRjGYBNP8+0zj c?+vQ!229AIchO>rYybcN07*qoM6N<$f*dcS1poj5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gorebyss/normal_gba.pal b/graphics/pokemon/gorebyss/normal_gba.pal new file mode 100644 index 0000000000..432c0eccc1 --- /dev/null +++ b/graphics/pokemon/gorebyss/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 197 +255 255 255 +230 222 213 +205 189 172 +255 205 205 +246 172 189 +238 131 172 +213 98 148 +148 74 90 +131 90 131 +98 57 106 +123 106 98 +0 0 0 +205 115 255 +172 106 213 +148 90 172 diff --git a/graphics/pokemon/gorebyss/shiny_gba.pal b/graphics/pokemon/gorebyss/shiny_gba.pal new file mode 100644 index 0000000000..6933750055 --- /dev/null +++ b/graphics/pokemon/gorebyss/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 197 +255 255 255 +230 222 213 +205 189 172 +255 246 180 +255 222 98 +246 189 74 +213 156 41 +148 106 32 +131 90 131 +98 57 106 +123 106 98 +0 0 0 +205 115 255 +172 106 213 +148 90 172 diff --git a/graphics/pokemon/granbull/anim_front_gba.png b/graphics/pokemon/granbull/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e077f8b070e68f8907bc3e789678eba432213b2a GIT binary patch literal 1268 zcmVN6jH1YE>gZy z@NYB8U-pMhJv#i!M;;*4ZPB}>&2VgrbE!L@D`pAG$IFvSW{ z*CNs_QRyH?xCmex*Sd|xyhX(!y>Ng)c5^L@7l8aT%7@STXNnNHz;eW@Ki~a$b+2bU z_5f@-O7JJ6RME~jj{wvVXbXC0tyHp{kvoN99+)nW^MrtU1|``r4@@ggsRoGz#A%v3 ziOOoBu|B;=)q#wZa(;`XYFfm3g33f-R>M150DCLf5nKeTp+8`Ie_h53oUiYWz}+*g zMP4AD9{kE*dZ9YlY~ux3N_pln0hfLtV8*OK8e^_IU&&hg=4NcRSD!ZiSCGBFyWJAd z`G644EO58oZj3h%leP@Pw|959+^kh8JwU}T7y-QH$W`t}XtDf_zx~7)ZON4fU~R=W zQm+>0sK!cx^G=4U?2=`1j;Z=~?Ym{H#vQdR`OEj~k^nXUPK=R_UQoL8>kbG=hKHC= zYOOismjvV#(}`jdZ3%O|0a#Iix!2eM`i-FjWP~0dYqX}SnsbVV=sqNTEJ^@KDi_#S zZLKU2ft$>9x&v&@l^{JptRBm{gxs6UNBb%Okh>8A_T&J_JvGIi_&rzbV^Gz@&b)Om zVQfahmbo7f9bO_|+milX#B;?W2^)|>y^ zKV<%u|HQKPu*jHKNra8w>j$9q?;$eOEdb}V-)Q^0JIglrIjv5`h28$K+x;nGhE1!= zi6$y?1xA?8r$6YqDrq~??soPj5#vmppQdGV6u8Q&(}y%}tbA~QkQ(FrU)Fy;6bs3H zz+^-t=-t}N1J23s?C!}Z?B@>w)LG?F;}DSb6KK+QskLDqCPhYBIyMY^N-ZlfAEI%LvCUx4Pwdd?Z4wzVC2Dx^IM5!A#@$dqz7CJvCu6R zU^R{xV3^ra&q?E~jsg2&o)`WZm+ZHJlB)CqtRMAunit*y!&JWtjsijYIIE4Tk*q~l z-Eb>mE{_O|v7s4DALhs`r)1rHH1B^W{csGJ+>iqKVC+J0VgS&GAmG;gTBq(P4t0GN zFmZFcH7kLXs$q<VqNQmY*7 z_7_>DiVyBWVX828Z0Mw-z0?Enj4&h#NF8X(cX_$75u*7s;KaZVSdieo-q2c&@Hr5$ zafdW|a6Z1gHXSF0;iP+Ca%g`n@>dRUs5!KYHFFh6sP+P6xBWf4m8mHniVncjJYUqo z*MZUkFDVeZWoI1!7r^QVk3W$1Y|?4gJero;JCf88Y-NG52O#;-OWEJhU50000 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/granbull/back_gba.png b/graphics/pokemon/granbull/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac044da63c60ee0a35a15952cfa4c8a61734447 GIT binary patch literal 627 zcmV-(0*w8MP)4)V=PTFc1K6OR)82BKaRLER`@UjQIXbM&e`04zGpO zc5?Fs%_Ed|>Dht!_=-AKy(!{;+?_vy5dU+?%(*w|L?XrMIInyjo1=VMV)qVEev17b zY1#HYRgm%klzrc~2#wZi+as6sUfXpY!iU!RZIkZMQtP%wy9YGYp2ve)Z-CE7aN&SD z)9^muMNkyQ3{rZKOTRc@zz;zqT(r5C6A1g#pr1Xw{24$2h__dP1%Lnm;FE)^UtEY> zQVuSDM{chUJ-+szN@PC(1|hz>(*#LkD0=+A)(LM;v-hF<1+c+H(xbes3nlf)`&IlfV_vqGbjWTOC(E>5jaz+fsepJ zW!FHh0C;dd2Krm>Dpy31A_ugc-;FjJ;>}Oipb9@Ku@CeFOa%XS`~hT{oBgGL=V$-` N002ovPDHLkV1jGtAs7Gv literal 0 HcmV?d00001 diff --git a/graphics/pokemon/granbull/icon_gba.png b/graphics/pokemon/granbull/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..89beb7a8c1282c2e3a7bdc6706cd07538bb46db2 GIT binary patch literal 352 zcmV-m0iXVfP)DV$@k}+<>FbqZ63s^(O`Yt`V3eaKfxW(#zSj3UA? zX=2k^v$Xwy20aj;0`!P}bM$L_4;Z)P4H#7^*!hWIXaN=AJ}AQux9}Z=b|?58kRO0V zMme=@o*%7p;sRMZiRy^_k?Oj;T4C`ZbVgF|z;}lj=M_j&%h`ij*s{5=~+Ap9v z0`GBJ0X499M|PmQ5;sxUNIJL)<|#%8t}JERh7a@~@@Iqz`Xr2`Ct)P52-)ZPpR)(3jPM5H|}#lVDmn|xftJf00$0jdSN2p z#<)djPG=N`*^{U3CI=m4vAA&LA#j_iUHocU0A-95^9E3uYs1{lKLF_J?1p(JFRN~s++v_IG`Hr`wW(6mI?ry0B+Pol+Nofr{10xFDefGKVpJY6A^2KL{0XD zr;ufJzUjIb@OV;__xhv?I(ge+hyE=Ah&#RP7CkhoCpn6!Zp5}jOU#R2l~(~w%`E}W zBxV56Jpm2b@e~_cglnzN(XxI3;?Q!8cfCbeMz6NgzJppA5uA#p# z15s}TQsK=#PDqXb&_<@#L@xm6U3}F8p$B`csU3gE$6au+WTl5A-X8y?_SfS;?b-4( z2n)cNhmkmgT@Fx_nH?B)jWb#f-5S7CG^pJ_j$eN9WX}{kz0w!Pcth=%RgE)Ej_#<00)lH8%BX$hx&}@HGnndMACEd4a}&zLJ|jaKp{5 z!=MVwqlO+L|LK<3ONrP%#kW-sQ2G@xRGh^L64|9Rl7m0Fi6W@v$RYR^TRGkV9FWPe zl7}}nzgXcOHn^Xk<`plENrX8}TmI+06B*ZU@v($w>(@MmY3_$dCR z!=*B|R)h*UPFF@D6J&eH0ZlbKSE6gW-9X$WKCnN498TW=ggIq9Gk1|o0+d5OQggsO zU)9clp8+T%2W7O|1TQ%+rA;DjE8w6P^MXwO?7C3pyZU-r)=C#J{j&`w6OFxpG)bdm zHsW*tI{i7H{xX;E(?9G^|AW*v%Y=>QW%|D&pqD$KG;(90;x}$;nf{%GA(m;F%Hk`3 zkm=8F07RAOK`o1~`~lNnhqpPKGd)=Ihcx}G1w7M(HGkNl2OIv7(SwXXZ0SM9A98vS zxX$=PMh}qh$Jk5!A)^PlBs2ctd3{@loIl{#3Q+zJ{*VFwBY&Wq{)|7&BW3uQKRo0^ z{&1I%`2(E&oIgPIIe(DB{)6)e`pF+ez8C&LKl#H)@-Nkyzt~hW4yXVC002ovPDHLk FV1g290LB0S literal 0 HcmV?d00001 diff --git a/graphics/pokemon/graveler/back_gba.png b/graphics/pokemon/graveler/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..79e87cee9da8a531063cdcc256fe849e10c0e77b GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*L(Nw{r~^}?AfzZrc4nK z5ctpV9}}Iu+Pr2azSMnHtW{f3d(SsbXScsoHpyNuQ%=?4deWwFpmw33%Hm~}uj0AiHTr*v z+8CTZQ`=!Rb9?quhtrMcw=y(8woa90YEstES%{&}} zmI_<3&C$N)E6iJysY8 z6S^$2%=5@@@0kxaFkE^g(qHGTnKXx?Ve+%}%mx!oB)wVH9-U8SoZGmRW&VpDH?199 zj-Qp;BE!2pkKwknGrOhaxyz!#Y=L+9b<++AzpQ)mQ)M^vr~79uJ}#A zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H>`6pHR5*>@lEH1mFbqXCK?rJq5aIygq4#G0E$Z~Hh#bHy6TtJpH#RV6^beyG=U<~LE{t$Xx>6`>A@^UOn^8Hvy26;tVUAG zqR1wj5x>li6sgM~Kw>V)R5qh<7LSlNX6Go$io-Cz@l$!CaXWb2A_J*y2J`(s#_Dyc zwL0z{Da{{`={n83VYNnwer*{s`IUUnNJj2+DZ2r&PGCRpI{kw>0|O%MsL9NvvbFDd^NY_iZdps{{ zGl-8~E(uzZ^m3aF z;ZlNlmjOzuq59NsZeOGoQT3CR$3_7^Dypt$2EgLdZsS6a(kv9?MD@6}CDOdB7^G z0)hz@$p8g;y^KKcnq-~1WX-xsz`d@rfMW__u~>wAt|$jcEyLZfvzLo4qn^_=uN8pb zXS3NWHpWhYVxzPOSbqtCY%>AM8^u+d0A(sS1)L_<^?Wv)TL5)81sv+9{d_*R+*NX# zhOJk41mwLZ?yRJ7(-lP5l43*QS7${v2JnooHv-p40OO3?VGbK2Ezpu$q8Yll(Ga-W zVE^=-(J{&xO?sHdTHxQM?bw7$$TnzOkDAVs!s#Y3Te0Lu*OrD&SH?z6t;XH~h*uqc zTeM-zyU^5dWXE48#}1#xZo*M`X{JqAhJerF+HG*W4deAM;UiW)xqOI29O4i^WPG>E z72f}y-C(D3CFXW!W`0$R=zcFXsurXMJVkA|4eZv#BWx1V)nFV!;HuKFS&QD)c; z7328PP;d>XFMfu_43CP!SQ;-M?I{YkleK-U&HU{lz8(JqaE}0+@r`x<00000NkvXX Hu0mjfD-qMO literal 0 HcmV?d00001 diff --git a/graphics/pokemon/grimer/back_gba.png b/graphics/pokemon/grimer/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..593a1ab549fbbfa90d72ae5df18b528b56553bcb GIT binary patch literal 568 zcmV-80>}M{P)KR6A0`Fc3}WRK5Znfy=BWIe=EKGNFi8G!BieTp)#S zmnI1`6u=B+*p)xB9ZzUshS%8R_q3n4TF++x_>)MUe-O;!wjwDYyUCY;Hw6|H-b#_~ z72(;sKB$2lq6#rOH&zKn zfqd5hfvD}&D%(K3Iwh63+y|?no`_baP>1MKhPnb_G&B=Y4*CKk0->OZVEJ||dQO+j zgb2{w32%4{VuUm@4PM;fUZprj?%9jj#o3BY%_PN3=lKgouXvKCF)6s|Jjq)pNZT2; zcKcd7B_IjmFlDV$k7R5*?8lEDhXFbszG1S_)R20nyOAoMoTXC3sG!|>cdUtxpY zgs5z{6=Ol#ZW9slCI))w&zBIwmn6Sef-m#GMKen*qOK>nC=dYxVohHhS0H1cddxO? z3`C8X_4zOfEN)jYnlN=_Zgstj0c&O+)FJd-%~c)B5&b5jGWNIzE`3j0thoP) zIZCXQq?~(;ds<@udxLu*DgPiTtSLGF%`wHr&Hw-Z|GmAOYB4!EIS>#KGmH3600001 zbW%=J06^y0W&i*OfJsC_R9J=Wmd|S&%^AnH)Civ}1eIRjMAxAdzhJeI@geWQ#Ts(3 zL5mOLHN-?Vt$t7nWpl)m1)P~}}{@cs!Qj`3j)5-$mFiZ;aLprlZP&pp+(mAoc~ zl@v>>MKSyInU&;dBgfE7>7fIPZn!>@igT&-OLJXn3T z_-y$aAedac|5{01vx1yiW6A-fKEpi7b(Q`Z@;)Sb?k;xF|C)P4i#haRnSwmVy^p1hrtA z)g*0@I0u%>vPS~IuR5k#OfHgm1%b@cA=Cula>}>d`=}f!kmQ2N=SgclA%n1L?XOyY z?JD`V3NHxBCo055ro|Md2>$O^L*K7zT?vPfsFY8{E3p_cGYnE$!T)kC^m0w@O4!HZ zG$0V2#4!a5UWW%5wl!#&Nd%(NSWHSbpVL|w=&X^qHA3RagcIdsg*Ff9az8LE+YQ`* zvnI@lW6>#k(4w;9d$~4x32XxYLQwP1h@$w*rRN#OG+&>>kY3?{^wV3%2qc%viIvgz z*sl>tc7WOK2@V{6X&~?mO6LKfy|+J~3@y6Ah%UN7%~hDq(*-$uza6mb_0*1te1R+iI6tn>L>fc_1rK3D z)&119n+OckyP_Cz-svQAJ}F_N132y>@SKQX50?=@1mHY6iL=Zx-?)cxs}_HMIk_J7W@i=Q&jr+#`JKAm2J=CUK_;ah49~W~P~Ns(mfY z7^}qb>zTZFD5cDHPPU_cK#Of)dtlik(^{u8v#qva{HCu(Rjp14b`DoSIc96W-R^Jm zEI?+9bcTfUo3@tqJOjS4W{pCn1K3#Cs`fjnAMk4#%~myVI02_y;HZrwkAjv_Enda= z6~P8u1-s#SM^3e^YO~vmxZ|p-zV&Ru-2Gv;xYz?6RZ~@~Utpwk_EgtTwcdMxfaU?t zipCRNFLwVlGLtH*zqk7Vf4kV$FRx}u+|%!uc0GGEkKp5;-bFr?9HS_Fc0lcTU-6&PtK>6K?!coIotx;`v>ERwLb94 zxj8eSXz$Q|JpDL5Ac5wr0Q|`9U4pMrV*pqL8@<`J_jvnpc3=%|&V{bM$0f`$gZJ*b zw`=ci?<-dWU3-_(AsCdf5$M^w)l3Wmj$`h)_KpL6b#M)5=P9>$K7TuZ2rvM2?Y;9r zC8$ypQaoZ@E_G?|7$BgfFjn*J^N68c0(A!;&^He5A=Xj=0pSDYi%>6u2zh+F@PKg= zyA7O z9FS_lP!g@Zxm4Z&Qu6@$FE}6ww^3joI8R;*Lg$QQBn?2qO?5 z-~M?oU~pj8C>-G-N;~mXAZ&#(kL($xN8NzI*C^;lpPC^^;dHAWKmlB$==1^xui3qliG@0=@0j{-xDlHqaq|>YPH>^;&5pkJLKp({ejOUI zXq4yDdM{w`ac07i501I_qr;CO0Ihm2V7O}-M?#+RD96Vb`ae_ZmjQzhQ}7-10PgU3 zBg$pK=pOZX`I!H6FF;f`oR0y6kK_S8>E#E~{Cin$)r0*3Lr7D3vl8p%2kFg0S$?Z| z0)~*rrY7C|AgxnOty;A|U2^hYBZH+oz0KQ`z=>MK3@8k#QL=4GMt8m)z1dLvO@bmlt8b%uM28=86gC}5I gl^^=I@c;bqZ*rR#lsJhTh5!Hn07*qoM6N<$f*;D^zyJUM literal 0 HcmV?d00001 diff --git a/graphics/pokemon/groudon/back_gba.png b/graphics/pokemon/groudon/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b711932f3fe3b6ab2882252efb23d8717c9b9e GIT binary patch literal 890 zcmV-=1BLvFP) zIZCXQq?~(;ds<@udxLu*DgPiTtSLGF%`wHr&Hw-Z|GmAOYB4!EIS>#KGmH3600001 zbW%=J06^y0W&i*J_(?=TR7i>Cl)p~fP!z^9Wo()uz{W$s+%6UaL!u0BIv`P`l31wf zRfOz=s!DDK;ydBFGn*^Xp=0J$eGDo^t;FC2iC$l!%BSD81BpXIAAqxDI6t57JAZCU zrKcM0@1&F%L+8b;)g2k1+YvbDvQ8i?JJQ#els0ftN z0wTa5SbvBHgF)aG1%^XoQB^T0eH=ySR#E^C?Wsk_0A94+_*?+WSsoTQmF&OQWT8=Y zvZO$FgXPtEgUCzviDr|?9HM=yVvf-lba3>QgE>I_-Lo-ev&%DOI@qc2HuS8|N+w`? zSOhFaQMBz@SG$c_pNCV6Ue?3adHmD2tkG9)7g~VD6H_9r$2&~`_3^!fah4bDz}M`w zQ_I?EzO}Yq-sda1f*G_7Q;Z0}jWwR!1Dxge6B1g=TQs@#tC{j_M$c5P5Rkd(ThpX! z&OV32pIia=ii5o}YbqDcjSr^^RP9N57QGmkia@U5=L&-3QKJaV6aWb9+qzr;$aOKr z?8$^K7JdVRVh+F+whUly&Dk50;Q09|h|rXP4yUok0}B!|H(i;2zm83W$ezJV8jk^l{F_oJi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H_en%SR5*?0lCe(2FbszK1c`D3Y*&c~Xay%Rw$Fl)%$98RMqV`# z>29;yL&T#=%T;$_f(?O(Ncr?zcA~GUesgI(js;-$t^}As3Xs6TMU(bU;L2SF-jmy% zBXb}*bB<&Hg40g)DWgTC#VG-=lQPMLUh+q9s-}d7J X|8?na$|7()00000NkvXXu0mjfYD1@c literal 0 HcmV?d00001 diff --git a/graphics/pokemon/groudon/normal_gba.pal b/graphics/pokemon/groudon/normal_gba.pal new file mode 100644 index 0000000000..24c99e510e --- /dev/null +++ b/graphics/pokemon/groudon/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +205 57 74 +172 148 164 +156 123 139 +123 90 98 +255 123 131 +123 32 41 +255 32 41 +172 41 57 +255 205 49 +197 197 205 +255 255 255 +255 189 189 +156 106 49 +57 57 57 +16 16 16 diff --git a/graphics/pokemon/groudon/shiny_gba.pal b/graphics/pokemon/groudon/shiny_gba.pal new file mode 100644 index 0000000000..6c0a16585d --- /dev/null +++ b/graphics/pokemon/groudon/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +131 131 8 +172 148 164 +156 123 139 +123 90 98 +230 230 106 +98 98 0 +197 197 74 +164 164 41 +255 205 49 +197 197 205 +255 255 255 +255 255 139 +156 106 49 +57 57 57 +16 16 16 diff --git a/graphics/pokemon/grovyle/anim_front_gba.png b/graphics/pokemon/grovyle/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..daee3d1beb29c0a746c372f2a009130d449e6109 GIT binary patch literal 1676 zcmV;726Op|P)bvRl5s2vXVn!K|4;50Y^HA z#?GD!I@llw0)h09H5hv7!GfN0?4?B41q-TzeefsfrJ$=}!;FlQR@Czu`rc?)T3PG% z(nBd7u<*|O=FOY;=FR*G`4>0JdG#-c&(icm=}`0){NQk!smV{f&__1O9VK*us+>x%kYao-uX!~AR7|NfmfJM zwxyJ4zpos@=iA5$ z=fSJXUL$;P;4?76$V3F5-AJ0PGC7Ll_`G-VRw(ZbI%yaTltE;it??w@zSt^z**`_%ARr9w*2F9suEd|2mwf<6K0y=o8i3?hqS!|;0#1O5aYKf%omCUi z%n>-@E5aL6LM+!zfRUs4KzO$t*-;* zC>}L-+E17bGBxYKr{nJrrSyni1o^fT{r<_J3 z1*~kB84%ZGQxT2nT5GjqSR;l=gB!ClqV^JiH&Svi!Bz=dZe;%PsIhPWy@a#*(=-Y= zFAy~4V*>=5?Ontt9xS4Z1SD@fP}&0Y>r3wOX=FI(3qQ`%aXK3kJA(?*gp!H6U?MLZ znx<}A&(c=`Uo5~l&yS@AKIC8f;EUl?oAP9SO>L%W9e^xq`=L-%4FIG(>jNJ*({Wx) z`%-kL+QYfCtPcQK1=4E)CY#aLe3OtaYhn&8GNYp?^5&al^YYn*Lw=U3S$+)7R@BX` z!?97giz--AY*B19dd@NjnZa`aMc~4p9xQ-J%?cL)0u*olJovO3soX)^su{4DA)G44 zX{CHs@ndfi*f_0p7Mn8(Y$Qu=fDCwUQ?Ks^n)9mJY(I5CCU7@hKHW5oy2i=_sHXQD zyV?oPKs>n1*MG}EyAFGTLqXDKRQNbJ_KeN|>LFp^Z3keWn3&6;l_!TGF!FhlJ^tR( zgS?rK__lNGzXmV$Z4)qV1qQ5M1qG4}-4%d+Jjw(HMehJehPt@MLZf)ZMS0-k{bKYI zI6AfuVtn8m-bPI|yLCC-du@6>AV#9m0l=H+BpHy~?KMge2|#zu2rs)mz>|@LnRkFH7R^< zG!R{0R2Tq!uraBHqS+IiilNDz2im*Uz2C{lPw=p5+c%Q;*CR;18pPeJ3@HMaJeYANO{Fir+^ zw;M$mFIJxhkW!K-d^6J^`nfV_8`Q~AOr#?Dk)d$T-PF{p*tLZKOPrv&j5PujB!=x_ zxKT2j$YMfKU%2@Mlt^%Eg+Klrc}+KorOAAqxY#7%>njmijESAVtDwISoQ#1 zaQlAU?z2J#z+thzYPYpQE-K)5-EC`yTzCNkcdkAw7@%|k!wqoZ1b9HP^cYw<6Sm$0 zR1KT~a3$ygQ1FRjr-HJ8a}jz#h6Dy&3Rq*7G0<}ZevZ-rZ-Wa^N@0Si7U2K}d_My| zy?(I@nw~U(O2Gm>JiuXW6KaKc<9Lo!q!h0dkPyX> z4Iud>S_z4imo`CCbhrU{pQ8wG9+g&sA}I`jiy%qlc%0O)Gz*V@^6NP;10)8d$gOr4 z{jl6_0y}&pU_zCFJqwqm7n(%~Z7tIj!5YAderMmk(kl4+P~ihmR0*M;TLUHmONW{n rkY%L>d})p^1~6cRpNqyn`@h#8GfW~5Cv43r00000NkvXXu0mjfsX`b} literal 0 HcmV?d00001 diff --git a/graphics/pokemon/grovyle/icon_gba.png b/graphics/pokemon/grovyle/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..bed04dc98a638ffe7d78239f7933bb499a2e337d GIT binary patch literal 363 zcmV-x0hIoUP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H=}AOER5*>@k}+}vAq+)z0(69&CZ(_8ZpUX#52i{f*vge*Y3vF` z!DBB$TO~7YoKK}UAI-o#fR_qN(V*I>2wF!`0WVBrr7|r%R+uQF2JgGVKX;HmFR8Q& zmK9K*A_&wKgs`7T0Nr{^MD|1leQQ0Et`o-^#XdTjuG}Kl-)G|jdg7(_CFi+PY^Sd< zfc1?+pKs`3IgAfZCm{t)&S?e}$-E;4khoZgTvrtHp1NyRr^8|z0d%bj7F_ei-0Oe($Qh8z4AS$-eM$0q{( z3}YAn)993sJ>09x?iuF3{9(4-qbkBT&m>@;Ij;Lg&j7hmKKk%)Qw%$IUH2FvZJ&MD zL;k7+JkLW)2^Rb2p$ksZ#MnbH7iw+;*6pY3BTUF-95NG$=xk4L`*9cz$0I_1srj2N7S`BkKC!(>ynxT{Q~vnjWe}T3mi&i!`Vx&(=1PL^PK`M78>5%w~xMCK0O! z><8IgYnIIP9+pJ;c*vdtzH_<$nRc;@UHnJ!goAA2DF@l)g@e5MVZK)7Ae$%+LU#}m zzOhyi*Hdq22yAqmx6&|bp4-$M#lZW4&>&MzfDp!NY0in`^x#=5Z;qZ;+Vg=UG-yy7 zh-O-*;~l$RF0LlA0Mbe{9kYEoEfAoq9}4TeN$5?Bxzh^hzoF#38tnt&$ZNnBwd z_KozYL}(I|hH@&i{|1yjeqj}RCLjeCX-g0TfyUtpjw7Fmuchtxdz zX&b25<3#`t<3EyE0I4b%{4lrwZi5C11-XL}nqa`Y4HI07*qo IM6N<$f-YDTcmMzZ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/growlithe/back_gba.png b/graphics/pokemon/growlithe/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2b89351a32f8b30abf83277afb705500eff0c694 GIT binary patch literal 650 zcmV;50(Jd~P)KlreJRFcgMqQL(waC@p9xv9^JZ;N2Mx zAZ9s0p1l`{%y!ufB%7HO5LQHamTh8VX^U->SE%_v|L=dYq)z9f{;OiM&fLIci3=IH z0YZ@={-YD~&;JCn6KGqDDj_5{ zwlQmfZOm>w!<~2oE8a%#*XzhbJOM&k7dZj^T(J37u(EDPE(4}QPA<$Rt4ilfA zE&5vTS~HNaviQ5!TE9SYJ8J;*N~hn1Km?L~10ZLe4#etOE0yenCU9;s==CAZThO}2 zd|ccJT!v454L>m?t&iayiVK0z5Hsq0pJ?Nm*&96yOJE05-qtO;roo7Zl$8!r?&}W3 z7%VvR8CQ@RheJIj35)^9dppH#Rw@T3^^_W=F^?Dc=N#ZBA|&@& z)O**d>{~YXh*< kM=5WLiz)Bi&-J^kS6%q!ag-iUoB#j-07*qoM6N<$f{V2vQUCw| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/growlithe/icon_gba.png b/graphics/pokemon/growlithe/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8870c8b4f0a6f4ddfd8927916542f02727cdcd1a GIT binary patch literal 348 zcmV-i0i*tjP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H+DSw~R5*?0lCchgFc60O1a{L+9)gsSK7^@j!-AU)3*F>ZNleOC zNlan$Y=FYS?4YsReeK=-O+G???6jL2_`0Ti1D>(m00yfe;6$eop_P;Qr9xm|^(KoD zIOtoFwFDrLUOy5=XdH(*uRAN1-#st)cjvD4VFGXfAk~RUG4)U(1kat2Ft;$tvq&u2 z9OIo<^HxG^n&!n3ea0ATatxa0s>>RIovp1U|8u@b7`n_Eg+Z$ZVZ00000k zl$3jWdtzc@N=i!qwAJp5tkr6R=B)0`i`BGqy?auNoJwN$&Hn%Z0RR90r}Y5G00001 zbW%=J06^y0W&i*L&q+iDdNSQOAu=I@TRgWSPv#;Po2Ybpo_2`rVW;OX;gv-@z53q;wIR3TL;#w z;QGBcX`9TvN${rNgF@-|>-T*#?|W~4lJxIc`s-tW`Rq7=bVdUSGCKxHs{;*b(R7I% zoc%GO5kb8KAmB8<#^3T&ZC_9VKy^HC&6gIYTAv7d=mIqEdfr~Gr?iY{0S3%1-|#$I zD_k~W0QZGiN~yVU+4xWpM}X!Ta7Ss~76S5BdhaLz%3|OKP`2*mjB;7jgS7g`Q6IRy zBmyR@X$F`zXc_N`fM=#=z|0ozcGW@_Luc!lLBZ0PR!>(lt0aM%oIn5<^_*skQ+i-0$qsnAnQ zR)GU`eBJn@YBPL>pQ-sTv9ZGn3UDCQ$jh>wW z$skkTk>?`-o;|-W8SPfZkM@HX?1f~Arn3u2=aM0|5cOO##1=9_GLj7d1b&Z`jHFv7 z1YVUM#!1Gew}&@)W-eATT+hQ4#Eq2<_aFdbCBwC8b(&m?myD!M3yN}Sgk&_T0LqJ_ zB;z4okyl1ZMv@UB$r!F8<6fUjM({-l4NO2(oIaqVh=dx&%l!IJLEM5OAxdO|F~#Gv z1k6Mf)rh1x#*JV=kz|16)KW8)Lbdsq6@d(@2muhAf2vOd(7Q1z}c7MSzp9C?85@7#WoZBfzH$8U!=G40KvyK+bN| zzEEDSITm5SsS%bjIqPiXm_aZg2Zv1MhBQVdH_>ehjYjD&yXL@`EDB-ORRX95xj9NVZa_-&PAD&VKx5BJ(pZ+jd>l!UeWk zl$3jWdtzc@N=i!qwAJp5tkr6R=B)0`i`BGqy?auNoJwN$&Hn%Z0RR90r}Y5G00001 zbW%=J06^y0W&i*JRY^oaR7i={mA{J(Svo5kju*;A}i?CgP9q)0|NtK-%m1TjTW@<$wcAS{wv2#E7$H_2}1CFulTlj8fy z_x+eRvzqq*MQL)m9=IZ{$p!~P))U%zxPcgXL$bDxYpyqJp-REN4?o+k>){p;jEbEA zE^bjU3a^d(wEPXI>(_|l*h+YFsj+PRYg$5j<529z<& zah{lWPa{fH;Jxn);GS5Cm`~{|6^H`HSVxSj#ozsjp099VHra`JZ~FW6Gw#6HB<7q? zI%<{KAap@|OA<(BMD&zS!4r|V?^flMZwzJLEP{sODppUch-?dAXg002ov JPDHLkV1m8GNpS!G literal 0 HcmV?d00001 diff --git a/graphics/pokemon/grumpig/icon_gba.png b/graphics/pokemon/grumpig/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3cac59d9db5599f68df0c6b3b9f60d74672448 GIT binary patch literal 329 zcmV-P0k-~$P)DV$p|hLE$2WmIA%1Q0@fDPBfOF;q*a|JAsTmMd+A|{-ZL)KRhi)VjD-q9% z@fZTv8mAWKy^lU?R-y%q~fWAiGfvzTOeMCAdJ@`2;;~@hs2Ln2Ni2i(&>8Rx*gGtvV bB0f2HLJNegRpyfq00000NkvXXu0mjf;eCfJ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/grumpig/normal_gba.pal b/graphics/pokemon/grumpig/normal_gba.pal new file mode 100644 index 0000000000..c49601f910 --- /dev/null +++ b/graphics/pokemon/grumpig/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +148 148 148 +123 123 123 +98 98 98 +74 74 74 +255 180 213 +238 139 172 +213 106 131 +230 172 238 +205 139 213 +180 115 189 +123 82 139 +156 74 98 +246 205 255 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/grumpig/shiny_gba.pal b/graphics/pokemon/grumpig/shiny_gba.pal new file mode 100644 index 0000000000..b9c88ae3da --- /dev/null +++ b/graphics/pokemon/grumpig/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +172 172 172 +131 131 131 +82 82 82 +57 57 57 +255 180 213 +238 139 172 +213 106 131 +246 222 106 +213 189 65 +189 164 41 +131 123 0 +156 74 98 +255 238 172 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/gulpin/anim_front_gba.png b/graphics/pokemon/gulpin/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8381bfdc763da96697f38c7a832b026fd8f27bda GIT binary patch literal 595 zcmV-Z0<8UsP)R9J=WmcMR-P!z_Cn=TfxLnm`Dwkx?DnN12WPzw;_ezSry9R1a)ZJuphs zPi=#@H2Kg1nL43nMyhS3?_ynQt_vSEQJa^0m5W?>)z-|d>>gkdOKL~cie zc@6j!Z{Y|aC;_~M0Z{2(GX~I9e2>krTfoNw_Xv2#b}T#s3#SthJ5I!oMG35Mz-~u8 zsY?ie+|)o6p@0`OXWk)an83iRC(uZJ*#ou&vs!|HMO9$-P}KcHC>T}W^&~h{Is^ak zhyVq1;}Td?niER+DKO4m8pjaFQqC!*DzTT3MY)`p-|C@bi?%gYI!Gd`M8Y{H%i?9} z|2lp3)z=@cUk?yM-)RS=U;2EoIg<}We$e{AbpMxb`G2_okF9mN|AIP@>)byJnGP_3 zi4_;1aevkZj1_L~PICqB{*5l&6FI|Z^M$lm3}6irW43CvFVaVS_Xxm^nJjDBvl$9F z^#=1`Arc5tBT8_n@`DZQ*pl{rf*3(o<%gWQ)DoZ5A!C?U=|IRtCJE&?!)aC#+?4@i hs&2{q{Lt4$)Hh#G?m1GwM<@UQ002ovPDHLkV1hP(3Y7o= literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gulpin/back_gba.png b/graphics/pokemon/gulpin/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..928f291d1da1164fbdf9e7235839525d0ff3109e GIT binary patch literal 497 zcmVKlD%%iFcgIo2Bc0YKb<25m{DrN%D~+#s60n%D|_z{ zzeYQE>1(t`>W=y_l!{6SBx)y7VuxUFOq}(8IpLDTjaBAL0xlRzp`~=ZJBbep@u3M!y0)QNd;yME;0W?3hNDT@AA6du-P;{sPI%wQ4 z4Nz3A*+66VR2m52M}JWlQTANUQM8HiwN`P=Sb|hwrq}3D9hhLO0S#fmSg!;^0jM=y zDuG8O0%KoIXr_RYAqXEh7Y& z1lm;*nud`4`)PL?54B%GNRm)SGJ`Ha82LKj5lRSo7~IPZC4kqf3Lq5(15rNs1vHC; n%02w0^Gri=vui!!qI2jU8x_M0)Vzd>00000NkvXXu0mjfC-cgX literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gulpin/icon_gba.png b/graphics/pokemon/gulpin/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..53eed645f80360219720ec32487ffd0f88659d3e GIT binary patch literal 293 zcmV+=0owkFP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hqe(IrWGUy_}beJm;r)9<% zGK07P7`gUAh!u$B32?l|l@Zu;X=gloB5_zSX22>>4JGQI_mUf7@+)DIjb9QbFmRhN r;5FS)KESWsTKq6x3bXmKs!!z!9j;~?Mrw)#00000NkvXXu0mjf+-rEw literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gulpin/normal_gba.pal b/graphics/pokemon/gulpin/normal_gba.pal new file mode 100644 index 0000000000..588be1e4a7 --- /dev/null +++ b/graphics/pokemon/gulpin/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 189 131 +74 106 57 +131 164 115 +164 222 148 +197 238 180 +156 189 139 +65 65 65 +106 106 106 +156 156 156 +172 148 74 +205 172 16 +246 222 90 +255 238 164 +255 148 123 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/gulpin/shiny_gba.pal b/graphics/pokemon/gulpin/shiny_gba.pal new file mode 100644 index 0000000000..83373f072c --- /dev/null +++ b/graphics/pokemon/gulpin/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 189 131 +74 106 57 +98 123 164 +131 180 238 +156 213 255 +98 148 197 +65 65 65 +106 106 106 +156 156 156 +164 49 32 +180 65 49 +222 98 49 +255 139 82 +255 148 123 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/gyarados/anim_front_gba.png b/graphics/pokemon/gyarados/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1864f1b505a579bb98fddae0b13b07ab24baed GIT binary patch literal 1834 zcmV+_2i5qAP)CSq(MPy|NoTD&4X%cTGfkU%`q{QAOHXW0RR90Lt~Xj00001 zbW%=J06^y0W&i*Ns7XXYR9J=WmrZLMM;OP47`&+t0tt#ChZw5|7ayz`A9{;&SVgpl zoIJbqB7BHu>K?X=(eB7OsF%8xb7(G&;>|&Xkm6XB=mR95ph=s1A!eOgZ>An07n;-< zZ=YvYa;z6S(Ds-Ct=OHP=6Rc)|06<14{^%#-q0SXuk5M7&HX4`&uyH#Ks7!k&Yeq~ z1x%aqkK)6?*rhHoHNhw2Gs8f_!|Ob`8L@fPuM9ak<|`m^NvqiWLS;DCv3&*1c|_QJ zV?-_zQ3S?1aCO9}Bq(4W*11eHdJ1rvBofiaEXgH@EzFPk(aI4?d>vb!C3$mriNw4g zsa_Owkyy+lUu0-{5UBnsZcNSUbJ5szmW=1F4%ukGrZ*xx`rL%HO+xZH>YbPz2ZL>! z$EF%NVN(kB9olCj1AqoVtS%@H58@OjZP;0&3FB2vGHO%CH~`;K(>n=h!nR`5EJIDk zm<2y}^qvzKuOsY~QHVK=QjP%2lIAxe05pgx>zE5Ew$p$G4CVlkF-g-&ngQUEj0u2k z>DOQZh5)}qv-OM~BohGJ6x=j+biED>Ai(l;QCnRwlnpHnzy!D1j-E6T5CVWzQ!5&* z2Wa%QZCE;_1}soLS!XM&X{{(kK>@a>(L>wFQBw%vWb`BjpqM6H*Htd7uT5M0YQxG7 z1Ys{Esbs9RPP29wXm_plOmYsOY79L7jz@5fQgEpbC@M%gV|~x66I#R8aRwz zRyz~Lik^~xyzoC{oEGW;;K!?hQ3OJre6jd2rOOu`D5Jnh%SE8EkmL%8=PSj7hr09C zUocPW0JPi^6tuRG1RrvQJectx-9Dhy$iT-2K)MJBTTdFCXjej=3rAbc+dopQ1Gp#U z8wB!cd|(lh3wJ)=d->a=TX2tcv_d`tJWp$o_c8)L0PTbC0Wb?vdH}4sOt=)I0Kg%# zxwqBcEmNpxQpE3EFg z7QRyFA3uBgeD@xE6^r{m9ztydxXbDs04Ga6IC}B~04oxS`u-6lKm2Bm@fDY~?v^a{ zaq|#>%`yOyxPKqFNM%DfO8}IhngBF^diL~Z_qwe3{!DPp)zAl*tptGf>8xLU@JeAAJV&$Hvr69foqA{LD zFH5+sIBxpuFtNKtLXpMc#7R$ume51r`hd z65hxcUD7O9gEE}XFD40zBE%a3OJ#g zG0+swwquc5LYB$?WDhvj%?5}bwG9a^$hfh*A62bbziz_7!xmb>BtHmRv3}je-XMeh zL(~@CR%}2w)zL%K`<-cOE-Ij3Hx-b{(Du}Zel>Vi`*l-^4l|5&rSL;C-33nQCUPj8 z8R$XaJ}}Xzn@L^QB`PBvZ^^W>F`%2E?G%jEJguwDgSrVila_{DO@|?ZU3VbUBa}$P*R|0D-zm zQc5=wsA8AH3c@zZ3IL_+>1L4GHUhj<=hy^ki#;iHjt>invjqJ^o%Mj=@%XW#g@gW~ z#khq)Pi#>)yMX^U_~5ommR9PceHbe#o>P(aWg5a;S!HN}=1 z-{`83{X@4s(E9(W2xk$)SX2GONFmmozzOId_^A2dY?N}NSuA^_0X1M3%d_U+kNCSq(MPy|NoTD&4X%cTGfkU%`q{QAOHXW0RR90Lt~Xj00001 zbW%=J06^y0W&i*KWl2OqR7i=HmA`M(Koo#2Me0c%Dme^D3`HD6wusV!k>%WOOgUfL3<6n*ajT% zRtcz+dia?$<~bbs*xcV$Nr&FT_!i*MS|8N-0wrBti%;&TAsN9>#s)1reqYG6rl{ z-KvnLJ&BHAo;j>4(|E$%nGAdQV+k`!PdIRr3V43+S+gx=BrPCgLAC*g{N9ky zWYEJ1#0HRA5>)_e@-MuN6Ij3;Vyi{k6PJ==u&yzN%mOe4W{`1D1^{7Vnz#ixKREUv zA;$#LKPJFWo!da$)CWKt!3<$>Y{!cx0hqqP1UT*trP>~8lZgSKDA2?SX7k2Y4~@kJ z7|-%J9N}U@X)p9Juef)L=f4S1B{6}F(ymdoW~tC%Uc`d9%w<_w|9zW#}E-hw!UE6cQk zaiIv%`sN{C6K#mXQ(XCm{Pm7ZE`6_HPZZNHhYw2<+q0zOh6a4d)XbUF)gC z)Wi?z}E5p3Si6o z2FN!+dQueg6=2#LVr>S=O<95kAVK2^&}-l`&boV%Tu(Dg^!em+d~JGkcFq6iRZ^5w zjszYT(iEE(oNwkH-&31ibxEZ0SlCy*DnBsaWYA{U7Qo6oY)^W$?2CT@o8z_x_ycY7 V$1z=hS#1CS002ovPDHLkV1lu6#6$o9 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gyarados/icon_gba.png b/graphics/pokemon/gyarados/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..13e611d0908e2f84972bb6b46c6963afab2e235a GIT binary patch literal 524 zcmV+n0`vWeP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Iib+I4R5*>*lCf?ZF${+93B-5smZdGCC7HBn$aG%nH5u|INd|Q> zhfD?v=yg0CaIYYs3gAf)qBx)c0j%zHHqeZj8gBfK$DbnquKQ8}F@69_RoDS999Sw& zs>@O}0#b4rRfOl2Z6%3+k3%haz2G^IfWuHQ0=FCxY}u2Esl=IpCAJ19z-lhZl!?$V zOnqu_&b6Qh3^>Wc&gO)SXbRyX%J;u4ktyR0;PSYk$7`$WPxGMg{pa!SLB46ir#5-G z4Y%7>2sa1srd)`=f^S;)htOV9LGPT`LAwQL--}KJ-Jka3>!(nOI{^_szy1F&7(RfM z{xt|E$?b}#g6fY^Mm{r8c_@jWih&kIM8}|iVr>rp|{)9`F*dQ6TxrY0z`F&m>hH7$Lx&Ho8m9W(gY-<%<>rk O0000 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/gyarados/normal_gba.pal b/graphics/pokemon/gyarados/normal_gba.pal new file mode 100644 index 0000000000..63b325d5b3 --- /dev/null +++ b/graphics/pokemon/gyarados/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +222 230 246 +172 180 197 +106 123 148 +180 205 255 +131 164 230 +98 131 164 +65 65 106 +255 255 148 +205 205 131 +106 106 90 +213 139 98 +205 49 49 +148 32 0 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/gyarados/shiny_gba.pal b/graphics/pokemon/gyarados/shiny_gba.pal new file mode 100644 index 0000000000..a8afe9dcdd --- /dev/null +++ b/graphics/pokemon/gyarados/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +222 230 246 +172 180 197 +106 123 148 +255 189 172 +255 115 115 +213 74 115 +123 41 65 +255 255 148 +205 205 131 +106 106 90 +255 98 57 +205 49 49 +148 32 0 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/hariyama/anim_front_gba.png b/graphics/pokemon/hariyama/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d71ec4704e9444e26a7a895e034ce2c04af89920 GIT binary patch literal 1808 zcmV+r2k-caP)OU-N3>9pSw$~plnDYLvh34plWX%CwAIshcPG+x`B z2IAJR?WSxv$;x9fe2px9$6+^Z>s_GP{P{Tn(*VvQU{q?VX&6gwMnPse0PFyW1yXAU z0EbDU!+sBedMp5c$z1Z8Bs#44SpS-U)dXNx?8<_W1Y^ZHEeC&Pl;T>+w(ZK1CVcj* z#{OK;w2Wm|MiH<(1mv}uOP?LHW2~5V&$c50oIaI+aw|V``PO&cECFXRK&LMR=Cp_Z zUNSc~2g0_)2&pH=GVLFLpXRiTp7jx7M*G~Z526A}RYf_KfFSKVIzEa*g#MIKvaLY? zv>>4CU!(!d#`)hg5Pn4w_$>dBmM4OMnOH%tKvfNa%sl+JXwMe;ivU@B1i%t20IZgl zZM~ENn)cw310jG4wAZVItskG8D}jL4_YV7<55gs~YxH5+IP6PsX6(6)C+)5h6d0LR zv5X_R4Ks&*0=h~h5gPzHO^?0(!w?vg0PthRlz``f*p-LbOakTQ&j={!K@zgk^JI`G z%ksPycEt!#&Xajc;G4eZUyOj$b<2tX@%Mo)fv$TI18M~(m!n0(`?^`!_dMTC0HK0) zLA7~(z3(9g6A^$)1BDe&E>GXv$4{5Bi`{U~!%EH9@O3@umVhgwQz39IY*TQA?iS$m zCjhnlme>cJ4^x` zx=sLeeKt@=gzxeIxbHZdq2C?(75pmzwuX*#68Mt>iprRXfDNn!9ug+%<3KHqwNpWJ|dQc!ic!4uC2B zDj-zIr{77XiMN^*s;eY0o&Iz(eraW(mW@)WI%p~41kd$^1R6q1HOq$CJU2v}n(w$o z3hGr{Ub9*)8_R99-|2CnLHVt}Dw!tzHY6aO+!ssE@OT|1gZ z49pNN06X5BQ!}($D?fXQ7ywdc0=NyN;Z=%Cf1MyY^w=B?|XS_{@-VFJh6s?V+N|*PdPQc19>vC4|*?>+rVhA zpOV1Et^{;%pWht;>^E8zDR8nM0DZ5wGXmNnfX2P)(X3jb?mx=n6DNoOfi5dhj6#80 zZ!9sCfZ(14JRRf3F7?*EK@3m?nieoK;JbPO01XObz%Q5A3gbUF@EClPRw1XK|1w$p~n ziJUzq0Z4S9;IPg{Ap+b)3bJdq(Gndd3gP@R0bt9SPxBRGtP z3kNli1L2}Ri-7j~+mFgNb#H7!nlu!wBg`-!fZmaiql0kVEBxV{z&2XnT}hx~7t=%K yYCsY2*H5nj6wD{~H64-?5gz~`GWY=S5$!+kJRt2EYY3D80000C)G=?`KokdX1_rtyk$!@nGiUH2C6h(LGux$1QJ46b zP=(5w2}O|rPwe)<(00Hc{F$seBEiFbhQ4=aY~xb8w{KwJ|I2&t&M}R~e_r0x<-Em4 z$wjbq9v?1(mE%nQ1{U@2Y`a%%;GF@@PUpRy=PTz7_}GCO>J8b*`2#S91>iN%#Qe&j z3Elzw1R(hxToFpG1c6YXOUQxs>Uq}5gY3i90f6r+zw>5{$!ZP_4BE}q z3Xnt0*z>Rg29Q%L(7;|YcJDkslgf$%%;74dAGU4NC3CndrleO+z`epC%9mW;<71wZ zn<~(`26y<3#8+}%0aoaT2zDE6rof08NeK>q5I~FFlBMTBBlE)$JFFRdfEFtaXj0|@ zRAq#D5aT#+6DJ%Y9$=>ODchUc3UpqoFAcgK9kaJz8kn4#S*$p?AF0k4q~a_yw@7gzs3-#G5BJvPQfe(u{`AO z?wi_gegr}RIEMl_X1~UpfYLzf%aj`6Nn!^Z%vF#1=H%`9x9b;DO9i0eYd7ft0000< KMNUMnLSTZd(rD%Y literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hariyama/icon_gba.png b/graphics/pokemon/hariyama/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b16b049071a0b2ecd0ddf698777af5ae7835ecda GIT binary patch literal 387 zcmV-}0et?6P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I0ZBwbR5*>@(!oxIFc5&@J^@Y78hK`qlNkCS^#wL*=o1XxJ(7hA z@wAa~#9dmT8@+48r9bTf<`d$tE$03H)0knqm&Vv_;1A=*a`WCl*iotV2>VB;$}t6r zz8raSgB)T&F5h1!O@28--c6S6AqC0SeLvX8JGwp_Lk;2*F3>mUS3-w}0gfrOp|ce{ub~Lxq}0>y56$f;_64#ag7~-VcQA6uz>wdA zk(7ZUj9@s01r*cA*@6Q_LxgMA$T4UEGKOigRJf@vuO1DZ21o8fjjm?8%= hr#mp>4$O}}z5s^D>FWc{m%9J}002ovPDHLkV1oK2r?&tA literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hariyama/normal_gba.pal b/graphics/pokemon/hariyama/normal_gba.pal new file mode 100644 index 0000000000..99b5902d94 --- /dev/null +++ b/graphics/pokemon/hariyama/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 164 115 +246 230 197 +230 213 164 +197 172 115 +139 106 82 +238 164 106 +213 131 90 +172 98 65 +131 74 49 +98 98 148 +49 49 98 +246 213 115 +238 189 82 +205 156 65 +24 24 24 +255 255 255 diff --git a/graphics/pokemon/hariyama/shiny_gba.pal b/graphics/pokemon/hariyama/shiny_gba.pal new file mode 100644 index 0000000000..14281f8125 --- /dev/null +++ b/graphics/pokemon/hariyama/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 164 115 +255 238 172 +246 205 131 +246 189 82 +205 139 57 +222 189 197 +189 156 164 +156 106 131 +115 82 90 +98 98 148 +49 49 98 +255 90 74 +205 82 65 +156 82 65 +24 24 24 +255 255 255 diff --git a/graphics/pokemon/haunter/anim_front_gba.png b/graphics/pokemon/haunter/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a41b867fd4b68981b80032602ea11462898e0024 GIT binary patch literal 1321 zcmV+^1=jkBP)Lh|^tX(#~JhAkF?onO3u*f|!UMML57<2lX%CpoVNJpQ%K zVy_UO+7?2JzN8#kn}95UF@}l`12|5CEEHzSWWH_}kVOa-L;SBLOA_4WBoJJ~rfmuh zcQ0#B5)RVo9M0nV0KXMqSg8Qn5zSe;zOO|z23Zv8d8rWktynndYh2$4|AquF-!4jv zeYrcViV2frcq)o7ef)l;z5Ryyw0iczV=REXzl!f`E!c*8jbi#_d5MAyet#|srp4%q z%VxDvaT$qgo`Jk8zDp3#g_hD6LoCMrt7IvVcU8)-TjL6WQl zD=ZQl#z~TxXf^|@8%RJkl#BeMKa=Z~`=0RpO=&YFn&Y)63eX2tj z_dblVJDMplbgecpcU;XOvjtto<<~RzvHlrDKG#Y$lEgbFY}}r1Zd|>wQsC0Me~l9> ztCZsK;&kKY_n5-bt>-qscRFnsYcssIYqJ^pghBU|LHC4#b9Q3Ama-ljw#YeJNvMIh4@;RNG0B?8$IqC7VUr02N!CN4044)nWhoN`3`KwuMIvNF%-=Dn zhap-nFbS0qU@Q?ZqA|uQl%9(IK zq{bzbMZ%5FePghiVLISt(?F^Bg{Kl)Z}EKoEcpb}f+H2Q;e(xa@3o2}_W+@&)JRt}zEk z;M^!h2;`~=Ql&h&SMW({au-yk3@Ecdw!B(_9w3>L5l3`qYQ%<(I1xVpHkuz-51Q@fDM^boAD7~~MLJz7y{6LC>mp5mW+a|smpcUghy1XFZZQuVI zx&DNIWEf`21Breuu<;S?rs85`lf2ZHC@e3_>s`- z&1Ea|G=}UhxUsZ^>oHy4wvukeCU_~fU6JS#pYwE0hw?lU=xxTjLU~Ia$gX(~H~9pd lQ-?XdxAN0|6XgH(_zU%b+h;qKQwIP5002ovPDHLkV1kxfEi?cC literal 0 HcmV?d00001 diff --git a/graphics/pokemon/haunter/icon_gba.png b/graphics/pokemon/haunter/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..aac3e15f80834c6a332769fe408add67c45fb354 GIT binary patch literal 485 zcmVDV$*QZa7BFbvcSBycw*6n#JuX#VG-v^U?(~4BvE!&50EYJ+QEFYEmE%J6`mv*`tqKGH zZ~K*ow8Qz6lA?a3>rDjrUPOfKF#+f0i0PKQxh#k0rth^V(}?mLfpfKF=ZC(_w-w<5 zKF0C|XyodDw)MXfSjm0j!VGQC&O8wqIy1H^Yyb_c$_n?kqE=vsIB{=wfY=@5>u*aA zrhcM}t68UP8Jz^SQ2=MCjV5lqsx4}VN1#Hh9b70BpY{}0;}sA9`(0|u?BG^o(9#%k z+FTX(DAH~|g#0fkvs~ojLQN;MW00000NkvXXu0mjffimHT literal 0 HcmV?d00001 diff --git a/graphics/pokemon/haunter/normal_gba.pal b/graphics/pokemon/haunter/normal_gba.pal new file mode 100644 index 0000000000..1f3ceb070f --- /dev/null +++ b/graphics/pokemon/haunter/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +213 164 222 +197 131 205 +131 90 164 +82 49 98 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +222 49 49 +180 24 24 +106 0 0 +213 213 213 +115 115 115 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/haunter/shiny_gba.pal b/graphics/pokemon/haunter/shiny_gba.pal new file mode 100644 index 0000000000..d6cab25889 --- /dev/null +++ b/graphics/pokemon/haunter/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +213 164 222 +197 131 205 +131 90 164 +82 49 98 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +74 156 197 +32 115 156 +0 65 106 +213 213 213 +115 115 115 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/heracross/anim_front_gba.png b/graphics/pokemon/heracross/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..96af2d24f6f337bd45fb2c555780e74e22508b1d GIT binary patch literal 1273 zcmVjb00001 zbW%=J06^y0W&i*LcS%G+R9J=WmOXDHHxPyeL@X1-g^L8T3sP#X6uD&}V|UmX0VwmM zb8de{YX62SQU?YM1j)ZJaPI6}4BWMG45V}+NGk+aF*DSMW$kL+BtQxi_6pKI%Nf3$ z<-DEF|7>)Rciw_@&36OoR<}Ri4UAs``gBpd0Xx76IJ5wK+{uO6dB4*YgTPe_z{HRX zXaPFKP^fkw7XU3ucAOS5!lVTVLU&>d5XO1i^E9lQbae@hH+PE)IwR& z7^%xO6ENjcSv7A2gx;g+y>d`BrGfKf650xBBIu?mf@f0+Q5gd}6n9~Yy8*u1r8rY1 zmjK!$P+Lb*Cm38LocxNwb`s&+TfF9hfQzp$Ye_J1*83fS3rgbM-ZRJ>ivly z7nOvQ^UoD%o<*E@wYOcj|Ne}CpYhp~^9W$Mz+DrPFuZTw>48DmzWFg1C%^nefSgH^ z9cbfnk%eo_idhkcQk6K(OoE3wE?Sc!4sr+tWFm8OAf51EM>~j>p){D!Q#rd#$OxDL zz#L3u+;X#!lsSn2lgdeqio-yhPuKv9r&BlOSsFf(7Q!z3RQbM38Rr%Ha`>Sh+i!3p8MVi<`N~xDX@6+9fxZDee zStrdE0vQ1@&JQP#_v_tSs?PcdNS~Al*OSMsvS5LUVgYC>t;ybYNy%!JgyX8Atk_6S zF$t9bfeWnxGoJNHOpgFp_1b4cJ`x2*2RFnR^$E3J=;!)lYFvi64GqCXn~aw`Dzb?=Wo?ELsE&~BKBPQO|U%JQ?` z-EU}faQ+Y%J_wg;){@)&Z2#d1eFXM)NIpfXkT&*s1?XORgiBo+495qD`q1c=6f7Sc z=%b~7P@aH?-giA8pR(+GGhuRO^~ygy+2ZaKq_8%MV!Qw}1|Kmn`K>lIjb00001 zbW%=J06^y0W&i*JFiAu~R7i=rvV{3UE^JVkv5q4}c=w z!=pYx>ry9kqtJmGKu)ADRnjuD*P!x3>Pwvx5WqqMh+4lcNCZH0FEGyj;dA!z`-4Jz zaWN)vBx9^*{#lEt2p$%=-XJ3E5fBLbB6X88DI{?AVqyO{RZ{tKtX@lEy~Ke;jPlcsHoM%FSjCEDH?YOnpq&$Jc|QaD5|#(Fxf)sk*y$P;Eb{`u z(J{_p0nE9|oc4GKRqTQtf(Nczxf(aBY;<)T+c=B^bDV$*lCg5bAPhhmI>X2GvZjl&!Vqf>-_^gk0T`Y1#adQv50(=2+CM5W#6jy6G{*kM zy_C`eQT#5k)2iTI1hpATfB*sqS#VMn2)cjm5L5wtqK|78+r$=`llKX46`ap@N&vi4 zstzKPJOEtgnf8C|iI^GK9(&BZ(Vtsete)6UGUKrM_w#-^G_R9K4u{6A&Mk+a`>SR0 zHHYku9DHW*L9*bG1CT(=0TU!(_Ea52TOY~eGl$xTzfjAe_OVLZrhn?=7b#@EnBc*f Q?f?J)07*qoM6N<$f>eE~I{*Lx literal 0 HcmV?d00001 diff --git a/graphics/pokemon/heracross/normal_gba.pal b/graphics/pokemon/heracross/normal_gba.pal new file mode 100644 index 0000000000..06fe289a5c --- /dev/null +++ b/graphics/pokemon/heracross/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +156 180 255 +123 139 222 +98 106 180 +49 57 98 +255 0 255 +255 255 139 +255 222 90 +197 164 41 +139 106 0 +255 0 255 +213 213 213 +156 156 156 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/heracross/shiny_gba.pal b/graphics/pokemon/heracross/shiny_gba.pal new file mode 100644 index 0000000000..c85ace38b9 --- /dev/null +++ b/graphics/pokemon/heracross/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 156 213 +205 123 189 +164 82 156 +98 57 98 +255 0 255 +255 255 139 +255 222 90 +197 164 41 +139 106 0 +255 0 255 +213 213 213 +156 156 156 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/hitmonchan/anim_front_gba.png b/graphics/pokemon/hitmonchan/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a08e0a0da997c8440fe5757cca562b1f18687c8e GIT binary patch literal 1152 zcmV-`1b_R9P)=Vq?Dv{VsrnLTIOOoy)h7rAOQaW|L)bC&9r-@i&AP*5D*X$j=E}hG!{W3pzb#yJ9jWWtFWw@n~Z#c zQkl}prX~e2kVrrbeFo2D-Fhpaqt&%Qk95a^lqJVTF@=#&0RvY8u^=W<9mjFGCj=JMlKUuQ1Cr<$ks)7*X<>v(GWXgPIB>)>Pah2w>ztsscA&wJ32{eGa*?R=K z?d*o&|7;uqnr;}iHsZ6>EWo;UM}BCUW*B|2`!Iu>4&p|2LPDQ!JZo}B4 z&prDA;J`4+eoPaac}qvw+LeSxhd9u_Z!|QmMy9ZfRqU1lnqJrHwOxZsg6XxoHr1v& zndK7d+AStZ^{bu$nAYg~AIjSROX_Cf&GF<|_80Y#F`o7;JYo*U{Ym;sB{33{$C2_a zO4DPUnnUI3QC(1lG9J{@EQvxHpC$mKfPFAhfOt%|cC^(#5-U;H^wl;kiqG`aSf3QO zQ+Q?`o;J2ao|#oPnn51Bv>j{$*d{=skKO<6KWpms1|W2=O2?xCl%A#VHv~#1K?!nr z?9l`|js!@9NCEO@V!xcii^w-h39p^dxuh*ej=y&$KxC;p=T3-%5UApc09>>b1V+>( zAxa8Q93(Ej-jM_ni5V4F5}mIi1Q;Wiz%?k*naoi>)*{HcROI|Jj?bztzqxsV-OF4Z z+KW3dnbVoKx{P3 zdDpU@0P3GVp+B|S(o*)!o}B}ff294`-4k?-J?PrUIe;a=?8Ha`yOmpt&r+Xk6eYuC zJ=<>QfSJ{@XKfUWySoX7$gdQ-5^SH;Bw-f6wA&y(snICW9BEq8lr|}dQK}&NRG-q{ zH>e=`t?_RZ#4T44+|oorXh&HYec88vst2T_ctQEMzqtl-KOWYANd19IV(VKd*Mt3? zwI~uv>}zWcWTJ4fAN)aq?~3Ml^wa30zE>3Dq1AQc$5LR6J~OM?HUVFiKYRg{EY##G SSIgZ10000=Vq?Dv{VsrnLTIOOoy)h7rAOQaW|L)bC&9r-@i&AP*5D*X$j=Kld*EzKoEx2q?Gjz;te=zH<9Z!rlu2bfb1%zoGR&J zo<$0N0QOM&aJtN-MBFgLB;Y|}vv;y*PL|}_h5wG(Z+CzFdpOR!-l$yh^R=>aekBX{ zcW-^0r~>%rM;~#KKvDn{%S9gm01JQ>Ec-@K`-%$*&;#TP;DS^__YOBzR7Vs7RJVl` zgirt|WV-7DHUL5;Dey|BohCNG^CU?CYE5ybC;sjY2;29tV;Ia?Mbw2@lH{cYx zsZ$t5=FI19poCf!RW=W!CgG}`4d8TsfB0qt^bYU=o;HZ$Fbi+L+ki{Gyo9gYuXcie z1Jc!)tesM5|Mw6LF`npo9l!_Fx;6voeYZDw?2{(OSpRBo*po?3vDV$5ygw!U8Ix!jTH*VJ#h^eIuCX-O~ zKypJwQ%xpqn9RSj=)EKJ=-GP8_6X}S@n)OyG40iD8+ZT@9-9Zi75-!93xrYi!bBR; z2@~_E(Fzmu0(-K;=o!|HW~`Vcq@;6VV($Nx#m#ebdmt$(DgXcf(~@>m00001 zbW%=J06^y0W&i*L{YgYYR9J=WmcNVRRuIP@7!_wYfgJJ&>tt*OJFDaTt4Ge&OrBYoJ<=JceK>;QyG^7-udUT{5 z9RXVd7s9Vp@b73kW`Ihi0yyzxnv`7J;d?1uS#ahVSs3&H61Jc>G0I zsj(0ICXOp=ggQ9W87_IfjM5VLfF~+x99P2l443SXO%aqTwYv|CPqjPo_{`ebXiqJ+fk^EDvV?(RMUb9?QsXIM+XfYZ*JFdrW=gXemU!HuEQ zCBU{qgrG7$!4QMRvH;3LI`%gN=XD}SuGengECGwr$z~^(#(QofSY}YEWnAq8NVHb~ zaFzK7fEit_c7e;_9QcW;1*=`KWjG9gZ*LU<_mLm^2^mqtN+aa7BjSvBXxNtV_jwM0 zCfUPZ>d$8Vd;so;^>#C#kf8Q>*6%hiJ2}ApM||S*dB5Gv0fqvIudn9^N0Hj|;b#P9 z*Oz&K{H_Xawb8z8`gwr)BL4BR!SiY)0Rp`!bE8v}z>6pOZUkP$gPioKnJ?q3LLhh< z7y3!?LI%O_Xgj;Rpo?PS>9s zewJV6W-2h$Nh32t0M#XM=4CZ08KR%eDoqA-cdrl1BBfM~7pSyQV5rRP?&d&A$ccFx zw{&f4=|EY3r%Ks>7Iy}|b?RN|8vi0j!r4wEMAbJ~OmD66U>0iASWJzmy93NR)5f%A zjT-Z?%HuZ(Om?Q;v$#3F=(Z%*9<(T*Uf|%1yqy{c4a+hd;+(&ohYshIo=$cbF}|QU z(R^v#7+fKNDrDmC0HsuZNzB7_jx5Uf-rSUQv3*RU;}AcpAshL7Kym=Aq%tIpK%)m2 zN<@H1TW8`VG~*C3QG39{C!20U346}me&I47SkLu}fcrlpH!Nz^_rJ5^UjAIj z^Sm1&ERn9?cM1q>rtW?h+_3<>?xOAI11Pq>zKse1Vt3<0zi8^h{|}cVD@{oTYODYN N002ovPDHLkV1i}Kmka;^ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hitmonlee/back_gba.png b/graphics/pokemon/hitmonlee/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa095a6ab85cd6719d9e996c23f9058497a7802 GIT binary patch literal 534 zcmV+x0_pvUP)Vcq@;6VV($Nx#m#ebdmt$(DgXcf(~@>m00001 zbW%=J06^y0W&i*Ilu1NER7i>Kl(BAuKn#YFC@T`Y0lqSHiP|%)S$eD}g0S*DQI-zb zo1sglJ`)l|>U3S3DYZk|gwv5um0BrY82*pnzkLUebFF_`ZdKi1(klrds>?c6I;tZg zKoo>CyY3+u0YPjBO6-Xs0INlBfGDFdv`%s~K#U@=_4qO%i!ihSHz&aE@ZEt&6+Z#C zF&<9~TPVo3;}O4f8kz|lIVzOS0cP*k~ZtkUt7s`Z?;86(E~*ZKqX Y30VuNOKTT4w*UYD07*qoM6N<$f~qp)?f?J) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hitmonlee/icon_gba.png b/graphics/pokemon/hitmonlee/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b45c936868bb37cbe4c04c4c5375651a9de1ee44 GIT binary patch literal 335 zcmV-V0kHmwP)DV$aM7Y1J}0A{Tm#KPP{Lm!Rc@&phX%3G8p zI5R;uP%k?OPpc7t?XuLHwMEf0EQV|L8KYwlquz5gFnc`|LGD*+IxfP?Q8t};RQKN6 zvC^{dYvb)he_r1QMje3({s0X58W=U8PQdU63}XTYg5PF10fV#~!bf1*h+2+5MPL*a hSrZ?syyl~Pya1;XiPc}m8e;$e002ovPDHLkV1lYUj9~x( literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hitmonlee/normal_gba.pal b/graphics/pokemon/hitmonlee/normal_gba.pal new file mode 100644 index 0000000000..e70409a90a --- /dev/null +++ b/graphics/pokemon/hitmonlee/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +238 197 164 +205 164 131 +164 123 90 +131 90 57 +106 57 24 +255 0 255 +255 0 255 +213 205 205 +180 164 164 +115 98 98 +238 255 148 +197 205 115 +115 123 32 +41 41 41 +255 255 255 diff --git a/graphics/pokemon/hitmonlee/shiny_gba.pal b/graphics/pokemon/hitmonlee/shiny_gba.pal new file mode 100644 index 0000000000..74e6c64524 --- /dev/null +++ b/graphics/pokemon/hitmonlee/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +172 180 74 +131 139 32 +90 98 0 +49 57 0 +32 41 0 +255 0 255 +255 0 255 +189 164 139 +148 123 98 +106 82 57 +238 255 148 +197 205 115 +115 123 32 +41 41 41 +255 255 255 diff --git a/graphics/pokemon/hitmontop/anim_front_gba.png b/graphics/pokemon/hitmontop/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..69365ac6253d83fe92fc7b5c156c258afcce36ae GIT binary patch literal 1153 zcmV-{1b+L8P)Y$#&CSh}l$>H>Y7h_*fs=cD00001 zbW%=J06^y0W&i*K|4BqaR9J=WmN9SJMij?yFoz0I1+9kd0<^kxDbS;VAd3O{9h!D1 zQ;|2si@rn(svSC|Fy$pc+MqcNmIJu3M7Ypr&{#vU!y$`dyY1EnhOJr*UxPZ*_sIWzoh~VSM(;&{y|!WhT9Zz2mZpW#F2~ncKpTnJTH+i&b!So zU%WlSOKdnn_zPXJROa!wAD#Q)-aPQ>`OEIv0Uf>ts`{OW$u8bMzo4s8xuXpPDsIZm ztZ>vP{(K5hzzlHDaW;SQ{dqS6+S5R%*|PP|H@@P$>M!oQ?)?N%*l5&rz2o4A{>9+9 z>$-5~25^KxMRvGFDM%^1Ph6ba#q^k-G~2_%cXWkIxs8GXfvu@|`};zOVZqXkt4ANT zIVp*)b1@B&(=OgaF#;+*<1QJWmH*r-A5M2Ehs3ujTs<;+1|y}j@`3QD0gSopLonU% z4G&C0j>`wHi%9@GylPU|34vlCv+^dOQGk2GKp>p)apLtb@QC6EFiX*kN&OfRz+T1A zDR-%H=*a-;X|EEzN@D3cwgE_Jd^S&Qju)jAc0!37{}v!N%LB4|B&3uF z{2%|hC_c{t{Oufpz8VO{3&(>DU=e-9*R9Qy6Q%m|$f@i-Qvv&)7dn+a)j5i2WOmW1 zv{XHyzVi(_5oMPJ2R?0d)B>b~JH0V(DFsO90WSTA>U<2S^M&q%iEU67>5L=Wz~6Hf zZFa`!8=7t4Lj0Us!5yPZ5N)X56Hn7-xqfTx3E{OlZs@(m*}Qi9)@Hxk8vIJuMJw$( zwcE7apKtZ?-E`xs!43kiuT#Y1umf}O!oL1M321fm8H0MNFNmWTe8$@u`vSY`K7N&v zp5uId2WG9oKlv)IMakt|6%a0eQ@_+zMKoP!^l}+jzd~XT*cz?T(d=T6qlOg>%Lu@P zbP0<}%BW#0fzj&k0eXuNNM9O(`DOwz1yBMBb&B4>RsduKY!sRcTebOu6*;M(0!nMK zKTs|Y$#&CSh}l$>H>Y7h_*fs=cD00001 zbW%=J06^y0W&i*J`bk7VR7i>4ls{|RKp4g~)I&mTquuUs{r~}=v(|&obgPXWLFwWz zQIP1Ikdya-&qJIRN)=JsFCtm>8XV%#so)4f6o^CM`rb*lC8bH$(svSietO=2cT$x9 zFV25HqgUon>+0kgz2ZM1JI*K7eIkQn7$3j6;iLM8J z0x&(_=-Y>eVV)$wzR)dpKb`1nz^2gnK%zF4!Pxz5g7gg_J`xtw(?lP8?k|iwtHP)Q z0F+r&PnqxsAP5M-&G*iU1O~26tq~Xi5C_oxhaOXH`)wckcxxsuX03MeH-5XHSXM`@jrLYZPTIGf6 z@}%~Ice1?^!f$<+CI|IyI&PJh9AY_l=*VR`T)|CZ(Se8=I8l)AGOK*Z3B%7in#}0RlkQQHfJ|QIk zKPl*)J-Eg2Dd9Yfav4DH;a!YsG0_UkJa3@w_Ih=Mga_ESAN;R$EDWTBw8#@L8hTFv z^#lM9o=pJnHC(UN)(FbBq(B}Kt(hN1Iq}wI4H4eW14<DV$*lc8?JFbszK1kJ+~4CW!GXy8Cu%2u>9m^43Cbs!+G za_C?cDOv&oJhx7IyJLeZvGT{i<=9`l?q7XD0#Q9H9VD2ls50)cEQTbxc(Iga(2^qV zj4p;M080eLlN_TawzC*_M*+{5#uEj#In)9sBV7nGO6|p*r~p9~)KHvPa|XoP1Xl`) zJvm|RJO(vG20*B9QXLDNfz#Yx+t0XVOz+40Z}fsW+3O+nc0z5}Un5$reK@nSKAyY& z>v^u%XW@T*s)jmco~mFFzsEM!MF4STlq=;#Aon^*3dzoR{knSgl`tPiS>9Yw%)`+5 zQ^kziuB9elWL!=@RD-&FGCd3gfvmf{eT;P3mRkWS#`wg%0PaL}Q9HNufvs;EC}rj; z=cec`Wy0K`+kS?Ajto#bw>}w%nQPkf^%&93PIR_+g1Y`@V_NSCtULqq2R?oP+Hd7h T)}E}V00000NkvXXu0mjfmWbC1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hitmontop/normal_gba.pal b/graphics/pokemon/hitmontop/normal_gba.pal new file mode 100644 index 0000000000..b49c96760e --- /dev/null +++ b/graphics/pokemon/hitmontop/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 238 156 +230 205 123 +189 164 82 +131 98 16 +255 0 255 +139 213 255 +98 172 238 +74 131 205 +82 90 148 +255 0 255 +205 205 205 +148 148 156 +98 98 106 +16 16 16 diff --git a/graphics/pokemon/hitmontop/shiny_gba.pal b/graphics/pokemon/hitmontop/shiny_gba.pal new file mode 100644 index 0000000000..8c6bbd31fd --- /dev/null +++ b/graphics/pokemon/hitmontop/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 246 205 +230 222 180 +180 172 148 +131 90 65 +255 0 255 +246 148 222 +205 106 189 +172 74 164 +115 49 123 +255 0 255 +205 205 205 +148 148 156 +98 98 106 +16 16 16 diff --git a/graphics/pokemon/ho_oh/anim_front_gba.png b/graphics/pokemon/ho_oh/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5b60f009a3be86229d5aa7ad37ea051a18a5b256 GIT binary patch literal 2369 zcmV-H3BLA;P)oBY7h_*)*a~`00001 zbW%=J06^y0W&i*Pzez+vR9JEe^!!A}Hm9{~0+ zW;=_T9_Mz}+TUxlk1LvMpE6)xBxVoYj&`6bb0B?SYZ?QbIpEx$rVetS%`5JTwkk$} zyVKNu?#l(xQpI-1odce21JKeTu#(&KqR6{?i^ob%(Ja#N{j;AL?q-kPzeck z>n%|i+W?i@L?W3D+gFJdEbS#xcb0)PQOTax@&!vo5UW)9arB8rg>iXUI;w-ArRA#RZTPiGrQ9Ec=Xo^Z*bdW|n|F zmH;rD_wHM21bCEYfVSay9(!V3+j^npi713^Jld9h4Yutcr)#%Qcd$l2RGAZHLGzdJ zchYst<4+inU92EsiA>85fK`((mmorsQ9{PA01)?Dj(5hY9w!=QJ+A`Da%$>nmV2wn zlAviDmL1%^W4)|5u%w(<-lft+rsikh;ek8zCFqUv;d5;#rMV6X02%jU!^UCz8g-+5STb1kPaTrQ z8Y4v(3)I32)Yn+9={MtXjxa#bR3gZ7p6qS3?ciQ9AW^T^zZI$Usgs3#L6J4#77wgr zPZ+SO*N#i$F`@MOcMOmK>_MSpckcNkzs;jnyydyBp)GbJ+zuZAj4`h> zSDT{(C736&Y_pr+`GH@b16Ne+Z20FQfZl8Tf0*%*1|{R_-p#{*68XnHfo3G z|HT0MqrPs==Re~0>+5s*iU;t7=aU&~d*e#!I9y^i(Wqxe+0XgMtN@?oMJ|C>mrQ_$| zrv^U6X9ap}zGhD5-XQZp-187?xQQ>?K@X?$x8 zVtovWra3!{pupu|xJI$xv^u3@ETN+XGt|)EoYG5t6Hi~cG##6Ixf*GK>kqa#I-vet z25{6UHuU1r5)kiia@;hyYU}-*@+xoYiSUR^+q*bNQIuwt>t=xc1$jkU>;GgUD$`0<(wrpgS)SYrFY$ zj_iKsf7*pBM*;8NZjaJAac0gdX$j##*=O&uP=Yo}OX57`AfNydmjL@VmrYAyM#;f< z1>~gJyBdJ?J=|XkGYY~11CSnOI~Dt@$-_xQ`+o!x3Q;UJ3#8mjPt8memOg@XT0mw552k%hJIfjMob!lq-#!@;6%O{wpj#i20TmocC(NXdE6M z=2F{*k?aR!KRzIm2Hwwrn*jt} zqRnQbG$w@+05m&96IeprZ_h7R?CjmItAEH)DlkAOtfc{n6!BsH$i-f(#&!0R$_L*e zd1MQ}k|jm;Q`8Lb+Ug0R`~U!ID}H`p`C_gC&%-}-;XOZ4JUWs{7V!Z2B7<;nHrp82 z`Ew$3^*PN_jYiDBn^9KN3NizNe9@jiaVT+IE?rak-MhSk)w8pF z;RX4EjUV|+wLU7y1)0g4=L?61Zt)DZIQs1f-7bfv|jm zi|ck0a{#_N#u5rji;_eHJ!uv|_^vz|*BghEMGE5lHzh@U*zwK#{G@Kw4LxCSk+FukCjl^F^ZG+O zn8$}?_uQx%%>0iY5d9FK)NC+oKl&ih9SqFs18<+L@dn|8zvv~WFn>QB)E*E$WQ!i( zoBY7h_*)*a~`00001 zbW%=J06^y0W&i*Jy-7qtR7i=nmA`A-KorLXjlm*;AW9>$+W&zsn}rcb;TZ+S5(hlQEl>p+lx7kf~$-g_5O6UUGd;t`jTVdFze(e*AsE?wuXy zKOCW^O|e050wgnkY6tje1QI58f9d;>BsPHjN03dD)aLK|LLwk-z|4b8CdepD1dNY> zf&|QEG_it2jx)$CWw_`th7>?%<|JGI1TsjJ*aVc2aB*h^GAJO6t$o1o2ox3r$B_U< zf<;N|hhq}KB&~oHsFe4C)g;Hhcfdx=Pd}X5W_5rl1)&^sOG1kL*n47uPYNM_-huGY! zqgIQt1O41);Jj*~MeqJaVKLZhk%PYfRagw3wOj2r0=Mri(>m&OI^=Ns(X3;UtSaKS z1=wB!J*_Rk)e?BA|Cm$Q$yql)C&1Wcj4)?;p0k5MkIf;j&QQ;T;2oHOo%tyNmv1C| zGXmSE<14_e-^!nr!Ntu71ga$6*?uj;=@~g(YsKND`ZDwCzYpqLB0ccRO=y&H;ijK1@6m8v?aIX$f3HdesR?&Ai8Vm;BV~7T; zY9xTXr>+dcaNVE+7)5ZtqxH0mqA2{dmSew*I(vIld58PEFdWu&0`MjTKXCa_I+hSc zwe@eXF6sxtA-)h%v{&M0)|b0qT_pnW8H*OACv}7B1i>LarN^YlwMo8S0e5JCi;HLB zxaz3^0-B__($(Xz8_NtZg`nUt=A46e)!?yB|8xX;B8D=KK`U(JL!(y#Fha?>MgyI3 z?Bm`F=sy5GAyOe?B{7TP;In#Sz=BfXD=hGt!Ym@S;oo`v`~{8GjnE7;sZ#&|002ov JPDHLkV1n16fmQ$j literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ho_oh/icon_gba.png b/graphics/pokemon/ho_oh/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd5ed871f69ddb978de343c2039e75a58001c0b GIT binary patch literal 480 zcmV<60U!Q}P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IUP(kjR5*>zlCg@zFbszC1o0!>LkMzkL;Nhaq+2rtsx5t(33F(h&5lD1uRwS7DeH6>99e>LWx8 zL9_D{U60VjXzW1ApwACPobJ&WGk`Btj26*hN30}ANLK2Tr@EzDix7#Dpl?xHh^!?( zWvr5w_*!f32TT%>8RTVTPX}(ADk6CphI?{8u&dhnN6sC0KKLH_li_E&q;Hve(0#KApxz2M-m7hWP)q-5p00001 zbW%=J06^y0W&i*J5lKWrR9J=WmN9GFKorMsR3?3df+_TS6g9Y0CqX&|O8m%FO+oF{ z6l~`-DMOoB5XcAd;JNr9pP(gE$xwVsYE+51_j;BRYRm5lGGqz*3q0KWN$+tw^OF#5 zo_H{&R^9tm*LuK(1dUP`xjZI; zU^-T~P)glQavod?{P_W3ql`q(eW^vcBSnX8C6A8|b# zuSmMy8yS7#o*+lBB&Nvyb8NOolAW;Z(f5Wu{&pey+j~9WCS2z8JelXu8UXh?y-u52 z2-jY1+O&C`wDy1M_P2nw|2N+L)&y(zClamNpQy{-75g9Mn-ln@{l8T95BPPD`yYh|8;@ACKNcYYtl2*yfQQ(hIWf+?{pqb1|LxDZyI^9ch&x1CPoqvyc$%Mh5nX&)?002ovPDHLkV1mafINksN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hoothoot/back_gba.png b/graphics/pokemon/hoothoot/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab2253bd99e89c06cc9b55fdcbc5c250daf05c9 GIT binary patch literal 618 zcmV-w0+s!VP)q-5p00001 zbW%=J06^y0W&i*I=t)FDR7i>Kl(BBxFc5}4N{jU{@}7l4(aA$Wrk%W4XKTt*#Ld*9 zsC%9gpoT0i@sla_3)Bi=#Hfe(dX$rxlw<|%+WvqC>i_P)BVn@B`LA{n-M8Dh1rSwn z%JUzzdRac^yte(|XPy%s*98NG1FSh=f6s{nUS(=I)(OTa^Ya{zd%l~qBsF1P^a zB2oqk3bIGwA&B<0nhBPSlbc}A{@w< zb%FYnuL7w9;H)~O2Y&>N{{nD#iLU@-L|p@>P5{;qDsuwxa~+u4{-g%@8Cw3g5op)f zX~y55`ZI6|qr(Mxu9uLY&hS~n{3)(1!VguV@u*E?!mjKVI)xN5o0a}-*^4RwMv5m$ z$_W|J6!Hc5aP+-lPe;lCzYL(49omF%trL>TtIhrNCoaBp4&=dfu9eDUT&T^PT9 z&Zb}skWOf)6TNJH-2%SQn{;um2d7^@FBETt7@YJwUxfT5`YnL>_5Jo?+xET&1pTHh z9F^+%S)1=`7+$xu@D~e>gR_%_znFZST*mKC6aTV)16~bgrQXSg$N&HU07*qoM6N<$ Eg0+erWdHyG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hoothoot/icon_gba.png b/graphics/pokemon/hoothoot/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c25065113a5ffd959ef1153181c2381e91595313 GIT binary patch literal 350 zcmV-k0iphhP)DV$< zf*?-8Qizb{_f%@{($PsgN+BQrU9RO*>bFbZa!}I?8F;}DzzwKH4=f@dgy^DmEYL$pB8&QnPD@VU1|nCWA2x3zjI1@ny$Xz4%=vzBhy*0_way z1esV~S4xr~6aQ4mLI3>UT%#T%9a}(8FZ_UYkiuB$$4r=%2}39Hg98$V44THig>iNQ wCKE;*s=Z^2+{qvzi1yxB9RtNon6LbJ0QbfFglGXMYp07*qoM6N<$g0+H_W&i*H literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hoothoot/normal_gba.pal b/graphics/pokemon/hoothoot/normal_gba.pal new file mode 100644 index 0000000000..f1a3ee54ef --- /dev/null +++ b/graphics/pokemon/hoothoot/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +246 255 189 +230 246 164 +222 213 90 +205 189 41 +172 156 32 +148 131 24 +123 106 16 +90 74 0 +255 230 172 +255 180 106 +230 123 41 +123 123 123 +82 82 82 +16 16 16 diff --git a/graphics/pokemon/hoothoot/shiny_gba.pal b/graphics/pokemon/hoothoot/shiny_gba.pal new file mode 100644 index 0000000000..3b951e004e --- /dev/null +++ b/graphics/pokemon/hoothoot/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 255 189 +238 238 106 +255 238 115 +246 222 57 +230 189 49 +213 148 41 +197 131 32 +139 82 32 +255 230 172 +255 180 106 +230 123 41 +123 123 123 +82 82 82 +16 16 16 diff --git a/graphics/pokemon/hoppip/anim_front_gba.png b/graphics/pokemon/hoppip/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1295bbc84b490967f97ec5502196f877556bf1cf GIT binary patch literal 857 zcmV-f1E&0mP)ERPA@8#`ocA>J*)xiHQzL#D$976H93;v`Cn0T87Z zfU%m2W>6vpVr@025lW7RDoLEK(-RP7<2}LuFHAT)f}}` zC15u=?+#tvw2u3z?1FI7@oq1isVCF`LZa(h-*N908%5|Q2tp*p%5~jGCEz>Gbp8Ti z*BjktuY1RF=eG_3fqI)a5Cdom6;^?&!~}Ak9&m$Tt}3y71-wAnW8yDwVUF*8i3b%C z`Ysgs(F4kTO!{os1jy{!QrklA!wXm1Apw}nuq@DOS{&uQELKVY`DY+h4=Ild>My<4 z)_f3?8N@~FsnexG-xJ}Z_Ir{|7PhASNp^!w`Bz=_UyHGC#(1rG*e(AVdN=_13zn8oR(_nZ9!&`Djl}FJ+Z{)!=+^-NXA5F+jgs}ryg#4#7s(|cb-&6vs3(UYC zi~%Wu>H-YL;aTf1CgFq4yY_zS3gw%JzBr#AdjBxf0?w@W4-27u+X0yN{=r+UbkC;Q zKS;prA0{992Y5FBE&rf?UElZz&3&HzgYK+P{=tXa(me1-{~(r{d{79W}L;cvf=s6Cr@100000NkvXXu0mjf_Uev! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hoppip/back_gba.png b/graphics/pokemon/hoppip/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d042909610279d17b0d57fa2b2dbc540679c26 GIT binary patch literal 582 zcmV-M0=fN(P)Kl(BB&KoEvqKmm>4!LG0IKp7#$L+w+*HIHHEnv@=B zD8tf(F0jqMOxk+~>o7XW&E6Oe5Z=wEij*Q#&j0cMGsA-Ceb*PSo)B(eOC&cR0JL-k z5D6;Z2VM)-9R~e8dn9s=@LD`CTnUmyCbc7BwJ3^Tt!8h1jqHmpp&g}xoJPgICJU(TDhzuO71@osBNSteFAFL`!fNei(2o97EDUWE3v zmgbIr$=9X16zjUIYbo3MX$%tLrIrlT$_nU4SG7`79nv&42<`3o^HMROD*#B%@1no) zwN|RGbsPmjm{@W=UxS{_rmRN;3xMf_y%A%G!VrJ945D7 z3<7{=ws#CVEQM@vb}$UOK@`FGNF5Cl;|hE3K3oh2l>zuM;GeSrz;tFD;eg3?2f(p; zCY=PAEAX`}Ka1({kpH)|0Nn`;_bwpj?&y+W12C=Py#wf^FhZUp-8TuAEjoZPKc!(X zV%<1(0}N+4MTo07*qoM6N<$f}2GI$N&HU literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hoppip/icon_gba.png b/graphics/pokemon/hoppip/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0692f69d7b03427653547d3e26ce6e3b61e7d6b1 GIT binary patch literal 367 zcmV-#0g(QQP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H?MXyIR5*>@k}-0GFbqX?g7u}Av{YNWarO!-GER<_qfnX9QK6v# zZAl-vp{C#`QWEWu0AaZoWPf zpnYqZ?cVNfZhaZ506uuLjbjEL(QNZz=9mr!bNV#kMTL(#lP(>P)M)wQ>Ip%Nm%cLX6eN`dnTs~uAfuv!j4QEd{gO8^C^ z1j%6u8GB6qDTnki2lUiMK)~C_6JW9Sobl&3c=P>~V&S{QJpsQ@i0E^;|2hCgo_T;5 z8qyzRumipcR`iZkFU65<5+n(vRL4#T+i`#eD7T2#cZcAp(<5TlUiyGcm%@H%&7Sjj z($sy9Uut>q03me`QzK2|vkUwW$vdkeYy!b1?DZ0or}5vlTFa_*I)l4_9%k^)}^zxoo<5p1yB2Tq6gF zIX#u7c^267z#vCh|JpfX>$b{Ycb%+vDJD&tG-*`NJzy-KLBPO|;{hW`vcCij`>z3m z@T6yGLlFMVQhLT+>Y1-==K#E?`IvHb<^U z6vab+&>1|ifHdSlzzsmp0<$O{@Kl(A03Fc5|_AdxB0#9$aMOD~y1ht|#%bs_20 zi6t32Rf2lxGw>)GP+Kwh1sKZNNeXE%AR)2!mMFSU|NZ~jiQ}B>A4_&ME=Sdak2-)! zU?1*a+5rfdRzTSSxDfpS7y~KnoOl)kIbw1Fym~73Sv*1h!J?? zfCA#4(NXOH#rg=>L$ zXJRI&0)A0$EnqRxHsR&@YN^W1^fRzPShj(pQ2tAT{j}O8w2#AMOsVA>8)gp%5Y_ej z@~}dpZvfE7Bo1o<&U>MlS~eN1(RL0`Ddj)Qx)P0frtP2_Jv2a4I^I^cb2?dHzg2tE z+Pu5E-FF*xwRFgm)kTuNTF^iWc7KvF8n~?Q;#jFG5^xVdUj7XbHQ+OrkU-i1Y8{cl z2C5VYkRP1^f(qEs-|ei+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H;7LS5R5*?8l06E8KoCaf1nyzdrVZo(v9(ESmo^8OKycd?0$#_! zpjWVnkbtZmZ=;?q= zMAm=7DX5Bsf4*d$Fb0@}(Va;cVRY*AAWW>Ec-z7-x{kuc3%KJXOfipid=zFE%z!n6 zFxW0YrS$h06$bEv2iiVVnG0TyAf8hIkOi#E2UG=)ZV?i+UjP6A07*qoM6N<$f~t;| Ag#Z8m literal 0 HcmV?d00001 diff --git a/graphics/pokemon/horsea/normal_gba.pal b/graphics/pokemon/horsea/normal_gba.pal new file mode 100644 index 0000000000..a14e2b4c53 --- /dev/null +++ b/graphics/pokemon/horsea/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 0 255 +255 0 255 +255 0 255 +156 131 74 +189 222 255 +164 197 238 +106 148 180 +57 82 98 +255 255 172 +222 197 74 +255 115 115 +197 41 41 +255 0 255 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/horsea/shiny_gba.pal b/graphics/pokemon/horsea/shiny_gba.pal new file mode 100644 index 0000000000..f163c929a1 --- /dev/null +++ b/graphics/pokemon/horsea/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 0 255 +255 0 255 +255 0 255 +156 131 74 +115 205 213 +74 164 172 +32 123 131 +16 74 82 +255 197 222 +255 156 180 +255 115 115 +197 41 41 +255 0 255 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/houndoom/anim_front_gba.png b/graphics/pokemon/houndoom/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..adebd878b09d05a2ff9bf8ceb4a368b7ebc18a68 GIT binary patch literal 1439 zcmV;Q1z`G#P)!=#UgB>bf0*j_um5{%hRW>roWxz+HH~AEb07MRhA00=6XH z$M+uZ$a|lnyn{y_0MJ_r*saxo0vvm~63_u55h$LurSDNs(Mf@*8QbiCYnz8)B@~FJ z@rI5!4U-eR1hSnAz<{QK@wJpm0_vs_P|Cs>A1sQMLNqriKm!0Ghlm$nJDXOZbm*Uw zECp&CBP)mvi_o}I4!8hJ%>s^rV@f1*Kt)oGnrZJE0fdAwpw8!DC;{90%-*#E7ou5X zS_2(}5+k@s#+K0D$B_#m3Qb^`p+yKBO!GjG06>X>74{6X6Aa?9G_E-GApjX*%&f?Q zxSR!?a4PWL^ANj?F)aK0R+%Fb#G5z!W^I+`=^91 zNDl{&!-3bd2qFRN=daj`0rK{9$EH=D#-%d(ihz5b*SG1tjyZtJ06g=b(;|?fEd}-f zyyri6G9WJHpa5Dw@ALg(SOL&eItMg}N>$cbYzjmG(3KpKQW2^x0AvGxDV@xGh@lvu zK`Aw+F?ymm(bsy%D5EkxZKJP`S2!BE} zI7m~_nUW@3?TdM&`v$z9=E^-Y{aM5TwcXwth|n>D@f@f%dO)mAL~b0HUpXV~*&L{M zI*_ElG+O{VA<}cJFMjlAz4G%a9cnB37oZW6#>$>U^eI_2{(n7ccfVc@Om?2US_vE< zdQVpp$G+!1eZ6A#&iq5~5$ILV-}gjt>>sgyLzIvMiuM2; z=<_ny*!YBX3WQRC5(jigoD-+#KZw@5A2!l+8r>{)>FtIBKw)mvkXA?CtKhQU?S?6l@*C7a?!0Fqp7gd0}2707@tns;(_*|4Z!OiNYjdjg1) z08_yb8(h5vxNWeH6DAmJM^bYeMFa*T;L^Q}3kGlCZmy+7Zqwodzy(8ecqIpP!)xCC z6DAl4B2su$^llhLqWi~7nkH*^368{km!hXYk4$*?U*5S{b3gWY_m7K$F$aG1ME5TW zMtUr|e@QShAnX1m!4Suy`&S6YqWf0}1_eGw!vbZOQ}# z6@gR_RH_GEmV*>?qJO45A9SB t%KpHAQGc+j{2|Ns-}u9d@psc7{sACxkWpEm8tVW6002ovPDHLkV1jcakoW)q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/houndoom/back_gba.png b/graphics/pokemon/houndoom/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6aae855c6a37f918dc2e5b7c8b861fd7a31b0de3 GIT binary patch literal 626 zcmV-&0*(ENP)Kl)Y{mK@i7JI%tu`5=EMgWc&bzIa(CkdkR(T2)2bT zZMyIZ=cmZCt;n?lQc`o7ojnBX4ZJ|I1+17K|M}i5`+shp0XpT^En<7iJ>2cPb^x%C za`k-usM!G?0x<|T^OkrOyD{6~K?A%1;K^p$7=U~VjKL6*;ScBdz8lje(1W`N+mQD} zIQ3u-RA&kBi}Py8&=#ivyIBf68Oi&=0s;^{CO}NP&jJjXHBnNir&e)=h%*?z&UQ%> zUp~d}J_BE2Su}t4HvqG+)|N>Y*%>gz!rIqNJ^c{_HNLRKn+o*qC%9T*!4lnmM_@FX zvKv--|E(dDdzQeUF#qvg1D;ud0gmDG=9>;oM8Vo>vr&K$LR6SnRiyy=DTJ!|sm6E= zVgCN%rU1v#C<1v5;UyGOv$KbgLlG2IJ9{{Wptq`b3PEqgDTgb-vj|)thF%o78bXfF zVH<)540t2KEn*0z0>tedE~JdgxW)Akgw>NcuD`FBSAe2iH{S66*E$gXXPx8qr=i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I6iGxuR5*>@lCg4xAQVMOK0xNKJ%+Vk2l;^g8@EelE6e<Dpgh9lHoqSAMYH0zMi+N zf41QE$Dg@?##S*doIsmPX?zho0TD+mO~5$!P@S`Sp2TjzpEHv;l^ck*nQk?ua|_;f z6l4=!0w@-IRiXrF%!6-Ffp?t1lbg#r0?G-j^m?Z!q6B!~>-7h3%YgVdz{i{3@uyJ< zusRrgU(YC@V&4QQ^NWkY2>5FP2%Cu>udy^!8E~ReRS4rTi-Kte0Awcx9J0x7puq*y zU>@k*sc-_`UTaNSfWsyYRGW3Niz_&R+C~DgXly{zcLBJ16M^m#-AEkbaMTE)JEVa& z?!MbkLO2-F0PbHNoV*J`Y5EX2LB~h~5R-eX*a;L~V+Jv~LQ8Pj$?#bpIQh4U65cUW zQvl>muxEPqCJkp^WXzNR_86Pa4!=CdsTi9OQzTJ3xdwx)=PV$A8lFwn@ST|2j-($vaZJ9pW> zxy;ecTTWo5*FPJp&x^6c}F)PGT^ z|H=7aBuFD*S^dZODW;X-dAItPPI*_7a{YVaUjMYb`HMUKI{*>#JN*ME?T+3o^pE44 zq}{8sZS@bZ5%0L{Zh>PAJ39`$qyBjp0dAajxBAaQFpdm^{ZU3`4RAzOtABhJkD*AQ zSOJZx9RTJBDDnf^Ur~o>36QeL4}u0TKgiqsASDIZ{9tmMA1ZZ|6W%QHgR%Lc!dMV5 z0yaOGB0u#x)g46c1AUAHUJ00000NkvXXu0mjf5s9D_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/houndour/back_gba.png b/graphics/pokemon/houndour/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..64e10495425a00f5e3bd13b69eb12600f373145f GIT binary patch literal 508 zcmVKlf6#EFcgI&)txK9K!&;xK<&(^ZEog(n#>&$Q#UG} zfNsFpiDyHU)kUZ+WvQ{9pM_%>Vd$AG-7m-Y-0MWqN&iuuvtIx?Xpe*eIjT=gTp%D7 zViYl=Q8WnvQYLK7<24BdfvHkr%=J2zirxZ%91u-}3II&0zLd&}Fwj*}2>ZE8fllb8eN|mR1XDz=J!@bca#-*5MdJ_x)XxsA0@9!Zt8Q>1_74c?iq_%d8oiBP8-n&X z23e$S3yZ6H2uOU0yTvU6rp~}Q9F~jw5a3%lESG2*tZ9Kh%?bg%W(s5;aR^bbGG9Hx zb-&BHh1}p5=bsY=HxZ?!RpkKd-Am4STsjB)>j0f|FHfKrI=t45s6fDw$69N5%Qnjp zFm`o^#2YFKkWp(Yjq%Jj12LG+-JH$Q0-It6uE-NR1vf+sWC+NfZG*2CvBVAl%twr0 yj3W>*tcIYqC62rDTfG^R%Ru=K|Jx`1vAzIlDW<`KTo5t<0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HOVm z(Y821a4 z|Nri^V&0ShoN7U|?(Ur4_It(NN}RMYVtW7p0RMxO&2yBLIa<}l)ue-z<_VQw00001 zbW%=J06^y0W&i*L{7FPXR9J=8ma%W!MihrRa0odxpf$yV4N(GYc(YHaSq*_8a)|wB zxB!WGR0|!I(K5oLCbteONKY^EJv82SS(j)+dLx74_V4*bdQ`=1dN(Cmb zFIDC8D3LaMQg`4I&0SQfkn8~GFuBjIoHE(CCy zsASYHJ=7x3+uCh6jsSo^{;{uq)#h&&L~Qx33p@G^k~KCx|L9-}5)u zoX39b%&C``7o5jH&_MhET%7dzNk3pdOXU}KdU?_p)@5xpfOLA%@AZ1``dz<>XZUc@ z6ZY=dFX9<)UV;0p*K5{LK;6C)z|Gwcv{pbfY-=9@xcd0k*(F$nsCu~gQ}0Y`AGrHC zK%cf@l_J~m2?}(?X%yz0I3VX+@keNZA1zYW^$p0;(e)fDVt`cE^I<#;MkK`G>VumS zzg|C?I>Y}Tvwz;Yn=@Ls;?D@6Act!-!`L;O25Qp*W!Vko(iEVzOusItI!40OWp5|l zQj*qX9`v>;Ng@W9sWl~r+Un8@(%C+l(&j)+0i-BYA;}aV01-m1DFEyTb(c&5gmutk zm@s(;AY1FtrUEAUeB?s2k~NFg37stoSa5Jl_fGhC!6Zhqb6PqfYb)U(bU_F@(@5$; zIWL-JVMU5V3n^iEj+?lZ%ivxf%TUnn8Kw;=Gc+VUy@>@iY;QU^tn)eKWJm{&&u5Dc(ByF|zb3}6tt zE)+kg2M?QNcc==22@#~*KzzNn==~nLPB-&y9vvi zU){zMW`a7nyyk!MslY{__s;?FCkqs?bLMxk8l}@eUd8(2+}%e3^~1by-}T3_ri0^Yny6iG~{O8@`> M07*qoM6N<$g62w!=Kufz literal 0 HcmV?d00001 diff --git a/graphics/pokemon/huntail/back_gba.png b/graphics/pokemon/huntail/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..23ccaac12a3a8c8bf09b8c809e0b8f90c2b3997c GIT binary patch literal 688 zcmV;h0#E&kP)1a4 z|Nri^V&0ShoN7U|?(Ur4_It(NN}RMYVtW7p0RMxO&2yBLIa<}l)ue-z<_VQw00001 zbW%=J06^y0W&i*JE=fc|R7i=flre7;K@f$vaFc5ga)ao&bwO+INhB^1I&X1uk)Lsq zXhEDwg|e1z?kXfC6uUA`l*pSRzkvThk0Mc17-*@O*}KEoH)|xsmVTe#d$Vhg5dZ&l zw0^c%9)zLPUY%q*J`e3wsrA_7@4nxQL#Y-l5ECFt=YftS1E&x9gdPPr-IG8-jQW_@ zMT`+WsUpkELIjxK^VvH<#d5Sq7vdsPqkXyvB0Zb!0}f_snp(fd!TU5l$+A-)L3);f zdg3EUpMZJP%};p)^q&Bj`yUSTw;qFu16C2d_84S2z_dT_!ho@G31rcK*oFQZzG99J zVEPiw1J4X-05CcP^Oyr%h5D#giQg3f=BpXB2PGhP9iX&!l`j~eu7JSpw>ej#)}gSs z>n|+OG+c-u-?<9#7a;osxW^=e>$OF_BN(73#R*6l8QmXUf z^QYZ0wgI^Lxc<5DbSy%JCGPCibKf<^YDfLPa;x+_8!C6eBl6SN!7W+mKDJK+!}x~ zBJfxQIEJYJ-XeH)lEJ_M(Ei`jxyB88Rsnp-^~(g%0$bwGk|TnVO27~>)xJso_51?e W!cd<i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IAxT6*R5*>*lCe(1Fc60Q1o6vMWdSiXQkROp1zV?9@f79ZKx8?G zB@zq9*}4=f5*1x8I-I1`=PZb^H`$+l-`Vmf#1)imr{Fc(5((lF$}++=i)Xnp^H38shtFUI^pb25eK=KYyav+@Bs|OL6 zYs59zUwZhW$(HKqj2C1Pf$!XggcnAfy7tne7e>C=Fr^oUN*nGm2m?jvHwaU1Cc-d- zMqxBFs22tdOANwrgL+{q(*$6>FtuY-!CD>t{wKg&1QMsFIwb$m;RoVHxDiS9iFW`1 N002ovPDHLkV1mPYxU&EN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/huntail/normal_gba.pal b/graphics/pokemon/huntail/normal_gba.pal new file mode 100644 index 0000000000..192061e018 --- /dev/null +++ b/graphics/pokemon/huntail/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 106 189 +255 255 255 +238 180 98 +222 148 0 +156 106 65 +180 238 238 +156 222 246 +123 197 222 +74 156 180 +49 98 123 +0 0 0 +255 131 148 +205 115 148 +148 57 90 +213 197 213 +164 131 148 diff --git a/graphics/pokemon/huntail/shiny_gba.pal b/graphics/pokemon/huntail/shiny_gba.pal new file mode 100644 index 0000000000..713c54adff --- /dev/null +++ b/graphics/pokemon/huntail/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 106 189 +255 255 255 +255 222 115 +230 156 0 +164 115 65 +172 255 172 +148 230 148 +115 197 115 +57 148 82 +32 106 57 +0 0 0 +255 131 148 +205 115 148 +148 57 90 +213 197 213 +164 131 148 diff --git a/graphics/pokemon/hypno/anim_front_gba.png b/graphics/pokemon/hypno/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e3cd338ed8d7daf76d2bf670d8a11970b23668b4 GIT binary patch literal 1215 zcmV;w1VHw5dZ)Gr#3ph00001 zbW%=J06^y0W&i*LJxN4CR9J=Wmd$J9MijsW8Q4<{c6%=5NwBA?jYi;82YV#8H}_xY zNxo!lSQqEi_+RTOCuLb!@GZ8nL~>bAF2=dER^RB$*33Aeu!llB#5j0{$djI2~^HGyr6CdL7b zzLOK~fU?0rtMQ@+1Q!XV8UR%aNckhB)K!2pfHDAtP748bqRK(a=J#4Q^*|W~&nHqg z+aI<*;I~o)|7Blhu-`?Ag#9M4h9|EAhRGv-GZpxO7XW>TCd>rj8Ue$Pzl*Nf2e6yK z8!r3pr!98uvQdCD)f~laYhU8S`;60f+3v6z@0rrF4sPqx0qS9c}g!P~6|G!hTSP4l0Z z@uztWgwAX$9tt43Ddun)-`5es_L^nGym!3ICIxUF-_|vRoi%&9E`aAfEr8aahf(xh zJLz_(7-O7eq6DnXRXq>fu>(JtPNt*bvzX9ot1RmE3V}P^c}!R`xyH%zn+u8a)Xw)x zO3S7L9S66uOM(&zmF+0!0atN_r@o4zhLD?WMdXGp0cAhRyP+qk8qh+B6f5l<0X?+} zJe(4sz7Y9fv@&tY+cLn)YEce)5!eEGW(K&GQcwP406bX%b`V7EL@z?#2~372{u-Dm zM@s!9kiQ4M2uuJGBFx7xhr!ev2>a^^Y6XE<96!7u{Hg7N(t)YWbZhO7F8A{cw7UFV8mFztn)2*yIY zteb){N!0fm={5x8ckM1G4Z(P3s=-*^kzmZT5mN(LycUf2VuK&G{|xL(FqTmq$A72* z0a^;idvt=kk7_@jiQwl#FwPNJ2rUNbe`gnhv5fD;m-(++1T>7tTrlR+Y_O>SDhj1i zFy^;tHjy3yxKG0_3dT=ybY&O@!J`zyK)%eRpJ{?&^}o$eloX7OtU!Bn_kmN2`%tdd zVso$C0dWuzF9`;Ai5CSU0Ow`FXo=oe7YsFrCK!5%S}?5eHNi-Ikr@4<5{#4nKwt9* d`#w5dZ)Gr#3ph00001 zbW%=J06^y0W&i*J5J^NqR7i>Kl);MIFc5}y2<)XXr0oktHuSb^Ekkd{Sfa-~MUgMN z$)Vt0%KGixi*fn@rKs!By%hIS(#sO9mSMAdK{t#@UPyas}k4?yv{!6oq@h0;F zH{o#e?WG^+=+PorzVHJ)j*b9bcr#{0iQX@DLD!fbCt? z?<@gMU?4k|qKIm%^vCCG+;m1@-_KlZ~n1+5lhLtz&TpKqWVY z*?-*wpytiGb}h;eo6>sA9=cp!s-P~Kg9F^M>K00q#o9c{S1k!@_0a{OwX7_<^1XSz zX#|JdBEZf|+Oap|%!0$gjhN2tIhi-IxpEWSiHyxh=0{U2A7BP1v>8q7)Oec4g3+tcDC{@pK4lU;)UO08e^c_k_ zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I1xZ9fR5*>*l09z3AP`0^r8i1$5MKZ(K7h|TO{iyzzKaj)R?J0&`uiLJ(^Oh26 z>HGf8c9{0dV;Fi^l+lqQ&UZ;n8U>6urjg#ud$b(F$Q8(^LFj&f5bjNzm;V_*5QZ

002ovPDHLkV1m(qrIr8y literal 0 HcmV?d00001 diff --git a/graphics/pokemon/hypno/normal_gba.pal b/graphics/pokemon/hypno/normal_gba.pal new file mode 100644 index 0000000000..96218054ee --- /dev/null +++ b/graphics/pokemon/hypno/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 238 156 +255 222 98 +205 180 106 +123 98 49 +255 0 255 +213 213 222 +115 106 131 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +156 156 156 +98 98 98 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/hypno/shiny_gba.pal b/graphics/pokemon/hypno/shiny_gba.pal new file mode 100644 index 0000000000..af2643bd9a --- /dev/null +++ b/graphics/pokemon/hypno/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 180 213 +238 139 172 +197 98 131 +123 24 57 +255 0 255 +213 213 222 +115 106 131 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +156 156 156 +98 98 98 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/igglybuff/anim_front_gba.png b/graphics/pokemon/igglybuff/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0947bca6619e78e623f2bace7b2b6f004d34f3df GIT binary patch literal 532 zcmV+v0_**WP)*m!1G@@F=&3|0A{^ zBG`)nFfdY$=L9f9jgqh$RK0_s7SMuIS;9x&nnAjDMYLdR=AhX8o1ExCn- z-(JI;ZU~5ba}Kart`o%N9A?-GWJzTE+o)K;v@g{)twHpOck45N%4qy=G|XH88oh8p zQriYM?SoXFsR(0czsy=|a}>8**})%jfWB`4b~n|$_HSn_pvUCTc4PL$Xj7J@>I%T1 zw)jJ-UU|#O$;s(_jm2!I|1m<@|CjV92t&pw9yd0!ZQBK@OUi{@FwQ;?ut?epF6Q7ok5E Ws*6=*6j>1f0000KlQD0DFc5_qaMt{XJCyD|%36sy?MOw{c0~+cE3x=* zS50?nhlb$epz2VmL!QLK`*?RYcS&;9|CBL5_^z{Se(E}a_Z6Ua-~sjAECSxg>ecNQ z3LM%K;5wAcJahx#9}!3$>;iBPK$Qfj0ibpXC;_q(DA#~8;E#~epj_->ejr3&!6+0XN(eu5P$Bp!+&H%u;RDp%h7qz%>b7U(vbyc%Z!O-EN@ z&MSC-60pfD9#HhrMf5!nI5h08KX`#;29O@}!|Zcl8$Q!;-k$k#oq$ofuw2K;7uI)c lCce0xpJ&1tDd4I<*B4j|fzAd``49jA002ovPDHLkV1iNlyFLH_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/igglybuff/icon_gba.png b/graphics/pokemon/igglybuff/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..55d1a9eb1ab6b6670718ed29710bac8b819736f0 GIT binary patch literal 322 zcmV-I0lof-P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hz)3_wR5*?8k}(cKArM440i4KqEU5hDPJ*iCg{Mm(_?~H!mXc$WAK$E)4wD0QUPp;@V=~*l&v3CfUPj94W?E-GcjM(2iksf UWB|rEf&c&j07*qoM6N<$g2ds6Y5)KL literal 0 HcmV?d00001 diff --git a/graphics/pokemon/igglybuff/normal_gba.pal b/graphics/pokemon/igglybuff/normal_gba.pal new file mode 100644 index 0000000000..9b5beb0791 --- /dev/null +++ b/graphics/pokemon/igglybuff/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 205 156 +255 148 115 +222 115 65 +197 74 0 +148 32 16 +255 230 180 +255 0 255 +205 0 0 +156 0 0 +205 0 0 +156 0 0 +98 0 0 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/igglybuff/shiny_gba.pal b/graphics/pokemon/igglybuff/shiny_gba.pal new file mode 100644 index 0000000000..fd1f6fbf8b --- /dev/null +++ b/graphics/pokemon/igglybuff/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 213 238 +246 172 197 +222 115 139 +180 57 90 +156 24 49 +255 238 238 +255 0 255 +205 0 0 +156 0 0 +90 197 24 +74 172 24 +41 82 0 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/illumise/anim_front_gba.png b/graphics/pokemon/illumise/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0d20f3357af180bfcb38237a6a87b3afcd9a8088 GIT binary patch literal 1224 zcmV;(1ULJMP)N}PjIti|q&tj$_#i~s-s{8d~m00001 zbW%=J06^y0W&i*LMoC0LR9J=WmrsZrRUF3$97tfHQ1EC~COvp5NZuY&y9;qoqhlSc%P!EN=39T1F4{sKhh9=OwX+_auGXq{M zThRL6qzcabf(I#h*zX||=J%QR`@P=_^ZQ1Uj`b`x_vOFb>=hy4u^?jIYobU_%1s$Y5hE;{KiWfRIfHxNzqk0oW$9$i*~Z<8{mCz_(A# zQ5UMx!lCu#14<9?HQI&+0VEv${sLu#m%^IS0fC>{ugi=bzBnoqYb}bBK&OHm-=7K? zV_6Jo!9zN^w7KR7_Ia7(?HwN_C2B9_M2!v)rN`QCYrk~fX~`n z3MwW6P3csS>+W&jtB$JVHWP65}((JpY5;C20Kfw^aS37+`@# z-U5IcUY|M)!hQlhNDYTX07I)WBqo%>7@FK4(96Fy91Achnev6Mx><_#W*3xg|6W^4KwX<#vIIF;Pm-DZX=2>^U=Xrb1nxYhv zfTk!*+BtXUq32yMa3GaKL#U)K_HVL&e}FoGNs%=)uZT8=Y=GwVT)IkG*K_oM1O9+l z2+pnNI6(c$Sd4c$wE&lzqhsp(Gsn9CCVUO1=3WKk*)3%(fY_rz$~2Wl0nGF$?Iv$9 zpS}59p$-G@<);n;%>q_YOd!;SftoS(2dH4ee=xG-sm17+@MQh(20||VZ6Jy;fSfIH m)n@qzNiDn_Uyl95v(TSE)<{ga(MGKR0000N}PjIti|q&tj$_#i~s-s{8d~m00001 zbW%=J06^y0W&i*J6-h)vR7i>C(=lt?Koke?gBluY$cH#Bne{YWQV7NpSYN|k`7LWqn{g_60hhYnp@XXzSu$QMvOcaaDrkj2pl=+vi^CF0X5nM)toGXDSc-rZRy zYXvIUS;36?EO zKp>-4J1Fm6wN8k!^8BW?ffx^mUYxA+7Et6U!jDO=&G%$JeB*}?saA+G_c)K!^hN__ zascL>U;Mt%ObEsp`&`y+95#W!jZg6vdc(8EgrK~cZ|-G_w~aOO$AEk9+Q4bDE-u0N z{o`~$Cj$j|y&aHbooYe}xC)Z22KO33Hl>(4P6d3T0t_4g*d%vyIg?$0Gk#?e=J2ov z%XK*4olvw$vm!rE*T94?rs^^5Cuw>sK?Wl5PSl)`Je4hukqI97>I5mafZ=Xj4VdM5 z0Wx5G5>Xwni$%gMf(YnA6NnJXV%!Fko;83w*#V6f9aeP!fx~E{MaPJ1Q1qgf0{RBC z>lrS-E1*LGDgf~mg|g8XcuODZvK&WU0$4rUsDar$D5ppIU_JrlIt}A#KuvSoBi4bv zlY?_?Q5=WhBMo>tI$TiW^*q8{eW+#4Mu+qB=)?RgEB-h-;InV+6I(`tPn^a>i#70U xIGRT>{uX^Y&;U1>09)X*&ux=h+I{}B^%o5W9)5F{Oicg)002ovPDHLkV1nACDHi|$ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/illumise/icon_gba.png b/graphics/pokemon/illumise/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ac812de37956e2f3ef5698e698613ad3f65e2f66 GIT binary patch literal 325 zcmV-L0lNN)P)DV$*lCchgFc60O1T{W^52I{G7jAG6Uq=^bUF1bfoQ)Tl z*t?Q6g@m$Us}aJTxSMd>efh7Kwx1B=s&ddz;vZ1>(sOXqnDCT5G?-u5LGo@fKc)mU zKzMGDB2NH_k%20BlclDas)lX0Ljscs=9yzaSg6)`HL71bv*7ikj{1Zt{4~9VE1Jpo zPTPedAUCmdhTkRxUGN8xCNRkt5Qdg^HSEV)n@v^wzL|LDN+gqS`ZKr5KFt@(&z1E+bMTU5N8`Wrx%3 zNL}CxKVww95AWA3e7}bA5dTlS_hzvfxc>cSGjY9Gv^N5aqvk(tlZ8;!%(6Mct%9S0&f zXs!bU4u%3-&1S3h*eqEkO9iSD3tX4-@bO1`gS}wy+X8@-U?@$iH4A1zKj?qIl1*xf zg|V5K00=w_aDrEX7pLMhvE-aFCIg)P;mZ}^;yXbkw-G{wNETy^r2^oOA^TJ!9CU1mWPuwo@e%K;}Tx#;=?p6nY zlfN=R9UvdV{-$FC@aOhAz+J8hx2A;ZX5cOqSPzh@l*mIVB2-E;jtzB@(IkC7&kC>~ zNlKzAbCeyz?3v(WNa48&r6KWGR~><7lq?qKxvRZDzdmcjU1yo7FgDS)uL1_o{@p`a?X# zyBcO~`MWsM=S#gy69j&-Xx_Zh0#!WdUABKaY~QrCE~5mxhF|SB+n;o9v@T=sbclyn zCg^*sU1*VwCo;MFtoI?vd!az72O3lrK|K(|E2vPg5LG-I)J!l47+d=XhdMw6gI+L9 z>UbtW|2x&BwgP~85O>;)2N^KytpYP}ABltjA~-ayL@3fMMPSM)2!=nmq?`@pzOCV^U^ygLC={5b<+@{=^{%8W+1d!7TC zsKnAV)fo+#vAc8+&;z`XYA_7AV(5n`7o~Ax6$%)<8$yA3loPR8^atGAW%29V4{~B$ zXaJWS-`?J~TAjahppb@$UPHdsTK3QhLWRD9{8yRw>j8t&c_!U7)%PG(&a&cpUI&ag zM{KG78E{!u_5gdpm(raFJw8_eum@9gmjy6Io^q-(LKNMrKllrTMn!w@pZZgRyzoRB zGFN|kul_}U0l?ep?-haS+v=ZcE&=vn;&$)Ue~mqe{CoA+zD9*rp1(X^s(++^aD!FO kmg-;GXaFA6|DBD00adrkHI;$yMF0Q*07*qoM6N<$f<+gqS`ZKr5KKlCf&rP!xtuz>`h$4tFaObgE){hM?{P zNW_yT9dw_-S%R0?xuz~&tQ%eE(lyW_o?1eNXmUXPrM5(IB~vKfat48PzVn~|oTFCj zCH_mi`g(kSFu(OO??Ar26Hv_}1mplC30buapxLsN;xwm&21nfDc?z z543qHzz2>HwIYrX z3eS182y2#w(k#mWoQC08$A1#tLf~{K#4eGVn6;Navdszt=}zQ}u_nVV_R>j^oUQW5 ze3dKIPuQNzBp8QdGO7sViR}rXUPfesfDj9ka{U}QLVajVs^$SnijAIFs#7J7bR^B1 zSu8nQ#7Z%nF|!#}07LLC3*h7T*sxU1?2VsR7ChcgjMtQ) z9@D}7Jc=UHMUx6(YZFCnL z0y`C;i$4UqG)b9S#84tE)2iIF6O_7;RX7L$xP5l6jxJ+c zxSmeW)smHARRIL9sjjBJ|9)zU28`LQm-zem0p4P1UM zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H#7RU!R5*?8lA#X6AP|Om1Kwn+(=&$!)3fCk~GFh2S5Mwqn}CX5}0fw2&Vc!(ehlXZA4%+ZhF%Ljfu Y0SdIHTnhDSF`S%gAag+&=H}+4F#y#$F%S?C|INk!tfc01Vx%z;UHpC;00001 zbW%=J06^y0W&i*JkV!;AR9J=WmcNeEKoG{=pNM6ow27{`7K+>pfSeiy;`$!sj(ZYb z;JWMgoYcTL7Bp8RV*}Dvv3COqrSP9+c4H7yW+`a#6jtQadY%$H$|tXP46ud#wgphT8rIjh3{b_H0zgznB3NKAWDN--!rBGsnhH?3 zfMse5~MOlEvvTnw7|C7_4T)StaOc0L5vXhc9bb&8Kq$who{mAPi^700RZzCocft$K<@> zfFgwzwHoNDOAe@0O2T^qb{yF;;NymXcQ+lt+@dK>i5r?1jY~3p@EcRY6sS>3wv+Y{ zs^7?#1$^v6YspA3Dr`E}nUqW;O^MR}A7fquMO#`0TStM8AV4_^&>>n%0+z14r)4FC z`vAJAktdu75Rg^Qq>W1aJ>N$kef05-DKjR3 z+wN72xmg$q?F7~zRB;KZwHS$DfxV~?c|-yj4f{*z@^~+}jpASZ2Jn&vAhj#YdKB)H zJg`88vGqADKsG8zk(<@bS&(8iHbDF}AP15$x2Qjy8IjAg=vj#w(}((Fa6vZiOAyUR zJn#@iV{u2%$OVMcrvMLOG<5?{3=lpaA-7tabaGD9PG3z(BjnZb^N-NAco0J-N zu)PC252n?%1>U?pc$DK#`j9u)fph~s(%@&Z15CPQL~2bIq{~aiI&ZJ-JWA#=7{2WC z&i!u*DHZ2v55TgOF`S%gAag+&=H}+4F#y#$F%S?C|INk!tfc01Vx%z;UHpC;00001 zbW%=J06^y0W&i*IK}keGR7i>Kk-d(CFbsg%k;voT)@Ne70Vz-5JV9}KJH%m!!Z}b1 zHuP@2lj6wf#5g3u9KNxQ1O~o&=ljkrK=r8s{>%648eaqT zCP1n_j=)ZE0u)IAkNanUNdmwPxTsYcAwX&_YEecAkVpfq$fGCy7Q?>440JyNTtiM# z$O`B^$tjEi*q{ODltFfBwk@v)4g6+Mg20AJG!cYgHlWzV9kn5b+a4GXf+$yIq#*S` z{T|4@5U^p4VvIZlCFmNR^ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/jigglypuff/icon_gba.png b/graphics/pokemon/jigglypuff/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5a33cb834e95f129d9a7dde4357357d18d5e31 GIT binary patch literal 315 zcmV-B0mS}^P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hxk*GpR5*?8k}(Q{FcgM!g7h#hq28y9$H?MYo}h!^kblTkIxB>N zOVJ@!smV*`LMilZ@8jnu;eA5<_*}eyBw$%#6XpT4z;a-yu|8H<_!gdla_m+hf?3;b zH(dZv4HOyZ>ym-Fgi@Mf$23%`);PcSwc2jDGLbU0HT(CZgNC)XFxjVS`PM* z$$)g?Kj(Z^n0VZ`FcF->1TYTBglTT6FuNZ`BFNzf7v%6GJO3yBcmbn@r_#RmFYo{W N002ovPDHLkV1hd@iL?L! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/jigglypuff/normal_gba.pal b/graphics/pokemon/jigglypuff/normal_gba.pal new file mode 100644 index 0000000000..f7f6154c1f --- /dev/null +++ b/graphics/pokemon/jigglypuff/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +205 189 255 +148 131 255 +115 98 222 +65 49 156 +156 106 32 +115 65 24 +230 230 230 +164 49 0 +213 57 49 +16 16 16 +255 205 197 +255 172 164 +230 115 98 +164 49 16 diff --git a/graphics/pokemon/jigglypuff/shiny_gba.pal b/graphics/pokemon/jigglypuff/shiny_gba.pal new file mode 100644 index 0000000000..bea601916e --- /dev/null +++ b/graphics/pokemon/jigglypuff/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +222 255 164 +180 238 123 +139 197 82 +82 131 16 +156 106 32 +115 65 24 +230 230 230 +164 49 0 +213 57 49 +16 16 16 +246 238 246 +246 197 246 +205 156 205 +115 65 115 diff --git a/graphics/pokemon/jirachi/anim_front_gba.png b/graphics/pokemon/jirachi/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b414a28cb3b2fb7114ba0feb2d77aed42dc7704f GIT binary patch literal 973 zcmV;;12X)HP)tSLcr=I-`VbN_>+|7vq{#Q*^AQc|>wG3Lcm|K?i%_LTqs{{R30;V8PU00001 zbW%=J06^y0W&i*KOG!jQR9J=WmO*P8K@`V_NC?axWELUNi%~o^hXy2`l7li($i;)` zH3y031_FENAz#IU5ZK*dnl_i66_1780Y5<8@32askOa1Gb|rDvaYN~)w7!F`zTdnz z^L*p`Beb#KH_Pc~`td06Gl}i?@pKYq0lj0+Cz-$z=R6}s0*teOE&zT;h)xRtK8)7+ z@nH;@e7Gh^0{9N+o;rwAtu6q_qws5iE&PlLz+a7_jRK2v2Ig|{zOs)|5O{3K()G}S zsqet|x9<~wyCwU#+s}~QWUNH280d6UK<^1w6TPg@->m^6W)J3+HjBDQHC_b{BKxWc zz^MS7u+uw`30QG`bxLVtPB?>FZ>ND;3yr=)3VKdl)<-CJmI4l2`2LpC3MIrAMas1m z04q`O7uNzl8~W?%D|LP;*c&GG}e$&kD3b zLyIZ?1{i}EJR@ZHONbeBZqoiBUkHny>U!v0tv;JdfwVq7W&Qkgy*OQ6b8Itt@It1c%`sUyn2Mc{*v$)os zWuO)V3w>YUoZ4Q5&KCEatA5EU+4og+*_$Lz*{i>6Mc|ZkN<~yc|Xwy z4{#O*umvX|1VV`MznTLgP+B1SW}T3Ffqql~`E$tc@<9Xi!LG9BX1j*rK7Xf%F)OP4 zC?BE=n-A!tIbPfO7bhmIKdGia7`DBkkT?W>_n6S+$tgNY}*~~8* zQArm7w3jQ*W)KKdZhG@3nl~5IU!MPB`g`#~@}UZd^~1~7t$4UE1F-^m1uzVESsrNj vY#B&`EN9SeAc-dx1%jmN#QJDs|GoVJx3XbHnDxsT00000NkvXXu0mjf2i&_p literal 0 HcmV?d00001 diff --git a/graphics/pokemon/jirachi/back_gba.png b/graphics/pokemon/jirachi/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa283e0dcc6d4a2e0e998241b0d41d059741541 GIT binary patch literal 738 zcmV<80v-K{P)tSLcr=I-`VbN_>+|7vq{#Q*^AQc|>wG3Lcm|K?i%_LTqs{{R30;V8PU00001 zbW%=J06^y0W&i*JU`a$lR7i>4lrd}DKorMCLJ8P|xZuf4hzJC_v|u`S(bTD6+%Hh< zwK!<%(yyX~bU8U(WCqxVTpreE3F-Lo7acJ@0Nf?XqXwSeHyci4!^(-olfMWTtcsz2g9Pf#Vwz(h-N zzQiiw#(FqjAeN9)hy}1zw34U7;-wCdNvUmKDw^GItH1deHRSWCUe-%Ej|&lmkQhGP?-kOeL9%^tb@NsE_aNIG7@t%hV|W zA9QyRVM|Cle04xrUGBIBh82KIGh6-89vu${`+&34Q|09k&f%9D&6}#%(|{`-DW!KM zB|y3ds5&`Ogm-!6dEPrIoui`)5Cl>NjFZgIJExv^5$pr*g-`VfZoId^Z+$-)vkIVe zKZ0x4rJW*xv0krNj@W1exK$5&`s~!%FSpCtcQu!6=GPscomBuQ0?|@a2|&TvS?!LA zU>d=V4#IF;Hy{8wh>o&|LwDT>0Elx+C%|#*x0nXP4P&eu-`7;9ZMr3N#|kh9q74NI zv1umq-gpy4bt2lcWCd2IF4xVbHiQv?Ti+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H(n&-?R5*?0l0gcCFc3xO1S#|a1)*ELgl?Nn{#K9V6@!@VmxnRxMqX&h9^EhGBR_zh2HA^Ql!X0Vr*h#o&RAfTI!CDX8`GZ29EPoRK0000oQpYXQXu~T|GhCWY5)NL0RR60|K8r_iP$zFfK8!!|erhom z+bxUu2;uAg;DOY@UNp4f`VahkJ3H5@6 z%r`9r#!3-3-~8~3(35nMZP@{VaYI%Lh2L4tSn;N(cr@8t|ceI5ALRC}U+tJ`QDFHH!rZeLFMC4+_4HO%%vg)!vbpvJ?n5 z-7TYqMe4Xpb_nDO7JnF>>W(3hT>C<}>+JTJWVMfXdPK6=>H{9<(b?&75ncR4CQw)}Ks7h#SpKSL#WS7chTi!eua_R#sbgg$gDnk^Mz zj{Mag3dd)qPL*j$D!?51U{B%x^uu%ZhmE8H%yG{4lr)@L>{bX0Fvkt*;XMb2fextk z8FTUijZ-cd1}rqUG3PgzX?^4VfHBpUnq(VuLJ+i7T4y@8eP7?k9Ocq%X)qVo=-WA? zY+{aVsw&p8cCuoWb<9z&#qqB>ZEsm%19N`a2LTg+F_!60qZ~fRi)J1lkUy|o1@(^QYf-RRTi0J~1HMU%?AckDG zUE*$0zzSlFR#axqf)iGmspb$JW3y!=d8>mEM3%vjj7|92yF~(^2Ydu9LvElz;UOEza9}B!36{IzwLjV8(07*qoM6N<$f@MTUh5!Hn literal 0 HcmV?d00001 diff --git a/graphics/pokemon/jolteon/back_gba.png b/graphics/pokemon/jolteon/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..19dc00a7cb059dff6a2c45aebdd63fbe420927a5 GIT binary patch literal 726 zcmV;{0xA88P)oQpYXQXu~T|GhCWY5)NL0RR60|K8r_i4)K9OPKo9_MlIpFRKzr=Pr5=6BW93$e`rvLrul<%i zEy$ti$-jxcZBP^H$v(aSwRDzU(8?Om?IapxemgtME-K1@AB{&~ICxM%eE{BQ55Vvd zcz#z0j&s$*bFU7D>iY}Odf#iHp{o4~cVs|QHCJ4ZWEEf-LP89YB>^J@VHU*@iX{MU zBaFxVDwP8rV^f*Jl`aD?2L>?q#v^1)L4yIW>vc!^9e`N{!$SsufdnW%6TYb%_zq}- zFd4%3s}vN1gT5Rn&500wd7k&lVsxj%i^vuap2>a12sL|q~EUdjF7LN&IRanJ{)R!2Eu*FSD|U$+a7721IUTRmx*qH(wakw zC?nL`7GQjnU(5-~2%Cm(S(oVV9u|wD1rouBY}r!M;{HJ7mpRY#2=`}^SDcc?b8?9& z52s?JSCp6(EmnCb_9c!5_*k)4H5`_^&c$9$5gYBX(?MA_;}syp8m1l->XUFp9!YPDWqZwXZo3yxC$G?R@$=?cnD1#*B9@K&dm-$OMvzfJvoIqica}V zyLPz>_;F++6>W$YZ>&`3DX|@htGo&2u8&*WuIKU1dHlEI54w<9a^8J|_y7O^07*qo IM6N<$f>!-Pvj6}9 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/jolteon/icon_gba.png b/graphics/pokemon/jolteon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b98fd78b2779310dc11e1d2dbaff73ef7d99204d GIT binary patch literal 324 zcmV-K0lWT*P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H!bwCyR5*?8(ym&{+uM>2k?Vw8u6aXk|=Y5GnKW^Tv(6g@pWYB5y@GcYk?(^tk?w6S>g#o z%=-1<2||C@o#sLfcCl@&U%(W#2^TGjE`?SW>UM3zQxq_z&H$eUAev|nXIE)(r|U=~ z{39cMtRdn%-oRiMJ~l9(iw%tMv4ZLOXYXKmVh1CA6fkdn0waB_U=BXcU{nF~Wgj0K W^LW#nwHK5C0000$JKIWe3uq{C~$b_`k4r4s4$-2wJ-CQFwpc|%0>{`{Z) zo{fJ9J-EQGH(ZhK;{l^*D-?-S%c871?CT654+`GX8i>5rW?WY!VRbr|)uCKh;@oPt z!9ibRV1WTRu&$;8g|9DTgs3ux-sY(b%?y1!M0uf&_O44j9<|e!Kv4-sPM#racj3F2e35d^z&GA&yu$ zLeLEjJj;3;@#+gjcbL5K)#7k0EfKu^ zyTsllRPdLO{Q-h%!4qwtJ7BoDE(o&1LsTFK=A|pG;9Rt2xJF)HfuIWcLeWHv?<2pl zR?i@>uF|C)VNe8t6bZ<8tgbgFmE=MHDGZgT>l;kMX6a+(!RuXQPBEkt=vS-XkLzLqz6k; zA%)cfBYlqm)y;bZkMUo`BOW~B!94yo9>iKGcn}i-9(=tCGh_u}Oj5fQ!4F7780)*KQAIrNriL)8PxgY> zzkp*2W5Eykjab5v_~9^?FeHB1jwOr*KM-??Fp$Cz_1vLK7#RD4IX~perb-x>E_{^u zA%9>ZnJ|LMMfpJ@lwfiJKU`_}0VZdNRK6O+53|Y5@gTwvv&k7UKge%uBAncg%n$PG zJeypxF7bmbNQ9GXNc^A(a5y=cAJ&!keKENiKd5+tq{#*R(1-}IG&!Fi)=gC~lqP3n pNF?irbPp?;IDr(#N$JKIWe3uq{usQjL~fraDd{d{E;IHb@yDB#QKmwk&%YVl-z=W@-^J!HdHtMw zetEi@an7^6H1DrD#%xnkXS1V}GRDQS3;=mLnM}AUA$*~9@dt!orHhH=fZ!r=B6f5N z9Rh-Ll~peDRX&|?&Hw>|Byb7ng7XQbfN|DX!(PUi5vU|{2^cg;EkS*D3(Q4;Ksp3f zQ{MuBaM@)J1ZHlM3oRW2ARq#7+7RBj1Pp_h5OVX>1;EvVuOvT&R7ziz@KSM5E0zkb96 zQ0$nQ0rZw%1H(fPYDF52R&@V!KuGM@jK!1m$um<2ZkI{F)o3)EH)9Zxp0pNMPXP+> z5MmC1MuU(j0>KTOOcrD8UvqHUEbXJ9*(4^~J3bSKF$P0RDdwFPlxUG6Y7zn32rB5- zbWTVUqY&H*T(l!*%$5vD3*$hz1u7Wby3d%cZwQAxiRwr0tAN>79daD)=%WT~Vc#Is zdPPnJ-A;(^I{Y_;VSFlx9@|53&ylGH=Ya0R>F0KE(nHi~kI!8Dcr0i~QFnMQh&spl nyV0fKpn!CA7suyDV$@k}+<@APk0cf^ZlQ9-!8-M|L1sEXV*f*&W&g-Yg*O0RaOy;A96t zb7+R0nHz8j)6R?80f-{OInX2J$WuXW|u7IyP~PHAmmOldQ%RvLW|6b=8RejyCdNf?4&7=n{9>W2X$DwGjM z*Lz_yorKA{+6j}1mTzH1YASvR1Mrw~%te@xu^uc^gb8}pac~hPyaOKJUxW!)Xg(BS seBzTZDVhH+!p!zTiZC50Y#n~AFZM{7v!pINr2qf`07*qoM6N<$g6jjMf&c&j literal 0 HcmV?d00001 diff --git a/graphics/pokemon/jumpluff/normal_gba.pal b/graphics/pokemon/jumpluff/normal_gba.pal new file mode 100644 index 0000000000..4221849766 --- /dev/null +++ b/graphics/pokemon/jumpluff/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +98 65 8 +123 164 255 +90 131 213 +65 106 197 +57 82 148 +16 16 16 +255 255 222 +246 238 180 +238 222 148 +205 189 115 +156 139 82 +255 139 41 +213 65 0 +65 230 57 +49 156 49 diff --git a/graphics/pokemon/jumpluff/shiny_gba.pal b/graphics/pokemon/jumpluff/shiny_gba.pal new file mode 100644 index 0000000000..4885690b66 --- /dev/null +++ b/graphics/pokemon/jumpluff/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +115 57 98 +255 205 172 +246 164 164 +222 123 156 +164 74 106 +16 16 16 +255 238 246 +246 213 238 +222 172 213 +205 139 172 +164 98 164 +255 139 41 +213 65 0 +65 230 57 +49 156 49 diff --git a/graphics/pokemon/jynx/anim_front_gba.png b/graphics/pokemon/jynx/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..db5d0d4c769b95344150d78dff4f8d6141445e99 GIT binary patch literal 1764 zcmV{#X%Tz5CH%7tpDC>)toVdK>z>%0RR90v$ns<00001 zbW%=J06^y0W&i*NVo5|nR9J=Omd|h7WEjV-O_NrZL`o4iXh{Xf!Gs%*-C@bCVv|zu zLfLK&J8*2=3T;9h7W*=BT4E{e4|ts{(xhGd#-T#0MB~??hr*z-OSh_OB2rgna0!E# z=e3*0Khiq_A6hBT$KU69UdQ=IT+13!!R+$a(*Mp-8o{hEO9| zzL3scIe&xWV)cQFI~Z&AKi7f)zkh`XpoJ*Wi2(}qG5h@dl_9Y=C!|3D(V9bS3nMx} zyYMl)$(vwK5N?6MHv@~<#MA}|X-p!0gZF@ao&m9Hy+(*d%0A8na7sbA{dQ{`Spv`Vf>p0-7;g&c+%1kj*}~bUzY&DiDFFN; zs$z_Fxa$V*^|;`0scCvytKOzBdHQl5sRjV=3WAV6J&JSF)X?eMRo$8`OC=AOrpc+`mm;=}swWD9ft%CE zll>6TLA8a<&HQpED;QccIhhIpuXT`aJk1L1(zIqOHAR{sK+|o!kj41vqK4XEI=_a1 zO9bnM&JQ2kHeN(%LpCtcgMbOZXINhnI~G#A6#(#N5NI&q$EEyTLsNT%U}8i7aR}%Z z0HzT*%GjpWc(zJPOX6LOn-yX<+F{@jKdX?E$bg?KRs`U74~-2%Hbl|FSm`sM69hP` zqqiNRDBHMM27qi@!8(^P^{(U)v(?aDU^fbwT}g5dwN|%WVL;>+?>*~^D+hNQRY@ic z2-mrucp!=gpIc4o0kJGIQs*W_Sh8fd4kWoxtacQ*=mO$BafL~Y0ZJYq0wDFR=X;wkbqtMJsuXs`$K@OA(sPVOq8Gqj5n!Rgehd@3t!z` zzmPv&V}*%48Yv_sm`yIYHFpS4!`H%rnaW~*1h7Q{dnUS4x#%t+7rmo$z6u^?qF0u@ zQ)UZ7J@POTj$4ovrzeHvhgXl)+37jX?zlQDIAibp-(9xN4BkGo4nHoN@fJd3UR?Kz zgX8KQ46eC09%xa7buc_c8)NG+RDWey1QhCn-LV4o!A{?_4XsYm<8cBitr62AojMGG z#z@4fVE!i9J7w5Sa3gm|DdqUgyvp(e z4*d?cYFNMaDRbt`JO(uu+JYT)Yyu!JGXPuQd4V-z8a7XXMFupCW}vP%Isn{MN*>V1 zy3z1YNzBb{Y-X}cEIuq^wQuMoyhcm4GR)gE!lDX5!wR3JhOC8*;{XEQ-6q&Ff+oU*>r&q&dfaD?1~%gk zow_!=z-Nx=%w?%hf(I2NoOML$J6U*`&nf-848|D@AY7arv3TcXK1xng+A~QzbWofP z(vCx%=gH*sv9kehNbn26#oLof77xBnP0l1AK-TDo5=fjlFWh+WB$a#*teNbPpgUVu zTVnA5-2X+lM=I=rbtRNy5&3`T@F`R>I1!AklS(kEg6kNMmmhTNz` z{JrFJ|GommTCfi8Jp@?7P(tNEekhKM2VD6yKQK#+#DihLaD5eqC`SXt$|zv0j0q52 zsW1u{Fa*Q{IbfU@{rQ0n0q!aL80000{#X%Tz5CH%7tpDC>)toVdK>z>%0RR90v$ns<00001 zbW%=J06^y0W&i*IK)IU$-FcbjrEZxXSMq;HGB({?nQdSn+^;D^__QTx9 za$f*GfddRkEP3t?C*5*(5Mn~qm2xL;LW)!bb9l~QH*u(7xrH}$$ouK}J=?Y8e8hi< zXzt9_D|yA`TtXCg<^duJ0H+;d4RcE151iWp=D5;%VAc|A0l+jX5Hf3tJBA=Hz`#<% zWh{Uq&)~{3g8rT_pi5a=4D%9M9(ZdFSEm9L#X{Gu8DKenG{Nkxpw*>lfaXrP&HQR` zy$a~PJnWp3Lx7;?kL*1Lz(p|aje36F$Xx@>7>xIN`*sj&5C#aS0q|o9@HDszSq>%z z_`L)KUOo29zo+p*(S~b)kb&Tlxcui2=!6z+xKIPU561|`yFMLKIw|)lTmmwZdW1k+q|cNN<2DFk`dx#aw2vkB+5rE- zM@jPK=T1tVhGmy7*C|ngZ>0a|^%rC#p2RkA>yb2F5VF2m9mUK9{MPHIX-ddueO3>` z1UDqF@Yyke$brZ~7Igt=R4O!pX^2`FCvL3VbHHiLrI6`t}08s(`%0*YW zKq8EH$Q9KD8gP{)f29djo~(hw^OhZt;YYkXUH}F~K98cc80r83002ovPDHLkV1h2> B7qkEX literal 0 HcmV?d00001 diff --git a/graphics/pokemon/jynx/icon_gba.png b/graphics/pokemon/jynx/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..431b6bf194ff6345f1edb24eda83319e02948476 GIT binary patch literal 378 zcmV-=0fqjFP)DV$`W3R)6cNZ^xd{G>4AHr3xAwOC_$3hfmHKm|aa!+7V^^{` z5Sgv988B>k6reF~hOK}Z!%Zzf-*KedtufbI5$zX`$e{G&3s8l8Nzrz+d%e$zsdKb@ zpN<(Q$wYlVGEtg7CobZ}p2U0gp9lD{JF^n)ng>}26<{D6qpg8itOVvm5MLQ$$t(f! z%%uQb$Fe#Ln0b7AS|xD6Gb6|v5-`_!FFvU4KC9yuJh=qKPG()2KmY&$07*qoM6N<$f~QES;Q#;t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/jynx/normal_gba.pal b/graphics/pokemon/jynx/normal_gba.pal new file mode 100644 index 0000000000..ac1da75970 --- /dev/null +++ b/graphics/pokemon/jynx/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +213 213 213 +98 98 115 +213 139 238 +172 106 197 +148 74 172 +255 197 148 +238 123 82 +197 65 24 +115 16 0 +255 246 172 +255 222 106 +213 156 49 +131 65 0 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/jynx/shiny_gba.pal b/graphics/pokemon/jynx/shiny_gba.pal new file mode 100644 index 0000000000..b6838c13da --- /dev/null +++ b/graphics/pokemon/jynx/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +213 213 213 +98 98 115 +213 139 238 +172 106 197 +148 74 172 +255 172 230 +255 131 189 +213 90 148 +148 24 82 +255 230 222 +213 189 180 +172 148 139 +115 90 82 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/kabuto/anim_front_gba.png b/graphics/pokemon/kabuto/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..101560ce664a9e76aa24afa9b50cdc375e36114b GIT binary patch literal 578 zcmV-I0=@l-P)d5D*X$F1@&Z00001 zbW%=J06^y0W&i*Iz)3_wR9J=WmcLHJFc62mc4+bhJVki}y7Lyv#_CRC?Uc0-lS<48 zr?68eof43m3rLj^Qt@#P1&Vy$=;q&$I5Y{73=lWTRoi2e*ajRROd{#1k*Nf>gNR$14fl{e<=Amwt^vT_zA>4j-Y`Hc zGsx*aTA3ToeRLx!XE}|at7ZYQkTauh7qdCNEpCJu;d_kuj3@+h^^lN|kW(h;LC}L= z;Q#c%@Ol992;lzRM#{sCh6iHuhi`!Y``d%V1dm{dD6!&zK%hqtz#b(9vHrm80r`V{ zqcHdB!Tf7W|krwt!_G Q7ytkO07*qoM6N<$f;I&V5&!@I literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kabuto/back_gba.png b/graphics/pokemon/kabuto/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9664ead41a7f8f312de4511bc54d5bc3051da740 GIT binary patch literal 499 zcmVd5D*X$F1@&Z00001 zbW%=J06^y0W&i*IaY;l$R7i>KlfiYuFbswnpwJ0AL$~7E8@!&n0vmJ?XM@;u0Fc6s z16a=MJx!$;h-`-e+Q)y&%m3+@tT?mTL;qDsME<`0gtal1rNbS6;l(z_ZfV-zv1e;$ zteqmn7cXj}%gGo;Y|8+X0A-V%sf^5UP3W^Gb7Sgy^sW1TDFUi7pA}wnz|`8euFpH9 z0r^Q6dcaA*-6m}MEBPX7 z*q%il0JM4rM9;u>C}%;)0Z&v79k`r5z^+J$02fD53V84&GhXUhAq6@>8fJv6xJL@W z0NeruIHUN>qj>}CBs1eZP zdf94#4`EdY1Y9YAH<DV$eq0#$kt?5fy}muO@f6P z4A1pVl78_+cxepc-?E`Ig5wg68F0oe#;+0B#q<~Zf;c6aawQE?*HH6nk^;f!T#!?LF7X3Veqd*_SIB|@ O0000L800001 zbW%=J06^y0W&i*L_DMuRR9J=Wm(O#eNEF98$Z?=x%`r1ItsbYWlH|CWVCF6wZ=3js zV(pyf6i7}vNz=|@Pk{!<^|XQB*Pze>CfD8C?XoOPfB3%FuYY|bN&l#(tlt5GcL2qS z-v(aZ0X{6{d-dc&$ewhN_qeCsSdn2E8F4C z58!KE2R!#-$@?+yZx|1x@WA_BpMO8r1r*0~3IT_l1ag6%8G(=272sOq64+;q^|zw{hm{yD4RMKxDX!J)i~^T3b`<2gZGN8chX7kW z1ON%0M4aXha0m8A3z&i+W}lA@(6nXeBV{N$Sp6#H}k?pA9MYp=5qhj2r-U81R|2=}kK! zVN4+8&to*%j|a`?mTrU*=4CI+WsT83Vbjz!-I(+DNtuJRIRGvF#xx9O7(>q`UO6EJ zAnRst!PpE+;rL#;IexbHIRJqABq1EYVY&b0HtOv|m>QyLIh7@B^`>FVN_5%O@Ih*RxuPQ9GFT%c6 zNV2XFmfjb3)SXk?!y9qK$(ma`C&b+ba#(-!{;>M&9UxZU22@xD?_6@6`M>=u+s&0k z-|GLWPn3oWyX@Cc95i@_Lz6YVuQZv8L$mao{;K)H&00&lx%grWfD#=8*ImPaYqfAb zl-r^Cq|87c0{|B0Tblh2ZF>#-v|Q4ywqg8gyAQU#^uZ@Vzq8wDs01vCFoX!1$8jmQ zFg$A^g|UGW$Foa|@?F2V=!q#H7^GL4BnLDvCPE4WbQQQxDeweYj|HGR=u3Mb7kGxO z1pp54?jFFoN!mcxV_^{dzR3U=zh)lCf?H5fn3@Lwlg!64o^?404qU;t%>_0bAkP4d zgff_B7pCXj2K&PSocsZ&_3p9+rn3{ZGXwKFqDQ}aH$6Z)l=P!w<|+o^en;h3hS%lRq{2^`97a38TKZMKcFJ~b`} zEP$~n8cfZWpH1%AcrIb>~T_1O=DcN<58QfhySSfIrl^vu8 z@aDX834j|yKd$t{s^Erl27b@xey-N9JaU6ZSq@Ojq$+@uh^1?3J5m6M>Sa(!uBpcA z3Gl$x literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kabutops/back_gba.png b/graphics/pokemon/kabutops/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e1aab4de24fd9a3cbd513bdaf8a540ed33e56314 GIT binary patch literal 753 zcmVL800001 zbW%=J06^y0W&i*JZ%IT!R7i>4l);YLFc5})SdIiOk5F~bNQL`qx4pL&j|=+*waxb2 z%s8rgBeo-<-f-L*2S}Vkd#&mN2>%~5|4e2g#D9F;U-Uv&e+Kqj%r7ASX}@fBb}`+& zX1bJ8H97Ed&N+3Cb(xzeHd5Opx^J5;%TAgMc%eHakxu%%hI*F)s-#<%)8D1EBVejf z4vw+_ke6Y>^}1#qWL8EEJ>il*0!q4RSq0^wJ7oqG3c%E)_a_IY1dvY!Xs-io!lVFr z0je=jQvf>QOk|B<6UWZM4L}^R3*g}fFf%EDclHJ#Y6gt$>(C?M$Qjx}9o0C3N&$MC zc^_zwSxSJp3d{&FD0^Tu*6C>kP6MV(VMYLHCZ)Myfs1JBG)mV4h$9C`*;{)p06i^J ztB`ulCj3|zGiXZ=fT2`AwsiC1H^6#u6hL-6b9etK18j6a$$dNnpGQCpz$r>iDLP=j z$O6zbFhE-ox)Pq=EHa&XWCH_CR6wmeQ;CGY4i(5&3e*U!C){Z@jB%DDtc zE!o21`O>UnqkXif0ew6&QNN0(w?n{Hv~Wls(IrId$^FA&HK?=TrQ#x}RTyI{f6N!} zR|A*(Q(~Zz+48*8xyV!%K&b%S6Ct4A7ABN~2#sMqXfZ0^aqrKTE)2 j`A8jcr=ib)fBgIcx$5teDV$JdOxiFiKz~3K?F<#@e@{AAI4b_)|bT&3VE0^ee@bCTj0tNz# U108*|1^@s607*qoM6N<$g75T-4*&oF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kabutops/normal_gba.pal b/graphics/pokemon/kabutops/normal_gba.pal new file mode 100644 index 0000000000..09a61f8e64 --- /dev/null +++ b/graphics/pokemon/kabutops/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +222 222 213 +189 189 180 +156 156 148 +106 106 106 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 230 172 +222 197 139 +180 156 98 +106 90 32 +16 16 16 diff --git a/graphics/pokemon/kabutops/shiny_gba.pal b/graphics/pokemon/kabutops/shiny_gba.pal new file mode 100644 index 0000000000..9217ab55db --- /dev/null +++ b/graphics/pokemon/kabutops/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +222 222 213 +189 189 180 +156 156 148 +106 106 106 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +222 255 90 +189 222 74 +148 180 41 +82 115 0 +16 16 16 diff --git a/graphics/pokemon/kadabra/anim_front_gba.png b/graphics/pokemon/kadabra/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cabd2589f5877994b6f573b557a98e74cc525565 GIT binary patch literal 1579 zcmV+`2Gse9P)J_CYb#v{I~tDT`tdVle>T-rlsdwEzEm|L!T(v;d1@01yxmia~|x00001 zbW%=J06^y0W&i*MsYygZR9J=OmcLINM-+fpG(nMatD~cEFf@r#Vv4wnQ^loSI)B1K z6{>JF(RIEp?l_SSOEF4H8W%1XV<{`wQI*HN&muO(OIl@-l9Sl^ErT!#P1KD5M z+;YRH{W|UvDfGcry~zN*{-OeYD#5l_h){y?wE%{>7{CCce(DoZ7)e)70Aa$>7I%HC zBO6UvtOuZEtir2T#9UnF(e4w=vf?KAJ7M68d6jx&Am!pQU*0`iv+Y(Rg*?fl1q`m< zkpfca;(*uVxRrv$W1Y$QWIn?0P;oRon{-Z}cKoHp4 z#EE{x^bQY>>h=0(4|9OyM8})jQkW9FrS1BB`s){8p;X`r1||#2BoI5?Qs4+%N#G_7 zOw`NLvJ$wwv$LmuzjqJ2iEj6K-#FPb_4@qJ?*pE{2Y5OHt`UqoJA0!Xt`Urxy~_aC3C8k!1VjBb zd|n7fJO#)`n;{pB8dM20af+=o6pVItmzWm^in4el7@exen9jwkbSxMhlx3iH;J6n~ zE*Q4Rfr{x|yxdnZ7YvMgIe_J{p6>fANiG<9*DRlBr6f#eKe_YwNHDs@Tqy}N1n+$J zQZSmSZU=_(!3IBiyKsLf82!e2NkEM6zTrEQ@?pAsVD~pxNe5=F&5P9M>i~RWe`v6= zC@ss`)h8FE{>VmxF$6RNX{=wkK{gVMeuIe;&{FJ0O8nv#g3+YhKy-kuM|Q;9&kMom zulAd$PXtN8vvqYoCnQm~Ss022@U_+tls&T`U11U*A^SPqro6T}pjb0W$Z= z8jv4D=h(JWtN>|7XKnWkRPb6*m-q@R=itgUV8P(4AO-@z0vJRcPSaXd0qX(afPoVY zFa`mfS=PG36e3jsrIP9Zyjxny{3vxfgMOvvW&`kK{T45`Ool+IYFVm7@BEnyxVVcX zTa~)c0ypJi;5%_q@ocv$JI4%s4_Gh~ddCiwM=0f(1kw)+!N}q`k5Jw?6eyMXxnNM1 zu=;gMDb#rGc<&ZhH%knUqVxun?TtLl1q1Vy8dUZ!OG5~8E*OX$XizzYB0;(DC&fDR zmvX<6v0#KSGz_VdN`S&2Y9j?fN-6<{{!j=8&!dW~DUAGqhtV@sP&vXhf2gs7csil` zgBkEQPXly+i1=&>#O+By_lGQyBJ_CYb#v{I~tDT`tdVle>T-rlsdwEzEm|L!T(v;d1@01yxmia~|x00001 zbW%=J06^y0W&i*JmPtfGR7i>Klf81&KoG}oTqJ3T2VMY%E_t65Dbr}J8R8*LkY@OB zn%J5lMnjp3I&OFXsZZfk=!^?ia!Fw)s$v%yv3EM16f0D;Sv9)b-~IRNjDi2c!J6Np4%1hht@%gq>D<8cX06!3gAhp1FQJZz0FHUQ5*FBM|Mgza72 zPjXepKFQet9rv`V zk+u~e{m>^li~O!34e-Kq~?)s{o|A_kbN*c_d&PKnnO3a4T`! zswv15xoO0%pcp;S=4gT7+}zx`NLTJ%33vlf`n{D%jX;buzx0DUppP=RS)@jQrrWLn zpFS_2ibMl9B#^Ow4e*0}jfqGz9e@O8%%sqv)47l0x=f)>z&gq9RB5U}0)n{^M+S)T zS3qNwy>nFuJ-?R-F~?Z}&=rt#dKIXK7bbyg)Q!4bsX=pIBYH?N7G)>3pF61mJP9N- zJt;1?DV$@lCe(2FbszC1j!>HF)_iwaudAGiS5Q4S)HX`YlddN zd#VbScF9#B6=$hwY22b?Lkx%vZS=K&>e`<%e|W`n(ALw{)hh@h#-(ln7Kkv>3S2r+ z>BIOW&N26NBmy+HEoYGEFoMpsRWZL%wL}p*OI1z~Q@8?TD)OPSA=v;vf`WIh;6eI5 zYiWH5e%Eie3LFVaxDWvaEV3hJ9&&<1C!7MJf|CypP%vQzuUrZrA(4U;%iH}}7cal- z`1v~4&J|k63w&-HxYM4_ZHVz(bN|8mRbfnSkqTpCp1%rXshN+@!kCtFA`3J4tk^1y zj(-s*8{|ZVQQ*&nu}qy1OR0Xi8;_C#m0G(U6SpF$dQ9IfE*lsYD~)a9H2L_|kLmVf aKRy7Gzx5j)ohdW`0000q$gGR9J=WmOXOgFbsuNtayl>ttg+sU{WNh5?B?RjejZ?p2%jU zTcxwRv~iIc%C2~*1r=wv0gzOg^^DNs8$1x8#8(t!TxhJqR?W|BDsew3WQ|&DAp^X|8Au{v2H-A5#6|&L4+NYPU`K#o zvd1tll)w48ci8h9W=~_d`4ycp!6yW3 z{gJIu7}xbZX{7Cf2g<7okLk3aS#zf#0Omemj$V*};}NOJsh4g<2o7fvCL3JwKzVIx zmD7{7@S)j1LOpeB5h$AIFuFGxFb^&?8bH4Q z#H8elmcA|iT7PH&1Wh3iT>QSzCFDQEIXb<-7-NiafiXIeuR9PKFlUS6bO&;K=<~BB z13Loz(sP8FW`%bL!oHj4`Q3paIS}^MGyCk4$ODlBaqJ`p2jVb0kja_@%66DRlnn;G zW8Fc!3`x>5{A>S^3jd%QPL zZ<7X?u)(EnFlbn+!Du1yuK1tEOjRI%p$brh^(Vj>|7-jK#*x}W665{800000NkvXX Hu0mjfi*y%& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kakuna/back_gba.png b/graphics/pokemon/kakuna/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5455238f55679ed999fbcc97d6bac558245b46 GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*L(Nw{Re_)bN*k=dbTEN zOEp7x6vKap{}7awm1SvZDIg#K7s=WEF#)KTu_VYZn8D%MjWi%T!_&nv#G~`=6x+PR z20X2%SLW4lNuOZ!Q4MZmTD13ybD-x;8b1_uiGoSGMC#%xOed^zM7Mx}f+3Wub| zUlJY5e_XtM+VsKHK7*Hkn;FdZH?VWPSjUw0Nj1o!DeKe6i3~wKELNe}Oak#1E0@+x zoH;r6YqgNT@pHS&Orth6dv~tBn3>Ic*J<~cYpYjHc(d?tO~)k(XXeO=rXaqo7d*~4 zCQUivvrznB+$y>LY3mjwinVX>>0YC=u*i7_PYJi7h#^Z~wp7I1LmPh;o@S7J7t^+Q zYpgG`bjR!?v-n=dr|wu5W7NRc&p9E{_h6vUpK3H8+uoo+Z0@$ b|CLuWrg!hW)@@IL5y0T->gTe~DWM4f$UfSe literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kakuna/icon_gba.png b/graphics/pokemon/kakuna/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1c857d4429afe13f83d0db24f030c5482e3942a1 GIT binary patch literal 266 zcmV+l0rmcgP)DV$k literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kakuna/normal_gba.pal b/graphics/pokemon/kakuna/normal_gba.pal new file mode 100644 index 0000000000..b14a689689 --- /dev/null +++ b/graphics/pokemon/kakuna/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +255 230 156 +255 213 106 +230 172 90 +180 123 0 +139 90 0 +255 0 255 +255 0 255 +255 0 255 +106 106 106 +57 57 57 +16 16 16 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/kakuna/shiny_gba.pal b/graphics/pokemon/kakuna/shiny_gba.pal new file mode 100644 index 0000000000..0a45b029a3 --- /dev/null +++ b/graphics/pokemon/kakuna/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +222 238 90 +197 230 49 +156 189 8 +115 148 0 +74 106 0 +255 0 255 +255 0 255 +255 0 255 +106 106 106 +57 57 57 +16 16 16 +255 0 255 +255 0 255 +255 0 255 diff --git a/graphics/pokemon/kangaskhan/anim_front_gba.png b/graphics/pokemon/kangaskhan/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ec534bcb6953d52add015c5bc13e5f1dd6b7016a GIT binary patch literal 1739 zcmV;+1~mDJP)!av*@sS+kbq&_N_}Z-$>siB5p4 zZYz=da%OgScIHu~@}I^%?+5dv*7xT>uYOQ3O^$c)P z>Hk^(<@MoBSqS%@tQu`;qhQ}YEDPatb+u`<-@hS&eOw~YM!z-Jjc@k;J_-)YV$en? znAvakU)#1_x(W>iEju3N`_MCt*85mc7DPpt#xuVkDGo{nLEtf%U4KJC|3gU-IuE!D zqS|4Fb}xnI3J&ri4V)`)aL`v&*v!N zg7uG=b1n*CASHJO9GK}X`p`KE_^=l60WJnCDKClw5NIP9K42sSFo)w|(F9`w&4k?I z96*e@zf%Y_MEf`|0mdu&(PQ&c(xS8Uk*y zGjPQy7BpKrn!xp5Cjy|D9Y@0K?^w{Tg!s+{KNe_$?D5m8dA-(@Q}WRz9{_LT5Htu$ zaa~;#4|~%#O4hp?ElD&|fgt^Lodh@6`+rG!RWU(?v$bRurbl{@HN4+@oAuXrZ=+q& z!bzi&?zYCFO$4*I(cHwVwcEn`tsOO#!|?HdLhvxYZ}y?T$EW~o*OaW$8792flOq)P zYhNv&ULLCgkk!U?v-wyuYuDNf{K~@6!8@w;rp?V4w=Z7q-Tra2nASR-b900O`QjzJ z-CZhUAxJ4VF-B%EX0)~pYf*qn1~NWMgN9i&q2qnPv*{&=iGrQt)sewDT^KJDw7IL8 zkTQ$~qM15rah?ivA4`WzF7SA#sfUpB)Q9fkg%nOe`2kx`lOWApfYX5+z$s>62wO%x z&Vb8#;$w$$FL1rFJ3lq8c>Y-k!a2zVXc`3o^UF_LGMbkH#0eyVD7OMPq*v%dGKSah zGK6_5s8}SxYli|6Iqv>imZ&z#eaFW+} zjdgXjr}#j@th!dYd%UZ&!WT;45iC~fWq zJSYbU1rJIEm1&L#2cOFo+*AJm{AQum&V}Fhhat zE(;*V1Bo`wWq}?92_Co}W3VicgCNBNEEr;GozhY80E@-N(i&(G9z@+A%tb-KW5Nia z<5Pc!1$v-j&Z7p;zjQi2lVewg1%XDUxhu@^S*O!6<(P+DjZ+`fK4P8m%(2z!2<)_i zDPHaozwon=>X6BOO9<-REZ>Xh6d-DzqYbQQj2bP^0V7^x)H|{LZ!p#(z`%BYkqHPu z$U({vW&{|{F!P`QNDLT+4+s>qw~0UjkO&XjRzx7~bySsd03kty2W^c21NS8=bVUG( z@W97vOl=~r#{~ds#&~e0p$`}SiMLq=kOU8|qH3H#P60q-JlJYeACclH-b@uh5>n2B;14xtb;MLwDV59&dM~?{)UcI85r7}taAP5+@7UIF)*XZi4s7(g}By193 zY#|=p?k)j_L;x`(z@XlWfU!`!^-v&AMu0(`83ChswQwHEUrZIiQ29ZZcrVWte24%e z;|JN*hpymGkwDsc_YZ^&Qo)T17-yONAs#Ea!20qu1B`LXC>rGj%ung`!80A zzM(%c31DcV7Gerz2I_KB4e6gnRuU$)a8j$MPb=)GT7M+&D=B~^;4`Iykl?6V$dTe$ hsW+JV!Sc9s@?U`D(@$d5+u8sC002ovPDHLkV1g+v8gl>u literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kangaskhan/back_gba.png b/graphics/pokemon/kangaskhan/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..babb41fce6380ef40051a7d032d90a5e91fa29f1 GIT binary patch literal 881 zcmV-%1CIQOP)4ld*4`KorJ3W#|y(TFsbBmO6CCdxoHHRsMu}x<-kN zw~(z{e{6RS6ur6XZxM3p~sZIa$I*?LX%4bjwro`QMlU@v3DDhc?KxAX`(UpnV1`iPmj`w zZ1>Qp=P?${U;8u_vP-rGuHD8yV=NpnB7|(eIIWw|;v0r5Bx1&R``NJ8V>hNe0~pj9 z``&(Y+OO3a8?g0y*q@OKFoilV0UTs12NrvUc4-9_iwIQfd{P7W2FRuAfY<;5T!d9k zLI=5#kBBKqWtZ5Yx>+a$}Og7AesW-!sk$XvP5 z0ty@CagfE5hawyKWMqabAoh65rtlNuS*?KgLatjt<^}bH2r+IZ*a-yVkr4egAOV1% zFaUuR?WQvh?+Oz;;2PRPa|DK2dM84d>8b~OBmx0=!Axo9@g~BAmMcIYfNus9VDpin zYyqSQhzLqz5a1sq;1(9Zj@YblsPLB68vzlj((|gtKfnF}c6C6bA*e+a00000NkvXX Hu0mjfAe@eR literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kangaskhan/icon_gba.png b/graphics/pokemon/kangaskhan/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..177a688cd1ba43df0c49d4b2e3cd0a83c480e221 GIT binary patch literal 389 zcmV;00eb$4P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I14%?dR5*>@lFe$vFbshG1QEJ-3(W%zb}SU~oVrvmQdY`NVTK&~ z0v$d1V$$X$nxT16JB}YwTXUG;72~ zM}xTPW&k7N)0XDlGU4iLLljGZCTlwqjqihv+Mbjc_)#*djw-4W0m!YMI%0~zxX{vh z-UTI65%)dW+CM?aMLbnf59>jSx9qLpZD^2o@$~KnlI+QugssP977uApmaw}K5px)y znT-*5-dR0((mv#r=QGdq{{DWKkpE=pQ?o@vqTZCeW)ZF3d-Xv+z>4!h=V49_ofb7_ z-3U5C9aP@Y~iv)gi210IED`9|*y32G#O5#Hu_FVViRAbO>hoNE(5y^g95wyS3uw2 z!&L;}-hx+!>hKbGC#KSSVgi7>$^@?h*hpp;L!*q+ir}6T$1%d$)zAzfMBQ`P08c(G zXV(+Ybe(h8U_$^CoXn2sJ3BZG%ecl$m<1Oyd)n)1lx}V`*6$+VVv+2Yyx#n**=RKG zC-qf;vGi{9i{?hd#!jXJ(D>3jo6unErDT$BcAk|w_wKTTxQMfpgGBL4kX&MW~0aGJv#lq63}-mA^{fjdgv8Vzt#2fdt9k; ziOPNK<`vkjwG;cY4QDw+2*U8$^KNQRltdH;LWHY7C;rA)y+CbrC-w0CPgYu0U-bg% ziM=@oRQ3n`&ok7s=dIDoaaH-m;Sip3zP1hWTni_aS?@<-_>})7x5px(Wt6#qVk;$_ zjO~qPW|f(-1WEL`aFrOKQs$&c3x`l~N@iA>U-_I68v$of_;B`4IjhWHZX)pOnOlkt zaEA(IM!_vyzki13&OWUU70Uc_6D2uDTfN}fR!ODIpEft+Gk3($9*jy#Wxi|2E!(2h zGwfKY%-XE14oxB8nr*0+d1iQe8@JSLtmi2+u;_{jMx!xODsy3$JM&+CO&c2xOR3Du zb+35+E%X;`-Bv2|CGHTDr}jau%u)0v0;zpaE3>YXLfuR9n9EUSt-hKTpX~l8;DJS_ z0sw3ClreA9KorN%6|0r_(hZ^DXHX-eDzYyULustg>(oLQ zy73*5I(0*Wq2?2?cZ}4fW$G!-0#nlxsZ6!44#3n3C2_VEnRj*?YUlC=;3<-&{D1fU z|9f{fA^%sI>EnWsPz{udQq;f7pR%Y;f<6g4Bv1k-p;j^I=*QxBx1%ZEfSqo+tYxCfRGMnj5(q=ts4{; zWxO_%Kws4W7LP^JKnchU;HM4LfR+MhvjJ>@AuI_rx{8p};z8=rxayuLBbYD5z67qi zr?014XgnZJj6eeH8|^eYEw!td!~ z`EU$uyjkDOc<5o(?`a6^$_Q(prhqx|%_R5kw_8cZ#t|Q^t*&Q0O1w$5>KI_6&M*11 z3@|5wW~-IVkzIag2W%+=X#BYZ_7a^ngg9W?YgypDNaoMS0J}U|65+)(uzU+J(GFXg z11;1MC`Fdpz=+<_3HY}I*AQ@PeKL@M5vTqd-LxkjB_u{0gJIOf21cqs-h5?F-mnNm zluZzdrucf`TvPCX4_&{fo({+)eT?hqh?M+tz}hOaPIyE}@Qxd1h= zQavd%JFIvJQIw7$8CYJIV=6l+mXX9JPF~mIxWM9Au8$>>*YVcbF=L5AU($J9!`Ln! z6f6J~iJ~;lS0H){P}u@k1VmwS+@L(KL7v#07*qoM6N<$f=Cc^CIA2c literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kecleon/icon_gba.png b/graphics/pokemon/kecleon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..98b108fd93c9479846741ffebf5e3bae6a6990a8 GIT binary patch literal 384 zcmV-`0e}99P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H{z*hZR5*?8lCf&UFbszM1kp>WQx9vgryjkRJWoEF4&G|W)ICEw zg%cT)Nr5zlOHOW=u7&=aK7Pv}K4boP762%Kj3Pq;P%euG6H3mi0^t;}Q3Z%~#Di`` zAClfNMcyN>sHB^<0R4r2O`=Mq%hn*VGW*60~(s_O!rDK@$SjxPCC0rBFrFGixA z3#BAH9Z3lTkKs6z5(eJ}BC+*h3$nkC8k=HZRcHrzV$e3={?WAlk&a6;S`7*SoevZQE-J*l@&8Gs7Wg_$NvJ z{YVL4^cA3#vn0i*XHcsBESY{+M<-!lT7z#LooBmgZed&$@#ykd;*`fPTg3roM4=1= zJt3CH7Nzks5f1?`lC3Q%)8hevrrH`$)MEgvTO?Rz)AY^|U9|r4e3x7!cVc zGEK1Wj3#Q*tHG;TLT%_`l4@HhBC_&0J55#Ha&<8jN@=CYjOAdEIRI8oB7inZ$}?}z z6QPRzoQ|ZGxdLFp%o1BCqTJ6&dYoG+F%JN175KP=l%~^s&cGD_?3lo$JKVICfwIWH z&2^QKse+NiJk7_lJb(9;>ltO=oVPp#V49a7f0T;+V3cW3?PFmJ0B`2GqB&)mCgZw* zQXX-VlcN)7u3ohPHCM`Fp)@bOr?**q%TkTEF{tt$OStL)qF{i?@QHCI>i~(#c_$Vd zUY?t0CmmqUfFs%hSZX^;2FP!S6X2fYMaRdSBbXf_3I>KU0ucEG08F^2sXQJX`VcuH zyL(lV!O3L<9Uu1f`nMJLk*Ws}KV0A5m70(U_RvJ4{BZmJo{&lp1J$D2 zSS^4REPKKUe=#B2gK_lwX1NC79IOB`?OZ0C^?LaLAFd+QKzrANiRF@gxT=Dajt7k9 zak+Y6px$)zv?bP$D`%=2MG`Z>#B%w2!&AMN!*=@rJkrTO0Mj9Ve?^3pyuYcO^xdAH zfZUg|#}^a;{1jGqs%{5plv`=KRk<6fE)}k5&v$s#iO`F(&?WB7QV!$5Y~l0^6@J`A z#R|&=t7pC(pT%Pk+Ia4Wi}?FVg8pW8uT~39#i&Rz>_#g2iih6m+cb1y&8@adKDIBM z&jv~r?ylpgk`ZI6RpCoBhYX3Cu(+O!D^*AgHqi;h$=tqq_X_vhcnlM1saqZp~mp>!3l*Q##4&MIcinIgVC4n>Lxv%66d zZI#a60vpb7&<7mhD5Ht1gd_R_px=1TGH%1_nMT>4?#1EnT_%pu@ESaUy7A4%j!v>u zgBJJvMb90*u%>Qa67GFQUt|RuF`jnQ&DVSFRpzL#L2bA{`xD<=85?en!oTe+P7%7N zfKZym0T(ogFn@GJ%x42Zr1S#QTnCW?Db{x?RRHEa!1VH078sB@*&r5Ws;}=D@bq*X zH8H*9o0-g}Vx`p!7`J(b(u(+Cb+A&{(HA|H)D?uR4jv!SUg#Nq1~EWi-`=w*Tqu$< z(#Y)P4)Asykr$rwD8L98BhOkR9o zfr6<;pS<`!0DR&0>5l*yU-#*c*VnfzRX7R)C8|GuS+3ajf;|}11)wfievr2~yBpV4 z2dpk0J_!^SAl;VxR{$VTSfa%Kw>)|b`UJqDp=fnB>viyfmwV(z!wSaqmNtj+xWaDs g&m)fJzbcf!0V_%$1sMdAvH$=807*qoM6N<$g2^Snxc~qF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kingdra/back_gba.png b/graphics/pokemon/kingdra/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6ec7789ad2f29c286a5ce9f745584251d20795 GIT binary patch literal 743 zcmV?P)4lRb{xFc5_WM5-6`Pq__cA3z?eUz@|ufb5Wils-ic zkYfbM4RVDPX_K@$NB}#v@<`eFk?8F=1Z=~aPj6=442$BwJbZXQR@N>XEBP8LDG%&4 z53&0IJ*8N62e3qKWx5D-`5HX60zkx1fmmQsc_I-Z$|%GFqc#~LW}5+O;#i&-=4=Xx zC;5O6gr-(jDK#>1hnVLdnI;lqgah9JB7*cz)d$acr&2La>9sdmr;-;DSjingaRO#_ zn`t8fS_*HDGfgNWLzJq973QckxpR&vXEl+xEdbL|rjacGv)hmWV4o>tJHtZMbxjTf zI~$pFQo%|HAd1%kg{ht5eVT_y5k}gK86`=7VZ3hm{CLWkQMJt7CF=7}_3kpwVOxYc zW_)XT^LFY*tikXF0ByAE*~u8Nu?fdE5gNa86DgUW($>bM4VJF^#nfJjoz^Q(0G&DfSksXCp@;YoM=tDx0|fd z)kq>dZXfU8e;xrC!dyk7*E+7%m$Af_8r5jQr29GoUq6l{N;NmQ|1F4f1oq!PO&WRG Z=NI_h*p?y>bK3v_002ovPDHLkV1m13O5Fee literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kingdra/icon_gba.png b/graphics/pokemon/kingdra/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c0fb5484af487ed719e01bb8be539847089e5b5d GIT binary patch literal 385 zcmV-{0e=38P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H|4BqaR5*>*lCf&UFbszM1gD3|(n7$?y+Wby)5QlNUN3O;UdMx| zUm-(>bTI~VkU^kxhsILIqeH9BAHRf*K4boL!5$O_$O=#?R)UpFPzmP9Y6iu4VrUEq z!-UjtU4Zc!9km1@;=sOjpl8S6w*>hNTyp7tX4ECY72CauRls@s)C+KXb!Cvd-CoXK z?fQ8<4>${OI4%x9WF#fGjOu?TjXUr)%^Dn%`Hz)%Z?HMD2GMphRd3XLm0)5u29VZk z7CJEE=@Nwwgyj-^(*ddtAqpKR@LC1fP6vUjbrzZqY<^D%dAe^Mv>+)hqm!V9mSqQ~ fccUxK=CQg1&x)ohoLLDG00000NkvXXu0mjf_q?TF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kingdra/normal_gba.pal b/graphics/pokemon/kingdra/normal_gba.pal new file mode 100644 index 0000000000..9dcb7ab851 --- /dev/null +++ b/graphics/pokemon/kingdra/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +189 222 246 +156 189 246 +74 156 189 +74 74 131 +255 0 255 +246 106 82 +189 57 49 +255 255 156 +246 230 74 +230 172 57 +172 106 0 +213 213 213 +123 123 123 +16 16 16 diff --git a/graphics/pokemon/kingdra/shiny_gba.pal b/graphics/pokemon/kingdra/shiny_gba.pal new file mode 100644 index 0000000000..c458692836 --- /dev/null +++ b/graphics/pokemon/kingdra/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 197 238 +213 172 230 +156 115 180 +106 65 123 +255 0 255 +131 205 24 +82 156 24 +255 255 156 +246 230 74 +230 172 57 +172 106 0 +213 213 213 +123 123 123 +16 16 16 diff --git a/graphics/pokemon/kingler/anim_front_gba.png b/graphics/pokemon/kingler/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fbcafec0396e3498de2eae258dfd0ccd39a007e7 GIT binary patch literal 1794 zcmV+d2mSboP)5dZ)GCT~wW00001 zbW%=J06^y0W&i*NfJsC_R9J=8ma&i9Miz$$Fafa=KwY*qU~&sLv11M|*or5K%-T%| z1n_WKF^x51#khz>RgQ2DDOTG5?NT2=FSW9&N#(%JS@+%yxt7+Fa4AyU!!Eem_vy`> zH;?mvg#0;s@Xbjt{CtJa{t@6=pJ)&9Ssn7u2pK3qGY$crtBMSs5UtmjzhBzqmrrDH zPBgP3!*lpd_ubh%pTy{ufD3s(-1Fs$n@2sXmVqFPY_1Z>^ay}O=^H)M zG8a#dL6OhcKaU$uoyMqe`#9V-vNMy5O8kiWtgiZ^q2k%lCkAK>A!6V0Kmmthi*vT0^0EG zB`gzvd`xZg>F?Vuy@(v@>nxo#fN7ldbH<|U8`FFWewxRQljh<3kphNLpZ*$vpK92{ z@&WD>)(UX2DY0MtHv*IE@^w;e;1AC+@kMyRelVJj@>QR#%R<(= zc1;sr=)W^V0?JW188tF;EF4}Jv=Pcw@JIp7Em`^AS!_u z1ij>Z7a#+?#{IsmtnegIyx9e`UPV0IJ<)`~d+Kt$sCEG|tcZ{&9f;b6RG!boo?lj@ z#*>yAc+PVF`wiqZmo4>z18yP@R+)3?`)D@};U4i5)!3?|4w`1mmOGLG8lIOUj{9Yu z`ltN=2lkf=jL!VDz#x-1Cj~~?BNr9n< zpdU^N3_W4VNr90kJUS^bCUCVcP6!M=$|Ekm5Ez}==M~tvSc>}sW5VXD23eSd(;|rn z`vRkL)m(zpi08aW^4Q)N7#&tL3M5Sc7+=QrzQCA-MX6E{^E}ZrA;dj_ktRRRn_a-A zzC2@J?F)=`8eK;XFrI1e&Y1CVPhfy3N#X|J{=h){z7-fH1%a_)Es(!5dXK>0d(sMw z92AHT`k?`ecLr7fO3(<53s!@`7^Tw&2+n?Ju5g%ckL$MxfPUZ`HM(K)8tt%w`Iv7$ z(L6*Th0(2mo4ZkAc^4mUKb4HvjlhtF7{bbytpN8LWkkp~^b*A4T4|V@+N7dx=E!%b z5I8SNo>eVSuPouO>?RATAZ8#z;2tYR%)H+ z3Ewn;<~We13$tpaCaMIWXWJaKbEgZjS3n5AT_R)r?!_X*e%H2W1!F)>RG9l2=-}6P zKwZH&bZ}laz=q`^pWpd$VAeRqFa*B2?r0kFlI)o$w-%_KIH2`*7LYO25bHvSAshyu zrt|#(L=7f;6M kAC(>g6qvs|BK~*#FA=#krEP#9{{R3007*qoM6N<$g49k^ssI20 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kingler/back_gba.png b/graphics/pokemon/kingler/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..11338630f362e74710f968529fb5f70e6947aebd GIT binary patch literal 716 zcmV;-0yF)IP)5dZ)GCT~wW00001 zbW%=J06^y0W&i*JN=ZaPR7i={l+TWvFc8L(Kx$4%pzOVvJ+E5KN_&a`!xf3DM16rc zx7=3ADO#y&+Ebn}Dy#O!Gjzr_e{5iTtU6Lc$o!aZzOjvE{eNNS`G>di`A4t*%$DBH2p zgTA;7(?@itx?2G3pzeT>M&e>PxT};zNFk<8MqcIhX^J%x9mqUXP-#(O0{Fg9=o>%~ z1fv3=Vf2s@D4+rFbrW>dA>A~fac=s-*)`> zQEITb!i-aeW8isvIUK(#z?XowW!`<^{QFt9Ac4%+7JPN+f%c~Y^l6`W{CJj&Rm=ic z0HDdT?FNt$9dLL1Q{KMf&w|AGx(Rh)RqwBGvEktqp9LV6x1Ei8kIIkh4j^G7Z@W=S zpa5@KC;;4B#bEWaMZgIjlsZGesRrPAdwc-^rUS)$;8PE*cH5JME4V=b+G8OA=`ag- z$Il3WLr{+sM{J6em_P=tBX9!%%A{d3NbJwT+YL{d06;8I#|TaE{fqJ@044x30KYi8 yWK;o(02rMC5&`7+H3hKsIL9^bzlDV$@lTC`lFbqb0g6J@YbXOmypxM=nLcEKw8Ym>YU@%y_ zexndKKZPD(Mms$u*|A=X`CCEBq%(*V4fY(=!7JKAQeiK9Qv+X6yun<-)8#fO^L+)= zlr!I4k$I>y;VnDsXM0`G?2y6MvCRD&JT6cO87fHPVC_Y&6_i905F%acDJ4k=0V%%$ zQDFY*V2AD7Iuz#ZUJASpV!subMIZ%0S7cI zP(>eBBlgWYL^r$W5U?#f=|O6Yy!BYRLIgdAEhlY=5_TXRb2#|2+=Q7Ae@sauPJq;( i@xzb#{sGKaVSWMHp2X)449xNX0000l^pN)Qkb#Q^(u00001 zbW%=J06^y0W&i*KVM#>bz@5h$i-K{2`=Rj&sc25fP+W8wo0usjQo) znc4N}<`Hrgzej58((fk-u&`?&005=1Az_HV2mttC15(f90^*}<&<=!{1o))o5C;Zv2hozUi{{e_ zP`3lR2|(SGS}7Fhv^#AW@>=S6GQfd!-P20SIkTE#|97@hIE?c8*gT!9pZm@?KRurHSSo_WXfw{m9N)In>auVjMc^uYK*Z>yuuh# zd7v1xw4f6{9Xk`g7UFqAR;GLnMzrQhDGLDSmKh<>7{AYXA(zL`S&GKHx4{|974z7L zkS?!|jyHZ6M92Y4u$`x5&%OmK3-^6uzJ~yUqn}I++)V+)!LId;^6dLQ^ zs!zhA<*woM`ZECVW}x{f(*A1Cnv5cInEqR!u>>H2UIO&b7w1Xe_AdM}5G(`GkIz;7 zmvLDk(71uG`Lv%niukhQqCns$1q6r`b|LBd$xpz=O)KzDk`5p-XaV6X zIq)C=_>L54#{SUpTE<9h@kYxX04bw91_aUeKhx4w-b<-b;7|gf9-qD&pa6xH-=*5z zssMogU0?@YqL1zz@V-J_jm82}IN;|^9DpqWov%5y{ibiRJqXYPXCSP=N|j~#!vWki z4os^BFp&MGtpd%mTFCjCu(lY1f$;S(@+I6jDG+0a&FZ>q*&1}r^3DVd!?qSzZif@@ zj5)XLgzF`i1p~1;O5zWRV4%C5##)dFMhPV*kiQU&64qrDiAO9L76XaQWNst~MhQ0% z8ViQ;p;Cy>Kt_pR(1}ej$b~;p`|`{jE?Jz*fyRPwTpYpT0{=n}uKd9gKL9OtKz1gX RP!s?F002ovPDHLkV1gi>&XWKD literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kirlia/back_gba.png b/graphics/pokemon/kirlia/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5820cd0688f6ff076c67914785e657fe4f8cb013 GIT binary patch literal 723 zcmV;^0xbQBP)l^pN)Qkb#Q^(u00001 zbW%=J06^y0W&i*JQAtEWR7i>4lRs_~)Sw7>vfe2BI&v4Cvz*=a)Lea#Z}Z z08Uib7>VUrW<~}DT+X#FmbsLr39KR!!yl1KDXvXmAw;ZX5lfkfuVx1R2tc<2Z5}7_ zqb^f%WdQ34f)Ghk1H!0s6`{5~j+H|$*Cw#gK%yNK&}_rupKzYbKMu_*Yao?6)+oXR zt|0FK+5mJ8L?&dKH2Yj})m?3|Q9!ee701izgDjxC0%leqBh?+-5I42~kp@VMl{JuL z&j9i-z?2=?fuhK>swCSEV^yVq%J>*Kaku*bShqqnWsOYe0cFQPW;U5rl!h0Rju(b@ z!lnDOl1w_?RuCQ^TDIDy%*~#FT}sYY;6;>Bj_%@SSz1a5-w|FYx}s8}(m(!>BPScJUOr zg&v$JAXQa_)278Obnir^Kn{5Hf(GDjF`oy$^EXHlc)ezo?tQ;<>ZPxsdwru#w_xm<>^%Sg002ovPDHLk FV1knsNj3lg literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kirlia/icon_gba.png b/graphics/pokemon/kirlia/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b99dfee25723c36404e4605c4c18f6b709962edd GIT binary patch literal 351 zcmV-l0igbgP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H-AP12R5*>@k}(d#FbqX~g5(HD=>aOyoi23l60glk;F27G3aKMa z)hc4cq(xQi&M<(tyu?wQ{{VigdLRvY(SMj z7h7DY+`3kA*G<7DV4WQ=c>>TiWDMDKt7?IE8riKd?TyEpy-eSVlH>s@_;8~cjhJ7D zF)K<=lq)jP1O0T6f2Q0MWVP_G^#NhjB21Th{9BlmzMFwdVJkZeLoDoW7AEJ$_*obR xKu2K)&Et>4$YG)nBH2Zl&4F(S1AZ&aS}!%qh7d305HtV)002ovPDHLkV1iF|l^_5B literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kirlia/normal_gba.pal b/graphics/pokemon/kirlia/normal_gba.pal new file mode 100644 index 0000000000..91b428af2d --- /dev/null +++ b/graphics/pokemon/kirlia/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 164 82 +238 238 255 +197 205 222 +164 180 205 +131 148 180 +123 82 82 +115 41 57 +255 156 131 +230 82 57 +106 123 148 +255 255 255 +205 255 172 +148 230 148 +115 189 115 +49 123 74 +16 16 16 diff --git a/graphics/pokemon/kirlia/shiny_gba.pal b/graphics/pokemon/kirlia/shiny_gba.pal new file mode 100644 index 0000000000..ff944e5516 --- /dev/null +++ b/graphics/pokemon/kirlia/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 164 82 +238 238 255 +213 189 222 +180 164 205 +156 131 180 +123 82 82 +115 41 57 +255 197 90 +230 131 32 +106 123 148 +197 238 246 +189 230 255 +123 197 238 +82 172 213 +32 115 123 +16 16 16 diff --git a/graphics/pokemon/koffing/anim_front_gba.png b/graphics/pokemon/koffing/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..430dcfdfb41b96db2f1a356b850c2405cf63d15a GIT binary patch literal 1189 zcmV;W1X}xvP)ZX>}d(ilh(zkmy;bg3$cO1HVnDle}h z;Hp`~aZLh-9>9Vcr3tuXWgH-YLqbg|aVcDJfDc;k&5)EVeo1}cEo{O2)6DGb?9AW2 z-s@^#0#58p2}cod90w*{cEm(T*LBGRIFr_|7k~rosM~@A0IuV7#0cbo0k_o!d!Yz( zpu++$yCFihMwxEt#{gqNQM!jw3dr$+PKn7dA`U756v@j_TTHFioBf}5fI}XkXONc0 zh=EEfDJ^sXFv+&cXC_J;0ObYT$skk;V@t@U2a_s5>2tvlp#HfaPx0Wn0svo-yiaI< z{^89wM$FP``lLe_NWe_Z-=8bXp>C=Kxg2Dn=c(Xq7Nits9UzYhhL1CaTCKjK#jFbO zTKnqJ^Dzv@UlEP%)eE8@D(^8hsD2R;CYwqkKuib-z4^r@85kR15pZyw!lfAczVEHh zF3G^nHl#y{gOU-Ft0OhuYBdYSw_kipxb4Y-*7TLU>UoB-R* zQbEug9<=XO&wBy@=xRQ@VB7oKivj0YcVd7tcGL$qr{h7K3bNODa`peI^@6kp^)dF1Ni>F<~FfJIkb zDh*KW9Ya{lJIVmw#EseH#YvKFs{_?Tz6Z*}PaNyLUzw&e^~h z)(@EOOPAVvZY)EUuzt8%vwk=LL}_74cNP2^-|EE`>4zwONkfTFx1=B5j21 zBh}LIZEH>PK>c_crS;1a_o@&WKUrWrVOrmZ9U%W=fzbe@yhpsFnq10nBrt|<%>%U; zH$hku;Cv&2F~T}Pqs-c+0}lu+FrvB#RtM7gPv+`@1V*#q1gndC=ex#2U^FWd_+J}( zb%nraE7`nj5RnUvHjz*WK0G2Y@^x%)XX#a7{J!gd43S{0#D{p~00000NkvXXu0mjf DH{>dN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/koffing/back_gba.png b/graphics/pokemon/koffing/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a76b27fae698a605a9ca481e01c70614c830e157 GIT binary patch literal 634 zcmV-=0)_pFP)Kl(BBxFc5~h+JF`45!#_IkTpP;jIOu5MbT%;DotLk zr9fA)Q?i*%hjufMF0$I9gU+?p|3oL2NG3t|90b9@{rc|iCw)S^#ec@Ad__fbE!L{nOppQljt^C^~bUxf%tOJ22@&Lm>&H4Gqf#A&B+l{C! z(a(#}$@X|exYN!N{hCtf)SjLK*V?+#9KUa8LH^i<4>OGpb6CS%eoFj>djeFL zhAoK9vcJtEBWM8&BI`!9#}c!lk63XKp!>!XZfDIp03i0%J{DN-1Di%=Rh3^`apo1f zhpZK`pflq@c6W#d#D-a535~F4fmkQ?J U8&2SkJ^%m!07*qoM6N<$g0~qVvj6}9 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/koffing/icon_gba.png b/graphics/pokemon/koffing/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..683df2b859be5bc1e790a999169b8f34909d8de4 GIT binary patch literal 315 zcmV-B0mS}^P)DV$*kueIxFbqYtda)1Fwa_bi^%c7G04mAQF#=z~dmscn zI-oj`#A<2^T|)aO>sd12`T&0~RfTpvIRG=h05(%Qie5t#b)E&d(=5?5&2=Y0oPif3 z{!Ay?k%%6Vuw84LI8Pw9n-3G28BsjS*W0B`0BGctu#v!FRw!iX9X1kx?wc@_GJjtO zxg-Y_*&6&sslC%Tu)AK;FXVvqm0i*vTl;pWQcoA!qABzGemMXD N002ovPDHLkV1iwbh1viB literal 0 HcmV?d00001 diff --git a/graphics/pokemon/koffing/normal_gba.pal b/graphics/pokemon/koffing/normal_gba.pal new file mode 100644 index 0000000000..7b248a340b --- /dev/null +++ b/graphics/pokemon/koffing/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 205 +255 255 255 +222 222 222 +246 238 148 +213 205 106 +255 98 74 +213 57 32 +255 0 255 +255 0 255 +238 213 106 +197 180 41 +222 156 213 +189 123 180 +148 82 139 +90 41 82 +16 16 16 diff --git a/graphics/pokemon/koffing/shiny_gba.pal b/graphics/pokemon/koffing/shiny_gba.pal new file mode 100644 index 0000000000..bcea2e929e --- /dev/null +++ b/graphics/pokemon/koffing/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 205 +255 255 255 +222 222 222 +246 238 148 +213 205 106 +255 98 74 +213 57 32 +255 0 255 +255 0 255 +180 106 164 +139 65 123 +189 230 230 +148 189 189 +106 148 148 +41 82 82 +16 16 16 diff --git a/graphics/pokemon/krabby/anim_front_gba.png b/graphics/pokemon/krabby/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f5b3b77095af3090db3b52ad75fab5a2128430 GIT binary patch literal 875 zcmV-x1C;!UP)WGhJ_lhU z^-~r`Qh&gBd|EIEe^$u^jE!pTv_NHyWx0}f9N(4xUNEW!ANHS==VT|ya#bMsn#`iD zAgYr^H-j=y=G(I`VxDr5AXc~S^J6aTLKLnx?dzEpj|2gt5rZ$mfeb$r`1{a4mNuag zu?6v!XG+sK3wZ_+1m8md`gCyx|KUYWEKvZJ(&^yciv1W|i846K{2QJA8eFmIuS?@g z$B%T!aoBV)_y9kbxLbmAd#~%O=sgIc0V%r~h(}C+&B^0}@l+^SlH1~elQjoh3Tgy_ znOdHH{lK}e3k7bPv zm@Ne| z$_7Bjb;A#ioqI%o-6>=f8-}f3OlcVcMnmmwTmdKNf;-}`s6@s zD(4kk3CYASHk(~C(rccac5agJH|Rk*ul}=v{Q>rs13@ly3%39O002ovPDHLkV1m3@ Bnppq< literal 0 HcmV?d00001 diff --git a/graphics/pokemon/krabby/back_gba.png b/graphics/pokemon/krabby/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d0501e77af2666aa3284770f2fb0c1f56ce843b4 GIT binary patch literal 710 zcmV;%0y+JOP)KlD%@9KoG~NELRw>@J%6*i4Jg&0@9GK zYxY3e%5i@bKr;%2XczGyP@p(`R3ss-xSOSrn_59S9!jLS1$bDQF(pY1?=~KG3Vpx} zIo-Pr=4b=%9>{8-=mDsCQ$h`x9-t%-0JWB-rsxBt!~s!}DmA8Cqzh^*RE~?rY3(6SmyR>L3N3*NE3@Cg zw^Qfn|$10ztEg(gxxnxs0qyDJw2x#zu>)zXHjcPZ(q84ZuCd)}QcUPsTiP-W;WO z1fnrMY#dLD8#C_({E{!&m@|9V1mF#l`X~tk=I=&M%SySoH4DRlM}8c30HyE@HHBjS s$iogmSBe(%T^L`?csOqZulDcu3+T)h6m`8^sQ>@~07*qoM6N<$f`ZREXaE2J literal 0 HcmV?d00001 diff --git a/graphics/pokemon/krabby/icon_gba.png b/graphics/pokemon/krabby/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f9fdaa6d5f8bcfb6efa9f4a803441bc8b65650d4 GIT binary patch literal 432 zcmV;h0Z;ykP)DV$>^RICoOkiai?uB6I_ zEo8xh1ui@p$@V&1rwbW@_b^Ssa2j}K5KPwDln!{rX#Z~aAWExK((xb$t~w<{7MiN}WzM?Q4U$1i{D akNO5YI^9W%Ag~w!0000^!(&5&00001 zbW%=J06^y0W&i*MpGibPR9J=Om%nQpXBfwiT6nW=>mP7UX>e#ANE3pW8aqSqexcB) zDjg#4#k~v?9fB(lRx^ie>Qc@_AX{@XUJ5ekkpux-!qRJ*P>0gU?_Esf47Kn2Jns+v zvLr8EO5VXnen0oT&%JkgzaJaMhccFK7&oqupPsrt?=CF=x+Fh6_)h$aANGLxXEEyw zZY_%%)2m7P#haBLv1oCYWBk<>`jD~-IQ9UlTmvV6Wms)JTmO?jtPl_fuMlz2HOxdk z!!q?+ORQkqfzbwt;!yT=i6d6e)SMg(6ks-?YQ8A|1PbURkYKeOmYiN=yFn+>48oFE zzzUIE!)7eQSRL0$F~*YIPMQE7&c`c(E>X*MffncfIo<_Mw98dh0tqMAGC1dq?S_8P zX~O9P!)Ss8j1URN4tT@!Dx8Hp;)%VK6U4Dj*dq?!csL5cLo9TZTKzhh!P`|`Ao1>E`d;^Op2-pVrw;80uAtjAjK(IGFH4{mrfe*LEd*`d=8Wrk zzdum`+gl~z3@UNZ!2YIJdh)c)8rC%gumG-rS7R6Qkb*N_0rt^M*`2qyhp%Sj|HGM`tG^h0ldjA{P8)<-JA=eUIAk< ztG5WpO9DQ{OGEDKmu~7e0i5P64HZY2Zr8-U`*j??>gcE@twqTRtJiU2!l z{l4{e;)-JgzgWc$go^2lC7y}JaE&x}nl3tD4gsdP#7q=u4RF#`YvID4sWrgCCW`5k z(SVtt>zxg7ei}J1OF%KZlYTYkgrzR94F}}uII08@X{;~~Fo}2w**`AqM31lw#f_ph z{**_;PFJjPOAry+w!b(5z}MQk5?h!A#PSnb5M$YzSO8001{ilPng75BrTc_wneG#w zicEJM|09M>cWZnNneHn7wLtU_Om{qdRs2hVh#wCCM=Y!3UkXILQ8*j~Sk7^zAFL68 z30m!!lnw*`EC~XJrN*|D*0H_ln;tWrqAOz@@Fa^MJ2&^QS9oejEwhJ&=VqE~! z8A|^nJ2>;aejtw7?yNHjVEX%J6Ah&QYa7}^4}?E3=?~uaz-EQ02b}ak`va7QzW1aD zcw{JlI7+a+p*=q*J?Qy^eJ_RQSJZdl@Av6J==0a9Rr~Qwv)o;0Ko44Bn4%r^0b1Px zp40=CS+A8qba!)R6C3chFuf_dwLsued8m?!(w|xs>As~51f8y89*a=X>EA#-Aj7Dm zKtx7}H)OUYpwj=POBJrM3<*Yrn{gPIZR+%ISR@$N$RB9m?SoKhXD|INAsEUZj*@W| zTix`3F6MfsEi6Ctp`_=7@E~lg!#_x3Pxc&96^vBkYIEQq$vJ~A~DzcwaF)ns-jdc+W$WZ^!(&5&00001 zbW%=J06^y0W&i*IZ%IT!R7i>Klf6#EFcgI|po)bj;SG?O=qq$3Ovw|p&Qdx>$xzxE zv32YVP~=Lim2!ia0101b1PNkgV5n67Y$t9)i?Sgx*A=ym&$7UBiq zp&_Kj&e3$AR*04?9~c0~R{LOLrT`JmELYmPX9i$z(}|e^Ai#BtjLVi%H{wy%1Bh8f z=P|-k0c8nfk$yWy23O}7fXwyO*2)qH+8YgUM|=g8B`Tnd09+C~KdN*akcyK_&(2Rm zYywP2@t~XK7tVjlkX2Ts^Q8|n7;R-JCDgN%{6bH+GL-nNYhzXbX(~;)5LI#&`cG>> zaIVHuW!g*F`RHf5zN(g*bwxkKD= n&>pX0=TkfnYJP}Djs8O4c*)kQgCNEi00000NkvXXu0mjf_rKG3 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/kyogre/icon_gba.png b/graphics/pokemon/kyogre/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..544ed9daf96a7850f56f95f15cabbb05017d3c7a GIT binary patch literal 444 zcmV;t0YmDV$@(y?-bAQ-@LoqOE_7kZ zD|tDm3}{kZGDrcDNZRhbGI;0zP(HmMLVtSMhkN`nxa;r`u(+376N0!0VeMeJz+sQI z*Z@F3)nfE7$A{(<{OY@59Nm`dj+NX8YAyEx8&mPd1tyIE{}Md%5N>h;7KW%@c&k7$ z&B7@dIIqi+0JHOCSOU24dSq!VA6_alE#d68C;-yw7>ctxzN?NXNJUetH34~Qm#4Hw z1*lc<+W_=F`)!>*<)PT>HVa6jf3bcB^DV4m1hW$4!K?(~z{Au6&nMUjW@E>o;gG-# zfz)-Ez(hedfmsA4Fi)FVPy%y#o&_yndK^FLH!zYeA%an|O~r%hB%!HzFpd<>ICO6K mEEH5{q7XXmw|OYqAm$5nki`kSinx#f0000&CUP+|ExJm-fC+9gM(_l{{R30T)@xq00001 zbW%=J06^y0W&i*LL`g(JR9J=WmQ7FNMi_uirA@l0XdK!?FVvGp+Z#%TuJ*R-I=wGx z3=Lapt4bgzhlNWvIG0LDuy!sHhs1t;LA|gU-?{M*n%}{(f&l%v?DQRnuuf{HQhV7$ zM#7NHD&A+Ukh7{GVD4ZPKUv(xU|F+e&1Xtg}s0Wcki0jxeim)lNnyY<$5Yn&=6 zF$uKrR+l4WYy`b_v$a$6CZfm;09Eh<-VV4K1h1zGP4^{W0TMv~pJ5f|1dwiV33RJS z03qZP!|HV=N^Cn4Xt_ubji?$m;AJ!bgeABRcY!cgpj4&RXoR#Emf-n5tTR?BsZ`75 zyT&xIUE>_exL^8)YP7f+snTl88jY%t6^sC?=JL%bAZu*Yun&@5E6E&c@#}v8@@HMu z*qY8{5j4`qcHn@!DGwq~X_hewP`dd(f`LH8u)r(lX-)zp1b+Hr+=PM0u#JajmuZ<5 z@E}U6rjbt!|J_5AfF>8d6pU`V)rThzU-m* zZky6PT`RGoMpgOi{+Vg_!2@`8(ZLAXnl3-AY^kJc&X}n8u}Sa9d`angmJt9ULSP^6 zI(@*q20m;r&X^$Cf*;^xGsF~+n)W?_5q=m9&RF5Ow9j?yJ$%p^EF@d^Vmf56%6&h!T#N7mL1e+Z|$HOn95klKKw}Jl9P4EXko}B4m||SLmci16x2z7P?~kwgVno0K>EWX zwh{FQrBx3VWfuYZo%9FUM#LW!3l#->*u5wt5aSQZ#|WT5{AS)#T8{IFRN!Ef_RisO zHQpbTEz~eD49svvSYa7X#Px(fAkeT*WZL3NmMsSyru;#%!08Uzmu!_>T|Wi{Kuq|9 zlD07@E9fhkJHQ@J`h)Vb&@uiE4t??1)5w$EDSuc{Z%WVf)r|c6_X9?Aohg6#h~nhG z8NE&&6sgvk@`r^bb#+CIfEqcbc<-b?)cb$hWK>cHKKH68)Bb?&AjY(4c|zWr=nqQ0 k6B07*qoM6N<$f^`K;1ONa4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lairon/back_gba.png b/graphics/pokemon/lairon/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..552c013561ed1f48e473d1f80d6e55ef7b47e8f3 GIT binary patch literal 575 zcmV-F0>J%=P)&CUP+|ExJm-fC+9gM(_l{{R30T)@xq00001 zbW%=J06^y0W&i*Iy-7qtR7i>KlCf68FcgM6365cL^ql$toMRurr_i|*!c<%uWl;y= zhJ_6i7FV0aS1S%wrug3^a;WEUoZPrWLb+eR{7IT5$2!(OR(JeIfAtY&IsnYA&i!0H z9RMm?@Vu&)^&x=J>DmbHRc9OkMbiMNwxT=v2!Pgj_0(ETZ@<&k(Lgz#0JIe`9UJh& z18v3pJpwRHla&Wd-3B;53`A5|YhQ^}-U1X9oe8!{LnZ*U)|kI@{0BaVp)#hZ3=I1* z{o;+a_@4}FYwk(wd>=skjWHYn20a6yR6I@jW1zth1CYe+ke2JDcD!fl9H z!Dog`uoX-`KHN(XkFLSPmiO`E0hmC=bW4ggV#SmJ1Yb;c@y%`M%SXdR9RO@l`*a(n zNpf4t(lC)nVBz;yIL?17xx_huS6;&d@eTRP9XGOXeXL9tG zjEoKjT5$N(r6?$XiE~+c04H#L!>1v|XO=P1@9`i+Q?|eDV;$?S`UZn(Ospm}5LW;I N002ovPDHLkV1h%q0A&CG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lairon/icon_gba.png b/graphics/pokemon/lairon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6d450b08da58f152cda2ec070307ad1644374643 GIT binary patch literal 362 zcmV-w0hRuVP)DV$r8(~t!&%K!iX literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lairon/normal_gba.pal b/graphics/pokemon/lairon/normal_gba.pal new file mode 100644 index 0000000000..b5711fdada --- /dev/null +++ b/graphics/pokemon/lairon/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 172 156 +74 74 65 +106 106 106 +139 139 139 +172 172 172 +57 57 65 +123 106 106 +156 139 139 +189 172 172 +222 205 205 +255 255 255 +172 57 74 +222 106 106 +255 131 131 +106 189 255 +0 0 0 diff --git a/graphics/pokemon/lairon/shiny_gba.pal b/graphics/pokemon/lairon/shiny_gba.pal new file mode 100644 index 0000000000..eadb9aa81e --- /dev/null +++ b/graphics/pokemon/lairon/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 172 156 +32 90 90 +65 123 115 +90 156 148 +148 197 205 +74 41 24 +123 123 90 +156 156 123 +189 189 156 +222 222 197 +255 255 255 +172 57 74 +222 106 106 +255 131 131 +255 123 82 +0 0 0 diff --git a/graphics/pokemon/lanturn/anim_front_gba.png b/graphics/pokemon/lanturn/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8d74b75fc0b42d4feac9da02a44bb68858a66873 GIT binary patch literal 1216 zcmV;x1V8(UP)&`*i{?3M%>Yu1|L%ML=2F$PTC|HfgHi|(5D@=!0JH!AgvIE^00001 zbW%=J06^y0W&i*LK1oDDR9J=W*FSIKW*7i)qy{{I2RhMK9XfY(dPCI>`&tQgDlaUD zgml z;g+kEcZh)J$MgQN@$)2+_&<+Sbq%PM?~XGy5!Qf|P-=!h-QWu| z7nq@VvU1&e>MTK!!k}cP_jXqw*GL#78;Nx1E`X~#|1J>+Qgs;sYsP_;NJzQrz88tq zG`v78?Oc(v4{Q&-34~^XsS)>V+9l~5FQ6BHOQ@uzdeZ@4d%;IIJ;ReLScx0~HXh(# zrYKYh40#16E_jQsUoP^5j-3P}`avE+s#xTCo0u$sFFk;#3+3rRP`M(0@DLMlHW2J- zBx$V8e4xc`x+xIoE=a?nGI`FMq9i@h$IjKr47&!*5CFQaJK(&d9L!p`fX-2VqU%#< zhG90R&K~K012Bd7CSTB>tw43D>&_Z8y^gX1W2Nr^)&q`J^mjs}7Qd?URFGbsBnFOSdYIfj1O2!;S&96pZ$9Zl;g`>&P*3==5~zRfC%vS%G* zg1jVeNmXw+Nyzs(rK_qcCLkQ1s_!9K z4E!A8zyJF;f;zn46uc+Fz-{zsd}0^|xyHM(4X5URL|LS4ZX2*cOM=m0;jXv*+qA&% zSnwA_!-TUB#J$uCKi%%f{dm2>L=;`$Xnnc{EY<=(ZVukA0E=P_;N{O|Hi({M!x|20 zXbI|060y&eEIThVzmj4#6c_D^OTi!v zQlf0N9g)$(0INSE5Hk*>=*hK&iX_PhekcaE@tA%A+JgnGqzORu1G_swKr7<5b}ITW zM&3>!uj+PrdD`}a2lhq;r|ecv7rsaJR9%ROv zHf_;0>be7bmDkXxW(&K6!cq4u3P3f<;5Q3LPv=g55v<)5jCOze@L<(n1S>Csg1Y~~ zdjRMRQV=}D+WzAu0!+XMZ~I5P&>Se2?*qUD&@%b&hh(9n9Vv=+^KPFW0-VX`e!z9I zIRx_wu@h`o{2)I<@bYGi-GPLKIk1h^FIlDAoBq|u1bK)D|941=HRZu e-Zuwt^7s#&**QvalCHV{0000&`*i{?3M%>Yu1|L%ML=2F$PTC|HfgHi|(5D@=!0JH!AgvIE^00001 zbW%=J06^y0W&i*J0!c(cR7i>Kl0Q$|Kp4hvAs!MB*|H!$K_}-M_%$6OCVa_~NJus3 zsZykdL>(C-*%FLMIZy{SVwfxP2Pt%@1WhXsq)G>WgMI`C?3@Gl$MGlNS**L~chCFy zY=qvGr!C^Pv-T(Hv+h{9kwHx86p;gjTmzzL(NO&2WrhAUa9cB=hmgKdB8ug*|2;Zt zb-+!QdR+!aF>r%4@^_b=?JB@=B>{Sl%huhwJYwLTPm$K$4O!)r2Z<;RX%M2Wv&Zl& zk6z3~;#Y8o&?jIGipQQ$C7|?shO{cM3Ag2nAK!~29nuS00e33Uf!6w+JembOSt;;1 z@aee<=wPu5s5qoFn908T1ULms;~=;WW#0zCQM#B30t|Q4Wd@&4>Q2jNL z^}8{@T3rDjGYBW~4U;8+`nwhO4K4vJCF0OD8ekJZ>>%spHXfACSiU+o#Z!&D{z3G e(Lk*5u0$_w0w*euQ9yzK0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*II7vi7R5*>@lD%rfFc5(C1iFVYp1XAEi!Zp}r;Dv!c@00f<0kGkh7ht=s7r{mVouMF11a3N^LMKcB zP+Ub}A~+UFnC${=6ebxZY!oKw0b+$wm;jh|e$2v1lWO6Ygvo-8PMC+?{&h)t6YXK` kZpvr$ptZaFm!@8dFWWxIAds@F1ONa407*qoM6N<$f-z#oasU7T literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lanturn/normal_gba.pal b/graphics/pokemon/lanturn/normal_gba.pal new file mode 100644 index 0000000000..7baa22c6e6 --- /dev/null +++ b/graphics/pokemon/lanturn/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +172 172 172 +164 205 255 +139 172 255 +98 139 230 +57 106 205 +0 82 139 +255 238 123 +255 230 82 +213 180 90 +180 139 57 +131 82 8 +16 16 16 +255 115 0 +180 0 0 diff --git a/graphics/pokemon/lanturn/shiny_gba.pal b/graphics/pokemon/lanturn/shiny_gba.pal new file mode 100644 index 0000000000..70360c0296 --- /dev/null +++ b/graphics/pokemon/lanturn/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +172 172 172 +230 156 255 +205 131 246 +164 98 222 +131 65 197 +106 41 139 +255 255 106 +238 238 65 +180 180 41 +139 139 8 +90 90 8 +16 16 16 +255 115 0 +205 49 0 diff --git a/graphics/pokemon/lapras/anim_front_gba.png b/graphics/pokemon/lapras/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1124f14aa33605b3ef009b80ceeae66377694357 GIT binary patch literal 1259 zcmVoW16Al+8I(b15k)QyG3O00001 zbW%=J06^y0W&i*LX-PyuR9J=WmcMV?Mij@nR)8sFH&DPs#||;NW}>EmW7+I+6JCY)gik-Ou{07_b z`|{m;?|!_GVLaIX-1y|%{w<%YU#7TE5c;r0|Fy^O5zKwQkdv9qluonCE5k`LnDYoA za2W$Fm&(!@_A8xb<<%AwGuLG^#$(Xdc=_CLE}f(0@YD>M7~$vsJb-Z_IR8UZdVbU& z_KhfHuE!W>zAhNpgG6w8X;gtJ}7>^`7H&ViceP(-5LA57GqH#)9v|7fSoEHcrTjq$xzo4bGj;D^p#mEylI?)cVSrW)Zh4Q6(`zE+M6bb0zydr*F$3M6_+Z`dvM?Y!a;t#73RM*|SvXqBBTUMVD zQadm<6j(r0bxo$-EA^qeQeTorxjE%dtv`LR2m5Yq>)xr0V^jSI{RxWhya!vaCwO6f zm~73wcXtWQ(bzDhT-`C6GYkC{`o_`&eJE)b`JsA!na_njShY2>2L<2w=uSZu$Lecf zz(auYQ1 z#{+z`u?gFoO~~=!BC8Qf8ESaYXF-_yb%BNl{lv`$`AzSEjt8-F-#j5iFG0tHODPtg zc7G`gN_gP>C3knHgy>x?;embmY3FBB5^Uf>|M#CT068cGWjx>?8p_`&{AE0lb9RVN zKGDXWS;hm#-ii-I6PVEk9;or7r!e2d18n7ct%%6o!~<-#CQ$tF6&^rQgqcMA3J;1L zqipXt@Ss)*im;&LL0*K;4>}%bJCX4NpO^5Ugb#`zxMIWt4{GtGtib!M058Xb=El7? zBLyH~jt8|8a+^Yg86RYLP-|KGt%$N63fFjGwFueM4toW16Al+8I(b15k)QyG3O00001 zbW%=J06^y0W&i*JEJ;K`R7i=v|No!yv|9glC4cMdE%$u0UY+_8 z2i#bYq;nAtBfVE zbgY0`DV$FbqX?0{afSfPp5RJ(LAJg^N7>_^%N1Gmb*46+B{5uk0qJ`)dud@%8$|6UB6D_|_&=39#V!S*;Tn@ZHvt+{(T4Y6 zz+>V^XaI0Z{E+P*@sRit3?A_<@k0Q}uA?7!Q*{Ewk44t}Ot*ISV1KIqEP)~?ouheIUs5v0RI60{{a8R#l>P`Vh|7zmvFp&00001 zbW%=J06^y0W&i*Jq)9|UR9J=Wm$7c!Fc5|{h_lflFF+-80G%{=5+IU8y)Y0(w4L+} zoszXvlgueG<0H*GCCB!qtImN;)6GSI3D#M`Jc1w6#p&EReC)KlLo~3 zYXP+cbk(Z?ZIkPwT>^>)z<~*=bpuf8XMQ~|3nUVIv{C{RY>K>`0bunMQWoHYV)sy` zRQ1OmSiqHqd;i9<9g)WZe|~eo9aKah1eF8;0`NfX5omY-g-~-67C7#a05ZP>WL`sB z&t7Yl0t9LiGk8+2++2AdkFn7`^|A9_UL4il9;_x(v=?nF=MNEqzpD_Xbf}|h-1_?7 z5{)Z-S@>auFs*k_164wp0D6hQ_WEuh&e`G#6&BIB?d{GIHFkJ@Q^r$l_D`1B!=VHQ zuZ5~MyN8|tgzt5{S4Qi{0|lTA#$vZ2@YaxG2t5YW3V&v#`+f-7-y6fJ7LVWY4->) zYRuMb!^loCqTZn+H9vR&w$ZY9AagfIb7z6y=FU%2W(mk<=S=|q=*`-$$SKE(Q7kAz&_Nw|y^M1V3a8&GXbF~QfH z1Cb!dW~!R9XoB1AzY~Cn-DGblXXOkNx<95#++X2`urU8;ed+<2fu*NZ kP~Gqc5R!i}PVut%1y|?=J1W8%V*mgE07*qoM6N<$f=+mD@&Et; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/larvitar/back_gba.png b/graphics/pokemon/larvitar/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1c28da425ff9c2f4baa47665acd07ed005c25e4f GIT binary patch literal 517 zcmV+g0{Z=lP)~?ouheIUs5v0RI60{{a8R#l>P`Vh|7zmvFp&00001 zbW%=J06^y0W&i*IgGod|R7i>Kls!_zFc3yl$OlNl3~8ksWTiTTwXO~NsdEYrkppl~ zW^C7D*BMA;ISKwtnf;6Qg(AOQANK->isVpXCc z;Qg0?#(E8_?^w3q0O~cIu3HKQD$fwkX$$6NgmBUVjk#$krDEXLD;JUmDiIVQ6-VHD z#2m1n6YOe)m;)5V7|m*g-Sd#Z%g)1EQ?GdF0Z+TvHBABY{R})lz@Y>h_#E7xye=g! zfZ3h~T}s$1;B8p>Jp31+j|p`7N-qGw8X&IL;aI$KymDj<2ziSjV+K&wydfQfkgYEi z=&u0AWmJM~^>79jEtznVHm4<^Pvo2LQD5ggfPSOEOrIyVj2Gte(<{Q3C+AULDzZ-45y00000NkvXX Hu0mjfP2kxE literal 0 HcmV?d00001 diff --git a/graphics/pokemon/larvitar/icon_gba.png b/graphics/pokemon/larvitar/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..85a5504c348ef7cc1cd7121b726f5c46286fb1d7 GIT binary patch literal 304 zcmV-00nh%4P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hu1Q2eR5*?0lCKWJFc63P1k~_8GYzsB&^6oPdXBx>46lJ*0tuGO z#CC>+qY26S2Z6x==kDw8*H(N=ecMQ}>uxAOT>v(3fM&DKz- CR)4Di literal 0 HcmV?d00001 diff --git a/graphics/pokemon/larvitar/normal_gba.pal b/graphics/pokemon/larvitar/normal_gba.pal new file mode 100644 index 0000000000..3bcc1f1335 --- /dev/null +++ b/graphics/pokemon/larvitar/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +197 238 197 +180 222 180 +123 172 123 +74 98 74 +255 0 255 +255 164 90 +238 82 41 +189 57 32 +106 32 0 +255 0 255 +255 0 255 +197 197 197 +98 98 98 +16 16 16 diff --git a/graphics/pokemon/larvitar/shiny_gba.pal b/graphics/pokemon/larvitar/shiny_gba.pal new file mode 100644 index 0000000000..aa6a59c365 --- /dev/null +++ b/graphics/pokemon/larvitar/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +230 246 82 +205 222 74 +156 172 41 +90 115 0 +255 0 255 +230 156 172 +189 98 131 +148 57 98 +90 41 65 +255 0 255 +255 0 255 +197 197 197 +98 98 98 +16 16 16 diff --git a/graphics/pokemon/latias/anim_front_gba.png b/graphics/pokemon/latias/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..63f4a1d1f7a42dd6a0d191981fa385eaba5ecf74 GIT binary patch literal 1201 zcmV;i1Wx;jP)Yn4K@boSgE`O300001 zbW%=J06^y0W&i*LFG)l}R9J=WmO*daL>PvRk{ie)r~H9Td`vfF!w*Qe+(7#;;4ct~ z-iefBPgZ~f+_-USt=Vj(9#D%XiNp=Db~mf460$vBD)mI{;hVA79?#etRiQUV$~x0y_u8!~HFc z`wDFAZ|!{M2$`OF$8qpB6xizlQgRkzF?tki;!Wr?0W7} zvwQjT4sLp!TYp`)fUVtMzxt^G>`Tk`<_+)x0Ka{y0&~j_erSLX9ZX-p{jupGhO3ho zjff3BzJ5EbS7A@Z2W>>`Unpe3poqlPU8n$|U?r3`A^_lV4cKHU3c#pEKAPY` z(g30bix*T8$@mD@4=XOO6E&2Tpc2`u6a;XUC?b~Jl_jvcYK}nUyM{m&kX+TLpoHJ7 z6*&^HC(1QYq7gxk+;TQm_C%tJY?eTxKIa<%YLUNT-{L)0L26L45_upiv=oF!5cs8t z-1*pTDTopiLOdz5?>Jjf;^wLaST{jHeD9C%*(Ma&-UeXa1`t#rp68KkQ9xACH-1dW z8SziA<+}%Ws?g@Ge+Wqkc_lj(gX@4zrZY0dt9g8=16DGf1qy@ z>B-dHH8fBpFCBrvw@1_Beh09K$(cKd$&*J%BsYOPdK{Bz3{}1ko}Wz29`blPh#1U2 zeFRMq<6Z+0VFu5GJUODzPe{jo2qOkN561EFF_{|kmL0;Nfg}hyHvuGo*-X|TwBv`8 zrvO}B%!CYm*)h*@Spohiy)f@m!B`g7!zcjdBZY_x?JjU}mSs$~A?DLCQ$-NV0f~6Q zva~!hmbO$lhXynF`B@^)m(VX0hgOdn%&RNPtoA6v_8HE!0-^rwZu@?x@xS@MAMzZozz^EU&AH2*~d7y(0=KT`oCU}SvEo;454 z3>cO*P8u`l2pF*ClD$z4bOa2r{^gq$&>b*%>Hf<#0Ykd~a!tV4tbpEtQM$hoF#NiW z2R#A9W99#q`_GMlvC0pX`xj=wDD%V0{R=Z-i2M-7wflDj4BrbI_wNcA#8ceg3>Xv0 z4~qMLVFZi-@`K|3hUp>557V{opWNpDD80q~(cRsj|3~ic*6wcte?E@S*yrH>-}Je^ zhzDd94?5hx6%QtNjt5sJP{jjDkPd|s2x(cvw0{}q*5(I`tNFnMP#G{*Yn4K@boSgE`O300001 zbW%=J06^y0W&i*I=}AOER7i=fl(A03Fc5|-r7M*jIv4rc6{=KBOijs(cnBVVhe9wQ z@dQDzu;GA^*jg8a*a(4v70UUXIsu(iA#p>h)}O!o&#l{P{eLB^fVewu2HLW_LNSr6 z6ws_l5@=RT`Xd-Ncj&|5y$Kk>2>2dJLZ43n_#SO3)(v8S0c+R=5Z#4&0boP4&0g3K z=;_Oc^30)uRqp;E519fR9i`^hBs4@<2_%XRHbMjL{09)`1_Q`l9)abc$ialqRB- z{vnLO8On^oZ-FzEKs5d-=oLkMi0zK3fC2@*nNmfSG3ZTi9PoOD>(f*z{p5i5ORAoi z>nb+u>ABK#H$(^D-dROQp&(BY$Sgn^*HCzG1vvseg@DR5^&lWWSJ}K2V24~?i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I3Q0skR5*>@k~?YxF%Up?0*S^>4f!S_p2r3lm(+Sel4YvE@DSH9a!rqvabWNX-PZQBd5DNZY%=Lz^X$5MTcB;s3naKwNs-*HSI?SETqvP qFiEWr#L21Efv6nt7af-W*WnAaFuoiK z&CRT=tdxtCb82(m-rj>sO8;tV)k;#F&Hw-Z|5~K~N`uuoVze^Qt}+K00001 zbW%=J06^y0W&i*M@JU2LR9J+a$l1M=9tQ~|RDE>%^qlU|T$ z6{P$V{R{FZL=_x+SZ&0Gs)vdk+M6{dYDFcAm~|lHP?Mdtn+ufKYg2Kkgq`hsGyBWC zcG3$YMeFSQ_`UDU&d&QYgr0+=`I!(8ml zulP+80+;i^<8A`X86*d&wgk#ou7gIB2iiMA+{(I99ZmyOTL7yI>qwY+pxwj@noAic zq-u~#Chpn{0kvT>AS#B`nvBynYxzJNT1^H-IR`ZG{;s0zTX1Dgon!z=z}R4@Xg}XV zfL+dN#00x2;d^6=v0jU00Fi*fty2qRiM191s0_0S*Z@9!pabw~doKfs1Xuw9=KOg7 zfRK7Mn*dh<9yVdEe?5?po<*zxM1scF?L7oiDjzqa3X1j%t^%0^m`Ko-|Fj`~Ac3kc zZ>f)ITme=xjuZ0E7vE~zSfLfB(~>x;(j6dFOC;Eh3J!v|G4amY>1u5|T|tbX9;dK& z{xoybQ#bxk=)vnQM^Ys(wYJm?Gg*Q-=&+t?4U-^rlFd zUoYvU5~(lfl{)!)Do|WJ01YMm#t)V4X@FjA--V4!N;eq0&!=c8728eRx#XfnTg=VR zqP|GCU}u!eHyieY-n4bN06QICpBsnNqEmsJO_wom8Gr`VaB?bFu07g-74)vWqtphV zlLeNCFE=)U@B?_5&WL9K-@m4O_+S%>4s1AQJPBxh)`F9w$u@7pOEO|vKyx4JH@optGr^)Rle{@@6reb47E z>x4H8!QREFoaXs{(C>_}26G|}ug~3!KB_*9U|0}3<4yJXrAtaG!w}9!OyR|QW-eJW zwd)rYs8{I0R0jDDrf5nxTALuf)>Fo4I6fZGl){t>?`5zP;%Dxj0LadJ%n+^nn4z8o zwCM?eoqxwCD{Qs=V^e$-w$`~zGk`YqTYMtss{H?YCVqM=JSEJUxXc$bnW74cDeci* z@smlQ!I*q|O3)5fuGA_Sd$1KAhQc1H{AsN`2{fXnBK;G8YEBvqY|e6>09amC`16cK zi6w%#t7|040gV`#udS~Gkpa%war5p!X*$sS-w^Um3J~pIZtQ)qNkD*88)p(ojT-ta zAj~`rBVkn&WsE&D*qMd60rCWsk z{+BCUP?UlT0}<{w9bM3O;1{9U1RPG7uF|*c#Nz<4#9n-hMhuvvhGp;gmNXDjBRuRS zHnMeE`B!9YM2m&K<6niNC+tksTS3eq3W!N zIV?+AD( z&CRT=tdxtCb82(m-rj>sO8;tV)k;#F&Hw-Z|5~K~N`uuoVze^Qt}+K00001 zbW%=J06^y0W&i*J9!W$&R7i=%lrfLfFc^k|nzccW=-4~;t5;g(L|4?76;;ZK{tW&W zVn7Ut%_$2DQk;sLFAlWpB}akvq~o*GG?va^Sdhrj#ZTV%@fW+E_aB}f_qzd~Kbm(Z zTrU0wM7$da$3RB-27n6+=o!5kz?1-@#Sx$+78lbRfCB-H^{ajeu)6)~1OVnWFcqI% z1TN_g1h^2J?+$?Jb{~V_E)^f$9aHax23|_>VeSOrex`r9OvO{D1n~7M10eCxLIYz1 zKq^n8@t?mH^_V>B!zx4hew4nsME6E8o6zOnf;;0CWUYU+x^hZ>|CJ zOw{Xd4}r(e)^S(^uu=}d`_%%lasfXr0Dd@ts8ImorfV<9BkHu`%vF`N-EDUQ2 z_qmMXcvL6cJJ-EPCy;_ig%MrgMeL|R2C%ce37C@sdC{>23>ZoS5SJ5yGAlav5V13v z?P-Mo1EkuM3c*eX7{IMinE+a$y25~@23!i2h}baQkP3aV!66AnDqJVnkS3%;Uu3A5 zW+Y$&P*D+M3Zx0xDBID-O8FTBnuZ$ipV$HN3WtOZr%&l0cIVa%GHl2(pl;BPiz;ca zRgmXeQ7Q{qiDY|{sFYU3?__P_M#${E1u!7j>#gH;BC}@Tfl|+RL#1pWNU`y73Mk5= zGQhq8`ZBQrJcz0VCiu5erl@pi8VWonR)YcbP>9R*&!0d4%r#R?i#N*v0000DV$@k}+<>Fbn|o0vT?RIY9CN!(loXLFm;&5p&k#`hb4P zMV-}9V0kS|(FG#!9g1iXcoZc{I%6JggmqZ3%cEep%fYlY(~P{N6jZ`cND*B^#i8Q5 z>V!me?1Cxk=lW1djqe0C0wSDu)hll{9#b-+aj1*$_-9ke9ZVc99uVKMEl11iaM qATcfEI`B*s?mFDcEo+1SLx&##SDnl4Nw%5*0000sZrvp=@+8tY0gp@38 zw(u8_3ll?ugaxE7gr(if*o_QPcGvs^I3Ys?L;Rz1B7q?HdPxyD_FYi7BIQXrS$dy* z-@9{i?~BmW3fX^Hxk1M%5CafexfQ&JbxMUtTcASVPW!PIie7$d1)cU)5dlnGS7@MS z-irW#Zb^YaRSiK80GcuebiqbsSYm*t3TvRg!T^;4f*R=A%OI_0Kn!S=!TTf$B%2yc+MJZ;06P7>?umjX;}tjkB=LgUQ~~czNnGY(3Zdb zV8BVEnbCuzT9tf`0*6~o27Etm>c%q5lY?l9DmfV`G_Q1{UL&LuJ@15jaigiP;hJm* zb&de)CatY)eUT9IYPq)WUd9A4PF)npCLw#ddaZ{~T{j|tarV4P;SHQ_CkC+J69VcE zmXypO^RaCYZ==Adj|CVkR+YT^)&?-+KmxbStMV>+0sS-6*KGD+&Wt;Z=u_ z!~nFCo&uzq`ide3&?@Usng&Qk_7UH7A(^Qmi^s++9*>!SxYwTf2lNE}gL^sMKe%@L zJOWJk2iLak=tv6thyAweoJEG(gnw|De~3=Kuz&d48T$t-0{pvwm;@&LgFW^Sk$uY0 zo$wDsj(td;-uZ`j4!~J_Gr6oOkm_6tULeUCwQY9x$eDx;AF>*KKKVd t5cUsTAnYG_J0x$iEP)K)V;3SFc=2l3^1M(d52aaJC)*`l??eZbqEr%TD4Mp z8T1CK)2-LiwHrI9N4)@kF5uJ-KiPnIuxF*N*)L&-*{x2D+#H!h*sL z?7ZI+akBHLmI#IRQ(HtO{I&=@Zv$H*&_=XA$Q}Tmv)mC74mgLg&T>X1;b0JOemC~r zpu-0=I0HT#4q`|5JK4Z9865rEFrXo-8KM|PKz}q~kqw)aI+{K*`pS{BzXMGC}D}@`-HNah{ zTPZyM5f2X*_=^)l81T46-8v&s9Tyf*%c<~#kt%Up)pC3y&^XQx{ayoIeW{Lh0NtdX zmnaY`z(1hh2$VVvxm^! zX|uO<&tVvH6hH?Rm;er$TsO90Mk!#g>2oVG_M!nKwK*ztNR1rH9o1^X)^-acN$*1} z&Vb&)NQ0#X=AFzmNKAmFUZk7e>Kag4CI+ZK0A2z#U|s`Vl*oYG{5u$Mc(7+R(Jw6& zB>|Dp2^b&_^>t5T3Wy4yHmOr|^#DHpYF_uhK7Ipsc89j8adblf0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H_en%SR5*?0lCcWHFc60O1ig3g0Tk+>n~Sf|*)5|Pgk*FScR~7g z1x2@5kv5yZF}0V}Q77?8hJIY`uH2U-zZCQi;BM6iKn$p&HF_l~zyV@N(9jiG#m}q* z5*D%pS8KI!Y2uYaGrQUgs|16I9v7mK=&I62PYZ$2nf7|SlR7kUU5a_lC7&sIjz!i) z^PZOY000001 zbW%=J06^y0W&i*KJV``BR9J=WmpyOVKp4lpWXND!w}UO24^XA1QirOoikYdJSjy%R z^$TF~0aDDwRFO>iEKxc_koSONHQC_K7C}m+*iY{uX^8J^#=a}o>2H%F6%0tBKq8Y@2uMIRYzB%d0hVPoihxgs zVN^fn4lCD&QK^_!D-W0=!+33?@;rx7PJ^>bWhe0iQ$)xZ>-w2#>Ilknk&Y<}bi#l! z1qqhxIo&^cQk>y1NZ0kDx~}j;SbZaVg7zFxT=5f%adPHxcPl9XSYHNGFhd$G8+`r@WcB3+A9|oh(+&I46ZmsMA>&!PCAp81uv)OM_ozy>A4V+zuAC~Xd{6i9E+nyh4 z>;3_S!%T`L0*I*+nkb5o!<0RV)OgS@4ipMN`psuigA4 g5or*jFY!0UFIH1Ic4Wth=l}o!07*qoM6N<$g31rOxBvhE literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ledyba/back_gba.png b/graphics/pokemon/ledyba/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6a84f405dd71e6ff30c7e12420360861094d4cdd GIT binary patch literal 642 zcmV-|0)737P)^PZOY000001 zbW%=J06^y0W&i*J07*naR7i>K)IV?9KokIQe}UfVhHO@luAN(n=dMI8$4n&Zt*Sq3 zc2m?3KpZRTmfo4#jQI6E8~aQUR-~%xl9OP$AMdYC5WJrMbsT@;2*~IovJqg5mjE{c zB;^-lHM|JOzW~<$jBf*X5eRkt2p{9iAir8oH9&F+h^rN7{TASxy#Q7K905M5hqF7L zprI4fJ(wTg&$6pYfKzQCidPVsulHx=D}`Dcj=%U~%;GtCx(lK8} z3D`%7mc}G!p#IGP^m}W|$W#P`D+b_K=2|eb79+DDkl#&)Mb^{;Wzd#DWtJumY#t6m zNQcJ~tRrCJLa50Jz;gP5d!PV_#_VsYaU49FSi;Oz)Z@%GAPI1%LJwRC{M$Le4K`qj z)~U1yBBTHWhymU22~a8Nx(9g(4XA)a?0M9PhwZj2@{I~P17+t;(yACx-Th-D)Ee6I zJs3`rzy_dp9WX~A9!>yPe+u$z-$d4es>{GNh&=2<$P`;pdQca;dq1cHwiB9n_XONd zJ@r7=B}8or78{VDQ)=T!Eh+et1I&2Y3?wSG_U}*5ms|l)s{sL~>DmutHzCo0W>rm> zhpo>*4+nKn9+zFUK%x&IRZ26Ma~&;63UTswGC;Ti(*xS&a2t|VkMyK=U{PD#j{OzB co_}%v0NT`T)5lA#=l}o!07*qoM6N<$f-?3Q`~Uy| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ledyba/icon_gba.png b/graphics/pokemon/ledyba/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f417e2d74e5946e4dcd4893cea964629db0473d0 GIT binary patch literal 314 zcmV-A0mc4_P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HxJg7oR5*?0(xDE*FcgL1J^_6bmW*V`8ES{2NG9-9AS(B&OBQUi zq-iS;471Z}1cbVNxwkdH5Wjv<+~r&l1m+x2?7-$CtxbjndwXxz>% literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ledyba/normal_gba.pal b/graphics/pokemon/ledyba/normal_gba.pal new file mode 100644 index 0000000000..2cc003adf0 --- /dev/null +++ b/graphics/pokemon/ledyba/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +246 156 49 +238 82 24 +180 65 41 +123 49 24 +255 255 189 +246 230 115 +205 180 57 +164 123 0 +0 74 164 +0 24 115 +205 205 205 +180 180 180 +115 115 115 +16 16 16 diff --git a/graphics/pokemon/ledyba/shiny_gba.pal b/graphics/pokemon/ledyba/shiny_gba.pal new file mode 100644 index 0000000000..472f0974dc --- /dev/null +++ b/graphics/pokemon/ledyba/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 222 41 +255 164 0 +205 123 0 +131 74 16 +255 255 205 +246 238 131 +205 189 74 +164 131 16 +0 74 164 +0 24 115 +213 213 213 +180 180 180 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/lickitung/anim_front_gba.png b/graphics/pokemon/lickitung/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c3dcbfd1a668f653489278778945f6ec2421c08e GIT binary patch literal 1337 zcmV-91;+Y`P)0RR8ZwEv`o?rKuaQZbYe01yxm0r&HY00001 zbW%=J06^y0W&i*Lw@E}nR9J=WmOYQ#Mi7Qsq`egsyAML7vkwNsl$V@~^rZ!}8$xXcL1`T0 zlx4Nae37k+Fd5X*j}`!w<4|6#Dui^%+^g>4BRU~vev(ppDNA%h3H<%xAzjc2QqCI$ zoR6rT0a|Cp8FSaVug@F-smm0BpHs?;l@O@m{wsde{nZpwi3HdxWW`?KobF;c6wnIa zg%&nE@Dji=T@Sabg#vy0Y4`{I)R0PawX<9d)S_$Ekp)L{mn1`n74ACo3c-ZVW`4ZZsA6!^AklX}KH! zX+4aSU<<4e=mF5%AmKab*6C@&+W^@kbg!*b>tP#Uo*}>)0;lsDVD<}uZLAs)l>qd( zfD)E`!`HwUs+Wdtm-uwO%oj5zO` z)ecB3D8DWUSaPiZL})XPTRg~SOzL^9gNKj;GJqlv(x3qlI5F6-RK{9}Mhh(#LIgL4 zVSKg>*)QGW1`sA`y8HlMzYo8}?yUwu;442Zu37?Y1E3#wk7kX!$|@dryN0(1&{F8z z9KAv``@WBN4!CrpeX0pU0jeo><_TPFKn!;hM4;dRvAYXgrF0Bkc25CEeL;{yh z0Od%aaghE&)kRX|Sp@dLNfEF;-U6g@RdVMR;2Tyf24i6_s{qd@ zb!{v%fi7FXmx5caBv~QCyy^%%%T5vIDbRddfT#r`Ny5Dx&D#N9JSn#-DLYKj9puxh z!iszeL@)yGnQ{^xfu_OE>(E$^5LWherONR+)PsCILBq+>mR*1jy$ql<$Umea> zAdp93dusqjzuq>C_0{L}Bn9zo5k2|@XP7-V zFq*Q8ep`oC%)|u(>v;nR(ZsUpO!z& ve$nk7wamVazrbMZ^#`36V^fX)x54-icURw5(D%zg00000NkvXXu0mjfua9I+ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lickitung/back_gba.png b/graphics/pokemon/lickitung/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..adf354eb3f5dc2e4435cbf311e24a3cc24551ee0 GIT binary patch literal 551 zcmV+?0@(eDP)0RR8ZwEv`o?rKuaQZbYe01yxm0r&HY00001 zbW%=J06^y0W&i*IrAb6VR7i>Kld)35KoExW0wnK%Jr?Q3m!Q>(bhh$N$s1&kFoR{z zU=4$zf|;C&IL>GhKsOs8w+Z?H$`;AY{onli@6MfJoa;Z=bC#vQ$Y$!huA4pms83OL zJ#V-;A!c}}3f=VqMom3!UmB)g8h8Nfh7O`@2||6)VhcbWhO~$XYJ*xwAklz;1Jr>s0=$I9!RQpA zXw@4jL$)gO(4qWF1hDi)%=QwED&%%PmtQ-!hkb`5@XBPv$iqkn(#)vUMg$cgWt=T) zfE6k@Zd1z1@~%c$k^_-bBg`@ajUo_`%l-`mT6G|Ddi+x642b6wr+>>b_#O>dPARwX zhr=!M>bhe_+~UCD7D)x5f!vvcdqsc(Jk;Zm;f(l-DA002ovPDHLkV1fvK_Ba3l literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lickitung/icon_gba.png b/graphics/pokemon/lickitung/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7804afa50759e38fbe4fc30330fc59439ff91b GIT binary patch literal 368 zcmV-$0gwKPP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H?ny*JR5*?0k}+<>FbqX?0_i5XLJpOIT3n9irek$6kTH{Lqf4d; z*{GogLnVqFBZvbK=c(j z&RS4_HIRePT0v-yRiGpqaIlIHZ@}UZMK9q7PQyHvR{O3?Ow;)jmIiD}X?g{BcK+!9 z_j|YWz`o7@`#8DwbEeRNOhuS2=9mc3Fg>@;MGtgp%_HJGz=3t$p>9`D3%XjUf;izY z-j%{ffKgwU2WkK!qvX(paYLMkS#@cCtTD!)BX54#OZ@8nuxT;B?8gl$F{}$s-EoNk O0000Ql(5^D{FN$4UmBxI!bAVNZ11rpSY zdvk5Td1DnkwuU7^7+M4%z+)SMlY%IT+Mb}~JiaS2Nz27yEZ+DW1wz4BPf-QvrwEJC+k2bHA5f031x zH}7lSsl&dGaPj5(_HTeV4~fD}NSZNF0J?x>ljnmdOOb%ZO1?%HvR=y?k?5ZQGlL|BPxV$+s#PfL6aqCN-_NfCTTKd;xL? zpx+n>jDi{#pWOt4m2RcruNI}q&m!*Rh0_J_q4OG_>r55;)CAxegU10Go$_vw15R>` zek3tMr_cgCUMXOQ=@i=6Y=F1{v^QnJqpv`w8xYuW*iUhd=gKJ4ju;TY@jT#28D
111- z8y8Bo!TVstjDU5Z>Tu)rEMIjVOsYo?h_UR^Th?9BuYbB9lsw%J|E2r|Q%KaBE7T(% P00000NkvXXu0mjfxGDY9 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lileep/back_gba.png b/graphics/pokemon/lileep/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..75360209100d616329c60aec196b372a09816c19 GIT binary patch literal 679 zcmV;Y0$BZtP)Kl(BBxFc5}0G&O+?1&0Wk-8V2j1juN1sRj-9P@qHM zh1O^T2~VSp6rnahL_5W!Jrw5PSIT4<=-}K@QYy)|0(8zl3Azvee|MzB*t`Bq0MpjG z5n_^_c+a!^ZASHz3rMu0xD-~ccdliWaL<_NF>0EM%USijc#D8p)R5lrU@ zm{S1cz+|q+;_(b%sJllnnBalhJ~$*T48Nh>5KNdUf0nwQEut$fV3JF~R*R}em(GBE)Cq&Z%?xnPlI7h@Tv&{@6hEo2? z9^|cCD-}KC`5+Ki>S7?>N}~Ei9H{9EkO^@mZ&zIcq{5VMWIhj|$iTS~aNX`_4}@zK z(Y3)-PG5IDzLKjFK#MP$2wMS?^n0({rHsB(ATC`k?yW0)fT^rAi0&Z0qr*E|gceef^;{HSz%7*mJs| zJ+;&s8_M=N+x%*;U%F*$9eZ%?z@>~@>umG%2H>8y?Z7B}19;bYy#Ndi{$I^|2IT+% N002ovPDHLkV1oYtGE)Em literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lileep/icon_gba.png b/graphics/pokemon/lileep/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b875a53a733b97f0c2377ac2cf23cdeb75936d28 GIT binary patch literal 361 zcmV-v0ha!WP)DV$@lCcWHKn#ZO37VI3wvXZ{6rr;qx;Qu#9fe!6bg+wk z0DXw=Lg^r;hC*x=yh~k*n`X<;fB)q!pE18yQ1x1hl|(Vegq|Tnk$vPWfHD_h&qDR? zz6!-TrYIYVoq@5rP1w2&79q^N41t94DlWscLOoKmHhHE6$kw5LoQQs%3AUnza(Psi z;CxEQ+A&K@edf~ZO;DKst=@+ju=>+0iqxJuVAwi^BijMv?N&Nqyv@K17?(jUFm)U2 zuEd6r?K=bH35>s8ShT?SlR=XAfjJBS=7W#)3qA@h4Cmtkg1(x04(PL400000NkvXX Hu0mjf4F#fI literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lileep/normal_gba.pal b/graphics/pokemon/lileep/normal_gba.pal new file mode 100644 index 0000000000..a739bf847b --- /dev/null +++ b/graphics/pokemon/lileep/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 213 139 +230 164 222 +180 115 172 +139 65 123 +98 24 74 +255 172 106 +238 123 57 +189 98 16 +255 246 123 +255 222 41 +230 172 0 +213 213 213 +172 172 180 +115 115 115 +0 0 0 diff --git a/graphics/pokemon/lileep/shiny_gba.pal b/graphics/pokemon/lileep/shiny_gba.pal new file mode 100644 index 0000000000..6402a8688c --- /dev/null +++ b/graphics/pokemon/lileep/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 213 139 +148 238 205 +115 205 172 +82 172 139 +32 123 90 +255 172 106 +238 123 57 +189 98 16 +255 246 123 +255 222 41 +230 172 0 +213 213 213 +172 172 180 +115 115 115 +41 41 57 diff --git a/graphics/pokemon/linoone/anim_front_gba.png b/graphics/pokemon/linoone/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e95180de065bfc84096a39f9ef675f60f2cc70fc GIT binary patch literal 1087 zcmV-F1i<@=P)()wKWi_Bm36dyC%xthE2d&HwKIeAZ!b00001 zbW%=J06^y0W&i*Ky-7qtR9J=WmO)S3FcinrA*DSMb{Z$o9+PdK7Iwc`!hq@tBpoC~0azUyNKboG`Ds_CR&_I!jLu&z7 zt&ybVax}=tq;l9TfNvRFF2@OlK-7HXBS`1u=^MbSj$YlN384P+vM6NQE%Zfp-=XmDT>vj_8>eF^mP_W=pJVwT+L^=b8U zehISu>sM)=FZA+_KfE*4;)_y$xI?+`Z2&>JTIBd7UhX$#oFNd?AWhTj1S_rmjGo=5 z=?ykc5ZgA;9yf6ul=^+0?hTXV+VgJ3EUoY0FLeZNY7LsB>wT~JbNc{Z>lXI$ty|pH z?69owv3~KtKihQA$DffyFDhBMb+5TY|6g_G$MKO9803sPZZ@npx!genklAmgq7Ef( zdoGg(WOU%nQ-|{tvhM`cCpXZ5&%1yf`|#m$7a+bkfp3N!#D5|r77ya2@{$k28>dl4w!0UFvmU_!_^%b(gd1D`|2SZ;0Lz2OQkXm9{f z0QM)br-9?A`gl+RQUmsL?jk@Vy93KHM3CGXgP6cgQUY}Wqm`x%b%`00)&_jI$(%AFNaY0 zzgz>xltsW07$ERP!>boVP)0&Cfvf@skdWd1D8#q|m;qyXhf)kVYhXKIV2qlq2^gS>Sw*h|j5N`5RW}31 zLI;5Ke&YlB8Zd$+2m;IzTM@+w7+AIWU>L_||MSB?u0MIrEyWQA-?jh%002ovPDHLk FV1l*y`C$M6 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/linoone/back_gba.png b/graphics/pokemon/linoone/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc8fad388d38e7751158cf7dbbd5c8b648f92b3 GIT binary patch literal 546 zcmV+-0^R+IP)()wKWi_Bm36dyC%xthE2d&HwKIeAZ!b00001 zbW%=J06^y0W&i*Iph-kQR7i>Kld(?1P!xt623& zArjvr->iRMnRP8tI<;+QeVlYub)K|)Fd?||8A}5U;8_FU0B7V|mbLalYhcL*Bx5PT z0k}E-4U}*LYQ7bKd~cEgP{FHq-t#6Kfb|8?4?WM_0HouYCqRIXkq4Zw04)k=15f|~ zZ)jO*0XFDc#s>UI=6H4T8$f{^02{z!Frxq{x%q}T#?>W&5Hd?v4fqk_+Y~S^3dC_t z0EU2|RnQPc5dqi?0mFO%0qQ*d5-@8dfqa7k%yCK!Ah>wU2C%^aBFqtjI|?p`0d(D5 kKvOsxj-jjXX|MmI9~^`0S!wWy^Z)<=07*qoM6N<$g3#vbn*aa+ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/linoone/icon_gba.png b/graphics/pokemon/linoone/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0ea0caca5d6a95f3a3fa78a293470c2ddddd4a GIT binary patch literal 390 zcmV;10eSw3P)DV$@(yd3e-8rTW9%Pln#x`ncoxAMwrmyX)sj=TguaCBmJy-ZWEFyn zBUVpH1zidho)Hb;90)+Xy$q;J+@fjsU_oI#$b+U89;KA?l6z|uBK5}*@W%BtQOiCA z3J&gnJ=9?Zhn<$P!k+i@ru4hI4x8m#d>qH2?panNhoW~8`>Xmj2OnTL;(R0y1V%U? ziG$FtZxaV*_b+-&lQ;x02D*3<55~g6!Gn2Y;xL1u=P$qzpdtDQU@{*8OqF~DFnC_B k;lboS92lAPzP|hT00cmMT_)T0AOHXW07*qoM6N<$f{WLvOaK4? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/linoone/normal_gba.pal b/graphics/pokemon/linoone/normal_gba.pal new file mode 100644 index 0000000000..368b6ac6f3 --- /dev/null +++ b/graphics/pokemon/linoone/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 172 115 +65 57 32 +139 98 65 +172 139 115 +205 172 139 +230 213 197 +0 0 0 +131 115 90 +197 180 148 +222 213 180 +255 246 246 +57 82 131 +123 139 222 +255 172 180 +255 197 205 +255 238 255 diff --git a/graphics/pokemon/linoone/shiny_gba.pal b/graphics/pokemon/linoone/shiny_gba.pal new file mode 100644 index 0000000000..7988bb21cd --- /dev/null +++ b/graphics/pokemon/linoone/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 172 115 +65 57 32 +197 98 65 +222 131 74 +238 164 74 +255 238 197 +0 0 0 +131 115 90 +197 180 148 +222 213 180 +255 246 246 +189 139 49 +255 205 106 +255 172 180 +255 197 205 +255 238 255 diff --git a/graphics/pokemon/lombre/anim_front_gba.png b/graphics/pokemon/lombre/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d1aa1e35176811ee85ca639f410b89f913b56a39 GIT binary patch literal 1032 zcmV+j1o!)iP)f*5niGPHazX24a3``aVu~xD(bgL8} zkj<))kytPi=v>huo6qXffvR~51FE1yrfxLy(v2nm3-1gq3VD|aB!;}H)%*CpckkZa zePdZ``zI!I&No;20qxjK$Ql~L2z;n#prot}A?!`4$5LBv`2NDals}COVb`@UR{@=R zR$c>C4mN2Dz&@A&9pEijpg0X|)mY)J3Pb`P33TdHnPVq~h<7N!hDj;C0zO@d zsuSU6X&8nE;PT*PFXOE+45%8g4e9_ygx^zu)xjdY3Qh(gnV|usUjckXKRGZAXDwF% zN~xS22c~cuIJ!&DDZgd;O6Im621%CCgxF-_g;Mk)&}?owVhBk@uc8Se`nxzWu_=V* zBo0nY;tUJ`6FW~d5C}sKCkY+{^phPC(VY+xFDm#LKQ-iVFtUf8lCqsp0K??g$kWG$ zkwsvJfR)Y3;`k?(A=>my+(@s?aVnNWUTs5%K(-T`h`CE43v{BHwESyLYx20f~ixXMbc^vhHg4+Sc|T88cn9zs%mMYq`o_)b%RDE~Gj_;*AM7C`(x& zF*6YM7;g|wOim4eDz$_ts@aSN3VlgxVlts~6bi3FeN$F5I)^NCynj3$0>}_D--*Rg zAptbN=IuVdIU~$L%Q4P{5FI%63;@ese-($@8YlpW>)hq;G(NnVLv8}HG)te)dDRp_ zERmMbReCglM4CB5j+F_p?qqH%#Q3N*0-w1C>I+kfDR(1hIH`{jpkA%%bowQ9 zpa72sIQpXqpv-ZZR3}@!9fdx=oVt@_t5Lpa4T60ts0^5+@#nbR%Al>87|M4zQ^m+2 zF&GMrI0}5Dza@6HL^0`q){eA(7zBb=Agmn+T0bOD#efQd{wUD;A(ny+(e7jNQKQS> zQ~H4k6b*iNQESOy$1Xn;mPID~#c0kTp*Fa(0!tRFUdF)Fwf`r+Yz z??&R0`e6eJe)AEfAG#0sfB!}!^+R{z|FwSj`}PCrAh!G3FX##Y0000Kl)Y|)FcgKIE#0t$nj-NqMRKY^7wyK6d}n=f|{1}JO?(s15Y2)W=i-6{TbWylVg&RXS$QmD3llCpUT!RRJs`b6`-w+vcEs^)C@; z?(ZT+peONR^egK6IOB`~SfSHCr^HvndqP=B(;@6*#EHa|g7I&c07=Luvo>W>0Kkwu zF*aKPuJa?MG1_du20SU3#q9AIo{&G^8{jSvMNB}(_IW4*fd>n)JP&OG0XCKh5`SGk XS=r;C>vGO-00000NkvXXu0mjfQhfMD literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lombre/icon_gba.png b/graphics/pokemon/lombre/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e661cca8948159df7beca86d7fc117c6a523dd GIT binary patch literal 319 zcmV-F0l@x=P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hy-7qtR5*>@k}(d#FbqX=g7#7_BU$oSve1rY!xPpN+^W|nQuL|XQd2v&ed4KS#Bcn9c)#xjo?YyogY0ka`PV3UE3 z4K#x?z%l^h<1x)JlmjV}o=J;U>vP&XmVi>zvFk{J+PS^o3E(YUO9z*!zhX6nN@dO+2r>%Ai R1`q%M002ovPDHLkV1m>XhN=Jn literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lombre/normal_gba.pal b/graphics/pokemon/lombre/normal_gba.pal new file mode 100644 index 0000000000..69f944a222 --- /dev/null +++ b/graphics/pokemon/lombre/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +98 106 65 +90 148 106 +148 74 57 +131 197 148 +189 230 180 +222 255 197 +205 74 49 +131 148 65 +139 180 49 +172 213 57 +255 115 65 +205 246 82 +255 255 255 +197 197 205 +255 8 57 diff --git a/graphics/pokemon/lombre/shiny_gba.pal b/graphics/pokemon/lombre/shiny_gba.pal new file mode 100644 index 0000000000..d4458373af --- /dev/null +++ b/graphics/pokemon/lombre/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 197 205 +98 106 65 +90 148 106 +172 90 41 +172 213 57 +205 246 82 +222 255 197 +213 106 57 +65 131 139 +90 156 164 +106 172 180 +255 172 90 +148 197 205 +255 255 255 +197 197 205 +255 8 57 diff --git a/graphics/pokemon/lotad/anim_front_gba.png b/graphics/pokemon/lotad/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b2eabc2128cb90cafd8aa31ce4a8b7cd95df41d9 GIT binary patch literal 740 zcmVXyA$v+Q!XODa{HCBIe)4y-#UH7B4x3@!_wYn22divgpH?k zwFcj*g#Rw8lO?OynWn7GE;sG`Eyj=f_;#Fnjo!D z5G%DDruOp+c*;<@+IGDWOU@Y^XXbI2duNA3kZoxxwJ(;aoIwmEaA|*8dPc-9Si+HnxOV1n&2K z7_LVf4^HOJGGkyYYfV)J@N&lDiJIN9G&S46j?N7f4qnI$)vy&& ze4Zkuk32UROSoO=k~4g5(g&D;U;zQ=6aX5j1YiXWDvAikjnt9IRv$!UmuK1XX{2HO z*G6pngR|SmhzI++2yyHH!jNX}m(Sg^c^KXj;{7}AJLAFNPI$MO?MDuq02xKmz3$=f z-HKl0R<3FcgO~FodZWE9ztdQzwjb03ba;;^(Pd5^Sm5 zDBZdsVQ~d6P^s_PiDQDw1HGA1f0875)IY8isP5pBF~<2H3gN;faBe}4p7DsY0r%-O|RQ!B$Qc)aRID1RHTf0Oc`Ni+=gD!P;7=C>4LZm z-r%LOE$8`OMnlv^&!IwLL)Xl8@j8rvaF4<0Nyc{QusP2m2q})JpyC|UfvuUVIp{%H zhI9nj!0)VLK?Q>XvXL-dLYR;OIwKNR+6%a3Hvt*t`yiP91arZHQ4a!N%9Wo`)XZIV z$GIvZVP!gQ@MYoK?cov*RS9MsKUjLY2^)xnh6Ae|x5v^&m_|V8fQJwQYR9c@Fv1uv zAQq;)f(9H%K^exWOZ-P^0a`h3wP0&EWE6lA8uX_Zjv|weUy^G>wO?LP3;I^-=bT&{ zruD|L+)4WVW+NeaYCEGY3Q!08av2Gewliv}%)y?=JefU{K|KuZ`#t6pd+H;6-E^>) ig!a@6;~5|IAL zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*HnMp)JR5*?8QZWv~Fbwny+8@D^&Ryy`KkEZB@FpZS2B$-^#w4m# zUqLW2Ako|IWc$w25&Z#FbYF-X h)K-V*cVC2W;sFZ8gi44`eyjih002ovPDHLkV1l(nc18dI literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lotad/normal_gba.pal b/graphics/pokemon/lotad/normal_gba.pal new file mode 100644 index 0000000000..efb988ea0e --- /dev/null +++ b/graphics/pokemon/lotad/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +255 213 74 +213 172 57 +139 115 49 +49 65 90 +123 213 74 +98 189 49 +74 172 41 +74 139 41 +49 74 32 +172 255 123 +148 180 222 +82 139 205 +49 115 148 +255 255 255 +16 16 16 diff --git a/graphics/pokemon/lotad/shiny_gba.pal b/graphics/pokemon/lotad/shiny_gba.pal new file mode 100644 index 0000000000..36f2715909 --- /dev/null +++ b/graphics/pokemon/lotad/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +255 213 74 +213 172 57 +139 115 49 +49 65 90 +148 197 205 +106 172 180 +90 156 164 +65 131 139 +24 82 98 +172 255 123 +213 139 156 +180 106 123 +148 74 90 +255 255 255 +16 16 16 diff --git a/graphics/pokemon/loudred/anim_front_gba.png b/graphics/pokemon/loudred/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..13fe39e53aacb6dc76e7e86baa31569b6c6eb257 GIT binary patch literal 1328 zcmV-01<(44P)3(_-*t>zD?TLv3%6ObW)l&RhN3 zeXA&^LRvB>oB6z%**Bv%UqyLC4ULV3e#29pBp zii%{ERRi$JPXGWEe3`HS@=z?RB0&0gD2NbXhx=vQ708!FOWuExp%^~(rx2a1r1i-= zBVgaQ2*_!wR7>*lMQH_a-MjA8=^89cE!a^YeUYOi=Gm6BX$hd9My^v~>z=N`0M;Cb z-9*_I3h)x7%YCBPW1q2_?$>-LdH-car}oY=C?%aE_)E2ZugCBI!21vH>VOy;t5S9d^lNRN_kZF1ytDhTjyC0- zSt1xCevN?h4%uEEF*4Q)1a|G~e!nvXmY;-MJpyj^?oWU!KYBMD!VE5 zBdcQ>8H)i|TWn%RX#Kj8O8xMO92dyM(Pabd_+<_ zKb-qXdKgke8W=@33uebsJnml(3XHu^Gdtc#wDng5%jtdU@n8{fibt72?17sZS7^-Q zr9~{Y;QU+rH|(uMQT`_qMSHD8fj2>-cmXh9qNqZm*rZ`zAyG<{WCgD~UqW$?L`klD zc}lT5(J-<^p_OB!8qzSbM7hi)4HK6rGYxY~0J20GYZzyfG|bCD!$c*@dqTsIh-uB$ zFeFimP0}!on(8=@o{>Z$4I@dEzZ;nyKF(4fYnZ4+X`O73{LG~Q^CU`(1;@YoQS6O* z66NehlQGw|Mei{xQG(rHJUbZ%`wj$9jlAk3eNjxG^5IB}0P4}9q6i=US?roEF>NLlOi81ea`xC^C=|l0sZ034q|XV*myK3V|>T_I#`e zk~IdES{)iGks+oJM5|1bbKBlXL7{?%_e9QtlNUJ!7qsagUy(x4p-EkXi}X|TNCuSI mh@^P>)L*>GUn2wlWA+cX#q>KZBYNHd0000Klf7=+Fc8NDNSgf)WIP%Pd?YjqkW^$1L@OS(xt*I7 zS~K?fvg;j;%0@@_?nsH00~B4l0GZR=&cHnazl10k zpb|YvO0QY$-BH~mGx0&oh50Ar!N$^c+S6oID| zU;~gV1nT8V0H&}(G6!u9fDVJqQ8UhoUWiLz&5M&v0Ul5SO@|CgGHDb*AO#vnmwSKK zbiUBdL^0>oy|d^5dh)ko+s%brEK*nFI|Dv{)k+f&Ly3`Joq#@}CzMdD&}?4qMyDWs z1w?{b0NkU|uM+SSGd^7$&~<(hT?Q^9=OY8TxvMXWUo!CX%>kC;52BK40 zUj^uTts5d7@SQWzq_h1V2Ud9T$HA3RP5}Ts7_}sKDe(P;o2XZS7l^I%_<2^~`-wtiCxFxbgDJCtGVG15pW zNhC`DI{*_vOS34VHud2cfQ?s(dpI=5xA4chIt2`$d(h1aNUV_(VpBK3r~QNd0ky&+ UC(N_DV$@(mRgAFc1b{pTJxuG!$$zY2#u&6co4uiKFBKNV7$# zHiZk$gtSTPAcaWKV8SX)oK#ybxcoH_+xmoftur}|f=0EW4+@t0BpTh9O^o(_`K^Kq zgT@4bXks*jiYX!vX4E?V#FztlU6=Y}iri9OcUUgg$QLP9O1o`l@Yz$S`Id+(?vctl z_mfs<9#U;=?x+F|YHMwt0r1`nec9PQ;Vn|#h|)bAIfxQ}qcd_K+9l4%m<)fdh~~pU zx}$i@^FP3dF&No_G0&g_6AJ3Uu%Ox=9$}!n0>2RFXRh>CC+(!ArSU>J6zzuivC;^;`UMCDvEBd599Rf zFYvMGA2W=uuEN>xODl%ytst}!hBr5JfI`*y5&_FY;LS#OJqxg`=Y4156TZn-!)q&@ z0%OeczTfsd&&o2kVX@R88OCEsR7E*YT25bm;?Z@ z1b{DY4Qrf=?F=ms+amz|uri&D=}ZkKfC@4)i(H$QwW{KjW&t8L*WLmQnUNbRTAtSG zT3fx;5gjl##QRsQR(@NSN0!Pr4FuuK-xz!U3NEBnDJ4?Cqt<@@^4HhT5qd5rgbwt? zyT4DnDoSr(N;RElW2f^K9`-PN-R++L@{WDOxsXRO+BiVQs~SrU-tBgO@1uW!favJy zZ6VNWbkF(}g8T>^>U-_6>QayQU*jN{MW_IwotRABc6<1?e})8FPXXElw(2%K^#=n2 z!u~vU)=4`Evy z!>knnTukz`Pe2ewJPbq-yqEw`q)q0$i~h52&mZu1AlmKbB!mr6EU_m)o)d81q#Vhn z_w!Bx|DFK5qN zCI@A~c>{OzoR)kSvR>UT>DM>+iTj-6_W@Tx9+;cF-%GfVd_PovzHjGUaG8F04I}ai z;anXCyNEz33G{rQ0DlA&p^`lEj`buWCoVJpu!-w}fPSK#oqBbE;UnC1|1WhfD|#u- zFue1);W&yvhzdhMujd82?`7^s1AIOdsCK~pPdb3rg_WBs!$=(DVjE(iw+uWmr5dP3 zpp9(FH?c?ncXS{ippE_+0eRvI(M$k9cOCa*zjY#7t=3%{Fu}%O8NZcp#qn_mU`;d| z8i4x^cTkp6cHp9Qi05NH2^cX{a(7rbI{2qU=V$#`Bs(8obTfV+Uxoaxl*i(Qk+$WB zBWqZ@5Rh_CTZ^&u*kfR(t&Ip3#Fd@7ek9@}fEr`D$J=IXm#`2&?x#gzivfem+amvG z{qR{o{2%&Z-2NZa5AIHVru!%K!{)Z=jsb{X~d%sv~SP8%;IO9jZ@KB;^4CqIFOH zJyl?^Gp7ObxOI;qekiCKw=R?NfPg^WqkeE5RlwXi0JeVA57}C=z-l%DjTBHupw*$T z8H$axen7JyIuEi#)y;P2=m!KUor>&~sIwC=s~=E0RpiGJFi$_2=z92QV+D5Yx%$CW z0xw4qXoOk)Kve~>Sz(f3$<9nyGqY6SZKls#_aFc5{M0|X!;DJcTqVTIXVAWWAj3@i`ehOPo^ zny@l_MmI_|&Iv4J3nNvaouMp>7AzasW}Cc-A%L$_ECv)4oWl$M!3^bfO%|)xME( zh9XI|U_LTAlIo|XIUwRL$+cp>uRIq%lIwlbAWLekMXCb;Wl9l>_CQWsl{4hK*T$65J&f89=vxIvhG+cLJ2E2w2Vou-|(h-*r!T0J0uH903^vze+{G!Wgp*0Br`q z6dH`z8DNak3OumTg;^FH>Vch+w96hdC>bzXnY`o*Gk;2m$0bk>fCmx==u4ucVD6kBb~0VoGS1q+_@V*5!r?Qk)PD7F;cak(fhfx)~?!iu-o?2x!+L% z0<3c{?MeQD#V?G3wHs@D*5Lx+!Vq`0?=TJ2NWcci{w4xyyGDEqPPf8M7~#3Lo426^ qVuuZY#b*qO?C=V&{F8j^AM_XeTUl>iD3&$=0000;M1%lai8NJv*8R6jAYX zaSY*@nVgW2@SysD!v99ccg)Rq`B^rxD=)BM`Do9e_>7IAU>5%askPS&fa)1MUHx3v IIVCg!03li+{{R30 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ludicolo/icon_gba.png b/graphics/pokemon/ludicolo/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..47490411b66daaa9688770c31074e0c6b7308ead GIT binary patch literal 379 zcmV->0fhdEP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H`AI}UR5*?0lCf&TFc60Q1oqQ(&Z4f-P>T+Qc*_f9Fr|Z^Ba`Rm z1wy&fJs|uH9&AFekuvBAi9;_kL{>4hb4h+p_wnE9B>o`y=ZePliD>_$rqk+ZIQcr( z@8_H`=ZRw0lFTd4uK-QGlbc+ic7Viexx@sW!_+2G8W9r*1V@8fJPt!eVoxkwM{lu; z$?p+SFPVGrlujN%%3((LoG!%6N8tc=*?0O1s&b2&4l-)K=Ch)_ws6R{P_U^i-D_d} z1~oeu!!-@Sr>3?XfCAgWl>f0%NmUDP=sgw&H=;Wa%wZImbvg=+)!%^$n^9nFI7;

N@V_56ofrTB002ovPDHLkV1iyAsAd2F literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ludicolo/normal_gba.pal b/graphics/pokemon/ludicolo/normal_gba.pal new file mode 100644 index 0000000000..6184143948 --- /dev/null +++ b/graphics/pokemon/ludicolo/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 148 197 +74 106 74 +106 139 90 +156 197 98 +164 238 90 +205 255 139 +246 246 148 +213 213 123 +180 180 115 +255 255 255 +205 205 222 +197 131 115 +246 164 98 +139 106 82 +213 180 74 +41 41 41 diff --git a/graphics/pokemon/ludicolo/shiny_gba.pal b/graphics/pokemon/ludicolo/shiny_gba.pal new file mode 100644 index 0000000000..442eda95ee --- /dev/null +++ b/graphics/pokemon/ludicolo/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 148 197 +49 115 106 +82 139 131 +90 156 148 +148 197 205 +164 222 222 +255 230 156 +255 213 106 +230 172 90 +255 255 255 +205 205 222 +197 131 115 +246 164 98 +164 106 82 +213 180 74 +41 41 41 diff --git a/graphics/pokemon/lugia/anim_front_gba.png b/graphics/pokemon/lugia/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..930d817329af9d48c69abf164825e8ff8da5e63e GIT binary patch literal 1699 zcmV;U23+}xP)w5D*X$#_CKZ00001 zbW%=J06^y0W&i*NAxT6*R9J@o(2uwC6JL{=^ z*eLd+gK3ey<|Poo&d-GkcJvgWrP?(Y zV`zZcYW4`A5m-C3`eTX#powdzHzbg8pv_!xMesd}$2@SLl`3G8i~E5wIZ%P@2*Sm~ zfab@54ARQmwUQeFxRQl{*ic}OT!+p`AKeQ~@Q*ig5io94Ko`J3yfAMD2>g)&N&>*< z60NyQz%tahJRC+qfQgB|mV>o`fMCV34-v)(0?OEvfGwsJm}_&&vkmfa2IrYt{;ai3kUpgfkq1Ways zTcPVB+@no%Av}x+S0%oUH1b@pF8A45n?X zNxUK8Sx{S5;rNAEh^F1!E0=-T#Nf8Jt8C5$aBOw4lb-|J+RprQv7j-|tRXecvjDU= z@YiC2E{+$@7LO9ZItXrJpnALA)i)A2Tl6^h7;Dtue^|%)UHcf;zY?%`e!N(`<^w+r z84K6R0jPygf4lh`ffr{83@MYsVZc*o5(r^SJ~r>|qW#+H*eC=Hc$UOR~Sp zkARce52ja8Ok+Tg04^$T&KoV29!R`IOZ4U#CnDp8WkyRG9C`;7yM zl2%>>Dv3l zblwt)qS{HEvMpAB$6ltyU>o( tO-hvEyvvL1Q79-;j*4VX<_T2?{{lnovizR5^0NQ{002ovPDHLkV1nxi6Wag) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lugia/back_gba.png b/graphics/pokemon/lugia/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ece7def85c9f8d454ba7ed0891b7067960ee9d64 GIT binary patch literal 783 zcmV+q1MvKbP)w5D*X$#_CKZ00001 zbW%=J06^y0W&i*JjY&j7R7i=nl)rM?KoG_$q!O5uachrGrpg2+I$UEhb{Rm#Zk-3E z$P@4eNW*xN4y_P>s*F)~?@o*W9aOmj3GGk2-?zHkTJ66qkiYeXDc*<|>S9a)Kty9^ zh+6?`y-L7P!(zCQuxF+k0pl(akqHPH=bVje35-oO93huPR_50Z;TNd0typY9v7P z*1RfOnDE3%7yxBLh>h?KfHWcc&8^=pJ#HNKhLqrmRjrwqGbAw_1E*gpiBffAGXlip zY2{@B1WLl0zGbX|PyuKAUrNV=^8tVGmb4gGJzek zp6MpezhT^YNaBxU0MdXx;mv36Q-Wax>k|MnhFf#{^M{WmFhRB?XjuW37#TLhT1P5N=&#lLfL3Jhb|1uD+w=s@@cyu2NNAc2jJ zV~;XN0yb+Mx*godsje`ONU)D*0zcYF$1QgAnfgk>3{qDe8vJNQ3X47Vw}MhQOEe@; zRc}Opp9)}tWeNBmL#{StFC#!(30id2@IebGF3&9`U`|if2yeB8`<&tu2qoYtnPI4b zn`cr&v*m>;K-Ji4i;Q85)aa0k7;2R@b_alYzMMUtPm&y*07WYi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IL`g(JR5*>@lCf^XFbqWX1r}262`cRoB<}M6|Ak@iMr`e6kCf#k z1-cg{U_?AxM{RFz>FuW-A;IsFNvA5 z+KXVFOGFf#lc%vdw9X&* z*0Iyqghhef=mQf3fql^5M6d!IHlUxs^dkgzd{_yZ2Ka=HbV?YWum=dmyud~rR5)Qn wC^VTD*h`^B?;iaroQ1pV+kZB!Z}VU48*ss_&-pC%#sB~S07*qoM6N<$f`01MWdHyG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lugia/normal_gba.pal b/graphics/pokemon/lugia/normal_gba.pal new file mode 100644 index 0000000000..483157770a --- /dev/null +++ b/graphics/pokemon/lugia/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 197 +255 255 255 +222 222 230 +189 189 197 +156 156 180 +98 98 98 +123 164 246 +90 115 255 +0 98 189 +0 65 131 +238 90 0 +156 65 0 +156 156 180 +98 98 98 +16 16 16 +16 16 16 diff --git a/graphics/pokemon/lugia/shiny_gba.pal b/graphics/pokemon/lugia/shiny_gba.pal new file mode 100644 index 0000000000..42db26696e --- /dev/null +++ b/graphics/pokemon/lugia/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 197 +255 255 255 +213 230 255 +172 197 230 +131 156 197 +74 90 139 +255 139 172 +246 106 148 +205 74 123 +106 65 82 +238 90 0 +156 65 0 +246 139 139 +222 90 98 +148 32 41 +16 16 16 diff --git a/graphics/pokemon/lunatone/anim_front_gba.png b/graphics/pokemon/lunatone/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..75b483b423b495638c99910d8e382b22dc9a7c2f GIT binary patch literal 1015 zcmV&?;kugb~E2 zl(A!jVppzCtH2L=Ib2AoBLf_`GiQVM)OQA@C|20;Y{AzRx+jZHwp zwKPSAsf-GTB3lR3qZHOLWf?E?i0+(ZlcPPOV7Tmhy!R{1vLC5QFmzqN?uwHyAF_9_ zMoEBv-*Y?Jr;E?0>5vu$(hm`CW$!OOo*oXOf?&z5gWsD>r!vA}DMD>L2IusAJeD~? zcNCWpf=iQC{1ntsg_4K^+y`Oas4WN}Uc8zf?Qa zZrbPCcU%PSJ#MA(B(D!ZK~9ez=w$mQDAh- zKMr`Xtq^4vaz?TIt8l(5ghmv4To$w&;T1%=dYYr#%*pwomm|tmL9K~L>>+72VvQ&> z9aZx+Ke*T~3Q^|pgF=+!S%KyUp7X~Xeo*{j=LgLnc79O&VdaOMKdk(a^M{omG=JFn lA=D*U`9bl=f*<~i{RVnA#3(Sdr@H_E002ovPDHLkV1iuw%2ogX literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lunatone/back_gba.png b/graphics/pokemon/lunatone/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3f2247f8ea8a40226352f73216cf15e43c0ade1e GIT binary patch literal 719 zcmV;=0x4lreA9KorM4RCo@N_yA;JtdI{eqU4@!GIhX?!URZ8 z8zx-Iid&W}w7E=lYi?rh#20{1z*p#3z|9IsF?Z+l`R;nz5l^wA=>7bE|M%`)Jn#RD z@)%eg=X=tA(Q6_u-LDUu^ur)Pr9-6T$;W|=_#WY_Gy>p+ooD(3ndZT&n82ybLmLpmLdeXl&^94v5EHr~mv3yKSp`0Wv#<5dhP;1k z0PlKgSHjP`s=gr?3xjC76z-$Cs_uSmF5%IM8<^JB?f2gs0#AD?>d?flr_l_kpqiLF5_$2C$~|x`04VeAExHT$GQE$#Ma3PH8Ct z7^n*~7j0gb6aHgdOAlFhp{8H>pjI3htDX0t08J8org%) zY>&*3r2Dpu1j2-Uw||44x6pwJ&oZ3^o45QQj=xfJZ99I!iYEX7002ovPDHLkV1hHL BKz0BC literal 0 HcmV?d00001 diff --git a/graphics/pokemon/lunatone/icon_gba.png b/graphics/pokemon/lunatone/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..27a42ae412d8d91c98634f53bb6f2ec122f71ab1 GIT binary patch literal 261 zcmV+g0s8)lP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*HgGod|R5*>@(J=~yKnw-YIe~+vFqgLcu$Z%KDFo&U9zbNb9GE3; znV$m)nl6u@G(V-=kA1?fl_aZb_0Yzm>Lb?X5HS>nj8a#BlWn#}0Q)hhF!WXUN0;vl zbkZh>+mGW7EDrW@0yYN&IPky0vL%+VKWZ*(Ut{|{v>!l);hF89F=2pelA_SKYHV!c{oivR!s000000000002mk;m43d200001 zbW%=J06^y0W&i*IUP(kjR9J=Wmc35HKoEq_egT7!taJ#FEcaI!9wUWqQ6YqK7FCMK zx8ez$9s#dOmDb!(+8Lv`y=nK;?52Qx= zKml(c7Wb$lu*ZO`1l)|41CzWDZVL!xlYIWLHR}kNU(`WA%5yKHK@OGCG9H={kKi2S z&{*i8Ht|Ek8B{(j0NE})rrAQkMBoJhs_K0QgCDCjZEH9Xgn?`cC?WvYRO++@6uiUP zf&$se>`4dTWajmxq@<+Fb$`83KaMm$`0EajftNqtmRN*%zEH-A+O4St$A>I_NOBdc zC7|s6W8(Or${_$aKIA@u@Z-O0yH)An954v*zjVNWXu*JDDL$xMZs0V}yq=Vld*b^BU?e8!R>zhDN3XE)M-oX4Injv*eM zZ!a(8J7gfh_Fyd=XBSI1Lmd0TWrBOpF($p1VZ3U~pt47m%lCTTj{moE4!+&~{pq_~ zYdwvg^3Pm*-sZ+k>uB*~Gg$8*m?6!*W!+9Or`uN)7tEBry=`7>MLH3pg0kml!VC(jYM7`CG-DJ`N4@M#ibU_Z>B_GwN+rd2}${#AEj_;k=ixH%apB zNHjxx$JuUjC;7JTd}xBIFVdQ&MBb@0PuN@FaQ7m literal 0 HcmV?d00001 diff --git a/graphics/pokemon/luvdisc/icon_gba.png b/graphics/pokemon/luvdisc/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..980b7349242e33821dd3da67aef9115a44ce6cc2 GIT binary patch literal 281 zcmV+!0p|XRP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hmq|oHR5*?8k}(d0Fc1Xq1;=CD<-4i8NYK;dE3QGZBGK6e;8g5J zNacsU%+M{ z5%5`ndA5H}*?9Qo{fogejSQ-Ma`S^qnjbt{nSS#_bciD1iiZlr;Nu6KX*#5z;P8We fIkpI}oa}0L#L!w&i%Szs00000NkvXXu0mjf+^2hK literal 0 HcmV?d00001 diff --git a/graphics/pokemon/luvdisc/normal_gba.pal b/graphics/pokemon/luvdisc/normal_gba.pal new file mode 100644 index 0000000000..c443e06337 --- /dev/null +++ b/graphics/pokemon/luvdisc/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 205 148 +115 57 49 +164 106 82 +255 255 255 +222 205 230 +230 156 131 +205 148 148 +255 164 123 +246 213 148 +90 98 189 +90 98 139 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/luvdisc/shiny_gba.pal b/graphics/pokemon/luvdisc/shiny_gba.pal new file mode 100644 index 0000000000..b1df53235b --- /dev/null +++ b/graphics/pokemon/luvdisc/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 205 148 +115 57 49 +164 106 82 +255 255 255 +222 205 230 +246 197 49 +246 172 16 +255 230 82 +255 255 131 +90 98 189 +90 98 139 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/machamp/anim_front_gba.png b/graphics/pokemon/machamp/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..bf4b640c88ac7d80181cba46b7376db3264a2e7b GIT binary patch literal 1350 zcmV-M1-bf(P)K;|<55lh)(md*0pbc(XtQ1yV*E$(i@f^LyWX zGyVpHe`V-xb9Vh4y}I5E$5onFt1w5eW*hOSn5vSNvu|Eo)!v4V7jv02Onw%!dO_Cf9qEr8P_O6a>e#n0URopbg}m>bJtt!odDvJ^v&th53yDc zEY?=cyr2r%t}sPP|9Coj^vfP=N6N;SV7;J?$}5{Hvi7kaKR(~%FTP4il{ulzuK0pV zHP3QOUw>Rs{oUT^;5Z|NSwap}5lsLvl&9lI09<}M+CMnSYsEAdfK)f39K=tv@y@8A z(ewTNvlGR>sOQMB2IOfrezx-wmM8wx6TH2l6=3iN|7xAm_{sjx2M0&~_vD0XCpmNO z0KlnAXGG6m{I>7^IDeZo7UVgdscJzX7-5ZyMxXrf?)?1x?V&A*ozoTDuFZi5mjd|t z$@hqVlT^s2onf|qr8F>)7mW|TMEvYzDga~Hgj$Y33!NQ%fA*Q1b{rbt(|VMHyK#cy zc?syBgd$UAMlZa7$6NuR+y1hZAksJvig6*=VDpyd`Fb>^1(l zZAd8>)DRccK+Q&Uj6Y)=X(i}Fm#QI+D9%ES1EB@LYaXJsR3!*B=!F?SQ}+RJYK1^I z8+r-g;CC+yN|=y&!P=Y(#XSHdl9@`5!cbThK>s5V6BTCI9R=Y@ z0DW0UM7JqxKbtGs5bdC(@SQOe&+Y(%oI|F~@06ub=Qti4C#w?n*KdV>>s}8+OrRkt znL|X0YjSn3b_=@w3=nfQ&6xcAH^wYU!oKmZv(XGlt%EuW#(R=`9)dFPy>9 z;e>2{Z+j#D`|$sK9REXn=^y@T-1-L$yCoj_2TrS>ZUY(@sf@rs@HCs|yo^Wb^s0LZ z`~$+-G`(IX$jTL9CY|EYiY6Z_B`KtOlkkN^Mx07*qo IM6N<$g1vZ%8vp%OUKvRzM>8&}0?V(T#HOIrU{OND3w==N#1d;n#@xxxP zx5h+Eq60u$DNeArX)|mvvEBx9nzMknBKCa2XKSs$*#=Ze3K-b-ABu{2u<@n|5C8&9 zz5V^Z$n$SOAh!C`mI5Dz77#g6dcnkAtI7guudYPSS~aoh0GRPluAW;hu*A#9O`yv_ zX#rCKNVy9XNOJ}jvH~Febn&WHLzk$OV@?%wG(3Q`_wl?9s5FtO*Ns>K#kQi}@xizW z7`9suy>1*Md=>s9`f?mMfz=U!l*9a5f;tm@-w(sL2WQPeF%X{))o4yo0Y06Fdrukw z&smO64QK_45WZh8%`Kp~{djO%02UV5-mg4w7;YGlhzkG>xG%)cW#0i5E5uY7NB}N{ zcy=;l%WwT&wIxWI6=-vu?~0wH4`m>3CuM77g{t?y$LVUhQ!WfKoaTzYgCwfuaWH6@a9J;C1<8+5(VB;T&)= zDS>Df1iO9<;5d=ySCPx2k`S#F9UG^Nmj z(%bZdkf{_&vjhz&r5h=6Nl2#{i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I97#k$R5*>@(mQU$FboD@pFlz`(4qI}4GL&+)|^<1mW-z9rJHT3 zLpq6OE&8Qo>rkL5Cy9V5`o~vQf4g)nF5_6~yJ0!xQr?eK{ZYq!kOsDRxzrpLB6j)n ziGwi)qT(>fsDY4}03$U)8ibr2d?GUA@+6^l{uKd-^>K~w?(59}Oxq^u?(jwcw5@6J zd^SMVubVO@<^*hQTsQUUYArCcG_?0fbE8cuEmP;6LO+fJZ4J#+m#oA2nLPv*n5TKh z9!c*{FQF|m>K!vR-F{cD?G!-K$l(pm^)Y9)M*6=h|C9(iz;q(00Mjml3NVYH0!$Xf zB^VJ@f)PO_m_^V5hF3uc7!g!}Nh0V0j0pN=Fv>oGsea_+8{hy)+<;Jci~s-t07*qo IM6N<$g4^G;RsaA1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/machamp/normal_gba.pal b/graphics/pokemon/machamp/normal_gba.pal new file mode 100644 index 0000000000..b3c4a313bc --- /dev/null +++ b/graphics/pokemon/machamp/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +238 246 115 +197 205 74 +164 172 41 +115 98 0 +255 57 57 +156 0 0 +82 82 82 +255 0 255 +213 213 213 +205 246 213 +172 213 180 +98 164 98 +49 90 65 +16 16 16 diff --git a/graphics/pokemon/machamp/shiny_gba.pal b/graphics/pokemon/machamp/shiny_gba.pal new file mode 100644 index 0000000000..6e7cc549c2 --- /dev/null +++ b/graphics/pokemon/machamp/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +238 246 115 +197 205 74 +164 172 41 +115 98 0 +255 57 57 +156 0 0 +82 82 82 +255 0 255 +213 213 213 +180 197 131 +139 156 90 +98 115 49 +57 74 8 +16 16 16 diff --git a/graphics/pokemon/machoke/anim_front_gba.png b/graphics/pokemon/machoke/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..45744a87130cc21a4e84a2eb60d890106dbd05ca GIT binary patch literal 1255 zcmV00001 zbW%=J06^y0W&i*LWl2OqR9J=WmqBmcL=eY)2qzj_If4j>;+!KPK0)++;PjB8H>!LP zk_tE#(FnnQ}b|8YehtT*3zXR^P>z7fWg55xItU~dvf;bgiRh$r#%6~Og0oVFM1fOvA3 z%T;zCz;(o{fvaD_4iKwi0Epv{Gv*bEDowN5j1;pTwR7@kl@jG|GPh>LzL})YkCK$0 zZ2`zef)q*q^S4QoKeqr07pRgMfHeQ(Ex|3^ zm!hU20MqG@7pRa@wi26F#Qv! zS_hXI@>DAR{Ne35G62r{fY%(HKR~8W9^MW=G62$(^F9!qpu|XGGMO4IasbcVw}3Q8 z8&i}cfM*l{rIj)*apN2o5~&N4Yyp%?Imhk!r!z^iER|{jz{%P0#w3qgdmFU{sBzNt zZY8O}ZIZffc?DpPQRvdNSqBWWus4EOnz}POZfb442plBZ#m`E36r9ARhv+0k{TGWXrKi7Y;B5V9KtOtpIjH2&4v$ zqXUL9o`%!i@Gjd1$76t>#!Eoh`Dq8opw|P4c6RWwC?xbr;Y^F5%G$QctpKq=ry}~m zcc<9f< z)j@w6yq-L=$%$=k+c9GR9-QIjc4S^P;zy94y6kQjYxcBM6j{Yx~5@o7t$}Z2Hv54^e z!(jwvAO^XFMA3^(3dcc^3rIa2gHgr`IcMZGa*=jLGzvE>b477e!(P~7SyzT#0pn?d zbGGMXP>!Ki?251;X>XhHR9(zQfZ&R9Jj}B8e9^X|924fyyFy!_Ze{BNos@3v2}#KB z%msXiDCjTjURsed^7Fw;G@|)x;9vTI$AOpnp=BG&-Ng(2;G3}@K{spt`U`TYT@syc RrZ)fp002ovPDHLkV1n|MTw4GD literal 0 HcmV?d00001 diff --git a/graphics/pokemon/machoke/back_gba.png b/graphics/pokemon/machoke/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c84c77cd4a6e25850a4d550ceb2dc32b23f60d GIT binary patch literal 675 zcmV;U0$lxxP)00001 zbW%=J06^y0W&i*JAxT6*R7i>Kl)rAg=&v|9|6$| z80dopAe*c%bQHRWq%vf){uFLDOLp!gS#~8h=+Z6c!Nd3C$Gh)n_j)h&pK7sKJS)$g zch3>?ku!E3XZHE8`p0wkEo08;msLMw?uc~8KD@UAUuLY*8JpTH&c^O}t&hi-7GPKb z7ipSKr=RSA%h)8*TBi?V+aUAb8^#i#G7q*U9ub%*s0b_YxTy^Qf_vK)^UXzV5azeG zIcK{`Z4kb>u>if|>){6ZI=3|uD|KkW3iJgWDtP5vx*YHZkZJtg1{^IQ;6E(@KLxrL zeO_C{&$*F2~i(Dapdfvu>U$o4p|>9nxlRt{J?D|FP>6Vo`9L@TL*0==$7z$c^4 zzGZMHAjB!9L366CGolFB98%gO5m|c`cO2IICJrbnQ*?DqIpiF53R9b1XO*}o#Y56D zOxc+bUjj%>n3sUSDLM|6eq}&e>262>3S@NyhJ`7#fMLC1GAJF|cMPco5aoGM0sZv; z6rjhd0xXkOQKvCK4LdUg;AsS5qS2VVgOvv! z7;OT~OCNy(fe=lUf9(rT>Lel{+h<2$r@{zeb%h@Sa^T#^<}YBNb%CcqUSE0s%9q+8 zKzSV;h6EH*9D97pe|*DTVQ3hb{1Y&FyyQzkKu)QNBk)rHP)~xFASe(l|3Lr%002ov JPDHLkV1lrmCK~_% literal 0 HcmV?d00001 diff --git a/graphics/pokemon/machoke/icon_gba.png b/graphics/pokemon/machoke/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..97d3a6bf0f1839450c956f88c7fed5c96a67b20f GIT binary patch literal 415 zcmV;Q0bu@#P)DV$@(lKtsFboAypTI&+&?EE+KB884>Yf_N9t!4e5%m?a zw+NIiF@>@=729&Q0v(EK(+5R~!Yhiuy^K8UZ+4qVeXB!W@M>$>1lC%>JYZqKyi4?O z!Tp*T@%=NxoERCRA1VY#;a<-O0L(7-T0lK>B^9t7wZxE@*b;$I^QHkHM1jvH(xhOu| z`}SWo{SWK6z+_PZvpWrF%S?Ck{*D>00001 zbW%=J06^y0W&i*JT}ebiR9J=Wmc4G&KoG~>P~KjNgh+#~1_{9%+_jt(DJ?t$)phU~ zAypn^{RWx!^<-y#R4CZHj!qyH$@VgPJ`zx7+=AeyoxgTI?fGTd!TyYWJBin0{x>h5 zzgUj=Po5ml=L^}tcsAS4=W{v6@p86(6@o0-E@xjox)H(R>1zNiMZp7K*TEVLK@fbb zE{jJNTn$2$PnWuQdjvJWniqT~!Na3M=f?9-T#?{(RB)k-506P8lsW-z0l-vJr3#X* zu@wcji0C4=28A+XjZKFmf~+=(O+*w0D#RX0%>c?xlz^<{Z4g7Q$NZJ|DHGPS}vB?5LCHI!4*w|os^;vDmkX;TJ{Orwq0^lM9Y5NEj41O zrsH?6yA7=(yK~d=Kj^^@_V3#N!ViU&k7D8n_+mj84E$i^7z00m5epgk0h~x613v)$ z@Ax$K{ICb_|X+=R6&(6-jui8=s2z7J1TD=Es#q)mkF7_?mF0oZp zDq!8VaxW7<&}|z*lyrGEM4roLnF;8%XAnNR#Teo)+9Jn+L{2Y&eb?FXXjh-;5b RzC{24002ovPDHLkV1n>vOY;B# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/machop/back_gba.png b/graphics/pokemon/machop/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0dda04cac7344ad7350af86e275baef70af298 GIT binary patch literal 584 zcmV-O0=NB%P)WrF%S?Ck{*D>00001 zbW%=J06^y0W&i*I#z{m$R7i>Kls!(vKoEtufHJnIppL}}ELtM*bAiBtxYsybV8;eT znVoec%B&57GBIX$?MSh;3ndgxmFRtWZ+2!BA^z)6*1`3`)%7>})qHw8ora0S)8urT zrs-PYA-X9*|NN-kCbhgtHT)`S3yKo8F!@8_gY zLgCjZFCXWXLarx&MqKEMte&6vfh8)ZV}5k!1=bmMl^^@xxt8(=Aj@{Zrx(~j?|?|& zE+g1Afw?y$>K%#@AWY{#uMIJv>#<%}+PV{wF8Le4<51UF7_0N|*Qfdq4uT{8PhE8UPh!Dp#oZ8Zx_WGkRh(&Y=|1)_xkF#6}vo zYSR4bhQK;J?gxL4?}%@gh%txkOf|HJ<4x9bZY W?6KkNcGX7!0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hw@E}nR5*?0k}(d$APhx)f^dSKDNFYZxvmixh(iz1pbn4;R}`Zv)Z;_^~p~8l;pSDlkpg@e~-=w6@@*ONOi#ZxUWwidLc9>Qo<4|lXd{Wc)2vLEWoph4L1rbb{`6gb%5)K`Ro zLl_B~FiNRI7}JTtvoKVJSr-YKFw_BX6Gkdk{jh=Mz1y2GANAu2RyC>_PD}%M00000 LNkvXXu0mjfy5NCY literal 0 HcmV?d00001 diff --git a/graphics/pokemon/machop/normal_gba.pal b/graphics/pokemon/machop/normal_gba.pal new file mode 100644 index 0000000000..0232ea1d02 --- /dev/null +++ b/graphics/pokemon/machop/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +238 246 115 +197 205 74 +164 172 41 +98 106 16 +255 0 255 +255 57 57 +197 0 0 +156 0 0 +213 213 213 +189 230 197 +156 197 164 +115 156 123 +32 82 49 +16 16 16 diff --git a/graphics/pokemon/machop/shiny_gba.pal b/graphics/pokemon/machop/shiny_gba.pal new file mode 100644 index 0000000000..2ceeb3c568 --- /dev/null +++ b/graphics/pokemon/machop/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +238 246 115 +197 205 74 +164 172 41 +98 106 16 +255 0 255 +255 57 57 +197 0 0 +156 0 0 +255 246 189 +222 205 148 +180 164 106 +139 123 65 +98 82 24 +16 16 16 diff --git a/graphics/pokemon/magby/anim_front_gba.png b/graphics/pokemon/magby/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7c91f0b84cac961c2b24574d84e3bc86e26a89 GIT binary patch literal 799 zcmV+)1K|9LP)F(Cf{|NsBA_SHGntN^To0RI60{{a8R#l>@Tdk_#1F{)ql00001 zbW%=J06^y0W&i*Jok>JNR9J=Wma%TzFc5}0SgVDg^_T>ZpP)W!$YdluqREibsYtXQ zQawZmCUav{o!h|igJn(vG-DG7me#N*XDm+zx)tyNp7fb_JRbS~LTuvyjGkM%Nf)4C z45s7%SO9=?EO3xX00hY;>17!JA#9S~Xb9_If&5@J0;we~8RC6591cNR4(N@t;fSix zEC5+sfz)gbFMHsDgqolfps`$$79He>HM@(%ZNVECkO$;0jJGUXgGlABGX!u8JOt3b z93U;wzm0tFZz=o1&k!fVo$SO`_zCswszMA6;-?t!3-XJ@%9V1(k+>`1Uk8=Fh(8b5R@<>)AM+&3$R2=Z0YwgkszA#E zFAfA*=~nAKbO4srM$)e_QC)3ca$SH$gXT1t6F06T%!tzn1g5pZ<=7hwJw6zh6vX7;@Q!kb!Z)ztfQ z0@x*rkKR{G8ut2GeN}y

mqJYFbgV&0=_u1K|4>LHQq}1nT6?hZ d51aV+_ziUg16u2A-UF(Cf{|NsBA_SHGntN^To0RI60{{a8R#l>@Tdk_#1F{)ql00001 zbW%=J06^y0W&i*Iph-kQR7i>KlRZwuKoEtuNNP8<5z;umfM?T3>}-*0^J7baCf7-B zKxoJfI13V-BZL?U3bf4HaU$U{REQ=cx$%5{`)2l8sdN2b(eRf(*zr&O4nS<%RcLs{ z01+gz3PB&^SX%%{TIBm_iZo*&mL!5aq9#lM&dE1UyvAg$oJL1SP== z@t|pRJ_0j}_xw>tAbILAZC15kMm(4x{$ItW0Rsd9XA|8bkl!}TYv3tJ}iMLwB-Yz#1 zF{`H-EmzGkgU|S|hxzhO1R^*{%vVBSLcQ`Pcnu6Z$Uw9$X!1;Sy}p-$&#m{nr;OZM z_BajzUnF^PQEEDHzDL;B<~7jXT_C!isIS6h?49ShHUX+EWR7UTTkzk34wOVUDac|W zq>b~O2amjHtDTfKlR`dL(<)HX3>-&DatarbNqOe9m4A~7Nhs)JBMnH$$oi46hUgT> kj3hw$8elCEIM-j-7n5zIPip`uzW@LL07*qoM6N<$f; zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hrb$FWR5*>@k}(RyFbqYtb@X96bSgbm2bV(7Xx*eBC^<|I&?^Kw zCr_qJYmC4EHi>NmjN{bN}v~|J8H<#Q>ygTCA+BgM))&Vq!r-K@boSnx7>T00001 zbW%=J06^y0W&i*LLPJyP%gm*d>t@#Oyk?(U6%djs$tTo0^1z8-Mb$n`<2t~K|b+sgvS3Br46 zn*O@B24DkC`q2aUJBp&iCT%i%gDzoWdza%5{c#=eS$BuGw!eliqi8aw)IOm#2f9$E zQS>8hyt9GdUv*l)buozd{hwfSXaQgR)m~`*+0#H=u;d3D*!34ydpjV9{ee>PnFVy( z{sQe$2=o3VmNGSiaH)>~0PuJSc_{~10_<#jFjNPFj|R|e_&(79l%qI;NhbrIt~4-N*nM#U&c4} z^o0OGD6oMx0|fN)uRs7}p)v2`{=QG4Nr51M!`K7wg87RKbev3|BFsY+w0-)bQzg=% z!v6g$eAc9@#QbsFY3ND)DLt)f3W3=%g+ERwP_>0b0+$6>%-xN3Qq3Elg{N2CeRSOIUqu?(nEbi|uX79Mt~QfgUlm-QAu8yZj!yhiJUF zXEq1-WiOyFEAx=PJtDAd0N%H+eELmym+K7sAvI!%m?|PfP>3`gWa14L1)Us^g}utoK4mZpc8~s zfX)g`(`OnOjWZ)p!B7DN71MMp=7TaW^2?nVl^p|osD*oLpO4D;Y-j)vRuGsgy9A!4 zu`~g~5kO_fT$Ida7T^fZ0K+I?D^2r!b|7<8kft;Uv?Q`Lm8#&!(vpi$TEx=V620EB zEec+s&%j(k#wv^J#9vzjlslElB>TBm+dKLYHpr4BvHeE{XmcQDZ<4Iue^ipF0Fhe% z;m-XB3LlDI?Fs+chp^0Q<}ca@UI(1p2VIUZu$;NOC>oWi)%F1d3(ea&_YY0Vs&mXL zpnvc|G>I;^zBV(H`$ZdLVDn7SKGggHxxYj%_y=nPr@HYbe!ReH)tLZK=XZ*0Ju`!I i0v+0wlXv45jDG-H%2tO#%{0000bN}v~|J8H<#Q>ygTCA+BgM))&Vq!r-K@boSnx7>T00001 zbW%=J06^y0W&i*JyGcYrR7i>K(m!k4KokIQLF3WRcaZ59=&8_bA$o!~l$=TIIiDtA z&uNG5ngqcgz)HJYCwq7NtR+(&%Yob!EM4Ep^_@&gDRj*n3`W0u|Lz>;HU2pc{u_Mk zI8gV!&Iq5slXnP$C`h%-_0!F7#+MY?_4+iWSYy$e! z>ym;x@QykLu=lP@2>?0Fe)mAun-8LmK;9zj=dH&JwInLXjOQFG|1>nJ7K!X76 z0JZS00@TB9jK&8I{4d)-Z40>BWCgZeHW*{BZn6$8YT$wZrC_=TGsYWVgN^|@ygG1v zuL4cX^ELA-pwE~t5583`H}6Ii>dE(+=T#ZZpaIihslSinDKOu!64)9I4O*y_+Khyd zU?Ql2vns)KBgDi4Zks$?Au5rG2Lkth0Ne9Qi0L@W+f3;1iLYvR!lJwA)n(SU#&-rEieh3R-RLLN|h;6EJx}6egy}q_Xm;Y zE37~q6X4K2-hFS<1Y#;uIzPT4kO-=wple#Vt5z)Li1Y9ik*Y1I0Z>jI2vO(+05_O_ z7Fm}E_O^9}I2I-5MaUImcA93Afa$SGOGt#^i#Q9FJk3@z8gkiX=C+$c$Czig8PC_S znPxOX;Je=C9te4sKJy$U0VVgqVMaIc3?-_lTwykx6u5=}80>&kv=4bX3H4=istVmX?wFw!6@=>36&UeAJflhPw8D-cCRQRY&@6T7sa zphvO=vj~dk5;Gc-u}4!v11vG*Kcf(&EO4lwod4*&#y`g|3(^}}K@CFT00000NkvXX Hu0mjf&`)s5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magcargo/icon_gba.png b/graphics/pokemon/magcargo/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..46cbb8cb58d992f1d47de3001a318cda9831bbd5 GIT binary patch literal 444 zcmV;t0Ymi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*II!Q!9R5*>*lCgG!FbqZc0{nGOwlYPG>H<1hU`v?FS|=pIehJ(6rcy)1i!urGODjoVS(vWz*eJ~l8F%zbyQnhkJqC^~=GOUtz5 z2u_QPIKWi&UEd2RsjB_?D8LaB;Mo`fB>`Y-ST2DW!K8|r9Y??$P=vF?!I+!OU_vxu z5TL+02!qVbF3Ef-n&K`tr@}@6srm;zI2|%&koPRj(5V|K!!6WFr$YvB;xUpfp;kp*U&=LF`%V&q zE(MZz5yboP{Wu=^Jeu}ChFAoQ-`>d22hQ%=xw$|O*-QTkFn&Qcf*QAHbz(4-LQDC3 z$j*OJP!iF@G>XGUk7oe=v}q^hmnk5@s&h4gUM*;kDwip&>{`UGCeTR*yE_-x65<3;TGtB{cSy0et!beU z(Rjj7#v|GuxCC2I+olTey?C2kH#oDb`?!#h#`Gw}4k6_be+B5yzYLQ4a49Wy&5vAeqDIA`(0?<@)rPOt+rjFR{D-O{q$HNiZvHMDsRUI zz-LZR0VFm+Bgz8og`iGPp}SfFbV@Y4?KTw**@_nH#NG9}P2Z>BFBIYr7DtSmU=RYR zkWz_%eXA34-URV=dNxuykcf3-htX*<(?*Ih3<~NF`pzAeHc?7$!Z?cW2Yq(>7Cbch zagN8aLjjB8^zWLtP(~8}DXNf9Inx#Z@wZ2xv;KdLzW^`KHM>r?;)wtN N002ovPDHLkV1lFzE71S| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magikarp/back_gba.png b/graphics/pokemon/magikarp/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..66e874bb96f207e1a9d205d0624b836188c14bce GIT binary patch literal 673 zcmV;S0$%-zP)K(mik5Ko|$`8$ee{oFK7ni3=H;z)6joa16m{R#;3u4 zKrX#g-}CE$PZ9Y0K^WleI?xR8b`U(&g5hwusD7_DA6lbT!nLY)%x`y74u{`US&e8< zH?5a}A0(-cs#7d~t>q-}(-?%PMx3uB=9AI2LIAolg`GznO(&y7aR9BO3ixohidaq| zRT89dKvaM!SKrKMpcDYt8lHM3&|nGt#?9nF;OnspEcrl=ZWVC30uk>XR{%>QvYdkk zTpA)l%bx$2Y|W1WZOaBgi~LKT@2sy*cql=Ph=K z=^f-9Jatx}y*;i5?Yv_aT+P-%fFo!x)%<=7XvenX5)*h{;Rq`QwHWLGJ+@_p36Pxw zI1q!nVB6E`Q`$9k7B91%I9$gUj1CIGFjTfjor9QvVsri+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H`$*lCcVdFc5|_WKZ9u6nAxqTOo_i9R#O>gV2n=QGJ6# z_d?&I4qXJX0SjKEf_D+Rb?I&Q`CoE|kFme2X4S*N?ZsgYVzo|y9izbLMwA4YQkNni z0j+Co98lD{CBSIUKjl~4%ILt)^4&7v4YlV3AhVTkqU#t!UK-H(m8z7i0D68~cuNg;00000NkvXXu0mjfch{y; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magikarp/normal_gba.pal b/graphics/pokemon/magikarp/normal_gba.pal new file mode 100644 index 0000000000..14b625cb9f --- /dev/null +++ b/graphics/pokemon/magikarp/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 255 255 +222 222 230 +172 172 189 +115 115 139 +16 16 16 +238 255 131 +222 197 90 +131 106 16 +255 180 148 +255 123 90 +222 24 0 +255 172 115 +255 106 32 +222 24 0 +148 16 0 diff --git a/graphics/pokemon/magikarp/shiny_gba.pal b/graphics/pokemon/magikarp/shiny_gba.pal new file mode 100644 index 0000000000..d6eec780af --- /dev/null +++ b/graphics/pokemon/magikarp/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 255 255 +222 222 230 +172 172 189 +115 115 139 +16 16 16 +238 255 131 +222 197 90 +131 106 16 +255 255 172 +255 230 49 +246 189 82 +255 255 98 +255 222 32 +230 164 41 +156 82 41 diff --git a/graphics/pokemon/magmar/anim_front_gba.png b/graphics/pokemon/magmar/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3562bda29978d3ba00d6da248a007cae622b1667 GIT binary patch literal 1744 zcmV;>1~2)EP)|8o%TF#x0x0RI60=9bOf00001 zbW%=J06^y0W&i*NPDw;TR9J=8md|S&M-;~gyEN-^CTHxV{D|4@@9!xPIj#xRkR2I{?yC7 zOZIrK`ZQt(@}9Q{NpN0~C}3+z({BH6^8)@RT-g(n^K8_C{d0$NyF~)|sv+Lyay%0e ze8)L2013UIfr4_0Mk92Ty_INqy~cq6S4L~Id8bg2Q!dUY7*Cm5?Ej5lV>Q=xu}u15V#W!Rg921kBm~{` zDhf&@Du_{3q^0cAG{X?3gw)q;U+lytlVodVX@R1EIk^%}ycT7j&(qsy$zNxd<|$2` zJ4LEyTN9KwCgJ|;>8g`K0bKA9Fj+lKYvay==O?SYOR4V#7hzMH^I&CC%B96|#|QyI zF$}uI5TMhbca)NSfd{>2*PI7y1D9Ed5ch&O7M^Shz>2jx$2X=W_%aMS=wM#@n8IV> z>9bvaxF(_J1?{}pnCwY(0!EqYxb37Nlb6_pc#XoMDmkS>}vAUFLfzSek&Ti3zr83ii+i zTXy!c?CFz9dUFm}+>9}8y(N#LoOK=ST4`-oV)S}H~;Q(ZaZox1T8Br zc40~%?T*!V2RtZ6Wr5=R?sk$a(e$8zJVL=IwBr#uTS%P_3KE}bI_TRIL0bGVV2|}0 zxQ+TvG6CXM<18we!)BdY=`|%YotA1=>PbmonH!Il>J5fP{p^MQ88LKT6n3F z_Gp1k;+Q5MW$(Z3;jJ<%g?NkD%o|-}%kyoUd-`8>LvZMU4f(!*^fHd{GQL(*B=cp! zvrZ@9LgS4?GQNk6XRC@0O$!0}&iXTz>7S~N)RLsiSzV9P_QX20`$<|gUc`>hw~ZFp z@$&_64%OoY&&gBO@OJeOHaNl)FVyp=iWJQY&J72?-Dc}vM?KmS3B)U72T5vx0bZW1 z=T!;`A3meN%~7fYh7E0ONNO*9J_rzkytkE812Akq&m9LR%5EG4cw&7x!FxyN1K;;~ z!EceoD}e&=-~@yL7;%8(yg&h3)zyx80489>!RM;XFp%9e1V|`pY66A_B7bPr<@xhl zw-90cCh~&`7^nce2$=I>aTdVq^TXFH;-Egl-`rwMq66?h%s9OJ)q(Gb{&e^?gdCM* zbCo$fqm|KKKa69m&aCjPqsj=fPEqO?(hUc2EiKi>c|{3$u_wAZV8m67*re*>DCnlS zY@W@Z+}8nv5Cs_6t3!}9bkCEm8ZZ_F7PDk{m<0raYrw!Pynq@Y6`RIM zz5)!PURQH&tT|E^{-*$gqrg{mYXSrzRh9+?7%VT~m~$Dy93@~hjex;k9;?fB@Gd|> zP5}mU)MC+{s2v4PMgfMBoHJG*Cg=kOj_2xYAOzm*eZWxk%vJ{wMfHZvC15ai&IS=h zA;u+OWEt-ZA_Q_JP=LWl2oQv>0plXOI*2F=QWRIHtyvj{D2gyjNFXKLnw6o5Ldc3s z-R&9zMtvxv;B~xm%@1Qk5k=>R;fSK~!*E2=_+dDrX#6l7Q8a!Sjwl*G3`Z0l35Fwz m9&I?HXk$2{Xye~Qlz#vmj3{|h5XRsD0000|8o%TF#x0x0RI60=9bOf00001 zbW%=J06^y0W&i*JF-b&0R7i>Kl)s7_F%ZVL*v5u4xN>(zULp4Y2ifM}>~~oR%-TgN zL*y=nVUaP1i+~A)yuc-0n#9tQ;>wk9z~CHMdWOvGpR=_q-@U+%3&GA$-^_fH90afN zOniDF-xYb5&-bm=uFBb1(>YP09{;Cz~66QffQCL?(BXYW3(kY6BvIPQjr^*;JiU z!r09HqYOt!fEB^7cODlEzBf81%+Gb>QWs^6q8m?nKGbUK0vC~0rnvH!b8fXV55a33 Z<3EC({bLLCqq6`2002ovPDHLkV1f%BHBSHl literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magmar/icon_gba.png b/graphics/pokemon/magmar/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..af5ece4f7b5c8ea235b1d21fe557b440366f7140 GIT binary patch literal 398 zcmV;90df9`P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I3`s;mR5*?0k}+z;Fc3v`0_irp7YHe{jVGyk}vYNbMHj1Z(YE8_t5xb&E&8UgAe z!chZN8N%d%f>~088JU=KlOV;zZ8qkUToBn&3O&B{h+Wsb}@*LW~Kidai?yH?2)JpztV`#7buf78l*2Xy2Qu1P;5-504Qv?X0 zG};N^P+q~Qc`P3?LP!`tJO4hTa5Scc50M>`c}fV)$BvPL%1q7IF47SfNWs4Q;K61d s^xor7z?^Z&gM0#WzXfK)!?yliHz?Ac64zfWWB>pF07*qoM6N<$f_-4H4FCWD literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magmar/normal_gba.pal b/graphics/pokemon/magmar/normal_gba.pal new file mode 100644 index 0000000000..d94c6d7603 --- /dev/null +++ b/graphics/pokemon/magmar/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +213 213 213 +106 106 106 +41 41 41 +255 0 255 +255 0 255 +255 246 106 +255 213 0 +222 164 32 +156 90 16 +255 164 65 +255 115 16 +238 49 0 +164 16 0 +255 0 255 diff --git a/graphics/pokemon/magmar/shiny_gba.pal b/graphics/pokemon/magmar/shiny_gba.pal new file mode 100644 index 0000000000..f4da957cb6 --- /dev/null +++ b/graphics/pokemon/magmar/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +213 213 213 +106 106 106 +41 41 41 +255 0 255 +255 0 255 +255 238 255 +255 197 213 +205 156 172 +123 74 90 +255 164 172 +238 123 131 +213 82 90 +164 41 49 +255 0 255 diff --git a/graphics/pokemon/magnemite/anim_front_gba.png b/graphics/pokemon/magnemite/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..60081cacb8219d5a395fca6e7e0ffa2352dfde05 GIT binary patch literal 571 zcmV-B0>u4^P)=7&ro5UqjHKxeT9mF)zSlKaJYl9XJ$&|(k4jpi#q-~ObTyB4Aomo{%q&r|Ko)IPB8TT7b zuX`m47E+nJ{Nqm+(cV06{_jLti{34^NulM(h9p002ov JPDHLkV1jrr^qK$w literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magnemite/back_gba.png b/graphics/pokemon/magnemite/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c1769ec5136047cd8c00a498a87467aa28383ce2 GIT binary patch literal 391 zcmV;20eJq2P)KkTFifKoCV;(4+`f>U1=e6kH*dZ;%6!f(y8eMTOFU zC?ZS)r8Uhe_4o$a$Opg+;Q&DtmVgar*j-Z2&_+mp%@p(W|LjIlN5{XVm+$7SB%ED` zd2{^63-if1ct`oYBovt&@ySJ+u?=(%mr?(f-qV!rI3R-J`w@}SDcjH_SD;>oh#$ls z*(3$1!2q#pc_9XXtrtpD@vpF;aN#NtwG^S;(nshuA3iljK_UxlZX+<)V6@pNQh{SyVDD& l(wXk1m4#U&2^}5#=Lfg7qh7mUHQfLJ002ovPDHLkV1naCubuz^ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magnemite/icon_gba.png b/graphics/pokemon/magnemite/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ba9561d21c011638f96a6b1904847b1758442718 GIT binary patch literal 289 zcmV++0p9+JP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HpGibPR5*=eU>K3$KN_E3=>sbN&pTu#^8f#wIdcX{$u}jSfX(^; z{{`SG4jZ32b6;sDToJ#qvCY|!@<=M|jcxCKL>Tf@-WVi+q~hOWkND|M%`)q~yS-_<$e9 nVSIugfMTd#1&R^yJ|zGEgJ*Hj6D}r900000NkvXXu0mjf_Eml9 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magnemite/normal_gba.pal b/graphics/pokemon/magnemite/normal_gba.pal new file mode 100644 index 0000000000..4ece43e6e4 --- /dev/null +++ b/graphics/pokemon/magnemite/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +213 213 213 +255 139 74 +238 24 0 +82 205 246 +41 131 172 +180 180 180 +139 139 139 +82 74 74 +57 49 49 +213 246 222 +180 213 189 +148 189 156 +90 131 98 +16 16 16 diff --git a/graphics/pokemon/magnemite/shiny_gba.pal b/graphics/pokemon/magnemite/shiny_gba.pal new file mode 100644 index 0000000000..50bb00b888 --- /dev/null +++ b/graphics/pokemon/magnemite/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +213 213 213 +82 74 74 +57 49 49 +82 74 74 +57 49 49 +180 180 180 +139 139 139 +82 74 74 +57 49 49 +238 238 189 +197 197 148 +156 156 106 +115 115 65 +16 16 16 diff --git a/graphics/pokemon/magneton/anim_front_gba.png b/graphics/pokemon/magneton/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..40e95aaf4a90dcd9e9491755818d93c420163a4e GIT binary patch literal 1269 zcmVDv2?@?|+ii(Y{g&&~7 zywBggd-v{rpQhc%(x~0BuD{s79dK3o@z!<5EAbbo=X)z|Qx-`PP<<7r1WwF0_t}dA zjs6(o8-h>f6DR_z<-PrA2nq>K%`LYGI3B(FD1=mJvEtt;7m5IQBZTnOnZ>!Sc&$(j zmh=%IlvBqvm2>#CaEg-gK57fak$~}?(<0#AnqjO7pVK*=*C~MI66w7&45RJQIgthc zKV4;u{*}=~K;H{-NpZI}jx?47l#Jd(0<^jz0vub)SSR+WLD`ZNKF<== zxqD)Fo5I&hNJZxx z5Hl%z*ff{dQ$TpUNPyqymW_S@U4pv{1dh%5ga8BC4GEsTOHIeSI#C3;K!Bu|Q_oQx znog`MKAkflz}-#wZyAaM)21|_gGtIcfYra<%51R_(}Rnr@1ue60-yx`+QjgnFXK+0^IOBi(P=QnK}4cub<)P~~2(ybBc zUch&7o+)RE9fM!fG0badAb4$aNiBM-(MR$RNO1Og2_W?ceX=07I_4=LpGavHN8l5j=}LKiaXd+-N#(CBnFP>mN#PBWy@@=J22IFm4y(Ht)hRjKlrfLfFcinVW@*%!t;@m0a4a|7a9JpG2d0~@5@KL1 zOduw1;v|reE1@tTB#cnh*`@gaP3Z@?xapo=Qvqs~q~T#ZPU|Gx1mpdOR__1j=lA@c zi_ne!vy3D0dH(vvb-#uruKKCIBYP0!Ak(0Nn^+BP7w zXJ?W0$+`-d?au(AjkC*0__zk3gxD!{fsN@LFed!KvM>;5aEnfSN=Gp!PSrQgAoCVtN?6(b?I2B7$> z24Gw(6PejqniJ;J_%A*}8NVYsWL#r_*4=8e1dwY6zv-rB->CtO+z&!ZqfHB*>K>L! z_}un|Pe;&;d)gVsiA-tXdEO+HnFgC5CBQlsUt12$@~etr^9<=gTZCwEARNek0ESW( zzlhUVE_sM4Z8pVSxe$~J;IkldHy7U(@QuxM-#B$r5jZka1yFW5*MV-D=LR7isF|Q8 z;EDP%pnHww{RzH?CLSm=G<*VwZX(foY!r;g4shD_{96kU&fvoP2t` z521$5_gEm#m=Y4dvb){W9bigd%+t(Nz&Ui!I$9E9yU-k^5^!v^?mXNBnWwZujd18C z{P7~Qqs^3=@At(0H$uuo@FKC^t*i(jh~<)ed=Tq4GC|%@RII_Wj!Hwz|5CP^k4)?2 fu>Ll0^iTQ&8Uiw-W!-pD00000NkvXXu0mjf8$?~* literal 0 HcmV?d00001 diff --git a/graphics/pokemon/magneton/icon_gba.png b/graphics/pokemon/magneton/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..91a25f3ce3a3abe263755224c3362a8b64af74b7 GIT binary patch literal 416 zcmV;R0bl-!P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I9!W$&R5*>*lR<97AP_}40mv7ydxC6cTY8sXAU#hu?qRw`>Z04= z;6|zxDZzFuRf?1_p#=jb>Y~fcZl3-a20asUZ-rUUUeiu7JoZV1F81Qsy-*!MC&Ws zoTP(;lv-MIF*#cQ)l%-gG0mJ(|5{4TQbC+jK>z>%|K@vpS~&m!0RR90gpkl900001 zbW%=J06^y0W&i*J*GWV{R9J=WmN9SBKoo#)Kw@$vxBUZknGwoWFj1k#0(B_cvlq-# z{HzSFDv|osq1h_&3yLz7f5Voc1F@$=MwQwL{|4Tji;~#SM1qA%c|$zBPw(EHefgdc z>-hgdJ`=)GC!P6$yZK5u5OxudT-V(aP7I+CN-@Ab0h>Z(5NQQ4=7Eh;3 z0EGDv@e6a@h4M4RbDg09m^O1YI?POeILwB(7`Kih#}B@)iAnVwgQ(dgtv-;41+7w5 zgAC)iYyl8T3ZH_iNZ9~x%?|0SlDqzEI?0cox7Pu@pjUy(H-G%gavxr4fSi{*0S7poOtiM{X1X+TCtz}Afwa9*D|Z6& zTJDVfjoi;DZ{*I{e@X5JVC+Aad&hV%mwVTEP|MxCO>R6`kbA(52TOA2#)BI0{eiWA z*LV<;{kz5k$I3rc>aWKG@q0Wld3HQ-R*eUuST!Cv#j5dutpAVWfk^8AxVxfjeu%TA j6f5Qj^IXpl4>o=QhZ6^a3q;7a00000NkvXXu0mjf>co*O literal 0 HcmV?d00001 diff --git a/graphics/pokemon/makuhita/back_gba.png b/graphics/pokemon/makuhita/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..45423f822ee98be1562f7de6288f517441d03c74 GIT binary patch literal 579 zcmV-J0=)f+P)s zoTP(;lv-MIF*#cQ)l%-gG0mJ(|5{4TQbC+jK>z>%|K@vpS~&m!0RR90gpkl900001 zbW%=J06^y0W&i*I!AV3xR7i>Kk}+<=KoCW(1c_>qoZKL}K!kgwgjG^ej;WjmJkS`? z;H{viNlBSAQDCTyETu>lpCPl0F}rJ%R8bnHz{vmU|C#YP&ZYjf*1zbx*Prz!oCDH> z^$hxFoS~o6g8}$iolXM4S|*$WLIMKENdT}GkP5(*T7Xe~4=t1#vV}=S^SlT8{URbr z37Fb?+jVbcY>t=&H7#7bu6xsw|MEHX!C%-0S0&(VF~WIehDXxxJ$lVj0v6R7pQKIz zn?ZmWMK;lB-;wTRqywa65?DloRPV#fq)sCshSt~YlHTz;O@NXxExI@$gHBQaJ`twH zGvc63I9M2~V)8|vG0=gD1w_R;lt5$vLd?~joO&=a*hm41322wkgb65JZ$bhhbCNLB z^zmC2@O}U2kGOo-y4(@4aGD`iA>(+Zuj*4-FeHm3urxN+lE8wYRyBagww8OJdLCy+y?In)6<&y1A?G}$qKAmB zyJXSUs R>b(E}002ovPDHLkV1n>22_*mk literal 0 HcmV?d00001 diff --git a/graphics/pokemon/makuhita/icon_gba.png b/graphics/pokemon/makuhita/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d64f2c4181067319b36e470211fb475a57c4752a GIT binary patch literal 326 zcmV-M0lEH(P)DV$ELFt_ie=e z?>P=e77NCAHw(shHJD2U#z_Un`5laYcL%ff>R*%x(i}D)WH@|$7!JD+%VG0j?#Fz* Y0ol5RS<3(Z761SM07*qoM6N<$g01<7Z2$lO literal 0 HcmV?d00001 diff --git a/graphics/pokemon/makuhita/normal_gba.pal b/graphics/pokemon/makuhita/normal_gba.pal new file mode 100644 index 0000000000..7fc578bb11 --- /dev/null +++ b/graphics/pokemon/makuhita/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +156 156 164 +131 131 148 +90 90 115 +49 57 90 +255 213 82 +238 189 49 +205 156 82 +255 90 74 +205 82 65 +156 82 65 +0 0 0 +255 230 123 +123 90 57 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/makuhita/shiny_gba.pal b/graphics/pokemon/makuhita/shiny_gba.pal new file mode 100644 index 0000000000..2f3aa75fc8 --- /dev/null +++ b/graphics/pokemon/makuhita/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +255 90 74 +205 82 65 +156 82 65 +123 49 32 +255 230 156 +255 205 98 +230 164 82 +255 90 74 +205 82 65 +156 82 65 +0 0 0 +255 246 189 +123 90 57 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/manectric/anim_front_gba.png b/graphics/pokemon/manectric/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e91cf8850064b2a316dee46ecb8e04a6ac0e9279 GIT binary patch literal 1150 zcmV-^1cCdBP)&Vd|4QEGYP7{_i+e$=AQ0|SY5)KL00030|Nq6s<`@_l8?Qh100001 zbW%=J06^y0W&i*K{7FPXR9J=W)f@iA= z2`!5luWzeR<=M9?TQ%NWQtdkJt=cbuv>f?1h#L|hapIUw*@|0uf%?gSPtsRI0epWD zjMwU0y+6UDC4eXg#6A|)ilSKtOp-rdOCUkJr>jqYo82NX>k8BS0x z0>m=|p#Ra=zg$M^V9V+0a-smcg?{(PRy`W7_sDrePA0kxnGSt!JI5QqIhGf`E>Br) z3X+Rn=3`(tR~_j;Hod+%@ZbyAakIdPFAxZ`dL%t)HQVAc16ce}%HX*W0|Wu@ih364 zo|N#L5aI~I(6Z{;J4%NX2!Q=)*x6&*6(e{mI9?*ykH*9uslX{mAWnEh-LY~7I6otR zF0p+Cjsl09b*8KHjm@qjT+TZL(C*`nFt;rW>zwZp;0W*Jx!tTfoVWM`0vwNEY}zz+AQI@8qQ=S>aIXp{f>8h3Zt z++HBKOVt^xiWxKP*^Sd7j*tKs55HiR)603bSl|7Ozo**09$ja~LcP;~!NVMou3PDq zfPlPP-q^`5~!=mxYirpq|Oaz$*zM@mm7@3Li&BAoh!a zE)@v#MGEpWNGwB-0<9JBl8}-Mbh!jF)5Mm$0#FR%WdsQao8W4Bf$0)t16{kvl6;mV zjIaQ__D3mLk2&e|-d=%#2Jaa15u_<+9T;3R6u3?jhyvM%6&H7K{=a*T-7{#m&fU`Fg z_kDn_-5J3!JGd^F;2s|H#1WW+vV$pJ0`5U%B_R7eRdw&wu}@n{UB<8`#l9zRK3Bu8tu1#cu5Rb3&B`L zgEQWBseE942+=FvMd9+Mxmm}Ve7#_1tHm8m5X4N;l3-G)V7$NtK@FXB{Hy%IsRV*x zhiNu~W~)ObkiURk*=x~TsOfKV-kt9lL>&Vd|4QEGYP7{_i+e$=AQ0|SY5)KL00030|Nq6s<`@_l8?Qh100001 zbW%=J06^y0W&i*IGf6~2R7i=<(=l?xAP@ymrQ6c$6mlzWkoYWOaslJCuAoeVq+a=a#|Dshz?Xoz3zX^t9TtC~Rz{#V7ASrF z0V_Ac#^-rJUsD83O^^xLm==&E7=fio!BIGo*ML3YHsMj=DIc*$fFsQ~RDqiz+{yvy zhZ16HfE$Vlu{da&;cDckc+Aj-yRS9bE}u_F)c)WQN7TR`!2=qA{+N}IGTejzVKZQ% zcSvC5MlAk1QH(T(0Vn0&Fp2<*iy8)eL!>JTIpzNOENBIg4|s9=?*ULm4)Ar~XMlfv f-=_?w!{4rN!j$T(0`LV*00000NkvXXu0mjf#2338 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/manectric/icon_gba.png b/graphics/pokemon/manectric/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0b8fe933d33121070a3daa99de40f69b798e2b01 GIT binary patch literal 316 zcmV-C0mJ@@P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hx=BPqR5*?0k}(d#FbqX=g61%#C!pDoSmF&O1LC$WoPaa}u|cTR zW-AJys&&$x0r;Droye9RV_%jqt9j8d-poNA)vbKBA2i}ysT0uUrRL#CZ@NN2kGBc% zF%S?C|J8%utV*?iE1T*g_h zonvI=&|@MQ=+&`=4!*f|wgSDbQgRG1gj8=rP>ZtB0_|2?94XtiB{JT5Mc&PMA0Np_ zMjrtl5osXqy6 zZXvf{PS!+g+x27455Jj)QH=8{aOw0+LbLCWczPER66Wk(DQ`Ge7?$MyhYvrAEFGW?$HFUemRr-Y=8sXdsC zdp;L~nV5mnM9G6aI6rTbRZzxGcojf?-{N_?B3Lqb&Sw>3B&OvlkxL-?M~qpfPGb^G zQ%YEPBj6LKS^`9)V$3LKchOt%>(es@XcOGWw=|! z;ZpSB3XF3VFnsw(<3(Z_-JuQ`_dE-XiMVWr8;o^;HSWXM4@6HUx;rU=rT{#D(8C5+ zZ@t*Y5Ltkly-~BP8NRdI0J-}BXgZdz{%(oA<3;Qr{}_+)e+`{DOQ92Isen$LB|s<6 zBGw;2y*ObdcUAy8ajxWk5XmY!ak5z<_vs&Uq)wcR*evA!q5w1>sn6Gi+@<~HHg?5X zE86zYtGRT$v_HVBk{2(Frr1$^V}AkM?*KLD%7(K2p(M`QnIk`|8@WsSn*Y5LW&k_&xz(Qm#_aZ-&`q(aGWDjD#T+2O7X;y4uvIRuvrBqjPCoEfKb^t(=-{?l}l;w#6 zfPp*9wcOKe)dSNjpC{rQxznUrf>FJ-Tl?Ri$lrfgwZ_@T{vYqf^Wd|i+?bpc_NN)| zFwUK`YF<1Kr~p`;XQ;!RXPQf$)12@mXJm+QOMM=InZ`Il7S727|CRARsk7q2yVV2+Mo0R55XIl3z02ZF%sMf0J>f2r|b?}o?t>f>MH1AX|&L#j~#0000F%S?C|J8%utV*KlreAOFcg5jMLMJ)PhBkCU(9A*o5F9n>E!$YgtK%z z0mCU%Rq>LHU2r%imei$FBt*+SyOj7b+}Np40?F@v{`{QSVeBhDJH9OzG?7a(988t^ z9VX^VCl_@!4Kf3j<&yxIsZ8sAkeO$hzD@#OW9)nB0P7(z!(qPA0pN_2yYmiEFuBRK zq{@C6i%j1{(kK3&deDK7Z8)#l(T(Hy%4h6gegWLGmn%$c#vZWWQK3RWAb>x%sQ}ZK zSG)NXs3GP6G8WL*iRGe720vkY23j->5vWH3@Sk&Nl1Mn?hoLCyA=YeBAW(295h$Ps zQXycBbuOF%!!)~LXn4h3a;P}xg|C-p&0a#o5R><9!O`Fq#yp}m0HPIUTPJuo7_)VA zp3eX~_};`xfIt$tReRvp0X|MWBq;?@*a~qrK+|DUqX57r+FpRGr?8y;VnG}#=;!;u zLwFYew>9+hT`Uzn)lmvGmUyIcvc?54Q~J;3zd)9Uw}3^oT;d8j=^<=k<=%zTa{>$l z!eDHbz9ud7iqZkiR?!t)59JAPg62myp|_t&Fs>}#0h?xY0aTR6ztP&)xA3r|_2Etlh8We1P8eHA;(<`kbiNIdtH*kcAl`I-rYt|Hq{P!ec^36RzB-XEV d8(;AW@ee>>7gEcSq zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H^hrcPR5*?0(m`&6Fc1Y$pCEIfN;zM<>E2R=&rumAYt&J>LYB2a zuD4dK{0=b_3aYy5s`ZX<{2AaG^Y<3E*C$D^q;zZ<#5U5*aULZk00#6uW!M8SrrV@eg6igbo!fSFxhUw=n+aA zFvZatj06g%mSiVjo+mI=q2?@L8Ud3iR6!G%Q7Rnn0zPhF3cu+f)yHlH;5U7I0y_rN UYjp9KJOBUy07*qoM6N<$f=I-rzW@LL literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mankey/normal_gba.pal b/graphics/pokemon/mankey/normal_gba.pal new file mode 100644 index 0000000000..bc405617a0 --- /dev/null +++ b/graphics/pokemon/mankey/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +222 222 222 +255 230 189 +238 180 139 +230 139 98 +189 74 49 +16 16 16 +255 213 131 +222 172 74 +180 131 32 +115 65 0 +246 238 164 +238 213 131 +197 172 82 +139 106 16 diff --git a/graphics/pokemon/mankey/shiny_gba.pal b/graphics/pokemon/mankey/shiny_gba.pal new file mode 100644 index 0000000000..55703c37b0 --- /dev/null +++ b/graphics/pokemon/mankey/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +222 222 222 +255 230 189 +238 180 139 +230 139 98 +189 74 49 +16 16 16 +238 197 139 +197 156 98 +156 115 57 +98 57 0 +213 230 148 +180 197 115 +139 156 74 +82 98 16 diff --git a/graphics/pokemon/mantine/anim_front_gba.png b/graphics/pokemon/mantine/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d310da6e572d95aa6af989e0b15ed2a0f9299fed GIT binary patch literal 1556 zcmV+v2J88WP)h2*2u=dn|6rp;3sd8#}r3wWU$sP_S ziJ&&VHh%-^Vd0Q+WH}UCH4z)=@~W*|ox5v!tE6p$jQmPl|wicrW}BVvT&^TZ|d*&J%SC>L=u zg?!dPap^Uqn7U*+Yg(}jEmurkQZoTKk$^;Gol;kN# zNoa<3>rfSJw7)rj0gIjIAIL6 z62~~F06ov~Y2Rf86yo|!fZcVU0x*R4R+d6Q{W2F`UjxfC&%-W#ZTPFfxe&-2Ay7tW zv|0sXhXSp^g&?4amd)}Qs$rpOP+bE815giwNk;zY7j*_~;&&7XZ&8LWozMqiLJC2Z#_({Bka{M%y~(DyTLA9`F8MbFwyrn*8WEbQK?Tq`DpncbdG)OuOx}y#)*b^f2pOys z3Is0?F?lCHhaf0at6>E1puUMoE%_Ek;fCwsC9W|Ratwj{cdoV|0Id@gssliaxXvAb zJq@U|h};3SrvdG=)wqms{50@If4|_sC(Q()e66qY3~^^bJ=6PH01gn+lnV6;GVgeIR>p|(GL9_TWtdbdfDq7iS~P&I}fVs?>WFPdAtzW;Vr=z z0{?nYKkz+XC7NN+00(G%24Mfdzwu(b(sP^rQo$Y;$R`2oQ^0T7qqE<6i@rr(VnP}L zoG`aueSkS|U3VjPK}dV@a3G)aytTE+gj;CUMx+{Jc-NALMj*GWTp zV?z?EfjsJ>L4!xtf2G5jYFyZp0DSJ!k4hu2ch;WP^-sUIZTm#g?ozw_!jG2&d(pP{ zXYCn<0ozBCU4hARIcGm{90zKx4SHU}-V5_FJ}EzJ`LE6cCGl!7AWA zcjdPE%b|8p98a`~*FXsMb4&v=V5PvjGPWxM6_(P2L zRbes@fwI>`@sIWgX3x`sK()X2y6v?`pNZ{e*dkIJ7XiMbs3>o&@e&gvIDq|ut_KQ& zDO?EK>=SX=^8Eq6lQ2@kKKp-(wPX7O&Ht_!HM%z50k8nr;EmjsHRTOmFcj?p-9Y$; zBG{K3Kfs<518j#8?6+K9pPrw!zoUOlc-+P7w!IgY9D8cnv00(CZz$0ah5D5~=h}0} zPSlGA95K0D)6Gk^fu#QvjAXz70000Cl0A;ZAPj{gEve@Y$qiz*9%(T(BN6J{zl$`XW=(zw z!K7JjH?AW5`T5y#(|mRaeAOOZ`d0AG0R^c{483F$@lo&JZP&?}33Ml*YQRqc=prwM z?(|RxdcZ^04m~me;4HEL3{V7^955U>x2JA^G?@U&08%}>wgi-$w3)|$0oargFgZ|q zjH>6`<1fG?2i}r;_gZt|!va|-ZVng;L~ z0#2j8m{8C6nwL_V#e@)y*HbR=+&U_w%g5B%MT!=GF7hoTe1oj+JV-6^Q zBoLQKu^_q^7g!ajJnjMATnHqEEp!4(fjwLT)KQ+-)4xbSwVuN7z*k*>B<8#W7dS3L zR0cRCR-nyxSd~z>0=tC0F%V;%w+=V;sN+erw+3(=<1+27fYzFBv-ynp1(l)p<1O}T Q*Z=?k07*qoM6N<$f-6zrs{jB1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mantine/icon_gba.png b/graphics/pokemon/mantine/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0bb2223674e71b52ce15078152354fc8e44af4 GIT binary patch literal 374 zcmV-+0g3*JP)DV$*k}-}0Aq+)1!El(>+yL55!*Aj0Qw*&WX=Z9KU`#}| ziPFUtJbhyeJ!8J2?BfMoGhkjDuq@pEtVwc6jU0dkKsnXWl~|Gy5lGDFFE$Vy9FJL) z;Q=_Ec?Pr!3al4!8(Up5*Fd-_ICGXBefA_oLA~kjQ8SS`Sg?C4gEMjz5SQJD2CxY* z%TBJg2r!$;aVw-OE15=BUU1wkq{dE>&4h?XVq3EC{ zfoRg9`7!BG{rFS|45w5FU9{^kBC5mFkEagmhv+bX>JSG|9SFY)L07*qoM6N<$f~cCFc>n+a literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mantine/normal_gba.pal b/graphics/pokemon/mantine/normal_gba.pal new file mode 100644 index 0000000000..36e0777c41 --- /dev/null +++ b/graphics/pokemon/mantine/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +148 164 213 +90 106 139 +41 65 98 +24 41 74 +255 0 255 +205 230 255 +180 205 255 +156 164 197 +246 230 246 +230 205 230 +213 189 205 +164 148 164 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/mantine/shiny_gba.pal b/graphics/pokemon/mantine/shiny_gba.pal new file mode 100644 index 0000000000..5427dc275c --- /dev/null +++ b/graphics/pokemon/mantine/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +164 205 238 +123 156 238 +74 98 197 +16 49 148 +255 0 255 +205 230 255 +180 205 255 +156 189 213 +230 246 255 +205 230 255 +172 205 238 +139 164 205 +74 82 115 +16 16 16 diff --git a/graphics/pokemon/mareep/anim_front_gba.png b/graphics/pokemon/mareep/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9435ca82999b681669b9cd534cec0e6a569e69a9 GIT binary patch literal 875 zcmV-x1C;!UP)S<{*^407{eqAZq{K0OqU!w0i)gq@+?(QVNOCk6y`^Fk@??Ghv;q)zGB6{$NC-B>!%C~?|UL^|HP#I1ejbYjC#vJ&fk_wM;} z@qL6e@qdO9M7K9b&vc+oS#0=1e!u_lP|LR{rF=wrj5psN4K`F@69DE>>I~s#a6A|) z`3IYHwar|BqNomNosOvOGBLAPv4+uCdpN%sQR=S!9>h2iA%UpotsiG&O1-t8{WAa^ zXz)S-W@2iyFcZfD0FHq26f^Pet+>j>cVPnn4SrFYv`$|oNxCB@C%7CF9U#vyljLzv zbU8H1yBlO(1uOtWZ^p3z?*uDC1@7S#y|In!$+;VAfSD%S>FW~&poDj*0qyr`nr1kI z1o}rx-k|#_%y0vI2^FA4pQh;^FMx5bJp`p zMZikj2{fREx%nzV_-c<5aEtof@wF{WOj`oXfnUP$^%ls-58Sgq+dPCt@FRT&b9*Nq zUMFwdF%Nw|r~y)eRF=mg_x)I(!NOf^_5>s+Q6zMrpoGZewKU9LM$Fwi0J0CsPj>;< zaDFw>L=#Q?%RmD${BZf(1q}o)cNwuT5K3#_(=z4;VpAt7T&F5J3j?ufdoC#;I{kz4 z1UCjU7Yrgrr&OYBAW|?C6RH{rlL-)=5>PP^Hj%SdM5kgPESE#K$_H1~Kwe;KrRq5q z1L@$g`LcSflnjLOj=MpA9aPu6WFT~vd%@QEQT6OB8wlgxpRYpsO^lL(0N|~wj$)Jy zgz?-9)x)`6HV~)dsJp@_83-Qm8X&jJ!a&dvwBz3@^n=+_FzOuUb~yNhZXoC|tZ2Zm zF_6MxQ1$$v=J-d4k^8p8{aQaL02rUw2?jb0AJeGowv2a^0)+jEP)S<{*^407{eqAZq{K0OqU!w0i)gq@+?(QVK(?5^XFcbjr4C&hHR@iLu1^S#hsBspSoSIfhRHC1Q zjg^fLaV+jo-5L-19!Tx6+yZJ--4(%cA`iPx6UXHONR0P}{?YrrKTciGdyM}a{P`d9 z;-XXdmruk+7kF`YmWi$w3P^F@F+p5DmDz`fK~G5e7hu`3!>fht+`;=HWF~eUU?7BO zCh+(apjaLoT;q_Ohz+92`|)%>B7{2Q`YSXa{4t?15CWkC)`tq8kBO?j1r_ZUn=Ad@ zA3Y;FLX{8kQwtQjd`e8fSAeo8ofZ6%nm#fhorar_3$#~2Pv>Z;^AsY6XXP$6osSLF zzPa_NW{Z4GoCxuK3k+Sr?%rBJ5CGUh1o z?Og+s)%MFx05+iT-8w}y+seE!fCA_f0lTw)?kE-uiH8Kyw@JS;`%0xjrhyU^jxqOa z05hS16)dnp4}xr2+_uGe3&882WxGZDTBiUwpVTd)6EFY>CcG|A!8wK3+eg5ndVH*! zI3P*w{bFD#Zv!4#fG5BviPwsW7EuHE-T`~AM71U3d!BIT|3BdTU=Dc=(0h!3i(drn V1ODtgDV$@lA&$`F$_Q>mB+YfA2DfQc(?`Y(T!wg|^NjhnLHQ zh-LwYUCL3{4g=qz(KcYtMm)WHAqaSzc+2z4W*Zd7H{&{e>ez^bWz{6Vy-aF8| z!E?%>0AMCVMuY;c!dNaPS7EFT8DwFQ&b=^o{aF~YtuUmpcFn@*0*Wx`D!3ucvTx}< l>Pa_#Bw@T04QbO~;u{T!w1jn%SziDE002ovPDHLkV1l7OuNeRU literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mareep/normal_gba.pal b/graphics/pokemon/mareep/normal_gba.pal new file mode 100644 index 0000000000..bd24bfe72b --- /dev/null +++ b/graphics/pokemon/mareep/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 238 131 +230 197 98 +197 148 41 +139 90 24 +74 180 230 +32 148 189 +0 74 148 +0 32 106 +255 222 0 +230 172 0 +180 123 0 +164 164 164 +82 82 82 +16 16 16 diff --git a/graphics/pokemon/mareep/shiny_gba.pal b/graphics/pokemon/mareep/shiny_gba.pal new file mode 100644 index 0000000000..587f7493ff --- /dev/null +++ b/graphics/pokemon/mareep/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 213 205 +238 148 180 +222 90 131 +172 65 90 +74 180 230 +32 148 189 +0 74 148 +0 32 106 +255 222 0 +230 172 0 +180 123 0 +164 164 164 +82 82 82 +16 16 16 diff --git a/graphics/pokemon/marill/anim_front_gba.png b/graphics/pokemon/marill/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..51e0a14443939d7147db52698fefe0e69e1884f2 GIT binary patch literal 933 zcmV;W16urvP)f0Vq{hBVn~-r@6Z5TjuHi{Z4_ZfKaYyvr-!w3@j4?ZdHclX}iIsQM! z*80EYJgW$}QV;cB5Zi$(9_IrOJnI5Q;Oa!phF0Ko2A4R1QYy6piBgF`K&bf?fwZ(r zGFM4Q%2cQ<`^K)JYZ5Y>&c;~B`5XZ^4B(vsY-Q6CN5O|I^XfR3fv;QxFwcewjsr8t z{0cMh2q5~xCYWMip2k*Z2j@LG0`S=6Ep$tO+iAlXd=1q5{k~ZP8;ddE`UyaXIoJJu z=|(VeqwqlhYs=I(Gf-$sk3?X0->WUx;Oemop&zHy* zmv&gl$%#GdY}Dq(Mn>a4C5wKAp$;HH?;L!-vp-Apj?0ep#j5rnVU_=FZnIkK)wT` z%1@tnxVk0lPGxK>g2io~-IB+jlVwoQ(W1jZz$*b8d;v5NFb|quwsZjm((*!X z%Hbm&z29mER`We)IdCZAlL~jP=@#UW%XUR;o_8^afru~d0CpJI!t8;l^#7XfFpjDL zO|*R5CKp5tFL|Z?Q+vNkwcyR4fU5qakP9mc)LQo^e@{OEBfV|@Em8J_00000NkvXX Hu0mjfDYUP& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/marill/back_gba.png b/graphics/pokemon/marill/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..49bc29d97ebb578474cd9f839c93905eb9928d73 GIT binary patch literal 514 zcmV+d0{#7oP)KlRIw1Fbsw>#DlYC$+kfNM&Vm%vST zH4aZ%>S0(9#A{I?91NNNho2HfZ8q=tpYgn}>r}&SUeb{3ySfHE+T~PVt~v2jU!c_< zy}&gyXlj7Ab0{w%wb*eETE#U=U;_Y|0A&E!=n`NwNi=|6LF+f10P-%y3eZa8?+PFv z4e!qbDgnwKkaa$x126*+C9uv-bQLHE#%2K!b=t}=2@Y_&$^ouz0HCj&S}+-&5y-Vlw|4DV$q$gGR5*?0l09z2Fbqa{0`U&^o*}H~F3M^RF_$j7TqmE(NHQw| zVy$6hOOEAsEKnc_#|QGGejdPU7y2I{SU@QodJCcRB{0I@rT~G>S6_mLc?$wJUGLZ6 zU^#T+Vbp$Uh^0MhPGjLl%?99&sOcu4bMT4i)5iI6%!gA%A7W(P;%ch2Q*k&qXjfJ3 zfTErqQw@Ok;=-49*uIEzzn|@W>tBQkSs0L%Ba1MYejhE*!dziIq*Zd9g)vWnM8q-y zog~A07RCUYyy;A|H!)+`qS~7Fy1lQ$xKp)r*Fu^dOP)L*b!TTRV4bMZEoDn%Vg0bW zwWF`f zFhXDx;SiuV3nC$}WuOFUiO0UviUHLLfD2(}NH1f65ds)(R>H^hkjW*&5j2DmjwaE+ zaO4t+C{GaHQ$mrKjwb^JF#y>|NDqO)bmTD-*{TNl8bXDz1gK>1B@J6YXjs=u07QT6 zQznZrzSGFpT7Cwk;=oQdqd(b&b*co>JZVgXVPtiYH{0A_2B?oT+<=8H@&V()1ejNu zc$6Vx3Y7t4F29KYPX_c72sjP|07MFad6jB5t7FnU9Kw45_|Y&1D0N&X&GcIe?;+2x zdXx>W=7AdCDJlT~VFAuxQrDF#BnW&d;}K=vI0UYoSOukNDrt{7-mM)1eB^Q&fEYo6 z7eAexhJeo(fRsm_%SxwXpH2Wj1_Us*XGPmSvBDB#{$9?f`;>a5{Je8w{SpB!85qM9 zy*zr}vEJC6F&IMv_;^UEdrk6()|+#CKppo=(wJhN0G^p2N$n{M)a^A=8`LAJx37}$Jy zs@HSy#Y0AnIi#)_JK5{8**Z1r8Y(nLZYX->M88L{sZ$`4%MjQoQ&dzxpA4OJ@3x|p z%M_=xHL{cSOY*wx1AIZ|AcPcske>k5n*yIv;_}fXm1~i0EHP`D8AG+X5h!6#&kYW6nI(m`WH@>8>{R^Tj8i^22Pi0@;LA z9}_(j0+SahI+TFAVOCLb0Q)`J&c5?fau8Kr%Mh4`_u1rs{>_op)OJ1vp#BZ4<()_g zP#6eciF4FZ(9Kl)sMCKoG`VIM+tb8)O_qpRrR%&L(waW9mpbZHIXc zUH}P1K?TxBj=8BW!V>S*Fc-IXrOyTDH?Khui|5(=l`n$4+ zjna6kzMftdl@?>Y_vEP|mq zMBj0o7}00YGXr4-AcEPVMIAay$G+LZ2B*`-if8};dPkl5%nU$C0F8kvh#P_E2w)OV z3>j4isDQ{b0Fevu0IHDTSz<6yK&9jGVNct#7W&kJRe;ZuKnG|q-3cF^Ok&Mqj!I*b z`N>4Li2b85Ia%m2&wTv7^d8oH^anB1EshEO1fc=2tn(55A&dJiM>NcmJkA+ooa2CT zW(4kUIp=c0iQ}dYWhNxmV&CH2w7$%inaHKwzBZ}WuFSIUney1a*c;^gjH*~>S3+!G zebV%{lCRceK|ucD+2=YyOG#R1MJ5QiNVG8*`z0+cu2+;nGb> zdL?pt#nf>y0wrY>5tz@DO|vNr+6uba0grJ|Umby$Bn3Il1O9aJoY%KYy$t|r&~#vS zi;I`_4(e(H4un{z8v@>48UVWZ!4r|nRLaYb@3lWrFUR9_$2XkL+}+}>;V1v?`U%fd V3`{4&wWR<6002ovPDHLkV1iI#JktOG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/marowak/icon_gba.png b/graphics/pokemon/marowak/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7efbb17797b0d6b86a5982dc7a0ed6a0e1a24bc3 GIT binary patch literal 388 zcmV-~0ek+5P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I0!c(cR5*?0l1*yFFbqb0g7^-~z5?q2Ij1)Ec?tu8o*-mbD8|^U zK#Ho#Ozb4<*$mZA56M5g&zLtaIk(mnktB_lR0?5_b%3xCkxLc04M5s=EZl)ZdrKAc zL>U*}m$DEI4!K@)2fwg{dTlP`KEwf`8=xNHE@Iz9oUtoBvz zQ&fhec`0hY<)zT@rSaHhXVepL3DvE|KEuK-QD)5`C;3azIB;m7o8ph!pANt4B7I-% i&maEO>&$uJwe<%K?T#A&lEiWV0000P)^m0fWa00001 zbW%=J06^y0W&i*L5lKWrR9J=WmcNhNbQHk7F~wHsj)ajA!?DyuhpwKpIbAAMfbtDe zMNx;w%k|j!H`rS-7KFY|I&mHP>>dLQXFIu*B2v{oyQ0_W9DjMwPKfXOwOt0pQ1!dS z@%!YxuYcsdkEXqQO9;^!*9U3QN$7T3q_4V&Wtyc~7jQm6peuz=KvxRGMxb*SOWbAA z1)LMmRpWf{7Coo7oE=JcL64(FR1fA8`2LCXDEb z>L+S~U*2#JZrwa|ZsE5Vk5%9i0f+FbAN)3l2w>#ga5bGLmr@-6 zsA)saF$}@T898p^MM*tH$d3$XA1HoGfHPdf%No#|@|EixU_AY;KXMrRR(QT&2l(&K zjp5ySde-mv?+w{^7r5Ozkc2u1^`e!x4B^+d|@V?oPfaa| z<9`1`)4E0pI6(a(3<753tETyhWm%JifO-N=%ZXT7)mn3^aQUS$fKt3J<1tqgU zfQa~dLjp=c>ltOZPI2`=EC@I?O8^?;B@y6Vu&ll2I1=%k?t=+ITaQ>LSJ+qPp0dB) zMw5{<{02IJpB%?w6<|o+N*8$6c!a=^07IPH_N7GFIfRyv2-t@Oh6iaX0ck4!0n&0Q zK)M0^xS+W7_gdna=pJqIejG1^P+BUU$fHAyvls!T0`;CW@}Drq#t4)(Bmgf1Af7O+ z5c#nvlontN&JdWd4&oR;i%e|+%Nzr=<^X=7RKOH#z|^!5XlycT+|J13vX-AVFZK2i%hZorio%dJvU*aKYu4uH&3S zJqU4lr=$nmlQu~J>H(xH_n_1R8PF2`*xARh%iKy2YwhkLf0{(i-r@p37Y&_GM}L^pfkAp;G(6CCcvd~e904_4^9N%# lZS#licHZU>#=GYae*@$!t3FlwnT!Ac002ovPDHLkV1hIDFNpvE literal 0 HcmV?d00001 diff --git a/graphics/pokemon/marshtomp/back_gba.png b/graphics/pokemon/marshtomp/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6c530aaee87ff83d3a251950b7720ff2c052b51c GIT binary patch literal 748 zcmV^m0fWa00001 zbW%=J06^y0W&i*JYDq*vR7i=$P7L@6s*4YB$*$<%GRp}AMpL?`+n$IbUOdxVp?mjo(Dm&_Ufuu z9-s=87w82w0A;&D-mg`u+JPP>-~*~Y0qrT|n4u>}7Q6uTLIOM~gphy_$V*lFieP~O z+H>r`0Q8^>UI5!vuEeZ$94aVrC1AB>3BXR!Iv=E4l`0hvoD1=I7Fbk}fZ&`@geD7h zVsKZftpV<%4_MUrINR>Hf(QiML~jt_i6goa9;5Lm1^HnPH&FyJy1ba!Y`^iZor~B2 zxFQ0I#1-5v2)O%bfiF>XdHWWDIbT~~+Sv>qCd&r6iZ0*tsaTqhED}Dw*bIbQ1Vpc) zTniLa&VLT$Lm-ah0veVYK=B3taR^+!0$>4vn4``Ts683R?;LOs@@)+fY|j}OaQ@r(mMt~H@0m#Bs zXaH00{Ajey8r@ zri0LVyZgTZGSK1Hww+>d{~N>t&}`8AssZ35AnOj3ZXhz!mAz{ieGWpcsSk9VMn3{n z9)vrXhjg!NS4OSO%0rxonboy+4p@cOL}?l+%1`e@7>5#fC>)3kb@Q9+pbY^oB>=V4 eJ%23!c>M*Msst`eN@_p=00000oneEP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hq)9|UR5*?8k}(d#FbqX~0{0AL<_NtHOC>h46mhvqEba|R+OV+1 zZp*?_R3sLh42TuM-~8k+dw2j}mSsujVim?54DSI>A?@%aqCr6+It}hb)OKp2E>ken zGnLJ5R2vn|M+NY&ec!BO}jNPg;?B(oP)T3gIBkC2fdmj}5zF6l~1)>*r8ek9D ss>U+{Ka;;Oi7+u221Pjc13&iT0dbOn;{rSw^00001 zbW%=J06^y0W&i*Li%CR5R9J=0mOpIUMij=61Sp`BOtMoa>7=DV5u>8osYPMwWQ*CaYQt6tpKoEFoml{a8W!BU=+B6qRi^RxKuW-wu!6=X$ z4C>yG@6R2~??dQ=Symlza$Exh<2wQkS_4>gS_hop5eRAki&A>L3z%F{mXG090kex7 zFb~S{2BnN;a~dkp7-uc8*&lMRyQcubxdblQ4;k>W0z9CP^A=(Wn8OVKna6SnHjCrq zVhfFc(slZDLfO+e7O?TT8m|Dl>wI>IixwnslRmo{;IkQ>o{8s&Gsa@kr8(Hk;%qhz zB|W)(IT=1~stlZ3_RboXUEzKH;MAb=)=8jN3; z>9zR=#IK(z0D4b(5dbVV-90KR}- z{&timI8zgR`fHyIy)VOzfGU?7@X5b_LXX&oa2QHVYr$PEmz^Ho_d|G@zaEA^sd4lV z0Lxc+ANlv8O?W*#TbF>>zt}chm465mMBnOhWPH7Rz4#5MyH=7UZ;+RR+jN-Wb@yZCp`?T&T>W?cs8 zcXu4VVl@D&sqlZVI{mh4w6h*))B(X=0l%Q%jlxjy$=8A4u@2lX0s7AqMs*j`pn3+- zK=wr6(128Qp6DAIz|~m-ZZ&Yl7!|^Jkd;({21wFO3S$atp@x~9oy^Mo4`?jI)XXRgj5?Yb-`0C4|c zF*X;<9cdX5dKZqlf3Pm*Qn|x|J~h5e{X-y?yCChn3*jH8Qn{mI0>wWFAWr~_#T7*H z4n;{rSw^00001 zbW%=J06^y0W&i*JH%UZ6R7i=n)Vpq@KokaGvl2bS_yNMOT`FH*Aj#AS7np4NMYJha z2yGo}+ASi4wzpR4ws6JUL_Elzxia8^Z4wI0(tQ5UnKO)6tNABeSmTdhq@N9rp96^9 zf&+Y^H~#~{GVm;L{0Q*f0q(AVKLemgStB16T06jx8F12|N}b@56|xDxvLmny*b#Ua z7;sYC$n6LNe8$1c0w@76mQHJg2AmlySfRiWf#Z$*^7O`-+9!Y^BHS8K+Q3A3aiqZ? z8`L_&Qwjdt1iWfMA`6&ZRBf9sfR=+-4dOtyV3lZF04l-)<;nEGL35b`a~86P-(6|} zXyI%C97a_GxJW=0DEXvEKtur82q2Dvr2}X>5uw3ZoVEhr+6I~!fk(#l3nli+!B0^G zKqSG*0+njwA^`6aKml{mCnTDH8W0f*;Pc;?%-pPLhP&jMh=VjntgOm}1)Z{V2ps5{e{<@IJZ!N+BZ|GQ4%)--%bAM1coC ff2Ta-p0E7_tC1xlw|-gD00000NkvXXu0mjfMBgxF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/masquerain/icon_gba.png b/graphics/pokemon/masquerain/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5487241e2c809a214f687b501858e78b6478dab9 GIT binary patch literal 371 zcmV-(0gV2MP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H@kvBMR5*>@k}(RxFcgM!g61#}TDKm;!2<|y5;_FQ=$ffHlpq~~ zy+TI^i2=b@5Mt7#v=&DPHIR^e@4b+`|0m>!2AzY}j4?BU$+q43SnU_?0nPFO^dW~+ z$Gh5xCg9;_3oMkRMGq)Kyn_{lDno7K2=^vn)U{b+|KfO8e>a2nMQb|@$62RlsF@9pq0^`8l9$h&cg RlL-I-002ovPDHLkV1khNq%Hse literal 0 HcmV?d00001 diff --git a/graphics/pokemon/masquerain/normal_gba.pal b/graphics/pokemon/masquerain/normal_gba.pal new file mode 100644 index 0000000000..54690d35b8 --- /dev/null +++ b/graphics/pokemon/masquerain/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +65 65 90 +148 164 197 +180 205 238 +197 238 238 +106 74 32 +205 139 49 +255 156 74 +222 222 205 +255 255 255 +90 16 8 +131 65 32 +172 16 8 +222 57 32 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/masquerain/shiny_gba.pal b/graphics/pokemon/masquerain/shiny_gba.pal new file mode 100644 index 0000000000..09ed3ccf59 --- /dev/null +++ b/graphics/pokemon/masquerain/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +49 123 74 +98 180 98 +148 230 148 +205 255 172 +82 74 32 +106 106 49 +164 148 115 +222 222 41 +255 255 41 +90 16 8 +131 65 32 +172 16 8 +222 57 32 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/mawile/anim_front_gba.png b/graphics/pokemon/mawile/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..56261208694d434c4adcaa8fe8f3501d910fadc8 GIT binary patch literal 1448 zcmV;Z1y}lsP)oJyQ~IRF3v#l^*>q@;s`gHlpbh5~ZP00001 zbW%=J06^y0W&i*MCP_p=R9J=WmoabKMij@{ZZ^>}_LQwafJ`2Og6fn})TE(MN=+L2 zDGJ(c#sVP~2kj=EjKEGgfwwuhrBU18UT!;nu!G4RiDc*eQ(R|rHvp#%tk3oZ*K z5E$`k;Z8K$jsRBVFyiogz!0NegSuxVzuQ3wtIGX%(<$}%S!ZQ=#z7r~g= z4%_xsnU+|4W^LOq`FIn7@3yWE6qY{oD;pMg*mwlMH~p(06*cVx0SuuA3hnP--)|}) zkpQ%J0K9~Ata1cCZzGV5LE~+kaL)TxenMayc1Kavq=y-Q2ha0qzd8eeH0|s;&cHf? z5H^{lNc1vx4eS&6TyAU$MRj{ixsL!U9M=F)+~vET%@vNHpaSU~ecI5sL($>gC0`65B|?faw$h~U^Tm=FWV3qmNHoiEZs4MzwF(||qr zYdhO*IBTEYhM?JmN9pX!WVb-=l zVBKmvUB~ToZtdy>UN|W>&DtXnSlh9iw&Rk-g=wfS`bS0s?m=0PfKCz!(2i#i=b-0# z2=o#_WY-_hlUSYp?YSM2NQnULWw6KlQmLP39c9W;A8bEJ%Nd zb5)7XO5UyiX?@CnUv2+$c)qH;f_->)Uf3CxPu>o(wT%mbmK_1SNP<9Pi-3ak!IJ-U z70`+SXpZ^aH)<*fz?+f_L~Uyq8+d;Ijs&)MhcIQZJV0wBU=N`fh+N={R9e+I85D>>=+rq`y1?T!-NsLP8867dXXAHwm#ADgB06njvUh332_5 z0As0?P-FWDzi8d>Gcl#f0YW{+Iyu2=%tgK4=(Dkui4vloM)D&R5dAu=009VQ@q7f} z^ODBEz}*L89!4+;Z{mY0H3taUmqDC&>WvkynELl(06XWti1Usu%z{ESLZAWN*|wjH zSOTU58JmGu8*`v-I|K@wADsbZIQIDXgMryJ5qP%u>mHlub|5G{(mwJPN-yiCQK?iB zIQr$eI-fmNaP_hBmk$N=(liVsR%m?fs5h-KDuEhQOI8Par4o!GNaM4nlFciXp#UBv z0Q!9dSQ@wlyV0Ptu}dI%5RiGmJw~A&P{)TkD4i9N2cx>ls7Fr@AhJB5TrM54fjb`{ zXe!9aL#d=w0e6)hAfk=dQJ}0d;SrJ@AQmB%bRA-JaDd1bDix1WFY6^afSZB=;yf`x z+=Nipb^Wopg6`i-4-nXwFa)scUy5!MdN)fA5CCkk7$~uU-9?Gy0D-^*7$3@Cd<7od z2!Qb*9l`|ywTG{naGSQ>C3}jJZgi}Vz~+`5v=KC2SM5{0wh}?Pyql5snE4? z2FU=bz-+2gv5r8q?Z6O|1yBKUtmD}T^fC&pU$0auST+KfAH1%!975e}Ff0n##^r3O z9{@muMM5<*44R#QGOAKWyNkymQ+C00004o3 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mawile/back_gba.png b/graphics/pokemon/mawile/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbf44ca9ca9e3ad3ecd7209d9f58bed298869d8 GIT binary patch literal 825 zcmV-91IGM`P)oJyQ~IRF3v#l^*>q@;s`gHlpbh5~ZP00001 zbW%=J06^y0W&i*Jw@E}nR7i=De2cIi*FzE~{yuN}Zr>l|a%u6Ifqqdi3&a=s7fa1*UH;#`ta z?gJv!Wr7d1y+W=_neGCjB$H)|7MFOe)MXO$n>GtksY{u)01oFu8eqE(2OZRah__vK zcoY~Q+Xm9wBF1mo1_-AH?w@Z1aYSn%>GtEzL7+!!RWeKzSDc zBHIKq4zvbzpEsL22SpujfMiWq`X)gcAOYFz(@wPxz-mA;XaYgFKw|(Nk6HnH87>kK z>%h+w16=(Hudyh5Bv&csB^G-)`9$<4lm?` z_w-$yn=N*iWewoMb(7)8?rD&lg`l|43dkfIxUM_={O$BIjx-<&pfq9Q0zDu=X0Kn7 zK>8H5g1LpPnP9ZK<~ITq0i7UdKh`rDYXK>XjAl#pjav!kI;jmOD^Zr$vL&9@8?|} zvuf*@Cg;SXlPPh}{pv0PV4x}hAAEX%F2@Z5R9T|{ENeU>WP~&K4WN!nK$BA!0Rs4U zLc-S@18nx9c4@(n0UZ;M1%lai8NJv*8R6w&l_ zaSY*@nVbLwRtFADVsNUFm-sPJpr48PF(cbIcAhuv5;LSF4lpo$DV$*k}+<>FbqX?0vYWAESOss=?2a9?4<@gnNtvS>(DdF z>e6&@Rdq=+RHY@$wlZ}MH$Ht5g#Ksj-phNN^#y>+hyx-00000NkvXXu0mjfPPM#5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mawile/normal_gba.pal b/graphics/pokemon/mawile/normal_gba.pal new file mode 100644 index 0000000000..ebb40809c5 --- /dev/null +++ b/graphics/pokemon/mawile/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +205 205 205 +213 131 172 +189 98 139 +156 74 106 +0 0 0 +255 222 139 +255 197 90 +213 156 74 +156 123 57 +0 0 0 +197 197 197 +164 164 164 +131 131 131 +82 82 82 diff --git a/graphics/pokemon/mawile/shiny_gba.pal b/graphics/pokemon/mawile/shiny_gba.pal new file mode 100644 index 0000000000..ceadfc93ea --- /dev/null +++ b/graphics/pokemon/mawile/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +205 205 205 +255 123 82 +222 98 49 +180 65 49 +0 0 0 +255 222 139 +255 197 90 +213 156 74 +156 123 57 +0 0 0 +238 156 197 +205 123 164 +164 90 131 +131 49 90 diff --git a/graphics/pokemon/medicham/anim_front_gba.png b/graphics/pokemon/medicham/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc0762c41cefbd4d4d51a29a8204407a73e710f GIT binary patch literal 1055 zcmV+)1mOFLP)Qc3^-0Hlj*q@<*SgMJNR9J=GmN8G;Koo#)2xhA{hN{yA#tI3i3@}t8mn<2Oijx6U zDX7E~YRZHJD*Y|3)DFo|m9#{Hq3Qz5LDUXRHR;q24QHlIcHDb*5>R~aQnghp^(4sf zKEHQ&KEL}2`QyVVj{zRdk4cct=u;Ss{U$){ygp7g@@4Hpin-FUf2=7$(>{Ov6^&2K zQR)j12OdyL@Ao``PGU&{Rwyul<>ny6nGomdIGtH|L64S&aNDZ5L8mJKux{1osu~8% z2U$upEIVK2%AIh^{>nmwu?=fpoq~{#U3kk_iCI+)m|~3O9#&Wx+3n7h&6d}LvO|3J zLT`O&hacCwgqWAz(U5@uCg<+wJM!V)=w6x~?!mAB>8|URi77@C^aMY>0&r%+sZYXSOm08pE!}suRrmSHn^$;(=S|MHZXZ3t zfv5bWcHp2jCTn}{&P$u+Fk)$SPaN9JvXC~FqJ`$ScQS5S>J&?Krup5@0-#KhqI9~s zW<%V%r%pg=p%_(A*8pG|fW^8Jn2>RrhBX}48ovaj>M@W7K-G@dYWuSN*o?s(RNZzJ zfJ~0b6jlZU(g487DOL$3EXM2zQ1$DHx=bLSjQ~XjV#xi2SVjJo6mi++vl##!Ih1j@ zN}}v|E3d@U)AV|W!D%ybfH-hobwJ!&lHFkh&3LU+7-C6o^@!KSW&w_lH;@X3ucJhy>z2<_|-G0Dn*(+@V0^5r4QA2-F{j z0cfiT7BH#qc%NFb8&8~#AT zE3@Y%W*_@QBq_oZ2?2@yAq2tr{h@_D5Az%653&P|@dvW) zOMlQbs>#<}`a=z$#a8SO2RH!!P;x3Lup|AU$Z&rkt9w!pvZy~0R%q_VdZ11L{;+GK zmw)UJeLYb6L+XYJh0Q(>%002ovPDHLkV1n+h@jn0n literal 0 HcmV?d00001 diff --git a/graphics/pokemon/medicham/back_gba.png b/graphics/pokemon/medicham/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f4f58839b4c5907a6180efa47129ae556e5416b1 GIT binary patch literal 696 zcmV;p0!RIcP)Qc3^-0Hlj*q@<*SgMdP8O`+zpoR~CmCU`P&Qk8k9jOQI zn!v)49^u%!5x)qXfRBsdL zB_%^ora16SC5Q+a$rRh8=S96ZR>VN2sD*Yf7vdIrF_gH+)^j*Ru>?Yj6ruAW>}`91Ut-5lRY8a2mmDr|O84FIp3q%G#mjxB)JlSy5#h}72 z*OdDkb0va}Sgvg%5a(u^Ko>P~frCu&MhC(MrotouJ*!ssBjVSBtG6zI&x^Z>{fH=_ zE|V#IT$Ce!f|N*kGOg>PSgXDI$S&Bo8$YS5(v}*4frJj638{fS0RVon9{{e$Ma98; z0MgR!VD^j z7W3l%OGGq*0WkmDBGH0Yb}WDi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H?@2^KR5*>*lCf>WFc3vK0l7g65vm2q19*lsDcr??S)`DrG7C>d z7g6DYAVk=On(uR^e;U9@uDgeSJQ94y{Pl9sJ(f}TaV#o-xrCzf0(fLu4qpnO-UCKn zgFX5ON9t}jqtLN69Gl`gTKj$MP*(s0!1wD&MKjN!Ew%5edYi-Dw~E-aZ(|~Gi=T%$ z5crM5j{-If;l$vY(-bm+oQ%yMMwd<9i!dD- zriSlW*1CZ!clAA0kXhE11NOz~DNGFquFWVTO$#mIGW*Ml6^-%a-oO P00000NkvXXu0mjfY`vgh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/medicham/normal_gba.pal b/graphics/pokemon/medicham/normal_gba.pal new file mode 100644 index 0000000000..ffc38ab86e --- /dev/null +++ b/graphics/pokemon/medicham/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 213 139 +255 255 255 +255 156 148 +230 123 123 +205 90 82 +123 82 74 +0 0 0 +164 139 106 +164 164 164 +131 131 131 +255 230 131 +255 205 90 +238 238 213 +213 213 197 +189 189 172 +139 139 123 diff --git a/graphics/pokemon/medicham/shiny_gba.pal b/graphics/pokemon/medicham/shiny_gba.pal new file mode 100644 index 0000000000..9a1d82aa73 --- /dev/null +++ b/graphics/pokemon/medicham/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 213 139 +255 255 255 +139 189 246 +98 148 205 +74 115 172 +74 90 115 +0 0 0 +164 139 106 +164 164 164 +131 131 131 +255 230 131 +255 205 90 +238 205 164 +230 172 139 +205 148 115 +123 90 74 diff --git a/graphics/pokemon/meditite/anim_front_gba.png b/graphics/pokemon/meditite/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9516ad2ddbc7e5922a9517fbcb17517ff4df3b GIT binary patch literal 744 zcmVP)$lzV&sgKFklIkZ7Bv^iRHDM0`L0L9+_i@o+@l+8+WtV&vQquN*X00001 zbW%=J06^y0W&i*JW=TXrR9J=WmN9eFFcimq#8Zak+Awvil;e(U)$;(p5@JSpb5#+JNx@c%A3U*1pe=}A`f_q;|A zRjqLizy~z|)Br6?Vkf{Tai-ve5mySIX&`jPDIo+V)(H@ufB;yE_+$$(uoP(#Q-J~v zs)48gn5{+u0Hu|HFSr3HV1}6(m&a2Mtj{Q*LVPMEp!hQcIt(JguiX?r2oMLH!|~*C zm;}5606sf772-(t!h{E+}_=G$hI->6OQbuLQ4MJK`?T&!g>Qc!BK(EDr=MFV9A=GmwI z;r>XeYYWhxf9dm{Zqx#J?OC5tby;fQzx+NPZtHjr1ccg8zZSmMt_1qUb4;L7qej(o zpF5QG(*38JlZp1B#$P;Qb^d~p!Pr$nU+x28jr*XlX2*XJX9lpj1MMHSfUVco)?XlC zNfB)UyxuJaqp&begTYLKYM?L}CXNQ9V!SaJCJZ4X4uc_hXf+tefY<(>;FUlC{8Y|3 zOk^)e0%0>4LL3@{QFb84V3>s@5IYP8#@z$lzV&sgKFklIkZ7Bv^iRHDM0`L0L9+_i@o+@l+8+WtV&vQquN*X00001 zbW%=J06^y0W&i*Ivq?ljR7i>KlCe(1Fc5|#k;wyj2b&2o`7)&osxwtWykaCXxkBt1 z6$w_i3~Y#~eE_H;F+vGvCrz5vgbfx>iX!>{{Qq~C1i^p(Ri!`ZA4zvfmH^~n<1JOtiv76+aDclHASvq**nk8;fH@fwq&weT zP;>wgP?rQwcP9xU7D*TAjv9i9I{-l1nIy!M2|jV7#|ZZTAzL7EUc0*xJwRF@+W{nM zs%;|M1IUF?NYy|Rkhs5XqVSPbMuJyWI>~~)BFavuoT5B>5Ja22RKD|-dzIyDj#YYq zg;hWEy2`?y6|G)GX1zA^t!~UiSw=6bMnAls>bnzEmdfht!x%%KO$$U?Yp`+_Tq2N> zD|0`(S*+HLg9VmuEc=zuam2@w*4NX<<4WIFQi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H$4Nv%R5*>@k}(RxFcgO02@>c9gk;gBg#^0xFhZ}>xr@DygNG>X z;vlg$APV9$-Tv1b)PH+lUjAhGh_)6zt-xH#nQbLjw6(4f7rb=_SEBO*=mZRc$eA$( zLq%lf8CK%c`}oKv=qPXRGV;=S$3E=K0 z1Vipx0aP%dCy_vZob3uzAB8aVNgX(A<|GUN~Am*$9qs{`600001 zbW%=J06^y0W&i*N>`6pHR9J<5md|V3Rvf@}utQv$(8o5Mdhx~Hxra(Vth6v{8MZQy z5L=`@xMbPzF-0dSgC2YsdLCrV&{91^%zQ9g1Uc+a24zoDnFwj4_tE$L_`dhPA3+cV_o}%q{Li!6+;y)2yKFWW1CG%Aa3#3SrhBxb zZoBaHvk(6)4#2yCUrWyx0T@6?JBqR)2rFmT083AI3Sw#Fx*-bb9j8z%UPl11d1t3^ zR}{q({>@kdNEhzx6d{5rLI{(Pvw2{%;1up+1PHNARFYo=hzbJYla8iob0Hk;q40pz z5ZKCUnxV!+I4K-L_1jN)ADX7?MlQY%-vJ=Ly9@w>QuWsuv4cYxUVh96v8C%eHRk## zI7QKRe87MRbHLLbM+D#_4m{Q=Jh=(`Wd_t71g`ij#8P_-fclpjSy0~67>OQ0FHDoF z6N6+~41gx@pQqDy8v#uvM?R3o_Z6k?0~bAra7cAMT=KLeiOLooNgm)%+ceLpVQ9Ho z9~D#6N0Q8Ya+zu7O-gkmOi5a4AW-svDPu+s0NRS=Ed4nEb-BzF%9uLA#fUBVMB6Xh z0q}|(BJiAl>Tkmud+~sI^Qbb_GS`CjuKE4El*(_32UI3q)`2nbq^FBMkWp;PUU~~w zWenDe@>y<*0iZ#rFZmdx`UECQ4HXtrDN4aqI$6s)Jx`qJ^1msx+eAiYdOz&%ypRU$83a~7`G|1b% z+dmNv&nHy}2q?iyldJ}7lgE$yFk>8}fwkI?PfqW@#{b!8u>g5;?0s-^oebBLC3MBMZSU>MaDDhD(H>_LHF(u^-S^k=tM2<% zr`c@oUS8AgGBw3dPT0hc~ab7X;W&eX~=*+FcQZT_;I6!b7J} z;I(^0So+sV0;xL~z_0$#+(ZZm<)G-5?hVkG1h5Kr5tQzdu(TKut3$6c!$cB-k;by= zmu~1IDHthi2ukR){d{DYe3j~9YF09N81fy1iwyIy5#jT`Zl*QKQ2aop1%i=cjJ6NT5=Tm&V8rK{n*m#w##pAfRUmRQ$rr1tVr4 zg7BrL?Tb|pcEQ1dF%ldUoavD0tx-<0E(rj2cBTW z4Fp0!rK3N3Kp+?q1A!1WD1`?|pIfHj|&E5WHY>}JD8)mV4#6)J_rGb z5E=*w2K5rMIkN+ZKzzZNF!Tp*AP=RWkBp|z8wdcYf)rkIog5fLXdqqdcT^Mrg4!)) zpd_)-K$x1d`h&BF#Sq9?;14V`5QZg5Y1}Qw{J~_S&_GP?59c$%009AgIG7m-SCFa{ z0xd0WASQYgFRUK03_a+3y}&?RnB^K($8x3O1DOu@hnay)VXXnEhL`;-6p(3;`3B;0 zpM)(m_JQRr9tRK%&py&!Y(K(NNX@NkmW251*5xWwkY2ZgQ!O7 zfncz1RyR1n%YU$t9c~~70Rv(EEFNIUrZUrm3?Yzj6pX#ww42541!If=H!KSf6b$%u zzr%N^Ip|H!5Kl1V(INwpt%eOlu!Q!L!)^0U~fKn<_FJ1poj507*qoM6N<$f;c8&!~g&Q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/meganium/back_gba.png b/graphics/pokemon/meganium/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..be01710af5ae0808efc8b31ec3f7ff3de88dd13d GIT binary patch literal 736 zcmV<60w4W}P)~Am*$9qs{`600001 zbW%=J06^y0W&i*JUP(kjR7i=9l{;(OP!z{CID!OBr_Kfm`~mbRv{P%#Lx+~&N1;Q& z&^BY%tLh6#3KYCaS6~RZC9xnMr65QP$)K?r?agD;bM&|p*1dB77+qQCr~f(UK9D5s zshg(B{()o_78XRMs-IuZh4p!6SgBseAfeVR*0igL02gv4nh{%o_808lf)NJpF+ z0T?UV`zHX*#}E7_CTf4P8v@Y#+{htg2?OoLW``y8o;SOIc{);ouD7BQUd0{FO)jw1%xE+Mw(Md6RKODk|_K&~plC9Vg$%z>Bj zTjCJnmVgv`wrwNe$14N^at%3c`zv$s+{^$JWdQs~&l0PilS?k{=3_Zsl6h@aHrFd2sczX?e9b)a_dmn+h(9{F|HOBxm-z2`YF!1rmr zqa|C;^8Ju5DbJu=yzbLF5YlSbJlx>xA*D2;p~rBx+)^52`a)rz4brhVgkzeb9suxj z(F!;rp1=G(#GQ7Qu4x$N*(j^w+V+;yY$sZySxPGcB0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IK}keGR5*>*(lKs>Fcg4cPEensCqPx1%F=et^ce9{d-ae3HU@@f z>rrx;Tp%hUqh+ZAq%N<|1{<){y|u*fK3SH9|0Madi(w4s$Y{c|Ntg*@P@ytkc>t87 zl!vShTSg^mO*NuHi;Un|O5U7O6b__Psgz=>+HnD?jvxiES`2VG6a+a8?%+`hI26Ef z06yOgfKN2k9uh=+A7H9;0Dl*jHdyTdr>0E_uKu<XuE|Y=Y1#A;!JUraKQ1&8e4EJV(XFjugF%+An_Mt>qJoyJTrh7o7^dtTf@$+{ z1|LkFN5RxNA9leUDTfdYQX}-uukVBT@L+>^q+r?sd_oD!C>RT6xUCIl3oaPyBY+F$ tWz)x}3ufDg)~}%VKdxK%&+E57egFy?;Y52@EOh_?002ovPDHLkV1kPr!IP)gNL&7=VTb5hk>IS>#K=H}+^oH5ON5R^dx|NpfA=7Z+6L7Zv;;Febn00001 zbW%=J06^y0W&i*J^+`lQR9J=WmN9SBKorMsK=KgDR;MyiseA-JKp8T_)Q)ToYgl?p zppN(gFd|1{u1FU)lw@J+a(~7_}g0vATWK`1mMeg%)*^JfIw?FY7C>2Pym2P0H+vx!_#^$5)Nf?;Dq$N;mP&9 zV3`X_38e}E)dXyYha@@A0nYO|1=aITuLBk(&ceZ)A><1}!)$a?n}U!yC5}pfXZV{E z+OGo+!-p>lAw+c|Tcfx20T6J6k3hLjWIU{|Lmcz8NLd`@FvkJB#v@4I72=uCW*h-0 z|JGPYC$ox32ENZBvyQ{4o>%YMl|jHGH7G=?-%ye>l^ut!F(-Dp8FLYta^fVolu>5P zanF=6k59@ykLW-cfz}j6M66_P0><8J9NvQFX6f-x`)2CE8;g27e*@3y8I#16Ahn9l}D(jAW) zO%Iz%9u^3s*i)W*UZby;tr-9XqijkPfo5A|$uaz@L<_{TaIg{#%NsVn=O`%rN-+AP zehsi$4&5uk$Y^~Ei#l0!B^dCdt~glkN-*$VI?=2{AqGm6f`NTkV+Z)2n6XkY#2f+L zZVZIL{Ss(e-Tb5W$S8^~#}vRIH2u9Kiy7p+5RDV{8<26LT#*@a6bzXcu4~LuFu0;~ zWz3g?Va{(9jOh)6G4+;$Ve$uWB^a8GD9aj6PAkD!;}2D^@rVDmegfa3aB#(0AbbD- N002ovPDHLkV1oMikDvem literal 0 HcmV?d00001 diff --git a/graphics/pokemon/meowth/back_gba.png b/graphics/pokemon/meowth/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d87e7aa145d92b20c6995ad8f7b40f4905bf92d8 GIT binary patch literal 576 zcmV-G0>AxgNL&7=VTb5hk>IS>#K=H}+^oH5ON5R^dx|NpfA=7Z+6L7Zv;;Febn00001 zbW%=J06^y0W&i*IzDYzuR7i>Kl(BNcFbsyXvEhf|0Xmci%9gucf#-l1;2Iu)D~t?X zoH8;LnUT8|3$`pcs$@cO2+*)Pfg# z1)yAjChc5&d9&6z0~4Z;<4R!J)J>arUYiK2fJsW zrlI&Fpfg0pR%?Ko23ueN3BZuBt4n~vrRHQItT{Jv05k_!xC+=CK;+oM(n}ZtunLd| zEM%D!Dgkvms>+A~1XwO5X~j;g+}o)_4&)Gy!6k65T*XFjo53j%zmnw4W-kN)U;Be` z^$-mm0w4YUAdPPUFM~84UkA)25o<@QtnC+X-ZG@-I2 zin>1pw}AyJCP-|eE%$q1cL`QtK7b zhKI$c{qeftF{O=Kh6z03_1tIBs7BC6Cf4!^Okkn$?oWvBK-gFS&xJQ-^2C)@_*r!T z!`H_bA=X_vkr3xHm0^#p44Cp$wUyTg6$MdTMmirU{ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/meowth/icon_gba.png b/graphics/pokemon/meowth/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..146c69093e1f9e94729e7726b97487bcccad3d24 GIT binary patch literal 304 zcmV-00nh%4P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hu1Q2eR5*?8k~<2*KoExK1UrST;2FdNJWmdK*t35=Y76Q z7@@;cn7Ga(4;>)pr5D0 z&CRT=tdxtCb82(m-rj>sO8;tV)k;!>&Hu&T|5~K~N`uuoVze^on~2X00001 zbW%=J06^y0W&i*LlSxEDR9J=Wmrrk_Mi_@VcHn=6mgbnEymbKEGOrDS_kr9&OO1CDET}b4$mdS5yaG9&p~dj zbC9`sw1=uiTyP-+x(4z~%Z7!Nv=7+NkmVV~)LZrIp=AYL;CiDGomdF~y^!E6Xf;O? zT7B@C3y*!UtZ^`<7m!7ZstBDW)&OJ{Ll%rieL9}f46sapHAfcSTDB)627i3h?^9|s zCu3NsL!;FU4_E?WEHn(CQVLG{kTEWRK`{qz!et+>h-BBs!B0N5;ZxhlSk7Yru>{0q z0I3x6jbVKCGXNa4y8?j)K&*zy!vuVg5r1TFUZ0*a__S}l4=i)Z6@Wu+J7R1~|2(@nJ^k^ZdnRKiU&P=z2oRACs6F?1$5K`|JB0 zSe^yoxcEB=za3CI_7;v$e?NP;**A>0XW)c2-~oZy&9Hnr`t{l{j91_=1Q?86M*&vQ zrvXT;3BWas6T?VY_?`;{96Uo>Ze3a*0OT=8;M(ZAN5-r0riUvT(BdM@CKGF5LuB^y zBs}W8g)fG|=Xj(R4gyyQ*p}r}xSFSby)(^sob#hjFBdWo5D0OI+1RpXHg1MSPRwIG zv}|tn2v27p5*j9Wa%c3i?<0UqVjkz%9||)iLW`-|SzM_W^?#d!qxNmy)1;KChBqkH zV!(r{08TIQN4RQRNc}SDF#@j8beH-A1R`y-&9UBjs`)S;jll_E>ptK0?o0$`W1l(< ztK0%ede79ez`=0LL2{vWX%&huJ;Xel)Z-pc+SCI!xAEkGzW6V|Z5ko5qe)U0I< z`!B##Qk)ano}Jn{i%9wr<(bs59+m@ zY9`;|%3<8!sb z&CRT=tdxtCb82(m-rj>sO8;tV)k;!>&Hu&T|5~K~N`uuoVze^on~2X00001 zbW%=J06^y0W&i*Ifk{L`R7i>Kl0i@7Kn#U*M@@gfo0i_A>y6B=`A^-aQ#N~IN{5drfBDS{p6u|}UrvULe5aX67 zKr}M970; z_D+EH2XLFNdrhEvk&2eguIK(x!N-nSnv#>+-9viPpB>A$0#5;`W$;p^K{r;ueI0gO zEz-S|g5@IkyN#^yMF1*TmCVn}JOj1CT3e&{zNp~(AK?0BZf#~0t0F`!J%*MBR^E@f zI>sCURQaI*qd*K$`*Ej6mLwXHiOsD5Nup;Q6mZ=UFh(;ry1=^uDi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IHAzH4R5*>z(oJfFFciS?oWL;MxvA7$H`Ald9lApD)2FQ(0y7s4TN5Wd(fKxQNerWVvt8`&N)2iPZo^| z4=+9p7$yJG#rW16pqshp(gV&iTXl0ktQ^i!{iunC>zvm61w!qD}Tfv~Rn6 zfGUBi79!zIv~3Hv5^YmY-=CBm!t7NL^&*^J7H1*sn{^O%^6O8y;qj*rzwr?{%s%9b z1N*pe7$zSp4#CIB0dV#aIHaT|ACZGYxcZnlOg;h!Vh&dyk%MIp7at=B)FiJy0*7qn hW8|>%!MlI;@dF;B|D7+u=i2}P002ovPDHLkV1n7)!NdRn literal 0 HcmV?d00001 diff --git a/graphics/pokemon/metagross/normal_gba.pal b/graphics/pokemon/metagross/normal_gba.pal new file mode 100644 index 0000000000..265dadb67b --- /dev/null +++ b/graphics/pokemon/metagross/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +205 205 205 +172 172 172 +148 139 148 +115 106 115 +222 222 222 +131 74 74 +255 106 106 +213 74 82 +131 205 255 +197 222 255 +90 164 255 +74 131 213 +57 98 180 +49 57 115 +16 16 16 diff --git a/graphics/pokemon/metagross/shiny_gba.pal b/graphics/pokemon/metagross/shiny_gba.pal new file mode 100644 index 0000000000..4ff89d816e --- /dev/null +++ b/graphics/pokemon/metagross/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +238 172 82 +205 139 49 +172 106 16 +139 74 0 +255 205 115 +131 74 74 +255 106 106 +213 74 82 +238 238 246 +255 255 255 +213 213 222 +172 172 180 +139 131 139 +98 90 98 +16 16 16 diff --git a/graphics/pokemon/metang/anim_front_gba.png b/graphics/pokemon/metang/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d71aa9ba9268edf9343ab89db8803afa8977cc GIT binary patch literal 1556 zcmV+v2J88WP) z&CRT=tdxtCb82(m-rj>sO8;tV)k;!>&Hw-Z|5~K~N`uuoVze^RRe)=00001 zbW%=J06^y0W&i*Ml1W5CR9J=WmN9SJMihYAK;0q=QsgZSU_u_N0{I29VQq;68}Zt) z?NW5<(4}k8sh$r^@+aDbI9kb&CD0??xb9$xk8%RHKw#Zb4cs(6b1cyB>AKdI1f-##p?D0w2c%|Olau^NUjQJ%* zWyAX9%w}BA!TJYRf%W>`kUKO^fD7*U3b3(y)8jVhw1f-&k|{P?Fpv)Cea<<6yMJYh zN&u0%;QKW00`$G%`Q~N;sJak+^<#fO8K(#i>h;bgK<+6BxToR-fHzhFIOE`dd*e<3 zZ-4k^0^q?Fz;WSp<;ETVo!Xm#7XX~M3OSrndCyk2n+JcZz1Ryp@ajdNN;|}@m3s8{ zyRX9$XFS=d17TVDC8}aPeeUp|thTGi zImE+a5rg444r!OeGumsHyAclG=>( z(QXSd1I2GdPR& zR*bX}{?%77jg5{OZ?;6VY+Nr_n?SU5f+T9{y~7{kL*(N6d*p%iz_{)(SSA>o>&=cl zCO@!QDN$)!&5)Wu*Lon!fO<2W`@_SN62Q9YIf*}zhPWl)tV+w{+8=ZhrGjDHfu5q) zpXfoEU{uK;zPQj`ZHZuz9{jO4Nr0JPTn5faFw|r}`F|Z`Ae|z>;q=CqM}DC)18EkB zGY6iLK9Hw8n4|`BNl~0cAAGgic(-zzej26o5hR*tSU@hU&`) zC`WMFK&sr29sVon1L|G`iGk#kq}O}O+0VDzz|%rKYc-#w=tr?|X8J&W;U)%>%fUn? zr4loJpyPl@8%WMDOk{RXDx_9JEz_4OM%u}Ik=l`Z5%^Rcbxc96zxY%hYrvHg-}8hP zkT?{D!>T$glmk~zaTE|BhAQb;ixa=@;L9Bm__Q>JWDe6Yr8Axj2yNp&uI_w_{@6?q zMNe&91Q6E<(AUgVDtU>ijEe;jAadnVl05idx+gwD(zA=5yO!2uKnH-~t$NmnInG8`~NIhgK(@pq~KT%WY+s{NP1; zfu!Ub7-WW$#I=@EeC3MH4*AolP-Fc#S%Hp|+xkjohLT2S)?ba9Jh}_KrxnL5 zZGF?DdQ%HZkoSXpkbpDIEdp59{<|buueRI4G6AV*3!_ z&CRT=tdxtCb82(m-rj>sO8;tV)k;!>&Hw-Z|5~K~N`uuoVze^RRe)=00001 zbW%=J06^y0W&i*I=t)FDR7i>KlCf^vFc5|{bZr7AUOSlRoHr;?2pZeGA7P_Ukwu{V z0ESKu($zdA=vG9ejG(K{{-h{ZMw<+seKuf8->3ghCuiBY&h`Iw;hr+*-rzsgH&?4y zjf<{SORAN6dWBo1)B+#G{ENTemJrrzfiL}K6rZ!Lu9RAq(IN7u{GFJ6t+g(fC4^FG zBHEn_a&AcLY7MF?RY7>1;-Zk!5F)f*E2TpKnccL3D46OXR8*>fsiFI61Mz`qy@asR z!~GC8lOFkvCEN>LxCp~<}vvrz!8r~s+c1VkNe#MQ@9&?^v8d>SSU5iNdRcTYjE}Mwu=zX#xfrR zymNlf_(!bb-57u!w?P;J4&1ulbEvRl=WJ^knJkOM*&!nEHh#l__uf7pc@X;jLs_Cn>s+Vx8@sLU9)EDX%>V!Z07*qoM6N<$ Eg3Lf1xBvhE literal 0 HcmV?d00001 diff --git a/graphics/pokemon/metang/icon_gba.png b/graphics/pokemon/metang/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cc095e935412d14fb0cdd08cf13b74c659a1d91a GIT binary patch literal 445 zcmV;u0Yd(XP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IJ4r-AR5*>*l0k~YFbqX~0{af$b>kjwuAxAQVOA{!avcW*xq`{c zg`f;sloUcVcH6X0H?tfnuk^94FX;*KSwY0iSuQmrV5W484iE04A`Z1Ctl+hNIcnpIjE__+l=-?l n--XTkrPN`=N1E#&gJ0tpB;p?(ee?%*00000NkvXXu0mjfAfmu- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/metang/normal_gba.pal b/graphics/pokemon/metang/normal_gba.pal new file mode 100644 index 0000000000..41b48bc089 --- /dev/null +++ b/graphics/pokemon/metang/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +205 205 205 +172 172 172 +148 139 148 +115 106 115 +222 222 222 +131 74 74 +255 106 106 +213 74 82 +131 205 255 +255 255 255 +90 164 255 +74 131 213 +57 98 180 +49 57 115 +16 16 16 diff --git a/graphics/pokemon/metang/shiny_gba.pal b/graphics/pokemon/metang/shiny_gba.pal new file mode 100644 index 0000000000..56c14cd756 --- /dev/null +++ b/graphics/pokemon/metang/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +238 172 82 +205 139 49 +172 106 16 +139 74 0 +255 205 115 +156 65 65 +255 106 106 +255 74 82 +238 238 246 +255 255 255 +213 213 222 +172 172 180 +123 115 123 +82 74 82 +16 16 16 diff --git a/graphics/pokemon/metapod/anim_front_gba.png b/graphics/pokemon/metapod/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..89843520dafd0112603b48bc4edf4092d05e02bb GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!VDxm*B3Eaj?(fW4U#=K?& zfi~MC!OQvP?vgBhb!=v*uEk_=t~*br=eW-JQ)DUb@yOUEcGap$^_?um``@4A>#|qe zwCSJQiDR33kF$%~PpCbswn9s4(Y8AbZ%s8^_??q9ripy|p|_#&lqy?6am-Z?j_3Z@ zN+TT#PWUvNyGKTqsbP3YeEkC zCt7LxD$G0a;o*KU=iP}F3wh43FSf}v(&9a6~VBCM2Cb z$5gby=-C!&@up{ss|CalRqqeB*9L;u*N<|x+FNS8bLjZDl~aDg(b60ZQJ>eg+a?Jd zE^ubt_m@w;J2QhpLf*vd;>Dg0SoV&guvCu;>)$9&Kvwl!VVpH`24?)*k90q26 z@#Xvy(JVrY$J89|FdpM`xWkal&QQlC@%tl>MC5;G@vV1vdNfS9=n9Nf22WQ%mvv4F FO#p3$^kD!1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/metapod/back_gba.png b/graphics/pokemon/metapod/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..42b80d17cc6b1db545303932cc5b77eb50c1fb21 GIT binary patch literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Qv)d@BiXCSG|hY z7zQP2{%80PM@Nqy6%Y^rDu9D&k1t&Z>SZhm@(X5gcy=QV$ky?6aSZY3d^^Rk=!gQ3 z>voQ*{S*Ao#5L$^mAi%9PT|ShwEQ%$(PqD=r*&^wuN3f{F0wkzKR#Z;V(z?;`O5z$ z)Gyp_XApg#UFcUsqTBX%PR9AR3f$$4%0j!;rl}V58^k3Yx>Pv9bb-0d^(hC7UNR|(KUJCTUVCNTA)AKPlh#YeH{K}w!0WIv;_)}@ z2G_eg4yRsdWGoOn^NKxyp=fLSuPs6+qK@QVZV+`@rxW%kh|zt@>E3=XVPToM%||Of zzuhatGDY^!E|q(;a<4s5-?X&zzFJnK>=K6OCz)pIl-JKn|KoUv(T*YRZ{P%H0bn39 Nc)I$ztaD0e0s!E)yGZ~5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/metapod/icon_gba.png b/graphics/pokemon/metapod/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2316b24081a1b99d39fab4894080163583e4922c GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QU(D&A+AYtnv08z_wL>M|NsB$ zIbL(ldQJJ}^{#l%w<+KDE{Xc~O!M2fHCL}@J@e8`N{VuHbj-A@jRxvvED7=pW^j0R zBMr#O_jGX#vFLp}Nl~o9fXBJI>8*iG<2j?t5oKRFP53uvI_O=MkUR2q|CW^Px# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/metapod/normal_gba.pal b/graphics/pokemon/metapod/normal_gba.pal new file mode 100644 index 0000000000..7475228890 --- /dev/null +++ b/graphics/pokemon/metapod/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +189 255 115 +156 213 74 +115 172 49 +82 98 41 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +197 197 197 +16 16 16 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/metapod/shiny_gba.pal b/graphics/pokemon/metapod/shiny_gba.pal new file mode 100644 index 0000000000..149d03c64e --- /dev/null +++ b/graphics/pokemon/metapod/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 180 139 +255 148 106 +238 98 57 +123 57 24 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +197 197 197 +16 16 16 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/mew/anim_front_gba.png b/graphics/pokemon/mew/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6dacbfdfa65ac771aeb1e0f7e4ddece11fb336 GIT binary patch literal 854 zcmV-c1F8IpP)a2SF)1l2?9K`V00001 zbW%=J06^y0W&i*J)Ja4^R9J=Wmd$e7Kn%zC0r2twd5S(lUKeKiF}+2?shwen0X?#22)aVBq!f0icN2twIEN{qg`f0A5K%2dffzgHj2> zucyGASYq1S)HbF??Xb=S_0eW)UmL3erVmISPaNOt1!Y-+E9CByjv7$QdA1gvMHP^G zfCaSJSSqxN*|Yy?0iMp5c77^?>*x$mfSx)|wUUSs`ic|L@(Lk8&Av@nICHkqr&v46 zPj(6zsmc^m+&MmO9k5(e5h$(zbKZx;Loq)YMT6KIKM~kT3idiMCvw!w)xJ>yK2dV< z;acbqFP~`NxrVc@M;Nw3t_^T)fsZiyX`_a+a~O;4lOwoA^#Z`QN|0Hj4vDydmWB zUJ>_|zw0leAHK^M?*^c_khCBC@YQS?h%1CqXAIKW`Q;MW7>^<%jM}#q;3phe geXk3=+rMvr0Jdr|+2UsNi2wiq07*qoM6N<$f@rIjz5oCK literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mew/back_gba.png b/graphics/pokemon/mew/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d73526245ef23433f9400e033764bc44f1fdaf6e GIT binary patch literal 551 zcmV+?0@(eDP)a2SF)1l2?9K`V00001 zbW%=J06^y0W&i*IrAb6VR7i>Kl)-MpAPk0ifsyxr1)_F$9HsY`raMo~l=DEe=cUSK zo21fW=(O|pON}b|<2S|zrT+B`={P(Fg4sMKUX9s4%wSMt@r0@RIH?#VP;bboZlkFI ze}i;r34lHRYfRl-r9=Iql(&Qefcp+8Z>$A$^+0F_2sH|G1Zz3obn7xKIw0VY0|GAV zLOoz$&_Ez%IEjs}^Qb1gH zYf*5tp7)w3wBsU~$r4qUw&<=CSWzkILO^hM(i1#qEht6cPK+i~$-qDwPibgz0NQ10m9t%TBD&J%~>Qjyy z`zq!#?TojH@un~m<9#f}SI zQ}NBJ@cQ3e_pyG2?!x=)E}yr(fm|<1c!Vduhow5krtiq;c+MX+9z;)}(3b!T4a+yH p+wqKz*8DBxpa)1h`A+?5eF3|;k1Ze;O literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mew/icon_gba.png b/graphics/pokemon/mew/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cffd1dacc9c1b2ddbf7ec6e8b593511b9ef67d19 GIT binary patch literal 377 zcmV-<0fzpGP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H_en%SR5*?0l0izvFc5}wg5)qlFC@srNdr zMc&pHf*^==7I`Bj=_EH0e<&nhW;%g<#{B)b-0d0pQv;3}Q4uE_AsWc{7E}q#KR41n z$laif<9I*GUYBQSP#}VR-c$<^{HQMRHR8@gUE*h)ZyrI%(2sF`pAs#X0#?jV6Q$)` zfJJys$=Fl@o$Go}x|si-UKk_7^dK|_8Ml#dOI+r*WY?(8)|V7e1a$?7qrc2?8N(cd zIK)+42Iw2Hs_h2M_l!eQ_l(;%d00000NkvXXu0mjf4$-7} literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mew/normal_gba.pal b/graphics/pokemon/mew/normal_gba.pal new file mode 100644 index 0000000000..d9a50cdeca --- /dev/null +++ b/graphics/pokemon/mew/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +213 213 213 +24 90 164 +74 148 213 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +246 213 230 +255 197 205 +255 131 123 +213 74 82 +180 32 49 +41 41 41 diff --git a/graphics/pokemon/mew/shiny_gba.pal b/graphics/pokemon/mew/shiny_gba.pal new file mode 100644 index 0000000000..0bf72b2d86 --- /dev/null +++ b/graphics/pokemon/mew/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +213 213 213 +24 90 164 +74 148 213 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +238 255 255 +197 238 255 +139 197 246 +82 123 205 +74 90 180 +41 41 41 diff --git a/graphics/pokemon/mewtwo/anim_front_gba.png b/graphics/pokemon/mewtwo/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ef74e032c61a526fee14eaa850bebd315c705b GIT binary patch literal 1500 zcmV<21ta>2P)wEwh&)r(rJb1{_v0RR60|Nj90{{a900RIpW5dZ)GvFg)@00001 zbW%=J06^y0W&i*MT1iAfR9JFrDgtyECsf?VFZ6 z{<^&-I{yKrjle0HT?d+gmN?bilN78bU?jvxAw&wN4ZsY#4&m5zrks5FQde z0noK;rkk5h4$$g;shHa#=i%!t1}(D!w3lcPL;P~k$`JTmwTJiGeYlY^x}pd0N5#H) zkALr0SSqkQ@d@Bv5kUWB*Nl}+Vlqnsin};E> zUlS}h#p&d-vxO{8x!Ym;jl9d*CU?C)mr8aVh#%>T9AFWfcSWkJa zmobaH&InI}fw1cK*0Y$|!u;m}&&z@1I^Y~L0zTMy;-&)7yXlZIZ_p2HtQ3nH0Nal= z-)F8{2Q=@P4SXASq<0dg@X-D}*~Mhnbi7b(R|oJ`PP2;8)gFwiz!3r)?Euss#&Qo( zh#xNFX$82(Q1B0%q#^YaX#@5@1NTD&%fba9S$ zd{$fnNht>-T;@OuKjPObOrUhRwJj0nU336H=RkSgVF%&ofOb>n$i@`_-$xi;Q2#l` zbQYKOD?u(oYC-tHSG5Sa3y&P&QaI4CNl^@wJgr&1QD(#i8<0J&rI@W`D}f}6RS{$! zK1-5BGnhIAE?@pMZUl5N37Fs;QYX;@z!zb#KDtm6SO$E21oXg48UZaynCXJ3??iVp z01*&g9nd{+AG`Di5kn1_rJZh?A5x43sYQ@Lp1h$<(F|0b;joM(QuzIUR;y`tKd#Z^ zUK#;t0$OBnU1$VGpT?~rz8$9lXbJI!-ZxkcfS!Wr6VMofTI7g;&vn~Pa-Ycqvx}4Q zq2_{~)%(4EsNbd)=QmqygL?^50kD;?aJaAOTFZ4(331J7Ja5BDCV|cRva} z37~OA`^M(ub+FFhRxZRNaEpLB-Su$r?zGm^LWpHHjjk7=hws9-1N^;X9gudWF$}&4 zcl~F(iA}fG>pKStu$2*LbVif7XAOgy7<)yvl|95;j(SP&2RPeL(rK+&a%`3bwS_0bH#4`k=}EgAltbKR0L^Z) z+m#Hm;Y@%QkZe`7$vxovN_%1c+e15!YW6k_%M37WpY3YI0l)}sH8`zyD+!Q52qpmE z&!;|{s({sIg8Bj8%wJ5Z9Z>>{@Pg!lc{QKEbN%vUl;eL9l7O%n0+*;fqZ+_3~0>997x9!S4q)3@a;JF0000y literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mewtwo/back_gba.png b/graphics/pokemon/mewtwo/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e466856e50468578aba89b58585cbc18198eb3cb GIT binary patch literal 815 zcmV+~1JL}5P)wEwh&)r(rJb1{_v0RR60|Nj90{{a900RIpW5dZ)GvFg)@00001 zbW%=J06^y0W&i*Jtw}^dR7i=fl)H|bKoo|NOpSB~YLE|8JL^jwuC=K)4-jcd-oV`! zsr;DOTBSr{mwG4v433S>kSbFcsg@6EIb3_Cpe0}!>A2pxszcsT(6)Pe5fnVFZfZAd6A0Pw|y zr3MP!8!(kM8r^7MJH+^$0BE!ZV&fuMPi3uvoOvVLGmy;E27IT1#_`@r?JY%Q6iD90 zW#Kscx2b)hP9$RTOQnjb)c`%2CPhkFnxqB&$!x?BsSg`~D^YL;yWlU@yAObj-ejBE zVz`yQP})Jkt0=XkP$_dANTS<$V*&ceco6xL-p>Yb@5-%$VTb@C1vR-(PIjk>O6*%x zLyj`xAoI(3J<`NN38_L5D~aoyItza-I38U;w*wFbEYIi#8s#R$cR<#?8H$bOfZ)*l01n4DJ4@=MJF%w%zD;)vhuwQuPnJgin4O4TAfOi+u z0D$@dV3)+p(0Kr~2kD$BO5sw-b{v5qGGvL|8vuQ!NRDbiSV^su=_I*9_#O^Mb^u~Y zL21-tvg{w081Bo4GCc~kuiTrdHDkcZIhSUf%qQ|S`Eaq^ma{>REBr$L%X-y)3O$6P|sr~s|UB5C*lgM;MdM^Ne9L__8J0T3`_ser# t9}d5Cj#>zhHF$Nc?T1%3iB5rkoDV$~=zjRy>3dr6tIqxD>|?w( zKNsz#ZyH+`ydHrc`bv!MJrYtLO<0ww1v=!*ZX1A`K$?yqz^@Oc17*NP5FT)IPKrSc z^qHNTigY2%peYoioT#F_D$Ju3#{4)6V}6)0OLy5GdmZl38xy<6U-5D@?W{{R302+E$r00001 zbW%=J06^y0W&i*MH%UZ6R9J=0mOYQ#Mi7Qs=%eJ1pfc&(F|A#1K*zkzGmR{8DK;|U)sqhfO#X(?h(*7n*mFh3o*H^1GDZ->m~}2 zKfZh|Ye07#CEZ2-uHFCUWiY4#UEhUZ;Uwz+S8ia+kyi$MCyo*XuM{o+bGqug(dN`ho2ud~<`8=pkTJd`G=Ufb6d;}ubrFmt6fcT%gxjg`X zcGv^>K0sl#brIt)bXF0JX9oZv09dN0VH{gxAPInAb_7CL7B0jqA;g%0{l*o5#d2@o z^@NuS24rC)gTg~i)9-&Xy`M8N7}ICGDAM2V-~f%S@DM=^Tmr}}hI*)FQFH`!+>#H% z41o!hxLfKn2#x?PitGXgOh_7tJ1NV-?PQ@XaF8znxJ2Ixu>znU8bU0VpoZg&BS5V@ z+TqF&{x&-h!LpiP*)EQsdm;nBAfO5$9p~nwaS7l`27Jd2D*&H2jg3!hFyZXatPaGf zM_)(0LLIObu<@cG3X!uZs@kv=u-+nIC~)CGP~E3>p$H+eEebJ;PD~gI==DS%m{A5b z6IVn~YOSw?xau(xRF`P=t_)*Bxn=i+X)u6M1!xOl3kEEjvSU&(E9T?D|ZlikyvNHhx>U?KT0Tms7pM44#NV-&+Qv-BLfW50*TPFIV zC}8{12~?Jn4+&0D+eUs+0lvE)X9d79klF31a!~Ns4Zq;>s@_l1O~r){{>!mjj2%}2 zUb`MFp6`qo@`ZM0dS`ge0*dfM{mHP}7qSDYjvpkwuU!NK%4Gc z(u(Dz39z1B$1s%6x&dfMG!M7Z89hD!_SY4a7Xogc2K0Nn^u{0ap=_|AQ(ZA0@8(o9 zp0=RdhGAUZ39)N%QKzaYsP0S$-qV1#!8bnDm#J7b06*a70k}jp0o;-NDHXOwV<_~; z->0?^ej~8Ce^0=m8TjeLR?I~onzo@oewdnE`I>;qyvo(oB=>| zW;(@P5-?sCVvl9cZG@^PvwGlC#e`fGUJv69Uh;exO19k1yR%b>Jx!yeHJ+)q9wK5A z<^7#TQUW%6X+WQPg-n1Fu!=Lt$^`3`Lki_>mjVAs5QB$<8|IBYRPup3KY16D%sHN= zrGQ*MM9P2EWl5!|-j7N?d-;G)wc(I_umzim3;Dn?tvDe}7xwZYW%=M@R@WB- zCnO(8C@w8S*!>r^s!H;qpR#t;mkc-+ zV6PuKEMc-aYC7qM3b5A?oqU^A0Oq70Di-$oAuZ&zY|sx!%m1f-I5+?K>WBXTCA&}s TCG$ZV00000NkvXXu0mjf4ttv; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mightyena/back_gba.png b/graphics/pokemon/mightyena/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1885625904ea2c54ac0e300824a9c63d520d36ab GIT binary patch literal 724 zcmV;_0xSKAP)5D@?W{{R302+E$r00001 zbW%=J06^y0W&i*JQb|NXR7i=_TeHx zv=27B<($sTC1blZD8R0HN3bO#9b(xVCyriIj0 zw}8Ei2O2jSQG<%01++=x^L1#Dpv#~mqBA`_>4@HS(@N??2RwU#TodKJ!`5TL%h1c1 ztF0#j67>~QEYB>gd)Yg17Cq4m+d$KGk){Dn911(3H0yzBo1xQDLm#0TZ$go^3f~th zXK>I1wXl!1HQ)-aNJFP*cLUH5xaN&f$^m9@6Lf6Nt`x((x(hSRz}M^!-!>|6i?>Y1 zyW$9*Ga$HvT8x0Gwiz@}l0^kdN-g3aXS#LaZg{tW9qtE!Z5~|?4&Y+&Mh<|;{;Iua z<;KAwO)>y#>)AQDc_{lYQyqbbTW?!vr`*2GxEf^m*XIvPvwLhaLEZuY0000P)DV$*lEHDrAPhxSff-SNHK>5)kV=yha!aaOrvNX~Eqho+ z*kGI#keQX40lz`thW`PcvCN-y1u|-@ZGZ?iAO*Degad>f%w_LDv*gP#TNh)+0@fuV zXi_3Wv;!bt&?T`n!10?Gf2RhN^G6i(rY3TK=M+UX+0nATd}Zdo!4IX(oRZArn8KV1 z2bd~&;B^4fNK+aB7FuRlPj@q=WrlN2YrMkmTK|IQu24d|<+2SBlV&zS$aU)0Ij{;2 zFNI8L1Gim5G^gs3+?u8_B@a=TbdVx1B!~H+DZgD1kI02jzQ5)Qdc@pm%;dk-6J%zO xOqr?Y1A^zl6VW$pAFla0xgT`P#{mDIj~~pSkLWJ+Yy$uQ002ovPDHLkV1i=gu{Hnz literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mightyena/normal_gba.pal b/graphics/pokemon/mightyena/normal_gba.pal new file mode 100644 index 0000000000..42cdc8fc1a --- /dev/null +++ b/graphics/pokemon/mightyena/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +57 164 164 +0 0 0 +0 0 0 +172 172 180 +148 139 156 +74 82 106 +49 49 65 +32 32 41 +222 230 238 +197 205 213 +255 197 90 +172 123 90 +222 57 57 +164 16 16 +255 255 255 +0 0 0 diff --git a/graphics/pokemon/mightyena/shiny_gba.pal b/graphics/pokemon/mightyena/shiny_gba.pal new file mode 100644 index 0000000000..7881952af1 --- /dev/null +++ b/graphics/pokemon/mightyena/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +57 164 164 +0 0 0 +0 0 0 +255 205 106 +213 172 74 +164 123 82 +131 90 57 +98 57 16 +255 238 172 +255 222 123 +255 255 255 +172 123 90 +74 98 172 +49 57 115 +255 255 255 +0 0 0 diff --git a/graphics/pokemon/milotic/anim_front_gba.png b/graphics/pokemon/milotic/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a80ed6f94d572419b6a554ee7c675f057408ffca GIT binary patch literal 1786 zcmV zIWeSaQr^9s|JAhr=GBy}#f!!N)nY;JgIcswLFR*t|D=OzVte-X?f?J)v-9c300001 zbW%=J06^y0W&i*Ncu7P-R9J$wr`Nf3W-Ca&EISPB-3G-wC?*7US{!IE^1&7R7o3%*P#V1F zd0)xDB+(ZvzkZ*Op67XA>3yHC1!1lw<_Bhsk|1oXLr1(EZO35-Ff`oIp3v4gydJiT zDF&qYuT&VgjyEOLcz}i7P;Y$(P(A}>ldd;P$B1j1N)Ll+oRGJdh|T%FT4!js@UZDze2iKFyL7jAVdJ837;AO`v~mM`Nz8r51;_3&jDy01K9^wV-`UFefSv0Q(?h+ znSEf}&3V8W19k)e^8=u!69B%ln_48G*E+=Q>vvp&+9+w zxK0NEscmN&VD@@au-+A;=G7dx3c%SvHUK-eZ7;t)9UMzRfEw|t-KwK^J~2R90RSd` z*z*aO5aK#602i1e2O#k$y<;9FNvcj4TY&S84 z%o+mN2M4$gOS;+Zx0|c9J_R(eU%(V#eq`WuAE#P0R~I=T=W=$gjvcm;$@778bSAW< zg$W?RdyDoVe`7|YA*)y^A&4QbG$;1yCcg81qscU%N+v3^{CS4k8RvzSlCCx-v}Fb*;ly0ivh4b?Jo=@v?B8!uJC?{gz5v~ zB>0XO{aqOWa8;0r2Y3=$MHx?1FEr_<$gZC`0J}#103Y$&PeC&lQj%FX{B7!eZlL!Qm|nz|YdnsRw~2 ztB(L-6OlCS+wI(RW$W{j^4eul#P^z(&um5jo}UH)g>ODKW`RC0J1mWirrvqKYKH;C z2W}|J?fRzu(=*ntK0Jp_oxo4^4pt}XbQ$st)8qy%x*cc4LzcJnwj3k(;R9{CP% z5_Y{eLo5%DyiN`QaG-9Z2sxY~F3cmnle3ruO<};`FwhTd8isdKrqr_P0dVc)@3DTs zBnDG2-O30CPbum+DaM}vY2u^QK2DWyO^z&enNE(7Z5pa{Ljk_iMKrsNgJm3%0G|XHb_6iDwZ9ZL9nE*)>j-R~%V8tI@ae2VnRZtmw z61>QuAmmjJ6pOw*!1f6Mw+sN5cZfx?_7@641W4i#v=YfNAWz|+783`>2_RhQ!qz&2 zPFl`OIht$o3LZoN7Z?84LxGT^64wdS`aoRcTaPEf?~l|6!U&`RzdcR>tfjd*@^&5t c<-^$gKZ7B5!VVXuy8r+H07*qoM6N<$f-6uXdH?_b literal 0 HcmV?d00001 diff --git a/graphics/pokemon/milotic/back_gba.png b/graphics/pokemon/milotic/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5d91dfb635a23a908b3295a430432514d9071b1f GIT binary patch literal 588 zcmV-S0<-;zP) zIWeSaQr^9s|JAhr=GBy}#f!!N)nY;JgIcswLFR*t|D=OzVte-X?f?J)v-9c300001 zbW%=J06^y0W&i*I%1J~)R7i=v)WL3oKoACCmKP|92lRx|7a+sIcp=LA2K9Z)ZRy2$ zgWj56n!Z)vpvKOUD)bsxR@sl1fTlInEp8<4~n1u8Mu4O+= zEE+i0?e7sxLOI0#>KCx`9fBVPu=JE8Ri4c^SA*7#n z2`~>uU^hnqsz3tt5(krl!ISG{hN0E~i>h&+$FK+ZT4Tn-)b9?UXaKw#vrjq_2pr`M zn}DFq<*REGz?c%`n>oxfppFQ%RKhQc!h%OSF(H8m5QrfA5Wtj{bC?qV3GhMfi`bYK z$fXLj4zo1Ij;S<2F@Q0GqqJ@-SRgI874q~Aci92<%V%R82hnzPg0^E^{u&C#*T6uBz)xq3SKz5;OuoPh&3snU46IXMiIZTwG068*||EUegH0!0`qC a`1u0QM6)m^N~-h#0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IMM*?KR5*>*k}+6a#|~E z`3zLZaxB)>7HqU+hzAF!OqEbr@)IAJna9|lUcu~t3%2aQ{qZAkf5lIcr8vaI!gvA& zG}j1bL%RyqiUlL{P_N(yR+NG94cy^b1U#bd3A_VHZxFoIbS6CAymoAwOaei8-8eqe zEnX?%k2AP#1zd)Q@M^xC2YRSHS5~UAPnXz_(}=)TwMhV4E4*>3JdW>Zh0MyIA`l@f zzX7a9WLai-a>!aNYX z5cm@2Xt>tt%qWa<#tj=lVbq}=Y5J=$N<&A0gwcIv66k6nm988mth@jUqtidLWgNag xY{haMJ_?h!WQxM%3h@auIl$C4?7R5AJ^^wW=+;SSU^f5&002ovPDHLkV1gl%$;JQx literal 0 HcmV?d00001 diff --git a/graphics/pokemon/milotic/normal_gba.pal b/graphics/pokemon/milotic/normal_gba.pal new file mode 100644 index 0000000000..df5cab01a0 --- /dev/null +++ b/graphics/pokemon/milotic/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +246 246 148 +115 57 49 +164 106 82 +222 189 156 +255 213 180 +255 230 213 +148 172 197 +139 197 255 +213 98 65 +238 131 90 +180 82 65 +230 131 139 +255 164 131 +106 98 123 +246 246 238 +0 0 0 diff --git a/graphics/pokemon/milotic/shiny_gba.pal b/graphics/pokemon/milotic/shiny_gba.pal new file mode 100644 index 0000000000..8a57b80b20 --- /dev/null +++ b/graphics/pokemon/milotic/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +246 246 148 +115 57 49 +164 106 82 +222 189 156 +255 213 180 +255 238 222 +222 197 0 +255 230 32 +148 156 205 +180 189 238 +90 98 148 +230 131 139 +255 164 131 +106 98 123 +246 246 238 +0 0 0 diff --git a/graphics/pokemon/miltank/anim_front_gba.png b/graphics/pokemon/miltank/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f702f11436d5aba9723eb7d6ebc9bd30b03fdee7 GIT binary patch literal 1271 zcmVd(T3T8$F)kn-&l#hO zFabXRnMF4?@u<+5SPbl;mfciC+kD3lL;{`g$TEE@3{5k@q!UpeY{1q=wT$&|FOJvL7RpN4=-3}~IV+g|S6e@?KA zfpLgUP8n+tvvK7s(4D~nydMGcY`nAs4cBeLE}r~zw#a`MB}?D+Jgeb_KrVq&zJqb^ zXxBR;EyjohfVYl4F}g%n0Y5#sFNmWaE>k{%qFmuQ7~%g@N9i$HTv5qtp9{u<#7C)M zsLx1So_sZM1~&q=ASk>n!ZG`Y3jdFnXZ(AHF)sun!&qJv#H+DkWUr!ltPMk+qWUB@ zjDi%^?_+}hOwklpyp2^!J zD+t2{$z1$I~ h-}x;34qiHq_#3GooTb73<#zx8002ovPDHLkV1gQkOqc)w literal 0 HcmV?d00001 diff --git a/graphics/pokemon/miltank/back_gba.png b/graphics/pokemon/miltank/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0cf5b21e68b906d25ffbab3139612459dc94efad GIT binary patch literal 731 zcmV<10wn#3P)d(T3T8$F)ClrfLfFcil#a6@&MNL>$!p}Co%_DCb7xDpE$qSy7l zMq#-b7Q_Z$a zGCv<~>~vz>J;&_sG;lur0a_1F16pTmDUGIYgivPdwaj6q`||_*TV)afkmar?S2+pR z5)hDim#8FEt1Ke{C@Jrc^GG6K1-%M|k7g*S0g!pwU7?g~QzGaCP8|S$lCl;gFMEJU z>&oVj$)(o1r%|jurxl81*cTf>k)hx({`Br;RSO{Hmua$TXRtLuZD2Hx6e`EPwk6cS ztSvaGEdfSg06uLCG~=|{jUnv<>~-V}DPuyk0Zme61yC?H74KTWoR+PuzyLZ3w;jL= zun3Mlv`*t0=821Oh*_|xqz9Z4ptZ~Ks22FZ5pW$}m4uY~aWuM0nSh;N1n2KZW5!B- zVB-;vn2FY#Jx`~jI5vCCVv}=m2zQ*nS2-ze^1{z~vqG35fS)5c%ALRgAqie7C~V%87-9_syrqB+!{*Hk71Gx3 z>~SeY0OgH1njoD=hwcz~B>o znKvC6!<)|@@WmV!bx^m+kAUw4Tu=$tKs5>om9V;4y1#pce?08s zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H-AP12R5*>@k}(d#FbqX=gD6|K9D;?dXJYDDb;1lN>WDZ6TO}Wb zOEl`xR2@EPD-w5O1f1>3-;R=})OVLws^5X3*X6EZ01l!>dut4k0nBoYBqhjtlS4YV zVWNu7KX$~utc;? z)+|W&?ux#M!HO7cs{>2bfsKKQPl3eFXQ)z9cX}To;-2fYmGbUcq5=kTORW6=`rrB4 z$^8H}^+(FdYxKkD)M`k>mBGp9rhqU^s;f-CHwIJ&(xqH)Mgdg^ts4w?t^&eHnp&KP zQL<_!Wnvg1x{P&0ZCLN%M%A}^7E^#LrT?R9WeNZ&4)BTo{LnW}KoK!M-Ul;IaXwgMAE@qo^@h^Eb7r|FoRk z4j4`v^8d2BQuD^W4!F6~P0i99JN-z?uLeUQtBrU>R{43YLo}=OTm1E zxK|UL8v`_8_}|KllmUor#Sd+o(6qk`;)ky02Q=%naqxb{56u4mSn)&W_xYif_pie^8?Tir(mG|Iz!bF g1}J`lP5tZo1;6_GL?$by-v9sr07*qoM6N<$f|TW6s{jB1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/minun/back_gba.png b/graphics/pokemon/minun/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7c1377d59b5b0f04a8a1ba0a11a915fd2a7948c5 GIT binary patch literal 575 zcmV-F0>J%=P)Klef~kT~xlSf<4Zvct43SZ5 zl1ZXmnj`S77QxHLIAgicBg&ebVT#yRXH)?dp=wTwg_XV$o~mJjL=D(SBntR}QJU2O z5fQ`a(Bl&zNos455sv^^41$2*SCLjktR>J2D5aMIXaooXgReaFY0n2gZ~92&;GcIp zg1|NEJ}RHMt}7$PS_7#TRREZQ3GKR_Juo&0C>;eLx-<1SDS!cwO~9n+Fl-#Q21G{y zh&VL?7s`iQY6MzDQEsMRE)9#1`^4SPlyTzLNiX*m!ppfPWw`gOxcz z0e)!lNju`#qJ?h6B{Q~f#&cb$Q;d1~0 N002ovPDHLkV1j%y@lpT) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/minun/icon_gba.png b/graphics/pokemon/minun/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1aacd776a20ada82094c745415e8f576bb62354b GIT binary patch literal 296 zcmV+@0oVSCP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hrb$FWR5*?8QZWhwF%aAr+`cMx8V9bB+;`IDAHKuliokurMz9Jg zE{z0ZI5qAG)`~dY4zshfFhoCx5?^NPhy}@`i=6$`i0n$qzN#LAeNm>)ZH1wrw$gV7 zlpe$pP5=gul1QV=)6-;wY#pE48A`hzX_m>(y@rw5y8wjMH{H>!6ht8$=#RJfU>&GP uqSk?ZWA1gh*k*I9gBCkW9c29PtHTw_hjlv4^>jx70000T9p6Q#d{zCy&xF>S}FgOz5oCJ9iTDZ00001 zbW%=J06^y0W&i*KBS}O-R9J=WmN9SIP!ND$%;IcuoFNs7YHX0wrNVw7rRs!zNK}y+ zB3tU;XqT=~I@k>dMyz9z?c4VW%>jl9 zK%PF+1VA)mGpZ4TBGnyoh~6w}cC3P;QeErzc2?85a*qXYOR1&n&=}8CK=t%!Iv9Yh z8vuG^GD{W6d0r2E0H}KaM`t(MDp2w~x6yrvc^6@kcFl?0&a62Ad7SO^1~Vv|KTH6}J$ zsfFPHJe`7F2OdB{c@hrlo{cqhP6dflYSKz_*Y>M)o)F!jR8f!s_`(H93>@e`+fs}-o_ zMF-%7mlyiQ=kFo_+dH|;-+dKTz@MGx*7Da^qI~?@cH#NA44~?PLlsq6f>d3=@05yx z9E}0tHN|a$sb(C2QP|m1vhthQ#3ueQhOO-U_F}Z=gkby@pMEIH%Mt77@iV;gNKHfwgMiT*&fUN=3FbHrxTS>g|s zvK%c|kEnR3Pn!eWX0bomSnuZ7JnDmIPhsf~#c~kYD<|L^(!I~)hoi}Zm0=|p7ljYY zh=JAZUM93LdjPT9p6Q#d{zCy&xF>S}FgOz5oCJ9iTDZ00001 zbW%=J06^y0W&i*I=t)FDR7i>KlOc24KoEsfn@G%73yM19lR&9`0x4{?L`1)-DM}4I zosLKY4z~gV`A6;;oZOlH4Sjp(CMV_GfP#=Lu}AyedvAB{E-qf`Su1^_|Mm9MKM$rq z&H>xS3FvH$NdE#`05*31OZV3O`Ox>feH_?1i82l(o$Xny=fuo0py%FwpOZNUFk1&S zY$74kpFA)l#EhDuiA_P#pcCMU(JB%? z3gILwt;K|{LSV~%f3lFillT|{w_SJYYaIj9?s)VO-1*!AVaTNKkAXl0z-8fkfsL~m zMUW|n2Z0h(wAax!cmXQw`Y;CG1Nd%QaaiYNMNMN@VSjcB0W-J=83f1}tHO}E_8|Z) zwXWn^d=7z`764=F_0o-KVt@#&v)tbrwkia2edz?QGKC?e4QMwdmOB9o^8IDF1-(XuhBKw|4c^4Gj|>3F{8p$pi1i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H?@2^KR5*?0k}+xoF$_h0f)#2fVBaFwnqndC-Y1Rv*}_*zE?`^D z20UOznZQbhEz*Wn=g;#8TQ7wFHqfBCV{4FiA4mhD48~s@r$k}_WyG}5J>Y&-VlhIH zu=ioD92xuOIyhp&WmGF=uu@? zr?=1IuP72HK#>xjc_jG%0SLQfA4upz-~##)X17o5M2PX_{a(Xe4dP)2sW6;!o`p%< z<^xQOc^0Nrx65B)sv{0zoKlA{)3Og?{I(wpGx?#yOn~YU=RlK>@W=TEWsQ`pM*?T8 P00000NkvXXu0mjf8}gyN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/misdreavus/normal_gba.pal b/graphics/pokemon/misdreavus/normal_gba.pal new file mode 100644 index 0000000000..c57ab5ea74 --- /dev/null +++ b/graphics/pokemon/misdreavus/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +16 16 16 +41 74 65 +74 106 115 +115 156 148 +148 189 180 +255 0 246 +255 246 82 +172 16 74 +238 90 148 +255 213 197 +123 32 0 +189 32 24 +255 90 41 +255 148 189 +255 255 255 diff --git a/graphics/pokemon/misdreavus/shiny_gba.pal b/graphics/pokemon/misdreavus/shiny_gba.pal new file mode 100644 index 0000000000..8814515be2 --- /dev/null +++ b/graphics/pokemon/misdreavus/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +16 16 16 +98 82 16 +156 139 49 +213 197 98 +246 230 123 +255 0 255 +255 246 82 +82 65 32 +230 189 65 +255 230 106 +123 41 8 +172 57 24 +255 90 41 +255 197 49 +255 255 255 diff --git a/graphics/pokemon/moltres/anim_front_gba.png b/graphics/pokemon/moltres/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2f49fe6a7acc364e4d80c50a7314e51f3a697b87 GIT binary patch literal 1851 zcmV-B2gLY^P)4z_gn?R!x=+hy zs(T3`L=K$n9)lpDZrMbY^$D@%NOd=+@HkgOs<8fp2YC>Q5|q6dvUo6{!fGXI3xQ>q z({|F0SpuVr=x{rRoYsj&>V={ju|Wr2^F+vuy>YYTHfiNqC!yf9b>1$)_e1oLfn&N?a1H>ZUhxNMmPk82=kx7h{5 zdZR8`RP&zivLI-X+R0wD$M)rBQgbSRjb=WDx?64w0}v9aTa@P0PzZ2FC?(`6dJ=;H z%%fR2pi^;joI=pyxZAW4Xubn`4TT#dC>X$2f`O$mys89X9p10;WXM6#f%nZN-qZ5U z#U+}=2*^`@8AV+X^kII;69~>z0*f@@ni=gu8ZiXZ(K{INwKsE(PGB*bF%jVe%v1-47k=1yW#{6j z1hqDfmIRQD538p&S?4-!J^{fHmgc!2NwVzW+Ky=pLB)5UFg)o z-dZ1T-Y;U*w!_;ycOg@(i#f;f=b^T_rj;!0XlQT3yDZ7X3NN(HAE$!(EVnl4c4QV- z$6!{w{w(mJkj}&8`uGNcHj<&w!(?{T{J%WN51)OIABr#f_3n=R(1U9s7hE@h{P4DD z*Pa%9GB5anPOpeyQR<3E@I&2J7bP5T=$U0t1V0c{Sg6W7=;|_p9}L;uD?MHG{wtmW zKUjvm+<_n7Qpailf|S;f{2*OGez2f%7sw-`M1H8-iXY&5uzl*6?mfW|rtBZk+u@3} zDJ^4_;D@>+d_aBxLA}gnf*<;ZB~HKSXoh29_tpcEEy)iAo0up00ZE_^0)H`26Y_(? zAmj&_H|nl7m#?DuL3X{I9}LHZuAw{-`~Yc?fgwMbCPYm?;Rj8VOA3B4M5HBtfUOA1 z{2)>xEl7TV0YfSzKVXw80fy+z@)FGX0R(n_^XB}ZHY?``VmnYZu15=gKn79egZu!= zcKvDhM<4qG?E`+`x+%dD$?os1wRlvE&H4wYQSc$ z;)kmxBKaYJ-uFoH0~&B_<%Hyirzx=uen10O0Wk{$_L9APOiTO#Meisd;R%?(>^AM7 z;0MSfbyS_hk@1&(7g#+g^F!0JAJq z(}EuiQs*lNa9D+(F7|E_I5@uEL0~~9?4}mT!!pGkRpYX$h z;0Hr;G~Pfr^MjFB%uIebn+j^|CVn`R`w3A3!`;Xaj%@C}Rhz*NrxJ{-&P;xgKRT+v p&E$vLzwtw@C&vEghyMmY`~y>=3`~S`kv0GT002ovPDHLkV1fora{&MV literal 0 HcmV?d00001 diff --git a/graphics/pokemon/moltres/back_gba.png b/graphics/pokemon/moltres/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..11ed8ced86d6f78cf0730cb8fce542f7e5a9b8be GIT binary patch literal 682 zcmV;b0#*HqP)NVhBg_Suq)l!caknGtjFW?{h$7SwGw0hX+hDac!8_l zrG;CqdklEN6$hybnFhF4T52h!Qb7N!5Fo8CKw>Zn4I1@iggzykb^-o`3{GGqWj@BI z(@F&nS^{bS2myuY5a7TxYVe#Osc_8aZ`= zM$<|sft=u2V7!r-8r>)|d0vZg)zm3kQNLtx|kTdwz(euj3PHdr&^EN)k?BfuHpyS6UsE!2M>#Krln(?sSCmWLO2Z)cq*cIKGi zE#I7XG9rL1+8H-Ng0pC42ygJIo%(Rm%18n1zLg=O7U*RwBlAFTfcM8??vj8wHsJvq zUV*y<;C8u)0MWegJ=zEeTCm|II#!)vzxC)o0Rj8#@q|929-{;L`}~LX7cbAPE^iXr QCjbBd07*qoM6N<$f`;5T#sB~S literal 0 HcmV?d00001 diff --git a/graphics/pokemon/moltres/icon_gba.png b/graphics/pokemon/moltres/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e15d2164abeed1d312d20ad5dd43ca44d7827537 GIT binary patch literal 421 zcmV;W0b2fvP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IBS}O-R5*>@ld(?3FbszC1ocA^#6}maY-Bsen|j{xt9H19t%`IF z8I99890wB;3uH<4>$m^N{_5OcJ|JI&!jiU+)Gi22X){SQAuuzz1Yv5HjKrk~7osj; zDO{L{Eky-pp(#g;kw_)uom}#T_xO-WtcMmo?N)yqh(Cn4z4ut-P04ZfK4YL_g5b?4 z8itlT9FFIEHz0=RCcN&Bes=DJNb@GVEXz`jCwy#<#lnVV{=pdk%>hX1O3+2}m7!3m ztXg7oF*!=^tfb~*O1(-sgE2Ax?(YB1&F-wEi&|3u0RIpW5dZ)Gx8sX3SQgQ^@qq z%9d6;6JL7u(@A>&dGGD)X#PLLxQfvTXQnRCFImY;1sRjZPu z6F?gC%)F*Y^ZTE6DE$HQ^F|~nu%_@-)2`7f2&U!o_Go@A-W4%=R-(kv2jZ4ztdmt z9+pcmRm?r>4rjm#gi`3w&1&sI_17XHUxrXLHu;5biWEv#xIml7oR{;fBxj_|DDv<2 zHU6^rsen!h6+c@g>qf}6O#6eOpvf2rgp@!BvW~H9MsN6@qgj1TR)h?2+ zC;k@WAn1`TAxe%@{;CJP%)krfD}s=m5I3Ddy^W#>#ey5Y())yvE!Qk}*o($&%HP0? z@x{IX-R7)L*?c=#;QnF{=HG(m*E=;<53VlX^ zpn>AAiKOqDw2Gz63P=TCxLj}*S8>G;1Hu31hnLjH530k%UFwC$59tx(y%0S4SPCRR zv`3BiJf717SU)TIAz-{00*ME+RPuvjyj};A?++pIAZWaOf#e6ecUKC6#(Vw{O}bC> zqS|* ze`6|Oykkjw13n%WS#U~k|kvitl1?$3@{K!8#7->&HM zgLMBotB*cHJZ*~Zn?F2$0Qc_%X$@E|Azb?w;0@pbx)tdJ1p=YC=)JuV0I`gYVBj=@ zy@~btp`tl$MhKZ7@qavika(bp(^rFuK;xi4DF?IFXc=01uj8gm~(6hmk3eninmSbH)0!-ptW bp^N_j0dY>^iM)FB00000NkvXXu0mjf%tdl& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mr_mime/back_gba.png b/graphics/pokemon/mr_mime/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..129fbb4e2c3c23189b6c17dad86875a926249ca0 GIT binary patch literal 677 zcmV;W0$TlvP)tXg7oF*!=^tfb~*O1(-sgE2Ax?(YB1&F-wEi&|3u0RIpW5dZ)GxKlRsC3oXc`UqJzb3l3KV9=cuMJL}KMgm!Mpv%SyryZ6qo zUL*9N|6i8BYlwF3yQH0;ki1nNyY7)`oE(tn1|fVxjt^QL3H1XYx{Jl!7J?9{56zB* zf&y`u#qmc<2^m3YUTP@=bQ;I;ds@mj0G}>(o^jp)ORoWFU@2?CLDyw2=%~3N$Zgd? zG9?_vBq(EBV#Y5?dnM|Ic&(HZ2p zz!>+Z8ep$CmQ(-=d)gsojX$u4GNX>qA1F|0)9&A zg${zJ=nk)NEnTh@K(T}1Y4R61lLmMU!T1y7hF;Hghh3h2;S+BQ zz#l3%fPo8u&H0*N*UOlq+g1ZN2XoEm^(y5CFc@fH&C?2a(7&SJ)*oK20VdVU00000 LNkvXXu0mjfoRcxT literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mr_mime/icon_gba.png b/graphics/pokemon/mr_mime/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e3b2bfb5c52e25e68bd75bff4f70e3f3a8219d GIT binary patch literal 311 zcmV-70m%M|P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HwMj%lR5*?0k}(d$APhyh0e4_v&4ARUw@Ia}T%$PxQ|7R+mrJ2U zLP;5ZJq4G{m0H!~)5pf}g!t)_XaL3}0Eu*veS-JfIMp*#e1yAWkrHEI0U@shTw>rE zjYr_XuY=Du0uTs;Jpv|!ii3;pm9A5z%DRUwtcP4WQ`i*hx*B#*0!gaV%5!=Ln`^-7 zmHxNBMi|iuBXANXYfBbYVaTAHL16}A=@b`+_5ecj`}-&TcmYh}m7dYOpAP^4002ov JPDHLkV1nl%h7AA! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mr_mime/normal_gba.pal b/graphics/pokemon/mr_mime/normal_gba.pal new file mode 100644 index 0000000000..269bf45edf --- /dev/null +++ b/graphics/pokemon/mr_mime/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 180 +205 213 222 +156 164 172 +90 98 115 +49 57 74 +238 172 164 +230 98 74 +189 74 57 +131 49 49 +255 238 238 +255 205 205 +238 172 164 +139 90 82 +255 0 255 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/mr_mime/shiny_gba.pal b/graphics/pokemon/mr_mime/shiny_gba.pal new file mode 100644 index 0000000000..c20f8dbf4a --- /dev/null +++ b/graphics/pokemon/mr_mime/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 180 +205 213 222 +156 164 172 +90 98 115 +49 57 74 +180 230 82 +139 189 41 +98 148 0 +41 90 0 +255 238 238 +255 205 205 +230 172 172 +139 90 82 +255 0 255 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/mudkip/anim_front_gba.png b/graphics/pokemon/mudkip/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..712f3ce5a85e3e0386d2de0d15244bdef8b26d6a GIT binary patch literal 962 zcmV;z13mnSP)cL>7^l&Nh(!pyf)Kw^SNNB)I7jH^B zwAmzkD(#RsOADshXoyoxK1e@+=2Q<06sZ>%789~!@3K)ac+FoXFDlQh!8?A=d;ZXU|$)M*c zGzFBE%FgALhHVqeYk3tV5t;_#%I3~^i1Fp{P+G4@r3^yJ=@BaOYxp-F55Gy0^oll^ z-bK737wCMpDNEAYdkQ@9&5$p^g8)RP9bg4CeUhqL$P?PaQUH)jfesv}sHJ5>j?mVY zlve>*^5vY$?IKza3Y%}vP*P0#0XS@zF71wfR4p;%8({(v>r8YBl;z*#O_8H?dYJ;Y ze-Ah1kf-U#6Cn6L(c;PRY7%nC3eVxKC!HMRPCGn@o7bYym_%LAuGxq8ra6qf8bW`- zCHCzF*8S!du9@+?=JmJBBJ7;6V>SU=!`~UXpaWpd0GQSibd#<31UA`f1+&8M)&Ofr z4`7LrS`W_z+Oq)0j20W^ zuV!u$;$rb*nRW=u9qP^^%g5pbWag_RxYR%2*@4o9UXn;yu1tFIH7Xq zI^t5!AwR2UnQ*!DrkGA+1I#Rj%AN1xujxm+F(P&*RPJ33AEkTP26_JqleH;u1}rZyZf~Lv-4l8= kAh-kife<~yy#DX{4GPFAWV0zc>Hq)$07*qoM6N<$f>C(DF#rGn literal 0 HcmV?d00001 diff --git a/graphics/pokemon/mudkip/back_gba.png b/graphics/pokemon/mudkip/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1282d42b42a76bb443079eae6d263e7e3c9cb1 GIT binary patch literal 627 zcmV-(0*w8MP)4)IV$6KokIQK@9N{hljjm=!ZBwgg^>5EhK@IPHH-K z>3PjkYf1lXS_&oDi$06&ZfyrYnQUHksmBhA`UPs5_fB^1)XH*bI)pqB2EU)*dv~X^ z<2=a7vRP%mfx}UyNHM|B>p)UfB4Kb*F@gq@y8yfuh*yIx4RH4FpmBG=BVxsnIjC5s zvlgWP2h1wK)jF`X4m224y)YT=BgQL5Bb^W!N266D#TY3cMWf>PPuuzDHZq7f3MFdc zAQ!)oLxaNII0|#IjRq91*Ir0MFHy&shZtHtY9R-e2y%eKVHDvz3vdN4@e!9L#)vO1 z(AT0}KSLAWybo3jEe4-#@U;NKK7;qZ1-=wP*rMmT4c>TNzpzYtb^{B@7oOL(Hj0}J z0&55i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H-$_J4R5*?0l0gc>Knz9a1m-Yqd#_O_bZHi)vu&a1bwMJ-edy%3E~V3n5`KVY}Z9Vt-Ik+bx=#f=OKsckHNdVBfj?b2Ogys9#ufQ$ew&%9+=rx5|0>%@zGq<>@IP@ujb1>lv}?`-mJ8}gNvL&N?QK_|Nj90{{a900RIpW5dZ)GGYRYJ00001 zbW%=J06^y0W&i*LzDYzuR9J=Wm%nc0HW0=ai3D6_K+e?%EVbLZ5Xshvm&4YuMG))EhzmMM~*(orjptF1Q66g!pcpbLCL5sY65 z0%i^xgS5(nsTOk}X!&{5?25vgW+6zOwrEh_lFM@l?#^^^FAY|t^))qT8co)jQsyZo zr*CiRj38wX?J6ZA2$pTEQr%ftLC{dOEaJkUNfduU^h^|%f>n!0c_r&sYai@lhDz1# zGu*fnzqEPV1AEOzl8;yv9n9UEc+NpWk3<#Ktv_8*UQ14kI6lw^y;%*Hu?f1H+#`uI zelAEA1X2KX0wg+dDy(@KG_`FcP2O;u^CCZdQXH?^ER*@GiW-`4+z*-Noe;CXGvawF z56|WT|0(nikRG~ldYU3p(QzCWID>DN{V4LuYn&!04Ip~kbOKjsJr``GK}g!h=_oVU zX^zAdO5!f}oxr2UV5cgjHcc^NJsW2ch9>Aq@G~d%v2DviKy{;Mf>nqS;Z6W6rA>7r zs9PC91dc047k6(3$7A^I_zeP-Td0%e62b9s2oDDcuvWY_VLBSbg5!R_FYVzgcNA1! z%>+pX!RuZGpTBYj4>w&L1@{G7_+t{l_E^D)dJx>`KEXbihfaVIi>sjmwe1u9E`ops zm-W2r`gFwxfIeIzaB6i%UtJ?6L|KXykakJE{$^b^$}(V zrP&{ufZZy3&cX(@9*^Awt zM3}?`{tT!EMexs}>uVgm>tz<^Uv7x{quVJe&eIur(ZD-7 zdNYN8>GShQ+v~QAV9~k0mVnh&XpA4wYtE?;qY_@&Rch`o>Z@jm|LNPkR=X=Iv; z-;MiF$Q2*Y&zUO8HassC1V91O>Ixy8em_7{_P6T34z_b_4 z2?PYufoa2F+C#{kK#*L(^rdDny&eSvfoLDCfNA9S{UDeThyiK|nEKdEf*FBWT=G0m zLmnxf2f;)j_V`!BV9M`yNC&~l4}AN7tC%umOoFoK2MEXymyV|qQm7pH0oQ4NxdV&` zLGlap!{N*Rb7@fMcyIaGL(09ebsOWu;Zc?m89V@=B|T!?IAx>CwlNd~mqOu3L84$( zCR`Wyr`KT z3^usTCt$(|R`m?xnIE{rBI^z6oAhHB5TxLX0!LBhLnSkTI6dPFLp{e;Jz;dK-SY(s z_w9>3*S=J538Usc#!OUqKb8=YV#~=%JqI8E@%RVcoMch8MtoZU00001>lv}?`-mJ8}gNvL&N?QK_|Nj90{{a900RIpW5dZ)GGYRYJ00001 zbW%=J06^y0W&i*J6G=otR7i={ls#|bFbsx0*sB23S$cc?}wiT7xu_*Zb{3 z+*|t_O3AJxH<53>vaBZ#Lg zAa_It+9o4m6`&^KRvrT-f|QZiJr)=hD20mbkU3#Q7GPk=R9KTy>=W#AHq_hz3qaP$ znly2~x#R%0kv$MUbNQ0zpsCLTd_GH1ew`e5pnrdS_)NYcPCEqv_Hmn@jy`q?kBz7} zPZahETJdyGl%7V40IEiayJ3~*-JdW<6Mz=P-98+k<0dJDL1x=!1C z6Hp@AE4FwH%NR6_nOkj-NsVNq$2{#A(ND0cf~Co240qQ|ES-`P!kr}>{$>&W=)!SJ z8+8;2gqse+&V{)pfTx7eG{oPx*L3U_56s+4Y;@V~(cNssg+N#aI;ilnB@#LcfS8N$ zI|mBooH4Tok9>ZyOOVz{IoBVzVg73N(S#n59}G-Ff|?5n5?2|23~tFQ72cr;@HlFW v&VQ8`1A@ZjOL%l*PE&$NxpbW@%|9HU1+vMCcLERk00000NkvXXu0mjf35+Yk literal 0 HcmV?d00001 diff --git a/graphics/pokemon/muk/icon_gba.png b/graphics/pokemon/muk/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6d8d09350dd4fac4e4df91216aa4caea61f5dc6e GIT binary patch literal 441 zcmV;q0Y?6bP)DV$@l0A-uFbqaH0UT&rItngJ=ZG92R=5Jibcqborb{&5 z`~Z_-wFlTu=cmt(A+Krv++p79vSY-h1|c9~9q}G4zUmf~9%Vg3v7g_d3&_iC#5E+~ z)T0NzUjq=KA7`^)0Ue11IEK&*H4(&{%WAEBp!#}%^tJ%&K_CD-Kif3{leX552LnPU z@Ej$3b|Va^Ga$=6PTm2K$)L47AjdwdU@cQ6vlB>ysO-@ifVfFNU*Be9ISofXM`&&6 z%>RSaF@MzQ2h}!o3w{dINtka2DHf{g>4Ic1wI7RPf_G2xLu^+dUNQ9}!4E%9aPyOQvwnaCwuGLq}yRr zdlA^y?6rB4BzxcQh&u~fg=rd`hp}s$zY%!*?2eFbKnokuV=V5Q$>AWGY;~q+K}Dg9 zc8mk0b`Ki8{yq^?XBP0ZXc2M7eEb@X_dTsEXs|GgHXad0pfSAmQgA7q6^F@j2}-FA z=E+yjf(*Y4fFXNi)Un~)Co6DM2^3eL(!t-b!AdiqS!}^T&IujJs|^Rh;z7n14R9Bn z;~{KvDx^xOSTG2LaJc{y=JOC@QJ3Wkd86W(am9Vh|Hyp=M!S^^0-Sg8K8-%B03Giu z>zVVO3eYIc=y1^Q-zxxcaEpV%`9*b~(!vv>F*#N0c$}wTj%##)erlf9>E__ZRCXx! zljQ8^s80Vlxu{#(7L~G)HMK*rdFN7s#dkCnlhS80KNn;BD+p*LYvnC#t#0n zr!|27rX4K-@M%arH4w^#K~yP5r}_KGTvdQ*;rolf_^KyEI*0VeF=1T2+#(fYFm}KOIKu=od5%EY!ia55Mkm+3 zBzgD4D_P)Z;%!WsjosT}@0@soENlZ4N*pm<0~+J;5EDi*z&wN;o+lJAhx=7~lqb}p z(gLi&ssQqk^8jRi)fD8bPiek}#cBD?c!&-DhUS3YVsuuTlirpN7*RM0@vO7*|Am1L z7$rAxH!aSx^0mi{+#$qva47_4B|sNq%DX9Ocw;k8XI0T%Lmf01{aH{7QTgujtvOt< zQqC)2GDFR(Lek&D2qjecC9i%8H|I4vrU$T&57fF$56~Zvl)6k0=Fj6qK|H31!-He= qsi>#)fFEh4!&7=ltMyg=)A|FyaC^v%{ayKl(BBxFc5}skOFk^Lu5;rzJgIuDY^(5d^Eavvd)`3 zRUG>YSzBf3+`)S)APA4UJr zkIFOoNl{sf9neI*Xhut&D|qp$oB|}70;DVFN`!g20LV}Q;M8#y0vJSGjC(jGA>P@A z=vDy|iUi>n)daC1R}$fZ4OD^>AXt;ikFr5zTNpxdjQ`>*CQ=oocLYaw!7>7J;Ys-b>%AtxW2Xf z03`V>$#K*B)st3Lffw_zf z1AT(ORsccJ5t%7?zm=Y-QOb3>QDR;6W+2X)^6aJSs~_Ch(s_SV9GHNSdzGGd+SQf)`u6J}~)~ zfkrNkXsubKt5O^yKx@r_51RoiI%DV$@l09<7APh!1fi+yfoFPqS(m2<16}NVpEw;<8cD5JL zEiUv$p3DMrn<^3AgAeiZocmh^9i}qE3FK%3$UY)<^F9c3N)=I15*-==I3(iOmV92l z0eN}ApigX literal 0 HcmV?d00001 diff --git a/graphics/pokemon/murkrow/normal_gba.pal b/graphics/pokemon/murkrow/normal_gba.pal new file mode 100644 index 0000000000..1d8b5f991f --- /dev/null +++ b/graphics/pokemon/murkrow/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 172 139 +238 57 65 +172 16 32 +41 65 65 +57 82 82 +82 106 106 +139 164 164 +255 0 255 +106 74 16 +156 123 32 +213 180 41 +255 255 82 +255 0 255 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/murkrow/shiny_gba.pal b/graphics/pokemon/murkrow/shiny_gba.pal new file mode 100644 index 0000000000..4524256e43 --- /dev/null +++ b/graphics/pokemon/murkrow/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 172 139 +238 57 65 +172 16 32 +98 41 90 +156 57 139 +197 90 164 +238 131 197 +255 0 255 +106 74 16 +156 123 32 +213 180 41 +255 255 82 +255 0 255 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/natu/anim_front_gba.png b/graphics/pokemon/natu/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..02e1e7894e6825266c5d4f66021b9bf370ac86a2 GIT binary patch literal 512 zcmV+b0{{JqP)as2N|Zq{Vk!ULLCvf=gJK~6N&w9{0D~z2&CSh}l$26ZQYk4ZL(dC|00001 zbW%=J06^y0W&i*Ien~_@R9J=WmcL5GKoExmDhdJ99F`XG-e48d2_9Gbzp%P4XKR&o z2PtxSg~YoFPQp~E5zv&9lz(g*l|DyVBOsk`&4~3NZkH>AaLgM-3x4P1waoje*qR>yN z8n*qg24b0xY6vDJx$GC&k<|2$<(y!`hz`Ju0DwgYAa+4qpke(suhJ{#gva;0w9M}5 z2Iu4XVUt=y132u627|%yFVMeO-`Ht~Ka?5!LB{|_4}KJo70lOM2?ke}f-(HPV37VG z1EgS}Kj=?E15tv3{-9qr8i*2%5N3Kkh|xfBh8SOey&j-}L^z}L2V$3A^5qZ2Dq6t^ z$>+Zn4B8)B!C?I1RS5>;4~<}Oe-|Yf48|V}2E`}EGqUSKtsYkZ0000as2N|Zq{Vk!ULLCvf=gJK~6N&w9{0D~z2&CSh}l$26ZQYk4ZL(dC|00001 zbW%=J06^y0W&i*I4@pEpR7i>KlOYbmKoCVMKvi&uas#&LCNR}aAYgHTL;(jtaD`oi zE~dIva3vB*N-@JMg$)U_1%vCi^YZ4;ChItL>ii>amQ@3(l$C@V%P&N>|4Nh&fRU9r z5P?F7$;sB^7)x~~qH7}@ylI0Ffo0zC#4{E}&j67{;I*Fsu!^Q<3_Q^H+Qtxaz@XDH zhH$|ELnH7ZoG~4Ri4QRTZ1DyFK>i6d&3wDv05Vs;=GWzP&E47Rm-7Hu)7hp1Ktxh- zFLfz_+Ya;PoCO|=piqc84*(H<6z^h0c0~)29sp$`6J)N`e@9*jP=%rz9FVCr0fP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hyh%hsR5*?0k}(d#FbqX=f zm5I_Jwpmyh5Z?0jY&r5X=I6_i3i9D8fn!h|8puHgl%^fW{)DR+C zMQS~6-4l(u5w72EU?jFY;vH_oxdj%zM`U|kcPQS4Fm^9LXZVD6 zMdY_YcYGuaM`mG!K}8sT{VELiqYA?fs=_4ZSQQ2zZN_l%OCg9YzI@e>7XmPYcolTCvo^k?GdtJNYpt`bu@`-@c8~e2f=?d z$b5@HF1G|=TLjfsfq3+BeYXNF)~19C$TE;~{H^AX2re(?B!|>tcO+Q`B&*j1q|8Z9 zm~fkL7>+536GgBwRmmHKYpS$ zQGS*KfdX0P4J$9E(<(ERSx=ChSCkhetH3FDY3SDe18%9}N*0ETD{HH_30-L3 z(7V!>$vMs5g@qLZimZA!CnG=z*>!R2CCvtk*XM$za+^z7t0oa$n4sqY2Z2aP{>;-m36J_z3Ri@^HB;(g8h-?ElDV*T8DDBmA=nG7X7chSy z3)?_d!jN}W3m@5K3e^Z94q_>&D+svzUeOL9Gx#K87{^Ya9te10MW8@1sjyk#HoQ+u zLIrX~peQV@U{?hf{Q$urv$*>Js-&iwQo4X2{Q$%rUl9yJ(LizW!uzi9+r*lLgBcoS zuv3V_?}KC!)?M0A*Y2>r`CumuW20Ql7(zW^w7DlZ3FFD6Z7IV93tW2LA=ufCC$|qs zn!PxPCw?;@_FGzY9qz`X4W2|kqTuuMm=UbFQLq!mTU_t#Xp3NIH_!k7huShv)@}cv z3m!+0Zq%P;6Zftokc!P8n;amPAb|vpDu}ub*ApZra0EgW6XgXyS_2G~)`S@#5KGI% z!YU5{16-R)L=>IS^4DMuFu)Y4LlofrleTB`ifJSUBk<@FHh$v@!h$sLU9BkZLL;IbQ1ETO2Q7kPa{GoNzFP;`rCH*nj^1 znZ_WsTWxVCm@S@As)hYz-p3LM$#rvd?~XtQ$<^-Hu=V<9SOa%h?A3Zk7oq70WRPYb zz-_7;nmGqk7_VZ$CFs{pM<66c@8-Hj8xd+8ugvNg-Q|`*h#8{?+Q3L*uEEttqdoV4 zb_7DuyD`|rULVCVIOho6rx@~E0y!NC=kovuqZrIL9%H6Gz!=KkBvwxg7=RF?SQg73 zU<^&{s*5+Wa5J|NU7{Vf71P(Bo48m#c0S2L+;Ty*fM%92~{&!=$t1*Zmxdn3e z0E3*|l7B)bC~jafJD=jlThLc{V*SWHQhI0000FbszM0&!sE-adqTUJ7jYKCry)0Zb{o$COia zx7c!uUM*{+Bqy>L^tkb0B++N`C;2N`_CI5zPoD#g{2bVT{yaf<7eGvadlintTzvj4 z2YI;z;)wvO)#5T(-B|x@R^01Pi;3pzp z8aP)Kx7n@A39KHbhK6AKw@0(|%MbtqvZpayBH!%-2v+Gkb`@%C5nGq~C6|6p zZDWkKWGn)3At4W=X>|i;Fq5V_dSSRu`!+SVad7O-#W^h~%vv=(C>RE_5U>>@3|boq zA6+`-uuC5wJyelc0?}uZfVvLEu&5E8sCJ~Ws%YW<+a*omiNo$oLn-Q5F!^)n!X^$y zY2X&-nFr*pJ02piE6r?N)Wu`Qb~Y!vwc3}E?>B;MTa=_?6yk^3LNt6^5D}a~z^;7a z5eQKYQ@k(ein6rmuO{M~<7tfkpqcBsujQTq$=eFU$`jdSCGFfq0KPt4w>@81iiWQ& zCvS97^s}FG#3TbHj=;m!aP~^@IThhYQIylX(QO|HDdmlL-RLKSLKnRO9TDV$@k~?n1AP_(~0URV!inz2C8rRvwrW^~3O~=Sw!AiC> z!d6^j?PTz09dDavl_`+sX+8*^5Dy%5mn)x-8&#y-FsKPPqL6_6)Ld{_NkZ}`yi|Kn z?eNr8)o>e{3^p0uO0EIjNA*T_1Czr9rn97omNm|oz+qFEH>nzX1}0f((9c8R9XhaJ zJ4U&rr%@L=LFy=l41(*wixD8%LDdZ8*|e%ixkpH78Ms#wbZL0CkcK;C*@|!`s+|#C zo3}(EpFfKd8N}_fF~%o=_V8}em?IEhFLyvj@eks`gt13qdZ42)`L}-yL!7U|NYBFP zGJ{1J)ykg=#WJ`9=c@Fktfx0f#P^P8I6kq)*bsEPgd?E+66jw zC)o<@&Xvi z19Gj^L`+%iQ96r%(sQ~#Ld_ef*z3b6-ev2+0ubu;W9X;xt5&NukJjgykDxoGbkx=@ z*9O$#+rG!tsNH^N1)MpRtUukP?e-J**aDDYPDgCx4t;e4P=hT}eQ}4rZa>-eXY0V& z1L7i=l(*jXC0FCo@n`_G&rAH<9w>jrprItlfMkAd?%}i+O+v5;5dM|bJfJdBL zoH27YM_Ae|+{9snRt zI;*T=I-hQOGl@Ctb0PgGi>gb|blUK8WpeUO`?1c#YNTqPunj#L9Nt6Vu(>Nj%F;4X zYfw$;>+R;T`E*YtleD}@(!fM0fI|Rw;S$lx)qtynUG6SW04Q8-HJEkCw8LfrxDPzc zzLm7BC;YAJ9@E#Z>rPGf8GuYmMC7_K(~$x25@DY#4O3T_2e?#s=b=g7$Wd@S<#|Yi zOQnxm2JmMjaAXBgoMXouoz2YvBp{WokU_#1Er%1CIg-ySTd5816@*X+8BZAixeQCd zc(8p>VSBqHnWjMwBe3$B#opPrYub*4I0Pw;!Z5i7h*;wLqO``i&)^uaJz$X5k;r&h zzFs7gdWJu{{8{4A?G{M`4!26?coU2reRxt&oN+ZHWIgnS7()l;o z9)>1&0jOkd9Vb5D!IoeliIVC7SO#e>&Y{d68~4F|M7*b$Xtg+m+}8wxnX|StWvOO;|V@%w*dou7un7JG44;slqSPl02We##gW_n zq~`ev_h>}8XZI5_q5={viig_fCwMFR!h>7~{jm87)_WR;g?`xl1TLQR3%k&EKdF1n z*u{JFA~S(WMz)de9H6pTMh| zHgusM;2-ONlTLcQo;LcS6T2L|=ysp$!Y=H~@|$N5JYx(CW`R zPf(01&wWNV-g( z@!5h<4@Us_QcnPog~fc}7y&WonLu!v5VBt`=T)1WJ}u)7kkx3dm7Q zDy`ua=jIuIA1LsP%ble@EP%2>NGPL5Kw4-Zya39Vu#Q1$VM`_YH?AQs=M~X9<+;`n zs|*&QQV~`99n?^s8{31#_H~|5D*c6EOwcckVEC(Lq!0}FLxID<70Ol=s1S@|P_i)x xzYxx9t6v+#^fRruwqnXIQb6smvK{s!~NcBAY_o8SNd002ovPDHLkV1n++C$Inj literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nidoqueen/back_gba.png b/graphics/pokemon/nidoqueen/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..339582c54c368c3f0cd7b71d97ac46d16f6849d6 GIT binary patch literal 761 zcmV4l)aAIFbv1@0&&n6=)FOg1G;u-`UcHbq*F2#eL*Qc z+-yqelqII@U9x;jr`T{wIf*ShKe*8&kvG~ty`Rgx$J&gbJqe0WtmP@xfCLU`f&gN55@{9 z)f`At3uGG53ILn~)~57(u0ab4%FJu9R(geKa?JsL&VZG$LRE;?SqXUBJ^)ey28{p< z>a=?RWZ*z~AvGn~ZMH=@1%Lq1mfBFb-))_mc1d0YFbtgb`)?qo)29R#=0^&|0Dw45 zfQA7afGnLAp$y3owA}w-QGFF>=>S{I2f(@PW$^Msc35KrAqNlT1B`dV9;olmc41x> za>q}4ES41q&r1h^VBqy#TSfqB-~?|3mq&lE@0&4@(2QwSGPs+5YD}aPpEWQx7Y!@{ zM3`7SQIavA05~pUu|h;O0ph#SBI?1}Q8*I=6r#QRkDHc?iUHdew;~k&-h9Uqur#bh zdT#^$*Y%eghb|IfN+)hA8DFi}>(9^i+X#^6BIH#<2f8Ewr$}g8`O7teV5AYo6_XUM|LkBitGO~UmhW}%qr3*%`Ly$VhSU?LK!bRDL0^v;k{7>_a$ zFIe>@07$93t{s40M%m>zfVUQlA;nU7YV#%|%T(oRoPkdJ%XM4%aq23H6$2zvbDJZb zDV$*lCe(1Fcd}e1zOC82V_b9j6r&LIU3Aqw8xu`Bc?kp6TXXo3B941w=hfb)-Tf*u>7$Tou?Tda=Cd zAk|r0-l{cq8@pr9D72(ER))DG5&?4Dt9*mBX>ghxs9SnJgE1$n0IWwKsvOz#+W;`B zw3BEg2dFz8T6X~}SG}S?DCyG`UkQzV2(s)ewpc&t1$grPBhfP9z3=9VoLaeSAZ`Nx zbbd`3^G#uLYZ6A{S{N0zatVA2b08e^SB>{4VTOkBoFc-V{a~Pc=EV=V8T_yxA3DLN U*A(z^C;$Ke07*qoM6N<$g83+<8vpImI9lN`v+gVzd}JbN>MU{{a900RR90{}2!m!YqX+00001 zbW%=J06^y0W&i*Jcu7P-R9J=WmOX15K@f(o&=qPdPDDk@%<77yIO82{5f_q>Zd=*f z)k3=a7j_>AIGsTRqAHLy;eJ)PGlVqq$4N~JU3QfaT&7u1}W|=Ra z!q0s1K>=Kp^48ZQ#Cd+Tm;*?@@&O|OdH(gCh63W2Zwh&?Vw0)kq+1Gai*`0Va! zAoWLZ4g{|$AapHWl=zwgw3B8zLccD$=K_!vR(1$gvyuc!IbkS%5P-7zQ7P9eFW?LY zl%s_At)=wWw+4el2`brTFcNMJ2BoY2(qQ<3M+U?1;2#+bV$**Oh9UezxY9OnQb`JY sYmL3L+U&6ZTmP`jUs&ScAD(pl0zv228@?pXp8x;=07*qoM6N<$f)Z_7#Q*>R literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nidoran_f/back_gba.png b/graphics/pokemon/nidoran_f/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5173e952efe4602db3e22a186f22c9bc27cc668b GIT binary patch literal 593 zcmV-X0ImI9lN`v+gVzd}JbN>MU{{a900RR90{}2!m!YqX+00001 zbW%=J06^y0W&i*I&q+iKld*2wFc5|{gtH*IeSxF7$^cJXvZ%7@r9)uR7SJhr zisl)Vy&lxDQ=`{%fs8dQduB+7CLUV#{>jw1Zpwy+3FPXPcH z&1}9^teiP2rT{P$yS9D$sc1nRAdiu$j0dN#2bA9{(?rMcTm4w7Z4c&i5*Rw%qT{1^ z`eFd)++M0@89FgIDOVQoY~-s(YDVw^L3K9kVkShr!_@o!!?RsEDV$JNR5*?0lA#X6FbqWV1s+ib l{6%3nHj*|O3iI23d;pE$hj#{ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nidoran_f/normal_gba.pal b/graphics/pokemon/nidoran_f/normal_gba.pal new file mode 100644 index 0000000000..daed295698 --- /dev/null +++ b/graphics/pokemon/nidoran_f/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 189 +222 255 255 +197 230 238 +139 197 205 +82 139 189 +57 90 98 +238 74 57 +197 32 16 +74 131 246 +16 98 180 +24 57 115 +255 0 255 +255 0 255 +255 0 255 +255 255 255 +16 16 16 diff --git a/graphics/pokemon/nidoran_f/shiny_gba.pal b/graphics/pokemon/nidoran_f/shiny_gba.pal new file mode 100644 index 0000000000..5b6e230fee --- /dev/null +++ b/graphics/pokemon/nidoran_f/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 189 +246 213 255 +213 180 238 +180 148 205 +148 115 172 +98 65 123 +238 74 57 +197 32 16 +98 139 65 +65 106 32 +32 74 0 +255 0 255 +255 0 255 +255 0 255 +255 255 255 +16 16 16 diff --git a/graphics/pokemon/nidoran_m/anim_front_gba.png b/graphics/pokemon/nidoran_m/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..84e9aa98e0db9e9f39f53e38fe0d2f6c013f25bb GIT binary patch literal 951 zcmV;o14#UdP)R%R<-piO@SgZkox9C+pU()V$rT)15cMKVVQ7pnmOl=&+6%GZIO#i zHqmk#tfOE10jK*Y62RJK$N__?1b~T;?mL}U23w&I=1)NP$v%Dn9uXblh?B7?0Qx8Q zEhRBi4V>(=;2wc~osnw@O(f2T3iCM7GQw14YrUZYenelP5s1$}s5CHwLFj?@@o2$g z$7>KW&8s_s+w{CqF|Rat*;!{%EI`0Ht=@vO;|x%AVF%jQ(-Fvux$6zcK;%objQyPR_CSUYtJMtvk~9gB zrPxv)$$6{ht^5vPAaiWz24 z+FnR(n_=d%fBcj4qtEEFc$P(NS!bBNuUst=33dPuHBP@nSLK?yLAxeY$repq~FaAlKqnzPIuB Z;x~k_M>EJ?8D;JP)Kl)sLgFc8KqYG|%bfoS#=yvn;o%Cqd&+uS}!O3)SO z>ZHL@zHW?vN_{TT@KBLtC_`ASI2j%zm)uji(?NzCYfxdnK zbayq;*$r%c7gO~1z5=bWqC^Bc8A{VP#>ff)U@8Khk0Njbj=3)SXFdJ_xHt)@7GPlD z+WZDE3|#7mfX9Y_s{~M+Bru@s57+BO0>UDIAN#{u1j>#T&~Gi_tRNVg9H?s6db;vrp5-T4^@QOX$>!v0cjodQ8XI0PXq{-D9KXV zYsz7hwUE1tEL9zms+j!@-`X6gdYBz@ryk(#vyfx=>M#!(|ht*WNcIq;9iPlWcUi5#C` Q(EtDd07*qoM6N<$f+(9AyZ`_I literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nidoran_m/icon_gba.png b/graphics/pokemon/nidoran_m/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4467c5192515e179c1dee97dd8d69e8a17a0b729 GIT binary patch literal 326 zcmV-M0lEH(P)DV$Gnbl$kbQME`aNM)}x*(WDKSt2#DdGJ=i*=GL2x1sE`VtiVv4oqsGJ YFR;#}>yfBmmjD0&07*qoM6N<$fDUrOkqGuletC<=-P+`NnK@`0I1YQidj%6pGClKlgW5TBh7F>Er4AB`;(Ao z`*$qL2q~Tfn58o4*#9jBy9fePTM&i69Apq637ZzlCz1d_I0B2`Oq1eqp!_|K-@pz4 zyYT~*G1?vgA4r%3#s#550p$J&ipA%r2t>-7RQLffM11n2SB}{#QKDesVSZ5p-Zcl6o<-Ls2`Hnz9YA9&guQ~;R?kT1cgaui0Z(C@nzTgm53V@qJgI84y zF}$d@D(!Zagv?uLE#da(Mu8)w6n@z&uqw|01b#%O{9IXps?q38F-U6sePOg4TBSnE zIkKLgqz;fws#-H1+L;uSEXqsX)cBPJfXJqdVKu7k<`H0G7}J=_1q%-mUCt7Q^Qaed zCIjaW0lvUxiW=)F)6gWblEg~Uwl0;ve+R5qmD<$dTf%a@0BGA}SlG}Jr$dA3rJ1Ve zu@0?r@b~dc{HfZ_V0-jAbV3L1{^?-T2K>+VY|r+evri-nHsrlUB3l0OG*DjcPrly- z93Z*7a!@NN73j+7!COrfWLYT2iXgzjHK3(o@i-KrYeEj-C}ie=5E^zs^3f@sfOeox z9OX`iH~=;U?MErG5n79YlR}F|CVe0QF=1fJ_;hqOZc@>2%D9T<1e}`iLuLB4O%enc>L8F# zAb@m$y}!CiG{mRLbpzI^ITs7>a?8HWHF}Hk=w@|o3zoI(-@bR@OYW#S^BSwUxX4tO zX)vn1nTWnZp&x#=TU`E}t6Y_r0RXarF>Hnl&B0aFJ7KnsWXVNNQM_PxuS2g0bb`Xh0gc);Awavemk!7YO#@=FlNXLs75QwHr_?%m zF>q%Pw_>~6zVznk_KCpImeDsvxiI*n>{D18qU5J1R78MKk P00000NkvXXu0mjfW-1{! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nidorina/back_gba.png b/graphics/pokemon/nidorina/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..14940d21f01c88a36a945e75bb01d2e2aa4f0900 GIT binary patch literal 693 zcmV;m0!safP)Kld+Q8Fc60I0ydL(BI(kFJVDMKFD4Vxv$C(FVP&Vb zEt%TF#y#f9O3d6LW9FKhNpo8;%>1AK)vkUq_F4b0g8e%{lfDBKanIP_N2+El=(PAvIG#z}FXcD$*7ZB~Bf}@KtA;7z9%7CxFlZ!1D$$T0Q_` z0^lUJQB+N}2pX${vA`1ZJ6$)<08$ZARd+zZue!(`u*{|pKocBAwD=h<<;$4pP8Pt- zY@ZfHRHwT+X3oG21kAq@aKB8l5E(O6yV*xVAKx#hU+*!eQl8@_pNy&c&l7zs(&5+F++$7}z4o9MIzVF4*ia)6P+>H2CUr2yLl zkj36NFxOY*LeLI7`me`2I$h%ql7W7_*X_Qi(@VNW>Xp{kNcO%iFh|{0nA={1yG-_3 bA6owaST86Q)p`kK00000NkvXXu0mjfL!>Vi literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nidorina/icon_gba.png b/graphics/pokemon/nidorina/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ad90d02ba3ff1712708bbfdafa0b019319bdf479 GIT binary patch literal 325 zcmV-L0lNN)P)DV$@k~X8C1b^%Qa6XGba zcAF}pKw|VBKaEm9HP+Kw&-sWn0hT#SuqvIVN;CuJ#LTsrFd}8sIw`To5Zlh0**hDt zg01vjz?MkFOel_Jn*04OA7J>=gIQW60)XY~SU1r*4$)BSD2FAq3=MR?lwcDN_5_Bk zNL-v{7C?m%CVM;llDdy4&;|9EAtwylg+Xc1%MX$UedWg! XepHQ?d&=Xy00000NkvXXu0mjfq<)Gc literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nidorina/normal_gba.pal b/graphics/pokemon/nidorina/normal_gba.pal new file mode 100644 index 0000000000..9f4acf8be0 --- /dev/null +++ b/graphics/pokemon/nidorina/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +197 197 197 +131 131 131 +74 131 246 +16 98 180 +24 57 115 +255 156 139 +238 74 57 +197 32 16 +222 255 255 +197 230 238 +139 197 205 +82 139 189 +57 90 98 +16 16 16 diff --git a/graphics/pokemon/nidorina/shiny_gba.pal b/graphics/pokemon/nidorina/shiny_gba.pal new file mode 100644 index 0000000000..634e882d93 --- /dev/null +++ b/graphics/pokemon/nidorina/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +197 197 197 +131 131 131 +115 139 90 +82 106 57 +41 65 16 +255 156 139 +238 74 57 +197 32 16 +255 213 255 +246 180 238 +213 148 205 +156 74 131 +98 16 74 +16 16 16 diff --git a/graphics/pokemon/nidorino/anim_front_gba.png b/graphics/pokemon/nidorino/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a048b8b0644a42da7fd4c9f60219ea2cf330ca99 GIT binary patch literal 1277 zcmV>|K^<4y<)wCDTBqu#e;)`5D=0S00001 zbW%=J06^y0W&i*Ldr3q=R9J=WmcMHxHx$RGU07kRH0(KW_b0e^bJyPe8|x~qr#b%* z^|6r#+y(7Ck##sQ(nt=5G=`Xq%Ror-o;EplG_!=134X=yF#3$%5B>PQ zEPJ+pVdLvBk1!0(zdSAf0ceV0pek&9V9SgRA>%4+rfzlShk-f*tWrS_xnPxyz)Ett z3#em=%iNnmU?F8ep3ZZBO)o-9I7vR(JkR}_ttpv4fIi$g0!3S7?Ro%EYn9H@DS(^qrzH$`-w*<_Vte>h|R1ykzJ|zHVYMt3$nrZ`_f&gSgnno)D zcmyI`F00O3Q=OdL_pR)$OH(I48Q|&AVVX&d0?d)S)l_1gyEkF zVY`|u{A@LU#OMH@FcX2Ewo<{(3f}SiM(L);EP}UK z>fPHj9Bv+OCPK>@M1c2Z@TOJTa<#8DZ=_9qxY}#R%V5R94Ih;ujgl>DPoI<*69`2- z2E7dt-v}!V?gQp~Kqcde9U04MB+xt^z?)58oAJGaaL@&w_V2b|>^<;@ZW2#LH}4`# zNC1gvgNzpEQ4BXB-c+cH)7*=K4W+??xuOYz#x7Y~!Me@1CyPnhzza~{}>#l=F%D+UB3<;H_ z!Juj6w@Xi|iF3pou)E|IulL1;C%HtceZRpFVCEMS6h#7Lzy?G2fU~oSi~uQjYm!?O z-``E}r=)RIlvFI3is4&M+9;u^eWKi01%QipC?qCW>JWUQ+|(qM_b(A}6)CFMiE>vS z_}jzxs9K8(Wj6#PI*P=k;_S`qqf0@;O@1IzZfte4A6_BQMqS2gTj-o~>XcD4mtj_O z9$PI9=^19InKsO*+;K~YR2AkoT=L$&WSpboTd92M z!8hrah{n-smcChvUKFD!r6Y2I5o9=! ndzA6rkIxeVpTD72!00000NkvXXu0mjfb#_=A literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nidorino/back_gba.png b/graphics/pokemon/nidorino/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..01b866e00569dac4dc191d992a0a2572146ba04b GIT binary patch literal 741 zcmV>|K^<4y<)wCDTBqu#e;)`5D=0S00001 zbW%=J06^y0W&i*JV@X6oR7i>Kl(BBxFc5~l8n94!?9#_mCa=}xcW_5R(hHEyTu4U( z>B#U1B#Q%?yrE-<0(pb>NJ+LF$KJZ-213AnKK}RL(Tl}L{D)Y%r`y0me5ad0=7n&# z3Fxj9tC;aO2n+PY0LK*_Sp{X|HQ`laX@s=8AhOqpx&%-~QILms{UAgpUYOW=^$xK_ zjwS)c7TUMz)x)9;CZK=Gb0+)+@OaNPs({sxJkRgA#O@7ni2l?q8vQjAmp~?=Uj&VP z0`kJY1r`;+F0+lRiU{0Yidb4`Gh2s>IKSC%+w(?|1z2d%xC&^WZ}e8{hqES-eE?u1 zdQfh^0k1$4(Xq@y&=RdebjXIfz*E&)$dg}LCquv#KmncQsr!KD)Jxzwr8J}uF5vAv z9~E$#Acf)r`nNJ?Ueug-FpDqs%nEdAn0`pvbgs)8@F>WuK|oZOuK76!G8;XxU8DV$IRxdJEE0PFh+(=or{sLnjhet8_lr1Vu=M{Xpv-NH&t| zhuVmkrgRfP8-p3}P8|^qkY#|z0RV%9=9&T2PDIxNUGfqrqEiIRI|=~^djUEKQ}7b( z=1cQJD$HXGx`S7ni29p(!Jr~cYfu(O81xi|4XVPd27Mq5|Nh&;jM9&XFkXP~`f&$I WVz}_kxH-xI0000XhDkS$uqU+;qb=2Lj&$|kU^+jQs~mH zLW@I*fdgA8ZW(IoqL4y|K$o80wN4e^1U;x2uGbHzmLvyB>mZ3eGk5U%yt$aKyTnQ8 zaR1>F-sgAk7a`A&kT7AcFl(38Z#=jRh_4ab{yrGkh`%WVNcLc0aXXbW00zt3kMNRW< zLUAVmCLOcRe$eHj_H(tjJfg_+rvRpR+A)&p$r2gCHhYwknzV0-eV1^Qq;7~>V*+z07_z|Fxivjg?u zi1E&Qs(X6iuaD-Ny?asj^uYI*KDtu{Da!#*5BkqBx|0SdRC#mv^q}7#3h7!F0c`G$ zrw4uhAfzkA*-EPumTGx=(B}`vK0Z#t4rL+h(!bHH`|{?K0T82thJYrj8q?&VsbKb&=T9Ow_nT^G9);1A;MPCeKkx{P3` jKky9q2NL>2n5)h|HX4ELZg+~W00000NkvXXu0mjfY15hp literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nincada/back_gba.png b/graphics/pokemon/nincada/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e35b19cc7bbc8eb35e2ac927ba78ba3cc2266181 GIT binary patch literal 576 zcmV-G0>AxKl0QqsP!z@QDzufm#kMLG!M*wc1OtA86kOcwAP5=! z0&nZ6LxqYJ9DSjpoAPQjqiO7)(P~6N5wxZq9E*BilGb9y*`a4h0_T@=&wUBNNF)7M z6*m9&$F$`F-CVa0j&phO8=z$h;4(JpA?B0yVPZR*&F(6S!tf6BTa&{;Uenf*fF>$3KZ$sdsoZ$aI(SEYKVrPW0|v5?7sO3_V@V%~ zw~bcaQUV|uKYSHtt*Xv{6A^xRdxgjX!hSdx)oxWy&-Q^PH{VdAV5vegcZ2aAt2|kNWQq00LU47SmBJWF}Vb9l3#9xfI6p#6>1WYzEL6I zGlEm#&rtR782#Vpg>yrch4~4Qee4VXK?Q(UdYNo`4gmP*C5$xEf6^DfTE@_9H0nnH O0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H-bqA3R5*?8(yZ(^FTrrd zI`-6MX;DR0)0krYnvkei^I#H9%OGjRhN^cHHr+{iqg1pdKy#Rbj&}mu5D4Y-NW(i0 zP6!~(qhySLg!W&^c=%V#_}Ay!fPpO-X9pM+qMoJyQx5D*X$kuInP00001 zbW%=J06^y0W&i*MD@jB_R9J=0m(OyfHW0?CRBow-C&&}zEw+5l3yU4+kQ*)GyJ^88 zHzYB4!;r59!wAfHZ>iv_@p|;5|EZ<^Hp~9cPw2i_%&%Ga@%9DKUxTW@GT#SPh7g{6 zxF|(<%(E~809BG^d%pfHE)(%QpPBgf_M1`{CmynFJ`JE(WL_nP>v@FbM@i;=1n?wN z|50l5zWO)^hz-}zefU700BE9J5+S_hv39xg;=j=iwds2?HyZ)M+lGl#ASbFoR51Fh zQh$Fh$u~?kbr6K8E)jV7UD3^Q!(HM)SrATLvtN|@{)eLL8*JRu$dx>>@mkecuhcvC zqRYJBfIb4sks3|>BUUNT??4`R4C#Qq2>4+q$4``-U6K1<>AF_N{Zh0Q%7` zPP#|Ff_+J2YdKT|j|TmarGSY5)@@&E3CZ2s z9l$OEY`rQql4{&E>;c&y%{PZ4N!Bjdqz+iJ^9&npB}D|FN0$Id)1aA5&>yjLB0z1@ z(j$_Pm0@i*08Y1E0vL1?!m!amLp@nypB&6lV=py_v5E%hgIeY(1sVYYjj`ZH0zk$I z;1Gh6c8dUeiO?rNj#tsqWh|Bej_PhY01P<1KTe!7W=c>ND-agy3>NIPct;P?)VhMdnYVkCq& zhi8k6tFIRSvnT%<;N$0CPu`ZnF2D7YRM){C+_OUVn41RoEQ`O9OYOKn?dkj($2-7kR6w@fVq_PXJr$#y6t?=amf3 zU}%qW&m?zs8pK5|CsVDjzQRj9YPwMiUdOd{Du^tH(}-)Pcx{($PPEx|5yS5brM4=A1p2p5eKGjA2B5I0S3w_4#>~#&cY%eTE?+3C0#t} zA!&M?L>}fFK4;u5wRA?)w0i*URtDcn=Ln!CJ?(%f56FBhfKlbd(@x`vzQ9ENklRa- zND(F5NtmWmnA`(J0n(x`rzruX(g3WhX&vskBoiP|455T*Sb>?$wb%gJ3B0OaD{VKR z&K^KEFTki4bs*Kiyi0&=MvbU)4(zcZ(=MoJyQx5D*X$kuInP00001 zbW%=J06^y0W&i*JCP_p=R7i>4ltGf?APhx)fzbCqi-_j{2t4~3;yqaOew=bkkW`H^ z-cJpw$|Cua__GpsO07B_M+XDDz6p6KBpjhxLhGqkblIZT;su5RnI)|rp1l82~|Ds zJgF9tCIm&_Ws-HQ#q0B=E5NW16smr5DFqz&O>5QBo=iMMuYjF9CX|+6 z)O%KQ$;1&T0l0mJ*)g$HBeH^=_}N6+Nr_z8S3a;F5G8Ul1H}XD7AT>VA*r6uM;1#e z+YNly4Z>O~Tmg?eI<2+60&Xyajs|V#9IC~UQ?r#pFI^xe&b_k&^e-=Q^l=L4d>2aAYQLI61Vb1r(ow z=*GAWH?*MzA{U6o1WxnBd3d%3954bd?>pvsL!X-hARiE;_v~NiUCvs1$ROB74t{IW zri|kPqL)eR{@GZ#=~zAR|0R*Rjbj?es13+VE{_1(+*C*=YHnbOp>gLuoGPS|K+~i4 zaJ#%A2Y_5M<61qI4zH$0N{(iDUkSOFVLuY1<5#l&zdobfqJOde(e(oWx_y&B!S37u O0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IBS}O-R5*>@lEI3EFbqKR1@?nvKU5a%cSy?2Sq%0I7QD)qQt%`# zn@Q`Sqqku%%l1<9OiG$QfWN*NI2=I$g^YK8#;Oh~TC@>2qLw?XDN0OKs+Q%hw53GM z$>sx=npkU1jA%1Ri?OWbCn9!9Y7|oBh-)H3vt~ej7d_gB(_m}?LlRb4=W*; zD#bqh)7QrN}=neLI~{aAw31ML%aV&uZ5(LoD90ArhzCreKV`>4<$MFP~Sn_ zdEfVAo(u1T(8B&R3xBysP>Pc~{h@alYx5k0IDw&^(mX|2#~6#^A*C?+=?$;LA^zY9 zlx8r62*E3ZxTzM1Q5Y%#Kr<~jk@Gb zAc+=nbvy`Vw~6B)d5xuU0#Tz@8w*ec#|h4Eq7KV;odn?4rxl=yDm0OO*2%F114SK6 zq6NG^5rmZYO`Of7Qt8CV?m`8fx8PRb7mXhz)*0Jcx$f9a(SoGA6%dNl@peK^ZOE&= zyzR6AIaJSNXnk8=@AML@nRM?8ON6)JeFrExNXpMUHcnxg}w9j3pvSpnT!o@5}{vx3iG)1gmEjs%8X72 zCMYzY!aQ;WH@G}%xBCV)b=~mQI4Zo(*^c1!)FviK8vYtL7c$1lr)q(<+l-h*H++5C z!?OX~kl9GtVU3;nkg#hD(`EDNPtyG0Ta?oMP z5j34BAt~=Ggm2nSmmd%;=J;p9AW$fzyyWTdLzf>29KePrO_5m$I1qUGK_Ci#tg0nx z+$ABoDL?QyorosZ3Pp||JG=1c^23!#AS7#oF@VItTz=?}!}U+07*qoM6N<$g1sQnKL7v# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ninjask/back_gba.png b/graphics/pokemon/ninjask/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fd2daf29a34c618d3efe6abb0269951129384ac3 GIT binary patch literal 797 zcmV+&1LFLNP)Kl(BEqKoo~FRG=zD^@6aPSfc7Bb1QL~iRy#}iCRe5 z>P9m-3ljrk&S2(xW^uBxF z@9eV+h3kyM3rbba>l5x|JFIG}RM#YkoxK8=Ks<|Tm{3s zmq-YZ4}{RCBQ@4~iU5|e$$W{}z%--x2cwa~g-r2E;v8gB$znnW2>cupFh&3<7Jho? z5kXeoeMG@bjZef|2rvXqB!GV7H>ju|L&`AL;x$d67Ue%{Fsa4LiAWSW1%fljBK|B> zigDq zfMv&XysbWM!qd^7()-CXBfa+Rwy{N5%5!|jcaw|0gn&xl4bpG>UBhW3aKm+6cRRgr z8tdspS9H3byPN=pPN%bdwl(zp-Qv0amgjUY?cEFGM#sT$?oKX1gzvb$d?0Z@{a5{Z b{CDFw?2%c{kG$_u00000NkvXXu0mjfZenMF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ninjask/icon_gba.png b/graphics/pokemon/ninjask/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c51533c675a239217ed454a32694ce7866181075 GIT binary patch literal 324 zcmV-K0lWT*P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H!bwCyR5*>@k}(d#AQXl<0mKV5v3qS&4$yPf!OmsjDqcWQHwQ_> zo67RU)+j0aKQmpVP=3Dv3I$N5sy2M z`2}M_DePPxHS^l52Gbp)*2k`C7r+cnJ1hXh7QtXTf*;iBb+xwy_D^dc+2SSlu(<*} zn^qe8wXKFzu+b3|0R0Vcrl6#tAQ|CCkeV3V7bxXy9NTxYnva^=4>}sA_G7vK+x{D* WZ;qQFvO`Az0000^U#@kA00001 zbW%=J06^y0W&i*Lfk{L`R9J=WmcMV~HWbH&!iJ*Zh727FTv32_F1Xc{8)V59GFibl zG({{z(9&!dWD6QOw5B^CXe~{4;U5wY1#aoof23+r;r^Xjs;+4JGq-uEIn**LURb{VHzfhA3`dSYlcVA9EYN6ml19%8| z2WsNgTKgK{1R-=$PHL#BsQ~f)b#fDET8xQF1EHFxO8{yYta*eFfjrQ(P=)U&_~fz~ zz~orB%x@9eV+|fdyslfNWy>y+?6A&tam$kL%CXNQJy8A7lJR8B*ia8VedZybAJ(V= z2%heKCVt%g1Q~%R&))^Fe~1w=03GjqN`&z0M!-eWHbJOm0s>5?(-9%q1XM9TJa1v_ zQqw*_aEu=StPWPgR6*4!69@xfjZ}gt=Y|x{H!@EAGoI)H{?*&J*dLg@xwqQ0&xYvKo5L3Iu!0hz;y?J z$rY?Z5AbW;oVbLW0Bd@UamOXcW*}BS)+tYVdLU0)5T|d9fODP)ghb+fk`A;d!bwCd zL|eS)MV4uaLd22q#c{8=OSOd48Eyv z3h@RK6zSkzd#oI0v*DdEg>9Zdm%Rpdcy$Y&wm1Kbx8yTGO?Rpjfy4lhg2>;WuN0m~+KdXs>%C@bv&g=$^K2w4N*k@ZV^KxonLvVc&!4nT?{ zWe-4fcoz~-x@cl22`B&|E;A6uWd%wWKwkocg~}cPKsi)^&nf_qEKv49Ru2^rvtkZp zK`a5G>_Jxop#&CP_A^of${yr$MVkP086?UcjAc6^^tc2-%VMASj4FEo;>x0s_>d!- z0Yydv3AB_wAaj6{_5z?p0+-4jEC7E6@D(st_5emGq7s;G#0mgE7K`a=CSnZ`31tt& zn4YGCvHXh6c4|igu`is`9*pVBH0}3dKb`|l24S09c4-d+_5sfDpntIn*y>VAlszEq zu8@Rf$L%>VzjI1^aGK7<-Jabw&f@es${vW+Ebhu4n8h7ZfIS!*#a#j{?;5pTt%K&w tXse}v2w)jT@mK!A&E3}j{^4(pKLJ%BQ_)I0zs&#u002ovPDHLkV1kr&OY8su literal 0 HcmV?d00001 diff --git a/graphics/pokemon/noctowl/back_gba.png b/graphics/pokemon/noctowl/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e9984ea5e6b21f73526f6dfdad477aef1aea9246 GIT binary patch literal 659 zcmV;E0&M+>P)^U#@kA00001 zbW%=J06^y0W&i*J5lKWrR7i=(k0Iks&*3&h0{k`P|Ffk@9mK^%a3 z%py5<26AHqaB4)_-avB;xV**%Ns_aHEG+>22B7T(Eg|g5{HoFA4FQ7=80ZrYzfA#D z!{@Dz0+u29WdP5lQxKv7ax&(qAfwQwc>n-(0+?Bp8~eA=4j1mzaJ_%fPm=-RFBD=fX^81 z!kDW9lwisM+d<$20yczy0c6}!0aCNI8m}`x2k=aX&j0~mcTs;}R|i>h-tBh-a(Bx= z^V6DN>_u63!yi@S0Pc69th)K#Rx}m>0?{;jeh`q_{8fXXDOF7lD>U^ylP-`zuh;mk_K=9fsg>a?FAerrF=AjR|Qo3ZVPS86D%k5VA}}gt@vTLQ{=k| tNIjR;Mhm2Tunc;x04DV$@(y9c0B_*Z1U7jVmK$X-(UC-VXPtaC zA_?Oa(gZfny4X8RjEjSI{L?F>{gnElrFFjuQ!k^=d*vn>$mJpsEP^AG6Fb$Jt*L=+ zA!F*12S-G^lJB?{MJB?|jRA zj%^Vwh5?CO#T5FSb~8UFr=U7KEQY&6gYS=FvJNx zU)O`7*aHdwGJ78}e|`_9LMBSxIsm~TS|OtJaXTFv9^Ux41Db8B5PW>$c>n+a07*qo IM6N<$f)|yRCIA2c literal 0 HcmV?d00001 diff --git a/graphics/pokemon/noctowl/normal_gba.pal b/graphics/pokemon/noctowl/normal_gba.pal new file mode 100644 index 0000000000..7107592362 --- /dev/null +++ b/graphics/pokemon/noctowl/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 255 172 +230 205 98 +205 164 65 +156 115 57 +156 123 106 +123 90 74 +98 65 49 +74 41 24 +197 49 24 +156 0 0 +197 197 197 +115 115 115 +255 238 115 +16 16 16 diff --git a/graphics/pokemon/noctowl/shiny_gba.pal b/graphics/pokemon/noctowl/shiny_gba.pal new file mode 100644 index 0000000000..859222f594 --- /dev/null +++ b/graphics/pokemon/noctowl/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +246 255 172 +213 222 90 +189 189 57 +156 148 32 +213 164 74 +180 115 0 +123 82 0 +82 57 0 +197 49 24 +156 0 0 +197 197 197 +115 115 115 +238 246 115 +16 16 16 diff --git a/graphics/pokemon/nosepass/anim_front_gba.png b/graphics/pokemon/nosepass/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7f7b362277af6cf653a197cecbd0f35da4079d GIT binary patch literal 949 zcmV;m14{gfP)Wk)0000002mk;3q(bC00001 zbW%=J06^y0W&i*KGf6~2R9J=Wm(5PwKoG}c2_$Z*73WroS7@}RS7doiFGx|<9dqfe z*ry(YHkFWijL8c$<_SpN0#V@Nharkkj_H3lPzt*?M|#LeIn6KgxtW=?S{r#ok(4y6 z^E{6l^tqPoU9+CK&cvgh>4Q^GYx~TSoIbYL0J0YFIL)&xJBEik0FtJ%76^g_M3yBr zfJg6t6D27p(g{q8k*X@6m=m&ro#JdZyC_bp3T|RSRvnhJnE`I9O9BvDm0S+brzM(k#&Wgk?x}lHSpYb|CPcnL^tD z00ls32MECR-n!~UQYT6Dd!?RT#@61E20|&(3bKYex*UozcFrqZz8gz-Nq8{a4H$ZHbnon^J5E!+884v*1 zybqxDD+qPju@*6=tJ~A+D-H||xQ3~BTa2okw7SCXb^}9m1YMDgm}2`xY3+=Q;uMFL zBxLIZW)rjfv7Q4bFrJnpoDc&5pGnLe2BwoyQ4|_LN9R_Q<5@Wwjsa;P68=kIXI7R4 zK5GCqdkKs$N+SSt7JaLf%fje?AxNy}aA5&$++n3seuuE&<9%T_W2t`5eIJLUw$Kr- zGpW_?2w~nt-E#GW2-j*M9F^37J`H+ZitQ}dvIvFv$X{@RI1L~OA$mD(9ExjxeBOMu zU~T|fyZ-&rNla1ws9OP$VaHj8hd5brg8|5%;(mhx{U=2B8;31!5c|136K`{1ypj9? X&HQ&dv93sf00000NkvXXu0mjf#q6L_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nosepass/back_gba.png b/graphics/pokemon/nosepass/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..21b41a3cd187be2e911dc64856e75bcba17170a6 GIT binary patch literal 517 zcmV+g0{Z=lP)Wk)0000002mk;3q(bC00001 zbW%=J06^y0W&i*IgGod|R7i>K)4guOFc1guAYPzV6SYizg`zX8Rb-pBLb9_~4DsA8 z9XrygE9nbV;^}yVp3iaOI3F_uHz1Mw>3`;MlH^ubS4#kx?QgX)u$~56V^Em;$pCE5 zime5u*1EWx4k#r8y&n}6pp+sp9e^c-)*}%VpfN!S6#JJ^fG4y8Rt&e%01B`b4{=Mt zYWgCN#Ih)gG6W)zK#A1@(GZ3SdJd%81q9&nvk#i;&QRA?)tO8Vz^bl)&sFu+2deF- zPMrTHKuSZb_!tGb-S>*b#Q`-0#R0+Tdj=ScI3B0L&Ky>! z0sQ-(roh^M?C^F*K(P?mN6$$JlxP5llx|)Cq@w%*@NdAvU1tw~0LRq#Hi3&6aQxDO zrE=$E%>=+x0t+uzMiHDf0SLf>i@#Df0vHDmFa<)8N!c`+odEC<0ZicjClXi#&EWq1 z*hsi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hm`OxIR5*?8lCcrOFbqYtfj3}0k3g2R!vdDW0I>oMY3zs#4PPl} zxHP%^PVXe$FCNkHqH1Ty{4k(Kp3FiBc?){Mn-&6FkRp#axLBB{8ow)U&=wja@FFF{ zlh@U^j9=%@SJQ0nG{ua?w50xyRi76r1~_FlfJlVS{K#IyD3DbcsbI`1j3!j*Bg_C` g7h!bS2=kX8Z}}0DDMALIsQ>@~07*qoM6N<$f@BePQ2+n{ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nosepass/normal_gba.pal b/graphics/pokemon/nosepass/normal_gba.pal new file mode 100644 index 0000000000..ec36812884 --- /dev/null +++ b/graphics/pokemon/nosepass/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +57 57 82 +197 197 197 +98 115 123 +131 148 164 +148 189 180 +189 213 222 +139 57 24 +205 90 24 +246 139 41 +255 197 164 +255 255 255 +74 82 82 +0 0 0 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/nosepass/shiny_gba.pal b/graphics/pokemon/nosepass/shiny_gba.pal new file mode 100644 index 0000000000..b17260e5ad --- /dev/null +++ b/graphics/pokemon/nosepass/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 172 213 +106 74 57 +197 197 197 +106 82 49 +172 139 65 +222 180 74 +246 213 115 +189 57 24 +230 90 24 +246 139 41 +255 197 164 +255 255 255 +82 57 24 +0 0 0 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/numel/anim_front_gba.png b/graphics/pokemon/numel/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3ccc839f98730fd928b5aaf0b144ad3ae5f2a0 GIT binary patch literal 835 zcmV-J1HAl+P)r zVj%Y30L`>H-pwHP_N3L-l>hE(l-?M$_Azs$Ia+gSl$28D-tPbZ{}>n;TuTxC00001 zbW%=J06^y0W&i*J!AV3xR9J=Wmd$DtQ547T?4$%TA8odhGZ6v}$m9eR6oz*41j1zH zM#R}v5PSpE&FIc$cP?wTT_%t=#Z?MEfxdtsiGnL(Jm=1x=FXQ3H*V%nDJAEZGiS~% z+@BClnpEWG^6&K)bVch%{&{CMJ1+w(aLpBPm%Wegw`a2oAovY1;QAS-MC^}o3veXF zdHj~@ar~hG7>Lej?2ElvK84_pE^2K1*O>wPodVDNh7Q3In7 zFy$6gc#|KYI{?J3u=`X7>H)Er1FpJV*F!XI00tO4)t}LFEzfh-*B%b(>p*!J<3EnYMW5mN@!}RhN)d1`aE?w2xGwTic25XHItK6414c+WTz;7& z52+fIfRp9-MK(gI!wUu$->%aJ)S)ngI0(bZ%lYC5s0Olwqiw1aPNHc3S=G}KazHzx zyxQ8kB~XU?X(UwN2t(Eb1svbkPb*1yaonOuHIJVFIUs$Td*KsmFs3R-l|VNPpVKZ} z>_pEBkC3s!qG9(5@FFL_hzxLvpx@|QSPcYtH<5s7=g(WsAiu?!&+k>L)57>=?Os*) zLZ5PXJ?YY#G-=Z0zoc40cBxSitzNAl%5drxWCf;Fr8)(n+uLig>35hG{~q^kW7P&It9rz$iiv`(KM)9 zL3SEsY4^VlWExbbAQF(4lZ_x}&=&EDH0baG*UC|pf@r%uNHu7!y#oP(nFF3KzbZf( z#t3$s=rFJ#Pf`lv@y}2L*rcL$syRK`o&dcAnbagYVNYTO83hCs1mYKaP-5AvAkJ}* z45P4!HW7&d9xDj_PoN+DESy%GeZdB_6kxTh1cE+HSV4kDAe#JR{s45}MiMNGJxTxo N002ovPDHLkV1l|Wa&`a! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/numel/back_gba.png b/graphics/pokemon/numel/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9722ff438383802a4dc1ffb9e1e8aaeed32b49db GIT binary patch literal 573 zcmV-D0>b@?P)r zVj%Y30L`>H-pwHP_N3L-l>hE(l-?M$_Azs$Ia+gSl$28D-tPbZ{}>n;TuTxC00001 zbW%=J06^y0W&i*IyGcYrR7i>Kl)p~GP!xyTl`zVIYCTC_Dy>OCLm* zE29%-LUEApOjX05=mPKHBdBpRCiR?4OIzULWa7XHxh4F*eD{>oTTR>5zpwm!v^Cc! zaI6gHV@3YzfR5nK7b#YRAi#Cq_%=-elvi2{LS8J+-RP;*j|5ML6O;l{9E6mI zS`1v;6th8M{3&T+80T{S6>btm)CoPc=|P%~!+o`Q5gUNKW!oqX5r8YFW@0)?i>(+) zO?qO*KawK)QgTj`9bk%Ul?B#ww92q-LbrbdHsthv0M+5&)nC;Q>XZ1Jl#-%R00000 LNkvXXu0mjfoNM~i literal 0 HcmV?d00001 diff --git a/graphics/pokemon/numel/icon_gba.png b/graphics/pokemon/numel/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..62281e8bf711859cea0891f167bb65c719a0cc66 GIT binary patch literal 301 zcmV+|0n+}7P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Ht4TybR5*?8l06E;Fbqb00_R4(g_bTpmohlBH6#ZJ_9cdK>$@>fIZte2u?YG>yej=a(Mv8z4 z^Bdm}z6PD|{Xk?27&!ui_XH#nUl7r*3EW6q)EW~I7H4abIWNZZ!nX7g#IgaBkMqxY zz9@`&R~V}N*o84Kgel*B2(#w-Sr{3G`M{3{WtX4F)Uxhv00000NkvXXu0mjfmalya literal 0 HcmV?d00001 diff --git a/graphics/pokemon/numel/normal_gba.pal b/graphics/pokemon/numel/normal_gba.pal new file mode 100644 index 0000000000..74388d36b2 --- /dev/null +++ b/graphics/pokemon/numel/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 148 246 +106 98 32 +246 222 0 +205 180 57 +222 205 32 +246 246 164 +213 213 148 +255 238 106 +148 222 24 +180 246 49 +115 164 57 +90 115 106 +148 148 82 +230 222 238 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/numel/shiny_gba.pal b/graphics/pokemon/numel/shiny_gba.pal new file mode 100644 index 0000000000..2162c155c7 --- /dev/null +++ b/graphics/pokemon/numel/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 197 180 +131 98 74 +238 197 156 +197 156 98 +205 164 123 +246 246 213 +213 213 172 +255 222 172 +90 172 230 +123 197 255 +49 131 197 +74 98 90 +131 131 65 +230 222 238 +255 255 255 +24 24 24 diff --git a/graphics/pokemon/nuzleaf/anim_front_gba.png b/graphics/pokemon/nuzleaf/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..02aa6b1d4b88c32e23191c6e977354b5e765bc36 GIT binary patch literal 887 zcmV--1Bm>IP)Ryf=sToc7S3nj9AYf;lBpWt`b;sK7^J5#mf2lY2o_l@NiH>oE;C&M}vX{$4A5C!3a)qb~GFgbrBF4sq5kJM2)}- zU(kwD->hq;N65Xzcoj_UwB1P@%LpVK`Yi5CO5Z?)L)tWr2mo+>tMM3POuImeCsopT zaqs>E+GX}8-qs0izub68-}P+kZY8~g=0<~VbK7&69MJB*CIZ^A0&aXjBi|5|a2qg* zqi%$yCOR6J=KGj@=DxsE?sv#GXKSBwgwMDqH6V7kIbVzWxlZ-vj7!N)u>Dx%I`t)I z9?yblFb6m?Ty++JumQ;x^KiP}n}&kt+wg@H!d$Mm(^y!ZgfFH3rFZEk-152{rF=gF zq`>QWAWIT)oc3bfwXT$Df9tb+4>z4=04f99-T(r)IE|+U*d?dXda0v;^DJgSHz6XhJC}G-z+pPP5(ufNHQwn?X<~5a5u_v;=t$-DRa-sZ&A%`%^M0a8;KG zpbF@Y$61w-7MMWqNvGIlb%{X%md^1Ps7CM!HQao z@sB)k#o9@x2jAmZSU%w^cB2P7e%u$9&&#{K(Sxx$vMoSup$BuZCu|vN3q6>Bl-7Y! zS?IyePiY%TsI<_7of_v~ZNP6mP)TAtBT6*V{$liC#%q>!Mh{woUswTOVr=xF zm7nYxp!L8vdN2n7H08`UGjndAni|OTAOyy$IU`eG44$MjZuFpMoBUanxzPh?E*oGk z(}NHKT$$+scoduIA8~G1hXr8Y34a36Q#9fH6R`A$r9b>tXXy{Oi(fr7tlEPK5TF16 N002ovPDHLkV1iE5p2z?I literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nuzleaf/back_gba.png b/graphics/pokemon/nuzleaf/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..858377c116f41aec7c3127571fc31bd851312403 GIT binary patch literal 583 zcmV-N0=WH&P)Kl)p~GP#DF_0?j`;Nt{c~?SnK*HhwrS3<=Y01Ts%a`* zmKQG!fHK>-RRVVC`^?e-V7mW2@5(?D;N#-}`v@Z>AV`6Y6Z?43xeTo02ENIBfcbT` zfv*CNT4R6W!%zmi*!R$h5`SXcbgO`$0a?K0{;CdG9|HgsAR8eI05I-q0IvvuNgeQB z1`G*6g^QvA0coSqXJr5eG7$C=hzfvI_d4*jDnO*y)qX>OM*7j8QpT)mNym1a0*DxM zW->sj9+d!q>J%NOJ61k|PVtxVEdf?ufIys81zHRWf)EwZ(ET8KYHP_=1tPEr3XxX4 zR29hOkV}BCs;{*UaAa_o^!;Ai2h^eO9EpWGLb?)G>S+cn5}(xuRG%d!*5Ri%AO~hR z@uAKyfF@-Cl|MhFAyc5XKM6>eN$rLJGX*BbQxou*0cL$i&om$KUx^wvM4a>|{Q~u3 VU&J%g&!7MR002ovPDHLkV1n04{^9@t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nuzleaf/icon_gba.png b/graphics/pokemon/nuzleaf/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8c9f4038f351f364e79cd59f55b0f4d6e95386e6 GIT binary patch literal 342 zcmV-c0jd6pP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H)Ja4^R5*>@k}(Q{KoCXe1iR<4&lRja#vlYe$5wlcARE$#5Xl)V z1e>s0L@W&17zy~t+9sLqKW5m!@Q8kGbOoMk!Y@)j5`FJH3&v# zcVN4K=fQcG0?^k}j9{o+297j;iQyMt7^+C#$^jV=d5T!obZejD?k17zDF0uLXRCX`#j>jAby0 o)FezQKGQOL(fuO~=8gS$11=1fzPtgOJpcdz07*qoM6N<$f|!Mr;{X5v literal 0 HcmV?d00001 diff --git a/graphics/pokemon/nuzleaf/normal_gba.pal b/graphics/pokemon/nuzleaf/normal_gba.pal new file mode 100644 index 0000000000..fd8ec8bff8 --- /dev/null +++ b/graphics/pokemon/nuzleaf/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 148 246 +74 57 65 +205 205 238 +255 255 255 +123 148 82 +180 205 131 +230 238 180 +156 123 156 +205 156 98 +230 197 148 +98 197 131 +148 238 131 +65 115 57 +106 82 98 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/nuzleaf/shiny_gba.pal b/graphics/pokemon/nuzleaf/shiny_gba.pal new file mode 100644 index 0000000000..1706d316bc --- /dev/null +++ b/graphics/pokemon/nuzleaf/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +180 213 156 +74 57 65 +205 205 238 +255 255 255 +180 65 49 +222 98 49 +255 123 82 +115 90 90 +156 123 123 +189 164 156 +98 197 131 +148 238 131 +65 115 57 +106 82 98 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/octillery/anim_front_gba.png b/graphics/pokemon/octillery/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..82d366484e331369c551c45d8bbcd1c540fa4aa1 GIT binary patch literal 1019 zcmVlUVI)~#9hq@ysHR|1|)uN{C&!jfP5V**rA0r+w@U;xmZ!UlOe zEC6$z7Ra~hCtx5n?*J!KI@N#`(~3_eqC#U4uVPSA0eCVn1D+4Qgjh*HZ3F@zJcocp z;lcMqPbcR=@3@JbedBo7V4-q@#^*!uaZ%SVm1W>oAA-_vS%=%-# zSD0U|^d{VDDP3zQTJ1xtcfnhHECJ2YqL?O(Vb&jh4eiF+j=u^O-fo=K-jVXD!S-CS66VC$vNKkkac9#8_g zy@ki(U)Tcz9Cr&yS^NueXP_<4%j=E)GzVl3M6jvttcvY5pp|L@5(7|d5wSlILa&ud zH_8=-f1umV{$MWb_2X)crmDO04>>TIi;^GnQc&~4Kd3~rKM+ajz{#sp<+*kS`;eYDFMUWVC4P*Iw>wT3Kls#_3KoEsp*ax6aH&zNLch(ocvu%j5w~NFv;07TF zK#3`lP!u|fbU6-Pq$m>c% z&^zq*y5Zs10TuPGcKhbegIZjwXv=_X?4u6El)k?zYAvj4Lh>oye2l2Iu%u={oSyQt z0R)wSB+_4O&@pJt4uy2`YDY7)7(iJdik4Pv9Lfr`@7!CRAnJwk6gA6cA_}WRD09@w|AdxBY wqDUdzj0&JxBT>i7X>4x3u~7ChFZ!dt0kLw#iUTRKHUIzs07*qoM6N<$f&@1EkpKVy literal 0 HcmV?d00001 diff --git a/graphics/pokemon/octillery/icon_gba.png b/graphics/pokemon/octillery/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a21e60327283da1f49e208ed24151a1edac51c3c GIT binary patch literal 349 zcmV-j0iyniP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H+et)0R5*?0lA#X5Fcd}m1?$IvMv)-U%%b+@Rx>uY{uL7y`;{e2 ziYqm=VhN?oI@Z==AY9k;?#rt<2>n{HjKJd@5>p;%uy8uERz`pkAM9BO#Db>H~_DHt}~yJD~^w?wQPOd0@EzsX3EQaK^IcR;6xba|!e(*X`JHgyGg<3N&u zPH!M!SwTYBQi0YpQ>o}t5D~rqEMF-Mj)fWJEKI)?><=bkh;am8hyi8&sLc!#u;Xs> vqjnXZO~L?&#ehTzokAge1J>!1PyBcR$^VeI7P#qziFTMuiBJKA3a^ zgZ50C6gI8&QKS@(+$cdFm_CP;j>ZK%CNi0Dgc0e9#Dd0DkCP2R?ZB_sJ%}4`lG8U%-RZMSvg3 zaEAwYki07JgJB1l0v@nU7~TLLqhZ7Yd!I0XAF%y%>mU38M8f)K>19RWLBx3(_a;2J zDDE$KAjZq^*k>!0;VGK{J@hdi|Ktove>h~8dkI7Nnls=%UuT;9(BU8PN&mC{0{)XZ U;-UuMrT_o{07*qoM6N<$f?};Cz5oCK literal 0 HcmV?d00001 diff --git a/graphics/pokemon/oddish/back_gba.png b/graphics/pokemon/oddish/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..bafd8bbfff395ffd60e2006f376d63db54a325ec GIT binary patch literal 497 zcmVKlreIHFc3xQsBB#d=LB9TNnutcE-b0!f-t#&73TuR zX@DwLc0H~bt-8#l@GmIX$KSuw4q5inf0YaAx-E+DR6Q>Ws8hhH0H{(10OisodKl2b z;!y^=Fr!5+RGoXLDF|q@JT@#1@OI1$1MX1lB0(G_JesORN2AoSq$hfBD$qLshz89| zfT@Csj-rf?n(rE@tD3$yZ7ifam|%8$ zX06FYi;Jt=>}(ej8{@ npg7)klrt)>sWH*xrN7iK%|`4>_7r;`00000NkvXXu0mjfSTNZ? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/oddish/icon_gba.png b/graphics/pokemon/oddish/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7c46ae7e7d5e1048b1c5ee79e37eac4350233670 GIT binary patch literal 284 zcmV+%0ptFOP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hnn^@KR5*?8(lHLgFboAypP;@072Xk-@a`p@b7%HSoFJ+qXLj4o zHWM(y-}?0xcX$B55Zl5h;!;B~MhOcXLj?W67BO`jm14}UKw)L^k95^|w-e3b%AM%y z7f94ovBm|o8(qS$Ppv&6X3E7s?w5dZ(I?&gcl#cHgiN@7|NgU!WatfV=Edk|Vuz3%He00001 zbW%=J06^y0W&i*JFiAu~R9J=Wma%WzKorJr@&Hm%BBe`rmi{*#I+IE{ArLUy>OYV( z*`peEhdwXq0_D6joyF$K4{u&73{#fc&@&|jsn1=jD*gs9@8|cvceZpNW0hX7YTlId z?qBL(gqA&hECVC}_(F``l6t*(UwCtnEgG1aw*_$rUP+6YX_}VyAU%(s01u`)1mC{r zK+dR{p8+O9%sbE__n4WMr6-8{$;c;XXbXi&TZ)lOx`YSaU^?%KmH z3Dk=fv`4$`dhV12ZV%^Vf7bxr!8#nZEnWI3>j1h8;7P9pFfAw;+xMiTJk-Q*Ib-n2 z&pB}%{l7SlGm_GyfXA`_RXDysAGy?on9aXkN@slWz5_7W{t0B;?$ymZe*N)7S3*uq z$d*6eat-iLO+G*ZSgYODO*7RU`e}~Dh=x+vm;E%kXr_By5j!+cg&YxiPd`EeU^$`+ zqCn~Tim*_$Ky?tVk_|~bWhziAQhB^fNuZypSOvLSV$7*J<0=@aWfG|#bqrbtCW#8u z9)@%S-D1nJ#f=`h+GKE{JI#h3yDT|LGFBoatN#rY{7tSJDuM*bWR_UjF?1bcIg z2RXKO1W@FMA|7m_C58=Z4aT$JDOw~L=VjNw_K__(#^u-lp7lb53Ry2QTC6O7RC*2i Y1!=SWigQMwj{pDw07*qoM6N<$g7yA5)c^nh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/omanyte/back_gba.png b/graphics/pokemon/omanyte/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6cd77bffcff0dd7ea8adc9fd802b12d48c4aade2 GIT binary patch literal 661 zcmV;G0&4ww5dZ(I?&gcl#cHgiN@7|NgU!WatfV=Edk|Vuz3%He00001 zbW%=J06^y0W&i*J6G=otR7i>Kld+PUFc5~RD2^hP-!GGbiE+j)o;-jpg`QzWj}NIy zMUd2|B5kTLmlwE8=8BZL>f;brikCe+Xr*HP_RL$uXGxcrAaX zG-E}vPRx16`gNk0*ubp=Sg|G`^Zdk$o&nSqTaoyb=Z6C}pb>y-DUo0UrxRnK2!P`C zs=$G95ZW=v5I9d00D#5^bXX&K?`Gf#H0c(BDyVUDb{1KHGLuS+1<*T(7}tY zBdzwkjNKI0>QX8iQ*MJXVon`!t~zW$;=2GU7wF?PfV&_-T>#ZB6mU^Ag^{L_JF7i~ z1m-XkfF)|rYW){bcACO-GTL79%Frqd0qGi`bWH#{3Bq_1G1XA$AJ(8MxL_c1d_wevE{#xW;;@{#AVH?*mkZGcl00000NkvXXu0mjfRW>T~ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/omanyte/icon_gba.png b/graphics/pokemon/omanyte/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..94684f5c3232ad0d6b70d6e13f174ed04419a17b GIT binary patch literal 308 zcmV-40n7f0P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HvPnciR5*?0k|7QQArM750ehG=E1Fv|uO9@4@y<9);OVi#05-5Gdab z*p749a1OBC=&*V{%t7KlLS#UcS|bhU9Vw;p01_#(_*F0RnuLhD#1B0H0000+q%yS8zC*rp zZ3Ilq6M)~ImUnk;_YtriG|AkyiK$^sY_kMB=5+(ugL%UorZShdT%P@i0AB8T2zYv| zHciNe!5Au-;|WtI@k(vBAsbhQVeUL=JoVdv>-#eSxXj(I)Yc&6t83F7Vw)qTI`OhS zDf!NrnRfq1^!Pqji!R{WvemcdSamhfgGLu$h%PSYqdC4zSJjd%7}THtw2_S;a6IoU z-(yVAf``T=Gv&;AfG|t|fUhb93D-h>q5=M4C6wwpUseEs zxljk+7w3@TXT6+PByw2$=dae(Fz-u17fecti2~iVB?TDMg2R1>jhZ)G2|OS3BHQ zn&YkgTPgrSC@lgUi9>lr|z z$IqqSiHBe6Usx~kK>E+cg93j|+b$3B;5}b?j_Vzd2fyWf;B@TneLQfT__M=K#RCVD zE`>up@bYNz1XOotH6CcMA4-6Hr~`+1kbPjH3-VC!VjmA^5PtUYv#h32i3b`F2RKO* zRF_6I9>gWk%NDgxYViP61ye?SXVl_Bl2VkZ3Do0(*#1!e)lHl6AgY}gY4Ari9^|yX zlM22J9)$YZzu(7$>iL2vAA>ct)v))MLQv)b~hTceZ%PvHGXzVwvE=7-)QY`Z@I tB$Bqr(*bG{P}*15s@SxzeyM+6e*vd{rM2_P(ue>6002ovPDHLkV1lkMG%ElA literal 0 HcmV?d00001 diff --git a/graphics/pokemon/omastar/back_gba.png b/graphics/pokemon/omastar/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3f746795040e2e153254b60bc293bfcbb768176b GIT binary patch literal 634 zcmV-=0)_pFP)Kl(BMyFbswnGL@Igz|fG_=^eZQcC#`dymatgK`a?M zfc*^NkA3F zm2L+>J_B~|Xh%o``TULmLf~yoip&S$W4?VP1t16IK}nS=fK^3V6aWe!(POTvswTn! zzzF@mKvTI25*Fa!PK7H#6OoC}PVHc86kO+$r@U%f0)L0^oV#6s#({KUSP*U2^ zAE$c=)OB4y0j_~MI94aB(1#jPk?5ps89F;UmhYkfs+HuuteUiHuN4~x61Ii+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H+(|@1R5*?0k~klZk9_*5^GYM5^tGX^jzVO?dpUM9&!6{^6B z>hNug=mB8_392({Z1vg@1!|&eY!DIpL7dDXfk07*qoM6N<$f^RgB;Q#;t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/omastar/normal_gba.pal b/graphics/pokemon/omastar/normal_gba.pal new file mode 100644 index 0000000000..f63530b4ef --- /dev/null +++ b/graphics/pokemon/omastar/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 197 +255 238 180 +246 213 98 +180 156 65 +16 16 16 +255 0 255 +255 0 255 +255 255 172 +238 230 139 +205 197 106 +172 164 74 +106 98 16 +156 230 222 +131 205 197 +98 172 164 +16 98 90 diff --git a/graphics/pokemon/omastar/shiny_gba.pal b/graphics/pokemon/omastar/shiny_gba.pal new file mode 100644 index 0000000000..b17facc09a --- /dev/null +++ b/graphics/pokemon/omastar/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 197 +255 238 180 +246 213 98 +180 156 65 +16 16 16 +255 0 255 +255 0 255 +255 255 222 +238 246 90 +213 222 74 +172 180 57 +98 106 24 +222 172 255 +189 139 238 +148 98 205 +98 49 164 diff --git a/graphics/pokemon/onix/anim_front_gba.png b/graphics/pokemon/onix/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fbe64c2ececf5b8f9177ef4715d37b83d996ba96 GIT binary patch literal 1554 zcmV+t2JQKYP)7;eKjHjUYy@b0TGUSnYpF5;C>ch8_2sNHaI<2w}BonhD=ePUp&KvjJ4W&n1I! zR%`rx09aj2`1Rhc-yw3OUH_~{JzS@{Z%G$H6rC+JKPx%oxIU(&0vFsBod6g79k)q} zIO?U3T~h1L0Fd*G=?>_H6O(Xf5kOkZFMJGvF9*uzGf3sjv3dnAZ$N$^;>LTQ%9o>| zd(^F5RhfMVjLVx zH9yUOZj9u0nNN35Z~UaJvDh1Bf6-*S6VD!Y0?5NP9^gfTR5bV-KHH}(N1`3`!1qU9 zSBnxe*BQw43@8r|E1(d*$_WPWzLr4vMXpWlqkH!8DH5k1Dx-_*VO5C#KDm4dvR$}0%t}8k|u7D05FR8-ypvwoH z^~dCoRY`XFiC=-@=L34U*KQ5yOxnG6>8br)09CJh7hwtze@#z+{q_~b!T|siWqk)~ zSIIpU^merOlT;(84iS;1!|>6?G8+9c)W~D?(sLnY{z7wf8q2-jZkxTgxrN$R>ay^Z-C2my2>h zi;mlixXt8h-M2KrfQP%qVzJ$NSeNK(-G8yle z&3;U0%FiMI=wL~oHb9$U;8sfWn5Ve1Hvnems5GWQ&6+UXH{G>M9ZDX(+3-AXHozG- zhsH27C{Sprext}<=)@Dhd;+-vKa#)deMxLR6<|v^J4;yvjI#410{6EDD|Sv6ok2-o)Me#&xd9d0kQ$2 zCP|eZC{d=-+=n^}VT?zphz3e9=Sh>>9MoAxqHQ$l-b^-ET>wDvRydq~6#dXZ@7XoL zIQ^{By)H5Sc|y(b>eh+TQ8Y_Z4d)F?A`qONzRz{6X@Yp*DY#DM5EV)ltIQFp04oo5 zdVd`L8+%0FngICzx?eZ|umoV`0f&q-?qr{(=(R0Zz%HetCOX|5-vOhiX6fNfCs%*_ z^8r1DH8I4PU#1EM9P8@A%z#D!Y^LQgz<||x#uXaFYBh^*qgQ}KibUwDPA&#HB)sN7 zKnq2p>6nPThu#$c^|u0M6SK;4Rbr;b(`o|6G;0n!=gai$udU)$@Ai@eiBMC4Llhy= z_*G30cLgd|tcbvNn1Ug<$2|7)K{^>;trXu1h@8yy8${+j++J|l>xztPG2td2cJhB* z926W}G_!%GzgB9v`nH(@4|`D+Qs{A4Qdy&SLy=QpUxt2LOv;?_j+ZqMjVKq1-11~A z-SI|(>~Vj}L$Ti*XUot7*6r;-Odw6@AXuS*`2VlJ0iloT8wzx3umAu607*qoM6N<$ Ef+EZAx&QzG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/onix/back_gba.png b/graphics/pokemon/onix/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..233e66d919b58a60fa1248518dadf354398ba9d4 GIT binary patch literal 696 zcmV;p0!RIcP)0CD&IUjbU}J&<aq;ygm&Esuo>{mj&Q5 zVAyVO282c^9Yz2g@|gq~uJRkOEFWW>79w1gf*1zCVC>RuT87ptZPAWEVJMz_y0z$7 z!Xkdo%>oH42^hEFaW-r3gj5sM~_sFjNS=gJH|+z>d?nb+ymU55oj;e zhIE_uGMlnv%HooE(g><%fWwfJm`urda+3}EJV&bl4N-u89WeA~-^~Z{4#-p3uK+EM zhk?%m@N^H99-trC<=;$6n&E)1vkLcurDE$!90X=v9>j=+}$4&r54#!HMP z0p9!bu+3@y>I?u4%V7Y@PwaUd$CW-2py<#ruhpQs@_S-lsZ;6pSq3No>({D8fF2fl e75D@H1^flc_Of~Oto1bj0000DV$*lEHC=FbqYh0FPXNJt+66g!JD9qyP<4?yG#;!0u8( z!U32!l59zDn*Qz+ci?+_>m6+C6Vwj$24>Rr0uc>tp9gU=0#Rk{X~~x$+NZgc?;c~m zP;EfB!UG6G1UXyjbzN++EYV{hD8bAkS#qRswslIv>|ZXKaaIQv0bgPOTrCC&UJQwB zL8uz|6Kf!F!wyi3Mue5=05vlQ*GIcYVvlOhQHgqYDdRkfR-lY-TdycWk8>cYO`~k( zebRc(>mNO7zXRzXy@PF?*8?oWAU$BlcZO73>>K|^l<0000bUfy$}%p0RQgZi{`yjy^ArVS`hyL{}2!mft8;|00001 zbW%=J06^y0W&i*Jn@L1LR9J=Wma&T4KoCH;Oe6La0?r2*k|L#>5b^_eDc$5udXuOL z8KEj^XhmfJTnJgL5uYg$mrDY; zIVnUb5pk?Ut_U#aL`{fN@(H5IQPCTVZ9sC#@Qy}MsfZe~0EdpL6>3cbferBHBS+*B zb!-9p`*ox-ia2cnekDMbrt&zzDU(xv@BIBR)(h}nAm{|WrPhN+Fp%+bWdq_+Fl2OX0My%|V9;Xw4M?;d zg^gfTG%b`SASCPrqtct7i^2wWf}sbUfy$}%p0RQgZi{`yjy^ArVS`hyL{}2!mft8;|00001 zbW%=J06^y0W&i*Idr3q=R7i>KlCe(1Fc5|_cA&~jCA>k~7pMXoONG0YfzoV!4dkfm zo@8KnG^rTg^%|D7BJg9iOqjnaqT=TA4w?(|C2USK_q zW~(3=+caW*#Aq^)CalAc=S4J4dcsCi2Uy@o7AMK=Pv9|O(Tpj8BV+f;T@Ns0jI9cZ z8v^Fn-PLO!VB2iJSww6eo0r`;VomdH%k$zGQB-U=FMJ@RxygB!y*q#@&cU|`)2#u{ zbHGK+*iz*gl)iJLLZJ#*0kDwPNaR}h8McAe zRRB=6lvYFO10h&4a1J!7G1pZos^X%=xNXY(%i*AFl8s3PdA~Y617wMk!aJJctI-0o39Qj71kB9nu8|L}wn7#Tn2IEedqr zgP;azT{i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I0ZBwbR5*>@(lK&_Fc1Y$onSeP55OrxN_XofBURBh9(=TvZgL1! zQn!;C52#3n4LAn0YEmca_^iHQ^o;pytC1?muOE8g$=89aD)3YEhzPkdk?c>tIH@USZawSLE@5Nt4G!ETyeddwq{o=ZH3(##mx2==#2$Fa1McN71fRS%_m@sY=Y(T_D zUOQ7TaPoE=FfeC?7K$&29=FCvz-&~YUjM&UU9D;8sDt6T@-TGOmeIXc9im%j9}3Lk zLxEX*C@_nUT!4YQj{;2k@lk-e``E!iw6hPHw(EyJ%s#^I19}q)!|uZbAdjK+ks@04 hYl%6iKx_GBeFK`amKr$-8595j002ovPDHLkV1jsYtj_=d literal 0 HcmV?d00001 diff --git a/graphics/pokemon/paras/normal_gba.pal b/graphics/pokemon/paras/normal_gba.pal new file mode 100644 index 0000000000..46c089f352 --- /dev/null +++ b/graphics/pokemon/paras/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 246 255 +230 230 230 +164 164 164 +255 246 90 +230 222 65 +255 148 148 +255 74 74 +189 16 16 +255 0 255 +238 222 139 +230 189 82 +189 139 49 +164 90 16 +255 0 255 +16 16 16 diff --git a/graphics/pokemon/paras/shiny_gba.pal b/graphics/pokemon/paras/shiny_gba.pal new file mode 100644 index 0000000000..77d3220752 --- /dev/null +++ b/graphics/pokemon/paras/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 246 255 +230 230 230 +164 164 164 +255 246 90 +230 222 65 +255 148 148 +255 74 74 +189 16 16 +255 0 255 +255 180 90 +230 115 32 +189 74 0 +148 32 0 +255 0 255 +16 16 16 diff --git a/graphics/pokemon/parasect/anim_front_gba.png b/graphics/pokemon/parasect/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b22a7ff8930c80d1b8c99215617c279fef1881f0 GIT binary patch literal 1137 zcmV-%1djWOP)p2c|sQ_XouXlB@DLu^S!fo4EOvETPmlqlJ1kHfHhhXfLT`uHa)LqEnI zYoLxUFMs*e_@$KcW_=x~wxIgDl#azn47E3-8LdfY*i=$_=+0Ov*^Wre@1Oa|B zUz`ujv7F6joO1~Ay1A#b?5??ZLBKQyMk}S#Kwt#S0KlsdVssM`7y(xSfNWBZS62>+Hm212*V(K-t1}3(n6@cDc;Nj{Q$Gi+^;9nS_jL<+A#Sb^c;I0tFZfi- zGyZqTxJs$R!@2BMy^gV>()u6SulmK@Y1~N!a+l?<$};CX{A1lhYiyt^_x5Y&zHrW| zG|#fXDB!buaiUD5l+5_N6k824tpDQM@fa9i&f+bY)u5&}kaE*lJ` zJHWOEwsbCLA1GTu(+v0s{ci!{Z?OTzRVInoSsG>yy&c*|=mT(pEymcuFDEt0T@2WQ zxq^*Sy~!zBsf!N461u(Bx!=A-#oHLIHr!4QkF)&n?Z^n>x;j=(3IbD5-GX_8CNKO>tqyhLKfRZ!sNlsHia^^kBi86Z0k^FGVMsj3Na-s&Y z!|VZVgTCan4d^5qd*}gA#IqndvM)LC@yOkgm<>n{j+dYmLJUX_qc5G(4`M)a@I!`Q zV>2I;95z~`F&HT`Umy}PmK?VAz{b^8s!i3AoGlpxILu^X-%XC4zlbE~76DDb?$60_ zxxP{+mYk6yr7$QtdNaxK(pa#I%7sO&Q5h^`17FI>VL)eqs0{=F6jE2^BsnBO25dzK z0~wQ2R65T{ay}3M&ss1L(*ky5GZ2>@&7jec;CUMWm|<5~JU&-ZAo2tFx_jWZ28`de z+HnB5OE&dcffns*{B|7_r3Eb9Dy#>_jpM|C_JG%@pePJSE9Oyn#Ia^N?U!Fa9)NHz zO#{YS#jp*~I!>pO7HAx&TX_H)$JrwS@HvP1Hyr091_m}QZX0jD00000NkvXXu0mjf DG_Dat literal 0 HcmV?d00001 diff --git a/graphics/pokemon/parasect/back_gba.png b/graphics/pokemon/parasect/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f313d5a911e738b7a06270166f4a8a3df64e098c GIT binary patch literal 602 zcmV-g0;TKlR<96Fc3xAX3=sfq@KVMy#ToZ&IO`OHiT7a7Htm_ z)C+&D~@Y$FK zFaXb^7&!x13P3Ar1H96Quo>Z4J_C58fztO`pNMek0G}}kpRa+{LlvNbW{p+P0KodA z?blU}`(DqCfKwLYV|xue)ByTvl3Wr$ysiKR?j;gS8`yhg08R*_a&?n;%kKv2kyQUU zK=nK92*=Z}#57P;-^+^Fn}B{*LG@9O`h30sJZ}NQ)aZhxs0PgLJ2a5xyUPmKz+9fj z%>X+=uETSHui8KBO?gF`umD|T56l8ym4}y=Wtq%jT+W~`NL>W3W2|oSi09|{MfcIg okeCz38u-Ql^@rEge*a1R0)0IjK~BwP9{>OV07*qoM6N<$f*sosyZ`_I literal 0 HcmV?d00001 diff --git a/graphics/pokemon/parasect/icon_gba.png b/graphics/pokemon/parasect/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..907cbf5cabd3a05260f1ccfaa2694fb9ca44422f GIT binary patch literal 329 zcmV-P0k-~$P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H$4Nv%R5*?0l06cGAP`150Ujx*08fxDmrCe7D>Ioux06QgG@FS0 zm=h%Vx_$Do!}x^wx^&wKEcVgNn{%d}2W^_!UNw|X*E?sS0#iRQg3?(WgZh%iag@p( zIiEl0rOr7fHGhK(E*BpJ|Ex} zUV<-;k%;dpub1W9pX4`$34psWbNZPP{VvSmM`U3F3zPkjuhyp@So^^Ou`rb%k*JzD b?R3f$+IOA6jM6O200000NkvXXu0mjf0#=Nq literal 0 HcmV?d00001 diff --git a/graphics/pokemon/parasect/normal_gba.pal b/graphics/pokemon/parasect/normal_gba.pal new file mode 100644 index 0000000000..158331c680 --- /dev/null +++ b/graphics/pokemon/parasect/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 246 255 +230 230 230 +164 164 164 +255 246 90 +213 205 49 +255 164 164 +255 90 90 +230 49 49 +164 16 16 +255 0 255 +255 131 82 +222 106 49 +180 65 49 +123 32 16 +16 16 16 diff --git a/graphics/pokemon/parasect/shiny_gba.pal b/graphics/pokemon/parasect/shiny_gba.pal new file mode 100644 index 0000000000..3574c408fc --- /dev/null +++ b/graphics/pokemon/parasect/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 246 255 +230 230 230 +164 164 164 +255 246 90 +213 205 49 +255 213 90 +255 172 49 +213 131 8 +156 74 0 +255 0 255 +255 189 82 +213 148 41 +172 106 0 +131 65 0 +16 16 16 diff --git a/graphics/pokemon/pelipper/anim_front_gba.png b/graphics/pokemon/pelipper/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf8530ae2321fedafd08430fc301b71bcad2051 GIT binary patch literal 1187 zcmV;U1YG-xP)j005kvtRP~0slp^n00001 zbW%=J06^y0W&i*LAxT6*R9J=OmcMV?Mij>-13?xOgk+$AgJ$q4*_;fP{{v|)5Cjzh z39-9b&JbktWg)nkT!Kz2a0YD85|H!{FgnDZin4{=Cb5;^kV%6KJv0e(a`889vb&hTThKO=)Of8}gvw$bgDk5Kt@XF?|va<3G) z^-cHV?CoA51;mU!7Eo)2&`Ecg0~Q+XcDoe>L8BS0>`gC5`3NV>-Q>20(2WtZTn;ZO zrFF!uxwcwk!1H2u7K7;PV}OFW09fr?`VgU)^&6uX`FRF4u;90&BYJuhE$h8XluDxYq#k;@Y3)3d;w5HRM*)$eMjjl_TY;F0GVbn zs_bK1u2l+*UUcp$fNE>YGeTx$ZzMPUL!*4V2jJA;}k2b&XpJj7Xsc z)Emr@2Iz%bt*5_(UCik+R$T%3H1ZAg>Qn)Kjt^s;Yh=+!Dv@4Sfr4;nrghprQO0BA`>-Wd+r7b_gwjuY%^n#<(*2D>gN{ zzfy|}i(;#v?DxKt2cjR9l{|mq6@c^p*`x|2Vn8SXfH{yUkfr3?Pe_~5F)Hxfe61rfpj@gu0YW34*UP1L4hFD z>D)&K1%i@epp4Nd_|Y8|$SDwRdfU?#2oI3!i<$xf%il=40x68ZV<1xiu+#tWv)egE z?$EL;Q!0=WKS#I%DF+e-VgQ5!F#tk=n1KJM{R@5pLPj{Bo;d&j002ovPDHLkV1k=( B4s-wj literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pelipper/back_gba.png b/graphics/pokemon/pelipper/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4b155c28de12fe97b24265e3df884e72c954cdd5 GIT binary patch literal 737 zcmV<70v`Q|P)j005kvtRP~0slp^n00001 zbW%=J06^y0W&i*JUr9tkR7i>4l)rD&Koo$@;0?8L5JM#p%Cp!~A$*KwKco8P$6z>9i-QdOh( zsaA1ACsGkW_vJ;cU?}od41ji$B)M1>NJ9VsHbT#KcXwJV0%>RiSMac(t_dar0P6uj zVp$fHiY%!%*tQLp#W=XMcxL%6&&xxcg5x-{26WgJQhL5zioBXazzr(8{EmlIg_=@O zGC<2PnO3CpjT{9~7+@v|mkcd7pEaNj+R)(xDg%76!?ylCY%{=H z15W<}M0*9mOL*ljM=Jnd|BW&bim$i=n3H4`D7xeeVbb_>6^MG}9@#nLZgmh*SOvTo z3WZw+Z21@UuAo~5hN^}mchW>qDEK)k9ZSJ;Ljzh7%Jt}p&CZwlirvj+6&UlplfM%8 z_~mWo$B+xwLkMl>3w>AI?pAb`{bpTC;C#Oj7j`x0god(&8FlyB_DEPle|L` z=mQ7NQj#7DLIeIoQ9%IUiY)v5!b*`6JX=6|OneS>Ug5Wgc#!&dfEym%e=q(3R`Lhb TNl}gx00000NkvXXu0mjf1@K39 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pelipper/icon_gba.png b/graphics/pokemon/pelipper/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..55a16bc5f96e96e73c9c5f5d903a97ec1d886227 GIT binary patch literal 374 zcmV-+0g3*JP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H^hrcPR5*?0lCh4$FbszC1oacJa69Pm%tZpT!T_wt!!q**6gn_M zRbA2%jGLowa?43<2yglHJF%6|m{%|0Dh1d4mZQ9~o3SjwxQ44TAb7)!5 z^?F59M9tLS%Bm%9!Wt4hZXs UBgBNtu>b%707*qoM6N<$f&j;)U;qFB literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pelipper/normal_gba.pal b/graphics/pokemon/pelipper/normal_gba.pal new file mode 100644 index 0000000000..c78d73c37b --- /dev/null +++ b/graphics/pokemon/pelipper/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +131 189 139 +131 90 65 +230 172 90 +255 213 98 +255 238 156 +82 82 90 +148 213 230 +57 156 180 +115 189 213 +222 222 238 +246 246 255 +139 65 90 +189 139 57 +0 0 0 +156 156 172 +32 98 123 diff --git a/graphics/pokemon/pelipper/shiny_gba.pal b/graphics/pokemon/pelipper/shiny_gba.pal new file mode 100644 index 0000000000..41686ffed1 --- /dev/null +++ b/graphics/pokemon/pelipper/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +131 189 139 +131 90 65 +238 189 90 +255 230 106 +255 238 189 +82 82 90 +156 238 123 +90 156 57 +123 205 90 +230 205 255 +246 246 255 +139 65 90 +189 139 57 +0 0 0 +156 156 172 +32 98 123 diff --git a/graphics/pokemon/persian/anim_front_gba.png b/graphics/pokemon/persian/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2eda6b1ce0af9679d1afba5e1a9a99172a4999b3 GIT binary patch literal 1342 zcmV-E1;P4>P)F0+?T{W1nTJvt3q@1YWCmB@2Bqyr`PA*Fkw_Ey?mmBxh${9Gpm1Svvj;l3`@#V-Mx+Q(dZ5@=@Xi5G ze;`1_Sen(gh%I39cbx{Rq2NNP`gU!GBFgQXFuD1Y`p0iCgasXA4Vl|(#b!sq{m)d{ z)rDMXN>oDTs}#F7!gl@=;5`8xT`xy~ZRZyN_wx&7Z4XodvpaxwP#4ramT?U$+w_3R z+AUyKnj%9+T~?e!CKO;5uCr_akiKRRS zsEEV?nzmvw1~6Hr1i133jZwg*5T}8lb3jQY&>KGi(6?CVfR)&ebm4LkP(?x4q8g15 z65!6tecb6$Am|97jWC==^UWAQUH0!M3c|5{nsz2eL;qudnkc6LMkh{92XMz>B0xqd z^c0Z83a29263R(n&dZ{l0>a=vnoo`);3p>hasBTXJT z>Z)7y8)386X6Iox-s3F20ohi!Q+MZK$iisyII(jNFl;0{(faU~w}_fA-^6QYFow`< z5B$a((y(;-I`;m;+Xtriz$bNn_X0~)&f}~H4`Z@;xb!-@0O9J(Ym#O%2U%A8BG@`B z`Ungw>}w(p$QdydV6kQb$-^>3O(SFIg zpOs^S(e;|^0&PYOh8ZlV2SyAAeUe`9j5oU@27?Z)&uzRm9~%rO+6Ta~!EmB2dZ2&L zj|>LO8ff-49xt}4d(l1xSdo?6CPp2|JZ*}m^5cS0fV0^>_j5b}1Ys2V9?Da|u#ACb z3SjMln;%Uyi`%%HN)fSHIGfma#Rk(d^50#51AGnTyCmQg6951J07*qoM6N<$g0X>b A@Bjb+ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/persian/back_gba.png b/graphics/pokemon/persian/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..10b7acf6566e24ba6c5e5984850a0cb4d02de149 GIT binary patch literal 705 zcmV;y0zUnTP)ClfACnFbstSWVuV@S23WW8JgUO>d-EC%1{sed8jTO z!hS|koqvMl>~D5bzs zO4e*W|5Ui%0*olIRrL&*!aCdnfXU;sj7zrzfWjg$fE3FB;6cjMH31dG=nnFNpBeQG zpg?mK8{l69a0W1n93yaQatF*#<_q+K03Cs=Y(9z&u;3=+ac2=g%kuQ;Jp;VM7;#Y8 z4FQcn^C6D}P0s{if_gyPlENlH9tr4$2ohSO0K9dQ0p@yfef`D@aT(H{UqZnOSW)5B zs>zEptYHXv`g#jMm(a;?0Pb2eKNY5r84%UX0M|6?M;$lO<#rPTK*z(t+_(aM-hjc% zJg4>4W<13lel5#DHNd^jJK;aQjfeE#eMy zVREwdgN~9KNFd_218}|4Q2~#Z>hFa@O)o$vAl2_Y&=YEdf~B9?{suguKv0OopT-jS ztdc@ZRi-$LZz@>;J+7k(r)iT(y3kQUeb2VoeV|946gZG?)RR)#g5CqM#k(L76}CGR zuYJ9CNEYy{Hh^4`=YyvDB*11D_Sprcw#@=1Kqk&wZvtjyz%dp~u+?*q(IviY;L&p+ zny7Yw-vMXpapvo$-T_qHP21`c?hA|1{+S8f3m`svMwm+h9NYjrOh4`cadD0Vu52L= nGbfC5y(kH$;oKj9e?5Ky)#cfNL_*uK00000NkvXXu0mjfi|{~J literal 0 HcmV?d00001 diff --git a/graphics/pokemon/persian/icon_gba.png b/graphics/pokemon/persian/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6f72feeb81d07ec6c1520099a4817fc0a0f4ed GIT binary patch literal 328 zcmV-O0k{5%P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H#z{m$R5*>@l0go_AP_}4K_|VB@t&?cgFBO{?b>ug5715b5~523 zaf%Itg~X*MIxFV!`3&JJ^?L<;&4I@*2hR4n#A`nk9?-qki#P%HG_Yd6$0Ja?rmh*W z6AwO)=emhSJ(rG^MeP zHleer4|_(h-(~b#{xm5B3sQexWk8@W0s`$NmjD$&u`7T|KmsG5`#vyo;8N;&@B)zxO$roorlEiWX!2@Ea7~)ctbJUhW0nVq{1*r@A2aJQ`2QJe)hZ}$2N&xZ z2YHFeI8TFw9u^U-xZz)CU2Gsyx`nw;#dwBamk3bD zEU@-%3SU5SdPahPs8)9u0oWq&h=8OHaezh$h#>_Wvj!-xXL3vdiE4=A{)Zg@Bmj0) zHDcxyQBJ7~O^n*DwbJv_JS}soMdGUIQT5AmJzQ!_o?_lEjf31|-R_>2d zhQ1K5-1*lLb%+>z3F=q!Hxc`q&On5K=(K7-CfBgw223_{j(3>$Ca=4LM@)lvRrvT2(@_L zZL0-*gvU?_*}?6$S{-WpCjpE|Z-As`^f=u5Gf19_A@QV*y1cP}>Fxh;J|k*YfWZ9( z?f)Fed;)qw*Oc>#ET?BcJt1HGE&%QS*VE(-==lb@Lo-sFa-pler5YS-^WKz8y>R*+ zfTvS?Qv>~K>DK1GX=UhmtO1lCbOuD)vA6(rlBSl8aZS7dL_O}-t7;g^H;dOSCPIKM zK-7eyBS_r20(l8w*7$sagLDAEEewqArXmEy_`h_PhXJqTg@ejN`Jry(?@1^>G;>To q2;_$b=zQJ>^FuA4FWUUjDx|-}wF)=ii5(;W0000Kk}-0_AP_}WNVV?(;|mDXxbciw8X9>dtIl<7oxr3~ z3Kx`EM>m@>|ZUZClkNg$JR#21d9>`Id8iA_nenyOz zY9^3E8yJH^ym=X*H11-$2BlOCqH%!*M`q8Uu0fTcYda5!N@QLNK2mZz($&80ckT@J zRjgsexNDeDz@hN~Yz(wWS37wWvX!!Nc9koEHqe6gdkuWak^2$M0tV;|P+Z^!#OAMR zKpdnT6#(D>$qnfHod%8y*f;>b0*Aci+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H@kvBMR5*?0l0k|BF%U)j26dge(csFRZJ)pzXsF$c0}Wm$iw|{` zfMBN~P)5>flD!+PMIet~sU-h*-P;wJulEsJkqAIb0dD16Aaw`eo)Vi770w=D9uSi% z+$Gd+fH*plRb#0IVSfq$gGR9J=Wma$I5Fc3gJ(5&|l>E7ksp#wx}Tt@w2TXy+E&)M?hs^)Q&O4QO);tjDuHT$YaGwQksKFo~ z_c`DU<;=QflC{6+BvFtx>v$NcAVO zv!oIqtyZ(`*!(9)zTZS1XoOevHrwp05Dn}h$|&H62>ZuMT|1h*?$6x-%!JnSiX$wF zU*7_YS2qAJ6&2vMst5bQ{aK=FnswAs$A65ZEF}kU={lCkHj-lpU?VwpU?Vx)l5dIRP>XKK zDJ{q;Iim{6p|8I~a)c-)$FXxgBRQGFAFfKtVSQA1vXq=Kn6SX5k(_*yazhM^Kl)Y}kFc8PHz*xUS@&-L%MQWT5U8ta8ZKWXAyj6!T zeIn8)AdUoNBiD0Gq9neAE=V2tZ`S>M-?ro2^{*r_y9OW*18J%TorwJ|#V#SR2_zJx zO^DX{tgu4}EL7uIpi$GF3;|@{Db;e=1`u^tPA{Mx;4rXPo!-^JC=6c-NV`>6K)7_h zU@f{u*8o1bt_u^i0e$B*#igqOn75l!XSo88>>j|o4U{o*cq9P;^1u{%jQk3a@{0q;vUVUp8N1_bWM!A% zEFh#``j;~3d1fe$o_k+v{zm3?OikdD)OnggAM@>k@o#__apO}WmJ6YXh~mQxkG`(N z1`>)K%>ZIkidDx$Qebu&hd)`^b)0|7wJjBFnIg;=ahV0zCjv5o2h(c?5cEZ4i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hmq|oHR5*?8k}(d#FbqX~g7`>GtmzUnwo_+r#km+@wIb21{R9cb zcUPuL{PF20wxuVs?_dko7eW1kHdKK#C{^1?U@3qx(4!R_=uvlF z-N0_)$ZZ=zJk2sgm{QQSyJF|5W+4;-86=l6I|nny8b>-$%RPkTN+}9h#w@Q$Cd2AG9x0|bys zVeXUV7faF)t2%#O5OM&3fCW)b)>hP(R@Z8`^n?Q@#<+=K9kB~v9UnL^Z#fREGiY7{ zKokyC%0iZH_&~3JI`57tm-qmHj7nf1Tden{>-*@jg?ZNn2}c-FtZ;#ocW4=x*Mm5F zuNNHGB|x|h5SL9#VXZ5yUkjqNUo*7q5_oPy?kEaYn-JuUVFUu1FRBPFjtEHDriEo0 z)(9qH7;Yf&d`&--q-z2ad=iRcqEf}pxuIQnuCuE2U9kwj0CED$kQ#}@bWt_Fm+}Y| zi494ksE`;qaUQeXi!-o8c2f?>1eFw&%%WlebzzUKic@h-QzR$-V0FoD{ z>*dzWIP(E;Lg`0=ygw1!P6INMR44$Tz{zH5K(>(2a|KEM{mXKikF2*+s34W*?v+`Z z#(oHV-D7v=Q-JdTIND)kF2zTt$n8Y{er!EV^N`7NA4>>;pLSX)#9pCz4wn%s9Bn@) zgXgn8_Vf87oa}3Kv`q+kJwKzdC&BxUdyS8F2x06SgLP*Bo@lvpeTT3ugZ1IMNdPSG zUkSI{q_t&$xxcPEflY*C!0aA&c%I~T4w%v3GB&r~>;CB%KD$?cL?1t4zGCjzLAT!r ziS>;zvF^^XdVM?E;?w&A2pDfR^)T^H-1^V;ha?R8E&yPz=@B5_dHZMmaqE5v42A3_ zMEHIq)D#zP**1wXIS0V{hOTc+uEAk;ZjhLBR@dL_@zg)PKXud`xE>PUQx3}i11{X@ zbW57~Eu+~VK}6fH&>Ts#+hK)0dbuGVinpaZjwIY7202w6Qh;@ zph7PM71|rwDS%h#g`h(Fz|~DH(d5M{wEtilm{jP1m;$ns3LOLrK)k@71{Iny8U&gI z#8agy^Mlpa6bBUd5&`U-`yGdhP5&)*XJEp`0n-ADDnX(;v*?2*Zk0~Aa9;Sig zlS}e$%nx1Q;VS7vd}b39EmONU3PJ?nI1$1J0A$vyKp5Oe$I$)8m&qKEHm}N85QeuG zmV)qau@LMA2tb1aFWVI!BSsQZ<1qpNt*BhSqCJR}UgLsrG03K9c`^yY-pr=5? zvJ?y95K&V~e!+ z6$sDbA{dVjERv}I*)EkWng3#tu?hl&JZTML>&!JY?%MMIY;y3Zzu8Ryf(5>L*AAd+ zyd}SEPIm`w&*lldst(w*X?rGc0Jkh^*7 rcV+;AdiHSqJ!1za=BIun|F_3K1+`}cWrVhe00000NkvXXu0mjf{ow}0 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pidgeot/back_gba.png b/graphics/pokemon/pidgeot/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..22d7d27028a368621b7cfb402be60d87bdf6ef25 GIT binary patch literal 729 zcmV;~0w(>5P)p<1fxCS z4-|&pg-i(e0tgra=B`Ff?vlC#srqC|MwSf>z3W>ryx;xa9~;?m{!^?k;k`7?e7@I+kAIcJO!Qfa7xxoB8^1^0Y_FJN&lBhiU`Aqe=P&eEYCzTf*^|6QzZ|X zpIn5bOrViKdZ<#vDO~K}(>)FwVm#o#l|LmAb6~f(TGGInfddMIV@Pt~`91Fiu@;2P z5k+F|xSUCVzkAMNeRGD)aX}F0##93zvbDJ?jQg^p1jI0zIY-jN@~cY}Fh-fV2-Y1a z)ks!2z&$mAZBG?+?6&MN3~LdGqhPwJ0dxf+SRu726VMe_luTbcO0cX}m@XMzp-wJXnwxCWg=~C- z_$%7y0t=utFS~&k0opIb<=$-JjmlWUp@0w*m#dS2BL3Jn^B>|b_Q$m2{3Le_00000 LNkvXXu0mjf9X>i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IMoC0LR5*>@k}+<>AQXlJ97pzZ_6aV+XL_2&R;w*zEG`mZe1LJ_2fE!V6VE@B=D= zf-p>};78dJggK0WL7q$ZqcGxH`4NS2wI8c61HhdyQHRGBBw<9QLlUOe0b{?Aq(e95 yBHFb3r~}CW&B2e|WX!GO$&dSSnSOv@`0)*0#Lx<8J<5py0000YZ(_8ubd!4Utd#|ZDzjZHlGZ*T%`MHJ?5=#%7RZE2K4k0lQh zD|sKi_kH>?^EE>M+hBb0LRRTcOw(lPz^r9jLWosbUbX(Qgh?q)Enu3$v;b(P6flDp z6nc15DR6Uc&CI4S`7|ppadT5Kn=`1~234M(LuIZXn{&KGE}0KlMR zV?8-W#_VBg7ibp^&Upa1ai9`3z?@HSW=*U=BmhK9tUxD@^O19mPaVmX8d0ZxaCzZ; zbi!cq3xN~|;5e56 zwDVdX7h^!5Xj%X`PA33zIT8b|K>^k|2pqeIIe_DULI|8ZhM&&lP}4M>B*tV%xWI15 zWA-JlX*mgi7{+AL>992bSU*nW;Ys-G#9_=OSj%B@Dgo39U$Eu+2;?R-MgeK@A}H-t#dBPCch=II5H z(gLmXYBv>F0PuNkR#^(7Hfk`7*ZBM0cXD7>GpB%gwG^G|x2wBAVD^_3nd%-2fz5A8 zOgC$vbOn5k*Z41yp;SqG=)-hiD1pI9CF*5^+MWwed}&ueXopzohEKhV*)AEG)A9wTMP~Zw&b--Zc!C=IJ z(4j0C2YWDfH82>2basHip+F0`K437w9t6P77~oLAf`AJHBrq6n$?@)-N*^2wFbeKlRt0TKp4guQEc%Es(zLZ_7YgFE>=cgrCN-<9!?qE z8xT8em5>m2gfetV4h{^2we|jbWs6>x?3p=9(sLqks0ulsJ^uQcYXVH{spmhKk)Bs~sQ$q4FvQPYM^L-H8VUay~Xp1-@T z05K84qZA~3<_NrBRshixT`7Z}(iizxTCosa(cK90lWX7?e69dnv0aOtAAp+){TFB< zvYsWW0`gsF5>=~cHSUr`6Zy`WMAb<&?BNIr1&p29?*iyAPl0IxIG1c@+NVdtDjl3l zb9T*`9M`he4yghUNJPylht3-E4hY#g=f*4P9%-yAKqHtJ@ zO<@-uf;Y4sw_P8BA4yUGyAuE)>N{=6Z`j|puDakQV0AzPj^i6$1B()H@HYSjc$?$| z;5ER$(9^>{O&4R8gRM>gCC_CEeA7jo0Loy#;oMB}!p&X+TE~yEu-uOY@Mm8b%s10% zk`{oSt$f|5>pksnjE*ZwiyST3dD#KT_V;^L0P4eG!b{-V^MN671(d0apC?0HNopEx zLG<9=Gq&=s@Q-~y7+?vi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I0ZBwbR5*>@(lLs|Fc3h|If3U6IY5d8wv3PBA}|ZvOy`uojSDwA zfFZt$Ns%TX1R@eBu(J+}<%x@}wu&n2Gcrg#fOlB3+GDd61aW{|<&vZ`5bsr!Lt+Qv z9(g`t+GLzmwVMaNxFv1^=MzLMk;{1iBpfB2{4R&b;3bgX%mMpeN|JgBgZK|VQT``L z3KVq!B)Srf>SA_p$*O&EzHId#im|xq1J86=y-u+jc)Rr%hu@$$IGjEe2Q;Z$ap)#N znnU8wpym*g(HyX)B%g}I6etiY4nn0+R2(KAqB%VJ!G~C@Aj!XQz$cg&4ruKDV8YM+!j~_#Orq`zh7T5p)002ovPDHLkV1mdrrBwg` literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pidgeotto/normal_gba.pal b/graphics/pokemon/pidgeotto/normal_gba.pal new file mode 100644 index 0000000000..bf2ec6af11 --- /dev/null +++ b/graphics/pokemon/pidgeotto/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 197 172 +255 255 255 +164 164 164 +246 246 164 +255 238 90 +230 180 74 +255 172 115 +238 98 65 +213 49 24 +205 156 123 +172 123 90 +123 90 74 +90 57 41 +255 0 255 +32 32 32 +255 0 255 diff --git a/graphics/pokemon/pidgeotto/shiny_gba.pal b/graphics/pokemon/pidgeotto/shiny_gba.pal new file mode 100644 index 0000000000..09a5b5cd3a --- /dev/null +++ b/graphics/pokemon/pidgeotto/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 197 172 +255 255 255 +164 164 164 +255 255 205 +246 238 172 +222 197 131 +255 255 65 +255 213 24 +246 172 0 +197 180 123 +164 148 90 +131 115 57 +82 65 16 +255 0 255 +32 32 32 +255 0 255 diff --git a/graphics/pokemon/pidgey/anim_front_gba.png b/graphics/pokemon/pidgey/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8136556d58cbf156007cf8e1b5c75af4944e4a35 GIT binary patch literal 936 zcmV;Z16TZsP)s=Z#&-S z?%vZ$=mB7r|1H`xb*dpP&#|8j*0sh(yxw>UfRoN?ysk&4d?_|>0FVJ?XBK0#amGi0 zlS0Suq69j2D;Uy^GX+L~b*9+t;*xe|LCXg8wXX0{09;oG= z4|6$Z?k~XMI6xuDYTl>AiRU<0utTheMHAw~@dSy^xQ{ppIS|Y2iWNEQ9c1UYkNDOy zKtWb4Ri{26qY7X4E|vg>M~c^iWm8A!YH7Y7jj!A?3^X;pf;>9`0B*6xFa<%;l;!n9 zf?oiFN~i;{%`i+62?nX2*=9DGf`TSQfZc?bg(CXeB>@}@6<8MDCIfUA;36yvQ(@n- z5`hhnb&)YeLUou+1n%n;G$5<&?AGig;C}G>`z?e>7*y-YJv{8zOa&opSR)()d^iHM zY3Ww-0)E!2T~pVMZ;2f&^4`>3-N+K_{ukF)b>dCa~2a;dMRaRMLm1pwDKnQs>5JDaegb@1CK!`+WAmmv1HZTzK3VA&+kQ5*{c;g#L z${zFG1K&W%Kz6=2>5IdX!AlsFW-zG?40W%wLIWT{6AOXnON@7H=PLIPPZJ|5A5fzU)??YDu@uhIZrn*f^xeC`6% z&`e?-SRmVUrPSa5tgRYa8sOMtL+hph*}qbdR3K20)cPv_F24Yn-<)r!Uq=W40000< KMNUMnLSTZ#y`M4w literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pidgey/back_gba.png b/graphics/pokemon/pidgey/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ecb42e8f122b44a3033262ce2a563c6902fa0564 GIT binary patch literal 702 zcmV;v0zv(WP)Klrf6iKoo|jmc_yzA!m4UBSZ*z)HouIqb3e}4X4-x zq}nEx%oYa8g~x*l#4grjj6qVu3gI&toXQS!hJBK(^(ZTA50Lzg2EA|o_iJV}g#1^d z_~sQLa9$yTE^h|>uH9@ASw=GuI<&b*Xc;%nz^8g(D@(wy2Od31v{3_~vx$s8;2`!{ zeTIawJ?w~Xnob?SxSlW$?=rxe)c^scDFPY!$%JRwhK-3W^@LE&igWimje=kwhB=AUW{5fFq7bq+Z!c9 zr(->L7$WcoeBVB2&}aaVD8PCTW={cHwCjVFJ3bV^1Wc#^VD${1lo6%~_~4u)EXRQB z!+1J+D1gKVh?KpWcQXRNF7i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H>PbXFR5*?8l09m~Fc3y{0?i$qJ_f6B7vCidDp#Gh%#CsZ7ru%i zuv-L-$$$hl>=$h#jhr@B$P|Kk4D*AYQhzS!2;%w!KoLp~k3j{O%V_YNKq#Phrh&5= z@a5FC0WP;-pK{A(68H($nKpxcVw`VX1~iVi$II)S!2~wZ+qv}EzRcC0#pZfxo|jnw zwJe`io@!nW=jubjf7J2#G^qoA+npbfDgwCI}sR9J=Wmc4GL>%=98EiBU(4)OH@KBw-MJOuCV_;Z{ zMn725v0J(|Q{k;$6&SGUp@sDfJ?fw2#SYM^Z4NLX=sq2f6fJ&^^KXTB4k&kj3LMKb zE#yOhDd**n-A%8|IpBMH(>o5}0RYWS*UxjVpFITiMF{yL2ZRj}0o<@tZU6xQGj_%o zGKg`$Ob7_L0*;IEXf&3TM>g*`>4-w*>j7eG2&e(Mse2u-3?PBmqme9qStZ;tm_Ssj z{xA2kn#_BU2H?&v6>zM9Xe@D|17db0Kn+0&cO=mS(n$d+A#Xn6?!pJOfS&+9KnVAr z@sQB-7Vyi5$#&}#uvjnA288zoVEX~!e!C7wsR9BGSZ4%${RnXVkibL%i=9?rEa@#> z69fzT6=t4Zwp0lf3CO_CJ1Ne?h5#hMSVr2CIB)Y34@QGk6xbJ_dgcgJBIybQj^IkP zEy(#w&@`=8Fs0k`il;qp%3!UB=m_9AQNK&!xX=&WBQ9Z+!lKAudQ5isy# zrbJq=q}nOLA&cx1E@J9Ky_2#H_uovh+9ebj|2ZqLXn-d^W}$L;CQsfgo~1st(F2h2~ksN(D=|0Q1He~L4P^BjvhM;uvg(Ev?+?1EnYt^Z?_ zM_HakmNaXxqnkW`w8q$jY#t&F;zWvW@7fEu7oI0-q zN|VA^X%ep7IssXYY41F16)5;24Vu@Dr=8_Iyked`T*Vaz}i>-guVjk z;w_a}XbwUCL7F66$(ZVoQ;>9YngpuC!O=s|x!k3dgji>nSF}x5U2+!GYtk}HnG@R7 zB&))+HHlg%FthW$sVTs!Pc8Ue0SqGMfNp`xa_*QC0=qm08K-J$C7W%)|FK$0deUMJ zST8X$t6U8+&D6;3BG)4%vKm>GrTM0t3T@}4Y%7-N$Z~TU_$%W#WqXERain;b00000 LNkvXXu0mjf;}ED> literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pikachu/back_gba.png b/graphics/pokemon/pikachu/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea5ff592ea8c17abad26fdaf2c39f86fa00ba2a GIT binary patch literal 587 zcmV-R0<`^!P)(R7i>Kl)Y}kFcgJ70An7ZgAFf`n=o|9KnzPIgrH`uP#_-j zXjS)0eTWX-K&YT>^)vM5$6y{ZW{_*tKY*sT+?tpJd1#`!HUs4ZZv)Brnp01_Y(FDYe$LA3DzNW?3OLLYvU zu_3k$>kJ^8dFx~lhK)gFMd*uu=vzsz_Nh9NXMS^yo1`hlTZ;K2p}1e){! zw1It?ld5kl+F3SA%pS|eSF8*m@&GVC8H72Bo=#>E(W{wK1CU&R$1dQh6L_=ssh6)C zeK&VOmU{UTGX5a<0oYhTp-{UN#@8{7H^gS}XV^lrUP~!jLdFXRV36msQakcAwt*~4 z%XJOpsV@h~_)OFe`AX+-I`CPc%;N$(!(hl!8i+Vgofa9c@wxt(pE-9f0G!26Tn&_S zDOEiZ@zO>_v!h$aGc9G=jG=1g0RmabW(?d9V5xSDV$t-pKs5p2siq>wFRWU1$AY$0D7>|E z$mMA8XynDgig#7Nt+1osf=_VK54}j5_au`Z0DWt50BF+~WbUNJiIfvaNyO19X-j9Y z=u3mrO8+H1-V=m*4gkW8PY{MR6QeL3GCy|^#x&Y@g+jL>@+{mt@HB;~It-e^n0}fD z5Qa5Au7bi8{gPK<{8^ZyCT^Xe`Oz8(e%p^9V_cnf)%Qne00000NkvXXu0mjfKjE87 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pikachu/normal_gba.pal b/graphics/pokemon/pikachu/normal_gba.pal new file mode 100644 index 0000000000..bb60c24a99 --- /dev/null +++ b/graphics/pokemon/pikachu/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 180 +255 255 255 +255 255 123 +255 238 0 +238 189 0 +197 139 0 +131 82 0 +255 0 255 +255 0 255 +255 0 255 +255 74 74 +230 0 0 +180 0 0 +106 106 106 +16 16 16 +255 0 255 diff --git a/graphics/pokemon/pikachu/shiny_gba.pal b/graphics/pokemon/pikachu/shiny_gba.pal new file mode 100644 index 0000000000..d4b783b0e6 --- /dev/null +++ b/graphics/pokemon/pikachu/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 180 +255 255 255 +255 238 139 +246 205 32 +255 131 0 +205 98 0 +164 41 0 +255 0 255 +255 0 255 +255 0 255 +255 49 0 +205 57 0 +180 32 0 +106 106 106 +16 16 16 +255 0 255 diff --git a/graphics/pokemon/piloswine/anim_front_gba.png b/graphics/pokemon/piloswine/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0870abc5a7593171d42ae40e8609392793548a GIT binary patch literal 895 zcmV-_1AzRAP)7*{wABeQq4kEb<5^gp^}s)sIF^8*dwqNdP|Jz7#CQgYG`MTh#}?Ve6Y@?<{8ImJXUfNJ$v zJ_tgxI8IC=w1Q3z%@cbhH3B%|f7;Qv~nXo?!46xVPpF~$+1U$?_3zQ>(_Idgn0RA>3 zU>+NQumN`fh-n}-fMf(L$PnO9033mp1&H>O(fgo*iN@QA^2$L_k?xetrJx>guZU zt^u$`B|(~7_15!$zJB*+?Y$@gzdU?hZUFAu+cuXUKdn9g=I{>!IT#Bq*8bg(s@n7b zj`eb9R`751v_E~81xO~ME-<|IuryxEnt*KV^% ztAH$D6e`K|55)3ZlLoAsD?l}5R7&v!I&ABT7sdA7`Jq3 z3&sY_!LJO#;2CO;b%N(RW|?t002ovPDHLkV1gg#mTCY1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/piloswine/back_gba.png b/graphics/pokemon/piloswine/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a3bfed8e7701416f23c738d35c765f8345f7e5 GIT binary patch literal 436 zcmV;l0ZaagP)1R7i>KlDl%lAP_}e1bqnn0jo)yf~9tWa2wA!<2JvZB9l7H zLuh%qPsX?9=xFc4>GaG$jrR|ag$KA_ADrK$l<+zw;<=Q1N~CkC)Z0X$6QBV;hk%1D zP-8-XjtWf%z@K{uETD1-SkKtiHDri^0N}U1bR$3!&_B+bzjgrR@5!(twh9L<20P$| zp9cZj`X8ba1Oxi7A+W~GffbEO0`!-m0ZaUQy{Dqcu{Gc{YZ$Wm29SA&*?14!E#j zXbr6Awj0t-Cjp=GwhOYM13tDV$@k}(d#FbqX|f^Y{8P$bylHqMr8@kZ~%!j&pj>gX~h zQU^lXCan{R4IzOyKYd$q^s4IDYUdw0u-If|hln~GkcfswTnGRI(?B3P3zz~JltluK zhINUPA;7@AQv(N5&LAzZ=p;4(b_LEmG(4y53Lmv3)boYyr{wSLChqS)2ey39em<885phK#c z#uyzUl&y()x&USysBLYn7E#k%L~ORnVhn7o1l6XdKN5h8W$yuiSSVrI!2y{y<2Gm= zrTV;EIzWCJ8m|pU6a;kiU+odS5|MBvilw{4gQiBuKq66c1xEmZ4+OC>5TkfJ&+EhE z88D}H&xkmO^J!kUr?0P^x(L`E!?%}t-M^e(xxg#{B&E4XDNq1j3(;L^fR?*wvuk&X zd*??hBV7sD(4pMXZ5b)G2zzUfu(8HSquMcWKU7O=?E#cKHhzf?Gv{Fsg|oWs>uv;y z3KVH8E&%i(M*wF(0Ld9+yajKLXVUX}HSi2bB{gaN^WB)4aA%h^to`Eq zaIY)!iGIDNEmPH=4~@?Dwl6IK)N3WY5@kgfmxAiMDHt!-BLI@U9i(&nK)uq?{+Ngw zfHtGsPrx!CP#xLl8gRfY_IyalgMut#ET`S;*>FJ$MH5Qe)iMhLE2)T(rq3%J59yQ+ z^l++98dK$1g|0vk0}-t;JPbs6m2^U>Qu7#tFQIsrFfxgJjQr>7O{JFMH`tpR9US0Y zsR_3CuH+UF@sC@WH0fW|`o{VcFn&wG5I_L~Kwb?P94TPrm|YDRz$jq2kIl7!q12Nx zyZ<6!z}0}U`XyjwUci|0!#gtNho74A!{4m$jjH*SW2RyH00000NkvXXu0mjfh?`3u literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pineco/back_gba.png b/graphics/pokemon/pineco/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a92454bb323ade872f5fe3147fef2b25d2bf784d GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW2nY!LXZR0CnqJkG z#Y=+LY-zrFb<4YNbCxXm?_~*<{r~^E{_hz;y^JM6e!&b5&u*jv*=?RKjv*eMZzt_7 zYBmsPS^4Igi9x0HosJ#cz2^ds@}4NkoN%6hf`o1AHx;3OHh%Lzp37i)vwZ4~U=iD| zSD5$yf0%DCKU0KZ=KD^q<%?cv-wx}$_wMJq=iXs=%cd6ZjTM$Yeu2TDJbQu2fnBrR z7>YNtX)sJb6l-{&S>;fiZ{t@V?S^|rof_-g_#S8k-@NnOPt!tm_OsSV&7*gx+<0_H z%!lDY)V%*5S2zD>JAI|=Ft@)_kxIxufmL=VS~T*?gd3{9eNCMGiNVB#`Nf?;ZBd^k ze!Xq`8CD##*zBjp?w{<_=<8J?(iQSZy;t!3D+ys%^@R)~Cl^hr-v5gIM0f0#D|T{> zvg>P;_Pa9#UHTmMK!5m}lUmlMp99@qFLs^O=(TF5Ji}9dg=kOHERQcnT|JUbB7iwkJ-#VENj2;G0S3j3^ HP6OkkG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pineco/icon_gba.png b/graphics/pokemon/pineco/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3c12df5a2f0b05053023c899dee0e017ca70589b GIT binary patch literal 290 zcmV+-0p0$IP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hph-kQR5*?0lF<#qFbqU9K_Uh~9fgrt)F=z&>MlT4gv3|O5x(M< zPlSZv{`_?ICDMiPT}oR}m(|E+4U(uRJ+cNQyAAHKGwqgo;y|n2k_xJ1Xa}Z%x|Qp3 zXe)H7saq07$dWDz!)(yZ`_I07*qoM6N<$g7jT`zW@LL literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pineco/normal_gba.pal b/graphics/pokemon/pineco/normal_gba.pal new file mode 100644 index 0000000000..91acee124a --- /dev/null +++ b/graphics/pokemon/pineco/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +41 74 123 +57 115 164 +82 172 180 +131 213 213 +180 238 246 +156 164 164 +255 74 57 +255 0 255 +255 0 255 +255 255 255 diff --git a/graphics/pokemon/pineco/shiny_gba.pal b/graphics/pokemon/pineco/shiny_gba.pal new file mode 100644 index 0000000000..a474cc3e84 --- /dev/null +++ b/graphics/pokemon/pineco/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +90 65 65 +148 90 82 +172 139 82 +230 197 106 +255 230 131 +156 164 164 +255 74 57 +255 0 255 +255 0 255 +255 255 255 diff --git a/graphics/pokemon/pinsir/anim_front_gba.png b/graphics/pokemon/pinsir/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..576e56b7d05f80e4944d2af5c97455f94120f2d4 GIT binary patch literal 1460 zcmV;l1xxygP)1R9J=WmcMV~HWbGN)EXl}2yVNJ0qL?{dZDtO16!VbkmISi z{-bhp=xj>v(kZ57H`gf=Wyi@>$?T(khcwbPLp203`61sAlJENz<*j|{&40`f(e{<; zo;tJ!udN@tCi?msFdbS~t%W1#jfqALpq|SfniiT|H@`kgfD1soZ_k!&3{BJqsZJ$8 zHBEHY{<7?`K+FJ`wPVlr=t9`w(n6>md$Pr(P62S*G1ndoK0p=_>$q%B1Yi$9GuFGY zB;e6PuwKv58XzR4;*m*@w_<>A*MZYYyp@ePrH6Q9;3vt0 z2bjzFY!KtVfyMn51rmUxVmUj&Uuj;$V1fg|Zm`R+F98Y6`32BtpEDdD1qkd-(^JMW zKU|6ch2T;`DcLdhnUD;x#UKL6BY|%>Uz~y0Kf%8 zauSGn_O==hcpA71VNPQ1gT|Vd7%y()7*mK6{3MZ1@<3xO-ZhU|i@lg1QksyEkgdWF zVGKL&-nC9FZi9dt14vg|yg!P4=KuMwu|YFT>E@Il7b*PHNo3^FthS+fOYFx1JMe^+ z0i@4HPWE-#3~8K)K|)dz;;0(a_XDQaz?~OF`R0t=X93OY6zK3zRS!w?AEE(H z7q{X;aTh!sMr;5F88Mu$C1ACHCru&4gt0vEzDqz{+y*$yh$Ufs#0Fd!pKMdc*2;k& znRK6un^2DG1P+~vzyXe+jxL8}?8VY>nvzYG67?c9^QoXaE*dbS8gngX4n$x&*ebhf zjIr(GKo^|g?@VpS^w)&%t$*tE>+`c=^9YX0v)anGdVXZDYqync)sl*=(mOY;VUxg- zBN5eLiy>+!~PnAC``Ct$f3@T$^qwBu36asyAo9w-ecXR^a^0?mBP&d zSgEd{T+~iXEd;{-OQp-eGA=^(i!TAYQTCux-I&w`ujm~{U10l@!fSb(PnGu$HGqGV ziPT63;Jw4-&htuLp8Q;xXe~fj#pT|AC^o>sz8Fk8fX;55$+!6#FLxnbqQb&U@zmM3 z1xP1MxE1Vs=5wzU{NP8b@e&?Jk04jV5 z^miXP5GgVM?L|QQj1{UPl~NGp@IaHuV0;I;(rWVr+5^~o0!}8!fF;XAvcgMV*ovDl{khD4%4zbkT!rdynO)aB!tQ_!rHYG2V5F) zp^p*}8hyAPw7LvZo2L02W2^X>fDZx1ffS`iL&zKl);YLFc5})AXj*Y@#c(VCudM_uL}z7(>m%4V6qRe z3S9P<)QgsIqfN&o7&~dH)bq|I8qJq~{+Uri$XEPF1e=G|d62;B0g%QC(A5K}bqaKL zgW=^53IP0ggJIZg1VE#Cmk5Ax;1LC8mS)zD(}A+s(hOkk*Np%@+Kl&mj9!3pwz3&x z@Z;rJJ zV~!YOp$8a`tg-2WB0uc`&YtjC+y}m;=#d>g-UR|cz*Xo2WSwxw!$_E|+)rmDIK~t@ ziQoy0rLYIE=(d?4#GyHxJHW^&P&=kMt!v4c5DSzzj{V7QOyuEdJ z$5V1~@>`I)>HwuajeuDC0%WXIS63%vQ8Z)#Y}>l3jezJ0kV@TRS1(XtN&XHTa3=$S ziE@C=P+kbM`ap3Y6Xtxo%3;Zm~>yo!p|3HKI%+%q6 rPOS$7va134+B8kOt%C!6#lPb>r`28oDe50t00000NkvXXu0mjfEZ8&8 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pinsir/icon_gba.png b/graphics/pokemon/pinsir/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b05b075b90c229ff21182ea5c14a5745d845bfc6 GIT binary patch literal 334 zcmV-U0kQsxP)DV$UcT^d|%LEa-ljG3%ha$qhaOwT2pEfFPh4}cSG-ro%I>n(h> zG&9$oa3Rh#iy!Jdbkh;q_%r-VFtjBk(~uMzUv_}~D3uxl#!*YK3nM`hrZEWkePQrR g!pyui!hGh(9d7xX<^u1K6#xJL07*qoM6N<$g1*&^SO5S3 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/pinsir/normal_gba.pal b/graphics/pokemon/pinsir/normal_gba.pal new file mode 100644 index 0000000000..9ef4b91f2e --- /dev/null +++ b/graphics/pokemon/pinsir/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +246 246 213 +213 213 180 +164 164 131 +82 82 65 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +230 213 172 +197 172 139 +148 123 98 +90 65 41 +16 16 16 diff --git a/graphics/pokemon/pinsir/shiny_gba.pal b/graphics/pokemon/pinsir/shiny_gba.pal new file mode 100644 index 0000000000..cd06d2111b --- /dev/null +++ b/graphics/pokemon/pinsir/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +255 238 189 +230 197 156 +180 156 106 +98 74 57 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +123 139 222 +98 106 180 +57 65 106 +32 41 82 +16 16 16 diff --git a/graphics/pokemon/plusle/anim_front_gba.png b/graphics/pokemon/plusle/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..123efe4ef135b4afe81d52f04579f100c2cf56e9 GIT binary patch literal 830 zcmV-E1Ht@>P)bHlGvO6hTfCp4)r?~3Z3eMkdXU)ckf~8J|PbAFTzOf>hnu~ zRsNMEOg<=q1W{AUSW`Z&^0?Xu*1lin4b%dL?+0l`qOQfpuO?I^V)}dDq|c>0GSGI| z{gY>(9QtdEC}_75F&O90C`}Q zozskSa2X&9=?)?r=Uj!?A$*J@iDAkB#sXS+FMHoOK-^0i)6a~{3-d}+^!bP9$LvYU zPoB>WX#}A+ypkQ=*QxA)a7rz}Wrutj3_y0A)L@6mCjib&tZz6#&`pm|=+3!(g9^xt zoCiDw$mi`XGepCh7QhF*WdPZga@rlnHNa=to#nXFJ~$Lp`I4vf{z%zV6yNw7K$N9( z9yr7y4)LExlBDXFp;w?nZEh4n{-Bp6#O;y@b3?2F8~jqJOs!yjp;R-@VZW zY`sPqAvmQ!C_raovGRu#+6etE0h*U>;SX;z+BoJ`uQAtS%c2EOZ&O9=1IO)0t4RwU z$sdT=2aeoF5)?SYud1KseLirD?H?ew{bS0uBAB!O5QVK6BS2sUBLo6$TyiaxKVT$- z^ZohDsQlp_zx~M_64C?zfvfOP_``I`>%mI-gUzliv+@V-5TpmCKX3&oveF-Tz@*D& zJ*)@?06hS8fHz4EpY1~a0H<&H-K-46zI1C8#a0GE2EqdJ^13h(cFL*DW%rpi5V|SZ z_eLge`5`13ag2gflnP)!Pht1}M{P)Kl)X;FFc8NhQ6wfy=^NA)A1k@^W9m@C3-GaaU`UuU zR1jyXDj{em9s@R>2?;?m*Sk?YsH zR>9MwB4^swY-%A)Cd@q3YKq{B3cx(mQrl;78o;`l4*%c9<+tvdfJ7?+EIRTEupYP) zNN+jdca4y59_iJN8D97WKIU)H(L(?u%i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Htw}^dR5*?8k}(d#FbqX~g8EdMv*4vj>FHRqWMN8%UWJ8)A?na9 zL?T3L>$tEZgz)CCpKm*Q06$k{dg-kL6e4;zVGbh;*_Dz*b!~=oQKt6%1WA!P%G{Yq z>7mB5B@xkpc@#qOF8da8pnP(8<1vtIPidB$-Fr<&?%qYBxVxsinw@LB{A;TZ z;?QO-I6w(Ps5oF~sS6Gd%P|WMnvq&@kn4XR4o_~-d|&P}`eXnA002ovPDHLkV1h8g Bf{OqE literal 0 HcmV?d00001 diff --git a/graphics/pokemon/plusle/normal_gba.pal b/graphics/pokemon/plusle/normal_gba.pal new file mode 100644 index 0000000000..e225ab56a4 --- /dev/null +++ b/graphics/pokemon/plusle/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +255 246 222 +255 238 197 +238 213 131 +189 172 131 +123 115 82 +238 156 115 +222 98 74 +139 90 49 +238 82 57 +41 49 65 +98 98 115 +65 65 98 +148 148 148 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/plusle/shiny_gba.pal b/graphics/pokemon/plusle/shiny_gba.pal new file mode 100644 index 0000000000..f1305ea504 --- /dev/null +++ b/graphics/pokemon/plusle/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +255 246 222 +255 238 164 +255 213 106 +205 148 82 +139 82 16 +238 90 49 +205 49 8 +148 16 0 +164 32 16 +41 49 65 +98 98 115 +65 65 98 +148 148 148 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/politoed/anim_front_gba.png b/graphics/pokemon/politoed/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b8b43aa688b9a6b6ee58dbc674be3a476773c9 GIT binary patch literal 1191 zcmV;Y1X%ltP)@gAfo9dr-|N00001 zbW%=J06^y0W&i*LB}qg$By&wGcmu%e{pFgybB>NZNLJ(3tNcATsWSv0{FcR@D>+y$Ft>-@vVR| zE3g8PWEMaC-0yQfZE~-ceY6OmiTFK6|Nc)8UVyob)q=mm1mFJs4UCO|H{sI$5D&l{ zq80HN0r3?9V~Catz(xK78bXLtMi^x1hc|Vn%X-*okpkz@FYgUGf)1TaqQtLHPd-AT z0d0RSFG~hFL!e%S>k~4NWqi$ZaW?y?72y)H#xcj2S)PA5pMhRPKsbLb#PP{2|Mh8Z z0NiUl;p;EQ$Fux<9}IxwA#iwheDeOoqb?+=p_c`Zj?PbK`FDO7rzX__4`B2x&k3Og z=a3kN8+#NI^b6T=8C(u0)gOUCf?(Vhf=YFFyL#S|oBKdfWJ;fQwX zz>4&f_QPPEi2^9?>A*gJMcRaYeprk@QQEBo!^c?tkAy`dQj9$su4}+rM4k-EgeSdZ z?1gQu$hZ5$B~T<|N9f1Aiib~N2^gogjE9eb_%Tnw3}laJHBmU&<(UHxs#$dzfY9@H%DHky-TQyc4Bd97k3Yx-ohfh zO4e;8wgY;vOsSXqjQjpp$ z{c)rNExJ3!SxnV1@PX#XPITs?#O0U@oH%`=@gSY5^0H|732~RZT4JfT|Ad^(^bWjJ zZDd%P+veQ|xX;;W+XnpE#@Vm|R~?)UYYl>Zwx;-R+CLE!Z?u^{Ry+Uz002ovPDHLk FV1nVCLbd<^ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/politoed/back_gba.png b/graphics/pokemon/politoed/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5337b6f27727e25c286eb666341e62e497bffcad GIT binary patch literal 565 zcmV-50?Pe~P)@gAfo9dr-|N00001 zbW%=J06^y0W&i*Ivq?ljR7i>Kls#^PKoEtuNkIe32{;74L2zwLmahO^N@gutcF9sX zQli*Y>75${cP=PQpC*ywGL4~dWLIovH%`Le5-GKx1QhSvH?uncA!q$xI_LQxKB@)a zd`AqPDSd;#iMzUpsGoA8tRcd6o@OloUYV{2xCB~y5bf)nD0g9`nT%1lkPARp`WjEw zCxi;`^ZY$*@g3)S=eQ555cH*B+DwGrm+u0Mnh4E10UiKM8-Tg%%Jr@b6BFtY8h9uN zFMusS)FbBLo+JQHs}UN=1hHNKCd_I9D7jn!W_oA@zBMsHEoU|~RyGy|042_ayYM|JdlY5Ts zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IDoI2^R5*>*l0j<2Fc1Ls0_zERL_bhU@g)Xdvb_YNOS6}N`-1+W z6bhyNL~btiIUte`#NdkqML{vR_A#o98*8QJ16iFktai21Fm_qNP33}$jXY3sH-&R! zT+kvqq}wBsLp;QXTZ}EJTdc1_VSz!ssl!P{ONjc8fCj@kJQBbGrXP81L1of(g*Jm{ z%)C6$Vd$$=(PEN7bV>>C^&(ZOl*5@_vK+5xpPK;$@GVQwnq1XHN?bb+p!ad%0Omc} z1&8kk@0JU=KdkvTy(i4?cN=eiMi}BpFAVwpUKsF&0b8~gM!XKh0KhgEa&u~u9rJvJ zP4xZ;lsZWHmOxDW&|jS&w&*Tdr0ZE`RSsY|E}0000P^gNw9cYLr1zVh|7zM`7U)00001 zbW%=J06^y0W&i*JyGcYrR9J=Wma$LUKorJLYSuVD(9Z^h|NW)klgrHG*)>jjuU_vl?84*2taz36cFy-0%H!8H?9P)Ips}^x-8~%v z&KIXV18Bs743dvuOtV3a zc$|>mj1T4;GBkbOA6M*lyKN`pq!!?ig=uaE(Py%4o1~;kdqoX~1ba{)40^uNHrYv z41ucol&cj7(m;SfpoZOPbQwQ6NGw6Bf?5P^gNw9cYLr1zVh|7zM`7U)00001 zbW%=J06^y0W&i*IQ%OWYR7i>Klf7<(Fcd~Dr7Ma|JJJExHUlDSRk~N|!)64j>dbYb z?!HMLAaNP8rqsqJTnOX^$~SV4&;9sgY|50I@wRGzYpx`~T8+<-P-m3zpvY=sY>R{} z%MGyUT%Ik{R*+dmN#`-YPo3ZbP{keRj*yVM6&*#)9pM2KMPcW(=9>ZdLu!CLcLKV@ z0({91#^C0#CP2XLk^|6`#PDU8bb+?Sj0cu@?*MHHeVd{N9_d_=5-|_HYeEu0;+~Ya zRtOqZv%7@!lp1bvcKv>pc3j`al>eSTY*AyTV7Sx@00000 LNkvXXu0mjfk@?U$ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/poliwag/icon_gba.png b/graphics/pokemon/poliwag/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d4cd95f1c0e7ac7a4f6d6930228d8309de1394a3 GIT binary patch literal 339 zcmV-Z0j&OsP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H(Md!>R5*?8lA#WRFcd}K7j$8AjycSl6f?#C4Ghy5YUqFLYr3E? zT~iFG4x059NG6udZC5nCN4(~x2jKUzvwAvJ=mQrTNGd%T$}1PprkMwQS+EHd8BQpL z;o4NxgG*EyZj)SlAZ{b)wmu@Dhd$wBZt>OFMvPnRFg+NvMuraLzCSHHbV_y25-15o z!9Smd$Z&T$v{~r04kX>^K+XX;9d-%BzjZp8n&Jqj!IqUpj>TMu*30 li$-;F1thG&%(lCKHBW$|X<3^DyGZ~5002ovPDHLkV1g*jk5m8v literal 0 HcmV?d00001 diff --git a/graphics/pokemon/poliwag/normal_gba.pal b/graphics/pokemon/poliwag/normal_gba.pal new file mode 100644 index 0000000000..14f781ec90 --- /dev/null +++ b/graphics/pokemon/poliwag/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +222 222 222 +189 189 189 +98 98 98 +255 0 255 +255 0 255 +255 0 255 +255 189 172 +255 139 123 +238 90 74 +180 189 230 +131 139 180 +98 106 148 +65 82 98 +16 16 16 diff --git a/graphics/pokemon/poliwag/shiny_gba.pal b/graphics/pokemon/poliwag/shiny_gba.pal new file mode 100644 index 0000000000..1789edc4ae --- /dev/null +++ b/graphics/pokemon/poliwag/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +222 222 222 +189 189 189 +98 98 98 +255 0 255 +255 0 255 +255 0 255 +255 189 172 +255 139 123 +238 90 74 +123 205 255 +82 164 222 +41 123 180 +0 65 123 +16 16 16 diff --git a/graphics/pokemon/poliwhirl/anim_front_gba.png b/graphics/pokemon/poliwhirl/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..df878ca7b2b9e000b818ff79afe9a4449c1a633b GIT binary patch literal 1073 zcmV-11kU@3P)KorM4mH{Kv1%?hemLMfU$t_qa;$LfEah4{+ zOHYcFzad$jrCB-Bv`kew6RBftNb!?*Sru$fBu4hP>TWQHzweVv%~N3YIA4j$`s(t>+o<45WV+0;@SX|N~aBhHo(QM zA%|V^5a4KXVFJnw8a%qytf;sX$PBz!Y>1&D!WZ5>Cxq=gJ9Tf*aa=Z0Awn&{l?<>~ zI%G~0hzNBcKZv?p^>#_7D8fXDScsc-|L2qF(((4Z1IIb+G%-gk7^MCeE#gL(FTIji zX78#{yWbVzkb3tk;J|6olgm=uJHQMr*oKM-{e42;ECXygrS=qo!!je)2}~5Q-KO;v zAax0_a);FJYZIVi=(ouJGDM3YaCBMrSsAJ=m;(%N3teoMFV_kv0(1~~kP+5_eF^jt z_*Mh_Ox_`o5K>tJIg0DIeV0{%5G*mF2vF>zxhS$g(Y_1H$SD9+z*hj;60qPu)3jzcKyhTF-MzHS7vAk`MnB&RluEP_vxWbfdMF>#-4t$+ePz*;Bx6HmJtiA?2MktQ&#M2+-0P)X*%n!pe@i7Q8X6UQ=g zaIAnefgx^k&H4CFe;H*mgQ?b4&00000NkvXXu0mjfqpKl)Y}kFcgJ(0f-zHIsy|T^2C(((W<^c5ncK$PKQd} zd>!TrM#BdK_HKXKU%1{yV!;^9)sJ0b z4nQBkM=>xGZRUc{8GB*O6-(0!=rc4Ue8AL2!iME?Aus^o6+U*E8!A9_4ln^7D16QV zJOjXsc^4Bzvt70P*lyE+h61Ax?l zbvmyCI7@-sdPknW08pn5l8kB{A)m(p#y#=c1PXCnYA!?DsZ}TeyqO%n!$IxV9SdJZ zm;lLY_$#nxs_Uoo^<)M-Pj%gXIMeR4zSDDu9X?yq3ke|;4X{cez!XC6(I?%#0TAK{ zA?b}3V4DExpD^Hoq=0@N>wI2_!0Y#?DKOMu)=^3vNBP0Zz8PnL-m)Wd`F`9VWh>B` zwuU8BsgFAzWEHwJ*6;QyomP6Md4&np0n0BGWPnW_TDexIl86t=AJSR%$gNEQB!|?e qaqUi6Nsa_b>Q9o(e|lH_y?y}M)5Qv-J@+yI0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H+et)0R5*?8lDiIrAQ**t0*&wl!eS>DGlB zSe#0$T*OWtoSL4naPnUcHEh`};73x@5BcjV&*ue^RFF!8?000000NkvXXu0mjf{PUM# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/poliwhirl/normal_gba.pal b/graphics/pokemon/poliwhirl/normal_gba.pal new file mode 100644 index 0000000000..50de4d6313 --- /dev/null +++ b/graphics/pokemon/poliwhirl/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +222 222 222 +189 189 189 +164 164 164 +255 0 255 +255 0 255 +255 0 255 +123 123 123 +82 82 82 +255 0 255 +180 189 230 +131 148 197 +98 106 148 +32 57 98 +16 16 16 diff --git a/graphics/pokemon/poliwhirl/shiny_gba.pal b/graphics/pokemon/poliwhirl/shiny_gba.pal new file mode 100644 index 0000000000..b6aa45616b --- /dev/null +++ b/graphics/pokemon/poliwhirl/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +222 222 222 +189 189 189 +164 164 164 +255 0 255 +255 0 255 +255 0 255 +123 123 123 +82 82 82 +255 0 255 +106 213 255 +65 172 222 +24 131 180 +0 65 115 +16 16 16 diff --git a/graphics/pokemon/poliwrath/anim_front_gba.png b/graphics/pokemon/poliwrath/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ec68c4aa584a1ab3de662eef8df64e9cd300ec49 GIT binary patch literal 1201 zcmV;i1Wx;jP){)&n7@J;c)(dRDVsc^SZ`iLIAPCr$O(~tQdw<0>DK;Ph zAIQ)6Tm$S+k5~R&0`T<|{GKmiY8?j=Fnz*W0394hz|&hC@aG)hBZLD9%q#G~b5#`B zdke3827kyp=A36m?wLOi8)b}d0>0t=F_SGS~R?XhkSV01(BPHxm2v?g5;5f!DLnQ|_oKyE8EX1mkQ3~u~ z{QC9|IjxeE7@%)j7QrgeLWiydB8>q)#JB;#L;?Ev_O9p@o$rfo&x-&un4}7*WC2iW zl{yHT@JN%$&oxbeSEz;Xr36}K7uQnYY70QsG0?|HGy)oFf)FU5Fj(%DX{~)ux`f!I ztBeUo+a{}Gr`)$F?Ndq#>C&+>=pIOr0J%lCazrup=s6t=p=1CJOy0bAd)*<18mjb~ zh#kNf;%Z~^p>}=<>8WSa4ggDar_2HA8Y4`HN3sA&a3aKmu|v=+!~9@Vj}St`1me-i z#hBPq0@hD5B}7q}dm$06Kjagb{NW3cA=fnt;H?+SjYvWR-1;*io#%!MWX6!xAeQT>w((-7YZJ1^#TP#Nx+2zTccvC7FrFkfK_U;pk&tu;H7sck7^eya zanJcImqG%Q1OT~QqXp<9eiEGdGtF)&$w1kWpy_(OXD zSF_eX{KOIm!hh2O?|$YX5b)EBAanOiz-P{%k-<2<-~pfKyM!YqG8jSV4zel0U_c+K z!N>s_g8`AzPz{CzW+DS92BZER0OB%p)+z>rVj#q)UBFZf2BjDjK8cTe^mV+v=XACP z10B%e4{%0Z-VEx8G0?`ft-)~7(U63|S;dM{>>=xPYcSk?l~&$YcM zD#bE27>|DgM2}j7VamHb{>QOcXo?(hq1^sDV76RGfGPOwSyN@|5!VZ!^L&az+TD7= ze4g(EPM)~-^#c4uZW0CgM#mmUEO;I;mHAQKW=P;6(S?ELyU_ml5^?+mwfSq!{kkB; P00000NkvXXu0mjf!Z9W; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/poliwrath/back_gba.png b/graphics/pokemon/poliwrath/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e5bee3663468ea276223c9fdfc4e171a29bf8c0d GIT binary patch literal 638 zcmV-^0)hRBP)KlD%%*Fc5$>2ekmIOPWpf)QslRqmN{C3xvtf_Q z8a&{<&rg(R*ob}LNqH@-5qL9C(;g_D!Bt3vIQ|(8dTkO5G?TR`Sujg}T2uq!{f-R0w zTHsSxqEWnvI73cAu2$mM^}r=2w5dS%afU68u@WcLLi?d;8MBzn3G|imA7{k3bv*AW#T=RVt z7}EeWk1{^>fun-MFwxw}S@f_6RF%EYaVO(==>x&F8ALUUPJ(BFLjiq^LEIh)UgF=! YAK;-M6)kI(hX4Qo07*qoM6N<$f?nqw!~g&Q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/poliwrath/icon_gba.png b/graphics/pokemon/poliwrath/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d1afb4511fcda354555dfd6e168245cf64dbacfd GIT binary patch literal 389 zcmV;00eb$4P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I14%?dR5*>*lC6@%AQVPfSsBG zn0mol9)O(J5-RYf_WTQQLJ^N8ST}MQuS+N0#5!k3d)cmD4dbPI%ewTD8(vLdi^pg%-`ZVfLq@Q%ik9pRC jSO_{~u=o++fBNwNZI!m0Zd}mp00000NkvXXu0mjfl>fIs literal 0 HcmV?d00001 diff --git a/graphics/pokemon/poliwrath/normal_gba.pal b/graphics/pokemon/poliwrath/normal_gba.pal new file mode 100644 index 0000000000..14f4493d4e --- /dev/null +++ b/graphics/pokemon/poliwrath/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +222 222 222 +189 189 189 +164 164 164 +255 0 255 +255 0 255 +255 0 255 +123 123 123 +82 82 82 +16 16 16 +180 189 230 +131 139 180 +98 106 148 +49 49 106 +255 0 255 diff --git a/graphics/pokemon/poliwrath/shiny_gba.pal b/graphics/pokemon/poliwrath/shiny_gba.pal new file mode 100644 index 0000000000..64aab4039a --- /dev/null +++ b/graphics/pokemon/poliwrath/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +222 222 222 +189 189 189 +164 164 164 +255 0 255 +255 0 255 +255 0 255 +123 123 123 +82 82 82 +16 16 16 +148 189 131 +106 148 90 +65 106 49 +24 65 8 +255 0 255 diff --git a/graphics/pokemon/ponyta/anim_front_gba.png b/graphics/pokemon/ponyta/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..abee4ad854efd53e8d66f1bb7564aed06a13f5e5 GIT binary patch literal 1348 zcmV-K1-tr*P)k1piO8hvalra&q)$7n3sRQ^_ zn#=NWV`Ddj|mA)S@*ogE{-pb0$t8j05v4gAcR~?z>X(@ zn&1q8I&PBR#q|JyMnqKr)f%>QYPCf$yI>2_&anMe1yIc%+%8XRZ8t&yAZ-5?DL@rByXH;(U7JTe(#-(%`Y;xxX&}pvMBF2D z13692Z&V4HO8`Cr2@rj|Wr`HxMie6;0on$7%?IQh31hHm$}IYcf_bDVB5+LZ@0R&6 zI}FLV`#+X)^LGMS+(SAy29NghfVBI&#dZyH1g8LCm>pJ43qTID!|v}McO@jija||hG< z44OWdcen^C8}H9@KYIQ84cyY_SN(p-JU%kVE5Pt`;M1o!_~gN9oZ%zJIcOhf-U0Vq zZVp!fG=b01O&r`2rpPC1Li_iptF>4FkS^e+CYxTlpM(GuH9(`0?oL`-J(E*+tx*O! z(Yg?;U6#KS&kffJd$JFa7A&KT&9-_!@rI?v>`8!xLP!Y`1hK4=mD@X#HIQ~Viy|Wz z7$#R0NHz&_b{<37qJ0yfuWXJT~&Fw78s`XX)Ll7_TgG!h)cc7 z3=no9FcJ;uXJZ`Bu1N;if{zppgBVP-j(_|p2+0LTsHwTu)q>Qm)@%g(Aq7V0X#imZ z0NRtF-^&FCRsWqp02OGbz{q;$qF!sc@k(HPW!fxTAS>$cKC-wF7-J29o{#D_ zsQ;}0_UxZjKO$EW_#w>o!*=^e@&&>{lKl(BBxFc5~hc(CPnC_ut5po?Y?mS-1Xv`;@P9o1cRZP~5B*maMW+?H9b?0M z*Xc`1=3aIJdr1V_=bNreJRlL5%xv1`H^!WlO0N--8QTU1&YxFW=ZL##*#=4~E~VDG zM6^R0xPuIoszm>5gN+QF!;_2*+~JW|z;_#z$-QkoPz25w-mqxx!AJ~*SR0v>_EPo^KoF7HAKLC&bxqeV9@@6Yc3W+pp-_bd<8KV&p(6p zsn0du5CG4CHc4i!$}IqhWLg9Pq{q4^0IsHCpDw@^RK({{1X>te@eV*!6GrM4uYv3W zD2m~Z9kyD>HIV$e0C0nr8G7ow8W?}N0EQ|zD02@8NC;Uc`RIuYG4sH< z=|}#1saqVyG2CY9qzMcnMicbgP6-7Fam=Vh1L)gLRDF<-K4KhS9si`+A!e% z54`FD64pzn>G2)d`!~cbuO)6Me>Q72F|7Vo?p}d}yxz;P37}DLehpmcfa<+MXq6V# z6i)@98SkVoiUw&bTL7f3b?y0#_Mw^q?PA)>&?6roX%9%`w}B7+TYmw+Q$qr_YN`JK O0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IM@d9MR5*>*lCf@tFbsyX-A2?GxR*ez?b4e&lrV-)W-Cnb#=R<4 zL2MDysdT&42}ww=W2ZBc75{OJ<9v+WgJnZl8T!cP-p9N*xG;W2^eO9%XY!5p&c3mw z1Z>o@l`@T@5*z_Gfj>f9EXDw|zNCb)yaKLf@g*+$RG(4TA!e6ch`G;;MGrxE5%M!H z>d?k>@l?L%xu|2K#Z(G9R=r0-oP>}wvL*guWawmXFMzvA{S!W-nM^93Qc9 z3k>mb3(R-}O!~YQ7}@>dqaPB1_<&@T|K#Hb{avXn;?O-w00000NkvXXu0mjf`FPDc literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ponyta/normal_gba.pal b/graphics/pokemon/ponyta/normal_gba.pal new file mode 100644 index 0000000000..68dcf8d3bc --- /dev/null +++ b/graphics/pokemon/ponyta/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +255 246 180 +255 238 123 +255 197 82 +164 98 32 +255 0 255 +255 0 255 +255 0 255 +255 230 32 +255 156 0 +255 98 0 +238 0 0 +156 156 156 +90 90 90 +16 16 16 diff --git a/graphics/pokemon/ponyta/shiny_gba.pal b/graphics/pokemon/ponyta/shiny_gba.pal new file mode 100644 index 0000000000..1210e5228c --- /dev/null +++ b/graphics/pokemon/ponyta/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +255 255 222 +255 246 189 +246 213 156 +131 98 41 +255 0 255 +255 0 255 +255 0 255 +222 238 246 +98 172 255 +57 131 255 +16 90 213 +156 156 156 +90 90 90 +16 16 16 diff --git a/graphics/pokemon/poochyena/anim_front_gba.png b/graphics/pokemon/poochyena/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0579a1fa9b169cce42f4b74e80d51f49a1421ad9 GIT binary patch literal 980 zcmV;_11tQAP)rF)=~Kz0LpCTC|H=-bz8NIYIyb{{R30k)OvI00001 zbW%=J06^y0W&i*KQb|NXR9J=WmcLHiKoG_+O}K95f+$zf)27W!P>hY0f>3yutAN5D zTNGDBhmR&F3Ln`flt{?~ASFf0q)DAB&j1(6e<+g8>>7y9>oZ+MaZ_2|pJ!&r_I_Wl zw~9v@?7CwSY4K*i11Q|@&o zSg);0u?{l{#txf_n83+otcig3F`o|(ngFlV$)8eZn5oi{vTQa%HAe4CT9-208ptzi zH&g>BW?i1Hi?)$gLU%CK861ZQ&)TUWOp0BeB>?us3KS-T90q}aV8;R?j+kg*2CfU9 zouMy;FeNeo7~2VG7RY@KNPh_s)h);@%V2Epf`GFc@O>Y`mR&G!wx!nt2r}?m0VxNW zoP}-(?EoaZGV?_!2-t3!LqG6N2APjbf!^3Xk+6-issQ#p*9LOP2~gKP=DL`VY@mP~ zV5+Z5fqBayN?rzmX}-i!%W1<9%SazI`l_WskHw?3USM(D`u`{uiTX*k$HJcL&l zL;WZ_)WQUfHVZMn+Ppv##{JyEGfC39NRV!S*}OE;d%Erf35bOz`V#_rCF3%W=y2r;H6?$zCEcn~$IyG-sfz%lGB5Jh^w4Vk$H5RGxGicE}eEDF6B znB>+gt)j>zNP)a32wU0mwDvG@C}MCU`vc8gYGEMVy-=ybZFZmm5W`c4fLLkA(+Zr= z2NL*HX?3rF)=~Kz0LpCTC|H=-bz8NIYIyb{{R30k)OvI00001 zbW%=J06^y0W&i*JB1uF+R7i>Kl(CM}KoEvq;d15jDjtAm;4x->TjeO$<_e@V-btXi zYfe~5$fDSbrb42mp`@VTNqB&(@D;h_Dl@xlC$^)dK%%=zB3b#r{PWM)n z#4fIjqD{oB&vD>^f%~&KkQPOoX0-SV(6wuVizr|ovgc%>jYr6`GlDoEK4lpj$f&_1 zIUS-I1(DNH$67oR_XjA=1W1>M%S--!iD-(e39uOm?qID%EQ)e9258e?JtI=w0PE&w zQ4ca35-pQuAHnjB_~F|N^QMnsvh22`Jl%LJ=fExAe%;~A0HkhlWB@npk@^T6^4*v3 z_^WqVldDP+BWnsnApSu7*aK-G6d}KO3ljS}44NuW&@F{6I*0Rm1SD5I5p>`TtKX`_ z<1XEpy@^{hH(A|v@0+6m9ZP$nT;1(P5oiu@%sn3O*8Ra>U25qKIHl>C%o^}zPj zfxl@q$ODki9bmCDV$FbqX?0t@8SE)Mh$V4=tCm=hFTb1KybFcfBL z2eVYrP)<5$NjMnb15L^PFN8<0cz#xOAk|RJxdW9NB64*A$w46wjtN--efrU87>Uat`1vI30V#dQi5i$LOLS*j!Ruwh$jTT~@57L0EVKnQqb%F+UB1Sf zKkyF>B|L4_n?B}-Vyqpg#VS2~Got~xL6I3XO5Uc=S>WMYv@d%gb#S1My`?X?Pc(%< zJ$%)-W{?9TbXKbPx!Qb5Yrp(#hRs(xBuv8<7bFEKs}v0000*`P-sb-R|Nj90{{a900RJf|DgXcf{gg3<00001 zbW%=J06^y0W&i*Ju}MThR9J=Wma%WsKorI;#Zo$1Iww+@BHbl~Eh0Yu0f}RUPTAa! zD60Ch0ZTAbVS-K_LHu_i>A+;BR$?;m&KDQ_e9j0$d1JqyzW01m`hAXbod0j+0ln3E zegI$x0FOTctMp9`Fz)PSNRkUmlt4RAa4x7tWR7@$uYiPF>lAAzU%9beNA1W=zbMP2j(R%uF3P!Dk$DF+E@n$isjoTk@!gA7rx zGjQB>l5Bk$zDU#CEDR~&tpQ&3<3*Nzmoj9NS^%;;xRg=`eLkQTAEB5_83-}$P~aqt z=L%q`i*Iy?JM+Z=^(9lU5wYqHcZ!eTqXpBzh;=J~(it0~fd+bvRo-GIQD4U0!^Dza zL%4gAvnQX*a3?w@Qt%9&O}K{>3b-NG0}OYmr=}e^i?xY%4b&js8cG7|K}~`9vmP*N zabf^d4{8cTVX?0VbVn*@^o%w2ot_MN2 zAGk8$nA~Rt(A`87(Ba>`G4-HD3Pe#KeCNj015zMN1DQD1dQj8{d|+EWC>n^ZToe{~ x!>9qk2I7k*z}W?2WZ7>lf@a-*|8f42`2~8t6r4%RuwDQF002ovPDHLkV1fgYWdZ;I literal 0 HcmV?d00001 diff --git a/graphics/pokemon/porygon/back_gba.png b/graphics/pokemon/porygon/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f102465a8f0b0487923abe9a6695fbfeb4b12dc1 GIT binary patch literal 537 zcmV+!0_OdRP)*`P-sb-R|Nj90{{a900RJf|DgXcf{gg3<00001 zbW%=J06^y0W&i*Imq|oHR7i>KlfO&DKorL_6zmj8{R7mCvxAqploD{OQ_``ZD0C4zYBu4Qw6bt)A`0z^32(o#wdgq+(YohQZu`0CN`aC7(;aHfH9S+|Z$#)Z)*;{J bPJdosSt`z=kMo!300000NkvXXu0mjfn`-b! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/porygon/icon_gba.png b/graphics/pokemon/porygon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..306ea8d3184cd3ae0b821f5c3afbd45ae30f0058 GIT binary patch literal 386 zcmV-|0e$|7P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I07*naR5*?0l09z2Fbqa{0`m?Xvu5k!>opm=D<~SE-54Mmx>q?-2&R*QyComeh(7~n=_$h{n769@PfmNri2Hw(O&Y(zl zz74d zeBt+()g(y|7}<~<+N1}d*$YuKEWl-v9sr07*qoM6N<$g2KorM4zD_fk5x$ckkVM z@O_4{xBt{i;JqpGLldD_UkaXYHjWW$XJ5<<6==OU5CBd?nD56b(3Ai`3e0U4DAgJb zge{O~n7!vy1t`}LLXLGPfw@IlrJoZNfGb05!S*05f9X9Fib*6L(0woUUQ~S zgJ_0m_nmkFi1&QJ4`R-Fu$%}W=LqADFO4J&!|#MKb);p8NIaG#$=ae!+bx;w(9Rp_ zzW_!UFZhWY=7jO06J)aIMFDoxxwpOT?WycZr900u=>~lWDcu$=hsG)WQ7pQ_!R28DoiQd0sw6a%P5NCdnmXDXu#&O6L%eOnTfj=SPV``E6qXEQ7Xj! zELH#f05f|;GWFN42U7igaZy{{df-d-=g`)#2iNif!yo$f;6|!{T(lkt_1_k+2Zr%% ezaH%EU$@_#`Z-f{$Zb6U0000KlreAAFcil<+%4P?xgY^T43~U@#$jSWD6W9EQW4ji zI`A28a$rYsVd#p}fo=ug&_?ah_J)d`vEPHDX5p6do}EZ_;$uNW}4E6#a_oC39;Dny%$snk$vhK zpdK+wxe!vy-8L|ajn3#f2YI__chO@EWdO?R<+dtjZG%3G;~0VOW%Www>&_kej77%b z`Oj+Aqa$Ez{qe=BqigK|3ID-2Zt8cW)GomJr3>WQ9)4_EfOi3L|08}>X=C6dpaV4) z0k6-y1_pRwGAeG%HNYk(HY2dahHF5`SD8<2n}Jscpt%Rx>@66gceEfaewffCU08I1CR!PQl_m z>5XI9Id7L}k)My?S>ZSrSiCFY;etcrxA>-1Ny9KU3*)nxEA=Zx0|efBfZ(^kz5A_EQ!Rbpd^tK}a0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H(@8`@R5*?0lCcWIAP|Oqg7`3j4rw3{Q*g-QLj^LpxF=)RBfdhQ z&`E+IIJAMQM3S73(DsHq{q*;Q`x*O*;O7$2#q8a2RE|34`T*~-(=G!;Q)K{Eb8*a@ z;|ai9Pr(WhWGsim*9L=2t&;>D7h37;lR>H85%3gkFXnS!JcSSo0S_DZFrC0!nC>+J z#R3+9NEllzRisNZ`|}`!!L2kq@Yi88%syN`4i)C0^O=MAtMihA)r3k?1%MHb_=A^# nC|PQ~MO=m!bAO=tK7V`w18JHXDO+Bh00000NkvXXu0mjfau1Ui literal 0 HcmV?d00001 diff --git a/graphics/pokemon/porygon2/normal_gba.pal b/graphics/pokemon/porygon2/normal_gba.pal new file mode 100644 index 0000000000..a9de005496 --- /dev/null +++ b/graphics/pokemon/porygon2/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 213 172 +255 148 139 +222 98 82 +180 32 16 +255 0 255 +148 238 255 +106 205 255 +65 164 222 +32 123 197 +0 49 156 +213 213 213 +180 180 189 +106 106 123 +16 16 16 diff --git a/graphics/pokemon/porygon2/shiny_gba.pal b/graphics/pokemon/porygon2/shiny_gba.pal new file mode 100644 index 0000000000..4c0d2054c5 --- /dev/null +++ b/graphics/pokemon/porygon2/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +123 180 255 +65 123 246 +24 82 205 +0 49 156 +255 0 255 +255 238 238 +238 205 238 +197 164 197 +139 106 148 +98 65 115 +213 213 213 +180 180 189 +106 106 123 +16 16 16 diff --git a/graphics/pokemon/primeape/anim_front_gba.png b/graphics/pokemon/primeape/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..babecf3704f7fb3137cd6a7fa2f6c96589ea3f23 GIT binary patch literal 1309 zcmV+&1>*XNP)TYNJ;76tqO5+L61 z?s>U~cYg`OlWh%*Zt3_=lPFdhaNHoWS_b@r0Hl`yBjI)DWfOr^6g!P3d42z@LI?ti z5K#VW$-i2S1|e1w00cgc@R4-EA89WUcy$MecfhZKC9KALN(&!teTXe0D;UFC4lbmT zFIfo4tt0?AUonL>>0GQ_KeVI;=o%s0%xwVOqzJ4oMxG!1wfdkNkSvWzsc}lBb#&>u z9-B=@&QQTslZlJ9DgtX4jj^}mcHclCSvv9CeM|CY90-D$-9FjZAzge*yYYP2o!^Ae zKB@OJ8>~Yo{K&^=9%IlpDa~xJ7DZk-idVP}SzA}BkO9`N_na|zvYt#BV;W@pqe5qs zT_N+{}0p z5%}R2U{Q#PW@^QE;_T>X1MoyaP473a^7!n?*^JXZ0X^^QUnOnSPJcdZ{gc3 zXkZoqmSBR4!CSmXi%&Hj@C_;)xizs`r={nexL3DJ0gckq6Vt$>D_5X|Rhmk(bb$&v zZsy;)Bmn279&pd?q6#NXe4v0&_GJHsJzMgAlpb!%XO~yHjW{wVSA3Riffef}v@+8Ui@JOl*Z=m;eautGogz z9vtfUnRcK!U#%X5+@0b0KmCbV6Fc8PNdj>yDZheHl5Zrr+;0fa9(j#@IQ(qh5 z_yH=FYYSfKo`7JcJp~)OD}PDGOzxfjff*0`^M60Ah0*B0dJ2L!fFeyA^a>ywph$+| zp~$oPa=RKLLMfMrutHaQ02m8hd@m37D&Gv2P=ZJ)QV2N+xY`#?h+P0s;aaoQ{-I;`(*C!bnidugy>lj*!aC+nc`g$9gG*sQS_S97Wybh(aU9Wyp%Q3I5l ztSdq9e@0&(7VLI9i$2yskaY&id}UF5g8-XF_iY#5qtK_tES}#`2~h`>+8Wpr*6e|O zc!wDrAlxkN{dNkkbH;wZ$0iYIiVTvB?zdCW&ojpUAi!8#BWfx0dW!n>t_GYMaZ>h> zS*Zn!j*r-cQzK2P)8{BU@&#saQf%>iTp3k8rf<_ZT*SJBRC!oKnx6^T(Ju z8OjaEWut{7fHwGr^O$!Bh9?1TE3Pz!?TQo8od(p2wi-VO>`X29%m$p3!A`YN)PCeC wCBV4i{`RKIi<+0G-j5LYag)6D=kbr}FYpTf)aCyupa1{>07*qoM6N<$g879*`2YX_ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/primeape/icon_gba.png b/graphics/pokemon/primeape/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d2d42f7dc9bbd51335727fbeee58b8baca66d172 GIT binary patch literal 370 zcmV-&0ge8NP)DV$3 zZu^6ExCnp$Js{E|dM$#~6|lnd+WWKd1zfhLw0b-#@%b&|<*a=5HS>=jx$@DE(mqUn z{Al~?$K1a9F|{x1hiLoi$JBmj)DKgS_jc+>tsbf$CG9Ie_VLM&V|cG0e~wJmB03*B Q1poj507*qoM6N<$g1`o>V*mgE literal 0 HcmV?d00001 diff --git a/graphics/pokemon/primeape/normal_gba.pal b/graphics/pokemon/primeape/normal_gba.pal new file mode 100644 index 0000000000..bebbba4067 --- /dev/null +++ b/graphics/pokemon/primeape/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +222 222 222 +123 123 123 +65 65 65 +255 148 90 +189 74 49 +230 205 115 +205 164 65 +156 123 32 +90 49 0 +0 0 0 +255 255 213 +255 230 180 +222 189 139 +123 90 41 diff --git a/graphics/pokemon/primeape/shiny_gba.pal b/graphics/pokemon/primeape/shiny_gba.pal new file mode 100644 index 0000000000..02b4f4e168 --- /dev/null +++ b/graphics/pokemon/primeape/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +222 222 222 +123 123 123 +65 65 65 +255 148 90 +189 74 49 +205 197 106 +164 156 65 +123 115 24 +82 74 8 +0 0 0 +255 222 156 +238 180 115 +197 139 74 +115 49 0 diff --git a/graphics/pokemon/psyduck/anim_front_gba.png b/graphics/pokemon/psyduck/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..51d323716c44a146d9a54d83ef774d719d0ee25b GIT binary patch literal 962 zcmV;z13mnSP)IHKrW0R8H6aqtxe&uj;(%*FjH-YM_Up(KQK-FW}{|=k-T(I>{KLV~Qs($Q;u9p2h--eBwUUNVJxb{WgR) zhuj|$z+^g{*-kqVV#@uXoa2BGKF#b~#^L~ha+Pym-oHO`T$ag*3j&z%YumOD-Hwdb zf&kzL_fr5enEe-D7ePNhsl5S22RVg!C0OF)|vz)Y8LqW$Fzh7mu2-(j5s zAil+V>NpN7GDONSOED~|7;7t0lwii?uaQMc!2~oB#l*R@QlU+U$U>sbtN;QHP-TV# zeWnYbJShP1P$Mvv)2uuxn8Y*C%^psP67+vl0Lne1POVwgAb-HTdL05V;-U!z7ztQK z4_y}k`tMumAt68pFd98|ia=F>2E2NrlDR}LyC$G;|Y`?J!~g3 ztN=hwW+;rY-cfFL(!etScgOaztAYIbYP*B0E4XNf_R$;HZNsD#=i6(_obwa`l*W!2 zfq!R1Fkyu0`c?xhRs)#$wkRRMryD?p@X2=6ISIvp2L<3}Azu31t(plgFLw^Ki2(R_ z&#sl=cEcRh=Y*7hO9n!upag7Dq3(GEG17%n^!~6(QV25{0HitmE#6UiI{;I1iYHP7 zYwBF0;POotVtp_^_ue@fe-`(05e?R3t>!b3mjg6#1n{&DyKV k`gykZLaq0|+COT)08&<%H13&ZDgXcg07*qoM6N<$f+>c;oB#j- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/psyduck/back_gba.png b/graphics/pokemon/psyduck/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..65f8032a755b71fcfd85fd79108b450dfd1c9e5f GIT binary patch literal 534 zcmV+x0_pvUP)CluLGmAP_}efi9xw$so&bPd4BKH$Z8ho(8oSfK3W) z74XyZZXM;^IG%?Qx!5u5v(mV3BvwRkb?c zmH-{3;uK|x{Tw+UQL*MYWNHBZ%GDq#B3HnONFpkNGsJ+FV|xb3+O!eSIY0#fP)7jo z4?0=_o*}WRq^<0P0LaT3kUJQ4+$g0XXwe2J z{MZtA8BpIMz>SH}0L^Dqgd5}JUcF!I{UZdPet%d*b35*rTME3IpwtTpJ7F+e2)AM` zSlqw1z+~c4YAzvAAQ3P1YsiiPu62lBiDDC{_+Ds89VMXT)EoSKo6sP=-bPlXGyyPV zDd2WzK9s8I)4MxL!mC5@{Z0YhOeba1wnpCWaXD^cyT}=!dHx}=YV!h(Z4}>o!~V8@ Y0occih&D%1!2kdN07*qoM6N<$g7Ss)K>z>% literal 0 HcmV?d00001 diff --git a/graphics/pokemon/psyduck/icon_gba.png b/graphics/pokemon/psyduck/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ebc9f96c0a6aa95bb34d5c2cbc6f28984bc8c0 GIT binary patch literal 329 zcmV-P0k-~$P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H$4Nv%R5*?0l1&Q2Fc5`vf)wdW5IlsZoo=Pf3C60`Qp8Cn5mW%|ry3x3XMJ0beaZ0)WUwEmTB^MAUnw^Fe`S zWAn!o^8BqZHWwzog+V`F!YDuLOqjGT3}wP7KURdPlpiKCpIiLgmbq)7V!cq;fI&ur bVEl5P^Jtb6=rf!!00000NkvXXu0mjfp+t}x literal 0 HcmV?d00001 diff --git a/graphics/pokemon/psyduck/normal_gba.pal b/graphics/pokemon/psyduck/normal_gba.pal new file mode 100644 index 0000000000..c69e486a91 --- /dev/null +++ b/graphics/pokemon/psyduck/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 238 238 +255 238 189 +246 222 139 +222 180 82 +131 90 0 +255 255 255 +222 222 222 +148 148 148 +255 0 255 +255 0 255 +255 0 255 +255 222 164 +255 213 74 +230 164 49 +148 90 16 +16 16 16 diff --git a/graphics/pokemon/psyduck/shiny_gba.pal b/graphics/pokemon/psyduck/shiny_gba.pal new file mode 100644 index 0000000000..889cfaedcf --- /dev/null +++ b/graphics/pokemon/psyduck/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 238 238 +238 255 255 +213 246 246 +172 205 205 +49 82 82 +255 255 255 +222 222 222 +148 148 148 +255 0 255 +255 0 255 +255 0 255 +189 255 255 +148 213 222 +106 172 180 +24 98 106 +16 16 16 diff --git a/graphics/pokemon/pupitar/anim_front_gba.png b/graphics/pokemon/pupitar/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..910afd6143d53ad71095018e176609b7eea13887 GIT binary patch literal 689 zcmV;i0#5yjP)&CS)UtgL%`gZ}{k{{a900RKTjVh|7zqTm^H00001 zbW%=J06^y0W&i*JFG)l}R9J=WmNAaoFc3vmP_^MINwolJ*9JnW-hdj`G9Vy3lHreWTJqtr{3*;snMEQ5UKz zB~SnafY%KSGM?aWAbn(fuSGBjKyGhc^igwB3p9{mj(M{VX6Nncqr3vdOtSO42N8hJ zr;#qQ`uZU8ArKgVI)m+BIteAT@4Y4az;@m$XTii?FN@F`$^s0&wFOTVp|uFp5bP^A z5@+b0khYXX0Bk!X0K5iTR8Vc~5^$vo09G-YHrp)jX|kq((1-!X<@R{d2vk56Fexu= zmfEF(9bq z0oOY38DKBc70%lD`|GP#{Z*|2V+|O;fPW`oc%KRwehL`gCj&+oYN-5kGGKi0Az)nY z1dQ%K2^jJ>1BUJ22pG8ie!xh?0~YdwgcgQGJjjcfAAItk)6MxI84vO~KdkX!)t~Dp XoxO-NDO&CS)UtgL%`gZ}{k{{a900RKTjVh|7zqTm^H00001 zbW%=J06^y0W&i*J07*naR7i>4l(BB(Fbsw@$aCL8M&|;eG^dEE*+C`EdH8#Q;Nr|K zN!f==a+~3n!+Ee1==0B?KP4;me_q4o384Mo0s}m$@f1)~_~~_eJN^XdR|4>ozpXOZ zn~E-**Y6FyDeZzeFp5}!@iw?{?g4E~ey3-&m%-uhu}e#j06x(Z-UwKFfV@uti2%4e zOk-bTKp_SIKn(W4WfCIOGU9BZuQ3SWod5u*J_0I&69FM#*9b==BMHnd(;_SYw?m1L zvVj6LCN$=p6DGs!nSsiL4y;RWoh=7u@-o#X&Z0}#$UnS+G}R`~5)Yzf0R}wQ0B1l~ z0K))$083OGONbDyl|mmQ_y}{|;zAh|3sggNYCyd#EFddzIs(+o17K_BgnY*~>-yj(maio;$GA1&3pTIssv-hS z;|t)fYu#i{*^XuEa>KRVQkgx{2*3sDp#!2=Ai{+-(cWIWAWIXTW8m307WmASCL%S& zz_kH}eG;C|jqIKd7)y>o1$g_k9!cR(&|;zm^sd0m#I)N*P5Ueb2t5$DCLA|0r_>$I zeU^OqNud*i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hp-DtRR5*?0k}(RyFbqX?g7`4qdp;G4v)WK{o(>|uf}u+cLG74= zz|B_ut!vwl7eAgX8;j`c^T2Hg1)23i`+BDr>oR)7iV2jM$+bITWnNj_A)6>OJ0nQc z*!?~Depm{C+i~%2!Wgyt5_)cI@SHX+>+HdhqD%lXXE3Pcvs6%a0)Pfp`rrKWzzkU< p{(eiROGPCKPK@S+fK)4eloz5=knx(kTxmlwy?sbF}{e{}2!m)tj4)00001 zbW%=J06^y0W&i*LG)Y83R9J=Wmc5SKMi7805$aDC?$X|oAg}Zt7bF8DfS*AUhBROS zhPc?J0bdp2cCK?}Sg*shs^Zpsm^6XQ%j}XzQT$PWl!>Pip!qO6yE`O5%lf~C?KpSm z^6MCpyW@Fy+9RS0#`3eL{r(FP@_GbF_Z6VBkpf5nYG9>U$J%DN- zDJns0bO1Y&!T8xNy)!1iF4Zs_#1DHf`s|>M#H=P33RR7QDB=xn5MK5nn6YBdBZzZgxT;5-F z^OoglKxIBnhL{iJbqP)lWK?24kfv}FI%j=Qa6Oo};rXwvnOrdp#2nr~KWl;y15qp( zz{-()q=h-|6am)j=i$6H$zv4Dq5ZwYRjkhDt;v-*nS83C@lvXHWZgW zCUI>boAQSB0G}OS<)jZ`ugz)3n0{At1C;$Xr_zNrtDsF;{?YHk&qDgVd*&rsJ509( zXAZq-bwF9(^j}3s|7bkvG$t)TYzFpW&D(_5pmT)KmeY%w{|^8}vbH_(K!VW+(x^J^ zT*+TaFnW1=msdcF1RNIEy%r3h46q&ov>McaT5G}RwNL{>dy*E6ZVSlknbn%}%b{SM zHDXK~07Y~t+zyZ$z_dVs|FLjaofR-{1F{IhlM;5Ws;Ly8Q6Wv<_MWZUgq>uSV7&c+ zk4T^Y?RpWe+7F?(ss!Wbw_j34z$I*1n6TqmOudx>!ac1)@^}gI6%qVM*nycymsTJH zSORI1a?Ps{jB1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/quagsire/back_gba.png b/graphics/pokemon/quagsire/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9233569b88d12dd35843dacba71a8d1cabc1010e GIT binary patch literal 602 zcmV-g0;Tmlwy?sbF}{e{}2!m)tj4)00001 zbW%=J06^y0W&i*I*hxe|R7i>Kls#^PKoEuPAm;{73Q{0jP8*Yzu{&QOGFrK`u*Fa! zCDLwgU{2(Q^e)0-tfWkl>@V!HkP9T!!TXqbJ2T5*@E?5v7~@~$YfM?Z%zO3iYf%)G zl0HJ{#gS6zCPqRRDfZn73Jp*Qx)M+WIP^LY9y)7`Xl;Q39X2&^l)#f)fzn!MfNO#Q zROaUx2P8E5U&S)wxd40fcW=r4ZNyT$~DFC4yHV z2S{DOm%y238Ng)L0&au_5rlA$dFv2kWudCxGj0)fEntYkQs`wV^tOe;F!sxm%L*_P zAS6usrHm8TH%0=4W5nB_fp!5eULDCiVip=5%uy~@Y{t(T5czEfF<&w=M(gH#tIeLg zOZ@=9ENsgX1*j4qlNwkmAYL1Xga~S4EB7#oL$eJS>vizd3MF+LN(sb|7C;j8RT?SS zUjzpVfQ)a@)CLw9VR;gdjh-zKaR5APfQ)UB0dNm9jMcbC{E?77vWL0*#=6`0>@kBJ zS*K*fdbk(>TR>#>$(&{+UuXav;7Y!kTBGOyK5ZZk8bX@bgjNZ2-rA*a5f`_HxwBnB ot~+^huFXvCsR5+zd-uoV2c;{;oqXH~%m4rY07*qoM6N<$g4DtOH~;_u literal 0 HcmV?d00001 diff --git a/graphics/pokemon/quagsire/icon_gba.png b/graphics/pokemon/quagsire/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..62c7f2e460f5f63614fc9c993f2b57551e27ac6c GIT binary patch literal 362 zcmV-w0hRuVP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H=t)FDR5*?0lFh2ZFc3!b1nDF6b-#cl+g=cTod|<{g)Xxib=QIr zM`P2e3K#C~;Eaj?(fT&zHgB^5PfCN*xBJVOT`q7YG&)!_ zsMuP23Ld$#f9;dW4IJ_3(w|>6X}f{PEi-Dl|TNA5*V8>hN!e<#BnAD@>_K>R?JdS>Yw*(L14h-EsGVi<=sjyM5Iu)LW9=7^1>|&QeY2z@K~0%_`?C zSFr48-*f)(DJEa;m2D1|eQH*hR2vgjIZu_D7$%6ZU%Kp^w$|pHb>fH z>%Y#UKaV3$t)=sFyl~R057LddHHD5jbp#sCJk6rNcePRRVy;(iPs5g9of0)yocrX? zTU8rR6{$CExbv$maQmEHnOAey%gcOy@v=SK_TMkoMRAV5RF}m!vo#+~Fp%JB+kZ$} Xr`&(-rW2mt|oEJ={|6P7}nZ)+$yZ7C;wLe_1WcN>s>Eq*PGXAsnHz&s= z7>nt%PWamtz-;#UYEdR!~X{G;Kp7JM4 PKq2bs>gTe~DWM4fhQyg8 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/question_mark/circled/normal_gba.pal b/graphics/pokemon/question_mark/circled/normal_gba.pal new file mode 100644 index 0000000000..681f1cefe9 --- /dev/null +++ b/graphics/pokemon/question_mark/circled/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 205 205 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +205 205 205 +172 172 172 +255 255 255 +0 0 0 diff --git a/graphics/pokemon/question_mark/circled/shiny_gba.pal b/graphics/pokemon/question_mark/circled/shiny_gba.pal new file mode 100644 index 0000000000..aa8d08dc30 --- /dev/null +++ b/graphics/pokemon/question_mark/circled/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +123 172 172 +32 32 32 +32 32 32 +32 32 32 +32 32 32 +32 32 32 +32 32 32 +32 32 32 +32 32 32 +32 32 32 +32 32 32 +32 32 32 +172 172 172 +139 139 139 +222 222 222 +32 32 32 diff --git a/graphics/pokemon/question_mark/double/anim_front_gba.png b/graphics/pokemon/question_mark/double/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6afe02dee07bf343d0b0351e666cced7d475cc77 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!VDxm*B3)XkRe1{b{T6@hi{15E;uPE*)xZ;f3X`$(# z{%w)3UFtPo^Xr6e2!{y{213}$bPi*zm0#;=Z>>4Y@gqkF1pBiI`^{jiD|z>V)ms^ z2;O)m@av4luQqVpo8wyY{EvvU?<@6tPN!Y#tl4c?j6Sz%9{O}e;-B#0tl9mZAsQlF etxgLss_ChSES!o z-n^h(o9T4aK@J^neYXcc;+W<(Cr_}~pZsObwu`rl|Lt8c!QbUwdziAjT(IX)qbh`im literal 0 HcmV?d00001 diff --git a/graphics/pokemon/question_mark/double/normal_gba.pal b/graphics/pokemon/question_mark/double/normal_gba.pal new file mode 100644 index 0000000000..67be6bbf42 --- /dev/null +++ b/graphics/pokemon/question_mark/double/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +255 255 255 +0 0 0 +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 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/question_mark/double/shiny_gba.pal b/graphics/pokemon/question_mark/double/shiny_gba.pal new file mode 100644 index 0000000000..67be6bbf42 --- /dev/null +++ b/graphics/pokemon/question_mark/double/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +255 255 255 +0 0 0 +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 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/question_mark/footprint_gba.png b/graphics/pokemon/question_mark/footprint_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8da752a46b30d4f1163cdadd9b84f2d418bd9e75 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%lai8NJv*8R6fyC1 zaSY*@nVbLwISB@KhXZQ+7Z%AiGx9V4W@h^-&toLUGp$(SO|Hb7EQgq#ToWvqnHhM` Wa?1+tpCtp-&*16m=d#Wzp$P!*rz1=N literal 0 HcmV?d00001 diff --git a/graphics/pokemon/question_mark/icon_gba.png b/graphics/pokemon/question_mark/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b31ebacf7191806b4ed1c3555919d9f26802e42f GIT binary patch literal 271 zcmV+q0r38bP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HjY&j7R5*?8lF<#tAP7ZmCwSljf*X|mcPm``jJiPEq{JUij)26J z9v$0n0Yo$l4rr8^5Ix_s2?$@gX0ro80W^Sx#9AOYU<-*=AvhqaW&sL-R4+?002ovPDHLkV1j&+ZT=R2>k#n)X#G0ChgrSOwtnahp9T1*pfzj4@vU z=qe+fG`ntRaFHQ0Ff- zjnp36<|+`!FoAIJm|JX5+i!Go0Fi*_@K-;wz1>!$d0&}A5}eyjCWi_j;qq5clRDG$ zyGVOnvTTDDAX#Qw?iRQ#KHDC`24?jSmUX7C z(ZrkH>*mdjY^yB>gVTP}s5ghJ+TwILoXJLpe1_ZBXtdg*ZsU!cPo9{`|393aDf>WR z_;-2;+w*xrosjvw=)Sx0KOS@~uukw%B@nI$s2^4&02G5CkgL*#ZV3=qKz}U-A`wPz zuywIjM!+XsaQE$n7ncE!5AJn&nV+fexKPy&%LGk*{Ag?Jke5tBeV4Nx_TVro-Njg% z^-)=U<4eZ0A~!F_=TLw5C(G-9`A{~%dXGK^U?&GGw$y5}_SbLzQUN%j5ZkoC2H*Z+ z!ZJTofB@Tkk$mh;1rQ+-aR5O2IX}(-a()qje}5z4hG{3-WbGxe1?naO4q0473VdNr zm|AgAUEKq6^>e2XTI1co^P5^4+$cw&D-KI-5ijD>PQcd!E?-y_ZesO`&#Y5cIb zAHxNDm-7k618qN%yYZZ42`Ix7E+HPY8i_oOTs*)AuQ48|a;GR=Sc7|+#)Cxe=5h-8 z6d+(sUO&yseZ}2U{=(1Jb8@G!)z!KpcL)d=4?5}lQY80thzFh2{)KWs&)C0E?zi!v zi*hfG2h#p1_vZ?b!~?MZnO!fiKRHd}fwVsv6~u!RQ^tdVwEw6m9wb&D=-oNKmw5nU zfsw`oyr}tM^XN!wKLynMu-WVNvoopr!Tv=yxXTa!)%X`(htj5H^eO)U0000*!ptJ+r53mL3fM+sDNxHxR?g6|uKp;m3 z+B*tI17HDFV(0}301g1n*4L#4kkXIg#z8JVS)eC z<(UI&5U`sD;2!{gp55BCOozb(>QJfG>KItB*W2w-3+zQESF6=!_;|TI^W{gguirLd z7*3;L+yh;?#TbiA0$~t@J_do9p=GL^7r0)+#1gdSi9lxp_; c0QmRu8yZ*oa2P~Y-T(jq07*qoM6N<$f|E{GPyhe` literal 0 HcmV?d00001 diff --git a/graphics/pokemon/quilava/icon_gba.png b/graphics/pokemon/quilava/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..62d0608dd8d1648ae9500109179cec5780f84d4b GIT binary patch literal 402 zcmV;D0d4+?P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I5J^NqR5*>@lCf&TFc60G1Qxdz+&)CtzG+KKR)O#X$Yc+QEZG8w zoUx=F@>+6L&&f${Jr%m;1Ty-hA1vLsTHRKebopc%3ZkGabFAPqnaDB}a6AY=#(d2h zMgfS2h*!YutN`bnMg(*@gSAm3jCMVK!JTs&F=!uP1hA<8VQ>vom9=C59sy{3P8GEK z9fj~QC>Wvj-UkXZ@Zq_q71i7N4N+gVry?4f@Dp6%A0O`qD=pTlfk_L%3t+GSlVg(e z982ezV>byCYxkx7lOH?_BOr?~ybwla1uBe1JyC_}QUOJn*^fz>`}en@f_DEzr|r3b wqX-lH3)Oxf!SASlov+{c&CvW7X84yM-=y}*@scez*#H0l07*qoM6N<$f-=>wNB{r; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/quilava/normal_gba.pal b/graphics/pokemon/quilava/normal_gba.pal new file mode 100644 index 0000000000..0b37faf223 --- /dev/null +++ b/graphics/pokemon/quilava/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +98 131 189 +65 82 139 +41 65 98 +24 41 82 +255 238 164 +230 205 106 +180 156 82 +139 98 32 +255 222 0 +255 156 0 +255 98 0 +238 0 0 +180 180 180 +16 16 16 diff --git a/graphics/pokemon/quilava/shiny_gba.pal b/graphics/pokemon/quilava/shiny_gba.pal new file mode 100644 index 0000000000..e1baba127f --- /dev/null +++ b/graphics/pokemon/quilava/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +230 156 106 +189 98 65 +139 65 57 +98 57 41 +255 230 115 +222 197 82 +172 139 49 +139 82 24 +255 222 0 +255 156 0 +255 98 0 +238 0 0 +180 180 180 +16 16 16 diff --git a/graphics/pokemon/qwilfish/anim_front_gba.png b/graphics/pokemon/qwilfish/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4cfbe002e9f861c84c59c962d104a07aa086993f GIT binary patch literal 868 zcmV-q1DpJbP)h(#9+fnh00001 zbW%=J06^y0W&i*J;z>k7R9J=Wmc38gKor2e*b*BzBq;rR_yd~Z93Y}C!@Y|NO9uNa z5vgJzIaLg-WMfFAxO+chcBpb=8QHp0DNEIjzOykP?nA1os!QJbetz%WS@!z{!7Bb& z03-gql#+S!(Fg$Kx(7(r0^ryU^acuv#0~I)5{r-gr4xvi5{Gl{9s+^O%m+kDC@&Bm zi0sM-1fZ^pIruID21UN-&La^YPQ5@7zMZ%_MAiN5P$$sGAt@mZXYsT_g%D|bJ#5+HQzY#T!H5uXb_CnDL!`1VdZUfB$z@}9Y5@ec=>x~F zlQd>C6X2NDkPdd9n`1&!y{Q<1?m005cGnRp!0VqSU=A6u`GuuK2=sRIhEibNBG12=z}kd<-`tILeojcs(qlaN_5&+) zi^6sWT_WGTxh^nr+Zi-4p6JK(eCGIa)@CnqjPsUx&G*21a7GB;@!0eE*W@Zzv5Myr z0l4?O&Ue&e^u_~lrPQaP2ROJKsD;NeqJco5=bj=`Cnzc&4T-K!E)NS2z_q7L!94?4 zpWo*;6}n&U!G1BHg0OVZ%e@5VQ!c2bbeLAZp6)bhTMZyg_ewq3NgV&EFlG085KyZh zJn8|JRzG;u18MhzM?DzYJ?KFXGO!=QuLt1Q1GEFb9`xi>Jz&%T&<>vHK_+8!?-EET z-N3z$dcd=zZF4I%QaS4Pq(D6YE?cG_gn|I{o0T4rR&MwK>H$H2c+dl5aXr@q!w>#Y z56&#R74<-Ouk=7!`~dYp`$MG%A1r==dVu~=>w(1&P!G@_YCW*|!B}s9zaEs^-=_z8 uUi_UND#Y!;#Mf?Vk}@P)h(#9+fnh00001 zbW%=J06^y0W&i*Ix=BPqR7i>Cl(BDuKp4f30g`UAIP|Zo!vWUGfrEs}p&YSO7mmb5 z$98jQ6VJ&7mG7VH9a!ZK@6z3uU}E0S_rCi85qez37H=Xh@5Ai3o@)Wzh4@GpW}x*V z3lQRo@6(C7AtzGt$mEAqDkp7(i~AhLvY@D{mXHxR%KJc6VT^@eF-Z{drDAg>J!NmS zlIlv5f)RC+aYBn8KqyfH5OPQt&{j}+7VWT3a%<=S{j43pt^gha#nq?72ISG6^8WyH z8$j*=i58#(m-}=JAk($#2bxc2O`nKpp!sA5eZmH;LzW6K$6?9HK%h3jRs+yj4SgE0K}nq*PwpooHtFg9{?evBm=0Y z0^nPp@6W35Rk`#bMxSE15%Qn4MW;CdXn~8K)FXJT^TG5Fn&w&S*DoeO1RUQ1ehh$Y zIMS5`D6i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H&q+i0;|X%Dbl1%qqMGa;3}R*a793SxJcG; zAHGu6z1kPKheE`@; zpp{ai7uZF>)EX%S&J}Qy^4ix;DXl5DV4g-&vXpSn?@q_662^%YLvV`fCQw za6coqrW|4>#LKg~bK;!0HE3F6cnu&72DTOUV*}XQhE)ffY=}BAk!*-M1kfk&(IMNA jbm)=|Ne7wNZbyeV9&DkS5r;HeZD?mcp?J zM`D8QOoo7d4v?9@I52RR;;Gq-10-<)P;(-3&9uV6EedDPU=iR{{5#>mM_D+%U)Cdl zE_&nxAWQ2z(SylLByvcoPd|D_J<{rd5!0@)oafX^OUn=EktN_Z`)=~Y8=ehk#fV6f&-WY-VpX=(!K2Nl*N>icH1Nq|V&C9w9 zxEybKO_eK!x}EODB}m<_pMQ@>vV8*(_@Z)D@&335z>BnV@%kMn)(pad7HpvAu+3O4 z2nSotH`WewevEaP!yBp{%ok%Fz&Vo@aVd2wjZ)mZAslD|fUB_NU%U|s%OF7jY`+*U z0O0^6G#psoJ1C$4W~=1Dc?GsQ3C=Bd5aED0S+rf++b>$H(M5=GKy2Zv&b}pEy9ft~ zEShGQPW^2?cB9rV!odfB!q49x8RlW>nQZMm9L%8O{o}y}8+<$=0K>t|FaX0Ran}vP zLEfM_-&9pVHIaLbe#8O!dgI=opnshI>$~n1z~Fg4aNV{HKseBRz(BK^lmQF}Ha)j# zK)4cs;lKt@r2(M|2O15A?Ce1}umivtQ-_1g5@YIcfPl5gdrT|Cfo)SOHDC==Iu6$S zP552#aG+6ph?}bYMR^^7a1S01Y?|Z1K(5Rh;Ox8MWh`+8xdm={PZ@K}iB|ZUMDOo_ zM+soy3{pq7y84h&^D zIHsdPI51op;NgH8U;E)e0bn@5Bkg#e({IN#;ArjQCBoNdQxyP0x;~&O;{)-|azBgO zYCvaeu+MEDP(&2Hxm6bNf&50t73QutgZMxW%1oUfT>t5RmmmHE?VF20&u#h-00000 LNkvXXu0mjfaMF)% literal 0 HcmV?d00001 diff --git a/graphics/pokemon/raichu/back_gba.png b/graphics/pokemon/raichu/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6f8a0afcd33b30d0a1206af935ce69b82af31f0e GIT binary patch literal 625 zcmV-%0*?KOP)KlRa+RFcg5bcqky~5b_Q9+$9mbG(fhZNDk4hqv=8D z>>*P|ubo60Mu2Q)UQWQR-L*ZtwF#Zf#rzeNPw(E&X=X|0igz-5a9kA1mu!x@YD-X4^m2n z053;?Tq*?#0xz=gR(MhX8n~0gE>W;KKnJ8lK#8L`uy{HKsBIf=E2LEmFn53=xX}erkhTr}es+Lp!n6QVrH6%? z)n-&w6UG>Ap=xvXcR_+|sQ#(<~M7{m96fdTr! zVqq_HVgxWhB>xQ#U<3ed+cn7@0GzmXfLj-seGSe7SMLJ#dBClJpX9Hz70j*Kz2=kO zP6fK#JG?fs^RPq>fjlR|Sa7e(LL$a4w82Q|WG{C`e+Y9FuMT>W{R{e+b!TxQr4XhM z3uwB-q!8W2mtKR}($yCNdXq-*Ccq_OAkp@Rz}_C;-lwqg9})ZmrH@D?<_0c-00000 LNkvXXu0mjfXy6l- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/raichu/icon_gba.png b/graphics/pokemon/raichu/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a34997b47e71fdd01914ae08c93178cff9510e33 GIT binary patch literal 411 zcmV;M0c8G(P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I8A(JzR5*?0ld*2YAP|P{31CXcz61}@SLlMW*_+2MRl^p)DpBQ( z=aV9n&GgP3SjpU_Dii)dKgaPI;7<*kpTJ5232fbfJYQ$n0ngXNJHSE}F0&JJNx$%_dXdC!;Z}Sjms^8|-xirMK4hGQ;ACE1gxPN|ex%>@;|Ir4wV>SxQ@Q{E002ovPDHLk FV1nrmxGMkv literal 0 HcmV?d00001 diff --git a/graphics/pokemon/raichu/normal_gba.pal b/graphics/pokemon/raichu/normal_gba.pal new file mode 100644 index 0000000000..c04e9d81c8 --- /dev/null +++ b/graphics/pokemon/raichu/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +255 230 90 +255 197 0 +238 156 0 +172 90 32 +255 255 131 +255 238 0 +230 180 32 +189 131 65 +156 106 57 +139 82 49 +115 74 8 +106 106 106 +16 16 16 +230 0 0 diff --git a/graphics/pokemon/raichu/shiny_gba.pal b/graphics/pokemon/raichu/shiny_gba.pal new file mode 100644 index 0000000000..40e16fa6cc --- /dev/null +++ b/graphics/pokemon/raichu/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +255 164 82 +255 123 41 +238 82 0 +131 24 0 +222 222 156 +205 180 115 +164 139 74 +172 115 49 +131 82 49 +123 65 32 +115 74 8 +106 106 106 +16 16 16 +230 0 0 diff --git a/graphics/pokemon/raikou/anim_front_gba.png b/graphics/pokemon/raikou/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a0149846d1b2af3bc70a4a4b84c76a9cb084bfc5 GIT binary patch literal 2028 zcmV-P)f~^)to7dVi47||Fm=ednw*Q5R}CL0RI60)z#Icq@-$UY7h_*^b?1P00001 zbW%=J06^y0W&i*OYDq*vR9Ja=prnG%8q{*Qnbkwf_NWHkB@>sOk=zAkC(gu|pHoWQ4gr=NfF2 zkVv&64deUy+;h*p_ih+GM@q3r^lxTeI`Wb^yI{#*H4b` z8ZC^#tvz3IueM}hT4xyHj*ghm>@67>Ez2-k^v+b2nW8?L36@}-wGE2EaJIh%fDBt* zO3gdEn9S@xe@L_;!PXt6mw&T<+@JLMG6CEOIDsVYFZq2x;BYy90t~MrpbINFrzUe3 z!PN2n|$zTJZR_A*FK26{Jg)hH;`@v(ATs(!1g)~e^llJ$&a5tFw z9vjEy9@+z}(@Cpy);0H)Z;I}%&)9&)z@F`0y*LHnzby*;pg;*2>n{|ACBXHI)8AvE zO-tGDG5#yYmOVvTCz-J`_KVXqtYep6C=->z1Te0qfWfYDMokV$UIG9azy#`g1^^`Q zUxsnXsX;A$srW2_2r63#5WscEfQy>C{vkJ3avoc-!F3AA*a)=fN1aS21I5mH1Ad$A z_vi|ffYWB_gg}Kywz}kwo(3fE%8JGbc{lJ~#vK*|E@Xgz)@5E3fc*>K3r9?^#peY^ zGq&&iGf#+CBzeD}960QA4D97R*U$7F{-3;7)QSa&^K)e%fa)6P!Ols1Db@3&tW^+r z1N-nRYNWNU;B0L~ab9L>og z0IxC0G$47*=I~9Fd4p6*wQx&_f_te~*XKoDiWKBIA=P5_bwxvfC574>WDt<+P{)Q| z~j&)k~wg5cr=sRPElq;N>~}# zFj8x72lOU~R5V05Ath1|V5ReFf}b6;{AT5_K(F#Ua5(L~~TqA<8eC;yEnG9A3l% zNQWp-LnnkoRfe0jz!xv_2GNiBI>hhbwPBB;PVi7|>;!=TnxVs2KxQ&g5P10^;J0Bo z7C@=L=!fe$vY`Sm47nC42Lm3C#WH@YddwZK)68Ork!J^r>Ro4}zz`JY-MALH9su#Y zw$kUDKz1}ygXDia+<(})_+q2oWgi6Ce(V3ZpgBK3j?MWw0QBKmdqDqqRzP+QY|iIT z10CZJ5aDTnnw>vlg!?D5z^(^xeC*EKf%fT%(G>vw!M)n^9|Mq~iLIH^ADQhXoqat6 z8WKEx4vKN193&kt0a}J}Zt?prH81uLl;LCGtlc`N_q5BqrhTA#;|IHnZ4nIWj#>-L z9J=b5C+EhEfEKhxNYPxls4$_M0K!n9r$O5lKtHgTj_U_k8vqpgdz2_j|HQ_8>iYg7 zmbJCQpn#y`cn&_#N4={w0Efvy0qL4OSb!hg>fiNZ0l})lVd}J?b($C79E<{gcBn7? zSU>;(zW_s_7VX;q_!%tm&xat4YYRe!X&)aO=LSwObZeo{b3W_O*5yWpX&<+7Ct!x5 zQu%cN3d9z@HGm4!KIuTA&#msozLN6;7$5gy13`sBk-J0zxll&x;1(3cQ(_51h3Ob) zAad;%h*%EVkx-Oaf+B@6gkYHZET_P6LC0Z<;|PTj;~(|fB=_&XE+7Kia2!+^Si{E( zA(QFXpM3Bz##2DX-i3X%aQt0P{rc0yXPhUmSyUKl*Sf@RL*Du7Oq~pZ@bAfMRw#^= zaqGfR^4_BF4N{7-Qkcv%$YX>;-t(vKV3ZihN@1qX91R74S6@DO3zis&P#9_91aiJq z(kgin3>{Q51qg-7g2HILlox&>x_{yiYlUgNzd_)YrfmYT!W{8Nsaz_2DWD#pKdb~} ztuQj5lVYRv8jAI1Lon6~g91`)pkD~bNf}6_FhW2|Mf3}B92E^@Rfmd literal 0 HcmV?d00001 diff --git a/graphics/pokemon/raikou/back_gba.png b/graphics/pokemon/raikou/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e187eda52ec267c3bfe31033f3b312d28ef2a4df GIT binary patch literal 745 zcmVf~^)to7dVi47||Fm=ednw*Q5R}CL0RI60)z#Icq@-$UY7h_*^b?1P00001 zbW%=J06^y0W&i*JXGugsR7i>Kld*2wFc5}4DuWepca(>4G8aYY+3gc#BhwcUsVSXA zYN?h$vZg*lpCMxbCPDWaiP6=SJP5D{SLz)l*Rc#|C<=7RL9&Pc(|@9TB9gA@8bml4-ED{uD2JamANUkMo{2!MrG zbR#%SC>|wD=-A-6z4@YRAel%Q4|HVEf_NQ3$&dxi7lFQ6TZ_Ri;K-2kgmXU8H)8`u zOw~$S>yI#l1fEWOUrZuOe<5+#0-7=QA=A)Z1YjU1F{SWU81uM(+UQW3fC|7sPfGfh z+~q%~xdj|63&B$W;Fh|k0GPYFx-5PMT=Svl%0RSVL za9|UJ8(oN%jL`srYHl9gW(*YjUwz|lqx zvg~s#l+`J9VbQxlfJ;ijprjW=N-v?kYa^%@NEmJj77hCFjK14$ur;tpkrOZ&LebG5 zAZ-nrtdTA+EHLf@?OzmGgXh4q>Ch&T*+myvH50&}8phOgID77(ASUhrT&|_u0NYcn zBv!1H!WfOiIi=f|@dzXsA3%^sUfYa2z_GTKDzy|!#TFQq+c7{73#{;xvZna_s2ulR b>tEMzG&!XczCtt700000NkvXXu0mjfJ6=go literal 0 HcmV?d00001 diff --git a/graphics/pokemon/raikou/icon_gba.png b/graphics/pokemon/raikou/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7847a6f16e5eaecf176445ec1c4bf002c6c0972f GIT binary patch literal 486 zcmV@P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IWJyFpR5*>@lCf&TFc5|XSxbZio(1V1hiI>!!GqT5b&|<*C(||b zAp%)K5%?7nN>+#LjHUJcUKC%uda_2KGUlfjKV9o z3*=1(GJ@y?k5)9z+Gm9DF3r@nVXNmRpHtr{C}Rw0*3J{rDG*JZH4HJfMW|^KXGI#v z*mVM`Yp-`Am1*SzK%rq1sidNz4gdC9Ox*?ajeflVQdO=8#6(6eRdpV~7-cGtXZ|rv zcUq>h9P`-#N_kqg=V3_U0| c9)H&#-=Xi@)K8k19smFU07*qoM6N<$f{BUPy8r+H literal 0 HcmV?d00001 diff --git a/graphics/pokemon/raikou/normal_gba.pal b/graphics/pokemon/raikou/normal_gba.pal new file mode 100644 index 0000000000..975f92b23d --- /dev/null +++ b/graphics/pokemon/raikou/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 238 148 +255 205 65 +213 156 41 +139 98 16 +213 180 255 +180 115 255 +123 41 222 +65 16 148 +197 0 0 +255 0 255 +213 213 213 +164 164 164 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/raikou/shiny_gba.pal b/graphics/pokemon/raikou/shiny_gba.pal new file mode 100644 index 0000000000..73bbcb405b --- /dev/null +++ b/graphics/pokemon/raikou/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 213 82 +246 156 49 +197 106 8 +82 74 16 +255 255 148 +238 230 74 +189 180 41 +106 98 0 +197 0 0 +255 0 255 +222 222 197 +180 189 164 +123 131 106 +16 16 16 diff --git a/graphics/pokemon/ralts/anim_front_gba.png b/graphics/pokemon/ralts/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cb19276d82e96c75983b122fa660a4bf139f1b1c GIT binary patch literal 666 zcmV;L0%iS)P)&Hw-Z|IPobl;)Iky>l^pN)Qkb`XQs!00001 zbW%=J06^y0W&i*J7)eAyR9J=Wma%TzFc5}W)Ipb4!l}+Ih}JG7c>qU(=ej5m)IeS& zFCc(Gk;e&8fL8kerkXCDBq|-+NtPNXT4R>->^l$LQr&tV{-chD`7t)sGp&pFbpPlo zrHP{}k!t;&1jJ?W^&Te{LZng>#77~nr6o|{w-BE!P@xePD5T7m7~m9(9w?S~C~za} zggVE7*M(g46Lf_D>r!S?e#x~)4$$RU~A z{xa>ho#K}f1Lu4~T;~XmKkzx;XRP!1oCxTNknXctNcTqxrxSR>&&dEkm_!s1k6|2; zYuI=Y`vlif5feHBdh|zfhr{FVm*GU+_33vvuj8h&!3|`2i{ltiK=mC4<`*-1* z4q#({5yqhB?9Lv~<_7(Wp@tgj8P}@=24SD~^dA9h5cCXd5NUfLAzcxKbF*_0{Li@l zA%v0=eOR4LitCk>w-``na#32v$gmk@AwS!IWs3lBR4tb_piw`OBb2qQt%8)8#5he4 zsI}6l2CZ*PRVj@E?45b)B}Ai(h-X`Ev~F<#xY_C!`%K1O9NYJ%B>;DP!TEHH11$D= zc<?Xu;S-2LvNF2L!_!1SuGH1}zvnM&Hw-Z|IPobl;)Iky>l^pN)Qkb`XQs!00001 zbW%=J06^y0W&i*IK}keGR7i>K(Xmd$Fc1b{4`oavm+Yukc3y$x1z@S#h36nIfa;}> z!{jh_!e(QNkMIB_ASM?k+ZChx*@jwE89AUR|W~Mv@={=hlrR zLDne%CrJ=;rIeG`M1xM<`dqc|1jueycM zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hgh@m}R5*?0lCcheAPhwL0vz}RK7kz;nO*42PrDLK+|`6Q5@qB% zx*59lrM=uGC&bTZx)`XLk(%;@FDcCrf|Wx5byrUWAbOgY9s~*$dyPOIfo%Y+6nmU# zM4Ju0vI8+0$AQLpMJr6VD~GCbHwTJHwhuMq6$Zn!!W0mZ%6;$03%nLmTB9eK`~Uy| M07*qoM6N<$f;Bd29{>OV literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ralts/normal_gba.pal b/graphics/pokemon/ralts/normal_gba.pal new file mode 100644 index 0000000000..1e513ae876 --- /dev/null +++ b/graphics/pokemon/ralts/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 164 82 +238 238 255 +197 205 222 +164 180 205 +131 148 180 +123 82 82 +115 41 57 +255 156 131 +230 82 57 +131 205 255 +255 255 255 +205 255 172 +148 230 148 +115 189 115 +49 123 74 +16 16 16 diff --git a/graphics/pokemon/ralts/shiny_gba.pal b/graphics/pokemon/ralts/shiny_gba.pal new file mode 100644 index 0000000000..b588f6eea0 --- /dev/null +++ b/graphics/pokemon/ralts/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 164 82 +238 238 255 +213 189 222 +180 164 205 +156 131 180 +123 82 82 +115 41 57 +255 197 90 +230 131 32 +131 205 255 +197 238 246 +189 230 255 +123 197 238 +82 172 213 +32 115 123 +16 16 16 diff --git a/graphics/pokemon/rapidash/anim_front_gba.png b/graphics/pokemon/rapidash/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..69ba93ebebd395c00d2e5b662dc66ebe59bcf434 GIT binary patch literal 1871 zcmV-V2e9~wP)Qhn)00001 zbW%=J06^y0W&i*N%}GQ-R9J<@mrZNjMi|F+@}VoT>{4C%z;^ zm)z@S7hihFw<(O)u$K~$6o{e0AkB~!B?KG|*>6w^_1ST{s-dxK_5aLh-)#pV&=?;o4Ha;5ygoRA`$Z72O(k^?A4}# z$`uyrgMkepe!N-!706Iw(%pCDK6#Ki>EI&FjW8%h0l|4=y|No`I#w3ilipi3#mt^@IdFgWPtl;RO`1wSOR9` z=@TzcVC{pqRTi9|XB0d67od(&EDyeEH18r=!=|^XKL=0+jyM97Ro*#`aqSO`MsM2s1E zRqryafxjE`LAbgm<&bUCH!{x<%;r2`>UF?29OqD|*SyOL-svp@bT1Wr$CYV+kB>R3 zwU9^*6!errPZBxe+njGNR{{sOKzUr;KqKyRzqe8<$0=c!PWOnHWp8yi04R`t5CsRy zPga3?d4Z?8EVk=c0l(sD{TQxv+si@NHOdJvW|z1ywPS!wf|vnk*&9mxl|Y&74X**5 z@z7AUjY9FeCK8Wc_xQU?b?nVF=+#X(A96NFA}kH?6WD=Pq&Wf+kLlFxHR}n2@hr%km22fBjB6w~Dp)}P37GNb+zi9w$lZZ;BD>-9C5tT&! zVSpNZt`cO0M5U{Oboh-qpRSB^dKgGOQ+tEI0?{A0cC44kKG_Xqrjao+5x(&8Z|loR zAp(R28_$tqnZ|ttHF)?jD7J1+fKV9cuxqptoN@T#!RV)6YiyUmBoS$(M&)@a`d5xKgI<(7Ik{0*{o}zd14m4BCm@pe-jd{1$zsB1ng1*&l3WG6k!%DzzfZVFyZ$l;R z;5I!qyB<|svkI~^6;ZR+tX=mIQqveE&ke*oGj)*X`-lCkXBGv(Nk$d(%|AKJ5BqO8 z4d2I1!FKruzVA*g2oZ_{GhdKW>vh^4XtIJoogQ55*H?C)YdtzcdfLU)*&;QP-3Yk+ z*n4R9itI3cdU`qq%x@%J?x(WHA7X1u^|Hs$gnl`7lkV}~+h_4J{!r77mT&m>p~`2S z71#Jdr+pSZd!S`bx5GPVdfl4`^gHI)(jHwfw4IJ%{J5BFtgikYibWnh!U@3b^a}6R z-!Js;8?1fe+~AK);>#lf%6X+$9|KrB;=h?6jw!x+xjWaHFOIOnjU`~dYhDQhn)00001 zbW%=J06^y0W&i*J#z{m$R7i={l)rAkBZ!)Fo+7U>F zu;kbBwALD1Th;AC^c~f8P2@n79-juk+N7Nj))EL;5mlDpf|@P@6o=-;fM*r>o&eC{ zS*WjQTtBIafsRZ_g#~joy1d!~&fSDWATbc^AiJU=2Du&)kbr?k@3>GPE>B)ZKsBhJ zH>Goqz?Do``ZeDHN*%9Bolz|(Cuc*ss)0%6(MwF$m?;NO_K?_Wer#^Xm^baX6pF SAgas&0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*ITuDShR5*>*lD$sDFc5&fvBm16Ah*0gmAON6>ejIIyx}h7w)Rzx zAg~!rRhn2jSa$_7 zWZ^6rK0-O{7C}{M4*Is*m@GV8>O1#dJ zF=!G})8#N5L|u7?X@U=Qd}lLS@YsGYk^`))z#Isw6t?`a}W>^ti^LI00001 zbW%=J06^y0W&i*L9Z5t%R9J=Wm%ne@Mij@n70?ZY=E5H0F#`c<)S%^**wvuL6pVUE z27?_m#6w$;U1ET)2e*I&_{2dOgaAAaRwdPybOZke{{t-oXe(MU5|BtDgxBLyKgcu5 zi~$P2K_c`%_uf0|sP9*b@)%zva+K1nJZi>OToJqn!2SC%#HSol+u?%} zt6#mV0W3da?=A`~D0P??8+AVhHd_C_F0@ATs*zUB*g7rM$erLB9 z&m)Uig<{znUWY(_T#W;&Pr4J04?zN;#_!W<98j3uasfCHmH>GKwBQG&N$CpUUzb#% zw;+_v7aY(-K&pU>3u-qVu*sXlFdEW~90F1qjj~jtP;}vwvCiv8uP8mAlb%*aY)#aS?$fds-=|iXcnT9)-EbS)UN`>yA^_Dx zy8eS+|E_-50j~>5zbCG581Vb6;3OpGdHe*5oBdPt82_6|C}Wz)`2R=nR(tJx$-6k=h??ShdeSqfHKS&OR8w^5QBbw?Tlpa@qLRqSRP^RT< z|Da4mhq3h!as{K{t3RN`r2>TUf)<4JE4uYn3vP22bfV=^ge xQWF^`))z#Isw6t?`a}W>^ti^LI00001 zbW%=J06^y0W&i*JB1uF+R7i>Kl)GvhK@>o@4O1+FxCkx`>kmkw4-kUc!njbAF^Cju zf*KY1jh&&Rbcnsz>ffQX8!I{*r&DNn>hHu`obAtd9VhSW<|B~1igs`v^q(hL5%X!uV85j z%*_-jT-lsbcCJ(bT}0O9L;*fe!50Bo@wvKDyn$|0x) z8erS&;l;Bdg0OO1fXo#6(gB;RNp0|gO>qmXKe(MpFR!*3k6Pf&4Uu@~d-x@=qrO4m zX13s6uLe>NklN6Ui5!3^m0o@}$7Kt|rMp#-HwEx)gYl1JppuN$0K+qR*Y${o76^eA zwO~Dy5Pxc)2ZZC51=<xUEg@fnFz9wk#ztYwTMaRQ7YG()QXe*p(t?{)U!b@6$Kx-(M5_0)4scok0000< KMNUMnLSTXo4>Mf= literal 0 HcmV?d00001 diff --git a/graphics/pokemon/raticate/icon_gba.png b/graphics/pokemon/raticate/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..40fbd79c54cc8c9b34ee9228d627d0e01f374452 GIT binary patch literal 374 zcmV-+0g3*JP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H^hrcPR5*>@l1pmCFc6041oB~WfSz+`h|f`Es`;Fh#Dcy_py*S>4MBc{24b=4Cgj<$YS(q;pt zAVjYph?kl{k&|b%0{APq@-G6Vh|7zik9q500001 zbW%=J06^y0W&i*JTuDShR9J=WmOpRPKp4i4(Hn1CH0tccRmP@KDh39Gl;AC`9mivB3Cty8yq63NUHlAQo}cc0@AWI) zgHWYP|0#I@TGG~HM;QbdH1qwM;XBX)9p5HoU>`s=r0xMzJEVXCZLhDYL~lVo$aMdh z16lz#$)2bjAn-M1X7L`hE6B%)eKZN_UHuBhzzTmqY@76O5&RV1!QzDV+@vo~gg!D< zcSA7y1SnvrI!ea)!Ml<807>oZNJ%d7Xf8fL>Y6%|PFM317=zR$8CoW@_}mu{Qhw=V z3XX@-V+)ux%TP2M*TW?R)`7W5NihzR3!n*EM@Ydq#M1%*vyZ1IdLK2O^ZL=y6r)grN5HnXhM`B>Yd!S|^sTvj7%BUD`;sF`xv#>Ghg7$g^+7vxox|OV07*qoM6N<$g83v!7XSbN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/rattata/back_gba.png b/graphics/pokemon/rattata/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..72bb56766f42b12d4c92b2522f8e66c1b4259fb1 GIT binary patch literal 577 zcmV-H0>1r;P)q@-G6Vh|7zik9q500001 zbW%=J06^y0W&i*Izez+vR7i>Kls#_aFc5{=iVg3eZh;`zBajRDT*H^Zlq7`y5JQ&MDC>wGI$SAm^Ws=Q{P zrG^;b7Y%c@0`M$x{W;$~PW`rkIRQIqO6H0~=;$XM)Pu{7=QPMuMcryC!NowLO#`M( zq}C>vQk^6K##4|z0+u_al+%*tC7JR9K+m>XLoiS+;HE%@WkLqjLAM5A;wi1EMZ-89 z(``G036OLR1syx+4FDs6gULF;SmTZ{fvQR z0K$b^y?!3gUmwvmM}R}IC*Uo;dr9x3phiFx02bD1`s3I{4mo5)x8EU#^;_!C(F|lf zj8v;O$m4qx*D0cYV{09PT;=O&eHcRY|A)P)DV$@k}(RyFbqX?0{IX;Bk!!z0QLd^GwO@N>^oke)I02mk;wBjQ400001 zbW%=J06^y0W&i*NzDYzuR9J7dgS+3|IFF%oN+wC<1^`9Aucb3n2e-0*W2n;Q{kc zm&-S@-)^9j%bHBF-9QJ4WSpKND?S#aff~y7(0n3Oif#yg^@qRm zNpGaMmFqo^Sde86f%@!Ee=hi)#Y8X9k2hp7NgCz%i_iKeD+O#K4Bq9OkjNrtpel& z_40@A;*?)MvY>AZfOGWxVZ0$QbnvxBO&i-37%T=8czv2=7}>8bykOiAm|>nq{nQLSsP90BtA4VEXcM~>&4q)=7>dT|Y6HnIpHflQ+}fPKI`}6GEX6^?0A+GUT%01%m{xlR*gFU1@VDVAKI23l?hDwu=6koszw?O&D~Aa^HsQ|0l=$YzwkyBX z4#~#0DX?k=&ehLoTqonSu9t+^gVp#O*fm?7;yO*LzatvTC1AI+`ethbj*Zw_!281? z@UNpXa4u}R#GkS9!PnZ-bb1U?Ezp>JcWLxxnq!Sh z69wODF%k{=KG4TY-cNltYJuEnF>*wcjdZCWFqLSPL1XKRl-4kxX%>uVS?+tmQEB3V zmA=8Uiia=uk=TWMUnRr0&M0fGB)_+Uw>0 zaFcBh*ewtju?zMDPohQ_ir0(%ZGO3++iX+n=Dw`G?>bLf6wNg_{$GO0?sMyKYzVN8 zF&YAuw=>38&`tnNglHvz{~ICHT?i3X&-LgIgs23H2Xs4wfIqrU?+!xf40_*#chENA zJBR}YgdZVL*2 zL<3T~=|_vt-Qo)oRD2NbF-Wjxc$vrV=U*@=L2aVnh@|T{xTC-QG?yj-9zwzfgUI4e zjx;|3HWhk;u*@JKG`uJ$gVbpr-ku~N!X1G&mfe9jfeetu-#1#z)hP-;|@}|#Sf=4ci6}{ zkH-0P6R{vks`672SLBr6doGa`kzEUd@X2MBKqHgM{3RRU_*vo!Lnx*yU=LNusniyjM9-*B|O_x&HLu!)de3X0&i(b1wkTiRvkav zr3}p3hjR`c7#&0)2qKv(XS+-tD0rSql)`&nu#rS0GTS8xH1R7&025hO7#cHzkg11% zTHwMJ4`1_pZS29<8ILR4#1TV*guotFU6~^v1Y1=6)dd-ZLsw)5XJrW0h3yKqsBd0# zFX2=_HmGM|B`9{~*FAR}PlPnaSiVh&Loj`uZ53ynaZWiShW|=(FX>CR^sp)pPUV7C z!%usBuzb!(wL)E->g|3YFzxYS%NIfS%sD2ex)v&YU_~tm3XQ+swxS(An0_Syk0{$- zrMLKCpe#RR0=V2YJKews0g%WONY(&eQ{e*(;+7Q4m#)q4Hamz^i_J09T5w}jH0@?cj0000e)I02mk;wBjQ400001 zbW%=J06^y0W&i*J7)eAyR7i=XltF9TFcill`~hO2h{EWyuQ2hlOEw6`&zHgiqtbEx z4n6s6tgwrB8+0F_=N)@oFQfFBUA7))QfSZFlWeDnEX`#TgvjXU|NH-+C5=W;AIZxB z;MMT}AkBaTGXoOL3`t1yZU`{xP>p|-NZ=6&N=O6S8bOI|J_`gTggH*T8bOJq>%ap6 zc}Rk_FGg$FCR$=_A~m)>l7EpfyfqP(u!Q}KOITtfO;N-obWX&0rgcmL0f<;27Cb01 zApkfx_lPn~aG|&{KfWX8k)6Y2UDr2yMnxhvYKo%Kj-U;8a%+rR#(WkkGOe5UkLbsX z{vlz%-`_Zaqv{+p-ghxI=2kaAb)G%XdIHqr6;%hoN>v}H5B@O&t@YBbgE%XBl}X>_ zq(EFE2nUq>lmE#Q7w?w^o}FzDO8&)*!5r`t6agPb zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Ic}YY;R5*>zlCf^WFc60G1j)m+9UBIYj`jp29dK_Wepwi!Sc=uH zS0s!#xL%y3flM8HQX=`&e`j0%vh4p>ahic>=K#A%!BY!Lq=M2wI+ z@+x&m8O=g+s;HYOYv2vC1gfeF>|X0bSfSw&EEd;;g^k_cdH@UNBZifZ&1EawFbBoQ zXyNmHf7zyk1o{HT@M-blM!*H@%g43sq_}9{;N*@`_%zrs_dXEqSlJdQ-#o z+O;E4C4n12Ub-9<0gWJ&D|ruo?C4V-l*=9nJ+A*@@oZh-X%3PfJmKUAn+b5VCpLF_ z$ZK1p?>nS``@P(t2k401)J_-)Jk_;cZBV+XasqZ|uHV8Mb(8#vX32a-3+p)e!3^J5 zjX?xxIv`^e9dxuBqfNqepa~opBlg0a)oTcWd1D7Z^18X{unf_f9%LlX>{W~5R|hIH x4?=&1c~)5t?VS#-6F}f6VdV2_?g#zVk01WP{oWB|D_;Nr002ovPDHLkV1fY`aM80xs0>wIQ zEken@Ol<}u&_9~lK#?G0;G#uV^}Rb%5`V}+feyXRz7N0mcskzu2=QNzi&BX4Dd6sA zaFGt42v9fi+p8xc7`Rs(8*vUl^a0PW)G9WAT&bHLpxj<93*d-zrRH5=wY^^=ZekO# zYy-~V;_Y^Z1W?48QrHIW;$Ull0%8$i(FOA7+j}$s3=uW9HsnI(zTyB{Lwi{0_I}Vi z`f39_v@TKW&W_$KR0X8EEEv%GG(aIzBfe?8=0e>-1?WHr8?Ltz;j3Rh?}1WpFmDy= zt6wcZRR)13tXU{{YNahuN*Y{7V}9}B!vj40#vxuh)oWQcpI3`dpT5AC-x&x1LV)J; zN-Y#^GOf$NCczNmL1Uf(^8W?K5Mk*`RkGz1I@cev< zss>_u+lf-IGXq?y370fSwFe+DK$Ph>HX&z#&T$3IkbpInfTMtGkUjy~NMQ{i(t)|< zTz6&;m4{I__9>+fKsqqD88U!eg@f4`JjA>Xz_cWQ5=tR6adfb@- zCNh!sivcvBM!^6iQ6bH5ex^`57MSH|fpQJ;FqxXS5NGruJ2L~=00Q(7TyUk?DIvn| zgc!~Ur~(KGvu>mE`hmS3Q4rv%l zx#Pj*=q|v&6>Tt&WU5aAnR!c^Zv%8F43O71#JkqKaDoQ#t{p%d#g~GtfS!4(VjRB{ z(w_UC`3evmv-{cy2ybjE_cDk(66mf=q0`Yu1tNdXQ^$LW4V=t&w z53yGu{8jy7me?l{rCQakyR-q?^oxE#YZ>U4A4mm9{!nUD@o|J-cU~(P1mtO>5Wnuc zMld$q$Mtc8KlhYA00G~JO@WAC{QU97=LahnrFpz55Q~>DKmPdn4{EAY2+H>3EEv>z z)6(Pql@ic=T)=zs2a+J3PoM}|kDLC#APJJ}6%f%o4mtq&!?HA50ZA8tE&IdL6hQZQ z2cWje{y-KJwIIFp-dy)*m{z?Jx>Tmz*N; z7+8-xfSb^_0Qu#g{58;z+5sH+TT6tYX{=-D0>ZuCU1L(~!F6Zep^koyapf1rA6md% z!u9TJ1?;*JPDX|?-TOoGeFtEH7#;kf+uYd?(#&1}VPE$*09s4ZJ%AC26ze;tyVXV@ z4#2K6Zw11ufWCR-2c>I(%f5N*2M)zt?oPB`;|G)jr<%KI|GZGoD;xk4j1vMPDnD?Z u0G`>GIaR{G)^7pMiCs91Z~4W)9sd9tWgv@q8V~UR0000Kl1*;oFbsw5jn)yA`T`luUZLUbpfH;YG}_m3svMx` zz2^vhk8+$J!0EoImgeV=kCdwF_x#}FhHrpVw|Xr2*gZcMyz23h!hN+0Meo=r9R4g@lHvxc!CN32~#|6cEvJM2U6fWm{Ct#0@qJBxK5J$ZN za-0E8N#6>frGqN0|1QAGUUw59)42t7uT(g_0c14;y(kp~qW69R#{XxaM`YE3K>w7| zKHLEnKcKckgno^{@gAt@)IJ)3z!C~D&sni++sm2&gGK``V-!Lp0*DjP-2#k}1&RWo zM|VA^^Hm+XJQ{!sTn5Z3kLrERKLUPkP`CqJg4VM@Ad-~8g?WE|1be3QC~(uBim?GD z+Y$oHvt&LPz$OH;Y&UV5fOm|2$JPKe83`OVQs&?ytuz5>G5|UVfH-d&s{=rd51nrY zCf(u!n)7AZ@&&*eNRtN$L^iFxld8r*+N#*d(+e5JnLnSl^jwyfC p6i5Em4Ke{efxiZv6~E`loG*Cnt>f6ni6Q_1002ovPDHLkV1lJV>%0H} literal 0 HcmV?d00001 diff --git a/graphics/pokemon/regice/icon_gba.png b/graphics/pokemon/regice/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..46b07b3aa88c0cb3dabe1fefcc72f4344ed7d4ed GIT binary patch literal 334 zcmV-U0kQsxP)DV$@k}(d$APhx0L68TAE^sCf9=bGV>J5{js}%+hom`q$ zU|2F#s;aW__o(L1bq8 zAJcL}n|LBzdf?do?fHf4%FrWGH0AAmM?%h%&#Q*>R07*qoM6N<$f{l=m!vFvP literal 0 HcmV?d00001 diff --git a/graphics/pokemon/regice/normal_gba.pal b/graphics/pokemon/regice/normal_gba.pal new file mode 100644 index 0000000000..2d599438d6 --- /dev/null +++ b/graphics/pokemon/regice/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 246 148 +49 57 90 +90 98 123 +156 164 222 +189 213 238 +222 255 255 +131 115 180 +255 255 255 +238 255 255 +0 0 0 +0 0 0 +0 0 0 +205 180 32 +255 255 172 +255 230 0 +24 24 24 diff --git a/graphics/pokemon/regice/shiny_gba.pal b/graphics/pokemon/regice/shiny_gba.pal new file mode 100644 index 0000000000..0c3dc8a37f --- /dev/null +++ b/graphics/pokemon/regice/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 246 148 +0 98 197 +0 148 189 +74 213 255 +172 238 255 +230 255 255 +65 164 255 +255 255 255 +213 255 255 +0 0 0 +0 0 0 +0 0 0 +180 123 32 +255 230 98 +255 189 0 +24 24 24 diff --git a/graphics/pokemon/regirock/anim_front_gba.png b/graphics/pokemon/regirock/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e278efd82d84996a3449ae5a07e74dc7c596fc73 GIT binary patch literal 1637 zcmV-r2AcVaP)+S^IT#oi7Wt&300001 zbW%=J06^y0W&i*M<4Ht8R9J=WmN9SJMij?+nzDr_l8&7v)zM)CF9G>jt%k{?w*-hI zW=jBB?je~Bcd@cnDOyur3TLQAZ=I5G>1PR$e2f4}zJUAQNs4%s<8B>_9)iI3``vr* z?jGO!Th_n3IA8oExNVw>pUIy4L@>*0RpT?$UX93}?*VSyu&u4Pr2*WisxfC$$|MRc zhBgFBy8)Cg0@4qy_42G$tpby?yhi}=Vtj-tltzpj)w{{rr!4=3z$3pU>ihzr%4zS6uPu=&~r)&=s ztYm@a|4`C|2Yy(pv{CX=gyEX!uVxTvR4_aM974f0?B zt*-#y6NnC8!mu8}VoS43q1&(C6eq?tSx%hmav(c&6(1IbV^pp8806gE-R~-g7b6HQ zGX{XRtLLvEgqSea6<0n2N-2v0DOl4BxVQ)prZ&Fq<&;u48JhrEjWj$UlMQ- zNB3;Y;oPae1y8{V`sE*Zjx>dPBXpQRcjmbhZjzl0*=3}5Aff3sH`RpBHzZAhL5UG9J#m_W2bfuprD}W2a z-*yur6at&^Y6urgd7CAa9ZS+Q4OT+PWP6H*0QW7H#BqGzYOc%6>8x__fAr9FFkfwa zj;Y1sc>8KQi-e#%)ZVTHHnGEeWAi*yJj*vW&lcX%^}tR2F8{B8TC6E7YU@UUc5G%y zv^x9>`{`Sod3lZk!P-JOu>zb{Z_lV#`o7(&in44HT0&5_O~7syG~9U;csHh&k3iVI zSegD5p&UK@kU#r?z)u&XA1?lE02BVe%b$AqVenH8{AB>&A0K6Ni6L%jiBb)X%GxMV zVm$n)CB_a(kc$SOCB_5q*+-HX1T+Q2Tw*-+NMax$sy8N3ml!)$CCcOBxdF^224#_j zXeWtrTu)*yG4Q0lUPsI%#-s);Bu0-UMyH&Kly6Fm8DJ^|Lt+G4q?{L511K>P?c)5n z4j2+6+UMHC@XIm@Q(_3k2{`#u>r-`!5p|W~8$;9(V(FqGG5R>?xKmdEro=$`u@)z? z-fbBLfH+mpi^3ia+7bjNs#hOarDvB!m~pP)RTjX33-7@%4|;1h}2=w+(|R-d*l)5xDTO-3N;UpM_J j5L^q8=(=|L|3}x~m^!Up4Y?;q00000NkvXXu0mjfe2Va4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/regirock/back_gba.png b/graphics/pokemon/regirock/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7175fc90a6c7ae0597a45e1bb23497c416c1b394 GIT binary patch literal 859 zcmV-h1El+S^IT#oi7Wt&300001 zbW%=J06^y0W&i*J*-1n}R7i>K(=kumKokJrn5i2%Vg-k#*aoDq*@v>nTxS;Y0}>?f zsDmA*rXBp8rHU8(SWq@{OaB^DkP2JhyR$YLf*%F@7~?DTA%9!7l8TP^Nx3g zzkpJ09Y4K}c7eH4YDr&CM?!czz)=mn(X|j_M-c+&?be>~FoEa3i(7?KUa@SQP*_B~ z{SL@;Pf8cTCFi?AA#oiD!8yN(_;42}r?Q{~oNod6@doaeJ)076?r#97M;1<8VBr8`O zCaGF<>Jsj;E-V3nnt08Vg>W)Cm$UB(LhfBh#~S3aB=Ay!eHmo3l#o#hPkbA>ZA)&z zD}c=dn93>q)IFSzMk5y!R8p4Ir3Ewm6>F49qPqyak;k{dehu=nsx-I|9%qkKL6)lx z2p~!FyarLA6lie21yV>CH@XQ8R7OWUrAawJ|Hx99&dj8Q-@8|;2Gg9$Ds{RI2)R?0 z09gZY*i4oc%=iZMu!SvP<@Vw9Kj2gic+!AQ6VLY728`)XY$7qhW@3nQ%9V(l9oga%Ys_v!U&m#k0cFt@o&`RMfB;8<@fu))nZCZy zQ6Tt$u^8ha#Sx56g5L)C!H^B&NlX>`1mxK`NiYGJ2e6OVg(mG$2My2}@+b2M*8yZX z>*_riP%!Etf2betkU>^ei#JfXcu8=QbplHavoz0h0-*+HZ7aYne663kEv}pts*2|1 zhZy(bc84=&*Uud1unwrB?!*sys5fchd4ysEqBUJvh~tS*gFK7d1o%mGWx&3_<}9O) lPV`a41dxUe_*@^e{sEhrj4s63k$30fhdEP)DV$@lCiFZAPhkL0{BZt+-%~2pJT!xzjP-^7z&dl4D!TW zE1JCF-R-`Hg_E|lr~^P!T*pcdPhU@ermf4`KLk!Vq~2lMR)8DvZyRu^qzb za)Cn_owjne2vryp&T)4SsxTN%A65|$Vbb~r4EH02gJ!`hj2m7T*c}4d0){nifAj}G ZegKzx)t=7tBw+vm002ovPDHLkV1mQxo{#_l literal 0 HcmV?d00001 diff --git a/graphics/pokemon/regirock/normal_gba.pal b/graphics/pokemon/regirock/normal_gba.pal new file mode 100644 index 0000000000..f577420cbd --- /dev/null +++ b/graphics/pokemon/regirock/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 197 148 +82 74 41 +148 139 115 +205 197 172 +230 222 172 +238 230 222 +180 172 148 +139 90 57 +189 131 57 +238 131 57 +238 172 106 +0 0 0 +0 0 0 +180 65 0 +238 115 57 +24 24 24 diff --git a/graphics/pokemon/regirock/shiny_gba.pal b/graphics/pokemon/regirock/shiny_gba.pal new file mode 100644 index 0000000000..b997589cc4 --- /dev/null +++ b/graphics/pokemon/regirock/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 197 148 +98 24 0 +148 74 32 +180 106 65 +205 139 98 +238 164 131 +131 65 24 +139 90 57 +189 131 57 +238 131 57 +238 172 106 +0 0 0 +0 0 0 +180 65 0 +238 115 57 +24 24 24 diff --git a/graphics/pokemon/registeel/anim_front_gba.png b/graphics/pokemon/registeel/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..17ddf8ff1f35d401b6bcef79e489a21f53f3aef9 GIT binary patch literal 1587 zcmV-32F&@1P)W$00001 zbW%=J06^y0W&i*Mu}MThR9J=Omd|S&M-+f}_R^zvJS!{E5=AQs3O_xQKMj+dk z!k1s}P)a3~*q&nVqSr$}4{!Fl@KzuaVB>X7C3a@pAzL*GcAOaWIk@0Sx=X2A-Ae?4mFmV&Kp@lrZGJrS; zk1imE(`ZiuaFs7#7+@lfF0#}Cq8aSNvt^#YFq51lQ}{Wk7Q?@2!z7@>=`RLgd^!~l zu&063Uzex9>k0sfEKB?28VC{i!;}yj5Gk(!U&>G%KnVZ@jue2D-vzGnD+|Pl-~g1f zATray5~hh^h=rWTlvRL$iKn{6oa-@)8Q(pATJ}gLbi%m{^x^N19pL^Y<-GT-0(Riv zs?I<<>WySvZ`Ml&#WBtUa-7@k{OtY7zMMt9-D4PVD*G6R8Fnn-|M-5sFAo`~2r!IF zo~#gt3l zB;jk_ygJ7eWC`bRM!O#6aoL2~1EN$8naG>j2S{<|dANAG1~*H5Vu5|xm4`O~5EdK2 zZsI)vu!**W7H@P{m;zVIOkV+Trh%9ixdvibOY9-A(>DN-@OgnBvG_#2h0PWdo4^2G z_oiEzUGFIMjXp6nz&XG)&o;h0*}bKXd2X=MQBy;83mZUoHV~zFUK-8#h3{ z0SIA`RG*mu`cdCW2MBF-!Od}C$@jAD0tAE8MV9IK8Wz4SKS=kApcR$R=9>a?MA@Due{`$@Utp zqA)8iWz)0fl|ax4=q;J8o8xdqi{c}H|GyYUEt&-*k~0tQ{wBdde}FX{HVOtj&OHD= zZ4wOQ5Adr=F!nBH=nqsj2!_8{^k`>p4P(ox+*|yl{h-|>7(@9EpZ^lLlfswqU_b&e zj0VAoj>-&C9}-MLyy~3MmPh(c(uNTw+AwbUgCh{xfia9ag%AE<1md}Q-L+v1sz&|c zOu7Ogv|)&YS`Xkp1E3TL>@k^USq1nD1C#=R02+o1gc_&?A_l`qN96@HL_L@u8iCMp z1X5lB0|fB-uLXiLxGXAw3CR)!tU%y(%#!MH!{-jAg_n+^Z}Xlj82FBHD-h4EVQ}UO zh5;Ob7=d9N*ZWE6*JJq9*dE4XGz9v^Z{=Q){N=ZQ_08ixN5Q~&EV-HoB`^=z2!zrY zh8B!bTOOXj`q=GFhDTY;2fP-mk%run5mR{0D{rta!!@{!Bo(iz)cg(2u6#K zY5PzqOwla1Vh`lm)C|FtZ0Y zkl;!Ckp*7c6*Yj~#GA8yxt3oAx`LWpprZl(7PiiyO?{)(0E?B8HLTdm3(7R0O#?sb zi3wJ-g5eclBY5i@(+Kc}$^>{#Xaxf&dWN^YF^vGd6@7}9f>DjqG#r1>f>8mbX;l7T z1!Dt1)6li2Hf&AFY^5~~a!W9(QJIErPga6a1Ep!8KP0jej9WmA|A~w1S}+_S6bwxR zPRyuR3r4*TU>a061(7IPSN`AvV{ICQ!rSe+{$K{!?6_rgl6JTI12eM@QW$00001 zbW%=J06^y0W&i*IK)3I`!Ko9^>q#rOVkSJ0l9CnrJSW+C z3U!%u`k<)dr|j_$WcQ8;jGTOc$6H7T`)+q{P6~pLc#p9(U;dx}+Hc*$n1AJeQ>Y8( zw@NKP^*uo;t2Hw>*Fy4bX#^~|KZ}^>7kz)G6~v(w=vB;1NCEy10v61>e#gAMD!^@- zLK^A>XQ{y9>jLtsO+iAzPAa@EA$6H$1UUTSON4VEBOFc>FfFnEVT@V9=6G7a3Ct>! z7bPUelUw;{FFlsqJAJmkgBb{oV7+x4Qt12$=9@kem6r(zuo(b1B4`TSWGy6JH_Rx4 zs-gsc@9{O@rX@tc+KHG3a2NsK5`r-@kAP?dkC!txmCcZhyVaK>_Mn@9Hj5C6@AQWu zpuPg+L8B#JFea+!z@mU!N(?|Eoq*N@El~=H{({RP+A4B@=(Y@QFmg+K=whme4h|Fw z?j2BF?)Sczh6B1Uzn5cZKg4`90kVlJEQ&(GjddL7fC{XtTrPd_>;>#2*H-faimKAO zPXf9qPlcp=93vgRZQy`NKnr6&x5MJI1CL78Ai&DyGxT#MKlQ>B1@Z>;1NHxt=>{FE z^FVt@&Y~Tg6wiXX?)c<@?}1bB5CDXU2Osfn;t!Tg?wm_!G*18k002ovPDHLkV1m)6 B5Ly5L literal 0 HcmV?d00001 diff --git a/graphics/pokemon/registeel/icon_gba.png b/graphics/pokemon/registeel/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8cd3d19f43393b4bc3565acfe5a0a5bc89bbb8 GIT binary patch literal 351 zcmV-l0igbgP)DV$@lEG~SF$hH60dfVaPXX)Be@)3R0BnvqFd?zn_3kOR zMB&DW84!A<{OKaxdgC|hi(ss+&#*5nEqG+{*Qh=;goGF9G9sVEhh@Ux0zCufWi*S72i61m?s66PN{u x3Cw~6zJOVAn7}MJ5CWKfc@mvxX3Wp|_yia6)=?`CDuVz3002ovPDHLkV1h50o>l+= literal 0 HcmV?d00001 diff --git a/graphics/pokemon/registeel/normal_gba.pal b/graphics/pokemon/registeel/normal_gba.pal new file mode 100644 index 0000000000..9d7d328f42 --- /dev/null +++ b/graphics/pokemon/registeel/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 98 +90 82 82 +131 131 123 +189 189 180 +222 213 230 +238 238 238 +115 115 90 +139 131 106 +172 172 123 +0 0 0 +0 0 0 +255 255 255 +213 106 131 +255 180 164 +246 90 172 +24 24 24 diff --git a/graphics/pokemon/registeel/shiny_gba.pal b/graphics/pokemon/registeel/shiny_gba.pal new file mode 100644 index 0000000000..e0489363a2 --- /dev/null +++ b/graphics/pokemon/registeel/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 98 +90 82 82 +90 123 106 +115 180 164 +172 222 197 +213 238 238 +115 115 90 +139 131 106 +172 172 123 +0 0 0 +0 0 0 +255 255 255 +180 65 49 +255 123 82 +222 98 49 +24 24 24 diff --git a/graphics/pokemon/relicanth/anim_front_gba.png b/graphics/pokemon/relicanth/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6216ed7dfed93d006dda1aa801d9f392fcd93e GIT binary patch literal 998 zcmVqyPW_q>F=#b835HT2etd_F6&BK{5aK-iv!u)?j~~00001 zbW%=J06^y0W&i*KWJyFpR9J=Wmd{TUK@`U)tfUc6vymVdl8!V@%Bc>Gh66!;N@E-K- z*WnI{04U`rq62$-sLTogtB?ErUm^kDcGAc}K__qfJ^T>%AoS2qC_B=PWBN0l6yg6mX0@l{2V?e``ZbbseLdY0D{u0HPTI#lFovHG0OkTSZBBh4 zIo0oxlmygt!ujG8|BQ+lj&YZ<4?h@7LX`tTIrlG}R(K!|VGn>yk-j$5rf{MXFsttX z@Dg%gHX1d^#vQ;rhispu0Z6lwh#DdM*a5tUk-Z`$4?wHYfbyRn(M1{rmaaq#B-IAF zEw*=~dw@0zYOb(DiU!Dzz9{rg*#}lqt4@-tqdPL^mbVE#Mci-!-rbifpq#!S0YLBz zg!cViYCrWYS5JX%bAG{%GBOOWg=-!5NW_(#7L}_etTyG_lwHrS=LvL))1o)CJjsJZ zzPEY={&8lsgC~@9o9l6g6rNvFWA-Xdx-bFxknt?aVFwmwhy0c8)6-yH~3x6mR z214f+x7`Cu7^+XiWYf0dzHSKZT1Kpn67lQr;w~bBkI+wX{MDM!V@LO&xr11L0q!6Z zTcXt=vF{HI_l$bD4*;+a^Ge0F2PX_Z+)6;Q2g(Zn+#ZCV*N{CZg~|-sgK!_i_82GY&ussM(e_;(m_COtX_TYBMZ#N!B Ut%7%R=Kufz07*qoM6N<$fqyPW_q>F=#b835HT2etd_F6&BK{5aK-iv!u)?j~~00001 zbW%=J06^y0W&i*JK1oDDR7i>Kl)sMCKoG_)xrlTH((Zu{Q6PCP(K+dCfj|@|6q+lp z2szNbL9nh0PQZwQB0}~g9cgf`I-MYn{3H~-M6RIpGce=$&)P*5c@6BUrgxN&G3DT^C<&;V{AQfQ+gK>(C{TiK9c;HX$x2DIxQ&#n~- zO9DKv0mr>%DPaLX-QyT~r35Q<8UQRI$QJ~_pjM@X?jep9peCVHksG|)E$%Q-lh7Y5 zp@%^s#}d_!SUu=s=AjD)K%A@ZX;G2Or&lTf#$Clmmvm2a=V4_)g&<$5bHP7bQ#gF& zd3`4CRXreN*LdW4ALH1g{KM@)0lGHK39x@T$PxDmNJsrodtXhDemQ z+KBUc&`J^^5SaKzHx;kStLn5DhMy=;ai12EO%g-pEk3Zs`wJr_*n{t(%#qe&g#alF zJ75Cu&QyRTs0d_z!^BfuOaa=%$68GSjkEy#`2!=i=#Og>h$-+n2ihvo+F*#R&%g=a zvj(i+U=gQ?Z&N`1SFSILJU#c6nrZ{QDBH0&+GJ_p=R6J8uroYUf#SU51e^!=Wye+l zKNs*ZNJqwX)$v}B94A-EfY+7zUpu~ERJj9=D$Q6snZit%I3H%fKn1eXhLE^&)0tGi z8+)VOEoLTle17?z@RiDHUt0uHJ` m>ahx`ydD9OQ3Y<}pW`>KB>b}k3=~rU0000h literal 0 HcmV?d00001 diff --git a/graphics/pokemon/relicanth/icon_gba.png b/graphics/pokemon/relicanth/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..da17eec334bbf21f9c8c12e92d28c517ffe7822e GIT binary patch literal 413 zcmV;O0b>4%P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I8%ab#R5*>*lD&$!EdCsN5% zx<|Ysc09$0@gbmUxTK&@kP05b;MDfD%%BUSIc>Y8!cM+xX_WLF4dDexy8_!(T`;Cw z_rtyYpR0byaJ%QQ4tqUVhghyQBpu3ZgX*vctizO-C^{4hR0pp>bU2U#(V?Jo0;tCu4`DvoV3PgtuNIGn6_@@p({p#C6&&{+I00000NkvXX Hu0mjf;m@(; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/relicanth/normal_gba.pal b/graphics/pokemon/relicanth/normal_gba.pal new file mode 100644 index 0000000000..2a95fb3cb3 --- /dev/null +++ b/graphics/pokemon/relicanth/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 246 255 +246 222 180 +213 189 148 +180 148 106 +139 115 74 +106 82 65 +189 164 164 +0 0 0 +164 139 131 +139 115 106 +123 98 90 +82 65 57 +246 90 65 +205 65 49 +255 246 222 +139 123 82 diff --git a/graphics/pokemon/relicanth/shiny_gba.pal b/graphics/pokemon/relicanth/shiny_gba.pal new file mode 100644 index 0000000000..3c37804706 --- /dev/null +++ b/graphics/pokemon/relicanth/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 246 255 +246 222 180 +213 189 148 +180 148 106 +139 115 74 +106 82 65 +172 230 246 +0 0 0 +139 197 213 +106 164 180 +74 131 148 +24 82 98 +246 90 65 +205 65 49 +255 246 222 +139 123 82 diff --git a/graphics/pokemon/remoraid/anim_front_gba.png b/graphics/pokemon/remoraid/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..73b643b99236fff5051483a95e2c0c00698e4636 GIT binary patch literal 756 zcmV$q3i=;V9dy4=7{{a900RR60|JBvitgN(qdxKh9S}7?xM3K2@00001 zbW%=J06^y0W&i*Ja!Eu%R9J=Wma&f7KoEwvxOIyxT`pCGZf)`ajBy*Cy{6@CpWUPY zVlypDk>t&2?xm0dq>9L_mqZG?doHd!c?yu2&%3kO*8ed!)KFDVpU--L^09A$)hmIg zvIi*h9-zA4_l)og;HE+(AiQ(+3n2vZ*@ICy z*>BX08@XWIIA}Q)LH=R40ZFxG#k=bf8brv?J7}qoOD+sxH2!+ZfA3(9i1O4-4S=10 z{LFn?LCmE*q>!4A?XPdM=O(6;wu?5Bfd%*uHN?0*ANCv)VZIpzK%~w<_n}Pg2Hu8E#7AsWshO>`ay5}m;TF+!ZR~2u10W$``;akv8#1c)#w1a zB(1a_q|y@qD%>|orw46j*MmxkP(Y^#Rv^^juJqt&^#_&yD%_PG*!+RgzYBMl9;o!! z;jZ++kOQ6m6z%}=k@SGy8bFu+6zd$z8)NT2Oi)L}EEcs|+WWODRbY63Y|gAzd49k5cX_{3j+r z@s6$510I@oa9L&E>46to>_AtwJgw+|_a9sUhk~?`<>|@+urdm$*SG;*_%uXe^}!2K ms}I)*|ENB|bB-|7+pa(4jJ0@#?3zOW0000$q3i=;V9dy4=7{{a900RR60|JBvitgN(qdxKh9S}7?xM3K2@00001 zbW%=J06^y0W&i*I(n&-?R7i>KlEIFfFc5}00C!uvds{_}A=gTn&9zEu`&MP4G1m8V1 zK?=?P7_okKg0yp^rixEPW7z=cw&X(2Q`7|1&i6u$#W=6Tah{1}`33(W;Z`VUF)n6M zY>{|aSl8l-oaQY$0=YR~9B+I5ib759hxrUj!6@#y)|2q~@bdguNJ$3UBQIf#+(OB# z`nu_6f(wBHXDC?47_Yitn`C|xKEw}Ra%;%vwc|qYAtuai z->L(^=Y@bFfQc`jYuzfmdn*vw8Yk?K8)1d$mqJGiBV2>tabfJWp1&o2jr+#<5xwI| z2=THMbiF+ZXDG+?kKWy}kaSqU`?dqQcRWll&}5jt#u i4yhE5Q@;WBgNxUJQFTfH0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H$Vo&&R5*?0k}(d$APfL`fq4WwFG$+oWXdm*I+;YuoJgocr-Vjg zjY^Hw5}-qeY^^sRwz1@6>=$D#a(*s=`v!Oc_}1q`H=O$PoqIiEQsOq$IIU?zg?jWm zcqpf8bg_h^a^2jE2%u>zZ5MHhEw=`(fnf(=?NzcxrkjCeV6t8F?Em7p4j;f5I`CYF zaPCY8>d1BA)RE~x!eE_TKM14dyVyS_VLH+wf*_1Gun6-4aA~VfGCRCM5Qh9sN=`00001 zbW%=J06^y0W&i*NU`a$lR9J=Wmc4J=Mijs~H0aQZgr*KnEPzSY1hCRI1sr;fi`ZJ5 z&7Ql&Lk6w=bJC&cK-nET=#H$1phNh0@+{s_0+ePjkJtB(q(n+i3Unws^k7>S@5lFf z_ug}y|JoAf)BC+hE!y9es{e6i^_ggB1B%5B5T-Nwh@lO*jEglei5$md5s0<`#nhXNS8hJg1D`Ob~8JoFD)JRPm1z|X0i~#(Nizu!& ztSy$|gaa^=!C1^>1*mM}lEi&TSjuQc5UUwUh&DDlh7-W7o+!!Kf^6h1pIs!X*CQqq z8^A5#0-a*WWHAAY9l-j*pw9EpfwAJkonmb2INUiLe&Zi!bMean_eH_9kR8BT z1;;}K{`gRE#>&h{5W-~$G=cIC0|c_=m|hnWqYB1DVbCPYF~Q+5i!|d#fS`R4Uet2K zaaSh+B}(jpF|@DnvtZD;;W&Bl9QXOMFG~reLkdhQPuJY<_G@u9t$Z2b|3Oe!c|{a|9A)fqrUY);6)`JvXU@R%0}$nXf!g` z35}N!^@`NK*c)6Ami9It`~K5C+)8y)0kSHazxM{71%4h5ugRdi0#YcOx>}{3fTuYc zv|0n3Q%mdJ6NF>j)?xN^aMFEVPz5{GP&; zs(i5pczA2yV=ztvolJSbq2fZ z>TcN|hy|Syd;hk9UOz7TF*SrsEVybH@XW%E>ETsBV%L2woZaOvtfaef+Gp{O32Q1h zcrHG^->CcK{y$#c-^tB>b!YSmAG1J)Hblj zx)BL#u!)c)P=!;wq7V%xP*LGt+W6SXv z{SZ2d06Q?#%NF2L---utth6grsed2ZmcQA`T1AWOYE3{0@uJ*Kb?8T zaX&vjJJ-ULAdGDbYYn}%ydp#y&1dK|2n8ooYd| z6C{*PjyO&{Edcp4w*arQs&E!C-5aP7s0C2kiRc0@h7w<@C4jZNdxyP{uL5mFKn18R zfbrGvh=RmxV5^>cAfEY83^WV7d%6W+d-nrNq*(TM0LL8omcR`Ry~ep^3m^f$Kg5os z?YQ<4fCy^?O6VHt;svL5AAPO5|CWSV102=ezZx($0^ZcX@F;1`sg8%>k07*qoM6N<$ Ef>8N3@c;k- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/rhydon/back_gba.png b/graphics/pokemon/rhydon/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4acc986bacfa9828365e9bafac4b85c0994ad36d GIT binary patch literal 880 zcmV-$1CRWPP)sN=`00001 zbW%=J06^y0W&i*J?ny*JR7i=s#gbr9vDi8p7r6CkJhfeN&; zUqyIXo`0DX5rJzrh!8y!>rS8DT+dSIc)mwhB#EE*=KOX7*c||xC5}(JU&~1f!2(Yk zrN$89zBY zabOqdsVrwHV2w(dbd(-k5eKOBY6c*Z#K0zYsyl8-==-+`kYSG`LAybhDxMM_tNUq^ z5z`>IG&pyfo@YP`f~i*HP+n$DRfi4G^}VRAX8Vg$Nr*P4WDwiwdR7#W07rF1D#y;( z7XzK9Wnf^Zqf%kpF$^BS2|uGo<uz55y9x4`p?t4u!f&;n>X1E{01 zmiuG`Fgt)P%aMFU=jCoP&=a6ISx~9W-VYvxaGXVCE5s0~A{Q5#pjb3|gt1=v80JGG z#K5z42<_OFR*cHlMQPWnS literal 0 HcmV?d00001 diff --git a/graphics/pokemon/rhydon/icon_gba.png b/graphics/pokemon/rhydon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf63368040bb72096cd2f8e4b75349a4bedbbbf GIT binary patch literal 381 zcmV-@0fPRCP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H`$@lCf^XFbqV!7Z7{;01M&=RIq;_AD#d~_aYfO2Z)`u z5F&OA0@fL9G2T1093So|3U^KOw}-B4kk){;kXoX`lCIVg6PM~Ejo?(Of_B0jf?2WM zbAVOc-qUA51yaC3Sv=GQKqZDn@~x_PtetNo3P_%RJzCS;KCg9e z1~``qI|Ih_D_J)4x}y99;J0JCyQaRBI*{p$$WDMUkxL&7?2x1O#f#v@5QwkC1c3CE zPpK~m<|Ew)cGnB6E`3kaM61l>MI=~1(cNlc!iznvHe4hVUS#SbKufyeyh;Hv-UsF@ zGk-(yvr0LJU|ekbNz{NxX|O6Rzz2YP&Fc_oPJ_-2mr-8U_7&BioG&2 z39Prtlm>$GvISgXfEyCjHCjtQp@CwjKm*AU_M5VH zFI?iWgi`&@EWpCej8F@N+qTp@0wDP38?KZ|VulAIykWg<&#i0DiI3-TD)~m46@)Ma z?aq|KJYI6Y-?L0B69@pIiw?j6O>k#EJwD@70l;y~H5TB(v&gKD2Kb{X~KQ_U4=L`6qoiB)M~yJKX}Gf5_hv-S3}GP@e<+a2VWMWU1XB z73yF=DvKP9b2hYdRdBm|c=#$m2TUsZ^8X*>W4!nH|LDQpMLlpvP4}llSC{nQOSgc~ zXsbhjbH{Xld|T`{4*hBfzz)7Fp$|JEGgV13sfr;QnZgFvNvQivhYw*y7fmk9(T z%ZET`2SWQVOz>2R3qWHBGY0<{6r$4yYX?FC!UsLS2o$#YbA{$U09wD$wH-+OmfJG` z`mi$Qz@sTVYTX0oEl~0XpoQ2TzqgGZ#LxqI1XS1sG48T7%^9s|X8?Kx;zmH~?jB~* z48o>Zc>=V05M~K>q*A>+<2ry@O6gnj@>*0t_5Omdjyb+ z2>O5(j52Kjo$^8r03#U2A8_nLw0|04H)tE=$XQy!X#4@)-81c9v9{Fn$O=Zifbj=n z{J`iz3!qU#Faqljya9w@>$XRAf??+o0$#y|x>*-lyV&(7-gDf z5R7ML&(P?%em&%8{s28-+&(g*`NJVU^#^IH)Vwpv-R@yKj6cY%(F0SLJ128ahW^ll bcOU-(df6t>3VH~Z00000NkvXXu0mjf0}@X* literal 0 HcmV?d00001 diff --git a/graphics/pokemon/rhyhorn/back_gba.png b/graphics/pokemon/rhyhorn/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..67d006205c08c72f3cbc52af81cba5135696b6ee GIT binary patch literal 633 zcmV-<0*3vGP)KlRvOP1IYZzGbgSWx7`@#O}4Kz3i3W zodgeKYfRJe$48{}K8Y@bz{&eeMQi8_;bx6;F zg~01NZ<$6EAin_MV@{UV%sldQC-)kYu6cSZmPen?w^g<6?X2B-O-v)mkoUj*{V9J3 zwC#t*3FtUR?g@^-9ZK_`Rby5Y0FHZtpY#MARUr-swaBH7)gGbi;|VZA^Ul6Mhq`G|81!-QJL&W!qI5{Vz6{<&D`|1e-kNe^eMD}g?OR%&hKW09aBe+^S?oIW~u4qwwgUnD#+&OPj8=WAZV zGFhK2L8S zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H;z>k7R5*?8k}(d#FbqX|0xWl@QOr&R2jKoY7a*`(wK;%s1W8lG z!VKR2_qQX(Zy0{EU|vZZG_BeRD0LA7QtBd*l*m$VP%;YIW`shS_0AryeS_1~kK)^-=h-<&SRABB7)E$F0g5XHo6MG`m zhp)sA2QGXR8qlrAM=njy3m==3%~)k!G`<;M@bLigm2ypwwqT3^0000cV|D?SsT9i_h)nc^&d}JD=00001 zbW%=J06^y0W&i*LF-b&0R9J=WmOpRXMijvB23ds)1H1xu>Om2Df>G^4(R=_Jtvf}j zDLF$24Q1*A0a5}fxn!^kL0k*ONtwwSOKS1T>nD&jL?3_@`~i4IK7ho&<3BkyNww(e z2MHqhethqVI`Mu8-A8`B*pjavZUM9}wg7{3sFL3%I$fpbsG>>vz?VR1^t_@KjDZKE z7gc?voI;U;`RGWara@be3xLmC8l`kV&HNEyh!GXh8W!XcHt8Yc%}x>Ui7`+hKk5|$ z6=V3?Fm?TxV&FvnX?Rfr{Ps`}}74 zAqC)icu6{?-+!g+hJqdjLEtZgFey=E0&pKt`m)_tbkpqcAn*cjl}>33z_BGoIc+~0 zDvE-+sIUP<3-{d^p}kgnaHy&h<}iZi2kS-LVFrM$5=5Rg+ghuu_F)E}0~A~*fXiG< zRf+nf`G``bqmsHG191i9z?ZZy_Eqwv`8B1#N<@9W4m=+43}7~M$Cy-Ub3j|&J|gvX z05kBql>Sz>J%;1TpsBUYuDI6??r|QF^v80ph+r$`Z-zNkV*m&*TRAvBs+c1)0q_!t z#Xnb7#f0ca0KyGU?k+te0^;+S+({#JDmth|f87{JIut}z6etHeZ^}9#)azK~0Pb65 z9U@@Av;rd5{+1HI+j<}{%cfxL_cWqKF42=)>|h zU^_09xD<*a3q{%W!fw2a$s+Uy>|u*a%TStPxEEq zi4q&hnYdHeac5VsBEUfQlx464{qSxB4us1R!FaWXP4&hL8(9y?+HA(0&tk!Nwe~#@ z`tczfa|(GEfW25Sepqqe1G~t8+6)wA!Wc;e!w37|0$5}K69t%*2u36yeh^-#z^BgC zo`c4a{a7$W7Bp$S$N*bN47=+0W5MuZ{aDwt7W2rn#_EGuFrITL5b$-X7trD_1~*C~ ziC}=A1fU<+8-1t=O_DZ((TE&qu>laa$KoRuj0P8qQ@`UEnP6bJ)gJM37FH%0bw4*B z3r3_cB*#zCzZHzKN6>b`5dKiUdxIWqDPfV)DZw8Q$uq25LzGT{?){-K{stsGLwK5# R%i;h4002ovPDHLkV1l+TAiw|s literal 0 HcmV?d00001 diff --git a/graphics/pokemon/roselia/back_gba.png b/graphics/pokemon/roselia/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5275c801dc24127441d7290e7192a15707fb8860 GIT binary patch literal 774 zcmV+h1Nr=kP)cV|D?SsT9i_h)nc^&d}JD=00001 zbW%=J06^y0W&i*Jgh@m}R7i>Kl)-A-KoEwtg%St^GzB|OOcK0Ms>ewJYVc8qEaX-j zihQjgWUo2Ypj*${9&*;|34{;v14zLSAca0a%2@40R~jvmVTe))5E1&r`cB#Bn55bU8U>-zrT z$Hex-V~43!r+O8W6(s_7y$Ff83PaanI#CIR$a4Y?tJ(n7ZfI&m33Q$)t#aB0!vq$X zpHcra&d^slB#xOH025RMl(!6t5p8K7{Z+0pD0&=Gm%e4?z}cwdA2&djD3z~(y2K=v z@A>{I{}4KT3+P9{Jg92llR$TmhX_yzt8i!{&Vz#bA~5&T0$HvVg(Luk=wSaMo|1+n zAfxj%rvZocA{OERK*U%905DAw3K_G?161fIc5N5fJ{102AT_K8gS~3H;Ob3sj}J7h&~LBme*a07*qoM6N<$ Ef^KVE3IG5A literal 0 HcmV?d00001 diff --git a/graphics/pokemon/roselia/icon_gba.png b/graphics/pokemon/roselia/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..fc63c9644a59d4cb09d725ed0837fb53e1f5072e GIT binary patch literal 414 zcmV;P0b%}$P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I97#k$R5*>@lD$rZKomyj35FNg=d;jaUjq_@Et`PGh5`#8fMP?( zBv)+Q@&a~b0~c&{bmVt-hs4%IZ#O63%zTqMjQzQ>I%CC{G=S{XlL?9d4e%Kt-WdQ9 zgU$dAVsW}d<#~dI(vkOlT_-uh0<4F94aue{G>GFb0B8cG<{ekDgblcb^ry@*yu633 zc9lq{E<6g`H%MD4#PhU=$a*0{=?Jl$%MbWU)$ZCm19g_$o?R~8njBoJoLk+#DamD= zbbxWjGq##?4gS&mzA$VpjP+;=GZ5WbaB1Mn8zoAN->q-)BJN?xPY*OaK4?07*qo IM6N<$f+(rCkpKVy literal 0 HcmV?d00001 diff --git a/graphics/pokemon/roselia/normal_gba.pal b/graphics/pokemon/roselia/normal_gba.pal new file mode 100644 index 0000000000..a96e5081c9 --- /dev/null +++ b/graphics/pokemon/roselia/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +0 0 0 +180 238 115 +246 213 74 +205 222 213 +65 98 49 +131 156 164 +98 148 74 +123 205 98 +172 197 197 +164 49 74 +246 90 131 +255 164 189 +41 90 148 +82 148 213 +98 180 255 diff --git a/graphics/pokemon/roselia/shiny_gba.pal b/graphics/pokemon/roselia/shiny_gba.pal new file mode 100644 index 0000000000..eebb104afd --- /dev/null +++ b/graphics/pokemon/roselia/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +0 0 0 +189 255 115 +246 213 74 +255 238 172 +82 98 41 +213 172 90 +115 172 49 +156 213 74 +255 213 106 +123 65 139 +180 98 205 +205 139 222 +41 49 65 +115 106 123 +148 139 156 diff --git a/graphics/pokemon/sableye/anim_front_gba.png b/graphics/pokemon/sableye/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3b70ec40f5bee8a653c8566858190b1f6f4cf926 GIT binary patch literal 839 zcmV-N1GxN&P)$9 z2vl^O%xwUsnViBTw5AAB`QxquP*(%iF3LRA^l4V)4u|Ujyj-paHrnW4(Z*nCZ4Aae zu+Cs8V2#1hT4ONEE@}oNaGFHbU|f^537l07hC`Y+bGvvj7{a5CBHCp8?3cknx6o)q zF8)*+3?W@f184);S!#nJ{eyhIrH_i3Ksh4)g9e~}Z%x?!3v}=Ft%>Unq|I2_7tZ9F zkRdRzYK|U@RvXirWLyKtW0erN&w^Fe(m%+Tt#bHrrHIzKlp$~1P!PxcSWB$D*q{NnN7sapVV zcOb%#D#tiTog6zbgqV~{AqJTP_+W@|Y=GrRJ2@&Qo+de}JZ=XHBEkuh!nzIc2}s_L z83=Se(oPYaBcT(JmYJ^GfC7RB*kqa%x8yhgl!Ig!A!X025_JIf3?vq?&)2d_^1K14 z2n}Er!Do<3S(-Q(0Ve>T0my-_OhiR-3Yaz^XifJk+@+3#X~Rkz0W86BV2dPe09_1Q z9LPcs^ieygoR7!X^&g-by3_J%PYkp~oJwkA<<5d7U8=jN&7?#r3Pl0LOKRY zHNZPv(_=W6_UCdIahy_=InP?mvdISv`1WGrQ|k4)$MKokSO%Y8O7cgDd7xrOw6>aY zcJl*K<0{=g^Sn$sPp^TWzam^OBA9zVC!zgEupBPF-{akvN1)1|o4vrk4SdDb-Qtml z6gBZ!SirOoKmhHcKz&c;&{?;y0a^jLU3?mH3nea{W(%M#Nw50}za=nsrX?VGpv?tS oxma%p?Eo~ZB<9_}{C`fr0a=VCa6tiYTmS$707*qoM6N<$f(EP{nE(I) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sableye/icon_gba.png b/graphics/pokemon/sableye/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ac1307edae045dfec301c64d984489e4fe8241 GIT binary patch literal 319 zcmV-F0l@x=P)DV$|`El)cbMyE|BNmg%(?!*e+U~B|r4kl5z9s!<%DGJKL916-gZFAna-23PBp$1~&>Xzdh+Os%WKDbN zVUvQBJuD<4WU{xg2cz5yg)I6XvQWB5^{^zjt$Qt{G=Ge>AtAH}_q`eY7+H#YZE1(Z z2)~ctd-F!p_p53D$i?}=!uX>odczkId*NABlcYJ?&aOB=iQZI*y>L9r0nX1VL^BM- zl-QL-HAO}UfS+y80hl5j8SS(N=jT~OUoW~h*fa-DvJ|!>iDm@xt?eA($0^VV9C`7= zVDugnrvT4WP*c`obSsJuvM$vWg3vnwy@xp$Kt4}`1jZo&rr4dY(I9m5uoJlMJp$(i zAP?>M8=LV6;{8D+)^-kvCLVofvr+V#x`a$$%mJc_rp>+#LyHnJz)@h00>CB+V|xft zlE5^pK!dSh>Ca1w%V_U~NR$AZ1@zfl5vR9VBf$QWZFb9!vue z*J8}Pp^i9nQDKw=pS5)Zmd6ZEDKrs|5I8O}=$hRf?Zg)IIj0WXnqrXqv)OJ6z&@6b zcjCljU4BFj%Y7NKubgohcVa|lSFGOKUOC(UfuWrP`K|X^_aP?-0}L_Oz;T;9%Evt!<=YjSNbNW zo(DhxnB5tY?4C{8Mh|`&1dNFkp3fMONQWUydN!U4CP2VttOFN@yxWn5{aK;`3BYE2 z3boouSmLXWkG+W%5DUHwFk?@oIKl&GKFu=psRN@x0B%EEc#aal9DxfT_-m7p6aa!B zB0&1cxE?k@T?BgRR@Y`Ti&|uIVrFB3Cg{^vxkXLCm<(pq0w^~qXO({k zC0G?Gjl^3FSkxnzi+~$St}hm)XnnkX``f}At)DM{UkGT)WNl$w(`J7Y{|~QB-BD(Y znmOxFq`JR~A}-{0e%a0wq22Jd26?Ti0P+g&aj3G3@>*v>Kwd+5QENLOuP0Frf$|C| zP(JU#f*e!{l-KYz$}39$c@@az^$wNd)x5t@$9UJ1_W0julI%Ws!bH~s*1Y;fV_@J2Fj}fls2mW`VwA| zAg`Y&8Ppp3*FVMadup-e2LRiEH}4&FJU^@j8qYBcN7-Bs%PvSRp|J=!H+}(}YUL$> zZE2L7Rfpob9#0KN1#2W*EY4 z0j%Sa6c`d>a0v(-1@e#O9FTum0(WB|Alw6`ee^#R4a7hhLV|ie=?fDAfZqoPGEfgg zr&}9e#P23oeHZHlrtPnl4ofu{UY&oKHyHK)K^lz1hy8;z7}f&+APk1E2mkvA?O*2~ Z{sQoMdty#DD&YVC002ovPDHLkV1lRNb$kE- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/salamence/back_gba.png b/graphics/pokemon/salamence/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..748147e777b7855f7b8bb82c9fe0229e69acb7e7 GIT binary patch literal 578 zcmV-I0=@l-P)4l(A03Fc60ACul62g@tE`u3@1|6|)yrsSpcOyml&` z847s~)+{_gr@j$V3qu*;d>iZsU67uf5kVx3C z9Nz+e7er7_WxRlIQvwp0Q{9swG6zM(<(veVP*tODqevJ##4Tumld5TEtPRMm#ef{3 zxNa8AfNdCSNr3ekFDs?22Xd@G*8F)44hf;&ESN!qraGX13>Oooz>U(XnujsK;Ee;4 z>P2%`;m_ce1Db&AhdP+}nIWKi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*ITS-JgR5*>*lCe(1Fc3if1?fMO1(qe~li2<`kV!BFEvL;dm zpTRG<(y9H0C_@`Wb;?wCurTMiPHDR!Cb-G>d}rC`C&b^5h-g@kIw9yyN^9)_tVG0l zs+oCWx(_L(eoPYC^%%3I&h@812f-p??0@pQxN zK9Uax)j-f}SEUCz^xcZ`0ua#ykw`HBAV>E(gn%()VBcwg&;sUJl##BcM8{%s1&Taf z6CE2b0n*U`drSh1iA>joaStAY_N5>?K<*Mln+tW9`#+3Sl)#y?%l&#HZc+rT%Lg^^ z?4<7hncA|+cwPeLdMgRc+ajTWj^nEm2-bm_g*+huoXJ^v5GGv*_ALx9C!`-|Jtk9o zLG$H$6Fo}3Wz~5jflDS(M>}!GxbzeLnq6 zjz^iFDSjXG@I~W*Pp_kRbl7Mp-bC1%HZbQG*Af_yxAR8Oy7-RyB#z_LjHw<~5FpZv zi#QFH0F}Ufk^kV>%7?v|f&_-c;d|fqRe&LZT;_*!U%7%jN#b@BAr`eQO3^G%`vq#u+5acB16m7+vV`oU5loB(4b zApKw|5EjK0*HvpsKPUtOF!kJp0;owpkOE-?M#`<4k@N#85Oz^Ol@BmVCKK@vQQ|4b z9)_bYiv{QB9#PF46X5j`FJfXVuge5nFM(Kn879VaUILo?p3SbRfs-UJTZmot640{x z%K{_U&lSIy+4`CuEDMa%RtusnB%IB@p&}oTvf1w(f~dO=1UI)XDg7b8e#oN;HhK+i zkxNQ{$ZS6hoy}Im09O7$GUkT^vAGq~1yuS&hjen)P6vRh{lUl{^M~5bAD(>t1$ij2 Us@T#$t^fc407*qoM6N<$f?{ox6aWAK literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sandshrew/back_gba.png b/graphics/pokemon/sandshrew/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..86fa10ec8f7fad65b8c53837b333cc841c1e4478 GIT binary patch literal 606 zcmV-k0-^nhP)Kld+E5Fbsyh*lWL$0v;T4xxofZak(K6 zcm;~S(E&}my1$$ZQ4*u`0mseOr=LG5vZ_Agqeip*2bld4&@wf4+yERcf5i2(>z@Pa zY;FV1&Tj$6V&rE}8-TH&gQ-&Y{v1dydQZ`aH-N#z0a4#=0JRJ10nmAjPXW#ra~w}k zP1bH7$P_>#no9Rq2ZwA?DUwoQqH)v3!JI8d-2jHYt@^9RkFU4D!NYXJLkJzR6B-r2 zf4c=V1GRJBdo+oVLVlM3S$;_u0{mG-74oG3EQP5WvH;u>G}7zO+cInXo*D-Q$^aDj zv`DwO2qS5*S!ZE*40M|gaFzXL*mN4@lsVv?~cfk?h}?$Sr3NYWNS zHQ?_&x9dwIor<_}9_AJo+jc#VF%qjU0fRZrqS>0lI>tuUtP)DV$fuIgl7bN%yYXNxjJ8{?Lk8MZ~?UbhXwlr1(U0F2q)7IOmV-{MEjN_q5 zBxL&%+|D~t?Gpc7pA<%Bi7?8qT_TJYACfQ_h1upLVF1~JD3yeX2EiaoC1Dn%%%IrQ kHiaWC>u)i(v$b3l7!LZX`Sx@R1xkbciWKkkY20asnaQv8^BPZ|FP5 zN%%uHklhcUB;bAcz4zXo?ma@T?5hp%@h<}oB0~0~OMo}{`aVALLO?`hAD^&A$jns0 z@eydnz?*4H&DbJ35Qik(%K@4^2mAxkRKSdr24)-?1CAJppcOi;EP(O#;vj@C+~!cU z-Uu%npW7o^XbU0S4k+L-7he!*dm;LRcG+!qrvZnW2)Zxr9MfXjG}Ej-abln6|hM4J*tmVM`wijs~R-1P;Y5lkHbg;#RCigBa!b#bAc+G zw|xl-VjRd2*AZUOTxj$u)rWTPZY3#!@nHr6MHY6qDPM%(9 zkqGbvG(+J5yf-%}EiWInNXh^Y!qD+Lta<|h{TUpm{aP0{+Yv8rUY}!6H-2X9N!m}) z4bRT-ze2b<;`#{W3n3-8&}F zpuTBF+JAL3CDD&mpvGh4Cqfzk5!qHB2~(vX&~H(HJy)X7Hkj2*_m?-L3xVQ*l{jDC zzF49Fu!MEGSc1d>!ll5KUD?;!g>C(lbz54CTx(qdc$(KLrmx6PreRyc%d96nEpZ7a z0Y^xp39lfqq zCV#Np8k!xqBj3jEOWB0wC1l*OFn~a`DH}{%<0F9$v`zI6D`juWa{{X%_9&gDh1hR0+=4o5TX6MYP`2s(`!iC+mD05-UqV?=&+M=+x8xIEi@n4Y}~u` z1fVHx%nMPoXzAE#rb!zRV zfY1#v0Ci>ub6Dl|^;?@OtLYQ~{}Fg({pWZd*+%15Ee#O$r$Yh%gs(Eo;yVDfMkY-q z0HYJmVUzFTK4kOMR2lG8bG~#|Tghxxyn;VqBjHzSI31kTtULgNDjoSps{Nagn_!6Q z-hB!KLjn2u1g)S32+B%E#e}nIKtBd>f~bJ8nBPhi(AgYS6GY{e@t~fIv48@s90So~ zqi)u-8aM&5a)d+5J$P6EoG!9)79KGy98lxv^8k^tB4%Ekr6rV~65%I^VFXJwKlCf&rP!xs@ol2vCwYT8wsf!^|C}fDCG)uQWLkmj1 zWQ^LSYw=P_3raFH4h@k?$wafy9F+3*D9M)I&vm5EQ`*4Xy$`X`_|(b0UTbgthi~ zakwU_EMwLa0D<4FtW~d=5b;QKyzi43GrC5#wg5cJ@SR!K^!yIwg2`Bb=nE1>z8n|GPA0{lX8x^IbHSqKxUch`=XZ6S z!blFFJ_j=540AJN5hkNzm;7V_$S90)ih91JBz};?ma3N~V~-eX_>m_LWfN4GD{Gd+ z3Up)HLj*#2`6&PoPfFm2ABq48fL-EDh){r8P*^H2ZptencwSYw5$2)Vns3n)W08-( zKC7DM24YC8g)IybpdJkBxLU2LjYG}Db=AnP2y}Z9ZaOhdRo}F~X-lcb(HtPsIgW>% zC{?#!+Fvc(e%){f6ExH z@61|P*5*O`^L4<0`X~({pioc03~m4tFNHt>D0KtCBd-I2^(DZ4-BtepI=)E7md8?G P00000NkvXXu0mjf5e0g} literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sandslash/icon_gba.png b/graphics/pokemon/sandslash/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..08198e6b2c3f2069e57c25c10af7db290fa6a0e1 GIT binary patch literal 402 zcmV;D0d4+?P)DV$@l09z3AP|K)fqe&8?zV813r))%63H4jriIE^i@ZHS zSqVY)mQDEaS}9XRp_@Q0OiJOiam<#BQ z*^J`3b`mf;%;b^5EdfOYqTGSei&h|664AUx%?vMV1(A7SRd1Q56iA^`5y0o57R{kO ztsibLiUX?x>}43k%IkZcyI}`-wPj8TyN}$)uaI4zf!JS9;CelQ&We9>eh{Wd1JQw8 zc=AI^%)kL8VGvZSJcJ3{wv>gz0X&3B;^oY@Fwzs{i<&SwQH7ye$-)#3+SV&)ELM#@LV!3Ku96AE>!x_Zm(GfxF5M6T z$AP>*b(OF<7wE;5 zG3DFoIQ4KU2h1d+`>)lcICdO{lcpTlQwu_jAio=cU!>srn4>?y3&vO!7b7toy5~ZzjKGPg~kQ!GDH@eHUz=C?b_+RD{xMPf=b zLTro6Jk%PR5ET}MT8IakfdLE)Ws?|DP*)WdRl_)v(ZX5@c|n4r1}vIw286}NsLeL= zd<1NByJ&PiBAaH$8f8p?)jg<$Hm?ogf+U4aNI`69dccvrZEFAKQf2q9ZyUXO^!82bgWnEdskDaJ;<=(`u9)eHbrGs`uk_^K9M^mEXGv3{`nY! z$8`+BD$p>%nFQdS@C;-Dcqi8s4y7&zBm6ZOXuq_4|Nq|I+0#y5%Yh%C>}gud*IgAm zP@BVe&v&3UK+*M+cK^`p@(<5(D{l1<&vCDN*XAG2`3BhLA4XU$UYmb7@A3~}hkqD5 zUH-x8@()gje<0H?|B$+9T-*FZiuR$+KR6Tq^_BaF)bTff#6R@G-$U2exhqpRky#M=$ru{el!#^gyZJ7vl_xJz+002ovPDHLkV1oIjlgI!7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sceptile/back_gba.png b/graphics/pokemon/sceptile/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7e8696ef5790342484043e20a6f362ed3eca0e GIT binary patch literal 838 zcmV-M1G)T(P)(VZTv{NJs;;&$2YQ_o} z%EHhcMfArMspX$wspOEQLIwHRMPdn(Uz`yXJI#nxr{>+Ao!H?*CvJ$6dmq2|z3+SH zSk`}8W8Kw|jw?-gRGWR1Go4vLom0^Ex+=`X}sDM_h zwP)e3U*flm#y9B#;^pWhRdb#4EVe>P9r6Kc(XK4&62>&!p?6K zP)NYOEC60m29o}QM!$Szm}deC(^|oU1qogmNd5w%(v4x>0zK#wtb!x2-;qKa^_{+$|G+sFYc zQGYBGhUjS^E&}AOOyPy{Bn%r0z@biZe53d zRb#|sYW0~0KnY8A4{lUz+larmL{r-o!9l@c_U@eeAS?gqpb4 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H{YgYYR5*>@k}-0`APhyhK+L7IO$yOKi;tEYWKTrKg(xF$0Zj@k z@?wvnPO}qr|NDc!hiA+Sj~FYDPFpV}xWS;{2LpnK;Ru2I9E=;?@BI=R{JXP#L{i#* zhKvZvheqXc;HK?rJ{&6!!mOHeyQ$JzswQ1SZI~Ib@2(%ad^_ahXc%71f0$PTrYrLVM&f)rb_Ygc zjNMU2{s*I@CHB# zz?gdP~P5SV6l>(t zS|il$t>$sgeA}XYya#I^Y%0`xz09&iXI$tGF-z_W46|NtUS+YMeZ6WCb{4*19*fOp zvUyd$IzDaBLkEfBGC!M)#%q&esyuGR{cQFnrhp@IJDT{(ooUAKq}EK^(4tGxv01JC zlkB$-kG4D=I35^`NRNsc z6Obk!Ciiy_*5JM7v|x*@c?l#reqjqUwZ#ZVS$dGhFya89I0SX3W`F-;xl|bi(03@A zETLD8DfrwZ7y^J_?qDW!)&Pd*o-h}8k48vEGsH=;b)hhZ1PMq#czNUm_@ZbRBqhKH zPDd9gDax$p@|5tY&M^gv)5RqLvrtwuIJ5Cme-=}SWw}{VBIRd^z)jv)f z-T|uS@Sw*XDR6pGS%>Gm$dSUM_gm407xn>0z`F{F z0>>EHNm?rU9^jn-UgQA$^knf_$aNQBg)NT2kjJYYFueV#nYnp8zV8C(qmRu;W%xAu z*ag_9)2{Q)q&G$jVCUl=aNbV(@N;jB$6n9>+q|pK0GIJ+fao*8se=3mAl<>i8~PH| z3R1Q0@#;F;4qnsOs8*0F-rQ|x;~&E-c2tl$K4~tu%?e9ADhM@=_-zB6k0O3mD+o2o z-%d8CH~7PMje?YMvA=EK;J+Ld1Z|Ep@zjxsMnNz>4z3+_CE}TO z<7HPOjtUZlqKtPX!mAVnA2RVw@venZo+~@eW zYp!NVws`2r{qo}b{hCj)*KiaUkl6IaiZqqQV!i5l)(~-9B!!SuCHJe11IXF1pvy$f zp-B#vqffXIJ1I+#a_Oej3!~&5m+JKSdu#XII3y#ng)DG+3QdJ~(~V=6844{Y5#eDM zAW2zZiqld-U_YV_l#;TT%V}0B2mw#+dM+hpr!yl+L0}@Pz0O8b6e-9K!*r%_loUk@ zQXIVDWC}+~DJ&^SAuVqKjih7?QjkI_t~x*^DKe`R#0c94DoIgC1!?<3Eh%PqRFJkm z)RM9gx>k_3Kh%A6i1-@`tuDIQ)VA(du&e!+H0ae*sf(5_fZlTe|=N002ovPDHLkV1hon B(@G-E61-G9S~}56d6oFa*l8gkWkcE-02Gr?c04pc}mhMUb&arhUWWe4%Oug)Kb_|`|75EgVuPxb^LCgST4Hvwu&5((&^Vv_i{1XKndvxF@G<#h%GfGp8Zt2L1Ggm13{DTBTD z@FCfV(@R&UQk-qi(Hvu}K15!s8DM@J%bp&O)-Pv3y>*&zBR353z9hfsJg2!QaNp>- zPdzpV2IOJD-BkksHS5i~c>%h#Ebrv^`5vjo^lGH(Em6BYUvPNJ-r&X#~s>{j2C z99y4nMkye6{3*sP?zl139O%ffX6hIfR)ET3KLfTu@5#;qky4BKq`0J9?v*K*glH^t zB)v*FJ|9PPb*cl%2@qyEDbu-|`(Zu^M<;K9DCb;lt*-=H;})MQBzVq}ce%N0{4GGj zyj;tgC%w+Y&F=YDXsA0wH=;)Cr&=l-aG{`naT7P#AYqzwj%n=T>d0eeC6fR0`~`@H V9fe3VN>Ts-002ovPDHLkV1fZ|M2!Fd literal 0 HcmV?d00001 diff --git a/graphics/pokemon/scizor/icon_gba.png b/graphics/pokemon/scizor/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8667832b81528381d8c2f312e08578788e8a71 GIT binary patch literal 447 zcmV;w0YLtVP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IJxN4CR5*>@lCg@zFbqKb1=c@wxUmQQk#7BhqM?KJR~}rr?&*+U zDJgh4hz$oCQi#rW($wvAaLaLq1pE?7NP0^B>7zl#C(zxb1*Q55aLZ9|E(;hwKQLZb z3jo)6(wiDM48EHINQ8skk?+>i=UYR{(=M2IDYc=o7#V34cBcX?ZYhXo+7C_s1&DLnHPD?YAvIdZ)WiWm;RJ9Mb$KF;W(e~1( zrvjKR-aNqd?FHyOyz5#$AKj~eaY7cR>P2T^Dm@ZN!hEeNkcFv15vF?rNf@&Lks^$_ zj}Xo_W??#!3EUh~5#})OdcZwP5{9?OY1w)6V-kkt*iJc$AR)b7J7-18!mzlz9};tz p(D2xQ5$0Z2{YV&m5$1P(d;_Yj=Kjq1PsRWM002ovPDHLkV1kFY!t($C literal 0 HcmV?d00001 diff --git a/graphics/pokemon/scizor/normal_gba.pal b/graphics/pokemon/scizor/normal_gba.pal new file mode 100644 index 0000000000..a9310feaed --- /dev/null +++ b/graphics/pokemon/scizor/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 197 115 +255 98 16 +205 57 0 +123 32 0 +255 0 255 +255 205 16 +255 139 41 +189 139 41 +255 0 255 +255 0 255 +197 197 205 +148 148 156 +90 90 106 +16 16 16 diff --git a/graphics/pokemon/scizor/shiny_gba.pal b/graphics/pokemon/scizor/shiny_gba.pal new file mode 100644 index 0000000000..93e8e479b4 --- /dev/null +++ b/graphics/pokemon/scizor/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +222 230 98 +180 189 65 +106 115 65 +74 82 16 +255 0 255 +255 205 16 +255 139 41 +189 139 41 +255 0 255 +255 0 255 +197 197 205 +98 197 82 +49 123 32 +16 16 16 diff --git a/graphics/pokemon/scyther/anim_front_gba.png b/graphics/pokemon/scyther/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..90b7ad4a8d0bbb60692fd77966f040819f7d7064 GIT binary patch literal 1543 zcmV+i2Kf1jP)TL1s7_U3!d#af(;F}?qDoZd=ey&y_zAP^7`G981H00001 zbW%=J06^y0W&i*Mg-Jv~R9J=8mc36KNff}RaE0Wt)=o>%ty3O88R|$Fr9D#7rc6o7 zJyAgGb8(cXR7Z2Vgy#N$HK1G*DVbd>=pvBt?3yScC%iK@QLX|r_hvuFvmcn#bvMYu z@P7N|&BxCC5Yih)Xcx_D9L)oArL?Zo!_kOQ~|af*!#@mFncmV=cQ%s>Hr$<+jf^g z^JRk0%bzVPT_vQDfa8xLLFeUj%i7G$0s!#*XbcG;4hgpNz^NPfsO+4`_$bo@I<@V6 zn>qdsrX7fH5urcL5FSE;1Jm&-JCOx4+S7o5cuWFk^Mp(||7`uR#TNV1E@0;AQRCEh z7v@R77Z4XFgPI!9KQc|TG3>gc@AL$WWx(-~x#+4Ha3H?C1OVv?Sdgy62{-H06p*04 zY?=Xa2%|RuxKEr956q>-q)cYko2DrOLV8q?z$Tvp_ruESQj!8YX45bpBk2Fq4+wDQ z%xkQy){`pmA9Wc=m`wchVK*QY7JYFq;d} zmxJ|l+jJl<=UxWw_;7~w&w zWi;c7z{W}pR0tOnI^h>67(wCGBY#nxloQS4cZ`A_;w!@wdB~Yr(_j15KqntBt z6K5=eK@PB8csCe)s2s(7?)@(V&?O$M2bGKEW#b54IdZY(`v*17`+1;3eGkSNu0|{0 zgCt<8DHnndN=88fXw08@W4!*%D-|X{9;LoO_|r45Rg?fT*e!6p;@*UQUzA`76F}j~ zGVGei1@Sdl2nzdI9%8g$5=!?8>}W4M<(z2WrCY1T&RCcLjsvFvC>aloMzrPS)*a-4 zifC2i()s`t4O84izhM-`K+>=T3Wkve3aV6%k!VJ52RIxxd`1!c{-5wO18CiUSN&KW z%>cw@ReYIIWCc|gP-W&Vj%G*yd&74D{Ej#X2%6iS0hHgM*@_ZuqLhIY7z)x2ByT9k z7H=!TC@>WKdh4*=;VPaol(Gj`I`~EV##hhl<#=#za1Z>V9r;DpP(0Y8oHFGXSwmsY zk=fAwA~qCN9D!T!q2?Enp=j4?)%?b&X?_tJidMnd+Q&ym^`Y{MB*EO??-B43K5JhZ z$}ge>b9-sYsWcM5h!Q|JEjd{EMVMd@3?eN#nqNSID4uqhsbA1Io^cqQ_yy+|Q9Nr& zQ@{8e#A|H?a!X){jng*~F#1MsUVLi)u)TZqiNbG;IOk$%Dd`tg@+4+@ZeF?63#vIk^vPob`B6A}4^ z4!lcJRLBT+RO}biR(YjTj4m0S#C|bt*lEg3Kz>S9Pbk08s;n7bAqM{&EnZFiLNB6e zJZc%=q4F1B^9!wyS2Y7#^(zKI`9-P-V_5>`q1QLemE+82O7=(+7Bo3II(XLcz!tq3OeI{*dUy tzw-y@E`KPp9MxDT7`ZAn;Q!_i{{S#mjivsze2M@7002ovPDHLkV1mKg*7E=W literal 0 HcmV?d00001 diff --git a/graphics/pokemon/scyther/back_gba.png b/graphics/pokemon/scyther/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b9d1591b92ee42c84cd6e6605ceacc8c645473 GIT binary patch literal 744 zcmVP)TL1s7_U3!d#af(;F}?qDoZd=ey&y_zAP^7`G981H00001 zbW%=J06^y0W&i*JW=TXrR7i>K)WL4kKo9`X9Jpp9C}*UmoROLjK;i@X8~lQ+9CD4- zL+_k8HlX$kY&fHMyzU*(IxP}VWxaMwxz$-_?ZkG%x*vd8B~g-n-kq5pyVv_a>_c_V zuyTq8mt8=5;&H$NBOU=g8F-35K6L{K{FQ_*kmU>@6wn12aQy&60!ZDp0nm$v_|UMcu9X#+G{%>!JmB3lSm02N5AL2g7471kgc;RD$AC@WE} z5CFsrTOI&Rhgxr7N_@N0P30?ePe zr-(NvF*m7Lz}$6H#GmdtH>oaqEW96%j+zI-@{0k&buWM%<}Ahg;okEmPdS?&6L8$I z0m*9l8S~q{7d2oob0%5~=hy)8TS_m@pR~bz>P!&y)H#Wj)^BA5#bWSuR0BD8oYNTa zhvS@6oxjV766w8Zftll^4H!_x2;8>783Cw4kGh+VBd-C2GZR7y#^p_?P205qg)mVH zD9<%0$6$2X1_ zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H*GWV{R5*?8k}(d#FbqX=g7^+x0kN_WHk2%Q_GKB7dWDLX)rugQ zO+U&Vgd}&lJB92HZjzI6Z{{U%)6#$bTuLFmR{=QV8eTk3pD5Re+K(1x&&e r4Zk8xZx_O7UI>%e@B`{eQQk&o}I zXGwp0tR7-yAxnf0++rWbU1O0E>R4@HZ~-L0Hx_w^Pyw`D z*p3k{8-VVj&fB%!4_qk4O)SYXKE2LE<3)VBl^y-qpW>?kcU|NOKdT?;f}(7S zJ?sQ-*Z*O`Y5^cCdO<^sgJFM#y>r$GuzUHKQ2Hz8Lj=UO5nz|oh$c~lA9-)o=i7P! z@P`*EjYI6eA0fo*0gRV0+g*g|A}vbM%)sP3sP`|7h4)1zSS-0xM*ct(8V^N1&#COn zWOw5B1mJ6INQdI5rVNdZk9m+j77Hu z?p%O98IbKFdONXa{1J%8CWV!bOsv+xLLd$T zBrS(-wFegTHu%c`Mp_3ZmW`1ko~Xi~)Ly|!%d%mfIndk1Lz*1Dqh4^SfdWF#&(E$8 z0X_*oJ!p(GA#Min;n!mLcL@>xqq#e1mGUUhpQ_pH5gM_B#+b|?Jp>Bo%eA|g2RDnO z$?n3dChR(YuG}7pjwid%IlM`GZ2&*XPxHmm3ZNmom=F@|HWc)LP{?efm*s~gjjQ=nQI|0L@q%OM(;MQODQwtQ!#4-4Anl5VSLq*B;;g@->-=; zhC34~<@7uax&eKG3$X;#y+D>H1Q+_E(mAC9IGt+7T@*$4YaPFr-l8VHd60ih3S4FNg^&DKaQLiD{# vStw=6mw1yK(!FZiP!tDn4Xwb79ztpI06zAGEF#p$rddQtd<|WK ziKGi&LZO4~rAwUncrk%MExlc-KX8^jL;u$)RJPtI^B?EqTiFFZ zmuGJPWkLTiaO)Ru09!jkc=PK3xJ&?!4*-`D_{NFqeJ82{3mQBo^`pL9KduHIosJZd za>>7_1kU1gL{~(H>L*kQJb;KOi4Fm0kUlj@^Y~2 zgUQHTVGs*WN~wt(=aZ2p+b6)Mz1+n;K9^xcO=AEezrQDL*A0O05h>p{aZA;A=BPd5 zvyQi*x$yl)OVLi3^Pv^qv)l!wuNTAsstB@lE8OfZ(7G2ch?*4iKm2>7Hc5xM1!I-y z9*1nf$>+i(n-s#BY)oq%GcQ|Yn=S0Zo1_n>!I`wyhPi`fQiJ@U(8Wfu9}94wW90S} zfhP}!8UO(vu=g3DxQd#Hm`)}Pa6>_tJ9_{%L!P$@f+?%JV%tYF{2XS5o5JQoT+~eN>Fs*39!w9p#0JSQ{ct*Op*WIoK zX$9~S4bX1e9@BXRSZRGNi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H-AP12R5*?0k}(d0FbqX=0=Pq`Zb+TFaW|$vkwdXCL~sSviJ?j( zbz!jNIwc{=-VRkgApIYI$G}tS*Q(}HI+}AW(y+_UXCqEwc*mtNM8=p+r!kv1K%>he z4DcL7Omlk$M*VE}1|z4?&~$Mj0V&O(CJq$=c^u2tvI6_Ap*`+7o&A_>{hI}Bx1{YW zvtqHCai4l*QmJ)X`{D~#C>xZrR{c?Z5142jzyur;FcF6Xm}ZaA7=htELR$o82oZ1u xCS1!Z0MjKf1sLFwy`TWo7k~E+Om2J@m=~!+(p$fEt78BF002ovPDHLkV1o1skwgFh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/seadra/normal_gba.pal b/graphics/pokemon/seadra/normal_gba.pal new file mode 100644 index 0000000000..e29e999bf0 --- /dev/null +++ b/graphics/pokemon/seadra/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 0 255 +164 205 230 +131 172 205 +106 131 156 +74 106 131 +32 65 90 +255 255 172 +222 197 82 +148 123 65 +255 0 255 +255 0 255 +222 222 222 +156 156 156 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/seadra/shiny_gba.pal b/graphics/pokemon/seadra/shiny_gba.pal new file mode 100644 index 0000000000..7cb7cbb5f5 --- /dev/null +++ b/graphics/pokemon/seadra/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 0 255 +106 164 205 +65 106 164 +41 65 98 +49 41 65 +0 0 82 +255 222 180 +255 156 123 +172 82 123 +255 0 255 +255 0 255 +222 222 222 +156 156 156 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/seaking/anim_front_gba.png b/graphics/pokemon/seaking/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..242f2b65f52bf7fc974e94bf4d49b8d0de9fa4d6 GIT binary patch literal 1577 zcmV+^2G;qBP)m;{n00001 zbW%=J06^y0W&i*Mr%6OXR9J=Wmd|e*R}jZ(*jppi0n|fevt{jDgE6cxl@bFrXYVPe zO6kqLRK2zSTd*wUzIH4{Jv9(lmfC|I6bo`|^kOziRVhCnT9zJC*`ChqF3Z~mE4{Yr zNR|=v;my2x@6CKusehB19|CHF4*~UPt@>QRx(q+0AwM4&2Z^L>F09eNX7jTI;8GHn zxoRN-)KfJ?F9}d+3q4DeLjYG3K*0wt#2Eo;^1IDAK)Gr3byc7bj7o`Q8;~6k;I8>O z)KCb3Sd0qX>~sk*nl9uiLchqVDAw6OZtZq!V1NVpT8Wkc7%2YZ7TFPw8=zl84*PBb zxZZBJTDu^Iw~h#?5Rf&b3jBKK&R4D7MU>|qyo3fNTGThBvcT7Jc;{sILdx?!D-VEf z7RRO<;qD*X-=FMz1lUi&(J@=b@w$@Y_3yT~e>ky^)}3?v&~bDqB97H6T;JN-`gX_O zM?A3)r2|==YZ|#t^Ya_s?t>e)-RatPn*jDJhh^axR2TidO(qDCK;Dso(OFpT&;Bp$ z`%=DUfEOr`wk|;)}<={~WknPE5@(@CcfZ`N5ct=^j>&1W!E=&RW%%qQ=N$wI(_BmYe zOSeP*=WV|xqHNZ%KY45^O+EMe2Hqn2o{<70@6n${r$jCeJMpvgyEz0%YiLM>QlwM{fkuzYNPU zKp&OStKmrRdu}zjElX++wZM7|Mt%<)DK$oDj?Jk7FeB9Y@v3{UmzVLyO=&1n7gX2Iypc??x)763m@__ZjsaweV zDa49S@<9H19OwsFX{O8>;I5Rvhx(zh+)P){NCJv}FkV&k5e*bqNus0Zhet170$!Z4 zoSH7t`Nju){qRV>^hX@`sjwZJ=1(Wv+nq>1yabp1#>xb+&hLG?wRP$bHGlepu9F|~ z&J=L@6n5^vK9D}(x?qU2jrBnQXgB?B<9izJk_85LK_SjIC#@p0FabzDyk`9X#)S~& zXb;8n06_aW5iAc3Ix7WeOn@B@alrb4B#I((oKRrUbSDKO-^fE260azcfemKKG z9EVA&z`>h9KX4_Z7{i6hE_i`ZKU5SzdpiX}fkFBKW@7C4<2}+3jVUn1lV|}&KTLr% zp4+WfQa?15w%su1=m$`yvjg+=!*mxJC_SIm59m%KkhGiC4+`Lrv@6W$2Xvz{@EFDQ zq<+9x(-i18o^hGb56bAF!E96!D>40`jwWlwFAXcY2e~qmet2hY%7FrC7W+MVP(1=j zKRh*6Vb58}p$~WrxK&Ys1i%N%!0nz%fcX?4mmIGer$E4J72PEktTXeM#DR_#Sgn@* zXFCgM8`pHc$Z0(QR+9i(nSqZgSfHnuOD4&7%?N-&1`m;{n00001 zbW%=J06^y0W&i*JGf6~2R7i>KlQD18P!Pu>HDeX&VowMf$vcI}AHcQxCW4YFT`KVj zs(vZb#X^WmOnJ4%5~ir4td`wGFky0)p(Dw0@40d67w`y6PqGK!@Ba6{d(Vx=L;SCB zpVy{$T>4pC?orpSt0w}#4)7=k-}-yL$$9WQ8<&R$;CBJQf`hVP&kz8g0lNg6o&mHB zU_e`drGZPFzEcJ$pH+c5CmHAm!P)V&At-PE5$IzkgW+(>E7|IxfIcE-<6w9!a@aS4 zE(jY{jDxcQ%*_ry4Si9pju~F@Dx|zbG+n1p(XL&4I$;t3lDL_QG zYd|K&B=Ygc(~SU8-dm5b4)`_O2=G7Glhrtf)mos*H`sCPUJa19oo9JLsA04T=#&88 zSH~m1^@@lVYSZW7Ufl!cZAZBPt2ihI0BCu=S>)XDR35;U(sdPe1sz(JKno73ofL#i zB!mKh=u-(Gi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H?ny*JR5*?0k}-U&iwgWHTELUz;F5-+TMl~ z*yiIr_RcnGMzy%hq?&5k+|9X;Z~I8qu6U5L|K|n12vF}O0)-w5VLa}HQ3C!XOeUVf zq~8Y=4`C7z*A>FZQW$r=o`-g_c1c^RD9liIS(wONrdqm%Z4$>{=*JzX5QwUb&_u005kvw7tF6-roPcoO{)@lhe&Hw-Az5oCJ0FPgm00001 zbW%=J06^y0W&i*LJxN4CR9J=Wmd|V3Rvf^kj@Uc+Fky$1E|gLF4|q>rA#M+uUKlK_ zP3UyXA<#`T44Om14(yP_K-Ixeb__YDCmVJtq{J^6L^~RY=q|hFADBU~OPq~@_I*Dj zz4t7+jBU4kgB?ZRkG|jcq}ZRYVO+&Ok88JXeKI$H?;L;r(VV<}e*PQ&w4C?=e|3(r z(<%jSV~AA;ZIpFz8UQ?ah{}3gd+;>?YY$ObkH#7R4F{oS8Q|E^!=q7{uXx@!*#07+ z(Vazly=O@>MRl~th(xVYV8DU+G{}PJK9eM)Tw( z@Zm?z8%C!eochDjkdOiC1RcMlKd{Q1{%$`e$NT$)oCco%+1kvV@;Z;>nDsd74<8jg zkB=$9h!dY2B75eUw~yY&f;a;J={?N#G0n#l)&&4tTV`!NmH>nh)=D%m2Uw301y*%n ztN~c<@fzRHd%OU^#>zfwHWrH*127m-Kv_f$t^dvoOeSI*xTOMOjjRH1(o}(QJRFM( z0}iO4uvb6F6WGXPJSK;2Xfc=p+5q5nwnYF|=)H1fppJ&mv5j~@5qc}O7Nr_BIN><( zxkGoJz}w0p1)?w~OnPrvg&$suI?X7Ge#waCIwJh)Hrv4>e8{&bA@Wufp`LU#T)()n zu$ciCLeVRfUX21y7>4We78b_V-Kd^j-DB@}-E;va~v-gva@m3Flc5+<8Hu7^fO==lwx}9S&$p@XM~HCV;8D>d&wvwu zbXYV8RYGnnGCU)L!a>Q5C)~{R>$<3i84EMB@AHBZrVtwUO~Itp$fQXM&CGx}17^%D zfJp|-_IMrVC8$^RWtuow_ozVKhIxO!x-%d*vpybR-OSoX8((T>cJ%pSzL^cLQ2Fxta4&|7*1^E=MRE548D#A1t`}cu+DwWU;XIzWHI{ dYJT{S<8O~tOn@svU|s+K002ovPDHLkV1k`rMMMAq literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sealeo/back_gba.png b/graphics/pokemon/sealeo/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..302ffb7f2f02490bab6ac5758e9634469a5f887a GIT binary patch literal 503 zcmV&_u005kvw7tF6-roPcoO{)@lhe&Hw-Az5oCJ0FPgm00001 zbW%=J06^y0W&i*IbxA})R7i>KlD%%iFcd}&NU$OWsa+x=)EB619)RX%w8VrM)5Ub{ zLU@AUjhD;nhhS+(*H&Y4{R3Uf#y9$&oclQmA&=ZA!^L7Tzcpt7@V34&=js+QWJ;;l z5aku%g?9j?6+{WZ>+cSk$dlG*Xahi+<1bgBKAn|kcs6r!kWIH_CuOcY zLun01*J3PFK+_AxvUykj3TrqX96-eGGXPfd_#qp2Pcp9a0Dw)sm+}G-5mW$p+STH+ zfsg?Yfl?f*3IQqvRu%pjWEKJb_Z&bBOz}K}@Dlz{l~Eo8=%*S`mH<$REDcP10R@!+ zmc1Ye6w6+~61RlnwHMe5JOb$22`tb?2I>Q`!2#J7LxBOxO(FpXpbZU$GuR3S2n~!; t4`8jYpoK9k2?9KWJursLtA6A^@&kCdGrzxFyDR_z002ovPDHLkV1h=`(Wn3b literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sealeo/icon_gba.png b/graphics/pokemon/sealeo/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2d21e883705ef26cdd26c29b43fbf6c1dd5f2afb GIT binary patch literal 387 zcmV-}0et?6P)DV$KxOd@y+g}+4AEJf#fg5pIK=hZfA(}`i8=|Se>m$O8u2~=Q{P|8#wEF48yV%EAu|6JLIhhjc<2Cl7i1pC|CzSPZz1&dV hhlzRQeb8_A@eLa3Y+#llnl}Id002ovPDHLkV1f^BvP}R0 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sealeo/normal_gba.pal b/graphics/pokemon/sealeo/normal_gba.pal new file mode 100644 index 0000000000..6644440c0f --- /dev/null +++ b/graphics/pokemon/sealeo/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 139 82 +57 82 115 +65 106 164 +106 148 213 +139 172 255 +0 0 0 +156 156 180 +189 189 213 +222 222 255 +189 156 123 +213 180 148 +238 205 172 +90 123 148 +189 205 255 +255 230 189 +255 255 255 diff --git a/graphics/pokemon/sealeo/shiny_gba.pal b/graphics/pokemon/sealeo/shiny_gba.pal new file mode 100644 index 0000000000..df44748770 --- /dev/null +++ b/graphics/pokemon/sealeo/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 139 82 +90 49 139 +180 98 205 +213 148 238 +246 197 255 +0 0 0 +156 156 180 +189 189 213 +222 222 255 +189 148 82 +230 189 106 +255 222 164 +156 74 180 +255 238 255 +255 246 197 +255 255 255 diff --git a/graphics/pokemon/seedot/anim_front_gba.png b/graphics/pokemon/seedot/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..95007fb3ff958fd77a84c84612f5a3eb5cd9e86e GIT binary patch literal 800 zcmV+*1K<3KP)c~^aw#D#j0+`0ij zsoX$c6wU@jUpOoRvAOFNV6U&%N%Gj2R${doZjvV{Yl}&+-Xvn($hvRY$LgtRnp%jS zl;jctR*`7XqoQ_-9X5?vAt4LWqg)$@M>{x^04UVNNe&!Lr%9k?$cAU~(8uDa?ob?I*x3@-t-b2dQ9!foOg z7>N!fDBHjxL$Q@eBxXBUhm>F_g$cE)XIY~Bnl0+C`^pYMW zc6fIVcgiD>#s6roh$R9zH;C#>BL00GfJ~L)jSp1llui5a1f%ypC5}75NQY2?G5~d* z2bD=(2jD}Rw*WKgP6a}kY6GB;1?Vu10|EoccQycr1HFTA@@&c85g>r!ZH@n*Fx5*0 zYy*Zj#^?E|P6IbDn5m2V%o_il--`1^W(RP>;JjVHGGJgJ=BIi}r@ycDteqgThz4TC z-)5!`+yZdEZEt{9U?Kl(BAuFc^ekV#R6`AbE<)OFLGA2Z$7wYz$$pmBBDF z@n?)O1dkcgfh}u!x!Sl%{R1IGJLaTJ_i;X-rC8QO|1F2#@i+8i6xdMuG73CV%0>YX z%5lKv{EvX;amLAr?=T*SijZ4(<@rtm0(|BU`$7nBD@0X5F+?~yeG^I&fT6Cr+_43~ z2MGERj(F8T#Q@4|*ALiJP(VpCfC9GN2uA`GI42%R`TZ6xAWJG6m|{8+`9UbZQht%C z76qO(7rbq#zW1SRAuQYF_FmCmZ}$MD0{sOiB@Y%;Dmux5=g81h=DYY5fIhp4wg0T z0^!QN1BArA1I*9pJ=1j$XwDq~-{ZY$zRZYe52%|O0kTA70<-!vMJ1+jyfiaN2e8OG zjw17fS(>0F> zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*HjY&j7R5*?8lCcWIFbqWX1@`v~2l^dGfy@Tu{DRj|<8%#%sO^+< zhA!RO+;$J{q~VBuPx|P+y|2A*r6_{UmBJ9Rj>jIS8>Ptx!YTAX^$0Mf!-@%55wO$baju>&vFOqV|Bp9W*G^!Ojn|SY?eq9$tEqO z19&JI{8ct1I7o&oWDf;0n0dz|sXOu*4?%$pet=C`_wn7k zAMpDu>n^@2_HF}~=eGc}J|Lc#k3sQsdn5?N?<26|^0^(gYB~a#(u-h^VQvkAaT^E$ z1Q9v(*tZri279h0fHLM1i1&dpMgvno9y*JNpgIO8Zg`taBk&zelL6V zcAX??3!q8FzU-lYFZ(O|^Xzn$KGy;9a#_o#EX&rfUtXp;qNkq5kjrB6O}1WtC@!B+ zLB7?F0RjHU_1`bIm&7qx;v!-a4V4a0(PAM=U)Rh*jYrg3IWnSc7b{y><~sdP7Huk5mQbTcDJEEEOEQV z#V}l$NCHj?AaBn=SFW6cF`1$}PFI%*bYzC^1eUzDb(j)Z)}|Tf#&OHy)%c=koCuM` z?|WY&+_1pAxQp*T{zt*6!XOwj>K4%v3|&CFf}snDK`=A{+3N~MBOrZ(u@jIU!Pp5% zk6}64(T>cIKskxY2Tke37PU?nk;Z z3cqmdm@Q`>dIH!W3vC@J8%}s|&G2EGZX!Bbrd>_h)5iC&3j&@|;~eX4Wgxra2(D(# zdwp#t~}XR0tmVQT)@GVUyi%F*eb1?p-?JxK-;Vu7>R?As^0aJ0kBm- zU4`lo)Y=Wraop$$tAJMXQvkWl)>$bYg#vKf3;A_%3?l3pAHt%k+7B3IG5A M07*qoM6N<$f@U4%(EtDd literal 0 HcmV?d00001 diff --git a/graphics/pokemon/seel/back_gba.png b/graphics/pokemon/seel/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5268657f584ad43a372d0f35c78dd2cf9707c891 GIT binary patch literal 581 zcmV-L0=oT)P)Kls#|TFc5|Xh;sq5nj`3_*|2 z!A^VaF<#mTpt(4bBjC<}Mhr)C1?(fBCSb$g+e_eA1e)m`fmqD|>Ig8=&b;EJKobsM zo-a4yDV$@k}+<@APj~%0U4^Uy~EQlhA!j`Rpb@U)unHLL(dcm zv2<`Mp{%7e3E-ExOY6;_jKStp>hA?B&9lfg<^U@|$pDCwKroXLAoAp*lRf6(v}{_s zQqLEqa*`nBOaQeOLs}_Ium=A~<%n-59*8KJ1_r>dFJuIE&{5n#zXwvpD_EQYB35+Fu4TLM&KOZZkeI^FeBPP;x!q5Q z+Z91snx7E~++1Q3e`p{dmZHpQAjmN}&WCgp z$u#e|rZA~t7b@IvcVJ@2t|Zj~M#T)V(PU0-PfFS7GeG!w`6RcxN9Oz?6Z9EZ{2z9N>4A>hzf|l?fW~I#R|A;J?PDmUSAy`f4ZI zR@8R-wt-zBN9bCh19cMEk@t~+8Ugq?1zA-psS*3_;~i&)Xj4bZ0-)64(5Q6$-!`|8)|xz%Z_O2`HN90UyEe}p>QeK0BueH{{2zZb%uaB-5uly~mtPp* z^M$w>(261gG?427BM`wLAB{P{D#}ua$(K0{V@baN{QHtqc`}on)6D(%`c!ff!eQo; zLpaP#a!7}nN)F{PGs&SGW+pk5!^|azbeO5+{Jz6X0piJ-OAg^EbIEb%Z|S56#A#l+)mfd~~OT>>1X#6oq! zEK~JJQ`cD6e)%=6GXhw#g3)9I;>{#a8%Xe7o8TUl(gdCVTk#X%Ls`cu{6GEx0000< KMNUMnLSTZ_u#a~D literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sentret/back_gba.png b/graphics/pokemon/sentret/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..97ef90a8d58ac29af1b34896a01122dda9e04475 GIT binary patch literal 549 zcmV+=0^0qFP)EY{JW|SavfKgJ}wSNv6jUV0m^+X zq_Wr#0MbVJ3?vl$VW2Fk8tYLeh#bs-jB5#02h5-a>KZd3H%ht!B+D925Wr^wFaVJH zL_K(X$Wh=#DFp!jhUkvag$1w>0V3Ks0JB?+XzKv*gc~RauxC8~ILy!%TLxqhsxG=VZbr^8kAw;xH6y&X*`~ zmnUhS(Ey9s-fo5ghlLX02?mUUEJ=6S>Wl$olP%JnyFR1O9ElcbNCsXp$M>)?{}LEo n1*kYlbPJ-^5wO`1@K@^#<_%K;00000NkvXXu0mjf6h`ck literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sentret/icon_gba.png b/graphics/pokemon/sentret/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..560b38d44a955a0ba48d50621546625bb948b0c8 GIT binary patch literal 363 zcmV-x0hIoUP)DV$gZNN zLJnyFw}mCFt+kzCyc>Wn6lYT7>~Io3FFHs zNf1uy!EP)EQ+M00001 zbW%=J06^y0W&i*MPDw;TR9J=Wmd$G$M;OKj6R;(`gyNhEg)kw9YGq0mDH`C~P|ndg1?>v<6Re~!P}J%IJ;9)vPE-2?b#^7!q<=I@hl7ulpe zM3lwTw&-&l$8Sc!DO)%zwa2u!5F(rO#1_v+YV?RwTKhEw=u|f5&zR?d$*mXmsY4pBrqC9I**?ZnHgIZfcSsZ_Y=(T=Vpw|SiH#FiVNmP*C+M~AqKgVe5ZJe z=i>u<@lOsAf)fA@E+!hc{m%nnR0KAKBCPiJFEfPXunq^QJLjWD6X0gM|4S$Ub3iF( za$obxw`klm>TmZKsy^m`@?j=tUk$d<62blgnnryA;ML%gE;Z2%5D73a-2qbBPlMaa zHs(YCrl;Cvd=cwsKFMetfR>tyT20zO1MLbnv0j`ZqX0bfE|EEfCBQ&?psi8!nr;u- z0RZ>Ts=}@d06L)Krlw{M`z`=>3x4@d0-!ePTV_mC{}?8`279eSsfQB@7?p80LEQ~I z$Gezco8^Em0vg*nr0yEj=mM~j?*`J#>>4ax1BH47lqH~VoN@7axUp3(k*BUIURzXQ zdt6+HAE>VmMY_5KJUn^J_#K0d5Wj=OiF#)GM``Q<4FNCK|Lj zLRV@FGNCNS0DUi8BxBEa>)k-4F*rnqjp`cRrH%}Aig-e<6ffVr(b%Q6k_=$IcPU+v+K8%5|Mo3gT7Q521^_E183?R3{g|;`vhnvee>xW=AoSiJ8_YBr3=Yte z2!t8pQNujAKMuw^o}`1Q$`G&)9u?~M&7BE&15y>qK!LkWslQOEo92EF-l0tipdocFzBC4*46*$qGuQ}B6USzl!VklrZ*V7<2JQZ|!wOETcmryx;4 zg9Uobjd=`rJ^j!|GXQQ81B{utvH}OVIiCf<&T{8I0mSxxYlbV#V!eBV4sh1_f#e+A z4S>DJMWr47hE`<&dD4~P06&i6L-<`6z>hoe;WXeP94GOi8vwI5;aG?dP=gGBw^z}H zBt9V2l7VFaQbK$HKMZ%ntyJvqOsKh4|2HNx(AO z(WqM$;)9Rxi$DVuz*p@62;xI4JhRaN^XKV6hdWn`(m_kIy)6bM@cu@5e5hZwE3_^H z9|g`^AJsyDR4CZ50JK7DcHxBbztudqY4JR@_CoL83i1W5LcWjz?=S{DzBn*n5!mXu zzw6?_{Q)V9KqW{hRL5H2+JSd>Wt=d8V7Kl?0YnBKy$IuhroF-a(=^N%*saF#L5>G; qet1Iw`4{=&Ot1WqdY2#mqwx>6IJVDrRYs8j0000EQ+M00001 zbW%=J06^y0W&i*KBuPX;R7i=c(}fjJI^8x;W{u8vulv<2a(0V&3x1M}_+ z=IOn54v^F@0me(X_2zQm>ok`jI@yrZgW*D6U8y%=H%ZzOSb8e~4=sM{FTw#qf=l?M zLCBi|K!>fmivZNv;{b`tcVS|H!2D{x#euvA2bP41E22Y%)x{R=VCDh=f`Dw}>Kfei zR*V*HBcKalFa@Yh!|0WO4{4o{h6FYu)o{VW9&XKn7y&&8;_KG{w0h_6951J literal 0 HcmV?d00001 diff --git a/graphics/pokemon/seviper/icon_gba.png b/graphics/pokemon/seviper/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ce751ce33d198be1c25489ec7dd1fc6ad8020bc3 GIT binary patch literal 368 zcmV-$0gwKPP)DV$4YRLDvHP17dQ?vY+dB&Gp)TjQwEr9*kX7v{hAyHKM7ihuZ>T25@p<5Qzn$>rmtb zIsmxRorXep9wg_KL_w8WdjO_F3d}^mf};{8p^XEhR=LVBbHL2pb0j2k$3mTRlvqhW zI&eh!s-6KLmQx#D)*M{w&2vnxWSfBQ*uUkYAU5Im7hfW<_!7YCOK3X#0$l`*FKnp1 zAG0qI`C)yL5cy$!X;kEg^`*HO;`}haObItj?}zba>j&KWy&s3K`|$?bgoj^zv3yGa O0000tBQ88QUp z@vollg9!eNC$iu0RbaK$b%#* zaQGqyqFu~WT0z7et3b9h%rJIL`5%xUj;!a#5o0c@NIwaYl~s`cP;?6OuI4b&xe^5#uH9_?5h?{$no2| zXSk4>V07%c3Sgi1`?Ee+6jE-foWg3Sb{{loVT@fu%PF-F3G_ce6*xsoWu*x0&ZNaN z0bo)JKi>*F9wDdK7B0r#4&nJ23t%vxcYr{GsGMyUfDjVE`|2Ym>Xbxyww1*?67g#F zHA8|(se~=#)enq`P6`u@OO-94J`nNh4~(_IV{CCS*_?*`>V5V0!hx|IhhJ_@@aDve z-^?DptyTw2YAk<4Xal%&_hGYpdoYsmmNIC|I+;K0wC=`T3B1$*_Xn@*C-G=A!YC|h~uSyM;o_pO?w~+NBTI3b3Tb8ZGmfL^c}2~?J{HlbTit};gBWo8hd1@ z!Hx}p)ieRwt_c_>7ik@i#>s$f0<7dg{wFe(;FJwOK5-}S0XSje(%u8eC$IfI0M7s% zgo$^7sL|M^pFC=Z7;cLaF&$8Q06`)E|MSO5adBa3*7927e9`Q?ZGdRj^8NrqDHpqZ zazps&oxDF_S8%S4Up^%Z!T!<^N3~0`l83P}uKDHD$E&#S`*?SEAJu9X*MJ8OyTD(y zujQ2`tArZx&T{{(2AAADX#ooqo}X?5&L=cnrcYBEV$XM{TUF-8DJbLOYLqrPF10kE zD+5Z)KF4xsg77w!X$nE<|-&m z;R2BZFI*4&Q*lnhtyd0ymVmepT*TL%I&p8Y4l6uYD2Oq^i{BbVwA`1hf>+x4ZW?Td zaCiR%QB+46iL{Z>Nqq+p`!GUi>C=fK<%6)r^PPHTMQARu3|p(AWDvxi-YVYdj5Pop zQ@!3||2MRswdjTCq6QRjQ(TywL{a_bxMhRCuD-Qk`k{mA?_M- rG)+MEUjv7|aWY_=0IP0D@xSPAX}Zj(A&=?>00000NkvXXu0mjfhBh06 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sharpedo/back_gba.png b/graphics/pokemon/sharpedo/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4e011968bdc4e4609b3ff296752974713962757a GIT binary patch literal 676 zcmV;V0$crwP)+BQeXuHNKMy@BllUG@s@a471}0R?oCS;&^(H*bbBk{NrsfCW9XY6-CKmVj?* zz!;OX$ZTCFEi!9Ny2ksuu9G!hYhyp90j-mx@PJO$ARtwPfK-iFW}!xA7HVYD1Dhov z)kMKdB=!k{d0?B+v!xm|iA0TX&cr0BLaK>y&QzDBUKkbELzkDQlLDB%Oj$w5id~#e zcWrxXjaIXksn0EZX(?{4)oL{XXc8Ok?gDXdwH6bDFp1x~4uos85@!Zl`_r_c2MwEZ z0}9vP`#S}X^A@}KjP@8H$3P*+0O=rqjC4H*a8zISG$4x5U5tiw4`hV|z|)u3OaZUU z-HLIbD6PHLlK>FK`X}oEQR7_4p-|=^o*2t{XJDr3esc;QSRjP1r@AQoN5yGZNQ~R_ zdf|Vt>g_QsGw0<@_gDM<`0?<}kg+i7wcQ-5=KzTM_V~Ao%jR-O2SGR1h(iVOc{)Nb z1MujC2ETd$FilDtnUs=rxT?g%001Zz4Dd^^s$l)t12=$)-a(+54C_H)w~9a$9lG6x z1?_hG?wH_WVh`Y|*1M;!L@wP;mo(%T*up+OZf{(320$_B?2mIWj!@`ocwjGGSA&my zFiI literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sharpedo/icon_gba.png b/graphics/pokemon/sharpedo/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d8dbc26b2a309fcf9ee279b09e9cbee51d8d1250 GIT binary patch literal 373 zcmV-*0gC>KP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H^GQTOR5*?0lCf>WFc3vG0l9+*P~#>Gcmx5OB2&b{zs72Ljkp?- z0D;`lX$+hyng$G!N5caI`5hm=z~kw4-JgpI4Uk`bwrBw<5Ib=SoP$tOAi=G553y;(*gO`K~{6%qefl3Hr6& zR|}pt_P-LFvz;0s3gm5xS75fJ8+?JU^)Oy&s=qNJsBOqjO4g&QT=So!ul00000NkvXXu0mjf!rY@! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sharpedo/normal_gba.pal b/graphics/pokemon/sharpedo/normal_gba.pal new file mode 100644 index 0000000000..3db40a6016 --- /dev/null +++ b/graphics/pokemon/sharpedo/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 255 156 +57 65 74 +65 98 123 +65 139 148 +148 189 189 +213 123 131 +222 189 65 +255 222 98 +172 156 180 +222 205 246 +238 230 255 +156 74 90 +238 49 24 +255 255 255 +0 0 0 +106 57 74 diff --git a/graphics/pokemon/sharpedo/shiny_gba.pal b/graphics/pokemon/sharpedo/shiny_gba.pal new file mode 100644 index 0000000000..11b98e3bd6 --- /dev/null +++ b/graphics/pokemon/sharpedo/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 255 156 +98 0 82 +131 0 115 +164 16 148 +197 49 180 +213 123 131 +222 189 65 +255 222 98 +172 156 180 +222 205 246 +238 230 255 +156 74 90 +238 49 24 +255 255 255 +0 0 0 +106 57 74 diff --git a/graphics/pokemon/shedinja/anim_front_gba.png b/graphics/pokemon/shedinja/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e21ca56ce2112fffb7d014a1c4af28f6c46ee567 GIT binary patch literal 1073 zcmV-11kU@3P)BIi!Ozi*qSbN+|#U000000001US}FGCV*mgD-rnB5y}f&Tdk_#1oVc zG8x_=E&Q9(S_3D8hPB+(-6_yL4B$QX{}8LzkV$z*Nv(M#oh9f}A7G2{_q*@jQGmaX zvB&lO*Uilp{krOt2Ycz}rf>g058WPv>uUE;so&!MpK?64DN;QEvQ4<1u@Gc18;CV_m0I>%$Z>5iba+NiQ%n6_w z!fhr-5Cgb|&f?UYAYu@MizBDLhH*^?G=K@rQ+gL|fQeBJ1hU8o%eeVf(3jz3O%zK4 zoRgN$)-@2!i_?q_>L7+lXNY-GaFNo>a@)klM@jmY^QC?h$1Nb^ygwLjK zmB*5X7iE}YrOfSHl-)WTu7AfUTHj*(iU;DwPf_$s+7Gb1D3V+RJtJs~ z=rz*Y><8H9XFTPzex0!|_@eKU2M^pns5AC0{c%06|7_{lAN03_L+JMsgM;wR`Y`CR z_!sD@4^04{wSeoxlP(}n+POM7)QY-*bO0p$vHQ^E%Vy%$>-tbYDyB1W%*;gDH4({oQbY}!7hCg^kO=txuQexg|S>8XzHAJppp=GY;ErlNXrl$AQW zn+7ZfN1VitSfx^~2=GCP#_<-|=t~}yB7Lc70?J<_SYua8m@I5Rkg5)MGkGl+Vh2YQ zoDv+a0rQfgq|C3Q7c|t4Zc7nB6@{nvNJlegMriPung>k^Zc11H!VFH=tAQ9)TDJtM zLJhzoU{rUU3z^n60-8r?K<}Kz$y^c=8alIP$+-sd4a_P2W!Q@DeBWWfEl#=MdFy{Z z-**@}KjY%ABXlgG`vv;*GYoYHXaV~U6UZEpD#oTGmWFG@kkWl&<961W-b2hJ<-Z`} zZrK@Z!!5jxUh&!Ou{`V289OS&zo}#7w?SVxFYIs~Wc*jVqi5|b5)5tXQh9H-9?4A- rV9{r=XMV#60mhy#AJ!k&|9E``0i90h<`rB600000NkvXXu0mjf-=_QG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shedinja/back_gba.png b/graphics/pokemon/shedinja/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3a5be7db4206ae9d3903d889ddc0fd55a94415 GIT binary patch literal 763 zcmVBIi!Ozi*qSbN+|#U000000001US}FGCV*mgD-rnB5y}f&Tdk_#1oVClh1D2KoG`P3O@9}VO*SpZ(iWgoYF3-)Sd#dBbAel zStM>z6Z?e+5+hu2veYPXuCCl{0KFdmnOiy&_o&frr{b~dGzP`pombWePeE)j6&ow|d&$Z{K zMFY@|ak$m%uO4T9Um*w0Jxi4()a}W|;n=w)U0omP7jVrC9}oC7?lEC2^;}EEZw+|M zrb9eThc1AZDy4o@z-QGbvjF@t52fTh00_`P{j7j1rM{!d7_3QXE0fPn@N9H=_DkJB zHcf>A02T+}(s2d=wq5H5VB64tkHnmF{Pe~EX|L893(+72Fo~F<&c_ZwLnp$9x=aMP ziQSHNa7PYQUOXYdIR$WnN{^$;!9NCqLhr>`GjecF446?6mjpbK#nA7#Sk-H}uJmaO za8CgBc(-z=Hty1|S8exPIRS`^a`<3^Dd{mv;G$eZ6(NpIvq*VxxKPy^tU`|*3JGv{ zEJIaWxQy!z=wRDJS&u3u)IbzfV?vrXHeo>BVzF2dV4_2>y-153sDqcF#nGw)@Z^}r zTr9pKFpzVAhbAB;n-@<}7$ET&ElzgbfpV3=@6p2vKc47CiV)|(XIOI%RtvyEyc@70 zoM9O`8V43wVF2?d4}oN63BLsxp$K5PTyvQun@91`0$3<+q!216avd#o$c^1*I$dz2C7wBIhz0g002ovPDHLkV1i(BO??0W literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shedinja/icon_gba.png b/graphics/pokemon/shedinja/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9f400e33804b1d5502b1579120d47df42e23b816 GIT binary patch literal 298 zcmV+_0oDGAP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hs7XXYR5*?0k}(RyFbqX?0{i@eARVO8&IaLJ!K=YIT@AsihorGR zc5C}LJ^mN^Ab>BIPP3Kg1eOUv;W20*+6KLXR#4Q6JAo-q*8A?Z6Qq3+@r7hPK$HfM z5%~a{6H#Q+Gh&W5S9+={r~^~07*qoM6N<$f+&!H(*OVf literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shedinja/normal_gba.pal b/graphics/pokemon/shedinja/normal_gba.pal new file mode 100644 index 0000000000..1e1eefe6b7 --- /dev/null +++ b/graphics/pokemon/shedinja/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +213 197 65 +180 164 57 +164 131 49 +139 115 41 +82 74 41 +0 0 0 +0 0 0 +0 0 0 +115 90 41 +246 230 98 +255 255 255 +222 222 222 +189 189 189 +123 123 123 +16 16 16 diff --git a/graphics/pokemon/shedinja/shiny_gba.pal b/graphics/pokemon/shedinja/shiny_gba.pal new file mode 100644 index 0000000000..7e7ae66bd1 --- /dev/null +++ b/graphics/pokemon/shedinja/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +255 230 189 +246 197 156 +213 164 123 +180 131 90 +139 106 74 +0 0 0 +255 0 255 +255 0 255 +123 82 57 +255 246 230 +255 255 255 +238 222 238 +213 180 197 +131 106 131 +16 16 16 diff --git a/graphics/pokemon/shelgon/anim_front_gba.png b/graphics/pokemon/shelgon/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..062ccf3a196337cbcf9d38d4a79f43a32519e987 GIT binary patch literal 1028 zcmV+f1pE7mP)fm?WN0W&|AT7D(EdAt{1@&LP7>Ie zicSadDxJU~TXYY+bjc7X-8!^%bz->Iba6t9`tBq-(VgT>r4;-|y^r26*?hl)!8ZO* zQ2In3_;BOv03szDUS|MB!utppW|(In`UnOEs2ae#=WqcQ3c)dW+5<3Mpr?e3Ii?Hr z0F2>`MV%-1m@cRpS)J$hB5Vzaj38q*(ZEa>2-F_@N5={?1&Fk2lXd`j2TVnsr%0gQ zpelescG@Z+04}Q)qxuxnwB2C=mpEBd0D+_hIQaq};c`s@DEN76hA2Lx~kTyw7((gbjbG(sS10HcE{5d!E# z>5yX+7~oG`U9bk`6AK9LIew_5Dsg_-0Zgh3g(<;2jV-{TtBRm>d~!_9B^2jB^R{=fuwC9 z9L~7bD_ZAo46Ef(G!RO!!d&Mii1r~I>@XRZXi=2*&Cp^9!(l{RIgA&mTlq{m6o`i= zpe%}#=6sA<%_9@YFZVy9!}weSMB2de z8V$ykPG>|KGiVdzVT&u0U^=+941_W<-oYzB5-QzcAVOtgyhjGY1kj_93%rA90884! zG>3}^4>Pv_M;pPSZZQpPKp6}u(h4YT`E}@hbsKlf7;NF%X0)p+srYCa=H?Qkp{|De<{Td$%V+3%3$^ z9eyN-bm=bRwS7MvP)8AqK)`&S*5Q#7Xkw$z`*PM5F-h-LEl0W8UyBYZv;Ly z21NYX?O^L#s0|3!1&jxRfzz|jI!73Q@**UZ(AAvV>ojbLa=eJVf$C0*9i$PUT5nAn zfs}ly%SlZa$h=%q)&OPF0_GfBJ=X~Y02l2IDC!iNNbxJ7x)OKcg=en;8QvwzeK%q; z+OhvT8W0tQcQ^?!7hq-WF&a1v_nEU~Bn)M5rKsHu8D0zE#|1)yr2sDV$@lD!UsKoErQ2{0!;MD76$J3ThmCMNn^zM}D`-AHJ# zaa~AQ4q7YR?+JiehU!-qNmtGP7$%+S;!}HGtbrGy)h% zZeA0BMUo@B$5jUdXI7Fu3^=|r>$%2%_B>6b#@PMuEVVEqv%)Bt7e;<9jN`sAlYTJo fW7)-c28Q_pD=K*1H|a}600000NkvXXu0mjfUC@hY literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shelgon/normal_gba.pal b/graphics/pokemon/shelgon/normal_gba.pal new file mode 100644 index 0000000000..a5abe063e1 --- /dev/null +++ b/graphics/pokemon/shelgon/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 246 148 +74 65 57 +98 90 74 +123 123 98 +0 0 0 +106 57 57 +189 90 32 +246 115 74 +82 82 115 +148 139 180 +205 205 205 +238 238 205 +246 246 0 +197 197 0 +180 180 189 +24 24 24 diff --git a/graphics/pokemon/shelgon/shiny_gba.pal b/graphics/pokemon/shelgon/shiny_gba.pal new file mode 100644 index 0000000000..3d1e1a361e --- /dev/null +++ b/graphics/pokemon/shelgon/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 246 148 +57 49 41 +82 74 57 +106 106 82 +0 0 0 +106 57 57 +172 32 0 +246 82 32 +0 115 65 +74 148 57 +189 205 180 +222 238 205 +246 246 0 +197 197 0 +156 180 164 +24 24 24 diff --git a/graphics/pokemon/shellder/anim_front_gba.png b/graphics/pokemon/shellder/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..99cbf9875f204b840550e8c1dbf43818b0c4086f GIT binary patch literal 733 zcmV<30wVp1P)nEr@6a+C`Y{UjUvFHON?ommL0y;TE$LL@0^WBj$z%Po1y!yD806V{4kJbJ< zAg%y0;yfx$Z#}mXjF+?CI%pysazMO{1WHAOg0f}+Yxbp)fuJG4EE%hXEMy=;3vPym znih}}Gyz--A@zMAKqG|%3T2e05eO7!&D=hF#+6FVo4`()63=2j~^U&%qeIm?*j1i#xYkZ zEEcjpJkkj7bM7B;lrt*b(vrI*j_vXhfki0@bH71w}T)DG!mpFgd70NP>^)jrxbpZPig?JwW@ zo(7S~dkTLtTD%1GwH`8L$dDn=A&0ptQF%pgCuvTfYUR*MjG0Gv$<;-c21QYjGpZFY zN2enMMajr93ey3sDZyo}q6A4`{6Q@+(`hgSn!`P;78du^K4=h$2(x1)NnOI0VF?C! zQx+-(4Z&a#v+m<=VIotdpBzXd1C)723*u7?S9Jhkf@C2Wdc6KlDlr>Fc3vmSgnB+`vXIzO~D~sVZldh7$Vu~+r4qr z@*8$Ik`2;%s0bF@WC|9#M|bWF*>yklf2%+50F&MW#+?qZ2Z$YD`YzB*{CZ3RE}x1% zr5NBd;E)nhS%J&%kMtCZthE$)RUf4Aw&)mwM2+Ucc13P^z=mzPyy;; zmE;cv5VwqvK(B#;H6zdZu*eC(fDqya*zs2jm;y+7A0muT=Tr|$_LdE98RtLATw1^s zgALF)=SiHJT^5HsV8^@&RRP8bF%&tvIdg<1qH6$<6faptLu9g9qI2$2MPP@x4yoS4 zSae_Qi4vmn+g-be3+b*}RWIn7x-Fveb}j~0hwcalmDuju#Zz)^hwdook;?TVl#eI( z(19E@269mJJKdUja%SQ_s|Ly%Xx{Omq5h1 z2Egi7$2CGCs(!bVv@-(%RoT)hr_^lXIw0$G4-~@rOLtsSeOs^M)`0`?uQ^u0PyPG) Y3+%DSwv*S#u>b%707*qoM6N<$f)0NP1ONa4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shellder/icon_gba.png b/graphics/pokemon/shellder/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..36ad59dfa02c8a7a04e8b9fb2676a5ca2c695af4 GIT binary patch literal 295 zcmV+?0oeYDP)DV$!Utg&oQ+XA<381E#!3d~^MNLrkrU)(AF_qB z2LJ*3$ZTPfFM7d|tPxNUmlIh5mD_kIBx|Y7h)`tcaG$RZyqq3m_UJlu@v>UQ&i>Fp t{!d?=e#L$I=dw*-;V%8PXPf@#^#qRrtK18EXU6~l002ovPDHLkV1f=yf0zIO literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shellder/normal_gba.pal b/graphics/pokemon/shellder/normal_gba.pal new file mode 100644 index 0000000000..a7c9165498 --- /dev/null +++ b/graphics/pokemon/shellder/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +213 213 238 +222 189 238 +180 139 189 +131 90 139 +90 57 98 +255 123 65 +205 74 32 +123 32 16 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +106 106 106 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/shellder/shiny_gba.pal b/graphics/pokemon/shellder/shiny_gba.pal new file mode 100644 index 0000000000..20f597524a --- /dev/null +++ b/graphics/pokemon/shellder/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +213 213 238 +255 180 65 +255 139 24 +213 98 0 +148 32 0 +255 131 123 +238 90 82 +139 24 16 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +106 106 106 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/shiftry/anim_front_gba.png b/graphics/pokemon/shiftry/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..70eb97348e40787b2f337d25de108b5cffdb1043 GIT binary patch literal 1150 zcmV-^1cCdBP)Z@-Ir;I40{$K<+wd`X`Fi0#WqQ*v zUhtt|oV-ofRtkn;JJdIf(r5fQAI<@#Hq;#o5={UGe599cyVQodQ>Fe2Y4d>d3%%|* zC9fBPmRq)sF@T9YaNgFU|!nxyd&PT!N%y0=%txAAaH#t8W z1;;wD-Dr}vUJtgQJ)iU4t6-*y91z>yz0NvK))!~3*&S3D+n$A|fd5@^s*PDr1F1Ry zv^xvX+q#W87{A+?1@0Ir0chT`@WB*tZl(Yj-@*ytJfiZI=`+Cm46_*MRS!}C>;PLl zVvN#F)y4tc*LGNSdOeE1kpliZvqJ5PtG8f$q*a7H`LO@T`KFD{cY58Z&>u+$ds6-U zeBH-*V-C1S2=-);Pu5`^(k|#eRjG+U;(qKwgb8VBeZ{?M&2#&Fb%+~ZcQSD(D++00ppUX*K@SnnXsn-)G^G6 z@dsiSbfEMDV^2*~v#=EdGhXL|Ab3IAjP;@7$$FDWudi(gekOZi_{$^)uvf=Wbm3bo zsfSP>gdqSHf!hrvu@+oztRIG)4_@uPe9QVxc%2v*>lh&y;YJMn4nOlDh@8BcScFK4 zB5J_2Fi_HDAjHWl5}rI%07#ff3c#BF^78y_@6F)h2#yiyAXGaP(o$5LnlRwIe8_i4 zmTD2X3>*;%Z4{;g^4~@W*jS)a;#BUo1g-#(Hh}a*Dxi8ZIdgVpAO#-7#Vjcxm;w;k z>8Y1MCGe4Qe#-hNsj~~{0b@0WEqAz*7)TedRJc7@WPMvURc&fyf;(GHAF9}ig{jBbIxkdHt;km~ zy}f!d2dv6-Fn{}B0ERG4{V1nbbbW|2fXp3?)$0-eqqWQr%lxp+5C6~nAcUEjANGZy znfXBgkd+@Uh5ehEl^-s#_?l$php#aH^;uSaC^yOX&oc7^nDS{xet^rg9%SSP6)-+z zo0R1Tyo363EIAeHl@f`5|7*{GhEr0goBKluc^GFc5_u_W-HDhU}U;o2&|nHr^VPwJ~JCyPm}n zhIh?gAheJ|cj-vBV@Wj*blVOj4$PKCt@l0^AcNm$7G9n zi5QTw??g=HH_(y^gDmKAA}{;kI#PNM^VuzLnhk+C%cK*#1^Iw;x{H*KE)WN4xg%0D zK#m<9mDhz=fCf@hDrmtupXUq|g%3DIYK?~IQo47e>oM1z0MOEFQaWqv_01yq3#Nn* z25xH`dH{5e0Z^shhyEC%p;w{4pw~YXMj&y4LBa)8$^kerhtPj(yjtjSpXiO4kll8fc*nA;BFyNCZ5di zmO2R!fG~t8`;l3Rt+#=s;8EKWn&_HZ2_I;zg#q~R^3zE80E~roFzUv=lf S!ngYX0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H+et)0R5*?0k}(d#AQXl<0lfnzj*^t!!6SG9w>Q#_ZuX>9;?Pcg zB{Z>LI(3(NcR|G@AO^39XHg5D;U_!#((`yv7tmx?-zfEQw$$DkX4a&~@1 z2$6#03$Wvi&5>@!_ACas^I^|Cn>vZg7~}bTNuN2l;mS>&*0!5!hp&V5J~|nkR^_QP&C7t)(0UJ;{6#~0)pfx=HG;= v2VtZxL*mbG1a76?!}A$=B)q!)mno}d#q}U#e<~PltEH4ti^)>000000RR90(=g7_00001 zbW%=J06^y0W&i*J07*naR9J=Wma&T4KoEu%r5C3=9U%k+w&fy?L0T254AG7V2iGLl z7I};mK?H%CD{@C5O%mb-zlRHfn@ftkg`E^WFzhpAR>CCK?&=BlN8Nn-XLcmm-*K$0 z%yQ5Cvq50`n!OwZf($Z$5CF*NK$CF_0EroxL~nmG zYymH7ecgq;t;4HQZxI0<`Thi_EcH{Q**PI3@gpGGbGT?8v=0!X>+v5ziEdSoS8|EC z$?Fv*x*?wPACN!>@QdGTfv5Z{L;w@u{0oVN9+3SJxFIo7h|v}QmP-O#+>k^$$b=Of ziWazDri6t4Dc~~vOnKf}P)Z4z^_M`C%K{~V6djZnp%7EXItxliD$sVJ$iQ5_e=gK> zPT3;9L}+(`6X+Hd(fG-GwwN_lpkK8o4&}RIUVZpp1)vPjA&0ft*PMUS3~(fxjksHW zHk48OvaBC&_5Pj3y4rds|Be`V+sewyYFIWu*!mbG1a76?!}A$=B)q!)mno}d#q}U#e<~PltEH4ti^)>000000RR90(=g7_00001 zbW%=J06^y0W&i*Inn^@KR7i>Kl(A~VFc5}guZ7aY&KhFu3|#`&sjDH?6wnZmlOu*U!I%G3reeqi^ zH>|a2M|2lI11#hvKn`hVP3Nx%eMUPgM@|l>4nV&Kl8DXMksv{lc7Rk5QdnSO9Ew>A e{a1I@pVv1!qs%%_DbDx+0000;M1%lai8NJv*8R6p{6G zaSY*@nVjIj+QZ9phF#)@yuk)l0|U#39V-|Z0vnh^7yasq11e zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*HyGcYrR5*?8k}(RyFc1X&0tuJ-kIO(RKkmRp?-4B47o0L+E-BIo z42~=#>69)cU9#P+c6C=w)BJ$ewVt&d?sZ_WRYdnhRz{W{=#4Ng2!<1l6SW73jy}Rc z8mpPnfo|mpa_ETiDcW8s$RKxku;JZu{zHN1kujCM9E`36Vu;ofiWqvBw!MD-uMj|@~NXDFog4zw?ts(u^h4i!#p)Y>H}V$t@?-Y=G6SR P00000NkvXXu0mjfYXyqa literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shroomish/normal_gba.pal b/graphics/pokemon/shroomish/normal_gba.pal new file mode 100644 index 0000000000..97f25bdf66 --- /dev/null +++ b/graphics/pokemon/shroomish/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 148 139 +98 74 49 +148 106 49 +213 164 90 +238 197 139 +255 230 172 +255 255 213 +90 131 74 +123 172 106 +139 197 131 +164 213 148 +65 82 49 +172 197 131 +0 0 0 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/shroomish/shiny_gba.pal b/graphics/pokemon/shroomish/shiny_gba.pal new file mode 100644 index 0000000000..a0bd12821b --- /dev/null +++ b/graphics/pokemon/shroomish/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 148 139 +123 98 74 +172 123 65 +222 189 123 +246 213 164 +255 238 189 +255 255 230 +180 65 49 +222 98 49 +255 115 74 +255 189 106 +164 49 32 +255 172 98 +0 0 0 +0 0 0 +255 255 255 diff --git a/graphics/pokemon/shuckle/anim_front_gba.png b/graphics/pokemon/shuckle/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..74251deb0eae198a17b68753b0248c03240541f6 GIT binary patch literal 796 zcmV+%1LOROP)qh00001 zbW%=J06^y0W&i*Jnn^@KR9J=WmO*P8K@@-$y?M!_MidVrJ+-GcD1n|DapE^s-we7=TQ<$wdN5nnR}wAK@R&jW}b+(6CKImEiVN6kYX*hRz>tRJ!fRdA0o zMcE^i%rtfYq?GU6K%yizc_2}y3QP+c1_8`kQ*8bLu(1L-{O5gzDx66*|*0-)QUyZ%$<3J=iXze+*Myu&Evw4i%`Xt^Bb z!5_#EtO7CfhpfXu9{d4>6b`|d`Geg+X8w?^I0fS`{o&&2`va`-heRjt4;CQq56eKN z7xM?pO6BJO`Ge(yiTvSn1gQLShiD>U(AVa()E3dI4q8Y@rQLh a_4p0%(7E_IVhAe$0000qh00001 zbW%=J06^y0W&i*IVM#Kl(9;~Kpe&|#4U>#RFoD*CNYheKb%Y{EhF0J%pnLLR_C9SWtx^?%Vi#QyIlap|{yKfdq#A0&kA^gjx(#f#Bb zO05jUp3++3z*Pe*&d`83)&RT30CxdWZ1jKugBZlv=n?A}Fi2n^1aR3#HUO*m0kDy- zC4e~J{yE}rfE&yw&b{`deH4IqfC4;#kRuHYEr6+^sW1X?Mq~z}$PBm|FpVUK0GQ4s z7dAkTxU-Hh0ZoT-rDGj&X&KSehf zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H%t=H+R5*>*lCchhAP_+L0{DIy+L;^VM-+bmqAQKLxJooM7C|AM zx-{N$+~e*Tc!b<5SeQ%TL6r>(plD&BDj=Ym2}=bC^Uo3l9?H7s>yX%3L0oE~ gJRWGa469tm8*qulQDVqLYybcN07*qoM6N<$f&^@iKL7v# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shuckle/normal_gba.pal b/graphics/pokemon/shuckle/normal_gba.pal new file mode 100644 index 0000000000..ea40c0be49 --- /dev/null +++ b/graphics/pokemon/shuckle/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +148 131 115 +115 82 16 +189 139 41 +238 197 74 +255 255 90 +255 0 255 +230 156 131 +246 205 180 +255 0 255 +131 32 0 +197 57 16 +246 115 57 +255 180 123 +255 255 255 diff --git a/graphics/pokemon/shuckle/shiny_gba.pal b/graphics/pokemon/shuckle/shiny_gba.pal new file mode 100644 index 0000000000..30126f57c4 --- /dev/null +++ b/graphics/pokemon/shuckle/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +148 131 115 +115 82 16 +189 139 41 +238 197 74 +255 255 90 +255 0 255 +164 189 189 +189 213 213 +255 0 255 +24 65 115 +49 98 189 +65 156 238 +139 205 246 +255 255 255 diff --git a/graphics/pokemon/shuppet/anim_front_gba.png b/graphics/pokemon/shuppet/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..00629578f4e6372d516d1e616ec50e4734cf0258 GIT binary patch literal 543 zcmV+)0^t3LP)JNR9J=WmOW0xKoEt!g?lzX1)>1YiaOG6a)8Kt0BoEZaSCcW zYDx}}B1hm<;RI%8*O4e@#svjJ+9##*=Qp!EW4%;W(I4nx=6SuJ1LEBra5V#j=9hp8 z-dd{z4S+a^M&F~k_R8Q8EDwlQ8D zcp#v|)B_8c++k!EXzAONz8tc^Gdf|bvv4OiYWO2@ hR>QxlO86J)`Uan;oMqE&2}b|`002ovPDHLkV1g)6>)HSS literal 0 HcmV?d00001 diff --git a/graphics/pokemon/shuppet/back_gba.png b/graphics/pokemon/shuppet/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6dbdb186c0d8030ea49d9f57fe0f7b59e96f5d GIT binary patch literal 485 zcmV4lfP2LAP~kwky`g6bEOk9)Q)g(kUW5ZTi^H;zP62Z z1d=FWF^prSTco(}$G3m4Y5s4tHNZX9fZIw2T?14FaK8mwEvmqAo2~-1S_yfiI}h~V zs)&FG06tICs5RO$(Bc##7(hv9cTx8iLiD9UbkhbXQ7VF6RzPcSQJ7`70OL4DfLe6g z6Bi$g1F>K_M0_7=pcZVREJ%oE`JMgb-g;J%=TX$LK2x>5tSY-0iD zyoDB^TPNsW&og=5ZI>7NVAE)63HaU00000NkvXXu0mjfWi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hkx4{BR5*?8lCcd!F$_dAK`bwjKMR8}G(E+)M9Y1$K#YNcixCCo zm$=SP=j1G1DSMY^&~F*IuRKd%bejyOP}-8FA+pHf6Erjirq?t0)p0qVz)@rXKK<+N z8(TyH46^hH66g)g9)PZ?7D1-#>a_48Yx(QD_SGOxD@$rn&keE&(zp;6sX@=eOxOKV Zm^%z_a{A5F(Cq*K002ovPDHLkV1m#tXSkgohmTDLVu=wsBFfu%v?W!WOZ z+pb*Jt&66yZ_r2Zt?a^fN$+4{J78eZbW=GKX2JR9-Wed|Fjnbb%DFB9^ys%hc@O8i z#A#HI`lQp{>QQs7Rp+uV$(L%aqH(=zCefBJ|s)4?bTxAIvyF)m=B z0R3iS+CdaPzV%W7z!=bJ9`)(R3k|4YPsRG0n_8s3kiPQz3>Tp*y9 zkSfd%sS5G~qJ>5Ifrek09|%~y6y*nS%y0t*`2jBcusA;etc&wQswzJmRpp0Df2c2P WTr7!m=MF0X0000Kkuh(=Fc5`Z@&}rQuE;~OrdW!94_JB`qsGG5nWg+( zSUT7CImQSH=At~wx%l3f=aVDEqD8Nu>M3BK0PW_nzoL79rV^O$e9@L4wKLF_sj+F4 z*LH?0Du|Y(Q0f$v(;9O#m}UF4rRgX`>jUp4VD&cxL=*WqQM+9^Wu=KC@e=`(HQ}7B zIEnYO0zlG@^A*@G44gE?r}L{x0YU~M2e{0A<>Nh}a=c^I`nU6y08~!5Tr^=61rfRj z2EfGu*N7D&p*cJhX8>ICO|KijO#o?2V2z)(VrIRM4KoY_(3`mFJ>YYr|Aqv>x#08( q!0)c^7(fEp$-t%jTZDV$fw!!8p^#h_Rib{u+-f?rL)S*x6Db5Ut-ue{8SkSUVC>hP&aspac3}gX% zs0?cdh|-fAumNo`ydN&sz^UBY;dq6OF?IL|U<~B<>%N74f|e+E)wBSB;bW4nipbUD zs#~n%-8%kK;}!?r;EIE&!Hh%ULvSd3%wNSpN=CuKt+953L;i9d1qUrPJf7Q4f8awO bH}p|2tQ}{NlQyZ300000NkvXXu0mjf-bj)4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/silcoon/normal_gba.pal b/graphics/pokemon/silcoon/normal_gba.pal new file mode 100644 index 0000000000..2a48849f83 --- /dev/null +++ b/graphics/pokemon/silcoon/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 246 197 +106 106 115 +139 139 148 +172 172 180 +0 0 0 +189 189 205 +222 213 230 +238 238 230 +255 255 255 +16 16 24 +246 164 0 +197 123 0 +0 0 0 +246 255 197 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/silcoon/shiny_gba.pal b/graphics/pokemon/silcoon/shiny_gba.pal new file mode 100644 index 0000000000..db9e98b7ac --- /dev/null +++ b/graphics/pokemon/silcoon/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 246 197 +164 106 24 +205 148 65 +230 164 90 +0 0 0 +255 189 90 +255 222 148 +255 246 197 +255 255 255 +16 16 24 +90 131 189 +65 90 139 +0 0 0 +246 255 197 +0 0 0 +24 24 24 diff --git a/graphics/pokemon/skarmory/anim_front_gba.png b/graphics/pokemon/skarmory/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b0883329cea40da92e94500d6d678925a3624cd9 GIT binary patch literal 1559 zcmV+y2I%>TP)|Y9A~a4#07oEQLZCt>6)ae3=3U1*c3FaXe)yk`mLL7?;R@=7e`x(=36nzHU68 zMsY!CrUboA){RJfm&QZ9f(#XdhfrY$tYjX>pDJmd#?ylKRHK-{xzO<2avnyXHYsc* zfZzmX4+y@lvxMWxj&YKt$%@+kcnB_Ya-PgN4oSQ)=HYFb6x63)FH;FA7l4CF&e&L( zM>8PgvLJKFEJubqi z2E$@W$%x_RCS{86EJ^o{6nYk-sI(V^A>Yh*(8gE*MlA zOit5_En%60W22|>bFhNP;}BLn9oB601I!6d!T3t~^6CWGML21&Ac5h4z?*knBaF5L zJ5$I7;BM9=7@R<}0f*hX1@w)u5O9Jcp5GIYhuJ1$PH?^4b?X*^0PhpEu_*|dda*Bn zl=lGjum(XK52+XX0!TTN1hCf7#JeU796Po>=LhZ8v%7ee6oMos_PvP)bg~u<1tHK>lzHJZycq8&xURxgfiQn7}6GT|MdShki%WJbqcq32I72v4z?B0v-Oq7Ukx-ffoS(>$FRBqrxQ`dJyNU^I zYeGbT%O09im7we7au=Z#cv?+E+ZyldTmbN|J2?5MZZlIfXx$vI9*O&#k3J#Nr2@gq zq>iK0@Wy}1y^l5CS!bwDh$;kpo`kc#O5X1XYmCczv|s7d_?L}KRSKX}-jenRMkXtE zzKFi2kFqgt*8>p51>4c}az1+$g@}`vQYIfC6JOrIzNVG8vXIc+H-wY$CQZg00+jLR zN8a6Ml}g-)zot9FyyVkCZL?3JIQ>l$a#GF!zu9~D9^#Z0l3*pXMNM8x#GkZ+Uv4U~ z7LY}mq<1yK@^MXoz}U0F$AglOKxs{2rU8Ksh)KbMm>zhUb^}H-f~_dJ1Y1s0u0TLc z2Y0&xLxr|&(VnhZ1uJ2^xD6v1H;22{$WPo4rjNyd!A}cIYu#NPX~eWD0|xBLle_EQ z>Il2gs&LRUV5oAmSidz}28=bA29rMZ4-Oa|z)k3w&i6DwIAFjp7c%+lgZJcs!hr#! z1M$tzzfriC8ZdBs2suBDTeIBE59*=jFPEGjROkQs;or;;e*==vJpcZ>Lrwqy002ov JPDHLkV1kys-MIh& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/skarmory/back_gba.png b/graphics/pokemon/skarmory/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c8d95ccbcb8b6e3d76e898320d073aaa2c0ca4 GIT binary patch literal 577 zcmV-H0>1r;P)Y zD4j3YIP*C291%c8;^5LpvcC+WnL4rD=YZVvq1Z%S%-z) z_B_z(#0c*yQ@Z5=?0F!Uh6iXfK4*YxU;)I6-Mw6DHwW+;dIhg+1_D~n0(S!e!-6h; zqMPAa2sO0m8X=16_>j+*Limi1)?Z5bjKBMppbu#?{rgbRmg@EgU^l{l2v{oV%U}O{ zB9mPZsDWM>s<0mS+h?~?ppQ??Wxwi_03f1s7>VPf0AhSbFs$+Qf@h-h$#q?$6#g0U z@`1QaHQ$6^hq^BcFAxKaHwn860x*_AAo_==3?k5VLBK!|fNPnX$KTgCH0!q|6U>*7 P00000NkvXXu0mjf$w~;L literal 0 HcmV?d00001 diff --git a/graphics/pokemon/skarmory/icon_gba.png b/graphics/pokemon/skarmory/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb3106540639f12bcb2fa319c32405fb6930eb9 GIT binary patch literal 418 zcmV;T0bTxyP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IAW1|)R5*>@k}+9uMsNht#UQw?JdMe z)>2Kzn813s*&;<0OCb5_f8!BPslUADr@gi>fNMY&xvCLbV*k*%A++ozqDz%p!)@{s zxqs~q0LnlQ+d&$8g2iUQ%o{MvAYj&n*yocFco^kSLIYbus1UL}aB?{T@?1wGNY3-m zXe;5ut|ZFkS_H$+okNA*bTP*B{!Qq@RE->?=_(MyQ=;jbI-z1?>WCoqAJ_W^={+h2 zmEXSWkPX`WxnD~n8kaDG#F^1Ms9n>Roq7Am{pjDLc&`9;9Elh+UwfXht`{9e6hec@JsIT9C zJUzDhGaR(7{bO8&6xd+0AcVYK=h%WWcIy+MoMp2 zUgGB_a2*9L9iiYTAaof;<_LKfRA5C+yAe)e@Ikb!Q&^p!v2Ve8a1(qFwnc}EMV{2S z>KcSKI>z4CYaZCr5k}Nz7uwPZLd4o1r$pzUhQ#L&7%<@f#SjlhFU5m|eYhMCZpgK` zI>v)7{^9x!tYeBk9-!v|^%$uo0Ce#{*Z|;pcZ#+QbPAoLIP2nn5v-$8ZkrrIy?jt% zBIxr&2R}fd9q~RtK*g;2`L>XnQ-0tf_eY%a1FQETa~?nE2QEUkl|JVO#{ETFB!A?G zpm8Oliw7b`NHgx@!F3fQklf`97jc5#SoSMy|2;oM-M_{2yMz#KU@xqs+$E539S_p7 zy5g4tK+5adv@Epf9`(+O<#B?8xqX2!;Pv7+x|&P{1M4k&00000NkvXXu0mjfWn)Z# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/skiploom/back_gba.png b/graphics/pokemon/skiploom/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8f010fb4f2e54aafaad70b8979ec704681314b72 GIT binary patch literal 575 zcmV-F0>J%=P)Kk}+=MFc3xAsBxDo(8vWW=>!_q8(3nKM#rGKEj>!J zt*Ityf=JWkM2kf(5CoB%O~W19yDM9sAa#IDBLV--pU)wc`l?S_3;ICskqM%^_kiBH z=8h0=-XVw_i^$c<`lg}QcYcc`Mp+>DQ%6I`LnNZd27MR8+ptCSLW;g68tCcb*T7$Y zdkzfLU`NkCpWn84GYG(9nO;as;xnx@&c=aBbx$n9LO^pb(pToc_}VA#%eo$kw6 zYXRcl36bb%u!<%b#Qr(4jt2Q*%2f6kSf<%puTFv0)dZ~AdOdg0-=+)zVD#jW$9}z> z098j|IXP6^ud^dSh489vIpyP%0vrQMjhFiJKVbq7h0_ZeIb{Bi02?ZpUC3C*T^xuE zOdaMIHkNzkU;t37c_n!fmA|?Kl>1Uc z&e&y8i4)j%A7U(^Ho}`sqOFY%{3GZL7@lh_$1p+w6}6Wm@~b{&{Q=3y=8KG#d_n*K N002ovPDHLkV1hrE3W@*# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/skiploom/icon_gba.png b/graphics/pokemon/skiploom/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..90c0c8e7c31686fb3b068b187c927f2a47b7fb70 GIT binary patch literal 375 zcmV--0f_#IP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H^+`lQR5*?8l09z2Fbsu#0{KW;lCECDj`C7JAWL(b0G%`o9kQ#J z$q;)a0^|p%J+SgnQSwlrYf*0e!1rK7Use6NsYNd39(+M2FA`i4xUTY0{V`v>DR@lB z;75(rXy#H;u*ZwY=AK0WqUSaP2jB^$;D#MGAT1fzKnqGG<`wIXdP}EozD$JRh(FLa+ z=7v_}-YkXb+60Cu43L3y6eb#!fI$?-lI@c)JPX5|go%29XJhnd3~!gh@Isj1%okl5 Vl}VCz^g;jt002ovPDHLkV1fX*s0{!B literal 0 HcmV?d00001 diff --git a/graphics/pokemon/skiploom/normal_gba.pal b/graphics/pokemon/skiploom/normal_gba.pal new file mode 100644 index 0000000000..15fcce8e5e --- /dev/null +++ b/graphics/pokemon/skiploom/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +139 238 57 +98 205 57 +65 172 32 +24 98 0 +255 0 255 +255 238 115 +255 213 0 +246 164 0 +172 90 0 +255 0 255 +255 0 255 +213 213 213 +164 164 164 +16 16 16 diff --git a/graphics/pokemon/skiploom/shiny_gba.pal b/graphics/pokemon/skiploom/shiny_gba.pal new file mode 100644 index 0000000000..2dedaa30ec --- /dev/null +++ b/graphics/pokemon/skiploom/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 148 213 +222 106 189 +172 90 148 +98 49 82 +255 0 255 +255 238 115 +255 213 0 +238 156 16 +156 90 16 +255 0 255 +255 0 255 +213 213 213 +164 164 164 +16 16 16 diff --git a/graphics/pokemon/skitty/anim_front_gba.png b/graphics/pokemon/skitty/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd564a90b3b4b669bcad9787efdf38a752aa556 GIT binary patch literal 1035 zcmV+m1oZofP)g0Q&747lYC!-100000|INL{YP5R*Y5)KL|E!e%gKEW6IfE%Npl<)o00001 zbW%=J06^y0W&i*KiAh93R9J=WmO)P%K@`U)(Vi&GcNplY(HNH-kr<_?rq#5)^$YER z==Y$pAu1O)tyd1Snv@=zvTq@9F$l}1UPy(dZ)O46*;zd{CcKz9nfIIjo7o-q{|H&d z^Nak}6Y0I({O;0(muW`;OmFQkPmXVVMS+t1sQ)k-m{EX|gLQv&{4hB>ik6_eKBeAb z6%9;iMR)1@Qwq-2G|cz8-Lj%U%JRu2INXyv^I>qLs}Y#f`EV5bl8Ttz94}DS zFl3~Fx5HZKi<&$k;DnnPb9<--(0SWZfWsFpfX>^J0Q3@oN@&ftThRmGLu(e!tpAP$ zGi!D$Nq}@-RB)rf+Wu@HotF#e^_t7+_1qkAX3h-m60n|IC{UPN^YZ6-_U8&(YwnkMcn{FKL+6bG znL4&WvWT>15m9GNm&=^D=743Ls@^RX!kJ*3O{X7J?@n`60J+Vei^nw3yCZ;TqC}H~ zks2DspL+ z@>F|}s%=Q%vGyQ;j_pA*kjfUw$Aa}}|A0Vh)jvGf_y^TMh|zYxg0Q&747lYC!-100000|INL{YP5R*Y5)KL|E!e%gKEW6IfE%Npl<)o00001 zbW%=J06^y0W&i*JBS}O-R7i>Klf91HFbu~vWGgDYL-GdAZMOs$ujz9csM}}BV+1Ij z49RdnL_6aRcI&Y~{85sU73BlCp&gG1Acg$tPg0_l`mq0Q=JX!$L*E`akNaf7j_+?* z8fI(0`R!!-#16Otc7FtzBmztl4clwrH7$94nJp&sCtAJ&Y-6B>?a(-YYj~NhDuCaY z^F06}ODyLLWq4WD7N8m9MCW*1yBZjnB&I`~7fpx*mi~|XHOe45QO?hRm*bFQ0$@0v zTDBnTaQ`AIpiYyEywznnlADOGpMy?mACg2S>hOFGs7B)Y@MStn@DZRs39y__r?V9S%RAu1{?+~hF!WYi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H@kvBMR5*?0lD!UsFc5(I1oT0C4Ow*VA_+W~4l)A?>|6q`f(cz1 zDoY12;f$q!xanr>&|be@n_TZBI7GYutZPlD$VgRTk9BoEXy_QF7o}d?jBSEZf z#ucDl0A>r001ZGkcLqcNC1h!CfDG#*&d##~oG~_~LrHv4je$uZ^u*#YM^_4wj7Qbo zE0c2843!6hQVhB9f1=+X%Gd||b`YHp0>U?Yh5l?%7pniJ677-lK%%tGR>DxUcUEDv zM+#_RY-fxx?$O;U%wmBS#_6Di+4?a#ql_@F+gcc}tZ#+sd=Q9!vnL<<@dSf`p8Ivo R9!vlL002ovPDHLkV1fqEovHu; literal 0 HcmV?d00001 diff --git a/graphics/pokemon/skitty/normal_gba.pal b/graphics/pokemon/skitty/normal_gba.pal new file mode 100644 index 0000000000..0a12281918 --- /dev/null +++ b/graphics/pokemon/skitty/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +255 246 148 +255 205 98 +205 156 65 +131 106 65 +0 0 0 +0 0 0 +255 205 189 +197 106 180 +123 0 106 +0 0 0 +255 172 148 +255 131 106 +197 82 57 +131 41 49 diff --git a/graphics/pokemon/skitty/shiny_gba.pal b/graphics/pokemon/skitty/shiny_gba.pal new file mode 100644 index 0000000000..d3e9130f3a --- /dev/null +++ b/graphics/pokemon/skitty/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +255 246 164 +255 222 115 +213 164 65 +131 106 65 +0 0 0 +0 0 0 +255 180 98 +255 106 74 +115 24 32 +0 0 0 +255 123 82 +238 82 49 +189 65 32 +164 49 32 diff --git a/graphics/pokemon/slaking/anim_front_gba.png b/graphics/pokemon/slaking/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a57d3c092eb3dbc9520140c2f1e83a4b660d7e3e GIT binary patch literal 1335 zcmV-71<3k|P)4os zlCzQzp@)L!Wbgc#H}3<@FA}+p{~#9V`*ZWrR8d-<`m%p5uP8ZTl2~j{0i2>JGMyxh zDIkXVqD+0l?Pdyy7Fhu~hXnqYl)s>nMROA1@_EcNfG$U4Jf!u^6cCk*7#<*`KPIrT z2XS*^7YlMepJx>^l& zsnc%v=h|M?uFt#jroSeC;^TnnR5cqw~~n zK&mwgdQv1<;kfag!(s>pVp;qC7Wj2NeZK*ix1a3%O181o!tgc12i2pz%wW5ohaQm~H5Jz^0}*^acU0g#g~eOYEVtWg_r7 zduq79fv)MALdqRmtljCJcF&z*HEx;%p84#sN z^f4{ML)$)vo#zM)5x_jpdRU??Mj8dM@P(9Wn34jFV zA!dWyd55b`Q8k`t2G+U&fmsuMA+~8 z^1So{_2%xZz`25RmCVWG@J3={ktu(OdU`Oq$YQ7-Oq7_R2X2YC{b526gfM@Y)B{RF z{2>gS-x6WlvSPS^gl)BN2zU2($bFV+cbKAGT)rgY3?K3iZw`e_)FY*;t(A4|t8< zSe)q(-b}OR_(MO?gL(eo>cL!pV0tj$A2K)jgE7Y+m>$$SH~2%#zQG^r%{l(y>Vfty t{^04sJNW~5lRrqxP5wZXTYvbU$3L3IDt}CgEzbY|002ovPDHLkV1hsoi!lHI literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slaking/back_gba.png b/graphics/pokemon/slaking/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..50d55a957d0eb1b756af2e3495d140ebd2dcb498 GIT binary patch literal 788 zcmV+v1MB>WP)K)4y-iKokdXcPdkqvvKKwD)~Z4S%RFGADxg&Jr^bI zwHs1Fxw&dVwx`f!@Ofcqhx#V|1$O=f_#@IXuraWdPUi0XvreG{Yu}K;@00I6pPn`C zzW%G0@9Kw#cl7zcfq(rs;JU61;5=IFAtZh#aU5vc1J2JE`g(WEs%y)!6h7x47W<9^ zmWqfE1*nd&1dae55%DRGul&Um3<0*lZflw+0FM^lp#j}302|LWIY9JoRIi=@q7R_Y zHJ7_SKO+?(Kv#kGa?C}Y5qfZYLVKbBe@bb+0%RTAt@t_v!$mMSwbKCJqvO#nfLoI! zfS;0=&G{{$#nU?7C2y)=fCpiafoYRaTmjD_m-%TwlHhfDh$A>|@o2+K`)o?c-VNX% zonwzNKMYl00@5ynA7Vv37O+SZV+vSnUrON8<7~!)Fl0&1M(88@_PGRF^07!r0Yk6i zhmXIOfSf>pyiT6~GB*oQ6We?fFoc?;67U$SfGH-VxXYzh^3*E3lRRS}lzm3vjYRS6S5C|E*`2UHb`c;N?@AD|90an?s#!rv1zIAe~Ht z8ST>{i<*Qu_3V-?aEtM0bZ1Nudm=uy^z}QNl$D8 zrS^6itmnWOlN}L3^DpBk98ij~F^K$37@s{R0A;*3^0 SC0N4%0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IGf6~2R5*>*(y?m8Fc1b{KS4~}2M9C|U>Z#sf*-5Tk?|0V-JNah1{m!Cvmbq&%4U<`$4(yEP-5kdI;c`>c!?}ClVf0w zsp8a3vygW6p}vW*`K-RO>;PLIYRF<_sAo3yUX)wKx z#|p5LG@}LkC^*h_@kaCJ`U5SSf~XB#qV)^W);lj3{`t$VsxI>Jvp)CX zzIJ{1)b-)O^nD~N^(`tfRNlJcB_`{kYSJ~=GO#ejhjSg3xNhQ3NDTLz;+&t)-$eQt zGcuYZ*L92Ih*&9z-$pDZIw_!*iW4Ns`68g1#-nIRpZTH+iBgHKac54QTNIC_B56R% z>bw@#m>}Ss@dl-nIbf3jde^$xd0JYQvU!c5Z(`aNfBE)c6(yBO`D=jn+Wz#62ED(XmVh45ruQ1E(G#T;z~I%aMj61yDWG&%$18Vd83-6m zTItD?aX-x;(iE9NID{>^f%vPjGY*wghf4lp<&G23{#vpz1`D^uTK-(TQ~Uac<`1fE zup*qe?z0?W*S>u8PagTFn^0DYn#nV^^o|1marc-2_^u+|aG2R8lOy@bfAHC>wnG{b zltvzUyEA|*{C#-%O>RIRV2TXA{rA~}U0?$zZ2%#b>nRfUK4bx2m#{5qfqM1yqYKlfh2HKoEvo!qtQl6K{YE@dhT!U2S@mz5?;Bh>4ty ziFX4}AQv0Ct__5XCY?soiwAa`*`+{J%LAx;;L!i$|7T`rE$jdM<#QmVeA%OyLqv=& z_v@&N2_H28iy{N9BLEaw_^A%_Jpk(k8D&$UB;cg~BM@_sPE9~?)VD;w4hB?U+341f zZal2yfSytq(dRmzURCk)hZ^G;W|n0;sAdr54afl)sOdhYo|h}42O6+D3{br}5B{s9 zuXdaD$jL>dfY2Fv-Ks4hl0n7jFmL35lHZdua6ALxGE0btW&4SAsy=FhhPKQAhi=23 z#*Ppoq=nFc%2?RlD~E2=O$ol2%%xXF(>w2`gc(F;nl`zgoe_};(bggKvzu`kuH0r* zv@{W#wTWh1-Qi_fkv|bjaf&>4cnh`xW?gYANJOF%p6ZUn1#XBYg(OH8^u{(00yoDM zX1CjN3zS-~i0^}e781(PV`RW|QM#5F`1LRv-w&DaeKQ2MsH}Avl0F(uo`>nfAd7jL zz$AQ-J|2&s5KV&+D|Ng!;4HWuvBP9?hicI=L=49pgEc@FkNoU9)M3$5{hwcbz5$*s Vvc_y7?Ir*K002ovPDHLkV1o3Q0-pc? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slakoth/icon_gba.png b/graphics/pokemon/slakoth/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c04ff08a0a7912051aebce199cd6bf2ba4131882 GIT binary patch literal 319 zcmV-F0l@x=P)DV$zd@`!BDnZw!# zWeyu3nL}E9xWZxO!#FHHW)3SKg##}djKh?vf0;R`dYo#caL}PGj01fU#T)zRfoUCGEb2;WxDgV8c|BGtoQYn-m5D*X$>-yGm00001 zbW%=J06^y0W&i*MK}keGR9J=Wmb-7`Mi7V91c{1>P~{5(oB zN4g8rcvnTDxDr{(ZY*s@q`l^@Lmy~{<-)K4X8*mucig> zf}mF{u2EN(sc39|C@RVyOu1lMq%uOz)EZa_j;05XM{H3nf`DG+@_BfM9BT~`BR^%g zyQNa;7D7q3Ickw0~tV-0o+qpRdGuvvQd!4sZ*&`wxI^zD(b1K+Vu6L%$zc? z$BgmIA$;7{zN$hIW)h+R<3^= zn7Y@hwfMd6n<4`D5G%$mFA~*sL)S%w!n4Rj6va^yX2@tGUv_GD^I7B}3UUeYnXWhL ziJ-Ju{VWl9{6#PyQVT6GIBjx{U<`5V(QMP>r-&x^57Ik92TiT~&Aa{l`29FM#QS zc|rsl#j9xbPde9-;w~3}gSEh0j6KB1ArdIv6MJ`SYwJn1`Z+jo8AHM4dV_b`Xdi}x zQ~Rfl4VZaIfzp9}>IDw+jkW=wNjR{l_8Gqp1rCn_rNSkuM@Ls#rVGzTY;}F24UPFY+cF*O4 z036Kcy1`id+f#V=KCOfT-s;8J*NI8M#L%*d!WdT!T^@l=7$Iy|X%JJqN3Rkv~ieG5{n0Ra%k(7|On%ik1NwN^LJC z@K*stsiy?WS^^k#ad?~-NWl2DI2FgUI+LLES^|da4aad6GmH!&=u5zuK0dcE_>nnR zF&54WmIMs^K6XiZqo327Cm1dL(0SydhbRz@Ol1YigOtZ$>8Fiao;BV67H00YBvP5@)E1Q>3M z0|quFUO=bPfI+<$xZp*Qrl6E1zz_t2`OY!px0wPAx`+q_^Q9EmaUU=^fuOeD)|+vJ zdw}su0|LPW07G=@9$?Hkfp{qbSp^KRx+IV+zz7wRKr#TMfd~-#uL?A1GF&+CTA&?BfaDHKWLLgay@!NWuKr#ShH1tyh zk^vah8T*DLkPN^WjR7zc0$BwN4-<2q5XcH(z_TPokYuWJOMs#HKp^ZsfkeI{z);>u dApc*$_#5eug*;y}@R0xj002ovPDHLkV1kczlUo1) literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slowbro/back_gba.png b/graphics/pokemon/slowbro/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b62c5fcf42c976575a2ce70e91f4ba7bda901558 GIT binary patch literal 737 zcmV<70v`Q|P)oUCGEb2;WxDgV8c|BGtoQYn-m5D*X$>-yGm00001 zbW%=J06^y0W&i*JUr9tkR7i>Kl)sYNFc8LRT@dQD%;X7pfNRnxlRvK@rAud-igb}H zQ$eWwAo8TU>f|F=WYSo055W1DNydhWLD`jLFqlb|boY&oiv4-_+m%G8^Q8Zz{QmFp z2XPBTH_!9V;u88yB1bgjpBevjh(4OekY|ecpt8+wWgFz-IwRqB^NC7z}EF z(tvN{7VvXmyY~v8v1k^qPfJ`6uH0@+N=n&=^SCEZ^zP*=yFp~+vzT)podLfb;1N26 zS#lok&jGODK?On>Lx5MOfH@G;ai<^z<`A@jxf$~i0pDiOa^7G>f=!leTo8(L0F%7h zM2Gl|5O}r9ARPI=ZxX~j3XT9=kFV%~Plk|yViOx)HUK=`_s|6|=)_uxxn>Oj@5eWo zQb@>fia@-HV2NEg%`gL+(9k3hfi4*bpzcDcy3wAGgw{BT&q3&bbfGd_(F7%CP<9e^ z1+}y(a1sS}$;>D>p>_!n$Q%HBO>LYBB$(mPIe-=5xB#HHCQEz-G6Z_Y!A!d_lyLx<$lQ^5(!bCjLR8j) Tv@cA_00000NkvXXu0mjf0{K#R literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slowbro/icon_gba.png b/graphics/pokemon/slowbro/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7ee6a3298c6cee6a147442b8c803c24cfe3efc GIT binary patch literal 446 zcmV;v0YUzWP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IJV``BR5*>@k}*rfFcil-J2ZsD#RE$-x*X!x1B-CG6wC*d+ulL5 zH{fTfI37eBb&23JHhD=WcQ4Q(|GxJK@AoT;|8(&8d&_q=Afi@_px1+XS_H+H9zgkk zQN@+sH{fU3IEOXR-poN2g0n}y+WLTTsyLV3g%2!#$7jgy;Z8AT>(IhhAG_T>yjPpL z8s}iE5S`Mkz$x@N2LQ(bMa@IN4*p>Wn5?LH=+RmOpr~+)0p}b*SEyc^Y+Vmu3n{6uXB|8D3p0;^m7m1BDGs#YS6}hGS`(V6#fzl)k^)2EyyexGy-f^wbeC@l!TF}=@g}m3 zRbJylh&|3dvAK?RP}|_)8e4llHi>}^zZ>h^Z^oN|IOanS&;>B~tdsRSyL4{%QcX7N zft6{S(l55>M(QKz5(6t@n>s?+RZa3Z(-CmFE(6*-rG>Vzoud*!ZQm5PzTC2%5gBmv z>Q3dhYdd+#iMjEu__I=BU(0}lH!2XfnM*XZOXYyeO!E|T-MqlJaDbT^0*IS`nn!^L z<6 z`ujMLg1qSH;=9pdDIkPC_DmnQaUf{~1;!ek0GORX_Mn{*zrZRF0|1?a@_}y{C!YIh z0M4L*`Oq+q`&B|Uk2Ra{++@x$_mMUJOf|!DgA84UYZwegJ{j zVzCQgM=D3p1r2loB(Egs>^a7+g}@{ZghUo5QN&-Zj7IUHCN9oUhe;vrqi?Vx>u`+WD#&~*WEe13??=f&YV_$u2j1SY;MzbLQ;C8@D zb>9adwueyuP@!ZT|M~Em9lwG^@)w;^Lphu#g;<-B{NbnTeg>OWB!8ig8iRzywg57S zcLD`M`8$-(i{>DfS9|g=UTC5pYc-TVxV>muRcsBlD}UPoAU}g_GZD(a06%Lg zk6zYtf!bL(@F5EWvLOF&*kTBr#U`OrIs?zsgr_MPc8)s1Ntx7SJ}_;`Nr)o4Kga{_ g5B;_LcU=qq0>8J{Uc%bU@Bjb+07*qoM6N<$f+dkK%m4rY literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slowking/back_gba.png b/graphics/pokemon/slowking/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..16a77950623b0fe01701578456ca8f9fc9608a9c GIT binary patch literal 712 zcmV;(0yq7MP)KlfP=)P!z@mZYO!LAf4<`@B<_e&n*-}pku+x6SRJx zj(H1fzOoX{xmO_4&G)FdtK=h+wTW)e(M^Xd$tj)NGidpK_d9>(dH>_@L#|)e$0q+1 z025Cfl>IdWzMLEa;xuU>kL6^1a{!PDLN4VrD-Qr7!9DPIJ6NC)B@zJi8EiH|tPl~3 z7k~_H3}*1W!dj3)Y#n^ZXuKv1)NBIBJL~B*ldb)vwg%g@XlIq|oDxbeu1&*0ZUG;2 z7w{`I#!v>B0l&=}7eIkoZFmy7WMEuBIlwh0jp7Pn8%ve1z0B-gph--nfOMg?+Loej zAawwf)J=6OM6m~@Hi)JHXYUCCZ4;D5%i{v;y>|_1j2n#|7yG^otywzn{IVYowC@%ljz0G@oSm2-1kgtB7K=sD+r^09&Rd`X0wC`?kU`UyV4fIw*ZC{R u;M8ylr(|G(&Pj0w3+!890bPrKK7Ikx0|VJ+ni+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H>PbXFR5*>@lCchgFc6083$)<{B=7uj$9wp9e)b1p>W5Q08kmrUrD9<(k&)haX?4fT4VzBMpK80000< KMNUMnLSTYFE16ON literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slowking/normal_gba.pal b/graphics/pokemon/slowking/normal_gba.pal new file mode 100644 index 0000000000..c3e452f0de --- /dev/null +++ b/graphics/pokemon/slowking/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +255 123 57 +205 74 32 +156 32 0 +205 74 32 +230 106 49 +255 180 115 +148 106 0 +255 189 49 +255 255 139 +82 82 65 +148 148 123 +180 180 172 +222 222 205 +255 255 255 diff --git a/graphics/pokemon/slowking/shiny_gba.pal b/graphics/pokemon/slowking/shiny_gba.pal new file mode 100644 index 0000000000..55ae2a1ee6 --- /dev/null +++ b/graphics/pokemon/slowking/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +16 16 16 +98 164 246 +49 90 189 +131 32 74 +180 90 115 +213 123 148 +255 180 197 +148 106 0 +238 189 65 +255 255 139 +82 82 65 +148 148 123 +180 180 172 +222 222 205 +255 255 255 diff --git a/graphics/pokemon/slowpoke/anim_front_gba.png b/graphics/pokemon/slowpoke/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5eae03871304a86de544769bd1374a5466273b48 GIT binary patch literal 889 zcmV-<1BU#GP)jN+LRC93AQ1*v{Rc?9GdNP0 z{*ao8Df}DR5DRLygfR;$>xHEwIfow;B0jrSQI^Ce8CoGA9PiF)9LIOgfI3vl8=N2S zd*Ao`PWF8?Z4tK>dToxNK1ZOVIfD91xxANU?@Q67})=B;A)v52tLUTnqc6;DCMKbv_u8BPk6Y= zN@5{(|A;)5^x7AKaJ@~F&5F|0C1Zo6Mb_a9drg>Sn{k1w89%07vXoC5;}#)(d*m|a zpZCefm;mB828TAWy&io0b!>Vb7k~jcfI#eOn|l6K4TG1(!olXBywy?cR(xIox4;1m zu((-2Hm(t+J@G#Y9I-2o?XuW?LJLhHXg`3;VW+w^T+bA<)A;a7g{(Gh}u*poAA|B8y?S8TE;KgjUV1asWNVn#iIi z+;>38B|@fY?pQwcW0T6F9Q-s0`Mzy#KQ*_keL8a1r!C$N!cK#{2y5T-&z@+r(SuFD zUT5suDjp0BR-4W1s7cxK-bv-vwIzK*bd+P-vQ@3VwhmDm=L1hZH=R@PiBwruadQ2h;o@ z$Abw!sPG`-hqeuu4zXwOAmWD(fzw}XOdJm;{4mCY`?K?o_yKi;;3$a)5kKVMbl*+l z!Gs?^TmT-JB|exq9!&TF-CI32^W}tK!Vji6{dbi7aJkFi^e+|F{4ji8`Fiy8O3e>1 zDwWF1%2h$h55*I%unLLQ+6_PKRjcgEI+O__ey~c?d>Bh5h?M*yZY%x)ItU-o0Lq*> P00000NkvXXu0mjfWSpMS literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slowpoke/back_gba.png b/graphics/pokemon/slowpoke/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..62bf72f0e3bb9ce9caf54ffc848940df0ce55528 GIT binary patch literal 494 zcmVKl(BAuFc5~Vj+Fq>wNpE0t<<$cQJo0Hih#=mUOX3dHw+ z6vhIGo-Q2V+mjE0l_)$wzyW+)0<{A?zn-c7=qFDkY zz+732(*y>J2Qf#)HgZ)h9ekclp%;0M(n0kx#yCsi>ZzHK9L z_5=SYe&Sf}=!=;Jly*#X)Sc@1W<i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H)Ja4^R5*>@k}(c~FcgM+f-<;y2nQKS@C*#Zb2u0diCSV1MdyGP z28~AM0lW+{ zc&gy)yQrd2wTdU@hGhixSDi)ICL~R$1N}`0d!FeKwGsB2=peN9LwN8vKjgv>Kj_B~ oS?=82gCDd>i6?d!G^qb|-gv&G^ULOhB>(^b07*qoM6N<$f(z4`ssI20 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slowpoke/normal_gba.pal b/graphics/pokemon/slowpoke/normal_gba.pal new file mode 100644 index 0000000000..4b3e369dd7 --- /dev/null +++ b/graphics/pokemon/slowpoke/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +213 205 205 +255 246 139 +255 205 98 +246 164 65 +156 74 32 +255 0 255 +246 65 32 +139 32 32 +106 98 98 +255 164 131 +255 131 98 +246 65 32 +139 57 0 +16 16 16 diff --git a/graphics/pokemon/slowpoke/shiny_gba.pal b/graphics/pokemon/slowpoke/shiny_gba.pal new file mode 100644 index 0000000000..628e4153ab --- /dev/null +++ b/graphics/pokemon/slowpoke/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 213 +255 255 255 +213 205 205 +255 255 189 +255 255 148 +238 213 106 +156 74 32 +255 0 255 +246 65 32 +139 32 32 +106 98 98 +255 222 238 +238 180 197 +197 139 156 +139 74 90 +16 16 16 diff --git a/graphics/pokemon/slugma/anim_front_gba.png b/graphics/pokemon/slugma/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2747f5b07e2dbf3214a009d0eb35cb20894545 GIT binary patch literal 723 zcmV;^0xbQBP)bN}v~|J8H$qyYZ_|Nj90{{a900RL)gY7h_*luZZh00001 zbW%=J06^y0W&i*JQAtEWR9J=Wmc5SKFbu~vSZ`1uyX5Nwm`vuJP5Z8s4Oz#fgZwDKZ$=)AAcHikM|nMn&yFu9^OC=$eU?A4>FM) zT@$BQ2Wq5o3PXBf;4q}6oB#*BHVF;8LI#pO0~fnHdaOmjI)^;98$4a)O|)5@x^+;B z8W{knZEzk)(NG{z*QN#1Cii?3msemMoXPR4}A8PP8oP-=&<+9voIG6z5;AJwE10Fbmg zaoBEYPd9g3e2d$+G^L)AwB@h9XAz%#e20c1yD?~XI=iZjSx%+0&);Bh0D zWAg5XzeAKgYu4iuco4cgwzei$00oJ@@=V z0W*cnpGIsT zO2`Pc8)L^S3(QKjePATewNMwhEn-LfOaEZ*{lotoKLN<)&!!x>qmBRo002ovPDHLk FV1jj-PbN}v~|J8H$qyYZ_|Nj90{{a900RL)gY7h_*luZZh00001 zbW%=J06^y0W&i*I#z{m$R7i>KlfiPNAP|PBS~%w&Ao>8bbB;BD*I1%nw`$h$`E$rU z+YRGR7CM;+*yUu&=f~gOD8&Eu)shdk`?cpFiEn#)IB)YN#MGC-u#Ivfux;027SmW6 z_N%(mL%3Y^9`svf*xNM$Vr{H$o-06|FPFBbY^#n&&lTWftJ{&XDQ&>crz*l^Ei`cy za%8X)41|KkGGK3OPQwrgiWsU&O zSAdX|%m;u|q$0{jC3EKkHv9w`trW3~-fCkYQW14Zq40FAwMD>r4nV{rU{W8eM%@9O zBK-Vd_JxCNz_6|=BE__{auMZ~$^aN#IRdAUaI7x?b?j3cxHHsegMWEsV9xjhP$Rzu zvVm#k-v$PVhv5;B4BRy1JwkZlrupM8cxT#h1G;pbs{j99rz62Qv-4I*54_^%?T$GF z#m*vCk$%8e9#HTtAVaiA7ybBNH8RZkx@E=NQ*o=q0{V7iJFd^+HUv$QtYB*Rm)CE< We5t*0IGSDn0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H)k#D_R5*>*k}(d0FbqX=0&=>P8#r4s#on5$GQozjfX6f-HMQx| zp$p#p_y(l^jJf^T>(0d#2^fpb3Q%N{5e6m{z`EQrBCu`bPyv^=hrCE*ax!2&rBMMU z0v0EG^Z-782xE;AFm^J8nxiKSJu-)|6M~=KV1XIhTb?~Jpl{EgJz&hbE+qFOwCerF zb8X*T+qYlsW2w4*imLrn2UT6u0spLnIdo7zTAL2)IY)j~6&cgp9w?xbgr1002ovPDHLkV1mQGl=lDt literal 0 HcmV?d00001 diff --git a/graphics/pokemon/slugma/normal_gba.pal b/graphics/pokemon/slugma/normal_gba.pal new file mode 100644 index 0000000000..081ae47dcb --- /dev/null +++ b/graphics/pokemon/slugma/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 189 106 +255 131 74 +222 90 32 +148 32 0 +255 213 115 +255 238 156 +255 213 115 +246 164 0 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/slugma/shiny_gba.pal b/graphics/pokemon/slugma/shiny_gba.pal new file mode 100644 index 0000000000..85babdbe1a --- /dev/null +++ b/graphics/pokemon/slugma/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +213 213 213 +180 180 180 +123 123 123 +74 74 74 +230 230 230 +255 238 156 +255 213 115 +246 164 0 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/smeargle/anim_front_gba.png b/graphics/pokemon/smeargle/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..20db180b8492ee5b6616d7f379fc70480c5e1f61 GIT binary patch literal 1312 zcmV+*1>gFKP)Xea+RT#rAZd|q1LUS5p?RE{ zotd3^(zO4d9Dn@`AZR@UaK5V78x-ExM&MCs_iFS`p8~WiZRn0g5deN=fE2|-#Js`) zO{Lnz@ea^F3YAXoM$nY46vJp5TenrJA9aBrDTBJ(140p4V!VkI_7<9l>nWAP3ZtF zFvf?m7nc$?VSGKNw2Lt;5wY^*65M>kI3F%CuI4~YWXw7%sgX6CADMf=aK2E9!U!X| z;!^!4wLhk>w*WH7eoIsBPry(0nt3$)Egy!S0oGzuZ*%(Q{`W#E0w;0spF)#9-HfkzC)ZqIQb_LR%Ta03Nl+&|R|91zgZ3S5M9{4-$OFNfJDJh`>Nh#Tz0WD#A(_PvSL)J zTU(_{g<+(10M#h9^EzQoS~*FTtZ7g+NHaNsP}b>HF6#B4j_TC?kih}o5tycF*a1kTIPHa z&e-6zN$s1z6d)xKL6{F_#W}ydr7dLvU!_W{l^^E>_qhmYQ>Yk}Ud^(-ffx5Ck%Xz` zFT@Z>h=Bxz+B^M`TEe&xP?|_jdIskq&vTqNQk6$4oD2s$wj_X&G3dqlu2t2b`{ z2*5=@xYRa)2lM=KI(zt_TTQIRCj_JfMDC{f{mVbiM|$x=nSk$p`XTZ*C)+p9$B*Zf zUT8)FSJ&^phu)J)NYngPdb43yz$C|3a9AwWu(4e;=chZ=@pC)~CW z06D^00EFNUU`?#psbIa!E~jy_u-=Cm!FXx{357jC>ThI?D@3XBbOf{^@?F+fCfv@T zv{pkTyiw9hz>O3@@Bu6KcG$+~5+}w&q6?u3QC!_RxFhh1(=+0ZKlQC=CKorN1fWU%&h+ub$1BKoh8a$*#?;xHUur-Jb z{wf`%sRdhb2L(a8$(y@b9Ws}Gm|Hqza^E}2l1^6Qp&j!UVf}ypzyG~^V(hj4dwF*! zfcb}0fcSg@fZJ2REPW}4&jD7G@LAmpIRu=G@EH?t&dY+^{-_6?i~gt{Zvg1Cn74tC zF9HBnk8`I(a0HzFYy$&mb%0M6czEmsNH2klhu;nWbprrnfz7YB#o7{9hCRI)=9|2o zB89s4`YR?F@A5V<(2GXbin06YG|#t9k2u!WW2SA|DRtZ74~IqLwZq66JE0Wf11=Pr@HovuG}Oc!o%H? zX6yooFC!vY5b(yy;PK*z1!znR4 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H_en%SR5*>*k}+xoF$_h00-Mx(uC1onbBTfI97Zs{ic^LGG0hal z5XCcI%UKuOY?@W4hx9G*Gv@7T8+sRpK6!Zn*?a$Y$x$hM29i(^4RM=;EZIW~*>4F1 zLV&ijUlRh&0ouqup%4M22HYfWE|2t7A<5*^MK8-ZONqVcAvuT<_z3#0Wy4%fU6%$H zUi?Z6DIj9{-2?^FM+!!`hS8+6zUc+}x4Rfh)LgjEMrAXs!j z1;_6nI&_c`4;`fI5OUSw=MF5}?^6egcd!@>L`8rOPCvNoaQfk6Y^iJYL;KUI7yS4I XUQgQ0a{}M_00000NkvXXu0mjfd&i*N literal 0 HcmV?d00001 diff --git a/graphics/pokemon/smeargle/normal_gba.pal b/graphics/pokemon/smeargle/normal_gba.pal new file mode 100644 index 0000000000..068322e3e2 --- /dev/null +++ b/graphics/pokemon/smeargle/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 213 213 +255 255 255 +24 156 0 +222 222 189 +172 172 139 +139 131 82 +246 131 0 +180 0 0 +106 90 49 +74 57 16 +106 222 65 +65 197 24 +0 98 0 +197 197 197 +148 148 156 +16 16 16 diff --git a/graphics/pokemon/smeargle/shiny_gba.pal b/graphics/pokemon/smeargle/shiny_gba.pal new file mode 100644 index 0000000000..f5f50de2de --- /dev/null +++ b/graphics/pokemon/smeargle/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 213 213 +255 255 255 +197 74 65 +238 222 156 +205 172 98 +180 115 74 +246 131 0 +180 0 0 +106 65 32 +74 57 16 +255 156 131 +238 106 82 +172 49 41 +197 197 197 +148 148 156 +16 16 16 diff --git a/graphics/pokemon/smoochum/anim_front_gba.png b/graphics/pokemon/smoochum/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2fcea052aaa65525183a36a3c119aec08c31df GIT binary patch literal 678 zcmV;X0$KfuP)(CDs?DiID61r&7>2S4EZ7fQK7J-`qhJd(CXr#E97 zuuk(d%@^4<33NyES(asVUweI>&c2X&%i}W37GPLGpHdDDKv&;G4+Oo%15fAS6%8yU z0LUe|#agLqTl)33(MB8pZ8W^w6?@0d3=DgFtA6?>Kvn*5 zLIZZ?51}ECI5Fvg9=yI;4`R1T57_!e2@1^p!J|vddVj+ z=mFy)yX%37>+^s0KuKl&x;VFcgI?OOwp<3Y9@pHjuH=^hFBp!YT#CW}5~Y zv%W_{%Uo%EowQdOsRjzNYxhT~eG@j;Q>h^5(>eFrX&JlgA0=la#`$>$KeW%69?F0O zHTDXsvx zh`57aeQeRy;}n3mBIAm52&m1}2(BYOh+%_UHL3`KXp0btI?@1`PXc(_(VhWNg+Mrh zjDY$kK+13iu5Nu9-Gx-c{HTGk_e|B7`KSOUr1Yz+IK=cvYb_b^W%tGy>qPEG_r0jTZbK<|(o xo}F)tVnGA!A-Cv1O#!*Jc~KN2e=v7V>JN|(|I=dXOjiH^002ovPDHLkV1igA;eP-C literal 0 HcmV?d00001 diff --git a/graphics/pokemon/smoochum/icon_gba.png b/graphics/pokemon/smoochum/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..11f1e6fe7da78c9c6606cb49474af8c20cb556b8 GIT binary patch literal 414 zcmV;P0b%}$P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I97#k$R5*>zlA&(HFc5}KN9>0Q8Co8yAZQ&Jn5BYXN1B3jV19r| z*+UFFjWklNl2s|7wWsKI8(8kpz(~)?pZ?#v^ZiO)SDBN%V`@==++{Bv-U*M%sS%b8 zR7_&%+JWc512jyMz%`ILz%ycoc5SP)n|BV{(w1|H4BUse!lo6Z1xH)E6&MVoMP!|Q z#>4KFb*}p(or!^=?*|T4tg0&VX^CvPKxv2{FH)hjP+W1z-P4yjl*@(|WMVS=@}C#H z^C#h;;tBeW2VXvcEb?KR&QU@bXz>9Nx?hi(FHd(R12^;K5erN!IEPT&)@xGD^L`m^ zV$od))W`QWMV*59JXTqKjWZb`bR##0HeFSrgPSh+W-In07*qo IM6N<$f(2B#ivR!s literal 0 HcmV?d00001 diff --git a/graphics/pokemon/smoochum/normal_gba.pal b/graphics/pokemon/smoochum/normal_gba.pal new file mode 100644 index 0000000000..722cd42066 --- /dev/null +++ b/graphics/pokemon/smoochum/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +189 172 41 +255 148 164 +222 74 123 +139 16 90 +255 230 82 +222 205 49 +148 131 24 +255 197 164 +246 230 172 +222 197 131 +139 131 74 +213 213 213 +180 180 180 +0 0 0 diff --git a/graphics/pokemon/smoochum/shiny_gba.pal b/graphics/pokemon/smoochum/shiny_gba.pal new file mode 100644 index 0000000000..00a439312c --- /dev/null +++ b/graphics/pokemon/smoochum/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +213 189 24 +255 189 213 +230 139 123 +164 65 57 +255 255 172 +255 230 74 +172 148 16 +255 222 230 +246 246 205 +213 197 139 +139 131 74 +197 197 197 +131 131 131 +41 41 57 diff --git a/graphics/pokemon/sneasel/anim_front_gba.png b/graphics/pokemon/sneasel/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..38d9823387c0c651511f02c305c4e21c5b979e21 GIT binary patch literal 1121 zcmV-n1fKheP)Y#8VCfqlLdI{H%N9?VNkhH!oH&C2BD*xVK_(}_yqvWaWw zD?tGL4FHq_UBYs~ug?K!v^hX169q5L7+JY@5m3hl?ed-96KcY{qei@{MVK!2i?3Nq}_V_p5niKb|m=BcIUGgXdZ`8u2uQYJ>>;LKRso=pls z-><}YJ&8Xa+H^@eM`8dOc@A$9LUero#wvcTALkY!?h*?AF~R%gT(v`cYVf-V96~Y1 zmucB=(KI6r-gL$eFgDj;0(z44AbRe2;7^T=VKccCLC3gD_+6(#4sBHsZ|@wCEEr)v z3s6?Hm9buwQaDd?7PvVIws&ddr4;qW1@BmciTbjzw?#+ysN%hG`#|NdgP$; zQ9Sug3ep@m=GUB{&-;NIFwfN|%r38#ekhhY!2inboz(b`m6D3k@l!R>4Ar8HqG6;4 zPA8EvNl@h)U>Kjir~`z$zq9eE2AE9Zk5nEd#oVP3If`M))gZ?$1kn!ES}$uMDZ#%*+|(a&G5+?+_{%#9a)mo6d8Vsav4yVpEgvh zAON1P*3E`+qrMBMBN#NR1H76X2+Ne}ui3Rg%>trXH2^xSsRNX9p_cbxz7`G1TWic` nY5=WUHGp2Tf)szp{(bug!W)h|W)pKls{`5F&M@*I1uB(7_v3fae4*m4J|0EIetpAcy zPXL#h`uGHpz1wSYm}NzNvj^yBc`h&Z5toIO@?sA#&k>Mo`xBo9V(4`_vp+lzS;$g7 zT5t$iluD@w3js;MVxcslEqXKvSYl=X2J0ZPRjR`8!M^}9L}EkY6oF73I@5(}Qu-2s zU=padp;`>i12G1-w<$eAAp!8(Utb=t=t&esNU%^6%j0iiJVqcIQ_8_>=3w;V3#EEJ zG7es$%h6XscO7ES;JctEN1Y|}3LT6_E6jeZMNJt_63e4EE4m|=I7v)7`>_iEv|T{p zh&vAOvjgsdcWIgaat6g&qxm*l{nKDlUz2CrqhS@je8nkf_K}_ z2zR$Ban*Y}mow90NW9(ngb{Oj7cF)vbR!NkB>GosJvBl61CI~XHQw%W!%dJ7kmCb3 zSCyS(AVyu_^VGKhX93_Ym*vg51{lMW<5w}1@~RTsit90B44>GRrD|SPT#s4beede_ y@nN{8W=x6D?TnoxtBJ}sIytcYj$87qzxo67o98`~asN^P0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H*-1n}R5*?0l0gcCFc3x43m8J7OM_k@SPzgp^blFv0}Aa`B7&QO zWE9*^qnrG?X&2p;4rDQZ-jG>5A%4DOe9RC`L2%oK1Q?dCy(fUmVsTdh&X@AUsSjKo zt5T=AwaV5C0%J%if=`JhX=~xCIA&uIA<~NBuGo@xKuA`!AR$DTkFJ3}(=?18f-&z# z2SHZ*-al?gh~8(o5+U)=^?hNa+zB)Dt1$BvqA(ClI!Ho;q|ygwYf}XB5Y;MZ+x;oRaS0q*5U@pqz752?wg+E^t`b-KYQv+SX>mA$F0xsX9|HH3DFBi9nPr!yE2E!cA3`#ybl z-*=JSrDQ017%cRD_ujjA`tJYNwEt;jZ(f{#*Z3DAVWcl6Ze4cZ&$*(#aBL;f>+%0i z!GK6-9n;8Mk@DN4Q{Le!`N~LJCPqeTl{~&=yuc3+OQlcK*9d{MY01DX!#Ktd?=^#Z z2?B^|8R$dbkKn&v`W&)f9C*YwGcu3>z}!LLdn_>9^zNCNoc20UFEs;yu2Lcd04J{i zX)~*7?_>Ywp+^X@v!BfDNc%xR_aT5N?;$W_SylwthB@W4`4O1~z?m^F9Y!T=lczE1 zV+VKPs$qO60e(pYAr&C#!k>nb8HGTU$NCkI(%Q6<&O{aJ3P36Vz|*ioKqo5THe!G$ z0R(|69l-OFfjJeRja>mGSqCBrYykH_tJBbd0sWqqI$+<5%Q=7rIPhFM{NMpm!ljgA zo&(+Ovn^KzAWtD}!Q*_Ty?o|B9+3y}0s`poPSs20CUsr)dipH_MF5`RXytuMMU6jb z2;>l`<9*Fm;EQW4zkDPCFyo5nu2D+nt!bG0IwY1)rW(ty_y`UHWW5Ch-DM}`I<5A* zUb#Pt0DW=2)p|Mxph*33*ZZbB;xi(UT3TwfTb4RHCg#>z-NRZ=u#)_kSDDc-Zfd-f&xYUYim;K2bKUfTC7BESa2M1 z`h#G6Jpk@TYqbr)f&(Fbu?Z`R#s*)@5CLrxFkTA+#qd-OBVeC)aPu{}1Kfxc0(nY1 zop=E#fqN4rAYuiugu{#EoZ=lyoACmi5D^4Uyg-cLn5JDw6ytdyh8JDWS1yoXXJQ@^ z7U!nl#+!~e>K~kmfb1V8RXWc`fQ*4hAOR-jCg|&Ir}GQ8KtO2$dE+twcRQ^P8^X>gdq4}4{`d~~hre5EY)m^> zQ~}e>9&`Wj)6c~7Tt@}$tbKHRTlj~{Xap}h74ScEZioIMFwGzaDE?vo2o^b10o6aC zyyTUajOrh-f|*f{xv%<%Ap-dj=%IfgGH}n7?ML!d(}S3Qun`bWEqT&Q9Z}UkC_w7u zdH-Zjm4D`Nc#mW+)%E?eJ;gy#YDd6n088@sMTOs4{=O{?3QWLu)TCrA{>(qzXAXu9 zk^Bn>ne(@Iu+e5ZCX4@%Tz^Cb2?)hs0vd}9Xj<0vlp_At_~7VE3>YZl zzg4h=JphaG1RaJd{zEGQG*DaCK^A|M$?#n0`?T5|#Kk}I4_YE02>&37e<6}SN&RK< zm$WtX7mD~#1SIj7#Wf}S2O<87dPfc;e=rt*Rh?6jf5?r+KPLaf&_A3b@2|OoxBlTj akADE=T5!yDJNsAw0000K)J<-KFc1Y`RJ^VPH;5B8yGZpz$__#BSx8r1)>%ay z6}1Iyt#QGH1@6($z)eJh1m@b^adh zbYbWU7RXHsNZ;a}0d8v?aPOKIGr(Ww(fzfUA#a;o&wwf9U_JB4IRQYiurQETPq_d9 N002ovPDHLkV1fa}xTgRB literal 0 HcmV?d00001 diff --git a/graphics/pokemon/snorlax/icon_gba.png b/graphics/pokemon/snorlax/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..00a74b6ac1d30e8932e3e2cffb691563c65000dd GIT binary patch literal 346 zcmV-g0j2(lP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H*hxe|R5*>@l0gcCKnz9g1)N5=MX47kUZ9?{;3>L|Ft{v)dIh@| zad4@S&WJPUY`bZjU0!~Y%?pCBufx#;(clF#9s=F~f!T$#O=@DiM`s6EAR^abfryzA zsZMP`6?#qt4)A0)lmq4fR%5E{2{T8TgT2Y~0>A>17o;~xSrC>DQNz?YaHA8A@eKBf z29Q+s6(CukbQ(O$CqTP`uzxMU22AxDB<%)-9rfGZtOb8mAN#?cA6kcL=ZDroPFU4D s9i*In9bgY+?)w3rAC>a`XnxF(H<3ub4CiDHH~;_u07*qoM6N<$f@J)Vpa1{> literal 0 HcmV?d00001 diff --git a/graphics/pokemon/snorlax/normal_gba.pal b/graphics/pokemon/snorlax/normal_gba.pal new file mode 100644 index 0000000000..aa61fc9e41 --- /dev/null +++ b/graphics/pokemon/snorlax/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +139 139 180 +115 115 148 +90 90 115 +65 65 90 +255 255 205 +246 246 156 +230 222 148 +156 156 82 +238 172 115 +213 156 90 +164 106 41 +213 213 222 +106 106 115 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/snorlax/shiny_gba.pal b/graphics/pokemon/snorlax/shiny_gba.pal new file mode 100644 index 0000000000..8528d09246 --- /dev/null +++ b/graphics/pokemon/snorlax/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +123 180 255 +65 115 189 +41 90 131 +41 90 98 +255 255 230 +255 238 197 +246 205 148 +156 156 82 +222 156 98 +180 123 57 +148 90 24 +213 213 222 +106 106 115 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/snorunt/anim_front_gba.png b/graphics/pokemon/snorunt/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6ced11d08b94f5b156b446c2ed436635f8b5c2d4 GIT binary patch literal 914 zcmV;D18w|?P)&)r)(3Qc6lWF)=A1ApigWr_&VA00001 zbW%=J06^y0W&i*K5J^NqR9J=Wma%HvP!xs*6=ag3bPW`)k-cP+hAd9#5LHW)K~(Y7 zt&yfcQ7zpmeSmI$g6t(vP`N|mrI6zg+E5R%+&~H$iUoaulAd#Aw?(>FSrhOXOz{2k z|L4lXCrw+6pR>kQjVs@3liq`=cw$&X@1USrB-os%8SaDbND0q{A6I0cpdus&X5{k#I(~h)+ zs$(UB_W+-dEOSrZfjfRk(~n2P_O86cX`ZGu!1h8}hu&Q~9RQrBaFPVF4g)W7{J6i0 z7i|RxvV^E}e0Y2Kt4{!zbbMo-rwH8kSFKjaB@xeA^Hu;)SQ7GHb%i8i_TlgBd*5OS z=hY5_he%uwMmB2)2vqK&^8^V57&UPIt_+NM7zEJ-Ml8XAo(xEmWFLVR6;uJkb;FQf ze#*YIIE`E0!Qd`_O*^g^z*V{80%JKg5P@5HVpiSt=05xzqz@tVw7%9#*BR#{WA)EJ9Dbx&5(YH>^hJ zfw!=~)e6F@H{HNn*nh|n*e;zLJYWm^BY@60F9Qi%*k1tU4)oYR`!iDSb}0Z8{@TAq zz(EBd`x7AS-zxzZoQGt8@mq);OTd`B3E3aTiE^d}_q+_C{j+QWXy<@e0i%cVKS)6U zA-TC^e*~~Kg$$9AkoQ&TNsb8sm==IU-t>APfLZp{mA!yyV~owRJeyvN7ld*E*`L3) zH}fnLfYkms1kAGBUhhq-0h+M?W}fE_dncbM-Vd%f0sl9jO+XH44ZI`jKOLw5)IS2n oOMrX|{WtPlaX#1oavtjZ0nEYWFsPXcAOHXW07*qoM6N<$f^>&)r)(3Qc6lWF)=A1ApigWr_&VA00001 zbW%=J06^y0W&i*It4TybR7i>Kkuh$AKoCW@KuO0TRto2Ev4PHol_k9e=OF=vaV1Pzk1DJIK0^MsSth)hv6_`amz*9J$g0?8=G(@Ta zlxj^3OINi3B5~8x0v7EeAw&Zxuj!eYKvJIz93gHhu3_n^ zqD2DZ7-b^Fyl97rIDpl04A4Ym02TteBFlCSQPNS=?HIOpIMf-91`Z|NNz|37vZ^I& zYDridQHv_g_O!3-BF~Fc-2qss>TUW?06ynpw-=%`E0|p-X_`_;g_ v7C+}5O3yuI{7%Nc44|TbGMcmd{Na297ExBQ$;E0P00000NkvXXu0mjfr>p5A literal 0 HcmV?d00001 diff --git a/graphics/pokemon/snorunt/icon_gba.png b/graphics/pokemon/snorunt/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2710b9a0a0191a54546cc1cab9e15a005ee5eb72 GIT binary patch literal 283 zcmV+$0p$LPP)DV$MKbA?QZg`* z6`TBp%?_DVR%ws<$(G3@Iz8C^JS@ozm78BtU7Q$JR9IHQ1lKSAUnIuZW6rJYa;lAjoh}|_Ik~#VG1Rs*PK9Mh^2SNn( zA%H8SUnYRPG;INt@yYOBU_KQ$moP<|G63dMN+F2(%dZmv7Qne@@hFOXusH{jG;ac} z9pKBH^ALPLxMb-zmlxwsM+d02{15RdRyA)}155|Ez%qalF z!xqOQK(&LxU~y*Vp*MI3HNY-rYp>2_UbzKXWml9sKV`nG$`fPNlD{|8?0{ifn3KR` zb$-xIw$Y8_F4Zj2J}kw(G))`2J(3>A@y7#Ak;H)ZanfrnG|HL<47Si<$rgJ~bw!p| zAml-h9cos`V(3vg~v{`*o@Zwm+Q|wl7b$MUp0-_onU+o5nQmZkWoeoLsAUEomwVb1b^n zr16Ha+Zw6a5YoK4H45qaNX-Z+%#3P25F<4U(af1ys`>NI5U`;0HfLs3^PW^@FemS! za^B3SW)W7=HRyKR5A$ZmcSm=-^E?c}wt3#n2y8)E8`{syo*ygH?*SMbXWq7ZqkER;7=C?_?gRuUeyWVe`m&k7{<6RwOj5G{Hx= z2WoBp?QSK2jb0qPTWNn(!83IC;3bv5K<&=V)@}nlcwMVK7)%FhfK?E9U#C zf5rp#0(fS|Kld*2wFc5|XxP$aI0jL7*RzN2}9lVJi40NoPzJvjJ zpxY%tJd_GD8mQR0McsRh)>FWD=^aJNO2wu_hA#PGzykk|cjVnMNuKrJC4|=3kJ(Ue zjQ*Sbf@~>`>Bp5!--y@jfDqzp@lvvk`8@jFQOa5*ypKM>`5V)J3cv@`G_*7r^v@i; z(R%Csv?Ji1tYyq}i z7_QkFGvpmb2X;We^<^})1P=fJ-I?B3a&LNw03_dvz1IH(4iA93@PKbcy4N=Vc{vGC z{PWv>|mOpYF}M^ho}XFX>p=n|1pLOn5v2lYCZ+F5nvi(d5XP=ONb@n_gDx| z6bj?O-B01{kBFynTqn}j;!?4Vcqrz6W?5ufdyfEZ1V9^ff*5hj0FD4$%|h@Y^ey{` zc&+lgdrc40`*UDHrkfPi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H!%0LzR5*?0lD`VVFc63H1PR^6M-ar#!RPBB_zdE9g=9}aaC68* zw76X*6}w0*i5>bUv5Twp$Z{Xa?{e@F^54b$Bkmmv?*rgKycLXumC7n5VYtLfAu|a8 zydw;s5_o%%ciFxcwp5_F>4(`J-fB?is*kmJg6%Og17OJ8Ogn5}}=wunLcfTZi$j6?p0dxcmLi~i#VzVMKF*%uQ%}W?M5vKSOhR~@n=663n XdR52QP&)k<00000NkvXXu0mjf(Kvu%(MttHLD zt3!Jz>kv#L+M*FDGzJH2kq-`})TYolwzQ7AE)=DR(CA)z=wApebx3cGX^LY?Ne!X0 zFR|4(v+GE^TCFIBzJoBD&u`w&&dmEHN&h>kX6!(1Y(*tIb?n=vpL@K|0BW05Lk{CP0Y+K*D_kG9kJi_LwnMx5XcnbQ5@4-9W@8 z)-}jL2`;My0~PuVS3c_g1MG z4#~@?Oz$xEF%avJzz0YUt|r-*GpCxE`BvT3q*}H38nd90vRuS2LZsPO`95+Br)i)dvK#$*-a9sd8FpVjSO0#(MFl#<)e zaGL{vL%#jsW5ipn=B*b$wxNW}&&O4~&q{S4z?s!wJNvJi=9MkjDckI7x)NMSsNuKQ zpvcbAL-G!rPupvX;{%qr&Td`cz>5c+4!fSGMiuh~?gCHF{SNC?z>hlsIG8}_v?s~Q zrGujlvpBbfHL_i*e1owdj4n{#pDUU(m!H7Ee#vTLJdR*}aCep!c=}?|JR;=neQQx~ zQG!$ex=UWSu1+vExA#!*Sk@wK!0OT5WcR*OrmYXPJM0?UJ6bxhtQKG2e9yKSv8T&r zau4?WoMr7=;$`;ks*x0?pVuvmvC<6-BDl~np3IM=`H;25KN4qJCAIB+m;7BQ0r+r7) z4eAc0G-|AcjVs=zP{lNOJ9q$bzlS+;;ee*Q7qw&OLaVH5W8N*P^dEl@h`j2hk@2z6 zsk=3dk3}~uX*{eI^v3!yK#A^n5Sv5B|DTYjh5+dG{|Ly5A&VW;CL57J7Dq3pjJ0To z$tE!gFCs=gKpO-kruYnK43qFp1^r)g{bB%cBEfIG9MMUrKS29O#*}FOWWcGcBApjO zUnYqLF9pK4MfX3vQV95k7cIKF#eu?Mr(Jm3 zUjz_e?1~98=uFTrytwrNH<)dV)IPs(V-;-x@C>6+zu)$dLG=n zCq*iGKh6EYI`I4g6eWcxdJ-fXo5BtbJih=%$>Gy40RpNYzt4f)W4{0e>~2jZtHVBz z3xBBh`2`2ugVd~BCEMup3m$H=xKS_HXcPRR5AdRCIF%OoMXf)Dw^|@q!Y>A;sELtO zav)F@7f)5A&LAMc?+pbHQWyohdVuu-mY}3W1`v=zUFFyxltI6H*TdbW2N+P?%Qz9O jFx<3;08;di^3eDPF=a{qAlYRJ00000NkvXXu0mjff2i&S literal 0 HcmV?d00001 diff --git a/graphics/pokemon/solrock/back_gba.png b/graphics/pokemon/solrock/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6e7cb99907f460088d3059422208ccef646cfb GIT binary patch literal 802 zcmV+-1Ks?IP)4lreAHFc5{khMT-~EM=h8$`g<(Q&6&lyvt~kS#r}g zfUfeCv13v(7U;>X1Q^zyF8y;o%98CUfjV?4dV`kx^zL}~$kFIO3v)M|XMQkDFsZ^n zC@487!IYB0UjZYnq(2B$N{aJg0EPiAC7%rBneW3OaN#>vy zI$`RbPfQ2weq+jq1HeFV9_|2m`?cv?Ne~Bjk%VjeU=rZr>eH>=YYs;fD?te2StY?l zkH3E2lD9y32Y~+M?j74y%EZyt)#IgB;S*;ta*{aTpbnEbiXNki%nAJ1;N&$pL(G;* zL~)@=z&A(v=F}TROdCKe4ZSb9svI`T#@B;WTN0 zgi7J_<`>S`YkRm5j&t-N{onxx77&wW+RJq`^}S%oConw;+O zF8F$sbN9!DvQ(lP3m&Ek8Omsi9KfHFTfi@A%y>h9RNTY#nust|N}0M|H?Lpm(;hO! zO8EpJnpLH>g0s5yf|>?Uq?E{{e7~F6f*!Q9_1-PD(gn`vxKO^>0k~+?_feS;Q9i(yJ0_dvF-t_rRXGc g%CFS4pZ~|>H$b2-^=<;(!~g&Q07*qoM6N<$g1TvTZvX%Q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/solrock/icon_gba.png b/graphics/pokemon/solrock/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e689424629fb04b8c3454be51b1575d952d06a GIT binary patch literal 286 zcmV+(0pb3MP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HoJmAMR5*>@QlS>ZAQ0mVdOy`!FrD4p)eYDCT|{Sj2s&ie8G7L6 zy2V{C$vqx1=J$barhB*ETtjS$T;s|KNZLhi7Oz||MP$jT?k|`{#H$EbT7q^31nLSE z;pIBj5CaylAL|*KUd)_O6|0TRk8ni9U}9Wv&1;@^7=tDT`_XB%)4$^!b(s4)?7!dF k0pHajJ23mhaE3a(0j$e=Qe)B-R{#J207*qoM6N<$f|g@^OaK4? literal 0 HcmV?d00001 diff --git a/graphics/pokemon/solrock/normal_gba.pal b/graphics/pokemon/solrock/normal_gba.pal new file mode 100644 index 0000000000..315f49dd34 --- /dev/null +++ b/graphics/pokemon/solrock/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +255 238 164 +238 213 115 +222 180 74 +180 148 82 +238 148 57 +205 123 49 +172 98 41 +139 82 32 +123 98 74 +57 41 24 +255 172 98 +213 74 82 +139 115 115 +82 82 90 +16 16 16 diff --git a/graphics/pokemon/solrock/shiny_gba.pal b/graphics/pokemon/solrock/shiny_gba.pal new file mode 100644 index 0000000000..9de01aa0b7 --- /dev/null +++ b/graphics/pokemon/solrock/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +255 238 164 +238 213 115 +222 180 74 +180 148 82 +255 115 106 +255 65 57 +222 32 24 +189 0 0 +123 98 74 +57 41 24 +255 172 98 +0 205 255 +139 115 115 +82 82 90 +16 16 16 diff --git a/graphics/pokemon/spearow/anim_front_gba.png b/graphics/pokemon/spearow/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4283ba2d60a0ffd95d702cb18f9f96a58035ad5a GIT binary patch literal 899 zcmV-}1AP36P)+{NtQZ&=q~+4W00001 zbW%=J06^y0W&i*K0ZBwbR9J=WmQQTbP#nkKVMK@!;z<)VONyRNR(3Qd1`>B5bF!Ve zwetd=C>{(uu`V&7Cur2va~HFdhvk*v$(ZpP|7m!PjI9g_@rAi@`0;37OtaLOa^#z{HL>plKLmeF*p= z%mpk=SgGVMLcq>}R=bXk4DuhAZ3r-~C`Z?@l|jXP8U!vBf6QLR*ztcqv0D&u+7hXW z4X3c0w#6<0oY3|LCQVupY(XjmEdp3AVcnntOHKj+b6ZyHI%%@HBtd}nemzfgtD6-> zNh$$jK;OhZF=&@vF6BVLR0%OsLqGqU z0#7u{^E>YGo|Jp$0fgPgGq)7M3m9f*7A<+dexo*%0hc+aKFu`KO!E&iR229dJIYRw zDar(m(Y4=OXo8}khNjglJOMb+HkqSL2CAm+4Fun4n@6Vp)$=nO{Jf!Fs#iS$dF_M! z{0QTk`y1GL{pr@JkRM>3shVutj$d9I1F{)W%)MX+;>fljc8d1lSc}3#MXB_d#B^+? zC`DTszstICB0TP6VzjfuYQb*h$G4quHdB^f){SO4D+uXUzH?@4YfEaEFik2;Omp&` zvwNTa$u=R(K*~~9fGy>zsT&O=)ma}}3_UwlA&QNJ74OQf#Q=3SK|O7H#2oXt zxoDrlhT%#~g3`Nj55pKr%rQb;6&&ARiDBn}r-6(lh8c)Apq^tOuEb0fjPR&36^#Ej Ze*o!`nw+{NtQZ&=q~+4W00001 zbW%=J06^y0W&i*I*GWV{R7i>KlQD1GFc5{c$Atbv{y>MU9kqMX>`ffIh1O7Hj5@VL z0LM$bD+s#xWN641QBbEAFkNWNC>Sl|*0Ivdkx76OCFcS~-oWL)d%UBbg5X8}ff`?7 zB=yNgAAJDJkp^9RNN%>r6EhGSGl~ zh836{{6mKLB<1@SVe<^QX9$94hc9nD4)G&!|MkRO@AVEEcB2G?<&=XB%dd?4OdKa7Tl@*oR|aTS04>?igh&!TeQ#Ys zIRV&H7#04-_6eUWzP15d`Yan}PzcItT{#~}>qD#0ju(vP>*4NFhqYcwj zk!7wx{aC-=Qhz$5`di+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H*hxe|R5*?8(mx8qFcb#xoS?ab-aw(FhjEBww!F>Ur$gP%(5n>O z9AZI8z=EF@q3<=bn|@Q@NB$LlO8rLkPz)IZk9qn|c`h;>25lV|`9M}%JMTCU86fcy zM9BgjUjbiRjAvdEP@6F{b1{a_Ae>KJ0LC`Wjn8~uTUizYl z>YpMD4(|vKp9l_0VcH=$K>K&W9DKG=l7n~TB!@)g7928p2gw2XUU2B{#ypsV4k1lG sc!BQFnhl=fnYVVo^l^=akLt@lUUX`V5=We8T>t<807*qoM6N<$f}V$#Hvj+t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/spearow/normal_gba.pal b/graphics/pokemon/spearow/normal_gba.pal new file mode 100644 index 0000000000..de6c4ce1c8 --- /dev/null +++ b/graphics/pokemon/spearow/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 222 172 +213 197 156 +172 156 115 +106 98 82 +255 131 115 +246 82 65 +205 32 16 +123 24 0 +246 180 90 +213 156 57 +172 115 16 +123 65 0 +255 213 172 +24 24 24 diff --git a/graphics/pokemon/spearow/shiny_gba.pal b/graphics/pokemon/spearow/shiny_gba.pal new file mode 100644 index 0000000000..fd22234852 --- /dev/null +++ b/graphics/pokemon/spearow/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 222 172 +213 197 156 +172 156 115 +106 98 82 +255 255 82 +255 222 0 +238 164 0 +131 57 0 +238 222 115 +197 180 74 +156 139 32 +98 82 0 +255 255 148 +24 24 24 diff --git a/graphics/pokemon/spheal/anim_front_gba.png b/graphics/pokemon/spheal/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..0bedf25fd5eae98c3ffa2b7e1f89c5b202a5f14a GIT binary patch literal 768 zcmV+b1ONPqP)q?Bsa#gyjNtoG);-roNJ0000000000FB>B700001 zbW%=J06^y0W&i*Jen~_@R9J=WmcMJ;KorM~JJ|g%Ozc31f{RYx3I_S9Q@~K`QVIq` z!KOo?g$xQ^Is}@^84Atf^H_&8J`Ww-q4jOX>Eu5qq?C;6JO79j>B$~CR^Rn~^zNOI zc%Mur&HtM0&K6+TDQs>4%;ZqMP6mq2`Bh_HPb7Bdm}Y5eB@o#+8sOFx>NHS2Y|dw| zIJW@ESxv|0y!D=Q;9wE;2X=#V{`@z0?9L2`DYE#yMgZ(i8>&Q$61R|nBEYXUdB&mj z=orB055RVy7C+P&0Q>&C$cF&QSkYkS z{X_Djpn*W3$XH~GV2B|C7$Y*JCs)r8#S)0Vio94566=B)*dTgO&l6HE%KbA|WU>Dz zFMDE{zWieNu@{Lah!b7*`chuT%NW0|BpB-a0HRwpvid`6BuCDp^Z125$|AEROKwnzvJ&?s%666=m;PC858jvmQ>EamT z(fM|wVbEa%0asfy_QaIsi<8=$x+F8_PIJ4x(>0Xupdp9*f`>waQ~4%Kt7J>QnHmse z==?bT#?kuU|Epp{SBL#wEOj-G-O6P9^*^^5?tG4pU6d8D#%rS8G{&WE0xw)r=6Bb5 zCthjmD7pB4vHT77;1?NxMIPugn7?andtbSUHQ{x}#H;>0?_20ITq!tZBC!UVObm+_$4T9|U&y-5VKT$R58N+2LRt(|PXu!$ z>`^DV$EHNxw+B)+FtD>`7qrrJA zf?kF}Gj#nS04%u~f}5_xidFP-1H0sATiA1@OoIrFa=Bc$s%Y?Opcv@T0r*gB0S)DNCzAU|vXWAJXBiZS$|Z`=Zg9Yrb1!7kRffbrCU zP-zll_%pY^0gShpLZ~^N2)xq`U^IQ`rWPyibD?bj9?pwgXNvCe0$Pd2(Mp{(z!*N_c&#EVfPQPOPESnFcO5+KBQ8@q+ p8z%Dh(x+SlNxIAFp-`cJpKkk3xSKp4b(frJZ$2QVhP-c9(*nFFg=V_?rUN_>TK zk{j7uk35}!Uchbv8+viaZy|wd70;T^rA_CzGt&)%TDAUz(qH_i)8l@-d-8J3Z(MgD ze*oIZf}lB8_pjMEF3`qihUP>FaduPnJJ?tllWVPopgt;qLu>#DAxRU3%SwsE)Fdm8 z7esofme17*C~jrMk2j*Rdbj-PQwq{zF3$Y~Ci*IZKT_V9!rb`+AwzJ)72r}^ih#vD z#9D|Rd0i^-mvV;#)&t~HasZD|lgQ6GbhI9T5hwI|Gyo{%4cy=kz+#4+cJc`f#1^jD z1Fd+9HJiS7#80IzHohS_048I=Ik&wB#Xymifkm7&6b-Dk{@mCD{-xOe#bV095ZeIO z7RUmatklrp;aExH8$zy>X0KHOlAxm_tc2W!e+6pQ`cwJ<5~bm7?i^l300000NkvXX Hu0mjfq(;v^ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/spinarak/icon_gba.png b/graphics/pokemon/spinarak/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..54ec8e0fef746207e91f0eab21c7de25c90795cd GIT binary patch literal 345 zcmV-f0jB zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H*GWV{R5*?8(y0&k~q55m+5MW zgG<4~AQcqKUm_S|*V3uI?T*~#;6BEFF$DU3Ze-Z+@`Fl4uP_*u26B6XAsW+Qnao19#$$d*y6T53~F;1Eh z`^T39Z(tyIU<8a((gQOuV74Yy7EI`T2nh>j^D*ZZjOPRW0><~Tfbo1hEtqq2bocKl rrdIQdTZ0&N#JKi0=e3{N!bf~wr2T}X1oDxT00000NkvXXu0mjf^mmpN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/spinarak/normal_gba.pal b/graphics/pokemon/spinarak/normal_gba.pal new file mode 100644 index 0000000000..0a09982d68 --- /dev/null +++ b/graphics/pokemon/spinarak/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +205 255 115 +148 230 65 +98 189 32 +82 123 41 +49 82 16 +255 255 90 +180 164 49 +148 123 49 +255 156 82 +238 49 0 +148 49 0 +189 189 189 +123 123 123 +16 16 16 diff --git a/graphics/pokemon/spinarak/shiny_gba.pal b/graphics/pokemon/spinarak/shiny_gba.pal new file mode 100644 index 0000000000..f2aed8e9f5 --- /dev/null +++ b/graphics/pokemon/spinarak/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +180 213 222 +139 172 189 +82 106 156 +57 74 90 +32 49 74 +230 172 205 +172 90 123 +106 65 82 +255 156 82 +238 49 0 +148 49 0 +189 189 189 +123 123 123 +16 16 16 diff --git a/graphics/pokemon/spoink/anim_front_gba.png b/graphics/pokemon/spoink/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8bdf77cbde35cd593b7904b39a4ae6daa883454d GIT binary patch literal 663 zcmV;I0%-k-P)ZgluAm)i&_{M7ytkON=i!q|NmlAQUCw|;zd`700001 zbW%=J06^y0W&i*J6-h)vR9J=WmN9GFKp2LP`i2GqM#(Se$z)0h=rjgwpKjlm0cim9s}xkvbyPeMJaSBde`sqec!!zzE?sF>Qq(r z)bj!o2Uo9`#diSwxO&ZtFMk0X6nUN(pKk&1DZeaA1b96FU_te30EqiVab4Z;b#Y%- z)dK?Fmn6_Zm}Oa7P(M^p%exo=@-%&tdImZueX-IT&_RV-Yre;`YKSSjz~an!gazKE zKOfbZ3E3&vL2&FQk0CeZXub-9BXjbV0Y=f>1*_mfEyC_?7&Q+97sTw8TQm7UL-4@Z zs8lIUUT{v42hKS%LPs+WXcX#b(g`FjpgFT;)GiR$-9|_q^&D2B_v#+eFR^Xv>;f$@ zSbx+KY%{T0y@5bX%O}Vv z71I#VC_1Ye)P=}uTz_*8HK2=I10M(dnTFgH|0Xv-Qfyk#L59onTTd)5@6dnG$Kv|` zjz!TIi=)0+G^!^Sw|%iV-uYPcUg_@8`yFcJWjN~rA};mX+{`#5k~UX2++&*PeeN=4 z-=h(@a#;hQ$Ji6_HJ4ci>xVjfdqIF%3yFeNq{=2!1W2R89ZVES>5c#y3zVAvJZ*B0 x0E)$P9BTB1f$L(7J5X>!BT4WJX3(I1{Q^n|;utdALOcKf002ovPDHLkV1hA?BK-gW literal 0 HcmV?d00001 diff --git a/graphics/pokemon/spoink/back_gba.png b/graphics/pokemon/spoink/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7872e240c84b5a1dc772355b3e8841dc7b9a9ba6 GIT binary patch literal 453 zcmV;$0XqJPP)ZgluAm)i&_{M7ytkON=i!q|NmlAQUCw|;zd`700001 zbW%=J06^y0W&i*ILrFwIR7i>K(y>y5KoACC3JRz#UT(;2C;=$9bNsLvm@~fuO7lZYeO~n+$>(1w>Oo z0B1hg7QET#&Ri%Vq@?b_6PTHlufzrga4dzO0Paw^zoO=jSBoqqfjdGm&ESg!Fj_1g zGa$u92r)YWfKvjDk6{zy6mAfN8xY%fjDw)5_&KM*wjzzrtQ%SYtH=cYK1dT2d>~*A zfXq0>`!^Qsz*+|`L%>>)qy~T$7Ou0}7 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/spoink/icon_gba.png b/graphics/pokemon/spoink/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..387d0ed000a6858ef27122f85e71d070d66212bb GIT binary patch literal 277 zcmV+w0qXvVP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*HlSxEDR5*?0(yHTgHnQ=;agYFTwuoB5nigL$bYlVU0#ffm)+DZpG?^^KmWV0?A(J=|%C8TaHzM?_ zEzA#LWCN^<*xFwZk!@4h3o19*SCuCVf$FE*1!kQ*+#8=mT;M`+?Sr}P2jfN$ghvMx biu_M(L-Ai^emqS100000NkvXXu0mjfh7@u& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/spoink/normal_gba.pal b/graphics/pokemon/spoink/normal_gba.pal new file mode 100644 index 0000000000..c1891323c0 --- /dev/null +++ b/graphics/pokemon/spoink/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 255 255 +172 172 164 +139 139 148 +106 115 123 +49 49 41 +255 230 255 +255 205 189 +230 172 131 +148 74 74 +197 139 90 +24 24 24 +0 0 0 +74 74 74 +255 255 255 +98 82 82 +0 0 0 diff --git a/graphics/pokemon/spoink/shiny_gba.pal b/graphics/pokemon/spoink/shiny_gba.pal new file mode 100644 index 0000000000..c8edfafd73 --- /dev/null +++ b/graphics/pokemon/spoink/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 255 255 +255 205 172 +246 180 139 +205 164 123 +98 74 57 +172 172 172 +139 139 139 +82 82 82 +49 49 49 +106 106 106 +0 0 0 +0 0 0 +172 123 106 +255 255 255 +98 82 82 +0 0 0 diff --git a/graphics/pokemon/squirtle/anim_front_gba.png b/graphics/pokemon/squirtle/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..403a786ecf5eda67f2d802a18691ff1280fa622b GIT binary patch literal 899 zcmV-}1AP36P)5`p#BoUQXCf~TIL+(096)jDR*D_uhQUI=lz@IpapvYD&TmfmETq7t6$0ObN$V+N zwr%e~=)pt+LIG@UxY4D3bb?#Sz4x!= zal;H~hQJ1)Q5S&|dE79^2qdjB@h*=L*q6r*(`VQtF63Qz-|cjoelQxH5ZfO!sJlx34;~T4sfFc1S@RqhpxU>)`Yuhx8mCOU! z4ZX;+oMRP$1VD+Mj2x>2D!^EoRltpPP>M&XDqdnE*EY}e&mJJ+oJo)6@2!A%uo;BP z9>f|^i4Vo(+605gy1C0**0TQdT5KTh0s|prfq@91$v_A}!DuoN(ieiE1=_2`6@t-d zAomjt0h~>r=mkRoz`M)y|lMQ4d=x4L<$(@0ugh-zRRFL6sGGKE93F$fUWgr|gK;{Z^ z@%+WM&Oj;!xmbU_lVz2GK(=k(nFcb%H23F~DCto1t6Bza$fzF*eT0SV;=}u4w zoglPbm4b(>Exv?ykr$Zt`quZ$Kj9@9#}z!Q1CuruRBD=`)Ve^^8|RG0;LXEXTY;h4QM(UQt5#8 zwq9?(c~&+Z9){cqG->YU zuzsPy;5Aq&{L>7kq`)#7JO?X<-zA^{biW|rSo{X+F~2IXfV(;lt`b0%iSP^}f!+1B b{(k)c{Tk;%d!W-D00000NkvXXu0mjfcW2N| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/squirtle/icon_gba.png b/graphics/pokemon/squirtle/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..75a58770fc67c9f105784a734d246fdbca5b975b GIT binary patch literal 344 zcmV-e0jK_nP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H)=5M`R5*?8l0OQ+S`eHZ#NUvFk4N6)@gekM!KSfSciJcr?HdF01pt;P;7tUKG>U2m9xb3N zauB{k!CukvP7C4w(7@JwTI$dRbGG5Pl7z0vaBg5i;$X@cpeexjC5RLtT$tx*n}ADQ zEKXGdGFi`i03msn{S9RNIM|7-&_C~jqbglGVWL4!n7%<)m|&0-CK?ok@fBW}V2~F^ qgyv3|ILrsaTxSDeGMVRJ_2UIrVyD4bFp#ML0000+^%|NsB2|K5ZD-cshIAk_f>w6wH)dwWVsN)QkbR_1Jn00001 zbW%=J06^y0W&i*MXGugsR9J=8mcMV?Mij?6@KzZuI(8B>XUIFkV_fkF)n3GyJm|+@ z{SmQoR)%(P4RFg64%E-$atbKrGk@vZG z@4Y+S`&!nwn9V9rdv#zEl%BdL2EZ=^NqvEC$^(lOZtV97397&(u*KxU8eXc$1936B z(166^{Ry95%J>+vSrxzq_AD|?rb~>Ei8L8y)g_7~Ncs-Z$q=K_R@i1a#MgE@mhEaL+W&%qyev`u(88V8=g__H;pr=1Ik=8!P>M9Um@%^bR2-l3jvsK0)QSm z;8NzU80(pq@Huzjnajb?^Q8%}terb>U;GHvIA5*uJplg!z!X7YhXB;WzeW!#O&?&J zC1VDFMjp7EaUrU!b)NoJ0EG)%pjArNnSb(t`fL+sR|4mi80S|jtRe!G%d+73X$2tj ztDLcj$w)Y342k%xvc~*6U*m|(g;M;-Pvf&nQE#qupD+(th=GCt7{pKkTDR-K3W2s= z1-u0JtO{82sD|LS0rwns&tB5dt=BUIx$Pi*?6UBAZJdW9lnzubtfz0h?L%L9TflH~ z@YMCi@yiH{NwE?&z-~L#6UQR*Xz%AU1oWd}w<+_*iHLA+9HS5YcoU}=vHpoTVQdhe zAy7M{RN|F`G3VXdVl2iL3~MPK}~C=!l*xkjV|MEtvXLn7uA9@UEdczY2!M$A9- z!Xh~q)eppD%Drvg4R$939K;QG#Ww&gb&-4pn6D6M#pg}qxMMiC^{ElqQ5Bib^jlrC z#tZNNX>70ZR0k@e#TNC3(tT5US5-vC0;o~28E^XW!6eW+GcM2-(|}A>UG4X;xYn7w zX+XG0hS-mpWh1Lg7<=*t{ii4&Y!P)QDc3bnk;HJihd`1hye=OUK&JS5KS@xKH31mo zK`Ql<31}?}K%pjJe!Z4J_ibxojWVka+{~0h=_d2*WlbcZ{94`?5@wj(%n+#6I!(q( z1EC076(oo3@9B1HSW2*taQV)2`d%M{DV<-W3d*N*XX}hQ& zLMZ=apMG3n5K;sccDjq2sBpHzO8~&JUugzMA7?AnKqWxySSapu9&9~GO{cfC zMUMMO9%k2@;*L7jI8)YRAe+BYIELZ`-OKLZ0Q7|j6<|^*($*rr!}#u{e5iMSwACP9 zA#ev#0}%P)a}>UuM+T9j0OpSozz7Y!U1h=87}ypt+80@RmhYANM`30T@xDTC$aLkHN>D*)fD9}oytXifS7M~ju4^h2Ko0|hk51A=0F zpgMX3(7Jz3PL&>O&=2$3>y`o<^n;WQ^SkqA{UBw-&CLC(ekkS^ru4&qcb9vr8%?9! P00000NkvXXu0mjfest2E literal 0 HcmV?d00001 diff --git a/graphics/pokemon/stantler/back_gba.png b/graphics/pokemon/stantler/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9ddf7a40cc2c7fdd141909ed868cb66c60c5b26d GIT binary patch literal 680 zcmV;Z0$2TsP)+^%|NsB2|K5ZD-cshIAk_f>w6wH)dwWVsN)QkbR_1Jn00001 zbW%=J06^y0W&i*JCP_p=R7i=P@$0o()cL4Vl$Q^CU~)_wm1<_dw|X4J__$A(lEHZ4Zxs1M+bm z*9}4<$vXh=ACmxH>IQY+^@q8xJHKLmGC8hI05meNvsOx*oE*$e7MINpkhL;!U>8(C zL>&Wrpbcls&=+2*{08VQj|vq4%h%hkJh|Fr6_i-2)wKqxeWDD3S|6=ne>)7oIq*;$ zEn5%k{QKoAfY!#`fcEXuPJvUi836n1H`F7e0b&3ux7=NUb_6Kn_d8X+T>#h}Q5ZX= zJy5Fi=X;A}eI5h#01&0m7V_H25FoY6{OY8BRH{?!n-WH zv)w$&s07@~0YsaovL9dGXcy9);l0VSe+;pJqs0?tr72__fZ|(9`AZ|XjBAt)rHo~T z;QS#fLbh}^<8vVvoX=w-i)Y3d02xRKv6A3+4q8uCZBCEtE3OEZbsjU5s0D}cs+RJ;y!nV7F?|_X65N{#c zqF%sR5LF^iXs0kwjj4CgTZneZIdB$I061_K5`gR-qyb5L0iK%Dzm7kj^#D-UT~>Mk O0000DV$k7R5*>@k}+z;Fc3v`0_iX=ROT=NyR!>}e&;zyDql_2sxyLx z9b8Qudo7PQY!||^11j|NH4@A-=7q~GE318;vvH$3A6K9vvyAJ~U`;&-?rW42Fyd)m zTFA~E;ghnH{$o!tt}Gmw_C%e)1W>nwDTR*FLyjI@jRlm4vPkW*+)*!c1!^=%S3jgd zgEl>YA+;9q05(h^UNmU!U?z3NM%$Wm*=XLP{?iyIg{;O1S0`fx-7)PSW4OnyBsOC_ z6|foO%k=NY;ABkWafAAbr3%x-^nZa6lLq)pKfVE6J+{-iP*J@A0000+3{<02ITJjGRXgRKF^vnwTOqPr;oX+FG}_h#mO zzl!n=4ptIhs#!V$SeE!I;Ys9xPtab&FkeELzs1&LN;wAcTH;b8T7r8E*+dWinu5 z2>qu1YgrF@8vvD=hP)At{)J{zdvE;2NbP%v$J{3SwFQQJd=?;5Oq0@Ry61o>a(L(MnuWsXb@*Mh{ z*XDZx5a6EM@Ab!%k3J8Y^SuBTs|LLO^RO4kFHcTTYp_%RW)os91OIl|k4FIT>lu;i z_yZ%50!@POZWzY{0Gt^i=Q~1UV$7D|!%IB+WAf2?PY4vgx&YZiqMT5!(UxEEd1dKAlX&3tbb`hAsjdc z-t^$GVA@EeS{C%;oPOmT*Kf8d#cBC4G8=Hd74%o--7t$ZPE+=>`Z`sn@p-P~>$;?sByWCcobb2B68}a{~h{ zaTAnQq~}+G0M(?DFU~9EJa^elY&<+E1cY1Q%YdcNA>T*B@OYV2XOZ+8!2Og&jEY<- zWz`(u@dE%Eo-AOIJ;2-oA~pm`11d4#wP{-b7ETAy5SU89{y?CJ=YFh7YD6rGJubTs zYobRgCjgYPfmIuZlRs>6t1OJw75;P#P}WxrTKy4VJx<;N6q>v~|9yNrJ9Nx)0=kYH~LU0^uL5egB{lYF>PC zZ+j6BT2V4T@DIv6?k3)SKaL{@gr|Mr9~86)*TY^vMqTv0eg6RVpvmhls6W~RUTfHy z_5js?Z4YDZ%X#PJaA0mwE;`(~H2`v2KqsXsyWKixDV z?EOOh-NA5>QvYqHYxVb|kx+lWQU9HIuGBx^Q53zd{-Eu$`tLg8M*W4jXQ)5u$m{A~ zenb7i9qiPf|0DIMlKT4@>YpQTsK2>Uf4rGXexUwv8;q6uTSwGC!K6^!X<4X$b&*#8 z^+K|^V~|X7XB%n8E06{b#J!p+?ojmO;%=kf75=q$BQVVbRQ6rF|M%l>rUxj>C;K(o2$pKnw<8s$fkOcmmTLVC-aV37s|fUph0aIm0CB zhhj0hx6DGZ{rHn^sH#uBZPi~dz-f39(79ItE>A(z!Sf+bJ)|LMAB+cxL*Ra^x;udV z)4)DxGVp-^0~w+Qhu3F70yd!LJYxq^7lH@ifiv&|7^K4nOyD?f!oZ{f8_=Lfwh!`b&yagDbki;Sph@@a}&H@C~+;?9Y1YM)? zFihTC04{twLP(9;2#}oivP=B#`hLIyIIa@vxDgyB;0~k+#GLS>0p*!4DMEmc6i1MN z@?I?|g3V~1ccb;QUJ$V*Xkzb r8{krNd8^uGUTq19nD@k|-lP5il8m7Wrkk(G00000NkvXXu0mjf9YfkN literal 0 HcmV?d00001 diff --git a/graphics/pokemon/starmie/icon_gba.png b/graphics/pokemon/starmie/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..844cae0c72d2b638549ab4e89607a653b2b4ef92 GIT binary patch literal 380 zcmV-?0fYXDP)DV$insnOs5O9{7)xsMO!9v}=JT*+ZRZf=R+cZf-sxWkzG3j@pQG(>K(4OXRm>8!rL| z9$Mt`fzb|aL|d+2dA__v0XM3BS^)OmwAHk8q=PYgQYrt{)$W{&=3+stK_LGC|NsC0N$W;K00001 zbW%=J06^y0W&i*KOG!jQR9J=Wm%ne*KorNFA(Fjus-wDN-B@Cc?>aCrxOSv=s6_lj zgrNfi4vY-VIUAw0zHCH@*bMy#5c~ra{sH7Jl{%&VUwD_MRTZD@sS-oJ>wWazySsOO zUrW+jk0AMT4RH3Z2AD-PArkha4w%%`kh01ga+p@jV5;3=l+w7kodAHKH+C=w zB3j7MBrlIWj8z9~0L1SL0h;6)tYhECS_}aS8NQvg39Mts+=d$C(aN%th9^5V2?E>J zw;2Rj$)KEt;TxT}y54qmU!(DA23QY6ch?94*JzV|A%K)}z&DTb{Mz-fmC*6(5iyA2 z8}o}izp}A~TC0c9NFoNnukU~I>o#$)SvaLeLMQ(71z^Bl_2NYV!GYgDuMHjcB4`_> zMGof|S;m1jvWkGz)DQEF1Eh-_Bmzt$&wgaQ$OE*x&4pTaev@5ZdCpX06JhVFyLp~> zaaSvA?y24l0&L@MS^^|4)_1x-?m%l!#X!d<)~RpNlnJX$JWGX(I7O7EVgPAl^g=?= zawFjzjYqes8(WON6;&yZ?utjL;9bFWjPB2;u_daZ5eZ9s2ncuoAVu9*P!e78T5J8^ zsu|rd_G;{bGN=im)V)0=sOye4d_4!G+)6tTD7RyJb-*>lZ_oy6PgDez{9&e)z$$h%>Kpt znM=N4-xSUMg=XPL9b=E1gTn0RlEd(%9oTz%k402eg2Jfh>c(FCDW4XC3<^CBjKFnW zqLthS%S^)OmwAHk8q=PYgQYrt{)$W{&=3+stK_LGC|NsC0N$W;K00001 zbW%=J06^y0W&i*IUr9tkR7i>Kk}+wu17CjsQ0~p`T7{L3c z#mqpftH?krV+DTC=;0^OV^#YA(%&RXs$mvweFz>C zknXguW>~aIDX}g+=~KCH@3aj8aVC3Bx-CbX6*-WeuWKzYr4HaM&8PS}859YugR+>` z>tyg+>i_}Q>uhk{(IMQflYu;yIyK{rxjD#blMuN-_I0%7k^^9q5bwdf2BOmv^ViQe XP4M8p?VmEI00000NkvXXu0mjfQ*Gf1 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/staryu/icon_gba.png b/graphics/pokemon/staryu/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b90c0b9c3d40a0863c46bbe54b4863268b7caa45 GIT binary patch literal 294 zcmV+>0oneEP)DV$-9H2wal*xz%F@=#P zYE=yCkGfT@nRv(_!}pZ>y(!&YQ+fkd8k&HV8=z^*1f|@!^ofuMqNygB;5?0WYYo=A z5$Z=e#Na^0YImG1rx$?Zc{Z>J;G=H=dc%Mf9G2~{05_`scRtmjbUJL$yAGoLs}7?5 s{6q)Y{;q>;|A7wJ>wujOfZwLW1^woFZ=i5dMgRZ+07*qoM6N<$f`(LrJpcdz literal 0 HcmV?d00001 diff --git a/graphics/pokemon/staryu/normal_gba.pal b/graphics/pokemon/staryu/normal_gba.pal new file mode 100644 index 0000000000..005b36c326 --- /dev/null +++ b/graphics/pokemon/staryu/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +16 16 16 +255 255 180 +246 213 82 +197 172 16 +115 90 0 +246 222 180 +213 180 115 +164 131 49 +123 82 41 +255 213 213 +238 156 139 +230 98 65 +172 65 32 +255 0 255 +255 255 255 diff --git a/graphics/pokemon/staryu/shiny_gba.pal b/graphics/pokemon/staryu/shiny_gba.pal new file mode 100644 index 0000000000..e48cd65106 --- /dev/null +++ b/graphics/pokemon/staryu/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +16 16 16 +255 255 180 +246 213 82 +197 172 16 +115 90 0 +230 230 205 +189 189 164 +148 148 123 +98 98 74 +156 255 255 +106 213 255 +65 172 222 +8 115 164 +255 0 255 +255 255 255 diff --git a/graphics/pokemon/steelix/anim_front_gba.png b/graphics/pokemon/steelix/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..bf4c25932176c561c44de77a90a2cfd20dc0f6d8 GIT binary patch literal 1476 zcmV;#1v~nQP)ti8>}-sax_0RR60|Nj90{{a8hQb7<95dZ)GH1Aqv00001 zbW%=J06^y0W&i*MLPwPemSZTMcmI)eivz9HaR5%GAAjV`@F+=wA3q69yyVS!>l zwy(>uBre{n!GSj7BbYf6!4q#g!5-mVvukhXMCRBrRb7SH0 zU8mDJ$+sjfHpaA}lQVf%)*+14CHc;~SQ~R8`NQjnQ4OmkC<|6WwI@rYtZ}GktM41dH;yA^MyQWR+F2AeDxmBZ)r5!bz(_!PLvh? zPmP?c<_2ng)l@}J7pj^UoGzSUEsai=1d=SQUnl9k$?t=xmK`91NUKQ@&*vAc$ohQ9 z+0Yy(K|C8p#-x5@f0Y~`FZY5kzm;eYf{VAU2%@8z1o1_oy-*|C?)>xTc_NVhy7+$i z+6w4FAmP=0?2(-cYE*~{*FQ(qRFG-jqoAv$QL7BiTh7Xg=}1t@5hCVWtohsH6l;H4!Z-T5`932!XdPqgCAoFB z`98CjXH67Cpb}+ovjW++-v~#QEM{hz$Q0cm;BOSqypMsCE4I6*x144olp*Oszi>X2 zq)x&(eV!K07|zA0yi)bM!FAi)@A- z?(m}K2YQ&`1yAYW0WYTXFozdodYH$H5k1V~#Xt`Wcrnn!5?&1SFpn2KJ^Tl}sK$aB zyog7FvsRCIVbdxI#&{tvDDikf;SgPSc+p<_NskwC;EQ#K7u*Q~UeGqUNYu!#2E3qM z=R#iUE=Er%sr7i#@`djj`y0XO`U#x|)xP_Q9!SCRQ zJHFTijyeehabAH6bTQ_Oqv=2jcHCw-2Tov=fiDiGLosg`fh@S{`695|74iAgaowH{ z)xa0RSqARedA@K*-$B)gFH*m2Q`hoE+8+)BUkD^o#}~>INW5C)3&97Dg&&sq0xov+ zRi2ml0u$c+eaH!-Kg2xLw;6uW1*ubutxxqa?V3sF*R1c+C1$@}ywy;Zpfr8-wr(OON0Epah e4lhcE4E_T>;d~6QsYY7>0000ti8>}-sax_0RR60|Nj90{{a8hQb7<95dZ)GH1Aqv00001 zbW%=J06^y0W&i*Ju}MThR7i<^mAiK0Fc5|*a7vzuLTs6{1tU?Z!oRmtwU%6M7w}W& zP+*)&`v|);Qi8cynSyid`Sj1#VzIchiheG>HPgG2tBUf|l>yVA1UM9d-NC((=?^#+ zB6J69LI@siKFunKH6frtXz?RSzzqe!Cl!w-%n+tY0g?_7;!_yI(%}oR2<>c+*?esW zG!GI|Vd!!tO-+&T&@j^-#pJyAM3#xueT2U6yRJ(D4QUrY=nfb=2EG(p(uncj`yJ5V zDAdHgihtj4Bvuk3D|k^rvYRwlT~^3NKxg14P3Psg)=g4?%TLqP@Rr^j#K8i<1vQL| zVnw{VG5WY?A*P zLH}aepq(e1fj!*`EPmh^TCW`h*vHys0ehN&?r2(VLEC}VWA?}Obs@QGZ+Jen0Lb!m zp4Mf_0F2fbqHW|9WT&V28Sr(`dXU%LR=Zwoo&gU!Z)htIoZIsCW@EWb#G!>#N(zs0 z@nn^QVc@Jb>t|=O56%+SonH(7sz;;wn|G=J?0V@xv^&lFt3Iza?7UwtkL0h*Ko;OG zlz{A~`zv9xB@678`Ua5rMBM0a0A7JDsqX<&C4h&OmQbm6sfJ^^ zHH~B*Z|E-@&)FYP`nRz$ir-^D5Aek{uwPm}n?=>)B-cG(HJBY3FXWnm4n+WtccK@8 xdLGbw-U+#W=9i`l`m~Zp6akNQ0+^sD;6H$V&)!7AM56!z002ovPDHLkV1n!^girtg literal 0 HcmV?d00001 diff --git a/graphics/pokemon/steelix/icon_gba.png b/graphics/pokemon/steelix/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c99e175817a80242c27af371ee42718fb3d5fce0 GIT binary patch literal 433 zcmV;i0Z#sjP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IFG)l}R5*>*lFgCAFbsuVK{PUVJbv8c*+~KEzYCxM))ED1m6(v2 z(_XPp?~VR!eIb0;u@6mC?X_mJP6N-MLySg5aM>LJ11RoL%gA|Bu%eKzQH0ae4MEYo z8m=O8GEOD6fLV)qBT20;#mj6^q@?B5Bzg}d4@&I~BxO5cXY)9lNJhqOYP=f#Mq*7oKKU=tYD%6c)_(uh^o6v1R#kcG81qJ=m( zsD{^YzI$XgR&2wWa572G#|AxFrC$f67?t;Ub#OkQyWu!sJOUHK!p9Mqm5&Y>=c5PY b-+cT5$WW7!P=xfT00000NkvXXu0mjfIz`9& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/steelix/normal_gba.pal b/graphics/pokemon/steelix/normal_gba.pal new file mode 100644 index 0000000000..e18ae398c5 --- /dev/null +++ b/graphics/pokemon/steelix/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 0 255 +255 0 255 +255 0 255 +57 57 82 +74 90 123 +131 156 172 +189 205 197 +222 230 222 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +213 82 65 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/steelix/shiny_gba.pal b/graphics/pokemon/steelix/shiny_gba.pal new file mode 100644 index 0000000000..02b21c7ac3 --- /dev/null +++ b/graphics/pokemon/steelix/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 0 255 +255 0 255 +255 0 255 +98 82 57 +139 106 82 +189 156 90 +230 197 115 +255 230 139 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +213 82 65 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/sudowoodo/anim_front_gba.png b/graphics/pokemon/sudowoodo/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ed198580d96315992b9d8621ad7971b67cce0ce3 GIT binary patch literal 1077 zcmV-51j_q~P)!DQ@(KAMA(4l4QIDi#C*o0Ai?%lihWSVykB|4>VDRsSe5bzb zgKOO5f%=L!ZUErqXmaA*B89M&5Y|orOJE9+^<>E+0QY>2fSLKR`sP4X25@+BMUQ(A z2JrP_K`$X9ljE{jl;i?DG^f}UD+gfggR0iiYEABNz&ZD!9Igj9<&a8KAb>-;T$E{< z7etx{@R%1@srnFr6F$~}b^2HoL>gkuPdNN47Hj!_xu5_hhs|m$;|+CCar#ODMm3gv zMBSS3Pmf=Nn%Ufmy#>}u0hpwTd7yKcmMoQ>1e&rj4G7~@b`!`8J;T!gkg}V>FgI1v z#|$8iyC)o)vgrlw87>ubYfkDo{O3W}nShR2@T;@rBan{qHR zJoeOW*#H%_UiSb~bO1~UAI_t|I_Ewn904%xX;TK^+ye=LIY8_Lj3z!L02ZP406b&@ zfg3Qu=}8bv>Fi_=5K1|hjwD!yoT=-2R9mDpU`NIgl8V@b;iGJRZli$8BHJ%p*UnP@k3T5pFN}NK{Vt{YM%;PP!bgPH zBmUSLGB2XY*aVXR53udYkEKKpeV%4wHNZ}c+|S;`?1dG)ar>f3WmgAH8bnST5Wxk2 zQj;O6?5as}^T3CsvNw{Y07s;3=T0mEW_R3Bb^CIEupBLGd*j~V5p z+AVNwJENSG=O1gpb+M}Cb0=jA=W*p8rb?kw`RSRHGTQEG_b^rBgSYmy$F$n63k5jR z^$%^~K58SD#`Cn(N!!8+4G5%^-B!H0RDVc)%qWy`-FX|U%TRHaYkP4U&bm(r#otHq z$NVtM;0~;()rfx*)|doDmbACxzb&;Y+S>m_{IOJ2AAchLlkqL}c=qBi#&@I=3|jFQ zxJ7W+^Ei;zy#Qq|qCNo18WyVOflkn7-9g~&5gs>y%C!Vjw;h4B&0Z5DG$<(lu|s%w z?!gT}_Yfq3Of5p~a!4e43v{%OgCdvX3?;R80GNQ-kg28tDQ~Ib@DE}Kpp!uR&@v@O v|6q#(+mo?E-oKl(CN5KoEvqoC~|*9hSQ~65})=q|>o9G@x5t^AyOu zK;-rHr+8^VIz<6DRH-24b(adI%R?aLsGWc9<05;Pi=lqwDm#E4=S#;=WnyU(UIar- zc(?SGQVTmUDJRU-!d8KYG|>~zopEl>w-}M0P=%KxOa7w8S^(l%a(~MQnF;h5Yc>fJ zCV~xC(j;&SP#C0A(d8;KjY5Sc6b6{^A^054OaKB<;2X6#wqpQwr`$q-IL{AmTcSkW zsZT8}0N~)b?G(GH0cu(Z6o4bvGN~P%7f%ZT3Q7R2R-5$WDba6WuvWDfwvr!Czyv^l zQ_asc(0c)f2jSfl3k7w* z>M@Qc;HB^}7*l5}U}b0mX(Y!SucEWvYo{g#@G+8$JOr?Nd|6km0-l>%=11y26#%c- z@Zc2gqtVmAcQOHZsq_sC`XT5^a6YU9>+-dWeV1tW%>wxAxmI<*z=rLkr3uGh>R)#U eGdot`UyomGiUEK(bla=|0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I2}wjjR5*>@l09z2FbqbO3z#=Z4pDRq&{KHUlmm5S5J+>*kx2lN zTp_EA!d76ofCC{codo)E$4)IbJ@F$5@G14@3j7?LW}k562zo7V4lafU0pVy<2e4ld zHRlMp*Fc0`J$vAF&|w0wc}#(txj#7zTtCM$*xlN#zH}PPbU;6300>QIc@sAQlwzn8 z*kdRCDN^Ac(_T|Gh^7D^+Y(d;n`NG<+O}=ZMMmb%fNIr$tslCCj!PtWuth(Nd50Jj zK5yAs56cMze_c8NQHg#x=RYx@Wzf#w2 pzPh^mQQlVkD8S^0DZsD%_y(PfsGHJUy?+1z002ovPDHLkV1jm+s44&e literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sudowoodo/normal_gba.pal b/graphics/pokemon/sudowoodo/normal_gba.pal new file mode 100644 index 0000000000..3d589fc9d2 --- /dev/null +++ b/graphics/pokemon/sudowoodo/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +230 197 106 +189 156 82 +148 115 49 +98 74 16 +255 0 255 +139 255 139 +41 222 49 +41 172 49 +24 106 32 +255 205 0 +222 148 0 +156 106 0 +180 180 180 +16 16 16 diff --git a/graphics/pokemon/sudowoodo/shiny_gba.pal b/graphics/pokemon/sudowoodo/shiny_gba.pal new file mode 100644 index 0000000000..6344dcc533 --- /dev/null +++ b/graphics/pokemon/sudowoodo/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +222 222 57 +180 189 24 +123 139 24 +82 90 24 +255 0 255 +255 205 172 +255 115 74 +205 74 49 +131 57 41 +255 205 0 +222 148 0 +156 106 0 +180 180 180 +16 16 16 diff --git a/graphics/pokemon/suicune/anim_front_gba.png b/graphics/pokemon/suicune/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6eca4e01f9fe2defe62d2d2a020156a4fef7e84e GIT binary patch literal 2161 zcmV-%2#)uOP)K|Ey~Ni!tU>Ig6wK0M*siw6wI8l$2^}Y7h_*dvSFx00001 zbW%=J06^y0W&i*O?@2^KR9JVja9U8RyQ5h#~EC5*YmJ+#Zrr8LrR;VDsl-&0X{536y8T8g%+n1yn7YQd(GBSA1) z;dNY7X8-qQfEk*2_s}QBMDsrX@1OS`|NoiexFzi~jt-6NvrjH?o%4<*y|SxQ42I2~ zND1G3Nrgd3Rom6H>W~JAqYoA$sLs%c1^|%+v_13yCACOri=;|4jS%ul4537MKEF&z zWf$fj@R4WxHsp~O7(hOoGhqnv&?0=4Ci7l+%`T}i+r?@2SAh&+E9y{J{h>Lp{lvtMnxqMB6ll>@DvzZ9TzARibjQK_xW!M zw_+mRP9t%vs*%Yc>ZCwlvhl5^!y5TputEud3wY&Wi2s@au$Q|J4oHRYYlS<4xUB;4 zLeuv-7vNxnG@ZatNCF~kF`!C@+zRg`!I6FYyr@y&A9tp}1sv@mKiiAX)vBhIbUsQW z+>HZJh5(VZ*@5L~0IkTIGy-g90`_TmSgX%~0t2)MYXFeDF|?rracRs}Sjy*FruS`Jps>>~h!5Zh1x7ak(9-Zv(=N!+2dofc+xVs;BtD6w4OqbT z&%?HMf+zuim_;ZFN3$@$!kcCWC9eIA-MDSrX5XRJ?>s=yc#0B&vMEYvV-F`&^l3XX zBUbr=VIq`Hq(y|zBy1l4A+nCn=$cf zK#~$y1DVYK0K#qs`y~e`$Y5~Qyk5Bn)doHntE)Q?ZL>e9nbc9rFDG=;x4Qf@+LOvJ z14`;WtMvsREopj{0n5ZU4+`={qosD&)M8cB>4QK0c1jGMJD;IOUG4IN6WxA6xaF#p z(41TbR?{iw%K+TtzfnPyG*bOIj<(D0{NQ^A=nVK3H6<8Slc?mtd?&=J{nFk;Q>95T z<6@fh5pe{>DdtP+L*pEhIANWSX%aQFa+4eIti3OTfSj--KyvOfP1>%2!wd&CS3v-v zNxTiVlXo?V0uv+Rwu=g^aYDNFQofLzY7$7!xK?*t*0QEs-)g<+A9MMsCV?)HOJ{!d zbjT4KRIOY4PoZ!JZtNC(eYc@?H=ONim@T+w7leEoInOgqawTW%)ZrDQZwK&zR)&>bpf6p~6I~JnnGce@z>v z8ETkJa(XRN0pJ6wNf%UuLOpsEhbGrIPN?McTNU*O>QPjasN{s2w0F1P;%Eqvoc^gg z1vZ%Etp1a3bvx3bA;4fL;95|UNzN0iz2>xuuwkAQ{?KfxdoHleBUM$1Dk#zh^1=_ zfWK!0u4BKni{Ue8u}0cu*9@ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/suicune/back_gba.png b/graphics/pokemon/suicune/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..80eef8678e50aa8275263e08b4ab641ff21b0bcc GIT binary patch literal 975 zcmV;=12FuFP)K|Ey~Ni!tU>Ig6wK0M*siw6wI8l$2^}Y7h_*dvSFx00001 zbW%=J06^y0W&i*KO-V#SR7i=vld*3bHx!2tXpB089Net>5){clU^`pU#JZ=+h-IMC zobj3|n@COCN^WkB{#h=lieLQR;dCrTBQmDw6tHMC^EKT6|l}<)J?|D zii~v@JlCz2WpZ)UZnwKDGepn{0um5yGio<7*4v$Lq<{q_s{|8vm3xeM{BVE&q zuVnnuX}3E)!dcfU05jGOmJ^Hs_c`x|U^5;&&Hn)8sNEqH0Y2CDr~VGyUxSO~5;`P! zW&{X?x}^=^F9W>}A-w`PlzFbFP^(*@^5OIgKzo#nyw76z6+l(l2Bpau8_>H3cF)uh z8doYEDP@Ytl6OS*39-{;flM94!G=ol_ovB7q{LB1fOEm6h9_}6feSnzjZ6*BZAt9H zr{+Q+updRb?qow1<#ys2F$6UN-j^Y~PUBcNHsbN+$-l#lvxu8Uz@@}CWYG{yh{kt{ ziDfvcCfx{x%$v%K;}bZ@MoZI<Be++!zoD3&8n~>mT}>HN)F{%dP+b002ovPDHLkV1g0t!5;ts literal 0 HcmV?d00001 diff --git a/graphics/pokemon/suicune/icon_gba.png b/graphics/pokemon/suicune/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4b3c695aa4ec3ac0180f3ec01eb1b670ca7f87 GIT binary patch literal 471 zcmV;|0Vw{7P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IRY^oaR5*>*k}+z-FcgNh7pxof5}pb{IZQVXy+juep&2~&0v=um z@5zuMQ_7>df=i*8VqAlvm{|C)j4j!v-MX}I`#Bo@Ac*w=F`8+rHRzGr_~Z>TgF!7P?{0&!27x&#JkSPlc&|+DX0kS6b+rI6 z$0}~X4&a)P1^2TKA){x#@FT=?ZvS%rP6T&D`r?NueHy{Q7WF$nJ^@Nv`VOGG#Z3SJ N002ovPDHLkV1hfx)A9fS literal 0 HcmV?d00001 diff --git a/graphics/pokemon/suicune/normal_gba.pal b/graphics/pokemon/suicune/normal_gba.pal new file mode 100644 index 0000000000..3a21dbd4dd --- /dev/null +++ b/graphics/pokemon/suicune/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 180 +255 255 255 +189 238 255 +123 189 255 +90 115 213 +57 74 148 +213 180 255 +172 106 255 +139 49 230 +82 57 139 +164 0 0 +213 213 213 +180 180 180 +148 148 148 +106 106 106 +16 16 16 diff --git a/graphics/pokemon/suicune/shiny_gba.pal b/graphics/pokemon/suicune/shiny_gba.pal new file mode 100644 index 0000000000..2ee8b7a0f7 --- /dev/null +++ b/graphics/pokemon/suicune/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 180 +255 255 255 +238 255 255 +197 230 255 +106 164 230 +49 82 156 +106 189 255 +57 139 222 +8 90 180 +32 57 98 +164 0 0 +213 205 230 +189 172 197 +139 123 148 +98 82 106 +16 16 16 diff --git a/graphics/pokemon/sunflora/anim_front_gba.png b/graphics/pokemon/sunflora/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..219c076ef128e3a0fef6e3c1b922623e1a340cc5 GIT binary patch literal 1050 zcmV+#1m*jQP) z8da@m82b9Q*nw88TGnYn*Eecn2j`jvQ3rvr#vVB@mMyE?DAY8G;KS*u1%D@-L=##d zN6pXH?wNH$2odE-T^u#R!c-tyY5MstH>p|2AUG71DAdXgP1DZ49DgE)Xq{`7a`W`^ z+nIU%)@X@NBTY(8ODmt5ZP+T&I@9D$13a|N6HOQHWQKffo2J<|3;OoDNU%o^xxlPn z==G||L#Aky8jztvTD2YFUZ;)2lG(0rfD@*PxZ>9re#JjOx=hl_$cCmuWLmYN?R9LJ!5j|D-W zkAANqZ-A~w)M1Qu7X$$eIvyluOabxO3t4ADfZ_Kn3_4e1=0uPz^w{EV!7q7GUMS#S z5nb9&myd>5@tDyUc|N~r0aCb>`bq!^Y=m=^c2~{=+p01ti!bN?Edi#m zkR$;DceIlvNP$51zD&bbMVH|roGzx0eAaOo2z*iRyh$QdcdBKWOo7a{=tI|&y}7g?;j!s<$}l&8s+^1 z-$l6pl!_EtcO3EhDJp3&P(R}R1>a3cgW-kFWH{vp;s#^hKR^p26g)Qk|1}st0e%NW Ujhl_F7ytkO07*qoM6N<$f`V1%+W-In literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sunflora/back_gba.png b/graphics/pokemon/sunflora/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c048bebc225cb6ddb53cb96f178dad163c9dc3c2 GIT binary patch literal 749 zcmVKls${vFc`;Ow04My-6{7SE+{!DbUCbSS%Uin3Ryz2 zAds~2v)5X&f7{}AFMrrA{i!uzz;14Ed86{}`oO7=yx*_1>Hs7eYmN58i+dJuRC1RnBOJKhIOPzB1aqRr<-=UO{(gF1BU8Dz8x z60P+Ezz~fE_PJ#UCdEyzF<$2(c&JZ!#ZyBim#b}(V~S!Q0(#Tt?m5uMF|HCFV}>kC zVL~bA{H#sF-ypEf9}l|7QU@js_1m)q1Mbpg@FjUd{mub!fK?J8z@n>bD=?r|eGxiFz%9#rydGZ;bF7QBtd3^kZ2(Vn z<~#!s19VR%ZkzfMNKy8EyA`nB8M}31I(<*=*2nU-0Xo$8sr9N&N1#B%TD19momO%L ftc!2)KfQhdYT96-N=R*z00000NkvXXu0mjff(un> literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sunflora/icon_gba.png b/graphics/pokemon/sunflora/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6493eb5100d19ecd68568eedf537bd83575fee49 GIT binary patch literal 447 zcmV;w0YLtVP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IJxN4CR5*>*k}+-qF%(2O!TM4g%1y&kvJJQl=h=Yddfm82CfW-S zZB2nhlg3O83-iy6_Z4?$iy% z55U4$iK(sn0J*deKnyQHGgK;~VhE4G8z5l|vDw!Zq5SK8zVn@<+z(Kz79q^0bX=*7 ziuvcx$~!P`RD3YZR256PP} zB0FF@#11r)S1a(-;X~R9lPI!X)PFJ^dZ`G7umegJQ)mm(muYfp1&W!+L@2eyz;=mj z2AEb>Qpyewa)i`-eke?rWQrhAaN&QRoY+`9ZjuC$Qw z4<~xJn-RkR literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sunkern/back_gba.png b/graphics/pokemon/sunkern/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e6adde7754fdf62ea663a69808c1c70781d05ae6 GIT binary patch literal 555 zcmV+`0@VG9P)K(lKkoKoke?)3~Hikaj5DN|ZVk#6aBJV5WYEU^pkY zlKUF2i3rjym*xXB=O<_!Z0XWMzDwVEiC}UU3hn5_Tm1j-y%!@wr~2 zz~X4h=u5`w@eDm?FajD!OSTOt&bX+&88jz=Ipgym97qY#E=^(8?Buv)bG4vMF! zOyCu)@|{kToQpJB)PdL~K|x6AN|l>B-61{ylBW+yBiGbW+(oEEh8l67Nws1t2r{0Qh{A?*K6`tO65}6Cd}h??IGv0GBh(egI3o{W?B5wKf0%002ovPDHLkV1k2`?{WYD literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sunkern/icon_gba.png b/graphics/pokemon/sunkern/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..60d7ea91ba7c0dc5ae4e95e4e96f06658b3d1a6e GIT binary patch literal 366 zcmV-!0g?WRP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H>`6pHR5*?0lc5g6Fc60O1ZyU#;ZZPS7Q?VJTP@FmEP@8v8eR!3 zf@}env|`6r!(T!`6VBb2KX+~Vm9ZZ$qPXW$Hk_I#=$2X8$u%Ta^&-paXN2Dil5$?+ zP<<~7NN7zOH*w<*4!1Dxjd2mM)+zwpSs^r@bY`cm!35bWMZjB%Kr-1LygI^=v)PCU zc(E5d=vi`7DF%ky^$q)%ic|<-Q~@ck@@6mqz^W>{YL1{@R5=L4ZUyD2R1ju~FBgQt zwO@td_N_1gC(^b literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sunkern/normal_gba.pal b/graphics/pokemon/sunkern/normal_gba.pal new file mode 100644 index 0000000000..7dab1246db --- /dev/null +++ b/graphics/pokemon/sunkern/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +74 57 41 +82 74 41 +106 98 49 +180 164 49 +180 164 57 +213 205 49 +255 255 0 +255 0 255 +32 98 16 +82 164 57 +115 213 41 +164 246 57 +16 16 16 +115 115 139 +255 255 255 diff --git a/graphics/pokemon/sunkern/shiny_gba.pal b/graphics/pokemon/sunkern/shiny_gba.pal new file mode 100644 index 0000000000..84a106f65d --- /dev/null +++ b/graphics/pokemon/sunkern/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +74 57 41 +82 57 41 +106 74 49 +164 106 32 +172 115 49 +213 164 49 +255 213 90 +255 0 255 +32 98 16 +82 164 57 +156 230 49 +205 255 98 +16 16 16 +115 115 139 +255 255 255 diff --git a/graphics/pokemon/surskit/anim_front_gba.png b/graphics/pokemon/surskit/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..187952826298c1e778ccab7762ef03801515d497 GIT binary patch literal 614 zcmV-s0-61ZP)U00001 zbW%=J06^y0W&i*I$y z5QZ*DK>aL5Y-~&{r9+oSV$4Hv)26EJ#4*1TLOD}we?8YuDxDJqjsC9MFCJie<1vVT z+n_b_0I!}2!Po<|l6oLfiK-)#D7u)<+(auHM#Is3<^jPfJpy+Qb)6={0J?*qvpG8CPusA7Ju=l6*ub*L zc4~#KSYHp#(om0I9H=a zjsCfO6{S7(G>EBE^#QYUKevPjk4 zGMkm-WpvVY1L?Z}PXp=Trh(YWor_|U00001 zbW%=J06^y0W&i*INl8ROR7i>K(y?xXFc1LHSPTp-vCPOv6d4Jr8;YfV0qKz43|T6n z;@|2LdGOS|AJsE9^iVGKP_^oin~3k_?l`mC-Q&-rcuRo%lq&K1A4=rA$jaL>;6CwDV{=?#FRHaEbf@3nK2HijOgfII*nmIQ5o9E?8CU{B<; zr+ygQ2x<}xqnrX5DbT1<0`OBPpkpQI!20}_2h=W8y0FLuD zzZM(d$yHvUH0MHYg+E)<0`|oCMo0y#i6!c|CM+`5!5ND}#CPCo6-_rEF&@T~@hVES zUkWTQ#UXsJ@SBxg+!4AwzW}!EDLyc~w|PVBKf(jUw;zDol&Ibjs2}|KI+XAoKk(kO zFn@=7FkB!;xpehCDgu1X4LvI2?h&BA-+TN{d;;iNYLLfEcf|kz002ovPDHLkV1lne B&1wJu literal 0 HcmV?d00001 diff --git a/graphics/pokemon/surskit/icon_gba.png b/graphics/pokemon/surskit/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a7267c21aa058cd84721c98fe880f6cfd32866e0 GIT binary patch literal 325 zcmV-L0lNN)P)DV$Q_W%F?X7H2a00001 zbW%=J06^y0W&i*KAxT6*R9J=WmOpFTKp4hFkRtFd`U&zqG&rpzD2*W(Lx+opRDnzi zR9q)dPIC@)D>OC~GMM}kgnpYQ6f_j7hGw`Tt&HEaQi&NZ6{Mql<04-Rf!^>lfkZhaB zhB@)e7w)9#X0}b&tC(9q)AT+Are_r^Bakw+Ml@gFA`3tOFbgCwH?Y$5_ne>tJZ|No zo7>ln1?t!qXn}kbX@H=qxXlAeU|h!W(9Ko_Pa%Y|2opF3y!9?t57{DADD@OT)Y+#! z7W0v7SUagG0P2FX7qd6NMrU$=a7w926kro+ad$1mH=j@TCkRO2CmxHdm^oXVhd4}#ocD|zKu_Xz(&0x!Uror9KtHyyOUO&khi%Rel>x~c zfCUQ?Kz*Q;lmS3O1&k&ktd=bi7&{ZWFM&YS_2mFY8`R zrG9^-8GzfptY0G|9s`zIYN`KBt@^K%(gklOT0>9OgLb|GTvSq<_D0qq+3Y%OaZ^sHzW;{%N8Q-AV%pO63t%f2U;wxd&pA{ttD4 z?I0Cwp8gN_1t}m@ThQq*=Tv%1*%S-LY?1!5Kw#z20KtN>NdGd%m@!EIft(51F|ue49Sq|;9 z4u%Fe)Pp06g$5U;G+7i3hv<4R0vgH-p-Dde86!QF{(O8+9HZ}dKOBH zLcuUF{Z&0^+k})G2+EW70Megzvn2|E5B*^3d+_!!yf3F)tPpG4zW<8sQ_W%F?X7H2a00001 zbW%=J06^y0W&i*JVo5|nR7i>KlRayD^I#xi2b3)ci9~o!JFkq5xm~1#7QPVahg5-oHD=*~ zOY=LWw3eKN$5fzamfj&iGC83UWN2G}e4}B1Id=Sx`qCwvu{B=kTC|e`YcIAMws;cbUoz@QE z00=U(huW+V$Sw&GS^>c9YGJxal%r~t0iYCSgU+D`fdDl12adCx&1PA41<4#j0RU5Q z2XLJ>vk@9xVJhcB2&|BBK>$1lnT;QsbLS8v0H|Ktxg2mq0627*1r!&H1p*(eKD?n4 z;6MPB;xt!jf&9(^I0JkObRgiK42oN=Hv#SdTVa^X70_YS1h-13v$1QeVD{RGKw01i^b8^CnSK`D1# zf~0GKq97vakOP0`uWpdyMpyb812;x}x2ejP$P+SI&FDQ6t4AAst{Gqz5GS=o`k8mq zcpYG8uzgVjZMG$|2JDVsdVTWxJ==;4Srij%gXHOBAk3$-&)9hcVEgn<=MnH6|BAn% W^)tgaeP#^+0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H!bwCyR5*?8lCchgFcd{!bT7X^U^k|BHTCy85Lp>a{1_Gn5`Lk9 z{lSO{5z9hb99(oU-tC>-o4nx={aof~*pTgQf!7gC^E{0C3Oe-Jlxx>$G1axcxxGm4 zS*_iIh|yF55b3GJg+0<2B_NGQ9vUf>{}^+ML-;Ev8$fL6pAROA-hmf`tT3KI`}mwq zjWcK`7h$SmZ3w^$Q#n5b6q>-GPA$SHI)xC@V)vW*j|Nk*DF;Y@eYHDiD&CP>*LI2fS|0w|f?vz?NY5)KL+lb%!00001 zbW%=J06^y0W&i*Kw@E}nR9J=WmN9GFKorNVcGKV>OLd``7N1Op1RSIjw76j7>Zm`5 zOEDQrGdMJ!x&&fP?PqAbS-68on+#bpiF|+*Lt;ax;D!`B#(k%gZJl&dr&1_+5DfQz z{O`THi{3wzxeq}+Kxm$pM;0OW$D4$#q!bAayP7~~c7Xx7CKj-46Vi1JV=R=AAb|;a zbP7L02_L|?K!K`o57h?@|3|ckWa4#PiUddq5ELQL05J7rz@5VS_AmehRk~kwQ{5UZ z_lQ*~kJP7ExRM6Y_=4EjOF?NxfBJ_p}M4A>qGE<}LbSD13; zWFiDq&A{;5AhFdKZ6Vc(X|cy-z#oQd+lc_SO4xJLh(-)NGs`?sMJj3dgjxqmts%r6 zL>5go(%JWcDgd(@D)J{aEo%+uhywMhMKA!HJdmB2I!^a3CHA0&*)7UP&RS|Xj`IQX zubdgK{X(cE0;oj8`Ly_+L&eq}4?Nffz=1M5Ak=E2%^1)L1Fg7%Mish*ZqaRl0?La3 z{~$U5yg?wrR|&`9bW0Ryzz#WtqJ3(w*$&Vrtr4Pl$pcW`KD)0?UjQNgKH;vI03n7i zfDnJ5Iw64oF_}Q*K1*a7wrSF=j!?J=X_bd(r&9p1@E+GuiVqp9nG zf*A&oj*)Ibo@E3IbPZlgP@dlsd2^i92Ka}9cYfAn zE+7ub?hpX)y16~-3H`%he9ROoCl`IeLCBLYDgf85Cf=G%dV)Utl5Tk3830&(5R!re zKotTK_y+)BocZ=34k*M70BR2?5cdzZ52(~0)Zv>P_Yby0YtWcIm4F41WcpCXk?Lo{xOv|M<1x_t$4=50stJ$l@Ap^i3{H)=cz&{*97oN(d|Kc__ z{iWT*7X?qTC~yS!Am$&W&LLJFx2;6~AnkVP`B{nnVFj%GLlkH@ZS0TErGI$F1K=OJ zZTvjsA9f-DRCjQ&ANCLYL8xnkvGfm7U}Z4OoGt*gmBFyt@YZ=i(&GMst8#5HsDEGz zJRtB7JP`H|i1`N|5cr2U5b+O@H+SzJ{(Afdpmqvq+~jv&00000NkvXXu0mjfaEt6F literal 0 HcmV?d00001 diff --git a/graphics/pokemon/swalot/back_gba.png b/graphics/pokemon/swalot/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..acd59b1b933b10a6db8d90d4802c8f4acc56638e GIT binary patch literal 687 zcmV;g0#N;lP))xC@V)vW*j|Nk*DF;Y@eYHDiD&CP>*LI2fS|0w|f?vz?NY5)KL+lb%!00001 zbW%=J06^y0W&i*JElET{R7i>4)G=$@KokIAJAc5oB#ehb&|S$AsL?%~ zPz^U{a=I1*(a$Jkvq=gat)WBdugH=%`2oQ#pD(0wjr1Ab;(g zvkg`p9+gKL7J2XLHlo;X2DV$}0gyfl1H_^$aXidKJCdD<{9OZ*)Cvqo&`kiTla*Jxcm?{ibfCb{*JS}t zM{YS#pxJ;$WRz{Qbu2j`I)+UA9^y!}1Ve9zh90bwXeA0REsVf8h_>KaM2y{-+LOKLU<4V-woKew ztLb~QT5CU~(nH4}v@<`wdGF2Jd4GpO|8;~lZS0er*}TQmo~Mo%Sm3-eoZI9rKJPU! zSAn_q;As-+v=3+j;F#D1pw;#OlXLK!%D^lqe z@~V(v&;TS8!>k_Haihxo2tcWT>&JBL4j2c&s!VS3*kB5f{F0!*Mw|kT9ne? z@^Ux;6xd0zShR9iHS*I%8w})hIX)kTw+4^a@)afZ3;+kZp3P?0uN_HA3;I!GbqTj>0Mr7mLorq8+us`nr z;6NdF2j|pYBob+;Ho*1=Hc}Wvh8WBg5mggiSXXCkLK{Sxy3p?sV_$?$BN0^{0LK)N zheZiA3;9n;qhCcJY7>lMPG9PJ2Z44@-z9xs?f?*R03_gymk~J8m&g|6v$_*;h#6CK zsqsrbcOLU#jA1~`bV5omexPU8AJ@X`qrf5B3a^9mZ;09XI^`#ZaxROZ3iJ5{@jJO7bXC3I-qzOLI;{@$D zd$i^T=3(CWV}&8GMN9$5vHPPNmj9!kc13EItQrLz;DuG<0b;Yl+T9+M6XQ45Y)75s;j*rgcz!7+t5@s8odEAbm*Yy6#izHP-72|5wcu5 zQ)97d02+!@+2YYLHQ1hAEAIfHs!6Ch^ZMOV9?2rLfyGiQGWl00EsqTBRbMh9>^{oG_i0k z4<_->O8eJQ9t=!u23vo~BM%S=Iw3cfo!R~t=xSjbXb*ru?{_o<%)f>GbwuZtsssVM zu?E9DcYwa!E7*B$fX^%Adi#Rh8iCO+gx==1d>H4#K-nOW`WJw=#>)%5vw6#+@=Qho ze*<8_T{2c);4J{^V4RN<0R3@}@?wmIeha$p0yeP4kv@b$pwvKrR4FrgM+q8P;75cc zc@z2s>vztBMpCZ;c<+nvZGDk*=?fSW#p3$QWw?iyKkC7Ytb6qZ4D3Az7X&TzP+u&e zz6g0NtS$fiAzZEXD(rBO{bW7(G8TwOU%*A+jYG-y-1_1xKQICMf_U^rx$J(qCQx4- z+4^GRJ6m6r{cqnyo=N!t0>cuZFCJI@nJSz*0AuBo8x#S1JrUYKt`ok=1{xHJk4jOn-2Xz5Px)tK2Q)gLd2`Jl@m3yvChP7S80j3Dl=D||-iCcWf zYsTTVv;dJtf6Zo@8-T92b`4l2yyWjc_2~Psc90#1|J!w(1vfC8`vz)(MgHCsSn|1W8p zCfF$b047i#XgJbhgnoe3f`ll^TM#e7)FBg_8QE|Ysmc%uTUlSRj;2(zh(Hmkg}1|??`k%-*!L--B!wOVX)VI zzhjh1kSIKmq}Xo)ph1sQF90)H1OV*Uj29@hh65fUpqWshaZ>rEy^Jz-TTBRW zXbz5TLu@@B3gDU-J#^4lT zMF1|#Pv`7w1_JOG0U!)OE;zGhk%M^wjS!64xCa1)kP`rwDMpE2r~z6b1Yc$nt2m8; zR0{~9-$s+?a~T6?do3UYL})bmrw7#aH61k;z&>Ag$2_U)x-8G=2pu+=aT2TplCpyO zP74bdA&}_w;h(U2Md@b|0&8*|W>CK={bB(Wx+QO3)^$KUrj#x`u&$~S3evr^K|fF@ zai>4t>s%TsP1O44bq8Qg%NG}b*q?}#x~i_eg}}N5VCH^6PHrkf-trzW1&d2-KlpJ$ zKC0b>QRV@CGu5R%MS@ZZXA2JyLNwyefc4-bij7h~37G{pS|aF=7hrEx1$Q4D&|Mez;h;Qy2m8==C{s3Y?n@S@nQ1^Vi@8 zp@+@YufXF83k16I9uVM&K;SVxD&Rea$NHRmiE&_n;7aKc3^zL`(Ay`({eu~rcip=J ybD#Ima8l38+5ldFqsCJW@HLs1W%y+N;ra_4_)KE6w+)E^0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IA4x<(R5*>@lCe(1Fc60Q1h%{*qhwkeW=Pol;hI%xw)Sc^2P znh?>IwNb^+$2&~CGFr7GI1_s|4eTBGcya;aL)~2}r~ub!pCS)Oas856WFrr{EEPx2 zxs9oRnRH^EE^b|~hQVb09N(Bns^|c^!)j$S+0y|K4mQ3lq@>KxFq@*$NiCsQeh&gA ze((4ewshEDp?dk28IUY&UoUfc!SgbJ9oSxR7y(vav8L{*y4|L>M<@ zE)2<`(eXqWWD0zL#pNgrF6)JHU?R*8%;qo^2CK%-g!wM@Lq9$Ne4F4T(_(Ri00000 LNkvXXu0mjfD88>s literal 0 HcmV?d00001 diff --git a/graphics/pokemon/swampert/normal_gba.pal b/graphics/pokemon/swampert/normal_gba.pal new file mode 100644 index 0000000000..149557aa45 --- /dev/null +++ b/graphics/pokemon/swampert/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +197 230 255 +172 189 230 +131 164 197 +41 49 98 +255 213 74 +246 156 65 +205 131 65 +139 98 74 +156 74 90 +57 82 131 +139 205 255 +90 172 230 +49 131 197 +82 106 164 +16 16 16 diff --git a/graphics/pokemon/swampert/shiny_gba.pal b/graphics/pokemon/swampert/shiny_gba.pal new file mode 100644 index 0000000000..284a315083 --- /dev/null +++ b/graphics/pokemon/swampert/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +230 246 255 +205 213 230 +180 139 230 +74 65 106 +255 197 74 +246 106 82 +222 98 49 +180 65 49 +139 65 24 +106 49 123 +246 205 246 +230 172 246 +197 115 222 +139 82 156 +16 16 16 diff --git a/graphics/pokemon/swellow/anim_front_gba.png b/graphics/pokemon/swellow/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..de8016b51c99255ca42d333caa59e96382503730 GIT binary patch literal 1046 zcmV+x1nK*UP)~N;{2dzB}IizLNA`FJ=1}V9z^7;FI`X9&}HO0;^(u@8k1ZDEZ0DZNbVwZGjMy z&`{RAq?OE#wV~UD47Y)ks{$yqB^zl;iM_I5MXtXx=1h=?359JZ1+w>ll;$6U31US? zm5P@T$c}GqeRt_1D8P4s^i`7rV_yq}u? zSK$IU?+5R6>uIpnT>HxQvl8Y&@Fqhr|I>cGEg;`zI9TC@#|D309Bm88b`@WOx`B8P zgt)d&68}>XU(!3J#8_W*#BOpJCtbH^q{wt%4yJ{kd_83~JL?%E@ay)t;66Ht-^ zDqchVi;S`N2C)LCe6yjCmc{-GW6QHT3AX~f6$RwmMG*Kfr^NvF1OeDL0LycZZpJ`f z5CDKO_Qsjjtf-D~BL(zP_F-nGt$^~$4zTAzN}bu+>8Pr~PYSpQfa62}TySiNCs)S1 zF9C40Rtq93NZO+p0)Vwq5s)X}JBc0`6Fv2GIO{l(gnc<#EA)5Q+^{vuGzNHf$aN!(}kCyk7?U>J_RWIlG@zohc#O1 zC!tdEB!zZ=J}SF#;<^KhTd#m-z1*dq8K~AOwCoql9i78<0Szqmm78mBl};TApu^l@ z&fBZ5vGUOhYQt-I>ePek$8IK7{*^oQk8ThzuibJu9CIF^+5RbxCeozYq_vbF%!L2cp&JVupx;!4_ql?g)ADSyJj|VZ(ksq>bWrMbc z{}K7&+uO~0sSR}IhhOV%m>yKl)rA&KoG|5dx2=Z7DzNF??n;UTx5@%q(CzE1JI;I z${SERsc7j=q8kc_8l*e|RCJN3C{NIyIFSo^fX&R>XYcxK3hGRG-_PIt-SfQ1`0r2@ z|I&3qal0MW4^jqBuSbb{AR>p;uVV&K$Kvydg(NZ70LAZN3qQ|mqImXYNS}mh3Wi8u zej3Oz3G=*QASwT513(lO+yKYLQuKg{5P}EL0MD1}>Xlo4(S*@Ys&`oZaEUt-gT~+l z@egiRJwofdoxvKh+T5)Agn!uRfQXxKXJ@ZhKW$yK`V5W3&3D~3B1EwBha_1up)J|- z>jq;0+C?&(6L96uNQd;fmLQD73j+FcJkXl-sYx-L4FH7P!_;R$sbqopYY!k3Pv!S#vNE1I|rKV1sP8a22REez2Db#vt6CY|;lBgYF_C zRU&>IH6Y-~0VEt+6`CrK%F7O*9f!uC)j>TiFS{C~$>(10`DV$;8BM`w1!%EBYZW(Ou#EGVS*r* zCUjyG9POYh9l@ap=kD+2l1o2;pD3R6czh4i46=pZrWtgOp|!n@+itZ|sBjbC%l(>| z*~Njr)LOMGrC;nU literal 0 HcmV?d00001 diff --git a/graphics/pokemon/swellow/normal_gba.pal b/graphics/pokemon/swellow/normal_gba.pal new file mode 100644 index 0000000000..cf8e9f794e --- /dev/null +++ b/graphics/pokemon/swellow/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +131 172 98 +41 49 90 +65 82 123 +90 106 172 +123 139 205 +123 90 90 +148 148 148 +205 213 213 +255 255 255 +197 49 49 +230 106 98 +255 148 139 +230 172 74 +255 238 82 +131 57 82 +0 0 0 diff --git a/graphics/pokemon/swellow/shiny_gba.pal b/graphics/pokemon/swellow/shiny_gba.pal new file mode 100644 index 0000000000..388f2b2202 --- /dev/null +++ b/graphics/pokemon/swellow/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +131 172 98 +16 82 57 +49 148 98 +90 172 148 +148 213 205 +123 90 90 +148 148 148 +205 213 213 +255 255 255 +213 123 16 +246 180 57 +255 197 115 +230 189 74 +255 238 82 +131 57 82 +0 0 0 diff --git a/graphics/pokemon/swinub/anim_front_gba.png b/graphics/pokemon/swinub/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..80675bd9b581f5c1a140bf77fd5e730801f83e66 GIT binary patch literal 551 zcmV+?0@(eDP)00001 zbW%=J06^y0W&i*IrAb6VR9J=Wma$IbKoEvq#HQpOHlXX7-B6x{$4+U9^(J&Fa0W!f z=`7^(Iuu?22_E2zd%8%0+UzbuG&7;N4((sKna?x7w)y`oOG^6Q$`?ded*%~M7W5#` z&yUssdx$f2R6-zr2@BM*0t;Xy8>RZ8p!XYU0kF${3iCUErDAVP;N;l3-~o^Ya)67? zL+9tFT}i<8O#o&j0#E+}pljOlz>Ek3fL9z)1b0}*?~(&D3-8j^+6h4T-RKVKj`d*l zr3b8DVEu<%P*Af&MABnhu|QVrvts7Y&TSlO2-RhM!nM02y>Jl1cUotBO-S^F| z`KiZ|-H;s&2Z!6ktu#(bN=i!lT8@Z>T#l+{KHTRrQK>q_l1NO{Ihqh!a{)M0zo(~u zz7T9o%%G-vXh91=4$8S0je5xfC78|TF(jkrO;|AZ_kRQ6Dj`?R!*c{^EhRHi7qgpg z1;EE*EFgUH=I|lplehQ;aKXOBSM?wV9p|VdU&m>Z}%-XwLSzmD}~^CHxPTZrl3 py#7}`z`gb0RF@?}>JLfZUT@6IsX1MYGVK5W002ovPDHLkV1gbr{LKIW literal 0 HcmV?d00001 diff --git a/graphics/pokemon/swinub/back_gba.png b/graphics/pokemon/swinub/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..66998faad4e6b94cf5d207a3b2a0af04fb59eaa9 GIT binary patch literal 382 zcmV-^0fGLBP)00001 zbW%=J06^y0W&i*H{7FPXR7i>KkU>rZF$_h!p$AC>>|?2Ofru?qQM#p4ruG&wBm3Gt z0!}g`lF+gTjThOx_rH_ucH3<8&*vc^o`1s;PDpZ>AI&2oGs^WoC!%O!xMgI{%+3Ma zG>*n-oUFBwjGqO@Jgs>c2tRt^EfAv&9nEut=NN0 z1xuck``1pe&stFSr@Z&rycEHauyT#dn7MQUh)lXbMCQWzRBwn$fOLo?P9m50TA1LF zgyEZWs0E73rd%)R cw)so*1(soatxi44g#Z8m07*qoM6N<$g19ED`Tzg` literal 0 HcmV?d00001 diff --git a/graphics/pokemon/swinub/icon_gba.png b/graphics/pokemon/swinub/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f33656a0cff533933f5dc209da6e34e4cfcc40c1 GIT binary patch literal 320 zcmV-G0l)rDV$h6L~*JMh(g40Y&awD z(NW=R|IA3SKGR)h=#}-j(Jhx=lIn@Hu^La^>g-=1sdy_mxMat{@}W4iuhl>bFu<@D zlG(8Gk)iIvgU38OPbX&_r*RS_F#4Hq+Qz&<%sKai2>70^<)f~xU48Tmhj*Z53Yu$R1BZLHLo*-tR zUmSPVy(0>7k_7;hY;2ns*GTU* zazVSB92o=(2Yql0z|Me6S%m$feCzBC)D?1-mj+spPODc7r8QJ8Pl$6ZEhT3VLJua# zr<&@Ha7y)YEN+dSVkQF!lhH$SWlxS9Wb}W-ZbddQhj%rg8761Iba?e4<1u4W21M!b zvNzp|Y=BIfvxcAGrg$k8K%)%Ea9ss}RwDqJ4uqK-&j1E=S*%~->s=?FVIc&NnXmAx z%8^Ql0OJwgK+UO1B@`&%C8Bw;p2@(f0E|2@fHP_UWwye&yom+AON?k`B9Jojm4pl- zU}d&Kpe7lNfY4x9zJ|p~8#DxJn^K(r)&i(7*k_d+ps_6abItcDB?g778midjvGEDP zKHT{B{f|N5n8Z180F6&0&F*2p?pa2(%PLOAT6?S5ZF^qMGH3+AGh=+Cr49R6;J$|% zwmI+y07S+Cm`^(I7C#eKkuhq+Fc^iS+(0rVB$R@FB{W?MkxHSnb%hLttfgZ{ zlPPm2PaW(bnd7CW=$s4GkTpZ0H*kMRO*%+2g|2?X>W39EiskSknpr0y4!~%%{sOwb~>kxP7t7-lcIg==>Y2LiH1>}9+e9l_}0@fFG z9ZdWXhvdl13z|Unrk*DV$d5^QIXZtDa;O>HdA)QU9oAWe`fyG)a? z?v6CJJO6c8hP!`Zvr>GGd58Ps_P!%~!J{ARI^hPE1--B4{Tj{ZMbVEnzYL!rGbb+1 z>SOjIr8bIUy(B0yZ;uMKV2__j{633bk`%ATQE@hFH7-g>*HKY7vw}E%SF_Exk*%8{ zknyr~YP89##Hu7CGZmDYAfW1Ets*9xgc;{1Gwd>xD&m@Hl4z1Q86Kxi=E$xiI~DLn zYKgjL?Q&LJP7=|&d2+h!>{=U!vI_j`b5sD{MfaARv6Sm=Sc2S=Vq#|GpX$Dv$g9 zM{cbVO=p3?F}M5uUcT)2-=r^*Nfp{rK-qtR;2Q+abfpXJnaNlVE(Sqx=+KL1&HU(t z{PeYNd(CCALCg$+Zdv?7HEk89fK`xj%C#bWi+0#E8h^n_HZ;R`0u`gPQLnJXpc!OP zM1P>%C+IoNGb2p?p8ie?Ou{*O0bC$dH8EqaEc?DlI}%rXIxqlk5jkf6vHmkFW_Q%iMY_c8VPQB>Tm0*V83NbDV2_vR z{!8|J|29i*8vo`wHrUQtL4TW@C|={rn-dK52SySFftpba^tT#ducLmH&mq!tQQ9nkE!&!sB^`X}Z!{lzKm!bvI#=-=yBt02gvct!sYZD%?i9=alXMgI;p zAJHF&;WhmU^dFT8UxcT>hkK8C5A>gmtONbY*AnOi{mXi+@bm}VrBDtW`Pss1yzy3RjVZp(}+{;>948UWq`MnNJ2q^;Y#%w*D66S^E_$$Cv;T2 z8+q8yDKPIT!7h3Gc^>W-)yBt>SMBXQ(~|l`^bW^r3EhD9z3kZidVN1XU;wGtcd}*A z&Fgu=zt8x;SweSo@^CHK{NeIyL4d(wa|hibnQva^f+aFza6k|X2|Nql;Qs3Bt-;{- kjmaWf;Y=Uf;D5Zn1CFckib(MiKQoYXGFbp(c&jsXUZV^gz(1@JfnAH5e|7h5r1LO^Q z^bg{o-xCz^V9Vm^?s!yHeV)(5zrWiR+gJ7T^j-ZK&i8eB3pD&wub-i%Se!)y(Ypq( zr>Nu*tTC)KHuuBfU%>Z7Mnpj1ohbeJc>siaRa5c`5NFOwDTV6`&|J<{lQI zifVhbnS+Uj(58od(Pb{TaMA-oRp}*p9WJ?}IA=JKH$X$_65K$tqO9)ZRNgXB4amR| z#e_+ef*#te`gC*p1!2Z)LX^{ipiM-Pc_B~mVVp_g!GZ%MvJ^*LZFcCDUK+R7C@K|W znLza@5CPy7L{CcW`7;+ISCE3VhidOc36csKL?{#UYyd#_lyM}EF z#qu6D05C=#=ez+x05h~*8jlsDz#AiQfSAJK-8K^q$|LzjCP<@#P*}L@8eTPOaF2cu zdIz{k#D#al%fBhVz&xXpF}={NNn`3ZG`wC_XQZ zxKktTfEqdBC@(;K4Q?lfs8o;rLWuz4y*t3$8RJ~mQGK5O>G=y^v$!3aU6FtQ0000< KMNUMnLSTaI&@i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H>q$gGR5*>@k}+-sAq+)10lq^nkRk`z+oYT}S0I(!rGcwWH4+UP zWgENtaaIbLEmEaP-0}4J2>FHZ$A?0|0tA#!k3=AxPM;74y9!}D^GtvhNw|(c6157< zR>fDQUdJ80z*<#DEpE3|Kp+yYgCz5TU54(P^?;czzNn0}C$4oDb4-c5%L9TD7h zP+V6XxMI=49D2|JKj{#A?xsT-;Mhtl#cen47Fl(O{dir#@A~lxdvn9+`CKSi00000 LNkvXXu0mjf3sjuq literal 0 HcmV?d00001 diff --git a/graphics/pokemon/tangela/normal_gba.pal b/graphics/pokemon/tangela/normal_gba.pal new file mode 100644 index 0000000000..91dc27d45a --- /dev/null +++ b/graphics/pokemon/tangela/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +172 222 246 +131 189 213 +65 123 148 +32 65 82 +255 131 131 +222 90 90 +148 41 41 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +180 180 180 +82 82 82 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/tangela/shiny_gba.pal b/graphics/pokemon/tangela/shiny_gba.pal new file mode 100644 index 0000000000..6c8c7fad52 --- /dev/null +++ b/graphics/pokemon/tangela/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +123 222 57 +82 180 16 +41 139 0 +0 74 0 +255 131 131 +222 90 90 +148 41 41 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +180 180 180 +82 82 82 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/tauros/anim_front_gba.png b/graphics/pokemon/tauros/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..6853a31b113793adb1f4e2e81e01263c27a560fa GIT binary patch literal 1766 zcmVxU&JQJEr3i&GhBFFd(w3^1lR(*|5-98J zYEUEOAF3ZF3~;9F1Nh?T`iQ6_#W7g|AWGR}yaNEW;n#2qCJAN{KIl673}7jMp!c=V zDc8`&QJF0P)8TMU0xGwc=5DkGeWG+n5+Io+1L_CYbz2>nBPu;WCN*&0J^j5iBx*Mt z50+NAf%9(NJ0FrRQ4hnzH1JUxI6d`S>LFQnkZ_NCZ@hZl^F((rSl*$cbAvnFgW-3> zFg5!fo;D7Kgx~6<=C5T5cW8-Hov{iKtu(QBpE#vrftn^`77*v6odmY-E3{B5QXMQ< zH^GDu2`8`J$||%79)JO6eJg>4iR&9{KTv9LU0T?LHGI)Z0C#U?P5sv_hZAN;2&C7@ zZ>;^uUq28H&iHyx#zG|ak-vNU8{EIx<7*o`mJC+H2_?7J^R}Cw*xOs*+_gL(W03%! z@Av-900$R^07@*V=DF8D6 z;G^r+|LP-Pn)VXll;{cUVjx5r4^#r@@i;gI33#H-5SWNoGXZ4u0<8exw*zMC2=trY z+qet7P&_yrcs|UVdf5_Uk_3odDj0tkD?%D5+slAfDj5Z4wHX3q1VqwF4X%8b^EO7w zZrGwNMAPfU34UDc3s?aXV*-!2CjcbwT;C}g;aE2@%%UpV+9U<^8kl#mLsk=_4;NMw z%RmtUYXT{O*Kv~EMo%~<0&omXzm3mo&G6b z(RICy@3YzT#TbJ~!^>ID^u1VS^xzx`*KKaJRRE+9BA%X?@}K3=xH?2Q0@@2FE@h%= z4ZwUX<(_JfwM3Istg`YH%4PcB~Zk5}A7Gr79QziDIC6 zB2{L!3y}mOm*?Xm_bC2|3Y9hqe0mVZ0kDv&)E8kAxY!PpPH3s$VRFgk5f9PIp)IM! zmoqqg(rrt8M5?!X@)}vF-k`Gr*t)+^y^}NSQ=Vkv^VhRvp?chPfk?JUAe#%-J34XQ z4pGc_H1Dq6U#Q+Q0M6k78at2uTUm!v?wAtTaZk@knbOA#05y$Tdp~iM&Gns=y4O*l zAjg~pS+pwK4+SqYpRv*r>WL zI+4$ZQnOG^MzO6P)5^>5rI$Ml^`hBq6Rne>bhcH;JlTRJ-t?yclsYjQLb&y)Z>Fd(^1q1l2ov1*-UOA5>AQp6|D?Xw4f&g$_WG&ZKNcs)zef0xODy zQ!?uA>3JW3nd%cXVeEhug$D5 zKvBbreWgOjH=Hg3sz+ZG48P6FUL%+SzKpgy1wi%a@z1OpFesxn0Ixvu!g5VAh7tifzxQx3qflo74Hy*S z$qZP$sZ0PwGDFf?Y* zEzB)N&8~*P$a=B@ct5o|L@!56^8n1$tB(!FG5}GIzNx7uCK{84BKDGfQpyDhyj=lI z7A?WVYb^t){&QpT{$Ul6=pR-AE444Cpz8mMWB3J&KlCe&MKp4jv?9jpV9pDWlolUgejd3-740r>N4y~I7 zYwBPV+oZk#ygsrD`9d&3zoHVhicfcJGpnH>k!wuYz|NnOfl60JdoRw+5OOiD; zEB2o-#&grqG|hUh+Q*of6flg0XlM587z;wzjeGX&M7>IZA?Cz`rrjA`_N=Bf3jxey zpz8=lB^POgk8RsYh}8fg6h&Ms95|)>86pLEN8M$B&0AQ+m{lm}yur=^a|+BtmcW6> zJb-^_$6Bh%97q~cU`c_S-M6eZD}V))P-U4Pa~J~-&UTE|Ger$^fa?n26QP&ZrJ5)- zFuMlF$s|yT9tA=HxViTuiEc~nNCKdfc^_l=ME%Z=UvwQ823}FW{lUM~UlAY_xDEFJ zECKcageK6tF8obme45Y;_zZNq8>0B>N4LzF0NXhMIV z;|3DV$|9rZWbsuAYvgj(qcJ)S#+>{(6;o$6Ih6;p`Es>jA z;DLx_=@?8yAP)xHa%hNaibGI&C2KdYsC$(c(#!x1V&lUC9I#hHY862+>alz3F#(Ol zcMAYqao$q`nf>Jai+yZnAYQrMv+RBTs}(Pp(g>`*U4fCYe_Y^JiGi0(ds^p(pz24O z3n++uTd}j7bZ82rRap^4VQ#`!H}^g`h(iNmllxFpv~IYq8uX}VFT9~v;r~$ zE8zBL5F*)VpxFxna-x<2c@Z}z!1ME-QmQitfWX*d23^(ZtpYMTG|zy|5}+eMCT6of zY*wI^=4K!|bpSs*7=Z@JJM94wac2g`rGACLtYSQ7<&}Dl1Trh}K*ntxm)rybx~dvv zHh>(cml!cH1J11m)>}kwr;~Glr=CWt*m92`?dKP30{E+OVNtwd%2*`%;#gG`UngLX zNy<7PAOy%03ER@%#%6e;&T^+1aTNLLz;0IL7xs9F)_CI z@abF$2njHL3Qq$f5@8&e0cR?vAaZ=1B@EEg-NWNsnQ#xSO4>ww*RpNHao%mkTD5BZ zhU$3mJ)@2XC*UXI0iKBmYA~|KgM}JgTjPOOtO^47AC8;e>-@mhok(6<^MeZ_wdMy8 paBs~I9-hk&ah)Hu>iqEM^#yM4`2?`%7X<(S002ovPDHLkV1gS2?~MQe literal 0 HcmV?d00001 diff --git a/graphics/pokemon/teddiursa/back_gba.png b/graphics/pokemon/teddiursa/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d79f39a5bad5d19e1e9db0af10ac264e3e8d3c1a GIT binary patch literal 512 zcmV+b0{{JqP)Kls$TbFbsx000%KQK!yXVN>O=LtyWp~4d1BIy;s4?nsykK~Gae7P6C+qmoPe^&{mm=6fRitJ^?K56&8UM27hoq z0S@1@g#O<9`CSG=J1>5IO97l&*9Tz0e7@y>Grj;`dbnFkyuUaA0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hu1Q2eR5*?0k}(d#FbqX=0&*NKz!jp5Y-Q|#$R8rL$6}~NuM&wN zTR^HvhDtRs#fFsy@aCugZA<=2eOGCE0rPN`0vvm#s6yR?Nc)ikKa>Ggl3{Eqj(H9i zC`|=rG8V3_YYN%PUD)bu3^{(B-rkH8x6R|G<^2jhEfVC$2Tl??2oT>uL=rRBUFtYc zDV+Dh@(?BUFZFYQ2?FG1cjA%=MDhM-K7{47`M3i#1&6>eY1`ER0000KorNXQjvT^Y(?E8wd5}d>PpoDYgARrzhGcu zD`cWmFcY0HOx;=f2bl5?aQGjn4^pX9!Dl)_rG)F9jhj@xcaBtbN%ICQ`F-yFvd#A) z^k6DGh`82o24s462Ky_^F`1OhAo2Lf^QK>4JuANkfR{@NJUu+F0Kl6Rc&_&6PKh^` zK)#^Pkt-5HWDO^I4IsKGo#fYApin5N0dqy-93Ws3@=1m$!N8OSA_ObEQ2G&C`AH6k<00K$b&djAXs{h94I zv(gZ_r3TP;f8Xt?{b-Z4H>d$G%>LxSh5}g4ZtU*@0q{oFHnbg}!eOT=y1=$G1kN{` zGDF{i3h3MQmhjb}1gPKGI3h#Mfm*b-&IhCe5SOolr2!HfWC7bO0PFwkAMAeFox~jy zW?{Kl+$%6qOvD|MZuBVCZYV^SxTDi)0^}i}7_0xk6!!$si2Hw{{;~}{5T)vW31ncY z`ZF~U-l)HlFmJ2BD#^j$tG|_@{-Vvj`u8~Sd2P8+f4<{AXi!^g$E9r`K&ZRLg%bjP ztqoZKuwUFP5HQe9t{qUi-`x!`8h}6DI}E6VbaT0Yw095SY6dWJ++_Z*bnfXuxH}{0000K)3Hv&Fc1b{OVA-hi^2mSH83;O=~|@5Gh*Of3QquR zY;B(}88uMt$bkPqKT*^p9VH@bU>@tYC_y))$jtr182wlcJdVv7SQUm1D zbzL0L6r_~#o9Cek9ZF?vKuC3Ai})M`1_bg`18htUq^bC&1!Sq*R6$1=sQWSGYYg�_&5M^NnZ$nGo9q^vmvr+k^lzM0C?&lMsLcF3BElHE^{lt`Zt zRkzo#C?NS7sx~a1ageC8EcKL0(ULGzs(N5?|Ih*+h|Va8HM@Vr`c{3=y1T_eeQr9z uBBnRLgZX5aYfTz=So6t`QwZ4CU+W8!tXv+@G=W$E0000DV$@QZWv~FbwnylBX~-vSg2hnmHRI9V0Q&|FHBwNT{9K zEvjh3Pzf1#fI4AgD<@^}=^S5j23Q*qF|Ccofz>ja=Z#B7BDM_^RECJl(jyxi_4UMv zdaTvN6o6B$G{02Zpp<4c8b!q7BHvR0jcqdxd3K zsk_w{2~|<2CStYJ7CypH;0N&e2~5eg5m6FgHwS&u2q230A!e4;7b(h3ssJ~QsGT2Y zWWgE<+2q~T;Cbl>^~DjtItJib={r@; z4e>}l0bp1vl`8ometTXTU%3*f<^qq@pJD(~R4b~V2mD+byYBE+=|=$0ax#=(#Xwb> zdYT7RPbLX)0>JDr19)OUt)5gWFZ)>nfD;LH|53};vih>`&i$i6MMiMlo}U4#zqkMl z;i0TfJ$N3bfpR$p24AWW;l2yc-hPOgTB)ogFzJ0Mmrp$ax+$RdxqR9Kpm*i=qG;Oh zgMYr~pLXZby$eOcT1kTvylBr~0N(4nz1i$4c1!>M`)HC3_MTNHNd%ZpY8Cp)=*Lp! zZVh;&egBj7=*Q{?=%#_f8t7Hk3FMNN&QO@I5(0j^-Y~lNyn_=ngS1e|EmU_Cfvtx{ zXG`39avrxZ{Wnpxd0$X!ZPR$seIM3oc=LS}1yrp4I{-yDZ|~i4_vY)P#22d2OqSbt9{2^?co-?6k0BkQK z&l`k{4IJi#4P@$Rz_ypGt~(5weTf#}!-Awjbf_Kt`Q9Be;}aVd&jsd0)c4|dXlU4D z0E98+77{uqge)3cz|1d%@ zEe;FSmMIjI5P@**F%&=ULlHy>Qo}SP>%A~#y_TZOJg?yrLJRosW9swYlL<&a(YeKI zI=X!4_E6CzZCO^6#LIw*1~ZajLmk<-t~)}-NKV{RlBLE3&P7NG6wEDq)pz}M;s!pC zA2DT^_zq=0Y#)P9pf{7_Pymz>v%&%Z$%Cp8N8b4HSIJ@K+s_xnjJeFm35+F|)1sC- zOW=bw!;EYfznJ}WsZ&3^hQFpzW1AMe*e*c5O)_^!|g+t`EpKd66f59*Kp zllt#juKK6a?5lt7b+xbl`S;mQ{lokVZKwVsAHW;+H$;989IVwp2*Y+BuvPycbaJn3 z+qM(+4-7}-$P^G{?{7s(1Q@BxsZTtL0)s+p!LQfur!{;>dzdV*aw8k7fV)< z>d&<{;d+)(NQVRr!Iw3{q`u%aY^R$&MeEdT&~~Z*TwCZhXx&mmsA$}<4HT;x5->f0npFs z)GGR7J7QBK12|%T06LNsVDI{)d?52zn&W@#@1Fe&r0HiDB<8M;00000NkvXXu0mjf DVZDa! literal 0 HcmV?d00001 diff --git a/graphics/pokemon/tentacruel/back_gba.png b/graphics/pokemon/tentacruel/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..232bc9259f84b9a5323c85c9cdd941f95903076f GIT binary patch literal 736 zcmV<60w4W}P)Kl0R?SKp2M^sFVyPa@4sJY354h+%;73&1t15Yrclf z)RFT{De$JGer}LY`+~;1 znQE9ev{P#AD~$T71UR48HSK_+`ayde`ab6&(KPK1B_GRzhW7r>^E?Ekf$pt&t)E>< zLllxrO{0{M;*(a1PNN6~2+;aDHOfo8B9v}6oGXA*tRT%&gMJlq3GgYUmuF}w0fc`3 zkpembXdufxu+sG?;%Y)2D~Le|6aZrU_EgN}5=0sviiW1I0M%j0{6b8!ymm)6?js=o zOEpcg%mYn-2k@x^9>g{SV%K*wAY3Vd$aTzJ&-HcyAFoJrE=FQ^IBVSX<(o_eJQ%}V z2)v%Qh1VO}6FBbS2r-C8=Ix}z~37J1B=JIZCgZw(p)%Hpmu=- z5*s0yR7zua0P`4n4gyK199NDk<^aU;0s)2>lz}z_d&@@%*lX5VGsFvr_Q-@D`_6>| zI?V1d)3Wo#@z-OEZ3hU*0x(++m{xv~ZmY|nHjt0OIwyTFP3D*^r|5Srr*c0Ks!{)ws7qk0`~I6Yyq7SrGxkO|BaXVm-7c@P)DV$*lD%rfFc5(K1k$5)$W{nmlr>tUHQtgf9u0xG57SLh z{4f~;2IDNXH`O$f0|E6am*~e^$5v?3$DQt^?~>$iFAOlu&YBS#6U{jQjRH8&giu2a z%vn?v959-j#j{Xkh`~~52k@(A=G+_tI4MG#MrcU$`97<_eJSJ(dqTB zlRhHp`akuhgkTnOP{8ZtVXQzdz z2%UjCxV@*GHpg=SCMCo)Hp1O;YpvL~I@mYXq;1t_XvnUuZG{exZ&rL|DrS2}4>Q`6i3&ZFf3axON5D=) c^80D{2CDDq+4o}D-v9sr07*qoM6N<$f>-k0M*si- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/tentacruel/normal_gba.pal b/graphics/pokemon/tentacruel/normal_gba.pal new file mode 100644 index 0000000000..8e397af8fe --- /dev/null +++ b/graphics/pokemon/tentacruel/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 255 255 +255 197 189 +255 82 74 +180 41 32 +131 16 16 +230 213 164 +180 172 115 +131 131 65 +82 82 32 +213 213 213 +156 230 246 +106 180 230 +74 148 197 +32 82 131 +16 16 16 diff --git a/graphics/pokemon/tentacruel/shiny_gba.pal b/graphics/pokemon/tentacruel/shiny_gba.pal new file mode 100644 index 0000000000..b53f965996 --- /dev/null +++ b/graphics/pokemon/tentacruel/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 255 255 +148 189 82 +106 148 41 +65 106 0 +8 49 0 +230 213 164 +180 172 115 +131 131 65 +82 82 32 +222 255 255 +180 222 255 +139 180 213 +98 139 172 +24 65 98 +16 16 16 diff --git a/graphics/pokemon/togepi/anim_front_gba.png b/graphics/pokemon/togepi/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d71a63aff0fcae17a29ea7351905442727ca0c GIT binary patch literal 500 zcmV7y$qO&HwhS-oV#Q%_us00001 zbW%=J06^y0W&i*Ia!Eu%R9J=WmN82MF&Kseb?DuetvC52Ea;*ZdXtMk!jh}57Lw{9 zqIk__QF@mHxeBG!B1mUDIv(6F=pS%!sf*GYb5}>d6a>*B4`g~D@_m`|B4jZ9EtgAj zYhRlpyI;4vHh4?e9THDOof;%`4hF>IecAv8azQ+w!a_(0p$c$^VttPsGD<6uV6mFl zV3dQxx=)WOWi3$HC^4U(OwXo3e$~dOCEUi_fMC%k&TxeMeum{|!s95QF|b6~R>Ei$ zFi0riiMjzh92kKL^GUYDs(b}rfwty(o;*Rq=7$_hIZJ^FYQ~F9Q#pfHP^`&xEN5jf zM=RANk>zWRAcj3x=mdVA9~if?I0l2kVE8enU}OcOL4LPjpd|$Z6t(Xo#VG3C?%00007y$qO&HwhS-oV#Q%_us00001 zbW%=J06^y0W&i*IfJsC_R7i>Kl0j<1Koo|D)=jz#E=vjS?5d@7*McsDMkw_brE4j? z=~e=H*-0tH9Kr7FRv`y)p!5Lh39JO&shz$t3Tr?m2DFt<%L|-vwud|w6~H< z^SkU>g{6Oh)Btw}I4R&}H$4axD)HY2>1vDK^piB8zX596p11wp23U%r0`!wQK2<=H ztb~YZP0eS8WzTjDV$CjJjtpsVDP-w6cd=<#F`)xd!~jU zm?;Z0JF}z1@OO#?MfhF6++D^0DfR2gx*1@n1Xw04QXp_5Zb*Q$gOmV>NjL#(Dl7oS zd?brExN=kofUS@#R{(M&{bLU&dXpOj;kq-M8dg+Tnx^*ex2CW-1&P)T5}K(5dQ%G{{a900RM{s0N!(Rv;Y8VgWdos#sB~RGp)0q00001 zbW%=J06^y0W&i*Jyh%hsR9J=Wm%Vb@Koo^{(4u~2;?`khQ=~9K3zU%rgx35RcZvD4 z+PqgD!Q&==5f`qV84<=!ip|~Cq~l!AWKwb}X7=OW!>+XVAjDDsCX?~&Nx5WJGZ9!0 z2=*eiuS|hpx3L6-8wl8M1ca+o43PG#s0D$xBO(oLx(cS$80feHr9MaNqE~f*7DS)E zKh-+Jz*!ls84Dt4MtaRy5OwX;r%!Tpn3#R|u4C#TJL+(sdU7B4Gq>IVMnYpYnaI`2 z7}*#SAe9<`0zwQ3$kh=4)Ld^xr-3(9TGf@!6I?*r@>Dh>WU;2N=rp!^3<}iR_Kc3R zU!eMJ`^%lTReex__QzHNPi?p*3lA5GE&Hg+*C+eqv6tXq`Q^nvJn9?hQp_)(en09M zb`bT;CmY4j4Dixa@u%kr1jIbi#&n@aDls(1+~9R0=H@d~fHteQFf1UuV$OIJqt3aQ zT{G)SscaC#9#VBww9FN}g2JxSV>_38UG2zgOz5+zl#SXoIvWDrazZJM56Dt&j&~|0+?~)BS_3&)eB<^A)$%d zdoia1S9=7s_mm$9u&6|8Cpm3n3PWkS+gg=ThCo1|yObZovVlBEpC8s`3waPTmmivX z)mVTEbN9sTT5j$f1oGGeYco;@ZOF*whvsgqU!OlZva;%-ezyXDn5NkCQ?`09>WFDAIB95vAG;p3;+NC07*qo IM6N<$g6V6A)&Kwi literal 0 HcmV?d00001 diff --git a/graphics/pokemon/togetic/back_gba.png b/graphics/pokemon/togetic/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f5125735aab796ae53147e00e92d6562b0445692 GIT binary patch literal 630 zcmV-+0*U>JP)T5}K(5dQ%G{{a900RM{s0N!(Rv;Y8VgWdos#sB~RGp)0q00001 zbW%=J06^y0W&i*I^hrcPR7i>KltFH*Fc5}WKo2r5Ue*#*vVN)pTOttMCbIjw?VWo7 z7H*a8bZisF1(P129VrnppZ|YmJWiJV#YW`+egL}9p8#n1d)x+kRHv*^hZ{h3&I;ND zazK{o)4+b;WQ9PMI8vF~Ok_t6#8S~Y1=vbpZ4jUJ20#O%sX(BHB#?C_?ka$)1|XZt zvilee0EpcdkXtjb0`?9#C4j=pK?uPP8vvh!sVZ!@fg?!7M|}gZ@ZtrwfZT%I>l;8p z0Hb@)oqUb)?&o>(!dVz-sV1k$3${PiTG6pyaDBV7Oyz>Ch zEMnA3x1B%o0+h;@SjQcPAaR-jNeMtkKu<8>E&{xV_8uPKQcRpe47g5}%FWF;;OgN4 z{_)+xN#G1vkD4XGSGLv;aIMy`Oo4-MB(JwTwhmaP;2MO8AX?|ZfLJ;N3BD0dKypGW zfgpjc4dr0FdY@&lh&w+l62#+LfMZ0s0P74~rTsAg8rr15lcF$?dT;(G{v2}UX4?;B zi!aUdT7cYW13XMzqye#X$$9iGkM_efy(8AJs-s{Bo@|)jVd8p|jrh&+1#9Br=Wxa( QdH?_b07*qoM6N<$f;wRowg3PC literal 0 HcmV?d00001 diff --git a/graphics/pokemon/togetic/icon_gba.png b/graphics/pokemon/togetic/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..61e73ab3edefe442e40e7ac3c435624bf43f55ce GIT binary patch literal 324 zcmV-K0lWT*P)DV$@k}(d0FbqX~0&<6p9f;(=bw~#8+cP297$QX2)6k{< zu(7q-^5kzj$`kpqQ~By#Vo-{%b+rL#RSPy?CQzVIjsQtamx_eo5KJU#Cu&J63s0wM059{*cKw)^EHhG7N6<8bDw)E(0(EydF(v(XhmlrS^o80grTp# zFO1C`!e~hrG+`|G2m`arN0?~+IE0BbrUsDRu4tTS`+Y#X2tyz*kFy_{KRb{4z8`OC WE^T5`dBe>B0000p|7tnaS~*%dF%S?C*O{oY00001 zbW%=J06^y0W&i*J72%mWr>O=ijbSU$O4U(>edt? zsjz9RU`sJqMCLux@Br`z>_HqUeSaZU3b<75by`0=Cy@4cTnGj>8n~&*coJ$D_7l0}ZBs&}Ydu2l zf_SM=x_Ko@;JdY}vATJ`$; zVJ#!8e;N6bN4Y?Iq?f)gChzaj-Ji%(>FL_=!FULGhhm&3XoA{!Jj(Dhkc3;OSV!o> zw&GH3zzf)kTA$$?BLj#0+I@o>y1*CmI0&$a?qO2{NUehyelQInj3WF1znK+)pe=fA z1t165W^|it0GVPD*$P17Z#^tRXaI@N(CwP803=8Ew+D_Gj)?DXFJDe^)Pt&&!hPFz xFZku{&}!H_-PyBsAUBl_3`9J#0WkjG`URHp6fpzUx7z>!002ovPDHLkV1kc%lAxp|7tnaS~*%dF%S?C*O{oY00001 zbW%=J06^y0W&i*IzDYzuR7i>4l)X~IKoo`3NtL{Vl|9cA$qQsdqhl2*bcQOEf}aN> zSZa}7#s-JN&BQ{a2!Y0tLcp8d!~ym$w2o&clj3|i_h*wB#y`^8?agtZW;fc$0a6k= ztVSeJb94~_5MTzbE@Dc6XrBOFrv{e>Fi8;+5`qK0Q~+*E2fW*1QG0KNTabo6OXY}K- z6AcC$BEO&0gvD_T1PWLgql`fS2#xrrg@iwNzyjzFFiep#Bp`YiL`V%;fzl{~HlmRV zWF;UnDATp@E2W7;V0H?4YaaryCjeu<=d*Ja*ozolC}Ws>hhP&Wz_2*ymCv~{C1}kh z!r+!5zG2OIr34GuAv8YpxfOn{Y_UrCBAYo+a^k2X2;Z;1KHEcyPurD%ZHJnK%POIz z>CtY;e?ZW{fpyCnd&F~^6Z{h|c0KL}-EN2V@E!n|aK^CrO-e4ZI1LT3<|Tn1Rarv_ z53q7$BmEqIepOFRL2Pve!sQ~|=6s>?;TO{n`>9oLYk^hRTN=lJzpEeOE0Rs#AmY{l O0000UtP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H&`Cr=R5*?0l06Q>Fbqb0g7!GQ06$y1#A}#HH##7t8(g&mfz3sN z(5<0m`pg6);@k3K%TfG@em{BA=M*>k-f(qQfDJ3qGaCf?WovpY7~0w$Iw)x8KuccC zpaF1SYmf!IE<6Al`TTHd?C4w%Qz&B*wg~KwS@31D3Iv05dn}LU(w0Hx;r+tflHT!$h$BT>gdBf0l%PW!o2DH#{d8T07*qoM6N<$f=m&VUjP6A literal 0 HcmV?d00001 diff --git a/graphics/pokemon/torchic/normal_gba.pal b/graphics/pokemon/torchic/normal_gba.pal new file mode 100644 index 0000000000..373cb59b74 --- /dev/null +++ b/graphics/pokemon/torchic/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +255 222 148 +213 189 148 +180 148 123 +123 115 123 +255 213 98 +255 197 82 +213 156 57 +139 123 90 +156 205 255 +255 255 255 +255 164 57 +255 106 57 +213 90 57 +90 57 49 +16 16 16 diff --git a/graphics/pokemon/torchic/shiny_gba.pal b/graphics/pokemon/torchic/shiny_gba.pal new file mode 100644 index 0000000000..368d184945 --- /dev/null +++ b/graphics/pokemon/torchic/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 164 82 +222 180 131 +172 123 90 +123 90 74 +123 115 123 +255 164 57 +238 90 41 +189 57 24 +123 90 74 +156 205 255 +255 255 255 +255 238 172 +255 222 115 +230 164 74 +90 57 49 +16 16 16 diff --git a/graphics/pokemon/torkoal/anim_front_gba.png b/graphics/pokemon/torkoal/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..17ce45d87a9aa6d5b7b606440d4272917d0ac04d GIT binary patch literal 1616 zcmV-W2Cw;vP)! zpc7LcQmEq*$-yZV)(}Ia24B`bRHcU0ql*+wVrdTcpW~A#6l~Ez)+!+&8N&9x*&klX zy9wk}=rgwDec%1Qx2t_KALVlY!N^lu_)wl&hGEj|yklSxJJa6?1SG2pAyC0ENty*A zxg6Ff7UZ=B9cyI@j6c)p~N&nNF5qC zkq0eJgrkKvjeE#B4!s=UaB(A2@)(JG{jq$iVC+NBe@p<1OD@SY7rIU%A6?JHxGAqWmc$88M81>_ay zd~_gsbuf5(yyy(29Uw_{_lXANWx_VchU)-)KtH`y5?<;UH?-i;p0 zJT81EAb^1v^mnQSyEy#eQ#Yjrj4NmpMR%m!B_P1@(-u(MrVDIEQ8){a%ci5(Dex!+ zEr4K2N>vGu`<>to4m1iJ14q9r%hV18i#v{u1CA4*o5Xyv#s#b>`owS5KBNiGe;~j) z>5IOozRyg741uIS{$kRMr#2=u@p56ui zP#x6q*rMvt=ru84$Mdxhn36~k)D8gyws*vXh*aVVV{l+uS`c0DWxha4(JMqKuuM%2 zL3O-Shzh11<5Hf$NLqTCK%w6H_4*JK1`f3o47?K#zMfzjHIYgOhzCw|AJX#LA^9Pv zMSQO_EE1nqx+3{`f0E!5U}%1blKBky1%CK27U!~wH;8n=h$90qF7g?G5k)3oM3Ds; zu|do85HJqC3BZUA4n1}T1{?QZPXNYr`6qnwJ;r_jz+lW92aM?lrR6qMI6DCW00v|C z#{uJ!>OOxAg2p?>5HL>I{j(%sOqWWf@6|BZ`Sl&sfC0L*Bw(zS?kZLGb8r(vz&K$^ zz?fl-t+8r-Fp}wjF%5!cR^=_fsZs%Bjj@;a1aMZx62iX#40~}Cuix~lD4?*j4P7LNT_S@KM8!<`l=5{TwMUBF6vHhf2%Owt`$vl!4?0)W8PEBwl$?7Nll{b}m8{`-Fu@qhEB*!22^v$Cn3j~3Pu{g#LnhG{iP)z5CXEo#p z%xCaJ<8RFm02okf9R*qZuqD>{s=G`P)Kl0QzvFcikEcBs@X;R5*i0>KtSEKKbUns9=;TVbKu ziUdo!0qq52bf8 z=pz}OL9egJ*_*#WMp}-2M2GB`$tYX;CnQ?yk-qi-ci4b5i9It)VCVw|u>nSU(_A5r z69eeV!k(< zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H)Ja4^R5*?8lCcWHFc60G1noN%cVEEqR_VLB1w!&LPJyFYTnnO8 zmQW;1ArM=eUTj?yN4@R;@A7j=KE{5bVq9r}g%f>ys=KZu%_G#lHYVv(po$(K%ti

YpoY|o2QEe*PBs5xRSw&i-5U4qK{7i;(mh;OY z8*pfr?c?p2Tbj*+(*2kga7~l07*qoM6N<$f-hZ^LI3~& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/torkoal/normal_gba.pal b/graphics/pokemon/torkoal/normal_gba.pal new file mode 100644 index 0000000000..85caef4913 --- /dev/null +++ b/graphics/pokemon/torkoal/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 197 +238 222 213 +213 205 197 +189 172 164 +255 156 106 +230 123 74 +197 82 57 +148 74 49 +131 131 131 +90 90 90 +49 49 49 +255 156 0 +197 131 8 +255 57 0 +90 49 57 +0 0 0 diff --git a/graphics/pokemon/torkoal/shiny_gba.pal b/graphics/pokemon/torkoal/shiny_gba.pal new file mode 100644 index 0000000000..70194b9f17 --- /dev/null +++ b/graphics/pokemon/torkoal/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 197 +255 238 230 +222 213 205 +205 189 180 +255 230 156 +255 213 106 +222 156 74 +148 90 0 +213 123 123 +180 90 90 +123 32 32 +255 156 0 +197 131 8 +255 57 0 +82 0 0 +0 0 0 diff --git a/graphics/pokemon/totodile/anim_front_gba.png b/graphics/pokemon/totodile/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..387b24e4762a3b6f1932628331a85279d0b867db GIT binary patch literal 850 zcmV-Y1FigtP)Fc8KySVOb;1zH%eqPc*N8Uq97acq@XWY899 zg+5FHduqqHOETvbTp;M2Ztf~Cof9~gJh(Bc9_=(K!jm%g5B!bh$K%~+3jBHAR{y1Z z;~7(D=E-AnyR1$wc!7mq708G?HlA9*!^)!QSD4-w%dpqaZH|Vyd)Cv`AXtn{woW@Z637$U> z01L`GPWk)qhjv6VRIGcAj-dG@@C{fcU`mrS_u=-8L|~bVYC}Ju_WghBgxc(H!Vxk=m2(T51uKl(9|%K@f&1yh56bg*3*HEb#@Hqp>mJ<`QFbD7Tdb z6}Fc62#Ym|VCxm=OW*^T_$m+&8jE#y7f^TiT5Xt6kj%$_^ZzqPrLwDkDb70;F3bDK z*h!bMURi&SHKHyw8#pfku2{qY;H*eXfHtExMDn%-2v|b_xT+WPfO`fBm{!2WaXl@7 zEqybRM3gS-?;iD?=eK^ zBp!lJA;Oerh>7ew!08hKG3x5ggF_pbjPr;}wG$<8o0ts5Q>=f_d%k5+f0!G2cRZ^7 zfe`oWK7PJ>0Pz!e^GJ*pFfu?|^GiHltTocU2Ox=j1K_n!VM4%AyCh)79hVOSk)LZI z$uK#nSusrpcS7V-{fLBPd}%F0r9e3uAfsKitSnUuBX1=qVJ|cb06QnHA`HOfVV6>i~QwgP=R6qy+Y+S}*=d3DJFXhIA51`jM lGJU^77;gdeZDLn{QC}|zDV$(R5*?0k}VFyFbqa>g5)q$@kjzn8WPjyG`+)$r;(CgX`q!h z5)H)CRN_S=wX2b8XquUyKKVy_O8t6~A<>(N_91}F6>(x99u@`+0-ZU)0CXWX77@Vt zaRnLZ2pkw%1_;FVn4!WzBLff}_{{cDcG-J&*}d-C)U3Tu{T!O>3g-4U*`#=)6brnW z-2k;s{B`XYCU1p-Pr~?}!VFma5L2To!thJ81Fn>M)*X6wtiJakgqhou6h^112qON~ d$x85zA1}h9f!$%k{NVrq002ovPDHLkV1hc4l2QNw literal 0 HcmV?d00001 diff --git a/graphics/pokemon/totodile/normal_gba.pal b/graphics/pokemon/totodile/normal_gba.pal new file mode 100644 index 0000000000..8a68271f60 --- /dev/null +++ b/graphics/pokemon/totodile/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 197 164 +255 255 255 +148 213 255 +106 180 230 +49 131 197 +74 74 131 +180 180 180 +255 197 115 +255 90 32 +205 41 16 +123 0 0 +255 90 32 +205 41 16 +255 197 82 +172 131 41 +16 16 16 diff --git a/graphics/pokemon/totodile/shiny_gba.pal b/graphics/pokemon/totodile/shiny_gba.pal new file mode 100644 index 0000000000..609f22253b --- /dev/null +++ b/graphics/pokemon/totodile/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 197 164 +255 255 255 +156 246 189 +106 222 180 +65 172 148 +32 106 90 +180 180 180 +131 180 255 +74 106 197 +49 74 164 +49 65 106 +255 123 74 +197 74 57 +255 197 82 +172 131 41 +16 16 16 diff --git a/graphics/pokemon/trapinch/anim_front_gba.png b/graphics/pokemon/trapinch/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2ee209fdf4df5fdd0c9115679f10dae862b869d5 GIT binary patch literal 621 zcmV-z0+RiSP)q$gGR9J=Wma%TzFc5}CFCFb8h17$AgeN1bV4lVTg)P2FT0mX8 zv~Q5j&*iLnhrU9cJOF#5X)Iy_>f07c>>ZXQnz+$zs%na*6tZ$E!%PZyBuxA4&_ zfbm}#xI>T1+je+$*LC-}t27{7uh+-q_=_nYtj3fQzl|paz;iAb^hq9(idJ=WtMMR}?EWV1hc!WQ|1w5^HUqM`m-$P19dK<dQ2Zow4fgnCKQarF@J)l2{@xWDM0^xWdx_=HJq0bjuJg}F1al)@+JXj6{H^2{a zJXmr9@ti*<;z3I1?t9lw#)I|!@%XCoAk?{Fan293-b{Z0_Q0==a|wPk00000NkvXX Hu0mjf&SDpW literal 0 HcmV?d00001 diff --git a/graphics/pokemon/trapinch/back_gba.png b/graphics/pokemon/trapinch/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..61eec3c92ec0d22c4172d907e945693e0d10e674 GIT binary patch literal 437 zcmV;m0ZRUfP)KlR<97AP_}upCHEBr+lJrQK2WWxkxv?b=51h-dAM6 z;E;jz0B!!lvh*K+hOwvX9{T43@brs4z&SVLzJGR6_lWE}*RC?C>^sv0l-&V)X!yOg znON*g1DFV~ukk#ojtBvTYG5i{169|UN*}0z{?>=$H3|SxUknhpz7!moRPyy203jLB z8bz^A&i7;piOg%!0jB z7C`JjR8i!zb_SAuDUt_Pam7 fzf}`_=&$GkQ|5DpE}NG`00000NkvXXu0mjfChNPK literal 0 HcmV?d00001 diff --git a/graphics/pokemon/trapinch/icon_gba.png b/graphics/pokemon/trapinch/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..731dbf569fca3543ba36fbf859ae5b0926beddcd GIT binary patch literal 314 zcmV-A0mc4_P) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*HxJg7oR5*?8k}(d#FbqX=g7|cZjawjRYQ}nMuNVm-cM5FDR18V8QE z0@%W|ulNn1>?;{Dr9{0~tK7>P)sYEsowIiyN47(qEoi(3Ex|GocnoYhKmtT9qzDG(440KCfT00001 zbW%=J06^y0W&i*KW=TXrR9J=WmOpP3F%-a0LKFt-`wVpN!rtu$GBKrm0^-p51|gq4A|K&>`_TEvUVUyED(1HYhpUt<(Vt^-WRy)A{-N&+mEO zT^NEW=jf3)fvE!+fAS9DzyS+UbS~zv;dS7G4%*#jB}v@RW9xs=>x@?b4Xqt>lFN0 zBnz1km;hGT=Rd+wf4~R97Y~lgahFn0wZiSGm&!clB3W9e&M!@6_)?Y}e{;3GSXB=3 z@8ghj9H-KB`Vrwf;r0-ivRw`(UNpD4bli*w&F1sOb#qn_FmA@=I3v#oFe_CtFE zV7J-abpk89tu1ap_PES2#5#1Mu5BfLE96NO1;JBGEqz(=Q55Y3LC`e=sS*fO#Pnfi z0g6!y~OLs_^_6QUm|d6e@**~>yn50bGpXavy($!3b7+JeDl7kG- zF$HTwDAO~vzp%G^sX7a{6gL*33SWldOW}}~|Fsns+~H}a`L$35@7c@1!U1G)cu z`(rqP`>s_h0+s#SQKM}IwEa71ZW~eAUju<<7I|rZbicWtB0(UVbq7WO?f-^r z`v*Z|+OAJSING18S^LlndNqQeyA`e4gGQs#iE4SQB7pYq&RP%ypf9a}QM((N+5=o9 z;9<#uXKiH!2<6z0V|zTp{sHsoEw@r*`T;5+#+J8g1(q{lRC-naa8$35j=TQhcJT-A W%G}vlD8Ft10000sYEsowIiyN47(qEoi(3Ex|GocnoYhKmtT9qzDG(440KCfT00001 zbW%=J06^y0W&i*I`bk7VR7i>Cld*2wFc3gFcB$DPXac)yr|xYQ4e1A@T|2pBJ7w2m;?xgu(jkF^06ED;mo5}-bm%108a#MV#om#&3_GF>WK0jX0rNfG9gh@a|7X}) z3+x!i;j+cZM@0ul-@}4}NeOqOa0&%U2{8H*Yyluq0FZ_Rjtn^@Eg75up(dU>Au%e{ zL=J!-{le&0;b-@_MZit`?jD7DsD)<-gyW;IfN|A5c^;_Yh3nqQ%fLRpko4ZDz_7gl zuX-vl?6q+H8ekt8*Hs5Lq4qexOAT|UNueQiqpY~81xVGb7S7C{nR}|--mMbmQ!J4Y zAD_MZWNys?b;TMqwxz(v#`|fe0y_B`kz`VGG&WOx&2OTQ473sb2fIKY3s+4 zEVkGyxJXTA%455K9@N%`H(^R*=bCr`J4I9aMF?+pGd?JMez?H%LxLO8_(O|uJ4E4q zSh$sP*eVR9jN1f;f`swM02M+Ym&2RpU09;Akb_~?BybT$Q7o{8$fmP~$G;*M_#@@& zo*)=oMa1#@R>~^Vy8@5CJRw9J6U2Dyc7 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H*hxe|R5*>@l09z2FbqaLWVSB#Y3UFy(vrcxT=yI$i&r5U+%bX& zdMRo!4gy5_a)1IYH$LzW;On|S7UmYpU0g>32%f<@Mo^CmtOYJWeh9?)@!bN8!GA7o zfhvT~k_4eGwoMS)vn7EabDfgXWPTk8sI}+c5@z7|%KN#X0CmP!$a5~GcJ!q*^-nYm z47!rL{~B&F2K)QzF9#0>yFr0|>7YVGR=_R&YEs2oTyF1P00001 zbW%=J06^y0W&i*N(n&-?R9J<5m$7f#Mij;=1MZ~3BxR#O1tdJmodg)s#tcx>dmev>o9Xc$UFv&a-HoLk(i+1Hhd^Q|6N zT)Vmvv4L_5zz1MxCbv;I-!|NO9FJ@6cJ*;@SXGn}h?jES$*^6Nuer$Zx_1Cz6~LaN zmXx=;GOHRat|qx+>>*Zk2P*r90D*y`JHPUqu%S@5PNf$6j7q=m2J)|_4xeX zw!_v({l8@qs|irBY@Kpgm|>&YVX7Ft=|_x!K!^@)gdua>a^mlP_)+yby(j%4GiE^X zgfkFE{rf1~`}$wd>HXP1X4r`-pqyY1Zrl2&`@!j#&%yhHhYLV4!W<@#`1em2`^`>y z`0&t>z>5i>6!AV7hEMu_aJ*Km4w;4?*hvB9gtm*vATFZ#yokQku#5~))VXXFCc9;A zm;;Eg<0)~T06%mA{HCPDR-6)Lv_1i$5VOWDUW-%0kih+JkOgLhJ!aTQwz;zaOo*-6 zv{@Bx=XGBMqCIygipOXOd~Go{G_;*=W)ag7A<3ArF*`2((xn;~0qi=R-Yui#-tKmT zB|w7E0liHn%(h`3Ij*?w_HLLoRBqsX&A|z82Fn5Tj&9f7n$twrKU)@O2Dcr@;Xexz z>@AC>G2~_B0%FV;I z<%_$(*F}gQn$dhj3Fv+zz_RFm6?XtM!|JEv zy>;OeP#oyE%80N(`Ig578F8U22&VyUc0J(hLO9uO4Ja-g1#51x#k}k{QBh zLNo}@o}5*Y0otNfq`wClfF87=BW^$JV3wN_y3Ode&kRGOKGv^KakdDQwn<%0Hu+P_0m*6Qwd+#=m+{;(%Bl%*g)U`) zY8EI!dMlV@k|Gbl+(5cfg*5@Nm-Fi^pb7@{wdKr()BSF@HCJVkYOJ8Q>Agau`@#>q zb1tZGVqu|<$uWmoYKDO)!o=gGDKwd)96x&Bwn&a9rmGT95kCpG$FK zlfuVi*QvuKwN8Uv3Y>3T8i>PXwT4K#3?peXM$W0|JauPEdwq)ik?0I*`Cw4k!Q^*BmzL9V`b* zSmGE?>^*!|0*FN*j!gn!)dhO0Zfv#2jL=69;`-66J9Phq&--!{;R>zh*Epd&c$(q zW$i&;{h=>c+XIE!S$mMX1XrM*SK0%Zuq*7rinIqeFS7>)Desrs0~KM1@gd+Ji*gr}hB; zVZk1x;-1(8pX|YA)*ej69p5v1fOwGD0{|0ohx(`XV3U+LwFeV%hx#kt#2z$Adi}&6 zpom1=N#;fw^$)$NJ;;droceo-JqR+NXX+n3atB^w53)^{W`MpoI^Gg{F!2xge)zWK zwMLiu2hl$5_YNZE68{i28jVP*{3ZTDX{E}3nSYq2yv#q$#%2B?JN^d^yPRfH)->n< O0000&YEs2oTyF1P00001 zbW%=J06^y0W&i*I_DMuRR7i>Kk-ci%Koo^1TWqyOB*S8Gz)0H~wvbDM2vV71U04uE z5f_?W8MW5>4R&5Y3lmZYR`?+{g;SV$nUx;k=FUjQl14udklbp-`E<^?Glcw~-kI2z zF(BLa!uP#T$6o!~SM#}tkh-I$n?T)ja>G~xbP^NP-Tch=6!AsZ7pMbv^c@S3&@51Q z0L~;i3U`{KofQv*Ox zIk~w6)a?s#YeGF^0&jq=#!5nC`LPCELVkC5i+@`sVeK9b^QsQy0j1Qyc7`GKbG8%W z_q+Zf54Kbi^ZO`7W*#uMs#m<9KW!6AUm}|FSd!a-HLhX97&^pL9#sI{eyamh#&&3M zj3n?ZWSy{KfB+`MB--5J(@Z>Y9*A}Vl?h?2&aVgF z-BDGLZkZ0?k`gF`XIa+KvAl(H{^-C)0rA_X&^opNZK?{ZF`ymXNEiibOLQlUb{qs$ zg=Aofv5qQX6c}1UC9L~9N&}V*EU~F7^e#~@ne=uncUZ4`0r?JSkn}I{Pt0E@x*k7c S^*t&80000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IBuPX;R5*>@lCe(2FbqKR1>~pFwO-=&`b{?moznSO?mLkB11ty$ zIs}O{66p|xFiCSw+ZzC}L5A9Wb)3|CjQxQ{Zcd0&;Fu#LAw-Uz&rj1LWer?0)V90xcO*$l~yKu6% z9>9xq8mX6ia-q{T4f$p<#zzF8UHJ{(9Qqp60!BID4%D!Ks;QoWY76MAofSsu0k-r9#{eAaf$=Uj7h0oc0!A1#_iIS+jnCK{1w)g&B@nn2$+IQrZ<^pj_}QOcCUJVfrMD`GqhSe(ddLY(Mwo6WxdR0Z8;P QnE(I)07*qoM6N<$g4hJQ5C8xG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/tropius/normal_gba.pal b/graphics/pokemon/tropius/normal_gba.pal new file mode 100644 index 0000000000..efe3d75ab4 --- /dev/null +++ b/graphics/pokemon/tropius/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +16 123 189 +32 98 32 +57 172 65 +123 222 139 +189 246 156 +106 74 41 +164 115 49 +189 139 82 +205 164 106 +238 189 57 +255 255 106 +255 255 255 +0 0 0 +230 106 139 +164 82 106 +82 197 90 diff --git a/graphics/pokemon/tropius/shiny_gba.pal b/graphics/pokemon/tropius/shiny_gba.pal new file mode 100644 index 0000000000..cb02cf4491 --- /dev/null +++ b/graphics/pokemon/tropius/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +16 123 189 +49 90 0 +106 148 0 +172 213 32 +205 246 65 +106 74 41 +222 156 8 +246 189 41 +255 222 74 +238 189 57 +255 255 106 +255 255 255 +0 0 0 +230 106 139 +164 82 106 +139 180 0 diff --git a/graphics/pokemon/typhlosion/anim_front_gba.png b/graphics/pokemon/typhlosion/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e56996868156ee9e2c80cf4316a447aa3636da76 GIT binary patch literal 1448 zcmV;Z1y}lsP)D;oN)Z3v0RNl-|6%~{2mlZe5dZ(hBEQ_i00001 zbW%=J06^y0W&i*MCP_p=R9J=0R=;oCMik~?0~AnsEV^{D{{+^7(QGmWG>c)RQ4pYT z7NJLZNHx^ZQH$LI21(U`EFgg-0&TK%qSJpscE&C-1*kwLMFhMQuosR(H}$>aulqrJ z?hT}<_wjr09q;b@G%X)9yhPf)V}`LR15_gk#~!08P%NexUVNO1fH@-OSCLi?r&_cK zCx1xn)c_Fli|K4}J&nR}5=aCP45BsDY#f9i!|*x?)Jm(9-**kes5b(5{UU@R#iPG5 z4x z1f+4&oPQ|kVspzNUW)j1p~SUaAo%`^B>qZ$9{^Cn!RHAeib@dQ7zR1W2o{U*PpL}= zAfC$zUSW&-5^c^uH(Zac z7E4)KrA^W&BMD&Nv3tq@06O9UI*Hj+!EoeLn*(T0zmK<3%0TGRsM{CXO!!8t>{A>) z8NU@KDtS838R%YoqbZ|uo-tU|H1|}1o-;s|W?co0&fBB_m`Vj59jCa!%DJo9#KO)%ujcLaJ@DyWg-s|~e zhN8AygO8ijgW>xg0z6w>6BXQZaqRp4+c>^u9KAihO=zN@KW{LI%`eM}h0nl0LCKF|Ie;x%z&u=Akx-M z6!*&+I*h5pPz_T3{|+3+rD`zh+C0_&?GWO!LlN}i2|94Qk6_3K}|Jg-J z6P*6Xa3HYz#xh_%dmjvh2L}M{$%yB~r9B@pEvE3) z6XTVCy~D9hGx;Zq_6|{bsY`SHm$bJ6l1ejx)k#hxo?^Iyxb3^y0mby4msSVkgX}1T zgQkPHn<4`qPlNod1TF9!LErT>V+MdD@C96p^I_(< zen`$QXH@_yBkqjSTemmqbQJ(PF1pa%gza6H0%ghM%a^Kiv8L0F<7Q2=+kq58D6DKl}%D;oN)Z3v0RNl-|6%~{2mlZe5dZ(hBEQ_i00001 zbW%=J06^y0W&i*J&q+i%{{Zr(tvaNtT1#C)DD0@x zwG8c8mw}AHSf&bs|ABM=0b=(LAURi&Tz(|nL)p6VH}Kv$w(ndjM!3Nl?&I%!_rr0V z|830v20%aEX#1{L!KEpe^==7R{an+O%UG`qyedLn>z8*K8+3t=@FXx22-xE;nALzq z+gO9Gb(??+lx%G<7$9KFE|?K0zVvqefIUU9WmP}`71;5EQUfc(n|TFBfGofd!;+P( z8v$4zGzfxz+1J2|0LU?d0Am&42Udhv{gqq;n zEuerW&sf`n0~2gQA%H%DuLSP@+;8?9X5J)~pmGyDzq)zU9)-6^WuXBUssMj@v(*Cl zA@UZSaDMpqHIIh|0C6EzNR@iG>dX_|_K zln8J`B_g8*fMEbU+_1t45Mc7ge)`^@gP<03+LF}VCdc)0v|W6} zbzE9KUOg}gVT02#=wVf85@ODetk+kdNkG8u0#$`NVS}!GVx4sb>I4GT zZE6zg3IvAMyc^;^H9M)nu?<+zwy>wciw+2JRP(*Pm{xJHv;hn1fG9rI!0NKS3#=E# zG1WL2-T@*?KoQ>oA_Vap42fUbE!6o@w6_BB@-~Q~3Jm`UdQnt^Qw`2+5JfGBZwT0% b{g20Qk5oA6DnPJN00000NkvXXu0mjfbPRoJ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/typhlosion/icon_gba.png b/graphics/pokemon/typhlosion/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e15d7b6832295412e11211f0063f8813f4b86580 GIT binary patch literal 417 zcmV;S0bc%zP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IA4x<(R5*>*(!FZKFc83TJ%PooZBsu-pEZ!|29voccn=)bUNGt! zY-DM*F<04GUuhno)uun3Er}mve|#BE>6VjPR9d*YbW3MqAeyR5B?ACZDU<9=3pK@H z!CI*5Fv6j9BVGIpciUG17W|9_n1v7kWeDYmSW65Gq6;@|d_YMq$PnHnU1xEW?dT6? zW;u&bi8`E(OfMRVW4vDBzM;|2Y~hNCZG4ix(Sr-g$TurAo>;zy_8}CS{l`Tt^Fds3 zm4<~bQyv@`GU*6SUv&&Cn3o*T6EKIW`vu0D5Oy$;!w%*>aM-~_A0Eu;g9CG1!FV5V zrt=2I&+K5@HiF@15Y2#Ne3KOn;wj#*zhMrh(E6T%+1mXP%yS<@Ta}W>^8t6D300001 zbW%=J06^y0W&i*N(n&-?R9J^E_n&iQrRWZ zx;gA)*e?)7d4Ql%E;$8geCY%96$0eYT+>uYb9K~c1r$A${fE2Kl9qkwUa}7V9nK6n zGoJdxkx%H4WY^A+EfZM}hA9b#<*uECO$SCUb3UQ< zRPDOJ)WBMsa*f?mzT9;o)rplQ=g_5G>hPh(az0!#rJvf|8|zHM~=(CDubn%W=+lek}P`0dKR=#W7=oO^S_xpTOJu zpamKDLW5K%4@2-1f|WB`%c-iTpra&UbI8^mE)T7MMCQ)?gL2y1z; zOTto$HP4(Jo&-y6YxLw=M*EBIR1j_~KZ* z-`)tlCIS4B*Kc0yop2-&sxy!T(Ke1}BtVoYneYaZejn5W|FQDBl&MgrT`|2Nhv3Z6 zdd5bDtXmIk-RC<`v*(XVpztcRr8Fe{kw~2B*=$yMfrUWQX;fXTdw(P>WBlx5Mti7? z6;dPFc3^BLxMPZvWj~$IXb%|6AXpBnwbHE*dq+ivdpV!KxUBfq6<3<)!6|4|n}pR%i#CGha-T zu|S??PhS?*=jN`mxG~;9cjkLkDG$7WXGVUO(yn=6puL#-Iec8<{}q?kt-OKzy1m-wRaL_9%uLk=ld;mzR3e9B?iSGSc)exG%@L==ww91sa07cj5TU$hM78 z%8IcO98~KtNcu=izfJ-LA7vdi8FXWEo1W@qgf}a7*hA_H*GzW;lrSursCX+yXVaQc zydhsz)I*S6T51A8)TIUr9ZITcQj?@=XbTm!V_s!a(d|lVWLc4+zAW(+xF&V8^$P7r zV#xJrSlsg&aDCV{@}RaR_P#mz?J!)&C-UAq`F>+!u{c^B=x}}SptyJR?fVbipP${o z&P6S2ar9wvY<;=iiuqdAdJM?lF%Vxd~$;eAPhqQF-^){fY=ZQmZU9jAdn4V_$y7v3V{q! zDJBd_?OC!(B=Cf>+LT_6^~lkVFt+1ef`s^WJ^*3#vmKLIMltLXMhpwv?^H6C=Xl8z+R5G<0}4c!@A3rZX^c4Ryje4iE;dcLV}K z!Q;`M3qxe%SHy@IbGG0t<*&ciCo)|m0^6>kBeK+MZf za5YGB5FL2lF}j;q>4T6oe>-XveN~a{&Qrx z<3>@d=OUW^s1)(H2Mn-5B~6hpa+FC(AdWR% z6O!`83t%L4!7*hzYF7|Yh;>*uIX)6i;b%4kqZ);(!l_kyDv{mvXLwUF{3q)Z-s1r( zlu9QO(65#)VNCoF1QQ+vIs_eF9SWi*1b!nT7+6PpOe8rQc84K;7?_slEhe&|pBE~? z1Mma4%5A+ucOic0i@)Osz5N9I03+A=K?f#p;0GB3!cF`T(ZK)WhyMU{w`YN=@fJA% O0000@Ta}W>^8t6D300001 zbW%=J06^y0W&i*JhDk(0R7i=1ltGfCFbqXm#0QuYOqB`iuCmO!Q%GJX)7a}AeXh_8 zdd++};5Z~qynrfrd`VvtP4jf*`O)JUF7JTu4REk;B#eC{VeC5z{;vdz97!ckJHT*i z4(z(d?5W7HF+%Od>?L9#Axyn-dw_IJ6r#laPK;5fYJhfy6`} zz^2f{X#s+>ID}A-z;MiyB4M<)ZCe1FB-mMj$j}0C&Y_GAfG_M(PSN&XDga=UghA#= zE)Dt$r>AX}5!K_lw0GjN1(b+3%Yzv=0Q}P^anP?*mIzNVgk7&P`S|ht3{cy~0{oTl zZH$pz8+iqOZ-6ESB1^@hmI@2pVu-B zS@Z$7uNEE!xe=I~QYW&92m^qN0mWp~LoC2y5$)h}3So&LB?QFt6Q_WraRugknTvfE zG0KtJY26iK=i(jk4?f<;1&yeH$5vq#JQ~sSJ;Kwtur`8UN6;7nDZs`8Y^DVO=`c?( zYsfL8a|-Z_6v9a*Vz2V0Q&kFvebnoye+_vBU=%}CfcjaA&s7n5Ws+_R(Yy$7ox`#+ zfvV%BDpOYmgsdKDJEaD068L6GF!tpA76=s5b(!agwG^2jY?RyR%@3($``zntC|J?a+eASvI5$1ozAYR zvjT#eeN}~zEf7*tBAb03okJ4eRT4qcoU6EXqaRx&k%51hGA-y`avr$=0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IF-b&0R5*>*k}+dIj2f#$EBOplWD2N>%^T^;Izdq*Whh+c&002ovPDHLkV1g;}#Iyha literal 0 HcmV?d00001 diff --git a/graphics/pokemon/tyranitar/normal_gba.pal b/graphics/pokemon/tyranitar/normal_gba.pal new file mode 100644 index 0000000000..6c5e2941c3 --- /dev/null +++ b/graphics/pokemon/tyranitar/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +197 238 197 +164 213 164 +115 164 115 +57 82 57 +255 0 255 +98 180 255 +74 156 230 +32 123 189 +0 74 139 +213 82 0 +148 41 0 +197 197 197 +115 115 115 +16 16 16 diff --git a/graphics/pokemon/tyranitar/shiny_gba.pal b/graphics/pokemon/tyranitar/shiny_gba.pal new file mode 100644 index 0000000000..3090536a94 --- /dev/null +++ b/graphics/pokemon/tyranitar/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +246 213 148 +222 189 123 +172 139 82 +106 74 41 +255 0 255 +238 172 213 +213 148 197 +164 98 156 +106 49 98 +213 82 0 +148 41 0 +197 197 197 +115 115 115 +16 16 16 diff --git a/graphics/pokemon/tyrogue/anim_front_gba.png b/graphics/pokemon/tyrogue/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..038a2795cd9283746d1ad29462ca5d29396183a7 GIT binary patch literal 852 zcmV-a1FQUrP)rj7JA?nadmkap^Y@bVyzGM@w}1YKORzfD>O&dCGw0HyC5{! zu9PjHMD(gVU*~8W%qhpF0>ciINo~8;o$v7rzZ?kWz3Xpz9*6#yav%!k&nD@}cR2=# zpqZqnu8Zx{mhv`vdCEC@7_oMek-7n5_MGE1&onjO`qt7neLT-#Y;6G2h9$t8<|8x& zMKbE5YdEi)Mxf(q4454Kcx74BJR2hgl0+4N%Fd7ii8?8O^aLp}Q7SVUrpZZG-m8hq z3VDvgfQnwpzsSz0ZvO?>v5x;CSpN>7?cN*UGwMBHdu_g;UYxf3g!?1_2OxWW9I$I# z7y<`61JXa3Td+l2kN|i;YI)+Hi>@vRUVha~V0 z9#Vj)3*cQ*m)O%9t{jGpux(a=$010GUvf8a^{ZI_HdF;)u|vlHC3aFjC#}d^|+!b{{T%h9lVbNd~D{6nE#-V zXM5;)uMCEDzK@h}RtCcvU7U?ef#3eYImR4D;UAVjTKtp(OBd#>xRUr|3-T;`gY9D# enzVE4D2-pWau`c5>A*$+0000Kl(CNMAP_~}KaVZP1P!f$yt0#|Y zcgF-Y6u@dRB|wpf5W*$^D8LHw@IW5Ii0Yw00jQ9Gb{Gf^R@dnWR)PzCU>k~6sX%C` z4uIJlmOl!FhKEjaxdoELR^mRK@SlFuZ=Tv{LxB*Askv`Vq&7|~z^(e&Xnd|cm|z9u z8+3#Q^br{OB)e{7qJ%(Tq9SlVTiHE@;xq1mjtXbfsOQv_E8*~W6OC5z9De?n&<=c4 zX$@@_n?!j07}}#)mQ3D5>-`0-y1BUe95_vInlBh?Uxw8A=Y6JZH;X-%FK#^*{2qf} z3vn1r|7S-5F|-)0Wol~q_6oqyu{aD(n>i?0?DYy@%QF!c1AUb0y&UkQxlI-)V!}(H zxD5c;Tp|uKuZaOSI9!!lFrA<)mlt4- z5w)5l04}$P(}@xmQ^L`z%Pkfh=evs6BxdTK@BjMs1=x7LWqulHWdHyG07*qoM6N<$ Ef>mx47ytkO literal 0 HcmV?d00001 diff --git a/graphics/pokemon/tyrogue/icon_gba.png b/graphics/pokemon/tyrogue/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..10099d5cff34b95e09c039d92d0e19d2328276d8 GIT binary patch literal 321 zcmV-H0lxl;P)DV$@k}(PcArM991bUb)(gbqcfQ1(jl445-bA^TNL^QBv zBu1qZGVjd zjID+Kbq*^`8N$HzYVN`?=%D5y4C;_`7e?ryyD;K&br%LR#UTuWyzGRb-+p`mik+oQ TJBYzV00000NkvXXu0mjf+FFOh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/tyrogue/normal_gba.pal b/graphics/pokemon/tyrogue/normal_gba.pal new file mode 100644 index 0000000000..97bff07831 --- /dev/null +++ b/graphics/pokemon/tyrogue/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +255 222 255 +238 172 255 +205 131 205 +172 98 156 +131 49 90 +230 139 65 +205 98 41 +180 49 0 +115 0 0 +230 139 65 +180 49 0 +213 213 213 +172 172 172 +16 16 16 diff --git a/graphics/pokemon/tyrogue/shiny_gba.pal b/graphics/pokemon/tyrogue/shiny_gba.pal new file mode 100644 index 0000000000..e8fef8a16f --- /dev/null +++ b/graphics/pokemon/tyrogue/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +238 230 205 +205 197 172 +156 148 131 +106 98 90 +90 82 65 +82 180 255 +65 139 230 +49 82 180 +32 65 131 +230 139 65 +180 49 0 +213 213 213 +172 172 172 +16 16 16 diff --git a/graphics/pokemon/umbreon/anim_front_gba.png b/graphics/pokemon/umbreon/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..dc73728507ecf6c672f7380b0db83898efd86d71 GIT binary patch literal 1084 zcmV-C1jGA@P)m<%6_TEDo zkddBUU(G&vpM=GTgV_>Y?48OSpoi1+LlM|pr+SY!Qbf5&k-jPet9SV2OA+S)z zNo}EA#4a#JrGS`}fD;LN4+aoO2~3vHfJ;Q(bJ`oTqQW*hGnjhXQ zL7-c;6Le~#qPrPC0f;tLfaZYnV~W6e3-EI^I*Kpq0Pc}{fF*qW#_9lt*uB3`oD0As zejC>8gzTa~j`v9)AiS^w6jLZCY>P**96|%~5D5`8y@w6(UuZx|4?tOB#9YoZV5}6g z0hG^;9ZP200LYsH;4?O`0cTQh13<(qd7#fzjy9}|27oL^0C+@b1pK!E=Y|RGz{3PH zv;%JhAsgCaNUH3#RIfb-KNRJJV;P!1X#1UhyAjhI0vN#a(3E|b`4 z1IQ!TSOIE)p(Z!PV|Abd_X~if<~sV;>!K0Mn|NRYaB}NsfNudvfX0q8HwbZ{c6TG- z<+;)iJO1f#pIl?*ZGg)Mt`sc*7wv$1 zCEbd$uS!&?*RRNi+VV~?up%PUOzq&8y+QEhSWW1bwPCN);i{d}F*iXp>W3U?(GNX~c)1-n8h-$T`nErro2l{u0000&&#})xA;8*tvVC9f&W@w#-;eT6eEfO`R6MzzK->Y<9WWL> zz|yprKtKR04ry`=U{5f2JCh#=zyePo-~_5?ssZp$;H$A!y+W5X1)*K)~KuCDu~Hyqk~2`VtiCE2s?+Z&F*_=Xy42n!^rs>lxOA z0np$WNuA#8g?(Diop=Q*t1z1>EU@OF4HLR>Zj9r2Nj4~By)AP~oDS(?BBT|f< z07`D-8Z0-oOaX9RfO`v*Z`_a{w2Y=*r!GM>IS4Ktz(aMwy+3t59*8w4=RL4XLSQb` z+#dqF# zg8&~&2iTd8kOONyfDZ*htind*?Ci%e1+UXg2rGJVOu^MNF@T2+=oB4*>MAHQ?8^gf zFCL2wN-#AzT!LJzxc;7BUV`d?+M~FC&l*(jgu}qKHwdQCAM+5Lf?$b$ne>477fXgf z2IqXh@YKc6IN$dGWAspJ_7puL2%0z|V5X0H)^?!23XZKhbpTWasv)=dl14c!w$a}i Yzu2BYgt^xAWdHyG07*qoM6N<$f;UMPGynhq literal 0 HcmV?d00001 diff --git a/graphics/pokemon/umbreon/icon_gba.png b/graphics/pokemon/umbreon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8d867c2fa3055b9285b01ad0c7406fdd7a9b6e GIT binary patch literal 358 zcmV-s0h#`ZP)DV$;31i<&68xPZX zN=0a(uqpRcms>I()us%XhaIapmk(yzvsznzgy~Aw-f~7LO0oi=8Y1La-HEBQA{7wR ziB?t7X`@g@gj-F%2D*Ids!OtMo5G)r_rj!&Bn+m9Ny115^b%%HdPHIHaLH8{VbGR{ zC`>+n5k_rk{8JbwCF89yx9V*_3WH*rl`ygu=G%Te0P-8Ks|UM@UH||907*qoM6N<$ Ef+VAteE0RQ%+|J8fdtWvatDeh8g-rnA{w7q+Kix3bHmUkji00001 zbW%=J06^y0W&i*MYe_^wR9JEM0F%J?31M2GL~u~92e|FJj0>)d!MNh&-k#)o;NBnM z^Unn5e5?ubtB=m3ZWoAAaTGVgkH^t71T;==gwZwtpX-6niIiOh@W({}|9ZFEZ7P7$ z0>Wc=x;O;)JnrRl?h!^_z&e}*W6bdy**y~C5+Wt6d!FB>PBu>02EgKKFb9atQJ9nf zf|&vX9u>aKSa4l2%_U=$Ism4lr0Wie2^?)IvVhrkt(YJd7(fet+6Q&(uy{LMRRrcE zZNj9yPHJHoMu+HzL9EnI1Jom7XO*l)aIdKp9#AO{l)AO>2)wMJiAD)yP54--TGZX> zV2rg00izAT-TC@f)oQr6kJK)}2X%}x0L~1!UtOh*7VZFj9Kkk*CPXp=%qn;ow!-)v zHW3&@V&>^U19U`Y09gN(Bmk2sy%RO&sw2AUTw|$XI%NAHxI#B{7#-5V8ODs)}ljn z(0J27YbUPt;HM#62-~K!0mOOYGAxb}NR7rgTOu+*_T2zrTWJ$HVDcoifUBTzbG9N~M0 zIq)$Yd5jkV>N!Ia%ADtb@+eU<3V`yPrDTQ1`r)U5KQC|ge{9aCgyizwilxco{Y0-o$WH%tbi#eD z0;z}N*U>Y<_q9OhlTWV$jGd=a?smb47Pu$nTL5SU#*QyvyuaJkssjLCoSq`k)R@?L z_|56*es{#1njm%_o}PZ&?T+#{dNRIz>dXBYNMA_f1NGDV;yE_|6KuZJ85*VO@*vo| zz;){00pbL2G`wNQxC{nreX+7sxlpgyCF@eEj_G-V2A4gYhi1?lyt=>wV$Hfgg-R`g zgF*ic0dKF;4-C^Hb*1C*`&>wj)?l44S_T3^8~m0tC(~;;va= zSIymuBLMwinD15k3h*v_!db9IYpx$0G~x07lIrj6gC1vw?-P5XA3Tq>1=K1A3kq^HRifxO2m7CI;8;kKyjJ@Pz#?ZB0dckR}@oOfFkIE{s=ot zKKSv0#XxCNIGMc>9)dVP`M_ih1S%O`3(E#oYu>KAx>RA5-Xib9D0~3j| zr2$H@d?42LQDNgXO14rU7LAT|fL%jvuohVwfLhiX>Wkyz-i{V*T8%)Y6t`|jx|M9b zMZopVKMUl7FzxG`f4=)?edP2-0dQ>)d3})w)GVKGCS5D1`eH1&Y^(K*z?kX_B_E0e z##CP@l`t+67*l;w7VtkM_sU literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ursaring/back_gba.png b/graphics/pokemon/ursaring/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4a546c055a9fa22dbc998bf0c9d49060d8b9513b GIT binary patch literal 718 zcmV;<0x|uGP)0RQ%+|J8fdtWvatDeh8g-rnA{w7q+Kix3bHmUkji00001 zbW%=J06^y0W&i*JOi4sRR7i=vl);YMAP|OgNcmBJt(ppJDLf@P8N5@Ar>Fya%)`0dE3c-7hV^ol62x_(??PN(fm{ z93>$B1c29@V0N#tz_piB0tl(pxC2h0+O8I&W(hP{02&2S@bRorssJ3Osb;~dXi$Id zfq4SEFRTHn093FUuyg_gTL#2};LrmrcySTf4h3N19l7>_Bb1J?fLmAuPVm=&`V+uy z(&oGaC^K}=z=`_QKwbO1FE)U0O6%@>zHL5a9|e2_Wk4syO*WZ6a2g5g7|F)PA_c!VQPqE@tT z0|Rtkfuoc-JsB8SC;)FYUlkjY2%Ny~yE2dbz0vloBb~q*c;>VR_~XZoh9|>{IH2PQ z1R%2rZl+e?$muyF_-Tj&Yp`{mq*NH+b#53!g!EBu%MW%Z*Ni&>D?GpvBH#@sF|Zve zH}Km}3>HWtxK|Ynw%1%hEW-6s(~vYG1N@tCfNy2BGuUUD7&5>;OaA8^TUjL`Re0ER zPs*6!<+%tCm>m!eqc^w^FL?xO7{ia!NB>{1Unn$JAOSOSHUIzs07*qoM6N<$f>(bv A`v3p{ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ursaring/icon_gba.png b/graphics/pokemon/ursaring/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..143353f31f1b8a67d6a98c4d71cb17503b7831d7 GIT binary patch literal 355 zcmV-p0i6DcP)DV$@k}(RyFbqX~f|x8Bdx?UfOYc$wzhtSlcI+(znR>P4 z0wEAk$mGTz>hG=44yBsRLy~3d8S~R&Cp%?e5xr+X6_Qn83(uey2c<6dylg2{WS84j z7^rx!K&nygI!FQ*YumJRvy~NSJply388`qB$4x_zndflf7Mi^XZ$a57P@$}FO27=| zI8+3R{lygJj^00xrf^4-$Jm?yjQ51e{0M)X`4NSoz4#~$ZC|1=yxSlQDYTuVFs~Z* z&9-dO1f&5v&Zq;JS*cj!(qwaJ3ZKAt{OCXN;|UwglOz-U%Zva3002ovPDHLkV1j+u BoKXM( literal 0 HcmV?d00001 diff --git a/graphics/pokemon/ursaring/normal_gba.pal b/graphics/pokemon/ursaring/normal_gba.pal new file mode 100644 index 0000000000..6af3469ebd --- /dev/null +++ b/graphics/pokemon/ursaring/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +222 197 115 +197 164 82 +164 131 57 +123 98 24 +74 49 0 +255 246 164 +255 213 123 +213 172 82 +180 131 41 +238 82 106 +222 222 222 +180 180 189 +123 123 139 +16 16 16 diff --git a/graphics/pokemon/ursaring/shiny_gba.pal b/graphics/pokemon/ursaring/shiny_gba.pal new file mode 100644 index 0000000000..607975efae --- /dev/null +++ b/graphics/pokemon/ursaring/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +164 230 65 +131 205 41 +98 172 16 +65 139 0 +57 82 0 +255 246 164 +255 213 123 +213 172 82 +180 131 41 +238 82 106 +222 222 222 +180 180 189 +123 123 139 +16 16 16 diff --git a/graphics/pokemon/vaporeon/anim_front_gba.png b/graphics/pokemon/vaporeon/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f3eb2d626f37be04e0fdc0fe691625f6bc4e07e1 GIT binary patch literal 1281 zcmV+c1^)VpP)(SbA#^HV$HNUq>B)0QYk4Z50nI0QPhp0#vq8zMuyDCQwnY@tAb7%;S2IHq1Jn3C2A%1Ihih$889awF<`M@6oA zJTi08-XcTy^zYyI-Teo^2RZJz>GR6qA|06EbU?xH0q$V@dn({u;&DoR7dW=)2j$fC81q092f%hOL73KGbMjks|kcU$F`@CK0?)`MLY_?l)UO9l$`UA? zk_eS;Va{^xSD(oNdH@y#s!DgOKKYJ+yv4X>Nb9B6bdU)P^5Rgo#;ID{1%(r!vVtAf zC2KUESM*=CJTIC3vOX54*Y0W86pX1 zLCZbaL&sOJ2%l5h5rCBvqB-+NgwSyoQi^uSa2hRyeji;w`hfw6(nqNDEg6lXz{)-Y z_&obCN(>l^z|J1}1DUqLkdl5t*oc;LrS#2F3q8i?2$l6xzyTqGzIWL|?AW53UVcF0 z0C=d=a})PwFLx{D2WNx~V?gB!KeciJsqE@sZxJ#QfXpX49X!7HIUsta{3eJ4prO4U z;0sE~0i_)9L|{#uEUw-*gj-WG3WRNfjP_~Iu?cwtx8Ygf`2i76OySE8+nWa=EC%d` z#er>YN{GuAfH3g+6%^MfXqrda&ta4D{FIKEWs^3t8|$!`4+uYPs_n!MzM9oo{FBA% zs?!tafpV3je?xz^NRLWxj(0W!P2hB5S7JG);p$FjoCGL*Yl_`TeCQPZilza;VXx%G zN&!^jv&W&EIM4P5)WINLfJl(3leo)wL1Y#BfBct+OVj5)Y`H0iM)B}Z2=x*P_bqPC z4Fe?|Ooc0eue7W2rnVUDCF`);{nV(+L+}7yV*5vyF_Z(BmhHW=#;e$rbyjvcZEvm) zaCa5AkQDIdfH(KvDn73!WXZ!=J%#lJc@li6c9$h9-G&;jtJq@(NJ|wO2wP+9upA@+ zH;@bu!RpnLL^$OJ!UTht1Ggm+8qL~nC>S9S+r`?wk5?=DMGh8sZfxykrO;mp-3dXTtSQfou^M%&7ommIlHFW5g4j3TYO;cxNC? zFv1$lge0~k}@P)(SbA#^HV$HNUq>B)0QYk4Z50Kld(<$K@f(iE;b%7b&ycm7!xWj4x(?uRZvLcCdxes zya2gb?ge%@8?89BP?1D(&g_PeIExe(Hf%^J{%`;PpINBYj_1ElatOE?8~|eVyB#B3+nSd;U zD86Lb+Dg>87z6Sjd2c0_dUG zfik=e>|?M)ft4JgQcL@n;Gff622jEXw+6ld0!n9~_W;N9_wx;*d!|Ib*nRZ?0000< KMNUMnLSTZ=1@{L4 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vaporeon/icon_gba.png b/graphics/pokemon/vaporeon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d4003c2a8407421c40c601e9ce1aa93e7c565c1f GIT binary patch literal 393 zcmV;40e1e0P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I2T4RhR5*?0k~?a|Fc3heNf)d;_y92^eR2vFTlq8w6^mVMF|eT1 z1hOzhR|rYtN-v9ksE?GY%m8IOB&8rA@kzQB+@8(TbE|R}2sC$4c@FrDR9J=GmpyOWMi|Gr8OY#+ku6IAU;1l zZ};;2?KuD8B1LicEqjqGm41ULl%mv2OIKFAq*$JIk*hkfv{R;mjH>leWND{V8Gs^` zssj1SPCfjRCRAMULK3z=sJKr=E(91u{8=R*eKO^0L8@M|Xr@qYFIdzVDkd`Zpy&>3|hHni7N|amcZjWt0Gt7_gKJH4p9p z#M)j>K?6Q=5Cs>fPA&kbWtNWs(*PF{fG~J0Gkoen6ve5th`27(ucm-3*$}|w<;y#g z#N((e6Ki!w2!LQL?swibNRkAmOx*|ZaEKQ2exU)kL6krYc+h+O;K9kf*(CtiZRC-N z$J|%yNeCn{bLY{0<832PA`yhD%wbifPU60?h|-;%-ZV*sDi0I-TLA_;i%5NSmFh(* z&`IcCR{>fSLZ!XiKc|Tpn<_k60UYVkbP=89pN{^x&>?gRUL^-7liuLF=L&1gg%vn8lc)2U)}R&^YROp_(f_d5 zJ?I{`n7Noy?SaNegg7{C(a;>(eyz@o>M8(WE3q4NvYx}B*lPcD((J%EAXdQHLYA#p zL}!@Q8)XJyRfLVp{RjKM zvkKd+t}LQzllZ}83^^Ta0`k;2p!Ho?`8I&u3`jH6aFm2SMoyQ&sD7gHU7K)DF!?>p zk$3d;&-EF?+?5*uVs0BeNGdGATmyX#gqXI1K=@}a(A0OY}J=iT>uxChGO zVFr0Hd*Pblj&WiER`Nh45$0xC1MVRYW-s0~dP*eYP^r2HBM+YUrVu6(x?KaFJ;(Gn z@&FQU>z<6c4@T-?5%DolTF0UWZF2R#Uk#0o6sK~JdIcJ%;29&{lO3K6Zp^UFdY z5B9olM-+>R&F+xDXyER5JBgUs-;b?dXwZIr>|**)Y&kev`}5%QS#OHzuk4Rh=f_C7 z>b#|RFtWQi`C7^Y#f9Z+Y2uA*T9c%2l~Gx%Og|*MjqrFfiFfLq{RAK8^Fi|t)n-TK}vbx kY;SPzL>}1J|5YCR4ft~_;)+*+;Q#;t07*qoM6N<$f=iC=EdT%j literal 0 HcmV?d00001 diff --git a/graphics/pokemon/venomoth/back_gba.png b/graphics/pokemon/venomoth/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..56b1b5b7a048de63b1385b4b2facec94d5fcee84 GIT binary patch literal 785 zcmV+s1Md8ZP)KCoN@!Gek=K`9J^p<0Q-e&&nVF0{Hg&I$Oha z30BJM5|*#$0E1(4*OaB6_F&D5CxqpE1~jWxDaJ=IS3uXmg&dx-mF0F~f}sFdQ4hDg zDW?EB;9T0F2~NqY8Bhu#`))*)ah1~CWFgalVb6Ak4af$@xBl-sRx!9*7n1Wmjz2EbKRI+)l8 z1)+as`RW9)Ef%g)kB*PP$p<3=YM`{~7387Vf6b-}0Z_dH0h@7*0|~?)KISe>tCFw| zDilf>Jp#oD00aOf%+~h6Aq8>;fZG)yAO|4*gmc;+2(uM70xEr>IknJqX>kA>0NwiJ zb*b0^z|ejhftN`S7x$ydU;zl&y?B}eDvB5}OrdulpUr|G5hG+cfuGK#>b=jVWKL()hb0e*~ABxBeU3@qJEXLr}Y0TCMvv~b5Ns7(0+0p)cW=gnpZNi>!9-ny+uYqIJ#rsS`Ys66DDm@svW~>j(GU=U zPI~yf$fk9~^3a7bJ6Z4UZyu%q=8YAATG(&J^6qvD_;6xQK$cBC{KNVU9l%^LL>FK^ P00000NkvXXu0mjf_aDV$*l09z2Fbsutg6K#YGG_3kNrSg^%+||M2oGQ(xk9Ec z1zZo|M8J$hV+Rz0cJA>;BgQp)>+v_=@D-Vkf1=n7%5}WB_n& zDVC5d_+b?ughniY^Rb6M7-I>*=ZelCqZ^Vz>7#vg7!0>`2jhWcaH(Ywq$3f4JeJ;5 z&n(sSb0@%lycgvgE@$VjMc9pBC$1f8_i_5!1~7h}n~XLE|LZi%RoXPnP)M{6Q8P?o z*~LYO+SIvQ#@8~ZVqme(r%gp1!uHcHBM#1|77GsS0xwBOIHZbs literal 0 HcmV?d00001 diff --git a/graphics/pokemon/venomoth/normal_gba.pal b/graphics/pokemon/venomoth/normal_gba.pal new file mode 100644 index 0000000000..c9b3d325d7 --- /dev/null +++ b/graphics/pokemon/venomoth/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +230 230 230 +172 197 197 +230 213 172 +197 172 139 +164 131 106 +98 82 57 +238 230 98 +246 213 82 +16 16 16 +255 230 255 +238 197 255 +213 172 222 +172 139 205 +106 57 148 diff --git a/graphics/pokemon/venomoth/shiny_gba.pal b/graphics/pokemon/venomoth/shiny_gba.pal new file mode 100644 index 0000000000..a490c4985f --- /dev/null +++ b/graphics/pokemon/venomoth/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +230 230 230 +172 197 197 +230 213 172 +197 172 139 +164 131 106 +98 82 57 +238 230 98 +246 213 82 +16 16 16 +213 238 255 +172 197 238 +131 156 197 +90 115 156 +49 74 115 diff --git a/graphics/pokemon/venonat/anim_front_gba.png b/graphics/pokemon/venonat/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a8c726b2ccceeae47ddb89875cf570bd918c363b GIT binary patch literal 1170 zcmV;D1a13?P)L32S6QVJ@?j(GiYspJD!&5* z=>6@ZT_NrBAoNiGs-8WK|IQ>1Jj)g0z=`sBm&hoJ8XExzl*ch%QKv~@X9)bvY4KCc z6jf!1Uc);(p5@fSG!Dq0R24+CUHI;PRG-sCABs|4TLIa2NV)D>C7cfN7!7-xxDSN3 zz~cail%`0aaDn|nPjd+o%mE?qwXEU6B3#-SV;&93OjzD3EF`T2P4RM=@ z1Q^iM*b5V(zy<&jMg)96JM4JF9su5liIB+RcV}f7-8nUW6l!EUk6u6rzd6e1CyW>; zfP-I@vm$hU_~y(gw{32o+2PwqFU}{p^BpKWA%t7$f&K2(0EN!!>6uaT1uOO6o}XU; zaCDSEKK5OgyHx&rqsUfa7)G(=_xVfZcP}o=-C*)QpFe&=Trar@07|9cSECFcr84Pz zACjwV+dre#qikL0VCB|L{@R#;;yTUIJ?#Xe;- z1(2&&eXI0JIEUNyK*?-gi6<#c3XFcPhuW=KW=Nj%r!+4 znXUO|lD2yfD64@dIrX`44ksHxPwAtKuB702Am;v}co1`cJ|0MM_vhn5!{2d#8gcPJdfC2r|BsDJE*?lGiwEK7Qh3-VU#e9u z9!M2Ra4)CPP+2%l(~P)y&;<8)4#E9r3#V$C5qC%Y!Qw&0oZEIPmbFaA10)6h*8R!c zs`DWT9YAtf0U$ynf%~Hamt~iA4Mczp!DSr}Ktm7@ki6_~;sF5ScrfzT@c;m^ci%4W z;z3Jn&C9!Z&=MMF%Mt^o^@_yz6l>h($07*qoM6N<$g7xVpoB#j- literal 0 HcmV?d00001 diff --git a/graphics/pokemon/venonat/back_gba.png b/graphics/pokemon/venonat/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..44f7f45c503e2e81682ad1d35c18cc92c0c46a52 GIT binary patch literal 678 zcmV;X0$KfuP)L32S6QVCl)rA%P!z^9bfk_f9)M@4+!?28_6nrFK!>hKSr}Q< zM{ou@(jyTHVeBb%q?;QW>_5SlZ z7!LogpZNZO{nKh7-9Kg>zCYxbe!vW;zW>xhp7=o!6wGkcbmZo$AN~r0kcSGImdv!3 zMej^A0EGj3*cpy}^A%c4bstjPh0g>zQ)}bEaA_roCf^rVI!vFxelo<%|VeQcACV&)qCP2a* z03C)W`D`|m5}N8dyo7Wi#MYpeE`1N^=xFpkVD+lK0x4|(e16&5Hf^y6{Lx|c;u$w2 zvaX#@1a3H#LI?{0tMhYq#wQk_p5lUqpf$4uWVpP1V@ISl&ujpw(S>awM2i4l7@=MR zi$G(Hm>~hd0ia%Mwx$k2jqa>5Xo?nq9-cevc4W}%H)mKO60RAy`uKBToxsWjj`h(l zga-~noLYvw3m}92f@Z8=$~=qXGz`+B2E+m?yJ<+z3puEN@J`IQ)JJir+?Ro7>!|Z6-}lLK()q12t>dn zMtnEXRqMs+BT7k9^Shr+u|?=>4FuR$dQ+vH58YZi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hz)3_wR5*?0k}(RyFbqX~0_zUBfT12c^fq2|4Q1+D(ZS~^h2$z( zLm&iuu_ra{(8yl9wDfO!e1QZ{sox4$GuRc@f&>#!1%bc~O9E#Tk{2N1C8SPN7_mbE zz$V<#z5~aMj70AWIQBNv-pK6O4gx@Qd~fB-5ZSe&p|U5=B<@(QHzFE$pr>t~1eklG zMT=kbvPG4d`wHk${cE5$C?1$gJsM+;mxMVql`#HGg_$d1o_-XDsE_=30Hj5l U@#*}kSO5S307*qoM6N<$f-9qn*#H0l literal 0 HcmV?d00001 diff --git a/graphics/pokemon/venonat/normal_gba.pal b/graphics/pokemon/venonat/normal_gba.pal new file mode 100644 index 0000000000..ae66984161 --- /dev/null +++ b/graphics/pokemon/venonat/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +148 115 164 +213 213 213 +131 131 131 +255 205 222 +255 123 82 +197 82 32 +238 189 156 +189 139 106 +139 90 57 +180 123 197 +148 82 164 +106 65 115 +65 16 82 +16 16 16 diff --git a/graphics/pokemon/venonat/shiny_gba.pal b/graphics/pokemon/venonat/shiny_gba.pal new file mode 100644 index 0000000000..88c346a27b --- /dev/null +++ b/graphics/pokemon/venonat/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +148 115 164 +213 213 213 +131 131 131 +156 230 255 +106 180 255 +57 131 197 +238 189 156 +189 139 106 +139 90 57 +180 123 197 +148 82 164 +106 65 115 +65 16 82 +16 16 16 diff --git a/graphics/pokemon/venusaur/anim_front_gba.png b/graphics/pokemon/venusaur/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7a1157fe34ad531eed2e5d5e64c536cf32714e6d GIT binary patch literal 1958 zcmV;X2U+-uP)(7Q0?G4Ud+EI_M%{)SO)NpK z>qCzeHix~$VMq?@&d5(>Mjkvw=!q;04C7rj@x^l)Xt0<)*t?N5A@?rZVFm!|V zVlZ@rcQfSZt!jO>zjB>f*s{S^*Y8!;tA2j}vLyZQ*}7r;{ypvw*AHLXe>ScMKD8se zGRBAN>wlE)p}S{SB%{PH`eE_5AzHTmqW|}%(X;K+dH>@#uy$Jr(Ga$1whrwJ#HYQN z_MzP_|8)QU{d+&vMx|6@0qhr;yWP0oJLvTcf$l^5FEOAUEfIfu^ojAwA0A^VJNSs0HVKY9p1 zpbX$+5k$9d+=FMr;Jk+G0T!_oH$~ULDuHN%qlY~yi>4F<8m*m|P*?;!?<3rZ1Cmj0 z9rkTt1Z3EGW5c&7#To@6L>JrJ=A{z$vDa^l?RcxPB#hgvR;wJgd?RI6q=dhO?rOp?R)y7lV%!v{tkfoAob zUrG=I0dr%+A|6;xZDnxLnYg zqA5B9hFNU92LK9-2&Cp0i#nR7>x#x?MklWlfK_Tmru_``(&Y56<=rBjkp@dg!J3yg6o!Jr6r41Dk(U1N*45=*~@zw50O`Xy;Wrm{Nj z_R1++lIQPAa?}WoqW^=p^1|u->IhIdKYPdFG38)pw7DCcFP!n&Ewl7ax@5`tC3B;4 z8Th~b!gllKKdyHghIDiP^{f3Ku32l??b7G{{=ut*tNmp>kWJ&!>+ZpoS<0;)P}H6M z(&q<<53ULz>>fyGA7+3D4~)`PK&uOb3><6Fej)g!69!6VZ=<|}d_PBtyaH&HTi_QP z0zB+&aY?w<3UPB7qt@a|uUQ34%*(d))S%pEx=A&8pk1O%jr z+x4|uo@F%*ZW;$WG>k*4C-|<{OJf3a?ZjEB$wx#7Z zhrY`#2BKE?V9T>kB;Xd#KhxExVcmq=4MYuqAUh5L7YS+&{Z`kWdM3l$w)PE&T}^>A zE4l_j)F_GkC~7=i-wbYzfx8we2&x6%o+D8+32b}}d}g7rUJx~tkWF`_&6dt|DE)${ zsVYgkZd4*SX_;& zv=G2eu(4<@oq^OdTH&15BVZ(Ck*I0WE?}2LrYgKeH3qPesO6(i)L@iKNi&k~`A7JZLhCzkRLL~kj^}&L$k*LAq$Un<5k3z=M zFo5B1z%lYq$AhGaRT6?kBx*7nnKl8=Qn(BV&f=yh(-8y@3>h8oI5E?9_%IP+J~CVa z4V-Kgj(Y62NDxB!c|am*DP{>u35L+M>%`Q87*Q410VYeOClfP>sK@`W=!lV*17lMbdf_p{!_>ZL7WF={p3ztFz zGLpkmb|h&92h&&uwy^VJSX)CRTih0hAk0Fl17YWHxc6pu{Xw|DAR~;!ywAM%{l1ws zj88W9Y};0gTDsUB)e7glit*r;u@A^zjq`^&5_>@~=Y7UHyYVYH9t1F*R;JJVA$aby zogCK~gKf@xSZV5W&e-Wz0(F>A{||6Iu(ZusH(Bl&Jky)(-oAtxmNupIbW0(xR#Z5c z1v5l!-0NxL3gm&q9wfh?`D1?^sQ3fu>Lmhj&3$IG%kep-&A_p{==zQKF~#?dLTC2F z_kY#w8K~e>1W>56WnpIf<62b%YA*ro6bLSD_+7lN0c?h&;-C|N>+2V=ap7!$x{+l) zt}fyY%$))7@;1g^O;I>gKt%&{s9{&nX|oCmx&t)Pa}elsd2*H52^<}V@d29Poeh9} zgI@X*BwXbZn#UXf91Somb*BN=(klC`1wf1Gcn9WzuZy^NVQAb1n+jk|YvoC{CK8NI zTmykF@4K{_1hqZab}*CwqyWfU&sNsJTy-!@Q(*t6&s-y$dQn%;@i~D~UpJ`*Y18qvKJB-{X*rKf?-XbaO^Y{liD%_XSOFhxjHVCjuwVXuL^304Tr zFg(!loF}9y#8-6?<~tuNMDM1^Ckf0^Yzi~qS_2a*1QJ?AZs^GffDnns5dcpV5+XsA zk6d9Czl$&=po$W5L>mO+h{&Nzk@1RRAr|V85QIQD)IhXqV~XX-L_me#HI)ML@izis zp)GDbDHDL0VS>mNv?4cxT}p39gv3JE2^*LYbj#Hv0zfxNNT6F$8_x@IL)#jVUfsyV zp;!=7@H`nWVP7oT;>OZKWwfdrOK?cPlnUMm099fEKuG~nv>F zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IJxN4CR5*>*lEG?(Fc3iZ3(TkNp}iN{@ft7YSp5uPq4aYELHwVE zL7{q0Jt#sUohC8H?6OO*?HmI0m`O6pI~@Lc&`5NVpPEw{5LP0ob3J;XkgA4My8|ky zS{mQO=v)?U@#ZULg*vOy0mdXDqC#{nGvz7iZHf4L%$!p;B$NOj@)d}b2zugT__SLH z9U4usb z?zCdXlrf89|No@s)r-Bfd*0svy}jPe&CPprIRF3vq@<*SgM(61Qvd(|M)zWM00001 zbW%=J06^y0W&i*LO-V#SR9J=Wmc5JPMi_?$CRf;NfmCM;OQmBc(Nu>&4ie{zOS|48 z#WmSgu?zcm99txCok%v-tqUz2;tVD*vfyG;93GnshQMOUn3zSh;E30p?-hY-3ikt`!) zww?krK&cPm`@KsBT1k>hrOM61S_2*fR0hll43;EGmhWe11-!wbwgQ4d2?~hHXi-~D z(XCOYP~rMTSCeI?kll?yC?JO^7!XdB5?8oe0sglP$qY!2z}ykn9SU z3IIZWy^2!Z6+{XEmVzqvyj?-0mRh z6DUd-2*m}0IKF%F$3I3ehQX|GTwt2*>lem1K3-P5ueVwkr>5Dt^!1d7LJ%IcpnAGa z0Z0sHg&1J!SH!VC;{-jQKKk#FJL?X%~#u7vRrQ#bKg30TOT-#$lLSrCV?<7xYle|Fw}Q?|r_ zz%}%f3gH&(`lTh6eWrFsV=NhOaDUS{B{b~;C zArvhF1U?xciKQT9+<2?&2t7a=o|SK3`2=YS1EdlHNwgD);*f3l)TA~+ETM3PtUfmQ zEICL6HO%9|UjgD*By)vAjT^2IeGI$Z3 z`zr_-A9ocN56F}gJ3$I|ISLq-2>D?IcO8h`XE=Y(1BSKE4~1C269o*Kl^^n7m^@$v tS@}W0R)+-)oRuG-c)$=I^27hT{sq)aY^76D5ib z?zCdXlrf89|No@s)r-Bfd*0svy}jPe&CPprIRF3vq@<*SgM(61Qvd(|M)zWM00001 zbW%=J06^y0W&i*Igh@m}R7i>Klc8?HKmdlT5N&93-4k$?6AX~c)Gia79Gzft>;xp( z?hy!L&w!z#7&3uaLk(i4D8xv*t68#<(K|7V*0-SU_|` zZo8DY{+m$^4bgX@{t7Co000CBQG>I&Sd#H`<;im(KX1jaGFg4ZAOHXW07*qo IM6N<$g8%6B^8f$< literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vibrava/icon_gba.png b/graphics/pokemon/vibrava/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..422ea2359366653d8fffa8249c46156161eed0d9 GIT binary patch literal 356 zcmV-q0h|7bP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H;z>k7R5*?8(yTf;aoqTG5YJ_+}e)jcVY5Fyh6S6IXoONsb`1nI$Xl#6Y62N zsY9JZ72~0|Dppag+s}ORrw7#=^_MOg?_npyxukPw3 zQ`kuFPtUybvHLuP{7c7pBJLN}mOPK#k6?)Wx^`;Q$;k7D_m{Z@)E)Z%jPnjDjQkwn z)V7`D(M!&`PYUNb4cLxNk3oR*HX)Z;iJskT(n}QJyh{ohK(igkp%YohIVNd9x9uj( z;4-G>$N)W?QhNN7x~R~B{YuZ#rzdyx7zCICGEEGHxT7zrQiylSpU-l?5QGdlp5nyg7r zh+eBAP+SAxD*$>SpgE39sjnNAssbtoRQ|Rjph;U4B&M|r%<_7zvTne(^&ICYIA=H{ zI0zyPAS%^sDKLY}(TV{e0sR{W5EWxX2{=DR=Sb;*iE|`iY@h&qMMK~%rL5(4_TK+4 z7y8O4I{b#wZVYhS?1g3Rzg~N~RxZmrb!m7ZG(6+MifQfs_~_GDpC9T2h5|v4&=KAe z0P0pl+&1>bfV-|-R|LQ%Y2Oq#foL=i;jkHlWrZ!^GTantrZ;STSQjN&t!3jcIPJ)YURO-3&ko z0?U>q7S+jv9ROT74M++*;co5P+eJ57+;Dqc9$SxO_PpjV~6~p?ogJqq95$ z+`kL%k6T)}Jj>SS?mv_t^vjHd)|*o?IkKnuo706%SzCk43UR1oNgs58{Ei zPrc|oi~`gR;(NAUn9TJsiMN8RMB$IBQG zzE=RsN(l`fx3-Y+V7Un9Yz=1~+B@pDl!EPnTg?F2LZFV`-}VM>2-vb)AUa#6<jh0HfeSeD)lz9C1Q_*bEawz{BhvkE%=#e@_MsmG@Qt@> zB4F)``8FiN8USSrZ1v`uiU)5|fu1(I5ul@Mnty!9WjxS@yhBa|__qxpzOgJmj|V_N zSPp@Q<3AffYy%X;13?|f4gsRyB5-?v^?5w#H(3lIIskj{rxC^jjoQr^K*YfhkT4Jk zE^V)QMB+m_h=|35zMTZ-Q$_JWvs*bpY-ouV@<#t-fcKI5|7rXK{T`0YcPX^E00000 LNkvXXu0mjfRtmjx literal 0 HcmV?d00001 diff --git a/graphics/pokemon/victreebel/back_gba.png b/graphics/pokemon/victreebel/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a92b61f7a205ef3168daa63db0cffcbd43e9cab8 GIT binary patch literal 752 zcmV~0|D4l(CMRKoEv`0A!RWNb)3Uu6J|PmQrx;t^*e*MY_fm zkzC_9U^vNF-;!{(cNLx>zB+}2l@syF#@d@%u-U~SeKL||ng82wXEBUr{cn{DA$Wf* zctj;0d-9(@qG%36NZFG=MG-*7u*5xGVE0BocmgcR31F$fe!$#ny~BKwrmQZ(!2|}Y zT^z%n^9BG&m=4(M0$`4Uqk&2XzO8l;#|wTkP$Rlvfxvve5V|1KfaSVK*aK8TH*DJ6 zNe%@yRtbS$5^HY??5``l!XB!eLf3UKhkIRM?K1^ra%0KTrMegz_nX&1ZaLCz>SCzx zz`hi!E2li>?&XEvBU>v#wz;WjfK<=1PaROF%$kT!QuYHQDQn^!$m{$i48z&8`~y%b zeHaE<&mT(d6n1(jxB_tbG^hco-^uDw2!V&d^+8>;x5k}RK#u!2>jVG#&E^b1!Ap|| z{`kECI0z^~lLwx6`%4F`b&;3u=p;bE``7{05dsakHh{s3fUqBM6fpf8fKS?}1$@sN zzw0z%NofF{2^G0Ova?eBW=oyfpypfC>i#56GBjy@W|1wK~WU^3Z3L=zVP71|uL83FlpI$aVFBakNgAmcSKnS25S=44=8 z8&o#J1mIf-I1ghouvD9sE$|s5B}iDN%|fyvKrikR>cT7gwh0=0cuWFzb)L{jX`9f1 i*)e8nkIrBA&(ZttsNilo?0000 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*IGf6~2R5*>*k}*!hFcgM;f>?zcaDg77OH&CJmN+9U;MLdY#%zXm zVjxSe!xA-17Y55gO{5|vKToz3r(&;EZ~qrR>%I4du`4?XP)#!c)=zVG6qd)#MV5+Z z9&6gwQsj!+SkbOtrL+<7R)Ro3-a)HsNXxnMk#+O>W`+^8=<3<+d{31D$nFj3_6*Vk zF4fn1U0UP>;6RG9#8!w@@tv!A`2p@4k>&Q+fhLDuEE;Mb?>j%rW1;nNN#khW+Tp4A zxZk9rVkT_o@LharVU_+1sDU4)$YBupj@J zV4qKJc>5K1&u|;;(+3aKV4rRgCb!-`y(CfCXul!*Cl8|i)7JGh+DGErkM`{_%3yzJ fEZQHob9wuJN}A!i+`GSH00000NkvXXu0mjf4%^PG literal 0 HcmV?d00001 diff --git a/graphics/pokemon/victreebel/normal_gba.pal b/graphics/pokemon/victreebel/normal_gba.pal new file mode 100644 index 0000000000..635eae0aba --- /dev/null +++ b/graphics/pokemon/victreebel/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +180 131 41 +213 213 213 +255 164 115 +213 74 32 +255 230 156 +255 213 106 +230 172 90 +189 255 115 +156 213 74 +115 172 49 +82 98 41 +180 123 49 +106 65 0 +16 16 16 diff --git a/graphics/pokemon/victreebel/shiny_gba.pal b/graphics/pokemon/victreebel/shiny_gba.pal new file mode 100644 index 0000000000..2542072f36 --- /dev/null +++ b/graphics/pokemon/victreebel/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +131 148 8 +213 213 213 +90 156 222 +49 115 180 +255 255 156 +230 255 106 +189 213 65 +238 213 115 +197 172 74 +156 131 32 +106 82 16 +180 123 49 +106 65 0 +16 16 16 diff --git a/graphics/pokemon/vigoroth/anim_front_gba.png b/graphics/pokemon/vigoroth/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf7519a07366e2a0076893493dab05bea9c218b GIT binary patch literal 1522 zcmV_KWi)ukZK|zCqgU!v&|NsAsL0Z*0G5=y>=H}+CgJN1*QUCw|-$tW+00001 zbW%=J06^y0W&i*Ma7jc#R9J zf(V*cW&H&qNT5|6He8hC_?i1=(HKNo1`rs+-p)S076Xjg*(|Rd&i>6yft!c3VHFv$ z=B`~^1gyD-&aJcgz!leh=d=ft?RmgwuIs*{UVXrS<+8xd5MYDLX^yhM(cN{A{lS0L z0Z6UnntSBv`x_wuDX>v$%iM9C*DbcmpXW@*`Y9myjpOKyt+UY{F>=3K__@e9n6Lw)<{n)x!v~5gK(>rD}=# zT}q{O*;x7OTeWoCdZ^Dy!T(~tR4T3FTFwD}|Eg3{c|Uz3$sx!5M{3khS7zHk24EBU znm^+G{tVcP=L@@}KlFVczNYW1Q4)$T0BmUbVT*Q)(l{mpV6uKhT;=^{a^C>}d+idy zBs5skZ81W{XhncJ)-+7FECOAfH9~-1<__n2M7 z{)a>W;9#r3O#6M@`Sw)kCpoA$yPVtVnQbquj6EtG`5|DkS?gOm_+u;DTW}49PVQq360#B!UEgb@1yMKZJnNa=ozM0suM3Jl9`mt2_(bSMXIUYiSGNtCZ2rhvlbKaAJR^@M<=fjj_f zuDfmlrICaod7y9V7HzjK)uO;NQh3}Zbt%go&X9lnC~KR^lBy`VhXTd z25l6OJDVE`AlHcjGH8Q1O^du zghf9V1O#t`6j0;>;zR-hz-~PWd%AUOt{oR;IFp>P3#SwIRR@UiZ`rN5QvF$xGo@Bk2Mt+=ADprLR{3fHnM z99_kPp*%srDwMZ`5dQ%1btE8ofAtDP1d6Jvu0{gFowTbo#Df1A3kXVW4}e_(D8>SU z04r;a)Ugx`2o6!#%#`@%VgadQ3Zj5OE5riA0Z2D>hAT4x(EzA|fIKAW7WqXr1okrL zb1~epn(nclxkt^+!8bv`J7!?{m7X=tO5qfN-Ly7h)Gxz(mnHvK8w;H+XdW!^f) zZ(RdP=rUWE0Y$hscWRmrftpe+Et+&P*2eI~MtasCa2cp^u`}itAn^x&Gt-Nczj06K zGJh!Q`UTzNKvU`u(;sRdbSuD@%Tj+h2`W!d&q%<(qRbxxGCjq2LIsfegRr<#e~`8R Y0EVoHOJjy`oB#j-07*qoM6N<$f(S*p-2eap literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vigoroth/back_gba.png b/graphics/pokemon/vigoroth/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7d806e703c045d373dafc55d2813a4431986f720 GIT binary patch literal 589 zcmV-T0_KWi)ukZK|zCqgU!v&|NsAsL0Z*0G5=y>=H}+CgJN1*QUCw|-$tW+00001 zbW%=J06^y0W&i*I%Sl8*R7i>Kk}*%hKp2K`fW%1$CKrDLITDSFF*Gr8VKAkJ#YHHC zOC#+yrU`=)Zy-@e!!O`E7)I&f1a-I{qan`vU0d2~Im+PR!mZ!a_kF&*77Cm5zi0bp z4X{O@*ARQ7-TaEN`}Ua&OsF@`1w86`xg|sDdhhE1FVA8K5;+m2w(3!LGFcU&b_i)T zsq4x#;o}D3r{AQLR|(J=n8BQ|DRrd)>x6TRn{*@ru4jDQR&|U`N+p(B(9f8uVWlYp zR1Vxj0q&wB8E_E*J^(idhQy&rVxUG0$rhz>M^MCwoUdvi11$jN%RtEv0UQD+PjUr* zOWfh^>`mT4xFc+VZnHoX5CUCPHM4u_;e6m@1MXTmHM0&;12`J>p9aR+Efx*nSgsd# zzAw`os;ZVKl;LO69>sYJ;ybYdE<<`z1X}!&Nup5Y^@2k1$abP&ptN66ob!e(5S2%O zrRoMc)-nNoJ0^T=eWA*OkO2$Kgb6cRDA9PmG00000NkvXXu0mjfL4o;P literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vigoroth/icon_gba.png b/graphics/pokemon/vigoroth/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f8808cde3792b99e50e69a0538d5ce16de8fac39 GIT binary patch literal 358 zcmV-s0h#`ZP)DV$JdFL=673<3&Hg>y>)j`!s_GLh;}mdWZA(I*H7x9cbD`RT zxJ)}hLmGwx==2u&kfH>VJf3pvOX%sG*BsZfK!Vo9NdbwRD>AzWQcD7dgSLhQ?IF+P zHZIGgR5U19mC<0Va+>_Z8*aEH!91Tm`;+yhAR*$0S&#@cOoGOG7o3Y>6%>7}f?`+% zQ82S05HO1%3T76Rb_YSaGcmX~FzN`#TdNK}y#LV01NH2XVZ?ozG5`Po07*qoM6N<$ Eg0MrID*ylh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vigoroth/normal_gba.pal b/graphics/pokemon/vigoroth/normal_gba.pal new file mode 100644 index 0000000000..824efe7113 --- /dev/null +++ b/graphics/pokemon/vigoroth/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 123 164 +82 65 32 +115 49 49 +115 82 41 +139 106 65 +65 65 65 +131 131 131 +205 205 205 +255 255 255 +139 65 90 +213 57 49 +255 98 98 +230 230 230 +172 131 98 +90 90 82 +0 0 0 diff --git a/graphics/pokemon/vigoroth/shiny_gba.pal b/graphics/pokemon/vigoroth/shiny_gba.pal new file mode 100644 index 0000000000..adc647979c --- /dev/null +++ b/graphics/pokemon/vigoroth/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 123 164 +82 65 32 +115 49 49 +115 82 41 +139 106 65 +65 65 65 +205 148 82 +246 213 115 +255 255 255 +172 74 0 +230 82 24 +255 164 98 +255 238 156 +172 131 98 +90 90 82 +0 0 0 diff --git a/graphics/pokemon/vileplume/anim_front_gba.png b/graphics/pokemon/vileplume/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e4fffcf76be33cd2ffe086741058ac47e4112438 GIT binary patch literal 1085 zcmV-D1j74?P)-roPTy_B@YbCje~bAup3QVKorM4W(ocu$RE&w?vYydOpcU4AP02G=I2ag zDcq3CQ&X8gpjGo1R5DVx7Aa@w)Cs5A111VmiA0e5?rg`u?o781&6AK2@8fsx-W~pa zHSNEPoiGe(MV`Jj2myMh%p1lbaasThV&~X!2vz{-+F|%m26}{Ck`|nPfCtks47*r| zQrg43g?;w0mT}n55jzyCx9wH;zFx0~@5j{%#yOMsyAqoI0N}cZWh3%y=4N@h$)Y>9Dmh1T#uM}Mu_pXEBc358Kapt=25NmioW3B|y z*RK18BEWnkWQ`)=wgs@jJ|(kQizUV(RtP0MViO23b~}8;UC8#S?K0jY_V3F_sp(VR zz|6mvPZDE;-LtvxZ&YtOea^>>Eh_Rz@Y7PY7!jD9Zv!?}z#KQAR{(*>cc|_$aJ{PX zTJ37698m<|IaU?WYE>f=vDlJ-j_1e*w>pCa%J_#S#%ra2$ccN&KNQ5h>>mo^F7Xd}anJb&VGj!8p7jrrJunO6UbF{hLELld zFEq8E7xz|9{iy&7;+|7~RBDO1XVpIp3*uf@|AM$%_$l0ooVZKGf4jJAskjF>8j}Et zxCcS7&^<|!+4m=HU#y2RVDzN^3Si>5G5PZy`Uf_a0*ov7NB|Q_llp{3;rowlAp^!P z8_{!a52msea1GRMA^?T1r1n6eD;#hIpb(~YY*Cop1))8N3n(k-S5W~apiPrOs9r;x zDDTM(PPE2M-roPTy_B@YbCje~bAup3QVKl(BN!KoExMOcmZiq-Vx*;m$KLMLH@m!vk=N+_;Js zySYqekkwHc&+!0e!n5E3i8s5tJAnb`0W#T!;r>tm?%wTPrSd-x#!*c1 z7d;LIMLd5`zY#hv-_t!WQ1=A*hb>6=ekf4@)dB87)h+>Tl9li=qCC4qWOQ*aWOSes zHfZY_Wu|}Uy9P?H`>Y3QA5aF6T~7mF-e%~ip%B!C|6+6P0z>|8#0H+HbA8*+Ao#Nj zHTE;FqYN;A0~AXDWYD?Q0PF#zgEaefp|*iuJP;%zBIKd2K&f#F9K`~9Iq8n$U>@pb z)d(z5WqVkYeuhgY2Mq*ckj9|TU4xXz4N9?WKvkbNHAax%AMrD8IN=Ugq}4h z$AQM{Py+fY z(Pf0ey3i3TwWn!ffLd5o7>pR05g{>s#;1oQF*VeHAD?1(dYH}-U(@I0cS2!1)t8N% zk6)jYG))s7GrJKrdmYIjDPxA^PFW(}=#RK1|NHR=-&8>Zl2;@@00000NkvXXu0mjf D;R|~S literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vileplume/icon_gba.png b/graphics/pokemon/vileplume/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7009048c53e7eb931910586ab803d17086c5eac5 GIT binary patch literal 410 zcmV;L0cHM)P)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I7)eAyR5*>@(y?m8Fc1b{J%RL6eubc|Th4=vHO1P}Raw#(DD*9y zp+mRgLC{z5Qkz1MGr5LBuC|b3$%I0;lH2a*&YbO!kpEqXc#7JrgbwFEJKzf8#V70_ zA3n@o58$?XFkP}r&L$HsFlm7arm}NE2a*?K&*AJQ)?D&-!wc{$>oVQSO_}+C0f2z1 z{B78SXaMs0GKRzA_CYBX_EcAcdJY2icCVEVMwr$*-Z_o|20i(Fs&;kw&}wf?I6zE& z+>^LyO>VXpADvk+bHctYm{*^$F9$|kz~mN8a{-gL7R+*L`N`>;SQa^M1qW2fccY;9|E4ovjrun6#xJL07*qoM6N<$ Eg6wd(xc~qF literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vileplume/normal_gba.pal b/graphics/pokemon/vileplume/normal_gba.pal new file mode 100644 index 0000000000..96d98b0d94 --- /dev/null +++ b/graphics/pokemon/vileplume/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +255 230 156 +230 172 90 +189 131 49 +255 172 131 +255 123 82 +222 98 49 +164 49 32 +255 222 222 +255 180 189 +148 180 197 +115 148 164 +82 115 131 +32 65 82 +16 16 16 diff --git a/graphics/pokemon/vileplume/shiny_gba.pal b/graphics/pokemon/vileplume/shiny_gba.pal new file mode 100644 index 0000000000..b0bd4468f9 --- /dev/null +++ b/graphics/pokemon/vileplume/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +255 230 156 +230 172 90 +189 131 49 +255 230 148 +255 189 106 +230 148 65 +172 90 24 +255 222 222 +255 180 189 +156 197 148 +115 156 106 +74 115 65 +32 74 24 +16 16 16 diff --git a/graphics/pokemon/volbeat/anim_front_gba.png b/graphics/pokemon/volbeat/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..945ed140054c309fee6c15197da18380cb120827 GIT binary patch literal 1215 zcmV;w1VH4CJTK@MC@*BKAqO!{Wo7!Q)p*e$s1 zMN9YtV9FnWOe472LoFj^Z(OE$FtL}uCy^KuXh*Ym_RXG5Xs}Z+B)f@7Qa!B+8GmnD zWT)?qO*SzeZ7zfa%qy*JJLK9Y2k|1M+3%s&Ge_5FSE7hN~}priM81a<9u6=Rou zHDTZk-(*a$X&<@HE)XgAK<5G0IOUKQk)#$TI^lpUnvq0L;ii(*R6N z7q(CLI`p{q_|hK+;3DKV)Z2?*$D_w{kKgpWn^9ma==CO*x6SSD1@(yRw>O7YkUmJK zCo_t+?fES2ifNkBr!n?cZxSge?_aR`8q|xCy9Od7>jB z;(*2q|4W( zqyyJvuwMgQ^-p{qHmRe0Veu=-{dC$LS9)9{!WY@Tt}=2ECaz1>jB%_KrlcLX8GyQ3}he}Fqs=Xzzjrc5=_Rc zyH*wR#|RCi0fKSV*8>h<29hGG&?R*Q7{dhjq(9{2-sK`@yg$fO=8~#ioO`F2zAy3zd8)FcXntQH zME(FhmJ~F9B@hCCkf+KB-DeAIiv7VbZo~Y41cDRe4+dgD>A4-}4+u>&peyu;Bu->i zG`))MmV6Kh-Y*&soBn9ow6^@8ZJVnngPjZm?pU@1KS_QnHU}WxnqZhPVS;W0XI@Hb&?{LLcQ1 d@%r+=&tITEh@DYt8_oa#002ovPDHLkV1i8rH!=VK literal 0 HcmV?d00001 diff --git a/graphics/pokemon/volbeat/back_gba.png b/graphics/pokemon/volbeat/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..217b966ed35556be520cc9167887a71d34e683f0 GIT binary patch literal 702 zcmV;v0zv(WP)K)Uj^bKo|#b7mz?@GB9+rIA^H35ZOpg+r`1Bs8XbE z^aW7Qd4SYrj}$zV?iYqe-M~X5H4FBdN9al)A(FFox_)7jPH_z;h0WGyeq-6BTygIotx~Vq>+#RglYD5pWbn~IGL5rm0INtnslrPu=t_z@WNIT%cOgC0Gt|8q``n^K{X)N~L zG%kQXV=Pu*%)H&qty~U3?UsNVOMrUfc?ij#uX_ap0T_TDMylF*>3RO_QZdtlI0YE1 zd~}~&V2q9v@J!PZ(8IVd#A^o|2yM3*#If7~@&t6Jrnv)}CMwjPZ4U8BfR1g#Slbn1 zUh#za#i3k6<@xq!QDe|>Bw~J5g6=-x*Oi8uOg{zLm(hTwbPi5sg>B;O+q4mq!jJ&x z@|M8?+AYz`=E@a>NyX_Q(3Vc|2Q%Xv04l(V=S~I%Frsh^3E&Im+Jii>myqA^9pGDs&#bzc1+B|9 k6-&Yjo^4kDoBxyZ7c!b9Vc^`FDF6Tf07*qoM6N<$f*-(4xBvhE literal 0 HcmV?d00001 diff --git a/graphics/pokemon/volbeat/icon_gba.png b/graphics/pokemon/volbeat/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..849715d33cd67edea320732e06a872afda9bc483 GIT binary patch literal 335 zcmV-V0kHmwP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H%}GQ-R5*=eU>H*1{RdP&U#LHje1IhKCFKAAfAL5HU%!5@bBRY$ z;a(RXhhz}{_waI8zj`E7YhupCJugEj`F`fi(HG_A2!YQ&XU=rAr{^PV`E#bDqy0HT zfWPmBbH~3jgaE^jj<5aYY5(Ak<&*!>@&8%gXFIrxckllT*8MlqL+E)L^6%LvB_#jx zwZ{K@_YOG(JUZHt`3!vTT;AoO2r#^R_kaNvp!0_)7zW7!VGA@lAY2bg4#=?&P7X-P h1Ckt&{Y&rU008(mnQgFjkYNA-002ovPDHLkV1m?)n(P1o literal 0 HcmV?d00001 diff --git a/graphics/pokemon/volbeat/normal_gba.pal b/graphics/pokemon/volbeat/normal_gba.pal new file mode 100644 index 0000000000..8d2cedfa8d --- /dev/null +++ b/graphics/pokemon/volbeat/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +222 222 222 +139 139 148 +74 74 82 +0 0 0 +246 131 115 +230 82 98 +205 57 82 +139 49 74 +255 230 82 +222 189 82 +98 74 49 +164 180 197 +123 139 164 +74 82 106 +255 255 255 diff --git a/graphics/pokemon/volbeat/shiny_gba.pal b/graphics/pokemon/volbeat/shiny_gba.pal new file mode 100644 index 0000000000..106d373cf7 --- /dev/null +++ b/graphics/pokemon/volbeat/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 148 +222 222 222 +139 139 148 +74 74 82 +0 0 0 +123 197 255 +90 172 230 +49 131 197 +74 74 131 +255 230 82 +222 189 82 +98 74 49 +205 139 222 +164 82 189 +65 32 82 +255 255 255 diff --git a/graphics/pokemon/voltorb/anim_front_gba.png b/graphics/pokemon/voltorb/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ef550558b8d7f7f7b0b48282015ba8e60bf8d7b8 GIT binary patch literal 531 zcmV+u0_^>XP)O*@}vFIJ=(A)K6kQ$sYXKEI4LWUoEGjv&c%mN?cL zATNsijR77sCFE6wcgzEI3nWERRQ8A+KoMB2m?w5XQXt;401$u-Fod`b=m50c7^bij zoj}_we+Hm|5@GZra(tnGl`G?`xb0RtSR{s&}>jYq(v4H%TmEu`y>M*-@> z1_Vh3fa9R3)x_cpafR)V#JpDO+z!a+_A3~rtQY8pcVdiDG7J^-kGb?nBdO$>-4_F& zfU#l&gm@=kDmCYPA!eaelTY5KE3-M9@8sm<^bhnm_CwOMA8vFU#ck=Z`yrylV z0X@@XPm6WH?FaO?Wm~dw|&wdqA=K!T$!N?ZV*^v>!sZADoKp(7002ovPDHLkV1nUD@=O2# literal 0 HcmV?d00001 diff --git a/graphics/pokemon/voltorb/back_gba.png b/graphics/pokemon/voltorb/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c379b4a8bb57047d3387b6214ea317d8ed25174b GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*Jsb3{r~^}-qovH)~tyN z3i{9R9|f(M^FK)8nIpqhLxyGn5csur;%uN^#*!evUbVRN_!r*@aew^e%>_N0GeE9Fiq*Itsh^;~P&nxw8H%mrn$xc+;V2kie^ z_w$`i%LMO#*-A^V+@5K7PNG91OzDKg>cOG@M|PHz}X5sPn-q|J^jR8_@}_FFoclPr8&Q%(9uU=OAM*s{>=r ztp^v`9yGE)WSD84prWI&eY=@NfO6CZhMnH(W)hE1KV-SG%7hCA7U z{U6WYS{gZR>N(B|Ra2#_nq8Yt#2Wly-LPQBjs%Hl-g}%olsyBsutvVjy&(Ega7l&J zgY!!9oX;wp7BozF9dTS_%0ecmeYd%ED!9%C&S+ayUUzc-d47HtPrXxJtB(UioWax8 K&t;ucLK6Vo>&LnP literal 0 HcmV?d00001 diff --git a/graphics/pokemon/voltorb/icon_gba.png b/graphics/pokemon/voltorb/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..53d318fdbb012e582a420dd30020e28b3a8beca2 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QU(D&A+AYtnwy)8_wL>M|NsBJ zOB}y_)4ZDG_-%@2clG}yue0xp=ltKYWXaM0S!?DbB}F+pI!3OXkOI`pSQ6wH%;50s zMjDV);OXKRV$qwNAi?#Wml{00001 zbW%=J06^y0W&i*LM@d9MR9J=WmOqH&Mijx@H>{J8IOZu%{6RsdC3vfh%@&ZnlfZ4q-{9*k&XDkyv~3W-R+wvgIm} z6gw=-F7uoBzV}Ab_cZNs{r?sfhxf~v=m*a)up=gi&M&MEzAV}vP0ChG7T78ZasNJX zx=!rGMJiTonD{hyX%T>41jCn<`a=A^A1Jkh1#ze!viGu*vcJ=k`Tar=|DM6pHPpc* z$^p;s6U$vPCPZ7;78qYfIW;I0FPEH&cDt=dSC+fLZnol5*mHTmH*dGkkxQI!FeYvW zc=CoV`yk+5TaRPnVQi7?%{=*(vFo?2-;T7n>Qo_#5E%g3jJ@)Lq0kYj(wKk3Y*wjU{z72@;FJGWQZ70D>{38Qj(t;N+@6e}5%`007M}^n~W0OLV3HE&A zE@VbOo(-WDqhi2pez62#ydP*a01$OP80~+@(RYn$qZuK?80-6i=~?Tvsn5*scjTwQ z>|#1=YW0iu{s0;@XEuwV{DJ^$r0DSDdR&j|Us&|eprC0Y!IrBZ*muE?MDZ&Ou7-)g zR?$R*1WApvKt}AQ&YS&|m;K2Wu!#qDB1Gmx+u0ZtBC+j&X98z;;Ytt%p z(YuTtAxETNPo$mHJji%uZF^a|=yizbv!0lrE8hfLOu+M^t?jLP3qKu!B)~_th{AC& z@KnUNEKX-A$k6WxgIh|waHm_~HS2MyKm`cE7l%-kQzcvHef5U1*J1GP0s`lJzZ)5--N-05T^lf+s1ic? zEBCa8>$yP%;LAOLoPhX^q4oz77-sk71jNPHm35Q$0pN6ET&a96_eZPU4Cy?OQ`6G=jMmjX~SGMZN|^E zJ;1cpSO?H%D$*)Hfy`#+S~fCGd4F(_KDVQ}RSu*d>cgkFYty8I`G@lm%)9DXV nY~hfA#Wml{00001 zbW%=J06^y0W&i*J5=lfsR7i>KlreA9KorMs@P<^YpCBKi-N|qR7C4>4S_bf%4Zeb- z4lEw>%5X~-yc7urB&aHsF!4+mMqj$HQM;9}TDuaMcbC{H_$~u;|JnTi`Tt(tJs)Ft z`d_&pM4;R-0n5ZQrAc@RPk6p`m|OhEbmAQa&B*$2cgrV3&85?&EdXBGe| z`hmBXNyKj*JO6P40wRb+CR4;t4_k;>MF89zXrONbJm3IPE~!Fd1m*w_VHsfP@tg<> zfPo4y^vFKaW9dPp1G+sjMsLcqG5Ff=w!oN^DWH0UO7pI-Bhrd%|Ldg*pa?wGK3?P| zfE5|8^sZ+F*zX1?dWI%R_Znb6Fm}ltT+6sH4kmhxO2!(_ISp$`m?lN?6`&?*ItwK= zZcRvY0CVL^h1qA0cJm8v@tK>ZQZBw*@=3=@lE{VK*GrQwj7O=ZN1Y^=zt{kno^7l^ z5kGBBG-vhJ0yxJjVAk!jpo^#V@wDU9_aeBz-i3b>_#S;vAZ{(o{*&8&4P_V-@k_SA z=l!d-?}j2IKycnJ6Ap*Nx&_KH1&pH-pkA)Zi61;0J|12E1;7JUWm#mqcpe17RkINe zRiI0Qs*K@C0iSxTcoB?7Pa6QD*8oQfIGieAdsmI+`npYkX$-LklTh5meu}f5LRIJO umF*l(<2a_vZ*mh8Fx$CbTTbFmcKrd8%d=1o81QHS0000DV$)C#tc5ub;C7N`WS*dFmrNdr zNag?@LYOml5f+*|#>_#eCf~w1;#YA7kkVFbT1ZL%2%&As5y?0&xJ5wl!i-=tr*2`u zcFkKDTt}G$hA_I>Z9Wu+R$*+S3FBV*5@r^>73TV?A5WePk5c5wxv2mE002ovPDHLk FV1gG%gX;hQ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/vulpix/normal_gba.pal b/graphics/pokemon/vulpix/normal_gba.pal new file mode 100644 index 0000000000..3fb9878d3c --- /dev/null +++ b/graphics/pokemon/vulpix/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +255 230 180 +255 222 148 +16 16 16 +238 156 74 +205 123 41 +172 90 8 +255 131 74 +222 106 41 +189 74 0 +148 49 0 +246 189 123 +222 156 90 +197 123 57 +131 57 0 diff --git a/graphics/pokemon/vulpix/shiny_gba.pal b/graphics/pokemon/vulpix/shiny_gba.pal new file mode 100644 index 0000000000..7c52191ab9 --- /dev/null +++ b/graphics/pokemon/vulpix/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 180 +255 255 255 +255 230 180 +255 222 148 +16 16 16 +197 180 41 +156 139 0 +115 98 0 +255 222 41 +222 180 0 +180 139 0 +123 82 0 +255 255 98 +238 246 0 +205 197 0 +90 74 0 diff --git a/graphics/pokemon/wailmer/anim_front_gba.png b/graphics/pokemon/wailmer/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f1032d0d1534dfe203487ced3990cd5131653e3e GIT binary patch literal 906 zcmV;519kj~P)YGO)*i=4E*#sB~R-et4j00001 zbW%=J06^y0W&i*K2uVaiR9J=WmcNS{K^TT-Qwg!S{ZUAc6gzXpweDC*I^z__^%@S+ zI?KW}64=SX6(+@H+bg07fizcH1xaU>B6@;wTpvsw2>37Lo7pv)9oMr?;#c}U`|gY= z--FP8{?&Orf%&vOpAg0<^^?8{jP%A8*9g zA*nT3Isjm^!t%zn##mzw1XVL{5K6NGI0GRhU*Sz$N@WF8w}6HqcM9t;kbvr-G{CaK z&lNO%NC{C8QP zM?qR}{5yvepXe7g8wd?(Q>!TB{1N1ReWn33M@#+m3#oY;Ft~OMph{Uodqd~$-cD27 zcCZ5npdQoCQ0_#lr7h>_a(VAK@H}ngftRb*YANUYk3rWa^ay?%b?ut{_T4I*fe_sz z<}v2#z_fFg5pw|mVb2-O{kEt4{n-NIpK}g?P>0ZSROWH3JzOlls$2mTJx8UG^B1jF ziw_jgtt95(>mBD2hXEjtVi+363Tclg6-hd(@fvcn(1FRC}& z`~iVKuv1x3><`EqXUo6XACP4~><^Z=%OA!M`vX03X+0ooH&A+@1D5~R2`Dy3JA{R8 zmzc{v=MM?8HXHI6wTS5#2C#69nBe@@n_cVMU+Mv&`d%#$KH9dS2Z3Hu?kv{JU2gx> zAH2E_@VjieFTZ_plpfG3>uEqcny0&aF%Vt3ctJ3jW;xS##23RMEN8j3q#l4^cskJO z^K-d2XKFKp9)Mspv{TBZxn9jm4?GZzntqKOAY3?MUNFiL*MV06h2zm%Y*(v<(QuSQM=Hs}xZFAjIuPF8v`|`$JKI?hj&%AN=u$ g!dTAUAO8FK1@oJYwhzgz6aWAK07*qoM6N<$f{ZGk7ytkO literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wailmer/back_gba.png b/graphics/pokemon/wailmer/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad9f21ea7be2cdfd455dde64aecb79ddbca1678 GIT binary patch literal 347 zcmV-h0i^zkP)YGO)*i=4E*#sB~R-et4j00001 zbW%=J06^y0W&i*H*-1n}R7i>Kkv$HBFbqav?!wPfi3xkD#6;WyiIE(PE5U^1%he=l zX`8-UT+8E(_ zt&IUNB$!BFfC9kD-w!>2KnPE9?r;0$3&0czt{u$?$?6LXVL#FVFJJH<0AH~Oy>fti zl)6g@;IKUni5|AI@8+gO!dMS1OOyotu9W%_3Vfhd(4$2DTv!WG6=hxTg9!Y>W#HqS t0Id-u0GR+y%D^W8#t;=4ASdT;`2f>NXhGZE-6Q}2002ovPDHLkV1hMJlPUlJ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wailmer/icon_gba.png b/graphics/pokemon/wailmer/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..16ba6d4b98a5686654e47165ae74ea7a727b1d74 GIT binary patch literal 359 zcmV-t0hs=YP)DV$HFKmSL*l0%-5G05vz>o(jwYwo`(`GT1XZK@GAgf(c2251dJn0 zx=MuKhrv4}ga?cnWda)x31GJqxSx#wl*dw17YAdCb$_;niPa>Fq-_8I002ovPDHLk FV1mb6nLhvk literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wailmer/normal_gba.pal b/graphics/pokemon/wailmer/normal_gba.pal new file mode 100644 index 0000000000..4e56fb42a0 --- /dev/null +++ b/graphics/pokemon/wailmer/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +131 172 90 +32 49 74 +49 106 156 +74 131 180 +98 156 205 +255 238 205 +238 213 164 +205 180 131 +0 0 0 +156 139 98 +148 197 238 +57 82 123 +106 98 74 +131 139 156 +180 189 197 +255 255 255 diff --git a/graphics/pokemon/wailmer/shiny_gba.pal b/graphics/pokemon/wailmer/shiny_gba.pal new file mode 100644 index 0000000000..296519dbd4 --- /dev/null +++ b/graphics/pokemon/wailmer/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +131 172 90 +82 41 123 +148 106 189 +180 139 222 +213 172 255 +255 238 205 +238 213 164 +205 180 131 +0 0 0 +156 139 98 +246 205 255 +115 74 156 +106 98 74 +131 139 156 +180 189 197 +255 255 255 diff --git a/graphics/pokemon/wailord/anim_front_gba.png b/graphics/pokemon/wailord/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3a9ae255cef7f48e5cab7ef4371e7dd36cd67802 GIT binary patch literal 1274 zcmVJ4r!6l)g-bgBoH}cY3fCiF0yHZUc z0W#aaprzcU$Y6vj5O_*tYLPNDv9;tc1Vy}gi31JouLuwXj)DU0`MMNI*=on4&G9F2 zp8KA2X&UcatNn+no~H5Pcy?ny9qsS$50d02B>fTkF#v$v)IZ>Ul3b(lRSfMoF*RKQ zUdDxXk_@XvJvQoG@h=r%6vx9TicX~eIF2h4kK?1hQmRSFlM?`bs!SO6l(G;3;>l?e zS0w6#9<=d;2%1rnxb=f_EM>!oubQV!4Bi)a>?z*>YEw2nE&_e!+XOhU$C(iCZ)aJ? zz*C#g+sac$Vwf%9@;@7Z+qQ!@A&Kk?o?V*CU7mUjz$U&(Kz9NY1bFUX8&3PQ1WKe- z<`4he$2OeyXbIIk8>Z>!*=#l~0C3hv8JwXuSs;I!ZxPS{STaMM5im(p1Hk;i^%RLf zS(^*&e}Y|TjSWxvEBH$lSL0^(#i$v)AW(XjEn3+0f61+^vjm==M+#WC7)9LIHG zjd6aDzE5ow0Z3aG{IUhapM`5s3ndt0;=^kJHav^YV^_luCU!IZPykv&B#eyP(puj& zGcIw4NZ@%bKsb~CvPK{hdP%fAPwNM%T;!c&b0=65L7??+wva~=C@l-ZIgLce1Bq>T zDL#|L+_&VO(AT(28x>%Q*(+XSj>>#q2T-9#1^wOf-M+*-Xaca;0Zx~I#`m77$Kxqr83%E(4!l+iQ zi{FaKot1vA_VpWiocP4_a>Nud(hB^2bVkcy^HV6<2g^ zet0&B&}PW6qN4eWH`fo2xJ}6YB+n0-cym2|Q~;XyMdEfEi?!YwC^R$lL^Qo74mkw# zkB`NhM+Tq}qSPt5|5cnV#9K#?sLlQkz&8L)t`3*xjS0lGeRlWZ2>Y`s8wvn0-4Pk% z-4kfeSmQ)dy5P3&VStkUG42^N;`C+-J4$-?Gn5Xs5k=4=Pp@HU&Cc87qBZy_v z4R}A=Kj()q|3{wllQ8D(c_F!Uba9>&=6vqSY>aMhT$i$3F&+RG=H3eF00^;vBM|ED zPOU_EyhCpA-R)8aX?v`&3;^3D@5KDzmGi^BTB%m^!;1M<^TVn;V}3AKS(6_m46Vrz kB(gR?fXJ8p@b9a?0NbuW_~#P7H2?qr07*qoM6N<$g1@s~5dZ)H literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wailord/back_gba.png b/graphics/pokemon/wailord/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..7698ba500d8398e226e8b04c848c9b5afb9a3d0e GIT binary patch literal 368 zcmV-$0gwKPP)Kkf9F3Fcd|nG0P19hba!ZF8hJC7;L+Q49C*1nMGic z3l0ovgPHj!=WI8Q zH@2k}O$ihEl8uP#sH9D-yUWiN^_oCU8R^jeLds{qdh8DPTkw0uMez zSPw&75Cx2o;0y9*?knrza++KiQImh^c446Ih3v4v1^k7ZqF8^u23sH{Zmiq`3xfWj zK3CSmMJfEO>^$)<;r&%(!`>HcLI7845xi2Wbp=tNmp}*D0&GYm{*E_7UFymm5Qk6z O0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*I21!IgR5*>*lCe(1Fc60G1Vl1>CA$*~mdH}1sxO!2B2|iD@=bZQ zNK7m)(8XSQoP8#8V1bQV8FK%Bw(fp?O>>=x=vxir$|V@ysuD5a($SIwz=0x23;#gB z8_2elg=BXuJnP~+wmSe8=6v5B_x%p|4WsXq5M9qUH=t1usU?QvKG*oZ?O14EQGCSl z;?om%$O@MjWUTfP00001 zbW%=J06^y0W&i*M+et)0R9J=WmO*P9M-+fp2H#}xcmpM6y{cC2aSN-b^kf;5o#f_F z2#tJ6a}B*13Pn9s^c3t%C_VJxKhQ&<|G^tw*On|RloXAN2+c_up+G=~*xUDJXQkb> zGPg%zdavyx(kR>6q=m({moCl97PukIw(aE0v!JS^QTU9wL&L|5U6qAJATx` z0^t<^^U(wVtP}il5k~9Te1Y=sADJM+F@24ObTLh^PW1lgr{dS}8%cR7v4WkcVn=(? z{>{VR4!)I?mqUZeG*FOlqG|K+@bUDSlw--H%?L^rkXWE~^Kg#$nH>P*@w7Q$;yYC#Ea3oBvdk=YvB1vn1lYqsQiW`d z)r01s|LODR1elhsD#-LaSNB_C|F7qNAmD)&gsMQMLURz_cq{t5(`WcR!cc}May{Kc zqd5p__a$!}v;e%2B0GylD-7=7j%+j^ECYfzcPh|mo&ne+hCq zdIk{3xaR?GDL|T57+66D=yvHxp#ZR%Y9j;SHm>28^>6(EQ1fbAs?YTdP~a4ITTt_T zzpa``ciByV3(jk>1xyB3e&5ajAKKKXm;Z6xP(&Z|BLHTbpnx?o<7`j_Y)QcRdH{92 zC{DrC?}GwJpg6%iRtW*BU4wyzU|075Y7e}oLjG18S+{^s7OL)X(xgunYHFO2zE*Kn z+f`>!Pt78ZIFI*2{e|PUoo;FtalWkpaD-KL+!szaQ^KF+!EpxoK}Js_zI}U?MiXL5J}I?4`!W94@Yr>a&M?~O4j=IG9WBX+WDb{dP`s)* z7{#MvoR_krfI=?cnRMPUb>NO7B|%yLK+lRwpYz*N3K=Sk%KC>v8uSkLr`!8pqD2*t z*cCk}MU(poTr{!OL1&Wl51d&kqEpX$IUtRS?3{lX#R++s?<>v1xeW6IkcgT6+rBl9 zEy~XO$H_Q)Z=Tg*Ajh#qw;hA7Gx&?JAH_pMalZZLPbgY11XA3DN5Z$AngxiAY9v6A{ZHeSXm$#ZVtFsFz9qo1f#OZ z9|*_`hMV>WbeNex^pZ6YDSs#|@&{MAc)Dt!GAoes2NxYU5wUbC@drHr@1PIFgi4h+ zH&XtPod04DAkO9{qT~-t#P74U9yNub2=WXqAQ)OwvL#srfB00000NkvXXu0mjfV?F=x literal 0 HcmV?d00001 diff --git a/graphics/pokemon/walrein/back_gba.png b/graphics/pokemon/walrein/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c58df92b0bca81589f2983a3b5c396ec7fdf1fd0 GIT binary patch literal 727 zcmV;|0x127P)00001 zbW%=J06^y0W&i*JRY^oaR7i>Cl)Y}-FcgL9%ycVN84b0z*S3JftR7P90sJUk3VSHf zsdHb+Qim)Il}=s~6wJ(0$S#Pv{1HvbP9LDXfMJ>Emq*l7j^pZK#J?= zMV;14l|}JM6ZDME6jWCh>kJ{R_UCn_WJ&U~z$@hdnUDz8svQH32TIveb>h$)03gkG zgojA&^bP=R*0%NVkR|{Op@sksPB4eGt#8A8y$%gzWBn|EMc9Hh==7s-VKRY%YC_#Q zl(7RO+hZm}-E`Tx4lw)_%-p@}JRnsg#lClt!rC@oh6SKS-veW&vA}>!O*;VZSvPjz zu!Tw=b#1o>4kDG}Yj1$)vH89d0Ja;qovLoEbCOAUv+?iX9Khtw7Z04AAjs;LZY_YG zp5C4SvRu)_cITRiu(bDU0wTG;^#FwJF4*-k@-(?G54+Dkhmk`nGV&{$?!NZ`vkpEe zZU%q4bpXa{>!uu?b&Q69mfRN(0|q*z6SG zbRGb51aQ;E9YVi1e&m=L)4qcgKGhL`BT{MS*cw#xl;;6}COp>pdVp4QPCkGz?URfy zQwK0W<$^8}okLIn$atpoAiz_ys0hjL2Ea8qXPuoj$oc(p4CsBS0b+PjBnOKSm=xC_ z>8m7}hDiQ61TFy3ldiRyb|4>@1K_eKVmMuBAag)AH~|WlWBm_FV$ezcb2T(5iZv{Q zjjOy`jSLF2o_OH#*uumbtVvh_VD;kaY6$!pHUI|emwi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IS4l)cR5*>@k}+z-FcgM$0vVIVLrBjM-YVi76bkL?yO=C*Fv^*X zDR_9;SFjNV4?@Wj@DS=Mww%gYJGI*W59{ao>0|6~onXAIvQZHGgp-8ACz?u~K>YK8 zrs14G&6sOaeT}vS#vrdJqAHX&1Dx}`y5A6;=@b+~2HOcRbJg9e5Cx31ZKjfI*d<$g zCBD(z`bAZeS`eLTH@F3xJ%osExF92wM>eMpv=LExED=v`)K()N1tPvIpe;aPy6cHl1HXdNSN3&ilf6D*ojN>YDV_(__x>RB!P6tjTKNVcqqJyDY zUX{3mS%*V5NZS%$oDN*rb>4kB1hWpRN=yO*%F{UOz|Tqbt_p$}oesg_ph|~nFA&c&`gb2+CVb~rU%cChGgkRLjDJiR2VNs!bj>y(ZZJQWI0BFx{|K%BsVu$x@1ysNSkg?RmB3nARYvj~p0p?<>Fo_dE);Hh@$*h;);vK)&&} zPigHI16f5Rfz>JCTkO;68iPNdVg{IF_k-H9_SZD5t+|jq(l-XWsgsiZKmoMnfS$U$ zz}H3ZyB=v6q*PXbMOqUNU6vd%NI(0Ya0ze~=yA?KR0aX`emH4034WAb4HE!J&$b3J z^zLk!WnvQYg%U&v-W7Y!>mek!AKw=UG}SC}xdn0NI2b3<+ud-8_SGri%-M6EcLGR% zY=;3mX=MQ0&hxMc>3TZ=IN_}+U~$jcbQ&EFX=em9OLY|(NZ=JdGei1b0#-?FwifR> zPQ~eP(H{X#q5>MDd(IYSx$m+7frMCUmCQ$AZ_9BGT?R3hLM$am?Y&Qb+jJ0c5P$%> zC0og{Q7s1VHXZDQ1h82rC0k9Qx&-gG$H1$kE5uX;yqkER(YjTsR9qqMJt<8Und=AX z@k<1pP1kjI?^)J#pBML!a|<#A+TG@p((24xEH7Z8(t&H*p@NtLM1;pQj4ZN}{bJy9jwuavYieIkI6!+RXcX*u zfQkCyE1LFXaJ9t|?akoK!jJEyM8 z{%B)EXHv*XAr_;9-K0q847xrQr)w@dLcs-@gRWmIK6H6nVHDuw*h8X3T4YSh1G&-C zI~(#!UVi|S&&Hw{a`DpHh2-Py$MQmCMEa7N?(4rCXOkbk(0@9X4wiIXSC;F-_O@J` z?u$oHM?hrow}nX;3yuVEtF3n>U__?AQc{7te8iddpM*DGzXKy1SlNt@ioA zXc+2#9?1jDq2u}ODrF6$N$klawUIo)2-wUv?xr3o+hsNZz*rtgAoQ`HJ!13LgrH;o zSRNn%)Rz(j^&VV?Kml7{~J9*#HiRj9^WxxeIx~4{X~)5B9W!u{^+szB{z#S)F!(d7yoy4K(y?yaFc1b{JwUABXdsiIK-63XsdnWlB+nkqJb~?^ zOCC%D8lj_T1>UVBvXCyd8Rr24_b5j!?a;{5Zs90?I{rtVWqq#yx9rCcK<$16z*wSG zUv0QG?4N+s3EOza2|)L`b{#Y5j;>u}h+LJZp*Dq>s}eTkrZe8ay$}MNBPk)U))X<8IVLEeO`3>PmQa5kn4t|;XH z*hTI?n*a^COu$PD!GkFSUGd#o(#QlX(Sash-IhiB0gk}bhGlCN z4nR*lO0d|0#XHcOLx94@Sy=JeY*szI>}Qa};^H*R7Z>vX*Zq5tqk!X71DgziV2_7Q z%v<1|v3SfFkablZTqFYOL4Onv;siw?p4-g&34~IBCj=wLhO$JdpJ5{qOAn&Kc#IXW zM77|$K;Y5fb;xZ-9ukAmmb}L zT^lXfYBx;?#!#StBf;I320V|_NVYg>!ME)S3v9HvBqaQ*gU#tyjfA`g5{NMT3;gf6 qd8(SgIiVtq8X4i5De$@e?fL^Hnp@DV)5g940000DV$FbqX`0`nF@cSlCIEc9wE;;b9Qw+KA7v!@I} z?`0Io&_xKK7-*I-E=)Ozmm&o^6xGHD{x1#>;7>i28HoAee!+MExnZ~z!F+XvSUQS) z0L=Xej?C5!AbJJ;7w`i(+A;CQp5*ftjU79XITAf>gh@f^cSO%k@3_-a+69VDT{;Cg zB!r8at8|zZYg|!RT{>0TE!(1=W`I*G=f(OuXVpjh@_w@bAvF6tFrev+lyWlwp@V<& zelEVR~0~+W9NOWOHF4%!PsMdtn~%;{wXSnnt-D RPmcfq002ovPDHLkV1g&*o{9hf literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wartortle/normal_gba.pal b/graphics/pokemon/wartortle/normal_gba.pal new file mode 100644 index 0000000000..b497d87b3a --- /dev/null +++ b/graphics/pokemon/wartortle/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 238 230 +255 255 255 +230 238 230 +197 213 222 +197 49 0 +205 131 32 +148 98 98 +106 74 24 +246 238 139 +222 197 139 +189 139 57 +213 189 255 +172 139 238 +123 106 197 +82 65 123 +16 16 16 diff --git a/graphics/pokemon/wartortle/shiny_gba.pal b/graphics/pokemon/wartortle/shiny_gba.pal new file mode 100644 index 0000000000..9694dfc733 --- /dev/null +++ b/graphics/pokemon/wartortle/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +197 238 197 +148 205 156 +197 49 0 +131 148 65 +98 115 32 +65 82 0 +255 222 115 +230 172 90 +189 139 57 +255 238 255 +230 213 255 +180 164 205 +82 65 106 +16 16 16 diff --git a/graphics/pokemon/weedle/anim_front_gba.png b/graphics/pokemon/weedle/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..2334ea600402fa8a573277f23d085915e87a46ed GIT binary patch literal 686 zcmV;f0#W^mP)n;5f`e400001 zbW%=J06^y0W&i*JEJ;K`R9J=WmcMG-P!xwnOsyemsxwh3fOqD0&q6&mlIn~)ig&b9eC-u-weQZEydiLG7wuSV0m6UnhF;23j=73EaJ$wKh?@0*_{U*wafa3&! zRwIIj4!~e=1>oZY1oXpraTDb?r)QrC2qK>V#EG`ccc+~m?J-0QeQY7F)Dhet{*_V2#liKih0Sg}%%Lewv(^~*`011L8wanm2) z_9~`#JGoFl`k}GjvZ#`tw6VTOks?L@d;W?bc*}_;f{?{12&G?jCD+rtMUu=PDBcd& zyJ!ADiCAFf4+I1;1I+w^x(_Q5zx~0oeP)fEKTz*xfSf;2|6&Xy?+-TkW<5wsZ5e6Z zf59J^=AQEhyB(o+5qW=zR{8^gT<#B~2--2{{6S)%|KT}*Ai+4e(15%@giXy*=KUf3 z!nj<{A4c^d`=T;`7>vdPb#7|!>#h3v^r<`KA1$TQQC$@q>nW;2#m4#~MgBZL0na)C UjJsm9)c^nh07*qoM6N<$f*bZXi~s-t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/weedle/back_gba.png b/graphics/pokemon/weedle/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3180bf513b6cccbde0753aeba2bb3d8c1f5c9606 GIT binary patch literal 502 zcmVn;5f`e400001 zbW%=J06^y0W&i*IbV)=(R7i>Kls#_3KoEs3MKUE?kdhL~IRLSIg>{vZ9jBmhV=sjZ zP!w?KKDj`Ciu7rcmYj+vZk^f10wms=DoVo?F8n^fd9y$EymS3;MVk})pc{xpHxLPN z?G$~jwGe}`Q_rNNQUor*=rX1wz-*=cdK=-_Q*THcf`nuKUSZ51E@VUn4#aOJgsS0ZL z*)*C1!UUmxyVO;)!VxXttC&0FaK>=RkDinX*Eg`Z5Th+Xd0sp_0WUKLZu$a&p$%yk z>K1J^|1 zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*Hl}SWFR5*?8l06CnF%X641j$X@!&(h!<~)J%2FeDz6h>jI1!Xkd zn-o?SBED`u-u#3-qMwtEV6g!$6W_3o+bIizHSaW`#Z(o0;_0s0gIU;3eay^mXk0m6 zsUWc`VT0g!kcNON*NQC^+CDk(vNZp^(7fTV_xh&51l-aCb1q2iA`bL?_}}mO@W)p! dG+5|kdIHyvXQ4Wt=m-D+002ovPDHLkV1keCdSL(n literal 0 HcmV?d00001 diff --git a/graphics/pokemon/weedle/normal_gba.pal b/graphics/pokemon/weedle/normal_gba.pal new file mode 100644 index 0000000000..da76f37946 --- /dev/null +++ b/graphics/pokemon/weedle/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +205 205 205 +131 131 148 +255 230 123 +238 172 65 +205 115 16 +139 41 16 +255 230 123 +230 106 49 +205 41 0 +139 41 16 +255 238 180 +205 156 90 +255 0 255 +24 24 24 diff --git a/graphics/pokemon/weedle/shiny_gba.pal b/graphics/pokemon/weedle/shiny_gba.pal new file mode 100644 index 0000000000..ea331921ed --- /dev/null +++ b/graphics/pokemon/weedle/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +205 205 205 +131 131 148 +255 255 106 +255 238 65 +238 180 24 +139 41 16 +255 230 123 +222 172 205 +172 123 156 +115 65 98 +255 238 180 +205 156 90 +255 0 255 +24 24 24 diff --git a/graphics/pokemon/weepinbell/anim_front_gba.png b/graphics/pokemon/weepinbell/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..4574d1c5d0b5caa3b26d37d6d95c0ad990d6ebaa GIT binary patch literal 1099 zcmV-R1ho5!P)p00001 zbW%=J06^y0W&i*K$w@>(R9J=WmcMJJ#B$Wcd3h)lCXu^^OKyiJaJycerNvmuLmtGJsprz5zt+GXq zf*^nymFMbKx790K0{{mI-P*c~omuzS^l`Wt0XmRFgwC|*Yb}h^63tx^=o4~^&PWGC z?4*4qfDkCL+JD>WY+>g#>6-@#RaH&vba0me%}ehuVaPrM4*yZr4g+AyaK5)my96Mr z_RHS@^!|l+=Lr?iWdiioC(qsjKwZ}je6d24&oFzUX-@$N10J5ZrQbNvVX^g+kO2dH z5l~o%Wv$PEBa#wBaknWUXX@PnTLc3Lmg>I;Fo1q?o#H1JQLV09Hb` zHyp>=DgAp$O6ZpDIBOLEqCgnt=I4qI&|`DjZkyI-RRQQ>og0Q}R|4qVu+GgoKsh%| zXi=Hxgk3!XCn&AW-^5M)gjg!MR>fdPNhO zglmCG;t!Qk=?_^{`a@Qr${!Fq_&`y?9~NrS*`B>%dN2q4#hff28g_E~Z>I_q_(L%dw?7bbe+Yyga{vgg2j8vm002ovPDHLkV1lEY1k3;c literal 0 HcmV?d00001 diff --git a/graphics/pokemon/weepinbell/back_gba.png b/graphics/pokemon/weepinbell/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..aad38d1dfc05429d706499e8b49114d2d2c79f58 GIT binary patch literal 625 zcmV-%0*?KOP)p00001 zbW%=J06^y0W&i*I?@2^KR7i>Kle^K7x5UA8A2rx2*id)OA#&#SUCy^05XNq(_f9Ll};yC~Hw|d}r*8U`p zZ-~R08O$$U^dM_=}95N-Uvu{+ySMC z1W=gap)Jnu2>_OYo&c!1l^Q}~1c(|s?pr`hAp{_B?sWdM$P zy&$jvk!T(sD!{l#O#@gS)&>K3RRDq(m4XUG27Iuo;j9X{X6z@!umWf?#!iJHD6P6S z1(*(D+%nx0YHTvCs9q#OSOKZQh~R0%Hd8aC!Hl2*A73k=wCEp0<0B1GdfAx)J~N>B zJ?*E0hMI9&`kb6AwFln^r4T^jzj1@})Bw=^l)#`McvFBc4W!HaZ1Bj}4IrYS3?L1J z5Y9XBv}{D|(a`smKmwv*cQHT23y#=DDrjl|FXm^s0ytOawSaW+(rP|}07A(1C9syi z1Z6BFooSztg{6%Gz%EI?o>%I_0ubi=?U#BUIFNv$=++J3zkaW87!R@PFi0gl00000 LNkvXXu0mjf+`tT5 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/weepinbell/icon_gba.png b/graphics/pokemon/weepinbell/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..eda2fd29a303fcbdeb71ea88f01e2f828b0ea8be GIT binary patch literal 365 zcmV-z0h0cSP) zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*H>q$gGR5*>*k}(p(AP@la0`D>D{0EuQCRJ$j4IAyTp-3f--?53~ z2f{EqVZ`Pn@kqeV&QQV59e3Q4Ws6&A(laQT0w*yIcX0-A11=7*b@oDOQlO;26bxn5 za7HH#*Z>%+jgV+Lfr^#eljsW`0Ar=vNXB?gm-g)5+2d%qn1Xh>bzP-iM&~2;J`RK3nqSlZ02M}lYePSQHj>JB2B>NMnaJ27@ z1>oHdVl26|qkZ)D3G~4}eFy&^$bJA>uwPGgKK9G06|z6K_K)`8#?-8-75mXc00000 LNkvXXu0mjf(sQMh literal 0 HcmV?d00001 diff --git a/graphics/pokemon/weepinbell/normal_gba.pal b/graphics/pokemon/weepinbell/normal_gba.pal new file mode 100644 index 0000000000..162f840848 --- /dev/null +++ b/graphics/pokemon/weepinbell/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +246 246 246 +255 255 255 +180 131 41 +255 164 115 +238 115 65 +189 65 16 +255 230 156 +255 213 106 +238 180 0 +189 255 115 +156 213 74 +115 172 49 +82 98 41 +172 123 41 +115 82 16 +16 16 16 diff --git a/graphics/pokemon/weepinbell/shiny_gba.pal b/graphics/pokemon/weepinbell/shiny_gba.pal new file mode 100644 index 0000000000..2c7c777e6e --- /dev/null +++ b/graphics/pokemon/weepinbell/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +246 246 246 +255 255 255 +106 139 16 +197 172 180 +156 131 139 +115 90 98 +255 255 115 +222 230 74 +180 189 32 +246 255 123 +205 238 82 +164 197 41 +74 106 0 +172 123 41 +115 82 16 +16 16 16 diff --git a/graphics/pokemon/weezing/anim_front_gba.png b/graphics/pokemon/weezing/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d684163bb1db4ef87857d335043739cc148b30 GIT binary patch literal 1634 zcmV-o2A%ndP)aC_DHT_B*ZBOqQEc~wRTFc=H~Pz{~LPAz~HeCk8LuYhQYO{Iu`?E3&Z zLWChb5ch%onF1&Sj>|~xdTh#Nb@M8)JzxU`2m)p^+SIivm)UGvg=cY}RtOS|rkDa; z>CK*(0K+k-1r)#ugpsM|NzVY(D*Sae)7wnUPqkY&uUBihuZX(?G>ag0B?+V|S6;77 zc3uL!d!m6cf*$F$wNun{>C4-fG1IYwCBne#!{90`>yX9}-M+*e@O9_BtEkefaKgg7 zOal>u0cJ@Fw9;^bcZaHw3K&ppEu!pZvg$_VUdIFI0~Q$f&iv=@rKGd+%N93{hD47?I39jj#EUR>hKo%8}3F~kax`t$-qb#G!dFaGWv0oOU&2B02eib785o>L9wi|5(!{j(atFy)eS z1+b*^^-;`!s;pq8bQq?=JPSgfp`Ud2B>(+cwM=wgW+Jg97imbhs&kOx`*{sW13^HR ziE&C7R7#Gu0G729Vm!C9Lso&8Zm+wcju13v5oOhU0klz`TK0Q;}?# zr=pK0c*c(4>IcHlW?v=YGgyUYEZUpSt=bIzg-Sf>6{+r=!1KfN6+uJ^2 zJEvQKZ5ws(uX%s;dRqW%=Yi)B7!WfjTZx3X*AD_ql934fuyInAMW|OfvZ%?!IA^C; zi~CAdDNMt0wl8~@@JV7wIa5p;(jaM62Bfd;g=pM~aWJ6$g}zhw#lNLgiu{F-#()&! zUyN=HgTC<>G*+efug8Q0015*#6NUJ%$5)eFg^U4Ni+>4x@)(o`q!fQu1a%KvBLYeT zQi{I<)Y*uCSxqViq!fQDv)2CwJlU%l5T)Ie@kn*f)qZNB*Dno-)^709d2!%VlVM>% zd<_h|@OLGjEsI4K zX4Uz*G$1;stYQzy!my|`AO`sGIbLT;7G_d4AS7Vr+}RN1Iy(Z|V_Tu#-Sq%Qy3JCj9W)X$WgS4~a+wRdjQbMgh8Dxq#@P5yU!I~u?+z(n$~a%&Cp zZ!CyZ20~1mq`k`OhtgG7z(*QT~ku(FS7PEdSbq7~ix>{_R59ACh0~Z>j$D z+ir9L25`)1B-CU3)meAv!Z~YPK)rEJRD0aZ%VvPyYbWlhB2ORK gNYC1)y#I3i1BS7h8=6GP*#H0l07*qoM6N<$g4!qt`~Uy| literal 0 HcmV?d00001 diff --git a/graphics/pokemon/weezing/back_gba.png b/graphics/pokemon/weezing/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3d38832111f4af008b039152e5d080dbe18de27e GIT binary patch literal 623 zcmV-#0+9WQP)4lRI{+Fc5~*aZ+5^YC0WuLC0YW_6|I9HlUHcfJopz zJklGPI|9tZNc71RH1o}`e;&NO{ly3Z#&!Wl@v#fUX}l{DWGqYl+4qE{EY9`}#4OtZ z0+uFemLuCEb*?H4=pRQDD1?N*Uh5)v0h~*&$0)WygaT37COtrf6eZ;b6Sob} zT0l;~#$^Z=u&KQ0j01@55M|$l0PY5qvL2g`2G%{cCXKT7#RIPjwZU%VviDY$oVWHJ z#EW@3&&cM#N!~hDWcZ4gSD+|?HqNCLpr~*q5o%ouI2?|BzkTTSMofVua5&N3jd58I z+_Z{-<8cPiEb~pHk)Alg`~)r)Lf}dXYJ&4gK`!SRk$Z^*2!T%E4rdxQE(LIP7Izrh zf7a{%d>6nMZO}?Q)#2Q(&m!v2WXiVyg$tM^a5&z1spJ13=MIMJo)%`tdsoYP0`O-E z)YXW{Cy--4?UM3!UFnx7i`gUnF^~EcFbjaHi;aYF{A0f~{sWmUZHxDK6`}wD002ov JPDHLkV1l?*6DV$@lCf&TFc5~dX0aY7TQT(Y0)>**WbBru9h?5f8Zzp@ zui&x8AOs#IxSlN8PRY=<^sur0>HgDM_bc`HqxluESI7J&50)ziE=$_8WgUo20kJ1) zV@qTUkTs${PGo$M%)k=b1=Ip88(uOZT_>^zK<+0g_B8?yrU3K6MBos(G#ft7wS|#R z3(#N&eDKRpXf#sLFO4fTUT^}sZUdcUjNPz;YH$bV#x-Lnw^JiFNlwG?6G+m(j^jPr z&1`Xw<_&0{zWZgitfTSFE!hk-MY26XM*NmRoBRRpYg=X&XAoP9K7(lnM&{3@20hk< z6myN8D6V_41KywVE@66=ZNwj@^r3Nn5rt2k=AyxHfKlUWnDLVAQLV$SaJtA2?go6F y(7_GsDY)wMdAKo5lRR{5n5GCfNfF+k=p5grD)IOiKh9_X0000gT>}*z21Y~|NsC0Yx00001 zbW%=J06^y0W&i*Kwn;=mR9J=WmO*P1K@@-|p=^n#tQ5gQw3(FD_RvCF@TN#six7Jd zbFUz~xF;3Kz#cq!QbcKNEH2cLhLY0#1^N#Zy%apO!X65O=HP((1L}LT+1;6B(+WL^ z&_`**zHi@qGn?tRgq*}NB25XMI4r-!b^bLw9GK-8`@?~yBY+Ve#Lync2XKaO?9m}Z z&T^f3Tla?p>HR6k|I+EZsxijy;RiiS>QfuOKfbKwEoOUOhY^y2J#4UcZigs4Tt8kMD8(KYr$`akgZmRH#q=0G?n^`JQ;NWAWO~WqC;U5PQ^W}R<96)B2CUO zwrQSdtq9N@shiv6bP54Go-!-|UzBN=LRc!G)p{T3q+!gLB0vl8>vc#M3=AatfS^Nq z!KhYmA%Q@tl+|o?gh}ISwOR$Bj6k6fKkQ(HG^BzGWmnToPU4v z0uN-ju|sM7EG$STGLUPC^Xj@c{5?9;v2|U}la!wGu|>m&So1pOZPFhpzZahyCPZrh zAlu^Z&))W@HPhS}%#+F*oJ}Zx7XUpWKk`vOV~VIeP0Ew?4>0K#gX-(gR+50qo>&Yl zF7xC=LOv7UmU){9Jdf*Ek^tgLaN-OnaT5P1?j0L&jthwY+lhy_7o#n7^OYlj?jf%h z*rD0&4t=-40$|=QA96ecIf0rlMLpDgK`*%OOUh@H0n1JYW~MY+>2jPlnH{Ma31)^v z1?^d_9jlqrDdu@>IhL=+ytbrfT4Y|9cpbYH=M^Tfo2k#Gxv#e#w-Q^It5SM@*jNBcnnbO_I6B4i*x*NA40LFG7OMv2T z1oH5@w;Ps#4OQG-#1Y0oKw$~ZQQd6`@#Yj@(A_le`#aGP{q7b|EEfX&Zv=^-7@T y%=>qVdGb2Eo@nO30p9F|(+&Y5W1pz||BXMjCiz#?`3i*q0000gT>}*z21Y~|NsC0Yx00001 zbW%=J06^y0W&i*JFiAu~R7i>K)4y-iKoke?BZDP-as*;vYOa73Hhio|g_yA$o#}L^ zW-3cgnExRPs)R66oJ_Igff>Xh1m-ksms zgxu8sFNbq}dQHxSl(M&9a4EAa6MF@hQHB>U?d{Dc3VR8(Oar#{dVUp<=AgdnzY30GLzC zR8d`-j0S7q;%Te9K@e2=BPl;w09(w}?Zd+=r>V?fpbw)27sZcyhctpk^@3{fl-4`6 zVezcWoKx?dT$sI?I$Iq374Q(aj0Ls)AwO=K?p~Lq2NCJG@FE2fZX29DfP*81JsWTKi~BpZ|Wb^ YUt&EiOwLT#KL7v#07*qoM6N<$g6so2>;M1& literal 0 HcmV?d00001 diff --git a/graphics/pokemon/whiscash/icon_gba.png b/graphics/pokemon/whiscash/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd79a540cc7e4fbd011c4868e142386c73138ae GIT binary patch literal 420 zcmV;V0bBlwP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IB1uF+R5*>@lCf@sFc5}s%ZBw&ULp|6UJ3O9DyEKom7pTACF+)~ z&(tjgf>&_Vr31PIb+tkb#E#9_sp@V1e74VbAJLx=F^Ee5^ij7VsOvgN(HsDA5$KK< zthS_Ef%UuH-YL@S9*Ij(B=iT6kOQKJ30c__)E9XHRJ^?bfvU=ZJt+&){23##cYJ2R zCY3L)s=J0fUDi#%{sstbT&E^zCq_%hr}90 zuagdt)}WgXDBbvH9Z)zh>mc)m4rS~L|J8f;tU1-30Hkvm)z#jdoTOS>Y5)KLPuySs00001 zbW%=J06^y0W&i*Jkx4{BR9J=WmcMV>Koo#IkPLL-e=u9S@raj7^}v;tigHMuh~(gv zv1121oOgy?J)|RIiquvDW$3?zYLb*jiu>N3L6!aNNZlg&N%rzSz2_fy_dds|<2lA^ z6;|ifLToGYO%>_yg9>07X?r2dQ?yvMZ zmxav;cqa1#T00Oeu}uHvsTF7Y01wj0Pj@??EZh+6jSg7<4a$IOl*ZJT~siTfM{x4QvpUA5(m3bQf*Hr*b?<&BI|Eg_m#{ZX~2=ns>nnnPjwoAGb`fu{Q$^3$IH>ksbQ=s`h2)=?aa0nO&6 zHH`du9;=^sV)l3hJ{J!B8yqO)54MGhxD(&_gZrBFKxq!J{@`mWpciET=>g{1^E&ef z-}nOq9Q*+u$^|1i5-HOG1!F=T@JhKn=>b*PB~SPRRp1Bb;4C}{1P=^d$ONLqK!$BF z0?|Q%V1f5I`40lY0#iW(WCeovhjd5&&?n%W12TU=!`M~(Lw{ELLmkgL{sIXCe#goT R+?fCX002ovPDHLkV1ji|Zn*#e literal 0 HcmV?d00001 diff --git a/graphics/pokemon/whismur/back_gba.png b/graphics/pokemon/whismur/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..f13819f1575427d5a35454d935055e9b2e86c154 GIT binary patch literal 493 zcmV|J8f;tU1-30Hkvm)z#jdoTOS>Y5)KLPuySs00001 zbW%=J06^y0W&i*IYe_^wR7i>Kld*2XFcd{I6xRGh_yeAU%G4n*tQm|eF@c1dwZ9S6 zp#w`Sej;oCDiTxGfj&D}PF_%=c0=NhzQ@#75k?FeasJkNJ$xOPxw)eV3} zP8+kP0^MSxKRXRzv7bj212+NM7Ly;%t~Q8NX?^l{q@{%XC~`i&Yps1tsvscpfWR#H zX#=*H2L!Ij`qsJyhz6K>KM22CfWQW5Mu5$$g#JO-m;lUO1I+kC5+K3LCA2hMK?le< z5T;{*907thAP`qQAn5|guQ7qY0Qeu^iPp9DCm{Re%_YjBI2Mai+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hp-DtRR5*?8(lH9dFbqIZouEFhhCp*48Irw%=qjBPFxdk3;Kq|B zCqp5bN;Q6DtlMq=tTGL9D@LUxIq$n0dplhM3yG zoJQ>Hzj0Vzl+|&O0?ng3^+7byTZcdtbN~neZP=IKKNsdJL2I^xSgfD|#t8DQAZ`Sm pg0W!-V+9p3TF?OuoPoK~#|Nd|gm&d?Mn3=m002ovPDHLkV1g5weq z{<--e}3g)BLg1@Du5TrfLQQV0cG9@~4gB~RbT|0K=0>7~7N9|VEk zFHcX;Px{HS{y$+~-vwNb7st_f3*f!Yjxlu20P(zW#&w}-CI)Ahn3-K9+khGS^*jT* zYk){8^8mYOlK0S^_ZKJR-1EHiT$gXyZyf>vJX9sf9Nu@bqU(BZ>dbE|fVamMiJ`-o z`%SJN61c3@{-}UfI8J~u_R7r_u&mUrw;~Qc4^tkgyz34MHk-EYhdku110r4~c*C3OyBBXCp8fD`J}V&Akk6X!4k90l}@fb%sVaCCy4 z0kDILvxiMOheu!GPa?I85D;QODcm~82|zc|mQyVQ#XwHwAu0nSfUAk56N(@t;E%Kx zu)rymlvWi1VR;g93|Dj!D)0Bp1#sb4fGWXR2^ipIDczKa$`uBF4yb~kisBq>;K@}U z;G)>1?e}s3#oaCe7Hi%CSXQ#h)BFDf(0(jC2kheZm-80M0Sz9O=YTOO0EV6Wd2@w^ zp-0Qw+2p@BT>(q%HnRGS#&c5vOZFS92u%;x96&DfKTermfq1w@@&^^CjPpn%W*6WK zA*YPBaUnU^9t>RdaJpC{q6lpegh%TwBZ=w9n&!@sxiH>nj$q}b{T%;o*!tsCjICl` z6@aZ`UPM96=-t)zY;nCf<-uCawoE+l?UJy)%h3{u=8JPOhI7WeRk?xZsdC8$z8 z#z#bXbq&nw%tHreK*%J%wL4jUy>%#d2EAsgUa-8yM~TWm&Uux*t24%XX{Pp;@+$uS zx97P#PF!>~Z!2?iGkbQECGU`E^)hp-zdzlw7gN`*vs7X(jpUH)&o1E~+$Shy z6!V1c;Zd77W}+a*F1rt$gQ5OttI^NtJtY2kR5{)=TGN_5sJ#TZeWc{52~EW(sF1J@;+^E z2a>Rl-Y219N?G9dn(Cei^F64YS$sw2C0z!#6<-40-N4@qg#f?9IH~FTt59Owh(8C$ YU(#GbWJB~QVgLXD07*qoM6N<$f>;qtj{pDw literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wigglytuff/back_gba.png b/graphics/pokemon/wigglytuff/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c57f8681fed9520e1bfbbd0a501ab338382f48eb GIT binary patch literal 526 zcmV+p0`dKcP)Kld*DxFbsy78SwjW%-p3fVBd8w@@3}`bWT#koKmQ4 zhsKrz8M;P897&&l$uiEem;KkwlYAjR_kptxppw{3e;t& zu*}IP=7IXwLuV4808q*c*e25+Xv%f%1vEA3t}gBo?nZg+cL1lr?kWOWtAIOzegqW2 z71%iiYazMryk!FXoH;Uq1ZZy(?M;9WB1f&=_EmrnBFEMn;ue4yY)^p$G8^V60QSqc z4-gU(KMw#19#{S-52tOQGX#WhLvY|~zPj*n9k_t0-b}T52xILU=3kcm0!4g#4n)C{ QNB{r;07*qoM6N<$fi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H#Ysd#R5*>@k}(d#FbqX~g60l%W6grdk$Q~Y#z^f@i6I_x6~tJi zD04lSl%a9DA`rq`p8j_RKY*Ve*}aWV8JSc7iBG_xL>3NW!l(g_EDD%~ke8$q0c*e{ z7q1(Zh$_(2 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wigglytuff/normal_gba.pal b/graphics/pokemon/wigglytuff/normal_gba.pal new file mode 100644 index 0000000000..b0b85cc792 --- /dev/null +++ b/graphics/pokemon/wigglytuff/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +148 222 205 +115 189 172 +82 156 139 +32 90 98 +156 106 32 +115 65 24 +230 230 230 +205 205 205 +16 16 16 +255 238 197 +255 197 172 +255 156 131 +255 90 74 +156 57 0 diff --git a/graphics/pokemon/wigglytuff/shiny_gba.pal b/graphics/pokemon/wigglytuff/shiny_gba.pal new file mode 100644 index 0000000000..f3d0192a29 --- /dev/null +++ b/graphics/pokemon/wigglytuff/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 230 230 +255 255 255 +222 255 164 +180 238 123 +139 197 82 +82 131 16 +156 106 32 +115 65 24 +230 230 230 +205 205 205 +16 16 16 +246 238 246 +246 197 246 +205 156 205 +164 115 164 +74 24 74 diff --git a/graphics/pokemon/wingull/anim_front_gba.png b/graphics/pokemon/wingull/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..69ef9d7d040dc4f2805d86a33ff416e2ab3bc201 GIT binary patch literal 694 zcmV;n0!jUeP)87gIonktn*icoVj9iT#jHVaHiUI(Ho zl9RjvAw`8D1N0B57uJ@E4wXVC#IFusyVXkrWV84iauF4^fxsBc)yK|fQ$$M#3EoKLItyA8Y0oCE_!0L$7U3wvY4OA7FrQXx|y zeF50Q-VPc!0XCKO|57Dh9#(tX08r-(ZXtJY(ty z``r{EkIXkB$GCQ64!%xu$4oS2PgZ|V4XoTd9K7%zrI5tB(P;AbP29H6s7&yz8Ry0%kQX-j9e_Z;CG~;@Ahyeez~7b+btRzMS!PKR(72lz zV6!45Z^7~+C7`9HrFDf$`$naGfR2h+CGMh|D&hAEt5| ze~9sYet1f2o7QP`z-DR6v^fg5d}Qh|$q%bI^Zn@DB-JPYHHbZ(RNlZ#Y!&4Nti|?5 z0qlNTw49E3$D4$){6GLvsu;s+SMo!MKwNiJq}7iOPN@9DS1%*B&oCZ8y#9S0^5+!f z@x#wt$afROQ8;q>;YWCXDZ;1zzT@%3FtVO@kdSqu@I$D77xq+sh*5|iVpK};BmAJH crFE710|c4FDQ0FVPXGV_07*qoM6N<$g6K^;YXATM literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wingull/back_gba.png b/graphics/pokemon/wingull/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea8c64740adc608c1d2de688324d34311e7d1fb GIT binary patch literal 684 zcmV;d0#p5oP)KlfP=)P!z_mG#Ii7E0%^r39>EGEnuCSsZfw~O6ekS z6-`~TG($XPN*|#f3mr0)Lg^+?g_5Bc3fcP*ZZHXS=ri=3d*$f5m}U<-gOK$7bnbWl zNQj5H_c6Llul+mpy6*o+cS)}&o9~9c^+iH@1^s`%dDXWbNQaFS;{zhr4-Nqb0Co!Z zFt%)klz=kWDH53z5Uqh+CxFyC0kh|IJzWDB>I~f(?jd4m1DV#lGhB%nbS^{8YuGp= zLBtVgm%autWL>GFTMLLj0s(F{G(ZJUl~O-C3%C~}L0``* z!}B0wfOzx%u}^>;YZD3P0RtW;Es#GtyZl9WDQbXbO@&kJnpKOjeDP^15^@t1sRp7T zW8g{y6U4IQkrCh^yCefnw%$d6oGg{PIC2;;;AY|$sDMh6>_|Ag_+DWEp_gl*^`f9z z=`G=vTk&nXdJgrGTOws?7K;sf-Qqe_B#=%S%#fX_u!HsKSibyFVA;Of`1g7<)l3I6 zKA&T@6kFn$#y@K&SLgHnt$MHdv$#-df9LJ#R$X}4$G>N^f;;a{x9SgZPvS3{z`#Tc ST7gyo0000i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H=1D|BR5*?0k}(c~KoCXe1W;f}B*6oaYxFT+vMj7qSebWCZCUr8gW5rz-==$%^kG? zTNBrex%IDqV(m2?WYU4$Bwy%2T@|aD4tk)(TnBRZVyOcO;=K;DTkGpHw20&k^w-y6 z_CvG|8LwbRdL5+G#pB*VhhD$PfX7D%;(-BHhnl{czttN#hGb0E)ds8p0000H_j9;6onJ4{=M2plody;R8g7i$Y%nZk8Z9!SgbHTkcuGGGBem5_f${vY+(Vt|~!e?`Dc1&EacctSZ|z4!(+U^hV)fia2| zF@XQC0JlcfXivn>p>_a!FRdK0bLuT1`BV`EY(56$B1ZgJ5xJ=oH%> zEa{)7akI3iN+LWq&Exs_WD$W#&00Pl-W`wU)6>*{x6?h)=@rf4@b3MG^I;MqrQ9G| zs~d`OK3RY)TmOStCHpxAIZT0A?_(swW%H1bhluH7MC4zEP2JR?2=}_rX%oH>iT-Y0 zhf8*umS$z<%o6=?pPxa_Xory-XyDOp^^9rxL1TCG3^BXw)CI12;%*QR?5#Pg2Jyf? zC1nq!EHK+vy~1(z2U#!xr6V4cW!t_+K8FEV@t`u04l{ntc>s+cA$DsBaAX{iO@QB- z8av-c2^grEE|;yJln#jl<|&+^CK`MmDE?5sI#xiwcY*c8P$LJ7+hj+3fJt{L0mA_W zgs3hhvT|-#q-G&h35g4cg_JF!M~Z!O%mfx?IrxdV9{Wkg;YLawL#qdx7@Kg2qFUU9 zF;EQs`&0q6_dSu3`+7Y4>8Y-dk4ckmQN0-SvtJM)w_`w7NUscih+HJ0PGSI`ZrWWj zRtJgKMC1D_rg(40>L5`gK@9H@K4p9}RFSu?@koeewebf1Ae{FPA5csAK|k0Qwgnme zz(~P%)r@{%08{NGf<5*6BD(X^9FGpMfB~4F&Zobf2<X$@ryo)R@|sggMn9wq*fT(K)Ul3&KoACCDzV@ptvCt`E8$*X`8T1y>|E{zz9RZ>1}EBO^(_f7 z(pLto26V_85Gjzh_zZwsoX9!7MM)$?IJLIV8Z2b`bv5)1OFGzl9I^=<2h?6JvCZl* z-U!fTbzCtB05yNg;4$!w5>}VPgm9cA*x)7{L=1xtvry&67zN-$1n|c5md$j0=))pdr(u}i=v1?L1*dIBf~^9+6@`Co)rb)-AK b^XmKpkZQE@6pN&g00000NkvXXu0mjfL0Gzf literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wobbuffet/icon_gba.png b/graphics/pokemon/wobbuffet/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..14cddd18431fa10aaa1e6515a656b379e266a110 GIT binary patch literal 335 zcmV-V0kHmwP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H%}GQ-R5*>*(y486E2P>Y^zK>{j5)ly|l4}?A-Ovl^Lhz&bg_8RoYt8H=xwe^#qi5 zLrYGuJZ?4HS2M9=)_>w4>Np5d#o;1O^!GVDYw+S+!IlrQ7lbz?0!l;T=`)n_@54m% hu>tKfDEG^Jya2Hq#umI zq8Bh-NKlcwXeX3UHK4VeM~Ke7qX~M>txZ8N-(nVipXbjV@pqLfRq8hd0QB6;ME|6N zTB+S^!24;p+wB-lfg$UMT^m5C4JuD;;?VklkPM!#pQQp9A85wCn-^}(9T&*)w0AXO z_ec%(Kupj26Ml*G_`QROv6*Efu0V**H}VrSkX4yLKOh&4Mg*vF4JZ&}5>p5g&cEBe zcVDL>&}0i#`dA2nn^5(8w=sSd2=%64xf&1Wg>MU_xHad9UZC5+6+mon2HYFgQ4t83 zKqa%I1vx;A4=fc-UNQ3p;>$;xuPO)jr{|AtwSes{3WX=sqNO58Ghu`y#3{^yKW!Um z%w`X;fJ7*uRMdEYMAt<>)O1o&F8b=w=z5OQ0Ja0YsX(024w=(Ko}g5zQvX+ffo4ly zFPe$G-=I17pm|AN8O=-b%4lAZS46WTuMf>c-Ut#8nvMOZPCaNw)a3sF&3uP7npt*# zp&2C{tQu-W~Klre6?KoCVoGR;zO29AJYjFct?9#YcaO-aX|fl#PuuG_N#NuK0% zY5AP7#3Y?KzkYPV^u(9;2gV<$RyeuVz-Q5xamMZkIm0-yQuWp{E%vZUx0Bt+O1+~ zGQ_Zd<=prI`iFFti+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*Hu}MThR5*?8k}(PcArM79!FugU2zr4)`c2^hwn)1R1Gz%V6pL#q zD9)Ndm|4@LUC8hLj9d^PTSdaFj6fjn?Uo2nFbrk`#`}jz_>FxdXn^wS zua9;%7`+`#ffx(>t`5e^@1BNf9e1L literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wooper/normal_gba.pal b/graphics/pokemon/wooper/normal_gba.pal new file mode 100644 index 0000000000..f364d6c711 --- /dev/null +++ b/graphics/pokemon/wooper/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +148 131 164 +16 41 115 +49 74 131 +74 156 213 +139 197 246 +197 230 230 +238 172 255 +197 123 197 +148 98 164 +98 57 106 +255 0 255 +255 0 255 +255 0 255 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/wooper/shiny_gba.pal b/graphics/pokemon/wooper/shiny_gba.pal new file mode 100644 index 0000000000..cf0a3ce59d --- /dev/null +++ b/graphics/pokemon/wooper/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +180 90 98 +123 57 49 +156 90 90 +213 156 164 +246 197 205 +255 230 213 +255 213 172 +230 148 98 +197 98 82 +131 74 74 +255 0 255 +255 0 255 +255 0 255 +16 16 16 +255 255 255 diff --git a/graphics/pokemon/wurmple/anim_front_gba.png b/graphics/pokemon/wurmple/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..c79458bffc9a2060648e2bb5b92b2f604b611c04 GIT binary patch literal 890 zcmV-=1BLvFP)}od5s-=GE@aQd;(VV)ng@=GE@r)ujLb)s&O~_Vxh9#aaLW02mk;j}Y3<00001 zbW%=J06^y0W&i*J_(?=TR9J=Wma%FZK@f&_19A!x?3H{HQY?gyxR4t|qogOf@)vjs;;P_!aJwV`z z?&>K(6u}4SA>;Z~>vmG1+TihJ+~cQPTAw8j*=PSb0;-^t5}T9++ZbMrS-}9R<5Oo@ zN=jqKGpb!sn;?nX;z`L_V_amE0;)~MzX3|G7zv;+!vSA5bJzw-kO26BFMR`afI4ah zfXG1xPfCzo@Bkoy>`T|J)W9dY$OV1?UTs(FXz!NlA_oQ$1>IHKx75&b&vSBtH$6#u zst+R9a{$k&Z5g@s7j+koln|K?RRUuoTi>ZhRg|b$zMJxoopN>;C2F>@U!AP()F+dl zd-gAnm2V7Z&o5&c|8b-iSSLF?Spd8x|6+e)C7kE)mx~sFK1P)}od5s-=GE@aQd;(VV)ng@=GE@r)ujLb)s&O~_Vxh9#aaLW02mk;j}Y3<00001 zbW%=J06^y0W&i*IW=TXrR7i>Kls#_3KoEt!1(g-qF1!*7R%&j8i&+Vw6fSnIkaMJ@ z;s~KaisTfoSqj%+J`8P>ccj z7y!dFCSw2q6oW(xApX`2x3>X6{aeyNlIT8&Bq$X*hhfnXxKamFAwrbUX{aN;K`YJx zU`+!Nn36QWS_9lLoE4^@(r$4B%qm)fU#?h{`yJJvm^1Tw#;F+sr2(=j6&#L2Sm1*I zv`=ynus-EYLjr;EY4vsd+)zMjB(i!h%zmr+dU(Qez8Mx+zPP>@EtiI+ z+c4aF3Abs0cMFtzFX0iF|AD7dtTpTsh(;p0{7r;vTRMO{0P`SOF#SNP(0d}>_I0`w z%sIxYnjPFlZb{KGD4$hz@?L)rh e&;uTIhx!FMsKi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H$w@>(R5*?8lCcWHFc60C2@LcNq??0Fadpx+s7seVoy!%Hy#b%4 zQk)8*AXzLlCMjIfE(O6w{I~n~?+D}r_`R6L%w)d;1}SC-Mp+ABKrMY4P=GciUC3XE zMxO#OSYRg~v@+sVV^woH`b-ZR5qT3pR#?yyU}?6s1r*L%<7z7(QWOky=uMQoYn56F+tv1VnI1MgL`{wVq(qB#sB~RIeVmgDLDWD0L}KK-p0i+00001 zbW%=J06^y0W&i*Jkx4{BR9J=WmN9GFKorOCOu>sV*2&o%k$dte47$r`3aK=A(^d~1 z;;qoFkilQ4&>^3}Qqr-77SgRCJAn)d_Zj+5mh2Yaox2p;#{a=Kem}qW^zKQ26LQdB zD1Z}Zypv_3?*c|ymL{$oQI<)`9Y7$p97O_vNJ_8+6f}{z0dUq}HQ-9Ybd8B4MZt8N z_7wE=jA0GAumRUNN<9kOu<$JOEbYU3_EH1NUgP@iE=!-wTWgyw zTAT3XL`qTMMNG^9O^R2d$cLOI766WNKhLMfjGMdk%A-8bzu)9mfPKuT-)6HL#v>z8 z#yrRP>`iF_u6R7f`0O><0AQame*P8w$T+Dh@ZorN{srP?Br7A(AL^}ykb)5yz=HTC z#34?^cnc1IlM)l)x|A?B15^qmD!heEOEmxpvJ{E2zQ+tr;J3Jxm?I&907DZV@YD51 zR8*LnpulCbvs9V^6(mvwg6Ss0`TY(N;ur#6a2~3FKRjH%-A&Si_z_sF)H1yIFgE}s zR9OBq>CTl>yCqu2`J_AO>FD3FMMsU_v_;p2uzkL{w+8vYeA80nPx@x3{^#?PZ$`fY zov2;{f9soT&njAMluCgK#MU>Nu7S_)h8SU2C!K(AeUr&#;o-S7S3|LR5sChAU0n&Zvjvw@7^#hJ+>dk## RPoMw*002ovPDHLkV1k6rbiV)q literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wynaut/back_gba.png b/graphics/pokemon/wynaut/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..388b1582bac5f934e029fc690c943d890ee67ce1 GIT binary patch literal 498 zcmVWOky=uMQoYn56F+tv1VnI1MgL`{wVq(qB#sB~RIeVmgDLDWD0L}KK-p0i+00001 zbW%=J06^y0W&i*Ia7jc#R7i>Klud4fFc5{~tWneu){*?&B|?hLx{KnIlPporKy#9g zjY%Ohru(X+?B2(lUuU=b4>^Eebl>T1-Fx@8t$TOL>P1U>w*g$E?y^M`uJz72n+2{e z2C{&ebmY1yf^3lmieVTKB9mdD1gLw`WrIF8fULf6;{>RKQBLqajmTO1Ar}~T5W+yT zxFrK}u+64{Gory{rE|hcm@GAn*-%o0>ZWy0D2KvoPy-R?F$}F{2SLC%l^Frv=MDIpH!T6GqvF%C zj1o|F(DOPQ0Z`tep6^WpPL$y^U!=DD?r(Mi%nZD~9BNXV@GJvBGc&J$)`tgOS-MH> o$$-6!!$TjFL-h$GJ@3CB-@QzTTN$<%5&!@I07*qoM6N<$g7=Bp8vpi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H-$_J4R5*>@(lKrXAq)jjP5`&0%v{uDF0jT_TLo*Yt?&?U6b<&I zOPBnPCmWFL5dK!?!=DrEUIqX;5h&zDP(${PD~#DyOwRyxkaj?E@OlJmTQJ05n&w8- z4UA`giV&YYgYp|H@b@{E#=UktD`H_NSaH3=kpcPkZvM`i4+|l3i!J=iqUJ^iY zl5RRVD__IMANye-?Z;)5It2$~6!HK?1bM;SFPBc8{eh2FGV`_(nstzzbGQ2;_ZQ%C zw)CnCW7nZq?h4g{rmvFNbY&Ww9*sW1;g|UY=}6UwqcIhp00000NkvXXu0mjfUpATB literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wynaut/normal_gba.pal b/graphics/pokemon/wynaut/normal_gba.pal new file mode 100644 index 0000000000..c370466343 --- /dev/null +++ b/graphics/pokemon/wynaut/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 148 98 +41 74 82 +74 156 189 +106 189 222 +156 213 238 +164 49 65 +222 90 98 +65 57 57 +131 123 123 +106 98 98 +205 205 197 +255 255 255 +57 123 164 +123 41 57 +0 0 0 +205 246 164 diff --git a/graphics/pokemon/wynaut/shiny_gba.pal b/graphics/pokemon/wynaut/shiny_gba.pal new file mode 100644 index 0000000000..7a5032aa69 --- /dev/null +++ b/graphics/pokemon/wynaut/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +197 148 98 +106 57 90 +197 82 189 +238 123 205 +255 164 213 +164 49 65 +222 90 98 +65 57 57 +131 123 123 +106 98 98 +205 205 197 +255 255 255 +180 115 90 +123 41 57 +0 0 0 +205 246 164 diff --git a/graphics/pokemon/xatu/anim_front_gba.png b/graphics/pokemon/xatu/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..d4c3c19707215140df8b1fc94ef415a08e3c8f2b GIT binary patch literal 1027 zcmV+e1pNDnP)a^AN|Zq{Vk!ULLA{h9i&_BgIRLaV0D~z2&CSh}l$26ZQYk4ZFFR&q00001 zbW%=J06^y0W&i*Kfk{L`R9J=WmoaD)Q5b;V&`gpXPp86}Lh9zEFDZ0UXs>mtp5>B) zAnhQWbQj`QaBwXd6wZjaCI#C$#g>3md6zVUlSzBUsTwXRX;Is7=X-aTm$bfj)=9+v zw*>w#|Np;t?=D{e_zz=9QSOK4ZzfQ(9Rf@w5~D~BDUcu$R${^fLQ1G4f6eU(fyl?~ z(`R>EBZ{a;>(XxG7D`W6-7N9$0Y$kNw5ydY59O?2+8&;&>{Fe z+)AtCx+)!lU*bS^CT}0AjtGz-JVME|(zQT|+oJ~I2f9-;ZE(y5_J(s;G8)Rv2zDY0 z4Fl$1r1GzKfW(_2HvDoCUME1kN*2Te4Bdd2HS`cyxoZSNFBfwVj-VUZwD`c70ZCM$ z2#Ad5C@?|*{zgZ}X&zpM81sS2ln2OA#=D_FO$eaba{*8YOb5V$u!24dYvekJSNMR2 z9vA_@KTmT6D3I$%euWQc`n(+gEiT}qdE22^tHlR^>+}H8gC)5^2=V|FHZ1TpFHD1? zk!#n7jaP34`F+FK1h!i+-k98c6c#qUSqnMHow63+WV3Ps;o>ghAB{iJgP3iz4~^{r z7|;XzOEEY$_PznlM#C$>^dQ>6TRp(p_g-%1_JAHl>#}?nfaZW6)L{8k1@HA2AJBuE zEcXHFgaJ$s_R84&)O!LYd;LB30j38{8ROzA16T#72TeQx#QFf!gHr%-dO%+f&H(;8 z<9$7NS0}&hp~YXAtAQDJ%z z^#C?Qf1N!&X!-yY9@!)X z6ov2R-kDZtfiNI>K46IpOfw)WsG#c}@GUE7p`kHde;m?cj62002ovPDHLkV1n8$y|n-U literal 0 HcmV?d00001 diff --git a/graphics/pokemon/xatu/back_gba.png b/graphics/pokemon/xatu/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..b66774b137990f052f9216d4b3c662fce9e3e36e GIT binary patch literal 716 zcmV;-0yF)IP)a^AN|Zq{Vk!ULLA{h9i&_BgIRLaV0D~z2&CSh}l$26ZQYk4ZFFR&q00001 zbW%=J06^y0W&i*JN=ZaPR7i>K)ID$0Kp4RB8yX2UYNC@^Dn&(d*^zu<>VTA-rw#>L z7x4uQ*_iMM8*`UR=LkI888Wm>Eu@Meo7IGYy^&x;c~Lrm6y=v)|D|6WmTf=1YrkO_?D5|P?(Z^YfpA?NfPKScAntu|oHv?)X(R>4j~&N(tpjFS zs9OM>_X=pTU04YC@hkVO3J#fRVgP2ma9vjc8!TVka^)`tl-9t(JIy6aduOnBmV$`} zl*1Wgd!6KvS`e)POB?7Q2w?`-f+*~=yFfV%FEdcrf+!4cng}`&;OZNPK=+6z0QR|h zi6{X)1L}lw5QdWyJ{yJSoF6D4@VqV|M@yhg*c3qkpqc?qKzJTJCBFmkI_mGdDTKhl zVsyi!pd%F!2;un<7>&m=^4d~r0%C%Jg_Kw*CLkc%5V(Q>6vSmAkpz5F{n>{A6c9{` z0hmzv(tm_N6hRgsbJ_qf1JIVkelY-GSZh3#lI;Un(4E2U08XH_=Z2gmU{2{k2~_BP z!+63Fh|iSnC}4~B;Mhtbj`ZCE zz#}vPOyLNEUX$BvtH+Y>7vGo9;0U5ND1gecz_|@aIEnizNDJ`4dI?8}#|1#XC0{2j yaN7~F3VtL23*3?-zVeHpv;y3o$0G&&!|M<4>t`ZulN!GO0000Z>R literal 0 HcmV?d00001 diff --git a/graphics/pokemon/xatu/icon_gba.png b/graphics/pokemon/xatu/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a0e6d6fc99d4a123f0d40f7be8a8a0f44138712a GIT binary patch literal 350 zcmV-k0iphhP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H+(|@1R5*>@(yLr}Xo! zwaJw>TAu)0@fq+D7XEg=0S03*rvQfj{0$8A5x_J^D&7m@uz``yz7)VHAg63#U}yIN wfu{U8DF^5_}1SfTElYL3=Ujp*aXUpFzd62Qv~m2hBnt3N*;`8T#JN?rODKDUeGD z=;<=j`|tm~c`JB7LN@W$!tg#Lup4WV0u0zXK`W<4W&$jElv}A#TCg&ERPJk%2Qu3^-{Sl^BO!y)YUu!@;NlZ67x z+ljzN0gG-*_O%iG)Rs{f_=UH}k$xYWDE1VTIO zrSgTVBlB^&L2DKEP(V4fplO57Ytrl4jP5rZkcW@DrVB6qz$^TI>bNk!j+9VgCf+XO ziRT@M0$%$Gx)owbvQc<);@g~+O0~&gFz}Z0r0|>XpO$v~{`SBkSFe`^-4kEOQ+n>* z$Pv5Oa5l70$h!9!~tz@BK6N@v!faPEH;K_2vs-9d~;x1m8Vt zv73JX_|ZziQyT;?4-R@>F>efn{Be)&_%Az$&&iE^fl)2(^qwE|x-h0(!B%beum|Ch zqns&Vlqd?iF!dDz0uA=M;9khB5J^_&HnE9sHw^DHf-mIZ+rT8JXQ&i zAZ`7hDB|Q1DPn$*!5ah&gsTXnD6}Ahj|o4#3jt#;fPQ`ygY!8*Tp+^0-JFHX%=zKn zZ6UQFJ&hDU2#W|2s1KZ_4YK@Tic7lqLO1*n#fBfg{rDd^F;QY0lHx=F0000baBX`Pm!>)p%-7Yy82S-8e{@8 zL^qd$X?5^31p4PtsOUMgx(KJl*z*jXSy}Q*UfN?jU?X;ZeBZY- z5@Y{MS>OMBY^6&hP#&iMHzomC77qX>iL^LP&45+v5@7Ja<4NfNaQGKs?id`jjNokn zD6rT7b1CZ{=`smQ0Q+^of@B$#VjcoD4{Hf`r5Fj+fi&3w2?*TM)R)Hv z&{#WcfKSx#m(%V%z`s^9@0M;E0Z;|fj;sRx5@>h?eDs{41i&VNVqXfdGASxRUjrlp zEzJReOdf9l+d&|;okIV+?V7Ujc)#mN&KDyEY zH_KD*!6g9#GKk*j9(_;}ix)I?((A$bD9`{@R}!OWUkM=aY^VVZ?0w6DHulNkKD?^| zt5g9r=N^2Bq6)w$!B71Cx;QI=FLhu=z*qr`D7vm>P#%yF@RD;5x6$>ua*JGoE;2%a zBX~c?I@kNGwU&75;-*##cvS&dLURJJX_bpE0YMdL&5)Qu$M+qGyQ3|EoLFQou5$H` z4@Y%@HDOC~;C%QzWZOh@roQstTh0%Ltho)arl5CWMF4BX;Woh9xNNcDNBkg;rv`-v zZA#n zb924Dz5oCJdz?y~%}SK^O73%<_LTO$q+0goDfafP)zxa|N-1JuT0ucUX*qpc00001 zbW%=J06^y0W&i*I0!c(cR5*?0lD%!jFbstSq&JZX40r(-8o(o5l`>t<-3=QYa2-KS za1bn{WL_le&+bztENt`fnWCi6m_HWq@j>V*Br3$n5?RrZKA}mEp{x)XQYi`r6_HpU z@tQ59%B*8-jV!#}czs7GS#sPS%XNcYszU3EYp`vV*y9Tym{`J6EIO_i55CWJSVA1q zf7@y>#+ku5_jE^La6L7#{v6H+FgWvX1LRLR+5NOT4#X<^tKAce?0-rD!~|@q81LdU zn?eR=n`cxU3NTXJ?!bVXkb%Lp)n#^IG`47iBw#RUCny1<(k3my^gIFccJcnO!wk%E i%Ndxna0cR+f%yTsD!4W+OLSlKNU9I)3) z=|O^^)HnBFA4b(76r47z91Lw!Vg=j=<)FlekiVeHInZ7dD@|cU)X*PE(N@Qnf~=fc zB9PTLv#Ztq&_>s`binM7_u2QpJ3E^9wIuz^MkF}}&`wWDpuF~cV2!L!sX$udSPqHH zWKJCSKDZqsfd~mk_3G0Q2};InN#!aHNg$;)q9op}(n3fAStEofZ&11$su4#8PSREg z5c?j19XJ`5K+4@jU^`b0OCT+u*JkI;M<0g)5mF|zPkwq5S|Lh^MqVj}ONatlLk-5+ zFhJ6iNum@kg=&=a1n6Mwc!8YjTn0#k0iF`_DNhOjxDM`Ha@utjS<--yQ{xnwG@Ok( zB{j0B2qI+@nRNj5N8JG;{99sN)l;J|z+rw2XbLB;<6X>QG^tI zk1-4{o!JDvIj*pXK((kqD!R#79TH2(EHkHqo>;&Hlqv+;3==G+MZ7VdrNlgs(^&#J zo`B0m(0S+2K&w`&be_%;a0TFP1ju|*StEsg zruyP#`uc_WA}x{yf&kqWVfMZgpTUPO&u>*Le5&*U!XD1Aza7|L6C)pqIUqyL*x(ux+KK0sjKH30(X9X!^yMu2gpfGXW9FJ2oSv}{0O zcT2zD*dI@^0D6O4l2)-2u)AM&Z|!;|yfEyVk;RIY0D)eo?UfLZce@b~ah$=2wcc@? zc^7~DtL{sH>qUH^{!u3YNVQfP5&&WXf9ZC*%n$StfO{g|thEtnc;iwW0hJwQd4d5$ zjZMivBK+Z)`2#Z<8wMosv0_a>{|bW%2?Vf;2N^T98xs=n68v@ykGV-(gs!Vr;jER( zKjZ}DOmW5nb6^vuebUZm!#5#5VzJnBf25ui%H9)ytyICd90wiw)_+2&!uG)APhzVHu81g zTd%Vh#s8v(41i@Y0Fs+^Yil0?@&27ZDL!dikc6I6MQe8?^lN|g=r$xq4kOj(&EM4- zcWXT! zNQ0k^mhCVItYPzOx*OjR|6-c!^>URa>6F)F=7>s2f>|LaWzbj}Xhk*dwGpJGW10#pQ*dc4)EE|4%>^KYy zI4Tb(16Tn8_PBQK$oF4_<1hs9u+};9svJ8E9A6_~9(#eb<1hqp+?6^#4^Vd;h5-6q zDc1E=0LNi4J`w$v6dU*e+hJHDe?i_@% literal 0 HcmV?d00001 diff --git a/graphics/pokemon/zangoose/back_gba.png b/graphics/pokemon/zangoose/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..88357e1823dfb6a770ad65239bc27898983c0bee GIT binary patch literal 734 zcmV<40wMj0P)@j;iEkd}a z9-Gk#o63}?9?R(D+4M9|xn;_*jE>paj99}5)Et5wGsdD_liPt-0z=f!<OimRVi(|{{^RFhJwvI$yeWkRMMxbqpgEKv ze@%K3=p_L98L>hMsF%tDV;cqR1R|mw)a_8t(t?%1KEom-URx;Il2HibCqh6Uii~&| zTQbDR6P0%|5i0OOzNyWt8gb@$EdE?P>_E?{ zEm1-|+bsE~3D-)50!-A2Uh1Na;F3PwX6y|q$IyDDxXswUdJ|jkfwKq}0%%Qiz!7v- zfR*Q2EKJ$4vjV9(#77)v%9e~h*RJ=d40y7*nz6%oYF1PO7t}{!N3+BC3OG8zXU`^A z(cAB`M+5xQy!j_W((B(kpljgz p6>y9|rF`W0>md22z#P_qT>@3>FUTQ$Ew@AI QZvX%Q07*qoM6N<$f~4M9*#H0l literal 0 HcmV?d00001 diff --git a/graphics/pokemon/zangoose/icon_gba.png b/graphics/pokemon/zangoose/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..e0485b0b0f443c86aca5f0b12d5afe7e3684114e GIT binary patch literal 419 zcmV;U0bKrxP)i+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*IAxT6*R5*>@lCf@sFc60Q1ok_?mZ6sN50yYN50wY#!({VN1~xkM zRZ_gQl0jyOL?oP(62rmNwY}{=`ObItC&b?hzXxvE<`M)V2Re%Q$xbOCepm)ZoXfTr z7Y5#4J4ho_#nD_*OJ~w$%Di67+QB0M=L$Q+ph`VLjwS%mOOFDma%Ab^=}(vB8(zGxG*A+AK%=MKz>X$^FxszG4O54j}W%s--Wozh3tRt#~pPamB3{B+tC03 N002ovPDHLkV1kz}y~6+i literal 0 HcmV?d00001 diff --git a/graphics/pokemon/zangoose/normal_gba.pal b/graphics/pokemon/zangoose/normal_gba.pal new file mode 100644 index 0000000000..eb0ef7068a --- /dev/null +++ b/graphics/pokemon/zangoose/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 197 +255 255 255 +230 222 230 +189 172 180 +148 131 139 +106 90 98 +255 98 106 +205 90 106 +139 65 82 +255 164 148 +213 139 230 +123 106 98 +213 197 205 +0 0 0 +180 98 205 +123 57 131 diff --git a/graphics/pokemon/zangoose/shiny_gba.pal b/graphics/pokemon/zangoose/shiny_gba.pal new file mode 100644 index 0000000000..82487aa4fd --- /dev/null +++ b/graphics/pokemon/zangoose/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +148 197 197 +255 255 255 +230 222 230 +189 172 180 +148 131 139 +106 90 98 +49 131 197 +74 74 131 +57 57 115 +90 172 230 +255 123 82 +123 106 98 +213 197 205 +0 0 0 +222 98 49 +180 49 32 diff --git a/graphics/pokemon/zapdos/anim_front_gba.png b/graphics/pokemon/zapdos/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..a27b64e0075c84cf36d70c6c59ea82675dfd5426 GIT binary patch literal 1576 zcmV+@2G{wCP)a*2Tp00001 zbW%=J06^y0W&i*Mrb$FWR9J=Wm%WbLMi9pdTv+4^5e{r1U8=l6(xfts7)UxA@Bpzx zdS501bndT^8^u5joDIJL1*^KsOKlT&T2swc(dm=`3*^A%ZD#g^q;v;g86?O+C!M%I z&dh#r{-Y@RPus;uN8>0FQTj0;9SQu~4zFzn|F7ay3rN@7xVs^W)~iAM7}lrojHeI) z{Aa!B0j(H61$|1_qYd2&X{7f6Acpe%{T-$P5G5Qx6PK1g)g@>S4k+FkjFBe1-bP7f zfwj;j<0XK>?<3ARCItx>^8h4Vmzq}qCArW@7y!@+v|xi+psavb4o5>E6Z35g4FTv? zaH)9d7PCd*6bTCy9^ky@6vVn%5}<(1Ma5=z9%}?Nmk*(L!RGMeysR4G=1DHf+K)%^ z(gKZ;tgyg^1-Loie+O8rAwu`O8xM;l+s*<#n0=a!PPUI z<1Sb$&ud^|E6EzZ(0t7W7zaqzA1DXR_CvVFE0F0cmE{l`r$MCk4 zxZxcU?bylDlSwYxB?7r$%AE@G&G>i%aXpn3L&|F|4n9A6g5TTAc4+~*@8V#51ds2- zR84U{kS}p_c3m8fkMBPEaxzJoaR9e#-n%$Cdiw3l?&s<23L?*bh}C%;Z!MPL1r z)CfpRY@^P_r$=cNA5C5z+rxy~&i28(b^=Wdc7-2LgZwz8YOv@U|ZCRgz!jqX3b zo8c50SfX=rcx>Na5cOSFQdwY@2rdq7E^jRM1EVt&Ibx6n+JlGm9{kW6^kn6wC z%x%E>h85oh7PkTX78mPK_B%^=^BV1)Ed)lwof>C}J)Uvb0*pxgW7u?l6MH=4XylW< zh)KAg4FYR&L0yIain5|WFZ$!sk~)#!$TlV#thk@`Pj^dC5w;uztT1QBB?ak^1}Wzj z0D<_~3UfBRqV9lo%R}P30^o}%&Q^Qk-vL;gmgNc%SPK+x30c{-FlmDI5&MZut{`90 zoOD@d=p#ro;3I^$AfP75%TQ>+uY;`GrLlN0_09XLf%LkhfNs!TH0I;0p zCIBO+y#@=R-O&+k3CSWA@e19pgE|_Q!>D+-=>Wsr@Pd>A&iu|4v(1?U*xYp%`~yn! z)y8Kq(zcr+pqYDZt=Sdb1YsGeY*|3KahZQO8&>;s*(g?E8#HU(c-`)*!H9sF!XBbs z+TKR(sYTK@b2byy2FailG$j?XNahIensGrw7{;m6232h4GsA1`fS~QmK_ipQ_ysj6 zZQXhYSnjD4^EqxV3LM5YG+KlJNOXPBh?k9RU+~q2Dd47blZcdTX76nmBuuZoLs?bz ztm|Mx|FBE2qHBSA=^hesLx9jj2fNa2FoIA{O`%_`9(aU%{wMerD3@WuD98j2yE@S3 z4ulM79HY4d^Vitf^xnOUcRdslT-YoVV=i(0asnB)%Em=Eo(LICFENhoi?(hvQhJh* z=qIY!WXefNw|QYr1i81%p^0Cq9&RMx<<&h2aelqYo#{9 zw#;82)R_44IH|Er*k2D?UYE<{lB#d(Mv%DnD~wI;h*#P~T?gEiG;oE#pi$f a=j?CixfbDI%bd*s0000a*2Tp00001 zbW%=J06^y0W&i*J3Q0skR7i>Kld*2wFc5~dWbh(BMc>B@2O$vpGy&uxqk%|MmH>ud zfkHcZJKB?$!WU+j0&6i)Ly}n@Ny(Cc!duZHH+aZ>`tCoH34*Ws|0?{r2mH7Ph&zf< z9PZ37q5dmS?e!d3yiN>&C-XC!vDiFK6%tPjZi>YwSxx{3h#Ce(wt0S=rD!E$3vjic zZ zmHGjd11i_XtLZ}%C27X{)A0sPZFLnnfc_Sx>&PdlhJ(|es7vbaxQNo|#V3Hn7OhPu3Y0pRU8*?|wt zuU-H+TrR5s)&A&!q8CUt>Pu|;5k)VM#kj9rPU-*5Xr&&oH_`Y#y_f+x^0Csss3!xhILjmU)31|uEz-N5uf$}F0IxKV95nu(< z01te~PzTIBxm?D|09If&5BNBR0Tcn<(hAJxHJi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00001 zbW%=J06^y0W&i*H^+`lQR5*>@k};0NAPhx0LAcaU8#h=}a+BGsrl3YhW7l2+Lo%e; za;04tAb)*-B>bHFJLS#UEU-miCV`_CUoM+62QwnO91Pg1Gz3)+@L?UyR_ZDYRNzT-~&F-Aj}Shq@=2pKu5_9O}*{98_e+!MyJ{d{EYK z5E?@r2XH)h+i+MJRK~*x4&eaeEess&69+G+q2u6E+UnVajzeCKvk4ss_ilfsz5#fs Vr?(NN5NiMc002ovPDHLkV1jnnpuqqD literal 0 HcmV?d00001 diff --git a/graphics/pokemon/zapdos/normal_gba.pal b/graphics/pokemon/zapdos/normal_gba.pal new file mode 100644 index 0000000000..5980cfed4f --- /dev/null +++ b/graphics/pokemon/zapdos/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 255 255 +222 222 222 +156 156 156 +90 90 90 +16 16 16 +255 0 255 +255 0 255 +255 189 57 +222 131 0 +156 98 41 +255 255 156 +255 238 0 +238 189 0 +197 139 0 +131 82 32 diff --git a/graphics/pokemon/zapdos/shiny_gba.pal b/graphics/pokemon/zapdos/shiny_gba.pal new file mode 100644 index 0000000000..fb7840ebca --- /dev/null +++ b/graphics/pokemon/zapdos/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 189 +255 255 255 +222 222 222 +156 156 156 +90 90 90 +16 16 16 +255 0 255 +255 0 255 +255 106 65 +213 65 32 +156 57 41 +255 238 32 +255 197 0 +205 148 0 +156 98 0 +115 57 0 diff --git a/graphics/pokemon/zigzagoon/anim_front_gba.png b/graphics/pokemon/zigzagoon/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..ba726a26606daa3196c54d619fffb76468dda29b GIT binary patch literal 1372 zcmV-i1*7_jP)$#jK0w)vW*j|D+%Q%{d^XlzV$xN)P}5dp&+V00001 zbW%=J06^y0W&i*L+DSw~R9J=WmcMTzM-<10L;*K3EaqfrjF^pBr{M&13f)N-tGJ8g zlQ!5@6i!)+SQoqm?^0OEg~eb}Y!;W%C8aD5-{IVfQ z8Ab6cK=8ivoj1de?}w0w`ma~up9IwsA$z62F%TvR@X(yjaMAnXtaQ3RyDqelAMPOR zb8$3o_(*85b}4kQxkHFW$eDnejBqKfkwBhEEUOt=Vreh}Rw!T&4K7n@vaq?3FF(z* ztfl2iP&ic~md}PJk&8@%RI~$4`t^ckg{UtFY-1HYzV#d;ERzUSG;L$;u)~;XYT9z0 zDk!LXf<>98mVUX2Mm~wGGn28((XBzz!RZcXp!AxpFzHfNud7X#-8!O_TF`HdP7zM2 zIhkFnsu~kbRuyp&m_J#(I})rsQB}r1P}Ox?lwrz!0~A#GMv{htcbJ-EnXgr~6%z(C zx3qc~H?iR=JVBXZp-sAp?%L)KJlT%;Zs_pbG*P3nM68bPRZWDc;@G1h{GaN&UNjg} zBwIKpRcx^jJ|-W1oc^~Ucvh4ZBZ{|Uz%Ae6l-B4A;eVs+g<8_c(1hbSb!v+v98%#U ziUS;tSIN$c;SQ-(3S{?xQ|^mShb9s`u=cjyZZ*2(e%1P|_~WY@I{niu2KwHWfl!b zUr?QX5s9o_dV=xaUqDP-L~@LVrs)9rz?>Ga42A#BrSyOfJcDMF1jd?oW!hpT2|~G? z_1=b5Y6h$^g7_$ex}|9elVt-H*d_?k)vP+>!F?Sy_w+!LB1| zlDdR+P+tzNHVu0kQOXRnI~`Fa2?DmVVJL<&ZQw7KS&m`)UxG(gLpngd7$4#by$D!= z>94NKtUAJniQ=nWT{j2mpR33~2bij6b)uj(5I{1*pvx7RnPNYDXAhsc4uWSUgM3YE z2GYR>Dn8`HVD)|coI!LeGBU&?OwS79gJO+>cd_U)1*2P$cce#-0p=T^TIGBQDE`NN z#&$8f%^2P=t>Tm>w{0<0w5iN?^`b0O6o{rc8o+}iMhH`&l+j&-0zM#o83PBThf%&4 z3J}a*#RSe^p@lj5u>JnzF~#Vnl5N*vtCxkOj?wKn9vw7XKIRjs?d>0q zzr3?RXs?E^o! eqlbt3U)P@uC?j{!1b)8&0000$#jK0w)vW*j|D+%Q%{d^XlzV$xN)P}5dp&+V00001 zbW%=J06^y0W&i*JDM>^@R7i>Kl(CM}KoEw#Y0_rxpoAhEJ1*SiWbdJrrz3ua6-j$V zXtAweQCP@DL^_lLUAEw%DA0+*2;~I`G_=gDIqB^69TlRviDXOpKh69*GhWAei2oey zZ-6_vPt6@Cy#sh^p6P%=;=Jw9dl%-F1uh77-UY-aa|S7ZciIU&r&m7$3>&~d;}~7A zzyL=J7{(YE%we-T07k%kIAAl0deC73Q=FX*!=CgzEucp^pU*w%$qa$6Hn>tI+?Scm z&_rr`Kz$ZVAAeB<0lezaC8npC5n!2MJmg%|0G;Bc?ZNXg41vJwl~u!G0FlwDQLD8L z^f>r_UIW4E)H+69RNT$|8{qs`YiasQsio0tAp9v>8P-VXJn@XlV0C%SoT%@U?l_i$|L*r73**ioZF2spW2fchuH4IN__VRou<+hRTCXG&x2IDcZTJu}M? z^39Tv{eeuhnvi!L4hX!fY+YTMLr{#j z$#qMoRl-Y!E*1i=KfP}{AYEVa6jE9xNG2@+D^P=V8kp}Mja2vEk`M83;x{$2xxW=a R#7F=D002ovPDHLkV1jVMG6Mhr literal 0 HcmV?d00001 diff --git a/graphics/pokemon/zigzagoon/icon_gba.png b/graphics/pokemon/zigzagoon/icon_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..acd0ecc8c295953ab68e292d79955c01692d960a GIT binary patch literal 347 zcmV-h0i^zkP)DV$iOn2oyBTrg7)S>S5RVvdl&fJVB6+DT- zxJsXFx2u&9qg|H23Y(bQolLY!6}wPU0e6cMGrVC4#s<&I`%ed8s1TepoC1e1X4?Bf z9M6Wfkf|a^>4K6y0*5Vi$1x+n(1jJ)$}^R*cqt`wS|;Sz?d$8!@Q-^O+IhxdzUz){ zpDAA~E^3Q|mrGqB>Q9G*w#2YdZy==_y^d?6DbbHTtR0)!(-7dnbiOQ literal 0 HcmV?d00001 diff --git a/graphics/pokemon/zigzagoon/normal_gba.pal b/graphics/pokemon/zigzagoon/normal_gba.pal new file mode 100644 index 0000000000..55f6178cbd --- /dev/null +++ b/graphics/pokemon/zigzagoon/normal_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 189 131 +74 65 41 +172 123 90 +205 156 123 +238 189 156 +255 238 197 +65 57 49 +106 90 74 +197 172 139 +230 213 172 +255 255 255 +164 32 0 +205 57 32 +164 148 123 +123 90 74 +16 0 0 diff --git a/graphics/pokemon/zigzagoon/shiny_gba.pal b/graphics/pokemon/zigzagoon/shiny_gba.pal new file mode 100644 index 0000000000..fe2d3cbc98 --- /dev/null +++ b/graphics/pokemon/zigzagoon/shiny_gba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 189 131 +74 65 41 +197 98 65 +222 131 74 +238 164 74 +255 238 197 +49 49 41 +98 57 41 +197 172 139 +230 213 172 +255 255 255 +164 32 0 +205 57 32 +164 148 123 +131 82 57 +16 0 0 diff --git a/graphics/pokemon/zubat/anim_front_gba.png b/graphics/pokemon/zubat/anim_front_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5f98e0c13b7d2397875695c8b775a6ee16291940 GIT binary patch literal 914 zcmV;D18w|?P)k)c`^Z-gKATrQi!)bP-l!pKr zgo*@ez(Zh?t$G2Y*|H>xfeu*;DS(FnZBpwlB_&y=#HZ>2^@9yadY|9>DbmtUg#NR@ zL%>ysm%i7&Fln92a8|T`!A$^Z5Kd%2UPj{&KP3C z8dm4;*6lndgwE^3Go4>{I=F;{UUj%Q&$D!S-RZyy+4fj4UEsR~jHRgVrNe*@C>}FP z>mEXWy<1uuLrS;f3@DZMAgBQ_NxyUfP7EN)f6@+6608BT^!5^2M7R|hBx(9I?*a&i z+gmA;^vO!A;I#7Gn~Hv+Nm?fDW%$@%T(FyG;&C zK70t?O2bNOmWkqQmUP8dZYyU)Y4UpYm zs0F<8kNr^vL=b>{9U|%nNP4y%Rf8lZ*Mqg0MIe`W^smqee7c& z`{;?G2Mm@2`FH|d-rASaKR`g`A5>`n00EVM&{n8eg3sC7KX}?dco1Ov2T;4|A3(tL z4=}Lv555l*jen37e&Ou=!zsOlfSrFhoq#2F{vjf;ipD=gL;isga6S$Hz_%v8BckyS zyvOA<{(+Mano&nJc#pI_P(U=Y^6saLqFC1em7*)dU7Q!2(kMoVhtf7W?g#p<+!tYn z2?LyvI~6q7Ue%prB0|6_i9!mh0gq4hwAw(ndX`LkhXp6bR>1($)vVOGAbM$80REib zuS;uyOTg+;1CHKjkscBEwO{6N4+U(C#kzzoB5$^TnrOBohKLnv5!Rdw!}Pn#xLR|L oXXY7=$+Szf0OT@jal=oqzxolDSmLT(Hvj+t07*qoM6N<$g3%A9*#H0l literal 0 HcmV?d00001 diff --git a/graphics/pokemon/zubat/back_gba.png b/graphics/pokemon/zubat/back_gba.png new file mode 100644 index 0000000000000000000000000000000000000000..5589e57676d594581b960a14df25acc2ee540ed7 GIT binary patch literal 526 zcmV+p0`dKcP)Klre6@FbqXCc!>8NNP~eW_bAdHAPD8Hg8)%m2Ln=W zTauEUG^WM^9l{|I%%{&Ui?lJX_}6hrxBWxJuXUNSPy0>h^Cz}EfDQnpme+t0IBso$ z-+K>Hi0Q=t9_=2;a1Ydg10}8>4cJ?d+MbPyKu`d4gvdZ72U-PV28>)H`i_7xPJB{c z7a)lhSoC~5smG;L!I)By(6c}%MR5?``hdjL2Z{jJc0I^T3f+9F7kPc}99KY-pnkfguxdgugL+%{m`NyR$u#lrpQq=pMybJE_FCZx@y%>7sabSqHUyNt^yGczGhvnFn&=w9`NeD%9ss2;Uh!w~14~~I-|9P@ QN&o-=07*qoM6N<$g0DV$7%n%h`b z+^p8Yu462PLOx29kk6PO54#8A^W4us6Sa*{ytzq$bW|h2^29O|d#Tz52(v)zuB8_U zTnhwUw}2}ELR+16`9qIzRadRes0PrDQf@>CglPjT*AD%*eZAwr)8Tfrmh!4RPsPPqCr*@Hm1_5{Hj zPMmP*an(d42p{5k1BHK10=!nUL8Fy8(&42HDPSm!XAUymcdOPBgn56}XEF1Gsn8La zpt5)6FJ<>*Xwn%-jr`)75ZI+K6%zHBO%=E#_z-^g!f-NnJLZfK!VAd=d^aqjk&lCD z@rZ{9v$=+NnT|HLsm3$Q`uxKG&+0UP$nTIdu2>ET+STST8RI3!Vos654WIu<6?*m8 z?}L*`B}>qKPIsxpR(W((-~uBdPz0az*($6jCht3uNVev7 zkm=gs+d*byVI#ML?6b{1?^4Sh9ZfYHlE(^(;m0jC2g&?JoDh=Oi>fpSS!HMrvhaY0 eE#Fp-CFczX^%()URyIEX0000RLNj!(Z3dLYD~8UFw%0LuwjY$&LzV8iTAu?y&d00E$fTl9a; z5MZ40c@5YCSnUn~;DBPaDwfQAK(Iw1NGXqGHSZCllmi%P=X*%Hs-Tkkd^UGLF3is9 zMe+{hW%W)zEhVcr!D#(bfMBm(@a9}A=AaHHwDqMh>eq8^k|6D63*Zz6Ekgx_8z$2> zEhAuT8&CK!2@wC^@`U>hq6_zBG24Hw1F)^fzEoc4soO=0G-V0IeN4d~$Lxi<0-vtf zfXMDUahl7zEYZ0r5?7F7W)GB4c7)GrL0*10000KRLhRUAPj36o|pLl|8||w*>)f>_tmCS zrPd}15c@d(Q~+NISn>=*R0!fRV4xw0vP^Mo2yc}5O~6nLogfhxoaHmw2Z3-d13_VK zqT_`z;#w1(Ks==xmy?eYkWyl^V}Wp55YIWrl!hJ=aB@9!z~HF|C?7(tOu9=_f;6&7sot%^8fgS&TK>BiE^no#R(ysvQk%5a z{IQ5y1Zh=+<7R`0()=E5G6ntG+#ati`}l_c$1b`*tj~~loUy$is8$g-DF~Llb1|k+ zJ>&kKy8tEo{y#Yxaf*M9_H+HGxy%GA9+{7Qk3$cg;#l5WMV?flCsDeCn87&iBK6@Q zF-@b(+_!`HX8LfD$>ItaDzRX8rinuAo|96CoE wDJufhh}A(>4rQ}x4zlrpj%{aajV+f~Cx87X>Eb$n!cd z3Zn6M$o5^LEQ848-~@X~HtGl10B`k?X2GdR3aO9&U=}}`Dmv|MFrO{jjy1}s1={^> zaej9>X@?}Zn=hZ2*3?4m3=mtuR8W7lw1-wB&}0vu>0lEe{=d~5b``{H?Y5=$sBi!j z)vepAuHvbqMOM43+67dzChUhneG6j)qJCM{N}U*hXJ3U&vld=YlSGNC)la_lJdcVY znYSN%m?%rSfO3WMq6IpUCq4hV1xa%+8>>Mw=*$l~^0QmXb`5-Ae_3v%K n87J&|KnO}4=!1U$y2d^Mh_&KW*oV|`00000NkvXXu0mjfK_0_& diff --git a/graphics/pokemon/vivillon/poke_ball/icon.png b/graphics/pokemon/vivillon/poke_ball/icon.png index 1ca199b96b8a2a195cad7ad858fb8b0b0a2f1e4b..7be708eb953092abc2f6fdb7c7a21926ea9bf8e6 100644 GIT binary patch delta 439 zcmV;o0Z9Jv1AqjO7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwGWrUr9tkR7i>Kl--VmAPj|tCXjH^^ZswUr>%~w6y|=j zOvXgdu|HV8kx_-eq?=Nh_6(98iBT|v`jh+|{8RO+_@uVe^=Hk@+PXRwEXa(f$0 zW)q>0F(%z|0$LFIm~}1uX+^x>rW$MUMZHrVqd!BSqVRpjfNJv)FN1$+Dt6^1QoIZd zAP}uuM3|yaO=_)7L7jiiyQIZ*uSK)33NNHo^&Oey=q0KYsrg6sLKsA9Zs6Q70z|Bg zY_JqQc(8u*xeC*_-zO%O&%PtAuQ zJ)xPGa!3NtUBZ!m*J=|l3Ea(yY=>*B?5D|hP h8wP~7ovpRDSU(Zj8j~lh#z+7F002ovPDHLkV1kbt#pD10 delta 424 zcmV;Z0ayNj1n>ip7zqRe0001qplF?uO+J4B32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri1_uu{6lS#@bpQYXQ%OWYR5;7clfi1kFbszM2Eu&+m*oLmSnt`}c+f+7>tToW zZCc1>&*TJB*g@7ZNWceqDP3Z_gB{0o^Jo1Q`XvkTXAyn?5%o6z zf*c4C0LI`ON${k3 zOaL5ly_FaN(@4EeO`8w|N{wf_n*@J|{~yzY^9|xI8I)JnWyRTc{RbjQ5lRG}pquTGr*Vx7GT^=H!f< SxwKl);X|FbqU#%^{X5&;S4J&NyWYjT7#x zH3*5$)OHf*Jsy85fUgEjeW~Fo2~jzaVk+>Mrg$t2FO~Xbz^xd%AsnaN;xpNY0q}M= zNaiBCp7OmLDAE9H%|<;oeq=yn_)uWqGE#RRTELEt?=uIQR2vM^!t{UZRGGr>1|~3A z?9mGht3>QOOGvj?=vpN$doXjb1+PvO=q+fECPxNVVFSluRy(qh!`&tZ&JByeOj}Y7 z79VQ1=%{2e2^47_yGaP%s;&op#X^!`b^HlU6U^G*(EtDeTuDShR5;7clfQ1mAP~lRgA?jbR6l?_Wbx!YLLMp$ma1g% zVix;hy7wLIbTCqN(8PniK&evmCzU!@y^SB=0eAO7$e)G%0W<;aS76Dci3uv0wA+7P zRFaSa0t7&)TlOt9K-;*IkVza5ZK&8HYmOM#cR}&|QidiG zlf8>=1YnPwEyVzgp7gbho8}N$9XEg8=(|Y(`TyZ2oI1!zo0es*m=XZf(xs)^r9LHI zG-^IM38;0{D0a2mh1P?nT4v|e(gUo&E}mO&mvh(mip;@3@Kz55SlVhp~=;GFjfr_>9iT@m0qifP8#NK8PLiZ4Att=}oGDJt!S==MVk+ b*Y)uUH09^1r298{00000NkvXXu0mjf)91pi diff --git a/graphics/pokemon/vivillon/river/icon.png b/graphics/pokemon/vivillon/river/icon.png index 5cb09d29bd5bd5f45a9677955860ff082aad8837..475ae4e9d91b0fd43f97ca8c3e904833ffaa7a4f 100644 GIT binary patch delta 426 zcmV;b0agCv1M>rr7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwGWrQb|NXR7i>Kl*y6H5Q>89~*Q^)u1X#Ac&0YZIIsz&yU^-

m0^wM~EJs33m>K!Xii%S|95+#(~O-qnP26SzCw_+_AU(yR1 U($196>Hq)$07*qoM6N<$g2@=QK>z>% delta 411 zcmV;M0c8I31LFgb7zqRe0001qplF?uO+J4B32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri1_uu{Caz*k^#A|?MoC0LR5;7cld*2YAP|OmgA*@6R6l_G2B{)t@6tIV-r@~5 z`&n^Ryd9TRG8>dCwSiRXSoJnO{^N9aKaBlZ#2oe60VF`o>$BS`M@gVI0SiJ{@>+2VSBX<&aaKd_IHKrISoU{A^>!3_NGvq({7?WGad+gHK_E|8 zQ4TF3h*Sg>?bN1%=Ka8u7Ak3lKts$w38hp=k$O zzVRCDe4=s!(9VbIgT$$=K$wFGwE{+P?7<)O``6v#6QIc6c3WNN!TKl-rKOAPhtk(icm}^Z$RlW4oIau<841 zsZ=SN!x(d!kp_zIxpT!WYd%?P;Y3c8jS#|HRSsdvFJYak4ejA~z3hKqqJYQ*(BQ(Q zO)2%PNo|cKns)ckx-f(~DPyuzC8DA}d6|CqLc}Y)a>5s4ZN74V_lA9Pqo`*9ubW>y z6uRFzgZ$XiHNIW;YNW delta 411 zcmV;M0c8H}1LFgb7zqRe0001qplF?uO+J4B32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri1_uu{FW0{GQ2+n|MoC0LR5;7clS^vEFbsx$1Ca}4XbzCxV7lqL_X~u{Wo8o) z$r+qk1&pjtyD=EKZl{UuDRfz?oj<*h^joPvv+x730^VN`lw&0+3LHnbw?#q;6excH z9B$b+V}NmvZ%>>9@VEg0=wlf?*}Ze<8OA+8NnIQE*mYaRLscCByK(wXxxUs^`)hiX%9j2~JOD*;ZsIWAK%s8cq1D$Z9e7-Bi5-({H>zr_oe3KD-4%CSN~R{(H+E=LU>=R%8Oze2!nXCj<2dSOZc zz2_WI|Jm4|cDa~YYpZ_6cv;KD@{AC zd5uBVb>e&j(3*4cLBi4&KvvOGM!*18-RXmW|GK+<0F2r94(+y+o&W#<07(Z$PDHLk FV1lv>ti=ET diff --git a/graphics/pokemon/vivillon/savanna/icon.png b/graphics/pokemon/vivillon/savanna/icon.png index cc12705dd82ac1b928ddf35aef23588e19a92323..7c58f606e6d33f609f30c8cf7eb710e98af765ad 100644 GIT binary patch delta 429 zcmV;e0aE_+1NH-u7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwGWrRY^oaR7i>KR9lV%F$kMxl#fUR-~YBXWFDOc(*M;` zsZwiWoR_!lPZjW!fRyJLib2qb0S6sH(^O(x5KeSMZ4HmE2ji0fYCXjcLU#h;_DwK& zL$8k4I^#AIgFsvYTwnZXh2wo5P+ne+_dbo_R=wCy4G7`c0}RvMzPo>z1o1Bd1$OLO zw6i2wq?W>_qC$aWm87trEHQ!LRDr{S>ePO%MYUJ)2_eIcNF5_W0UH8|ERKHo#Y2Mo zoimajTj=pnS=TT8zg9K!A>Tuual`U}U~hFKOvWf^b(LZ!!JCNt_v`|^Y3Kh_l9@}6 zxENDVIf2O_7*iqw--B(OOJz{a;h{}Nf_T6L>B6nL6GY}`1AHV1di-jx1eqx1M>rr7zqRe0001qplF?uO+J4B32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri1_uu{I8<$MmH+?&R!KxbR5;7clTB*FKn#WF2ErGZ&>XKRM8T`APn0Wg}3Ja|JJk&-A2K8PrUO^ zlcoVmw(X}D@Rfim&oLx}pb-NOI)bcIiETmX=myCdx2hZCN&u?f#cl+`^+_<878))A zZavWmkWvC%cYZX(@tlVSY4>F~jSLbzs-5-J0IOx}0mJmL?_5lREgpXa3LH2zDZ#OW zF;ZetQmR{nXqTk0o-7fm(XGOb)FP@w`Fk&F7Q{M)3^!tXm=JgvY=Y2YtA`IBCb-X> zk^I_1kEhCdeZ&82wOT&R&yaUqvAiJITWtw5Vy42|b)$T7t|HYHLlf%z%b1XKRj4)(fay V8K2?La6|wA002ovPDHLkV1f=Ww4VR~ delta 421 zcmV;W0b2g_1MLHl7zqRe0001qplF?uO+J4B32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri1_uu|2EHLb{r~_0P)S5VR5;7clfQDpFbu~120Fihx#j`F8_>lqV;5kg6J#qJ z*}}6Xgv%zYE+L!T^tkv>d)Kj7ZTb0=9O;vV__J_700|)f1x{EJ98_RwJieMFAq9T| z1iwSCdYiU+xy=TuE|=wtgFzmLv`F@+@D4LR8(O|g0stN83CB% zEUGyQ$kI^7LmLq|iU-g1%?S|yKSqCt(+%RzrENJ^+5~_dPHC%dIKC#k$mVt!C156- zusrGU6siDr*Pdd4`s?D}yTIL{u8p{c{pqZfl5SoBZZ5GlL$C! P00000NkvXXu0mjf^+UV! diff --git a/graphics/pokemon/vivillon/tundra/icon.png b/graphics/pokemon/vivillon/tundra/icon.png index fa937ff7ca466c6c533604228702e70f058a0491..6347455e81ef53496093e27318a031b54d4db1c9 100644 GIT binary patch delta 434 zcmV;j0Zsn*1N#Gz7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwGWrT1iAfR7i>KluM4pFbG7G&L*kF?`p3D?D&8~}bLk;4ipZy}p1qLEUZnT!mqqDqA4loHWMVULmn+#42&gGy^~ z-D2?|;~>r^8x&(pdpxtO%L|O8@`>07*qoM6N<$f^n6ylK=n! delta 431 zcmV;g0Z{(?1NQ@v7zqRe0001qplF?uO+J4B32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri1_uu|56At7S^xk6T1iAfR5;7clfi1kFbszM2Es4kvOGZc0wH~bKGZH9lg#fN*1OTuhG5B`s>^1~hF(wFBs-fQO^;mHy$}z|ru)oHK)5<-uq{eIu|u_7V>sU#^>UT_ zB?(R%T?7CYI5QeOVCv|Shf5m}I0}Ck&-CpQApXA%7mgLgt&7KU&U6ugu0O=1y57tq zEwcSg0Xv=vi=7#wP)@*@OFt+zp8!65H15kuF72VJtmwUd+Ow3Bd}mdsd=8RJYY_+K0OD(a+0pw@Qpb)O-bPfAZ?21gSa}40Kag>aRw~Fifi+lfKO3m(bod2|>q{aVgtej$ET0ucUS*eg@00033NklZ$vzYXleaak})XCaL<;pBp=p5u7y-+xlo`#vJ-05ehr8=(%u zj`+`3(yuha7J#`UI4TfI+zAoM2(^D2(Yr#15(U5qdzVN?*g_~F$><9+c}AGwZNofe zMr<<_6{O#+TGRrx+b4n!_<6+uY7G!*7xe=V=io!Z$_4+Ac05(628r=KzKLEA`ngt zvIvASgDe8!#2`^1(IA^ZqCs|n#7}4n1e-uIKQw{#e5m~}1ycG!a)DhId8Qvetilr| Tog7t@00000NkvXXu0mjfRJooC delta 473 zcmV;~0Ve*01Lp&f7=Hu<0001qplF={000McNliru;|mWJHzl%J_aguR02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1poj5Fi=cXMPi(TdwYAmy|n-T|8sNAq^$O|gMV7?#f!zPDfad$_F__$ zd(Fk9&Alm{Vq#iBK|$$6v|j)K00Cl4M??UK1szBL009e0L_t(|oZXT^io+ljhP{Dz zNcIi%XI4Tzgt!W{cWlTiFmsnkR)sWFx(dW9`Vt#vJ22FpAJ1QX?_=y=FE_pKIi!bf z0}C)Y9Nks`+^5iU_6xsS`CbWq!MfNdBmwjM*xjMchd?#5zJzQ_#Wz(LimUo z=H!zIK+1!^*>;jL#MJ}I>6RHd_CUqxsa&Bb&{x@Km%hZK$iB=&g3iIggLB@Lr`aMS z7%sb>J$HcdT~|M7{VEL4Xb^^5RI49B7z;G3A0!M-Zc-D5W*dd6l}LU>VFq6(;+ZJS zO?N7VBw=d3f+UO+&6F~tFwCY~R$*vbL6{PK=7(GSs~&HDlzTrG{HY%=vzC`F?Loaq P00000NkvXXu0mjfbg94C diff --git a/graphics/pokemon/wimpod/icon.png b/graphics/pokemon/wimpod/icon.png index 77a80488950d84026f27f577af4daf02cff39a61..732b7b9ac0788ada2f80d6bdbb7382da09c70065 100644 GIT binary patch delta 292 zcmV+<0o(rK0`CHl7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwPf4NklcWLj;7vTVIv$$hK`*TQrS;fYomPJ2@yw62-1qY%3vTm6?QQd8JpMC3G9LE% qv7F^oek`YT=10A)BR>lEx3~c|<3wVmS1U#Vo$| zA-B1b%PgXJ=I|UbCAui|9@;%6X>@znG{E4r9pl?%9tXUf?d>$iy*wRE-d=Cf9oK&t zh)6!AS28B_3A?DkjJSykAksbMzkXEPFO&=zIt{zb8%Gi8`wC{DkFUXY5g5>QFW{vu zuZXtkxLmL;5A;M84_fs-PVrC)+BH7zqdT3QHO;{k55wT*HA!W`W1?3S@K|+^wuEoI esQk;kd;&T}m6IY3UE%-$002ovPDBK*LSTXss(xz# diff --git a/graphics/pokemon/wishiwashi/icon.png b/graphics/pokemon/wishiwashi/icon.png index 0b9df6baf4c0215944dbf844580aed06232f3550..2e2778650f837a23490f59d9a59143dfe91c6f25 100644 GIT binary patch delta 264 zcmV+j0r&pE0@DJJ7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwPezNkleP_VseFeF zz9+-U(0dXNZV9EqU0PYJg2AD9Z zYA@3P@wSmB(+2=%F(STh#R?qJ5D~OmQT%2g@u-QhM%VlbGj-qZ>^w*;Z-3;1nf#Fn z=IW0XxcZ|I%*P+A0>1oF2xjufdIf0hmp@uN{ZTu%4S(DSWUTR-0(k*3cnG-Kg4q55 O0000A>07zqRe0001qplF?uO+SCjNklVPo)JBu);LHqKWV?9b$)lisag+nm#$L&&cVbr&cJ(bDc=bwUaT zPz`xejt6rmZpY8;Kj|wH)ejucIbz}xi>5C%YGutTOZ2}8r3Za3QSr=0WBs`l6 vX0D89xGo3R#I_DsUiw%M$}bGc?-u3>^sP!*fn4A*00000NkvXXu0mjf+b?G7 diff --git a/graphics/pokemon/wishiwashi/school/icon.png b/graphics/pokemon/wishiwashi/school/icon.png index 2cf411fd1b84138444ae13e0d92b1186a10655f4..a756cc555116f73f857e4278f1a70e23500b9c53 100644 GIT binary patch delta 368 zcmV-$0gwK~1i1r{7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=dp>^w7)eAyR7i>Kl)(-HF$hGhy+A^k|NmQ|t!|;sZoC*1 z9dFC*KN*Tow4aaAq@`GOc9?;!PCPQCcbV$F%$0RSgaQ5hs>HS4Yma}(2WWL`Su3|O z_I0W1gQz8>4S5Im^f@)Z-|y%p+ooN}5+MNlbKj(rWDCX}*kUXn-csV113#NDj{Qw& zuKQKA{XFlH%(G02d9&-s^w-DrX@IN&*MOP$u>#~>eni8LA9BHu448!OV1ZP1_ zK>z@;j|==^1(8iYe*ghuOGiWihy@);00001bW%=J06^y0W&i*ITS-JgRCt`#lf7!g zFc8Q62BLeZhrU5FWy$lMA;?1(9~kLbLYHJ|pCNRyz??No5PX#_OK~!GDZRzIKXMtH>hucce=&JSFD3Ob{&4p1)u0000Kl+A9$APj^-y?|tU-v4boHf+QuCRw-OhipOrcQiGf{FCr zJWxrRGi#GdwKpe#W}fUx_p~9ClE(0h?nDXMxU=9z_bR=su#u3jdNhAO!nE{poex&TP@@oXFj2}GpFBbcvRE1p%4WCO5fHIUO~deZ2jbw=AM zKI&TI5ayi{NILMV9+RBQAB4m`xSj*NZSf|q^(SDcN}ym17{+X<$$O6!`T~%lAlC`# zJ>V(EV{P=C&>sWkmHs+s>*F6wmH*}+sevs1u``hAA2$Z#IX(vRUIW?v!w&=5uV47X YH_1XIbA7OoI{*Lx07*qoM6N<$f^qPq=>Px# delta 459 zcmV;+0W|)@1Cs=h7zqRe0001qplF?uO+J4B32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri1_uxWA8!G%#Q*>Sc1c7*R5;7klD}%hFc8M|21oX`d67P#48>k0aFb{07J*{X zvEU|T%b>_ty2PMZz4))*c}Iu!SzN8+9w$F6oT=cV4BkSJq3To zo`tL8wbMI=%%4m!Z3-z$AbeU^Vpp`3LS`Y|TGM~yg-qn8a2khyRU(Td*JgBbk)@?K zPS%Q})GLgRBf+ag^DOR0ab6({Q%(>Gbtu=96eL39++sNl00cJalXHCrtOKvk ztHohC6qUzK%F{(PmZ&BDb67-Hb4`BnuZOCXgaC zcG(rDzL|@Xi3n%A8~7kRgv?*u2+)j~}_JGCIgm5Jvz2002ovPDHLkV1iwm B&c6Tv diff --git a/graphics/pokemon/xurkitree/icon.png b/graphics/pokemon/xurkitree/icon.png index 26cce62f0a8aa7164331196dad290e451c610e18..4c044631de7c4db2f8383eff9eeaaff41f959c02 100644 GIT binary patch delta 358 zcmV-s0h#`S1F!>-7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwPc)Nkl{Pe+-zHS`AlfeOB4mxKS++(ekE>Q-)eU(RLaEe>$lv7WOPZ=mPLR-Rp za-brXB}5Y{(Ou>k2-aqaz2`YF#l9w?Zi(>7CVJXzVitD>H=Z!{7JPpusyyN`@-?k{ z$j36q%oc}gLNPe4z)9JeuI%)C zdfh^)GTleer{(+$=L?X31CZuN0c6~~;zt2wCP?!mdnke=KMEj{AXT6MG82Rw8x4?| zAi4R`0GSDrD}MoG-q9wCb@AbjAQvChlE3+&^xxpa3se*q`3h|XjQ{`u07*qoM6N<$ Eg0QTXNdN!< delta 312 zcmV-80muHZ1A+sP7zqRe0001qplF?uO+SAPNklz(l=Z*4?>dtw?Cdaoji}iy>6O#88l_ae!fhI+51R zpqN1p{2>PH_S(w5ITMQLy`T<8^gAd80aJucjBr>|iYYQ1t?k(xY&lM~oHJW{zvbqs zFVjKJf5|q?9}F+o($YWlbApIJj|nmjkhftTAUl4+0GZ@N50IJHz>UVirVI5fJwQeiCcUNoeQmCP@+HZylvo4jc_mIP)RF!Ljx%EKbk9wWLBK;@HveNpRg6gmB0};xAx-&IS!JQ6fdz400000NkvXXu0mjfw5w;c diff --git a/graphics/pokemon/zeraora/icon.png b/graphics/pokemon/zeraora/icon.png index b8dadd7ba330426de58a3668d454cf87e77fcb4d..7df134703fc45b59d942a36efd1a7685d4b6e260 100644 GIT binary patch delta 358 zcmV-s0h#`V1F!>-7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwPc)Nkl}|K?H?( ztTh%2>6ZbQ||I!rUw)XedL#9I+bwlN#k?J}p-kTcpk<5;JhyeLnka->1~C2Ii?#y_+qU zASVe-PeUyL7gW&5xVt5<)g zT`s_lK9b>bBA?rh&R`-z{_fTgZLxJM98C*$b2UJv?q1ydNhzuf_O-9}nfi4}U0@e#rRQk1zORpJH~8{+Iv& N002ovPDHLkV1jy{ktzTH diff --git a/graphics/pokemon/zygarde/10_percent/icon.png b/graphics/pokemon/zygarde/10_percent/icon.png index c1fd251535eecb9a7bcd25a88961b025bd9112c2..ab6354c98570835ad15ecccd6579bbd3f651bc5f 100644 GIT binary patch delta 323 zcmV-J0lfbH0*wQZ7&Qn30000?P=%ZT001CkNK#Dz0D2?<0Dyx40Qvp^0D$QL0Cg__ z0P0@=06Lcd02gnLEp)+=AwPfYNklW>rBi; zuCJip1#t0o^{huK&^A>j5FWCm@pJ_w-Aq^qOc}m!7SmNWz}=Ymx#xc@DW#?4=JQB^ z<|YI_An_uREXo}MEW{=E^gMo4Ei7Ce0NbPj93xoFBb;v|=?PEmk|;rBv=nI-Bm=Xx zBC(Hq40s`i9{3Sd>h2C4Fu2WU5scmerq{sj@A-Xu4#;yrI^fq1$m~8;-+y->-jAdj VUxsq%U;qFB07*qoM6LruV1jEvg%$t+ delta 308 zcmV-40n7f41O5V#7zqRe0001qplF?uO+SALa7bBm001r{001r{0eGc9b^rhX2XskI zMF-~w2M`M`_69rm0002tNklbq+FXX>Fu{M= zwsS%sC)4I8#9_Q=#rHMfFrmW75jnm-ghhv3$7Pj=u>V z&rO9R;C>}SxdR@iMdVhia5R|1(F(+zjSPql=$Vhj05Dn-V6g~XBT3NCqcqCJ+7(D# z015*foc(?~?8Q)RCe%Pw^)kKqdi)>{=4S_!s)PCEeY^p9d*D8Myb^2x0000Kl);X}APhv~5OJu4=l}nKyDRFWQC^P$#RS5#3)j}dmfR9B6 za3^4a>=8c!Dn)d+CKd$jG4oQ^fEPHlRvArP2y3y2z0nz94*xqbbkk$sU*+x>Wu@>3^bz*EF+bjz2zXM#nC=t0efxfe}sNX`` zxt^$<5Wdj@>j{|l7Dj&w0vy?oK;Gazw^B!q`Cm=|qM1ZKoS_e}jq`XTkOp4lzj*x% zWcxD$K^DkmkjS$@V$zd9sD~twZjdAp0+T@c!kz*#e++@dmN?t6^XL9Zeh7mkfw(`C zAG$%3K*Ap%KMX-+fy{mgU=qmehcL)2kjW2WkXazJAFQo!ez+k4_fk)1DEVP6kO|)2 Xa-b*TBi;5800000NkvXXu0mjfkNL_| delta 456 zcmV;(0XP1s1ds%f7zqRe0001qplF?uO+J4B32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri1_uxf3-UvGcK`qZb4f%&R5;7!lCe(1Fc60Q1}94>8y6vVq$(Rjx@GJ;M2a$& zC*xuI01zEP-FiM3DWi>Jr>TpWSn-xm{xA0LPpRJ)`~*&v+)yWAl$8t^Fp>cvhpbRR%!wu18ID$p9ANGmO0eYmO}!EwL__ zgxFU18ga?k5;nSM^`J?cxWP>0M(bB`7&9R;?Z)cagyAt`wSQ`uIZR4pT?vm&eT!n7 z6CGqOXY^EPEW2)hc$utbXLeBtLRt(vokHO-i8cV-o`a0000 Date: Sun, 17 Nov 2024 09:59:04 +0100 Subject: [PATCH 402/544] Refactors Absorb to use Moveend (#5670) --- data/battle_scripts_1.s | 22 ++------ include/battle_scripts.h | 1 + include/constants/battle_script_commands.h | 1 + src/battle_script_commands.c | 38 ++++++++++++-- src/data/battle_move_effects.h | 2 +- src/data/moves_info.h | 9 ++++ test/battle/move_effect/absorb.c | 58 +++++++++++++++++++++- 7 files changed, 109 insertions(+), 22 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index de8bcb92fc..bed58e3d1e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3012,30 +3012,18 @@ BattleScript_CantMakeAsleep:: orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd -BattleScript_EffectAbsorb:: - call BattleScript_EffectHit_Ret - jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_AbsorbHealBlock - setdrainedhp - manipulatedamage DMG_BIG_ROOT - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE - jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_AbsorbLiquidOoze - setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB - goto BattleScript_AbsorbUpdateHp -BattleScript_AbsorbLiquidOoze:: +BattleScript_EffectAbsorbLiquidOoze:: call BattleScript_AbilityPopUpTarget - manipulatedamage DMG_CHANGE_SIGN - setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB_OOZE -BattleScript_AbsorbUpdateHp:: + goto BattleScript_EffectAbsorb + +BattleScript_EffectAbsorb:: healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - jumpifmovehadnoeffect BattleScript_AbsorbTryFainting printfromtable gAbsorbDrainStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_AbsorbTryFainting:: tryfaintmon BS_ATTACKER -BattleScript_AbsorbHealBlock:: tryfaintmon BS_TARGET - goto BattleScript_MoveEnd + return BattleScript_EffectExplosion:: attackcanceler diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 27a4402aa2..a1722a511d 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -561,6 +561,7 @@ extern const u8 BattleScript_MoveBlockedByDynamax[]; // Battle move scripts extern const u8 BattleScript_EffectSleep[]; extern const u8 BattleScript_EffectAbsorb[]; +extern const u8 BattleScript_EffectAbsorbLiquidOoze[]; extern const u8 BattleScript_EffectExplosion[]; extern const u8 BattleScript_EffectDreamEater[]; extern const u8 BattleScript_EffectMirrorMove[]; diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 6b162dc487..bfdfceb620 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -263,6 +263,7 @@ enum MoveEndEffects { MOVEEND_SUM_DAMAGE, MOVEEND_PROTECT_LIKE_EFFECT, + MOVEEND_ABSORB, MOVEEND_RAGE, MOVEEND_SYNCHRONIZE_TARGET, MOVEEND_ABILITIES, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0293e00f34..e9da9d62e8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5712,6 +5712,38 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; + case MOVEEND_ABSORB: + if (gMovesInfo[gCurrentMove].effect == EFFECT_ABSORB) + { + if (gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && gMovesInfo[gCurrentMove].healingMove) + { + gBattleScripting.moveendState++; + break; + } + else if (IsBattlerAlive(gBattlerAttacker) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + { + gBattleMoveDamage = (gHpDealt * gMovesInfo[gCurrentMove].argument / 100); + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage = GetDrainedBigRootHp(gBattlerAttacker, gBattleMoveDamage); + gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE; + if (GetBattlerAbility(gBattlerTarget) == ABILITY_LIQUID_OOZE) + { + gBattleMoveDamage *= -1; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABSORB_OOZE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_EffectAbsorbLiquidOoze; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABSORB; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_EffectAbsorb; + } + } + } + gBattleScripting.moveendState++; + break; case MOVEEND_RAGE: // rage check if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE && IsBattlerAlive(gBattlerTarget) @@ -11344,12 +11376,12 @@ static void Cmd_manipulatedamage(void) case DMG_FULL_ATTACKER_HP: gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker); break; - case DMG_CURR_ATTACKER_HP: - gBattleMoveDamage = GetNonDynamaxHP(gBattlerAttacker); - break; case DMG_BIG_ROOT: gBattleMoveDamage = GetDrainedBigRootHp(gBattlerAttacker, gBattleMoveDamage); break; + case DMG_CURR_ATTACKER_HP: + gBattleMoveDamage = GetNonDynamaxHP(gBattlerAttacker); + break; case DMG_RECOIL_FROM_IMMUNE: gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerTarget) / 2; break; diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index 956a2d0f23..b5b3e539c8 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -24,7 +24,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_ABSORB] = { - .battleScript = BattleScript_EffectAbsorb, + .battleScript = BattleScript_EffectHit, .battleTvScore = 4, }, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index db5f2eaf75..1bde816281 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -1874,6 +1874,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .argument = 50, .ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4), .healingMove = B_HEAL_BLOCKING >= GEN_6, .contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON, @@ -1895,6 +1896,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .argument = 50, .zMove = { .powerOverride = 120 }, .ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4), .healingMove = B_HEAL_BLOCKING >= GEN_6, @@ -3620,6 +3622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = 50, .makesContact = TRUE, .ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4), .healingMove = B_HEAL_BLOCKING >= GEN_6, @@ -5152,6 +5155,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .argument = 50, .ignoresKingsRock = (B_UPDATED_MOVE_FLAGS == GEN_3 || B_UPDATED_MOVE_FLAGS == GEN_4), .healingMove = B_HEAL_BLOCKING >= GEN_6, .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, @@ -10264,6 +10268,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = 50, .makesContact = TRUE, .punchingMove = TRUE, .healingMove = B_HEAL_BLOCKING >= GEN_6, @@ -13244,6 +13249,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = 50, .makesContact = TRUE, .healingMove = B_HEAL_BLOCKING >= GEN_6, .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, @@ -14200,6 +14206,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .argument = 50, .healingMove = B_HEAL_BLOCKING >= GEN_6, .contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION, .contestCategory = CONTEST_CATEGORY_BEAUTY, @@ -20021,6 +20028,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = 50, .makesContact = TRUE, .slicingMove = TRUE, .healingMove = TRUE, @@ -20322,6 +20330,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_BOTH, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .argument = 50, .thawsUser = TRUE, .metronomeBanned = TRUE, .healingMove = B_EXTRAPOLATED_MOVE_FLAGS, diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index 698ea41091..70c1b621af 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -24,6 +24,25 @@ SINGLE_BATTLE_TEST("Absorb recovers 50% of the damage dealt") } } +SINGLE_BATTLE_TEST("Absorb deals 50% of the damage dealt to user agains Liquid Ooze") +{ + s16 damage; + s16 healed; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } + } WHEN { + TURN { MOVE(player, MOVE_ABSORB); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + MESSAGE("Wobbuffet sucked up the liquid ooze!"); + } THEN { + EXPECT_MUL_EQ(damage, Q_4_12(0.5), healed); + } +} + SINGLE_BATTLE_TEST("Absorb fails if Heal Block applies") { GIVEN { @@ -69,5 +88,42 @@ DOUBLE_BATTLE_TEST("Matcha Gatcha recovers 50% of the damage dealt from both tar } } +DOUBLE_BATTLE_TEST("Matcha Gatcha will faint the pokemon if Liquid Ooze drain deals enough damage") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_MATCHA_GOTCHA].effect == EFFECT_ABSORB); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(playerLeft); + MESSAGE("Wobbuffet sucked up the liquid ooze!"); + MESSAGE("Wobbuffet fainted!"); + } +} + + +SINGLE_BATTLE_TEST("Draining Kiss recovers 75% of the damage dealt") +{ + s16 damage; + s16 healed; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DRAINING_KISS); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAINING_KISS, player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + } THEN { + EXPECT_MUL_EQ(damage, Q_4_12(-0.75), healed); + } +} + TO_DO_BATTLE_TEST("Absorb recovers 50% of the damage dealt to a Substitute"); -TO_DO_BATTLE_TEST("Draining Kiss recovers 75% of the damage dealt"); // Tests .argument 's implementation From 8f137b33e444387c02ec6560315741d099f7dd88 Mon Sep 17 00:00:00 2001 From: Cafe <46283144+Cafeei@users.noreply.github.com> Date: Sun, 17 Nov 2024 13:20:47 +0400 Subject: [PATCH 403/544] Followers sprite fixes (#5669) --- graphics/pokemon/audino/overworld.png | Bin 710 -> 675 bytes graphics/pokemon/boldore/overworld.png | Bin 754 -> 843 bytes graphics/pokemon/cottonee/overworld.png | Bin 555 -> 552 bytes .../pokemon/cottonee/overworld_normal.pal | 12 +++++------ graphics/pokemon/cottonee/overworld_shiny.pal | 6 +++--- graphics/pokemon/drilbur/overworld.png | Bin 607 -> 595 bytes graphics/pokemon/drilbur/overworld_normal.pal | 2 +- graphics/pokemon/emboar/overworld.png | Bin 1121 -> 1151 bytes graphics/pokemon/emboar/overworld_normal.pal | 14 ++++++------ graphics/pokemon/emboar/overworld_shiny.pal | 16 +++++++------- graphics/pokemon/gigalith/overworld.png | Bin 808 -> 844 bytes graphics/pokemon/herdier/overworld.png | Bin 831 -> 832 bytes graphics/pokemon/herdier/overworld_shiny.pal | 2 +- graphics/pokemon/liepard/overworld.png | Bin 904 -> 842 bytes graphics/pokemon/munna/overworld.png | Bin 479 -> 458 bytes graphics/pokemon/munna/overworld_shiny.pal | 2 +- graphics/pokemon/musharna/overworld.png | Bin 1081 -> 1077 bytes .../pokemon/musharna/overworld_normal.pal | 18 ++++++++-------- graphics/pokemon/musharna/overworld_shiny.pal | 10 ++++----- graphics/pokemon/palpitoad/overworld.png | Bin 613 -> 608 bytes .../pokemon/palpitoad/overworld_normal.pal | 2 +- .../pokemon/palpitoad/overworld_shiny.pal | 8 +++---- graphics/pokemon/panpour/overworld.png | Bin 712 -> 653 bytes graphics/pokemon/panpour/overworld_normal.pal | 2 +- graphics/pokemon/pansage/overworld.png | Bin 762 -> 701 bytes graphics/pokemon/pansear/overworld.png | Bin 700 -> 653 bytes graphics/pokemon/pidove/overworld.png | Bin 691 -> 741 bytes graphics/pokemon/pidove/overworld_normal.pal | 2 +- graphics/pokemon/pignite/overworld.png | Bin 717 -> 731 bytes graphics/pokemon/pignite/overworld_normal.pal | 20 +++++++++--------- graphics/pokemon/pignite/overworld_shiny.pal | 14 ++++++------ graphics/pokemon/purrloin/overworld.png | Bin 540 -> 585 bytes graphics/pokemon/purrloin/overworld_shiny.pal | 6 +++--- graphics/pokemon/tepig/overworld.png | Bin 610 -> 570 bytes graphics/pokemon/tympole/overworld.png | Bin 479 -> 528 bytes graphics/pokemon/watchog/overworld.png | Bin 832 -> 735 bytes graphics/pokemon/watchog/overworld_normal.pal | 6 +++--- graphics/pokemon/watchog/overworld_shiny.pal | 12 +++++------ graphics/pokemon/whimsicott/overworld.png | Bin 834 -> 784 bytes .../pokemon/whimsicott/overworld_normal.pal | 16 +++++++------- .../pokemon/whimsicott/overworld_shiny.pal | 18 ++++++++-------- 41 files changed, 94 insertions(+), 94 deletions(-) diff --git a/graphics/pokemon/audino/overworld.png b/graphics/pokemon/audino/overworld.png index 27fdc5f6b7643dbbf40b0600c7d144e0f505692a..082abdd270602cd4a6bdade3b36b8bbfa70f125e 100644 GIT binary patch delta 663 zcmV;I0%-ll1)~L!7=H)@0001UMu)cm0004VQb$4nuFf3k0000mP)t-sn9!hTKR?G` zXxf2_0001AS3mXRq{pmz3kwSpSES|T_x0nXo12^3fr@pjr)cUb9`Jxi94zrX zBc1#w8*mj4@`t}?e!mZSHYn0Lni^ohLkO#ltwR3l7%v)pkf*Xx=1Gb69yhcO0QQzl zvqiX?xBUU%{Av7F^F}{8WK45JlPMC9a#`cz&dXAno`1Ip=ckf41`|icw96;~3f$@^ zgVuVPXoNWymo~wWCw=Tuq~0JK+Wy$GJU7!c;g z2#y==6td>Q6$6P!$VQDP{U}`5-vf9a2Vma|U})>Ge%>p&)`vGj$GgDS`Ayhsf^MzmC4yc<;3Pg1^$=NA(0=Q;P>Z xHn0xqix2rL{e9Gkk7*uqoV>@6jQThA4K{Qg+z<-2nAZRR002ovPDHLkV1g~3HVgm& delta 698 zcmV;r0!96!1;z!C7=Hu<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000gP)t-sn9!hTKR=jIprClL0001AS3mgJu-LGO3kwSpSES|T_x0nXo12^3frVGd00JdRL_t(Y$L-ZIZ-3K36bJBgRZ9#Ev0aq4 zi7mRY*bk*0GE|mR5K~bdGK0lAuqA+a&VLR$<}o2PHXu92<^%rBxM0S|!UafHX(wNhPEVUSi^Mcrya3TJ!byHY zJ9^#3`AyU5Sxda>g4N+HKVdOEZDKrfn5C6Bz2f;|=6nYDVlHOm8m|ZDzN{DrMsKec z!!sTrdmer|xQ@c>>C00U$B8kHO4xj z;ZZcU$~~xBv1k}k_d((3xm(<9Ah(jc>?gZX49g3v)(RX_`VM-Z;Wv8zKpx-^JW}s!f7at|B0HxR gclho@|DXu@1*{77)^;Hj*Z=?k07*qoM6N<$g8l(Ong9R* diff --git a/graphics/pokemon/boldore/overworld.png b/graphics/pokemon/boldore/overworld.png index 013a09dcf3d478b248d85bf99b45b5d02b3df064..e4c4cb5b11e26b34e0d3a7dca38039fbd543513c 100644 GIT binary patch delta 792 zcmV+z1Lyqm1(R9J=WmfLo$APj~H1RNRP|9N*34uya?UQBzjWvyz*FNQw{0b`!= zjAuOK8P8}2{4K|e*RQw%yPo0894-W2@xKm$=sLa&P8Js?U*_O!jH}nLIJvirDZb9F z^L8O{$vq-*nSic{{+D@w*0*iv1zK{y1pw!$MviX~Hh-4~Z!@<(+~rkYIQ>Z097&(8 z0;$RYZ}NZ*=byJY3v|wh=ubcMCHLNozSN?uke=M-Y`~oGU2Y`7;JhaTJ6$W6oD0kb zFC>mH$`f=&{)AJ5I47L$s!6VRN-$Vz5e{@(f;IP161?vSxbKpG;@FzOg!_(1)<+5f z#7$2##llo@-1|QE!vY z4*LtzP_IMB`Gt5Z0En?VlV`-OKb9XLQ+PFn)gs#9vm7WiDt;4XwLi?BxG5Q zK-Z)IpadmjtN`hMq(85|r^9Tp#Th9#z0`62d=2Ad>y0)IHK zTvnc?$fO;i@sFvya)#-|hA!Q!fwkF2o@>lSp$8CXa!-FjXE;}=a^_75hv zpwSg%aY!n~d45Eae*_W}o5~e7xP^GI-4FHxO%!>l(oi-7Ru4`xc=|%& zMd0AD#67PdiJKg+hXAf^8tZumPt7wg0?!Sn6{O#vX!^jWooV&+)O34T%!X300003^ delta 703 zcmV;w0zm!C2J!`v7%Bt<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000dkuocPXp{Iz00009a7bBm000id000id0mpBsWB>pHR7pfZR7l6|lQC}-F%*Dp zDYtYw+fhYBhdy7spe}c2WN40*BBp?Pij*xVEfQjdfsK*93t~f5mGUcEL>c&1_}S<4 zYpzGBA~EF+k-q2W@4a`qW9wMQI%1?N@?EDKR^s%3@6{_exU1TRfOG|37Ro$r`QgTm zd-AeS<}ex)J|1QOSlMlkEOf|VSpJbNzPCK|Iv|NaJKegIhulV4#XCRWGw#O3~!ntc{ea=;D^J2fGTI{p`lG>_I7?hg_RaGE>T@X76@x z30bdy|3wvp_`gr3**YV+LBoEi!8cap76&9naQPNc{1v(G9jsPK2S@H!L;8hW7pwJt8>{8hJk$aAGGk zZUU}sE3Gx%AQrnQ;Sp&lmDvVOa#|0N_mz=|*1i*d`6R9{v)8n8S^bH?KyAWRr_AixYbO{pKJr3Ik)kZ2~MhdW(Z_=;Fn9MjKAf?dMrB7AL%PoLsnX2iXa0 zcJ)Wr7ahrB91dMf&lzo))JJ4OpQz%7C=87CWW&0$ihiuP(J-XRgfx&ROZ8;Kj;OkG l$}*w|!VduRSWuRuoEEmVb$fiHV7ciHUy#CHT`0 z_w-5|V{ErUe}GbU(BY=OD?ik+!G{CR2F(s*edOEvUc#^GD4~xGrX5-ZJ%c0tAYt`V z8(OO?7!4q8o(UUWYw(8tL`^?R7~6BMp|SuHqy`09#j4aZVWrlBjrwncRec;TZ-st& zBVlz^SkP|u`F{fN-Nhiz(W%klrZ?9AFziSH1m0Z zU)RjwdRb&N=qNluKZ3Zq8a(u=!CViJCMUpWJpD<+vVgGT9z|C6x1>E~2Cp@d_8fL* z-UItuflCa!f_Biucsw-pE;rFnSPJwmUC3Hn`o{?G>3?OAa8}Tsjokxsu!eoL;M-tJ zPYy>_eJw)FU=VGd00D|gL_t(Y$L*9qOMk;a7{+s3#$M}UMzZz?niXMol#bo`KqV+(Dfj&J+gYXji#l z%{P=2f8=Z-@P856rew?N)xDJ)mL;u_%{V{v2O2cV12%sv1e=u<+w8dFtqci^EGuMe z#yLU-OO26}>y;P`)_g=*7BC4cDaxlR3cw6Jjnd1hXgDZ+}=k-bjodUmj+6B63D#=<}4} z$PmK77}w&Q4FhJBCxuikEPpcE-P00Po8PmKZTVH`ViK?rN$xoPRPJ+mlz>% diff --git a/graphics/pokemon/cottonee/overworld_normal.pal b/graphics/pokemon/cottonee/overworld_normal.pal index 76222db0ce..2af87bcf9f 100644 --- a/graphics/pokemon/cottonee/overworld_normal.pal +++ b/graphics/pokemon/cottonee/overworld_normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 110 110 110 -204 227 209 -208 241 229 -164 207 173 +198 212 159 +222 230 197 +165 173 132 64 128 16 92 224 48 74 176 49 47 46 47 -198 196 235 -137 162 175 +165 173 132 +123 132 107 238 238 247 137 117 107 -230 77 40 +230 132 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/cottonee/overworld_shiny.pal b/graphics/pokemon/cottonee/overworld_shiny.pal index bb3d8c85c8..d530eb0894 100644 --- a/graphics/pokemon/cottonee/overworld_shiny.pal +++ b/graphics/pokemon/cottonee/overworld_shiny.pal @@ -11,9 +11,9 @@ JASC-PAL 192 96 40 47 46 47 192 176 136 -137 162 175 +112 96 40 248 248 248 -137 117 107 -230 77 40 +138 106 91 +112 184 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/drilbur/overworld.png b/graphics/pokemon/drilbur/overworld.png index 9d1c7ddcf8dcdf41524d1755cbb6469e12f62b15..981e575fc1a30cb2527cc73d1ab7c5c7095b8bb2 100644 GIT binary patch delta 582 zcmV-M0=fO)1k(hN7=H)@0001UMu)cm0004VQb$4nuFf3k0000mP)t-sn9!goC@3f> zC<_YAW$0005eNklX--yrCDk!`odZ?>jsQ zXmP5+dyKbR#NtC87%=&6u&~q5xubhzWx3;kBZG79V-6HN-tSl{)g1k292#%-YUA)3 z7l*8zQ8ezMDfc~IwcKL;@Q!+&GN6lmP!2j@l@1W1wmF~6sn z&H)S#%mH=|%+CP~z8ehUFVV2cJC}kH_ld~+Hoy0U=rzEc19O1J0ffHv?iLPY9lgIn|OC6fbaCqQbCA4U4`%OgLVWl~_eU;1zT0D0lP^=K~zY`?SIrUOT$1I2HGas-r4Vq6?zp$)ZUZ-Sdh(~g3eI#!B9aCdSMak|OHpW&T@y*ut& zx+(PCo^tnoA1NGIW|?J{`8z3?romdXZEF$F%{D@H*0luMe&1$DKzsDI0913)GsOYNGEkYAtSISbH*xkAzH_~9qfNTN0}kFmVbDp4@a3LHvnPy0O8K>!lDaV z3zb~#C5GHu)op&9;m!E(==V^jv0dP z7_u(9c}s4xkC{pCv$h43^EUU`LEA11uCOjb$iJQtviC)c=V@ck6?VsA0QiJTNGv%F>7=H)@0001UMu)cm0004VQb$4nuFf3k0000mP)t-sn9!ggARq+= z1u!r$ZzuuaSQ)rbAa@fC@bK{FF)8S{2(XACds+yfI50p!KmY&$DK#^l000C1Nkl53`UzU8c^Z=A9ue5s}OLeyXS0wm7dd4FUk!B(0{M5zw%f9%30{)__z3b z@R<`mo%{~}06ueS7)=HKUw#9AbbQaLfWBTY)GE^y_{77-!++tm3jXtB1aCQ)Quwtj z%gc`bJr5zAT#q~!$7QBqH}YcuA2__$Maw$#6UV)P=;K){ta{+NB}rzEZgKGAIW20o4-8r0Ob9@1p@0x6}A1DW)dF0rZXdv=cU;`gT7RCw))1zC19uO{;>0Gv(F_Yk zwmRQ}_%)@TYtnZCY$9tdBHJv0j=KOjOTg6Nxqr_$KYWB$MK5zqBqEd|>+|`0xyJ95 zmuovZ4Pd*toph@qp1Y(NIgF#{`QQ)1QU!RGoH1Bj1-=C}KpXUy z7v?)#{On3@S06VWMc8>+C#DX1V zT{}VBgdN|<0O}yxb~||$sQz;-Fhr6qXC5pIrft3jNnd^_G+cM|(sTp#Ryy__?`stH z{h(gZ0_-_La1t+FWA(vdz8mW{@`UyEEJ870csC?0{6lF3DIo_aT%0)eFLVsCW8Zet zf`8w`32J~H$B$QpoM^M9O#L11D{zSDV(lBubL}T5D7Z@lyf|@*T_cR!kArH_12@W_ zxK@cs407ogpQ`8gRAMVfl5P)90cp5m8tVA7Jlw3b9CO8|`J!Dvk z_y|W3yf~#fN?1s_+0i=~twQ zf92DU=K9=+&#|9Wc>b3DS>1Xq;O||j{Hd*{uK#(3zw+zlA0R|Fx|vQs>;M1&07*qo IM6N<$g3Qkz)Bpeg delta 1112 zcmV-e1gHD|2;m5j7=Hu<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000dP)t-sn9!ggARq+=1u!r$ZzuuSRV2JpA9oWB*Tcl-F)8h=2(*hJds+yXRyIoj z000SaNLh0L01m?d01m?e$8V@)000BSNkl+wIy4T@49OqW zCsIGp=jEmrClon zUefDm;@jV7=6}+{jG#{%Av2`c9Chw|>wV3gML8SL8wQlONPSCm+w=B$>n46oou1d_ z_TUEA+l0`%9_bR|)OcWJf~+-|&qhq!z_b(3XS5Db+Yiz`u&>2y#F+KGhioOD&!IT# zd9Wsm2Xk5Jbt(g8ScI#=0wuUs3Y08AXG6r9U|$pg%ztp`?SnxyC<7jPKILw)Kh1h7 zu<82;cr8ZoZRsFTux4d5zDq>V^ZY1@@1r?v^!)?Q-NFu`An-XDiri6SPm|}T+ddm7 zQc$yul22JSp`Tm?zVC-=+?5%r_@OjtA5&84A#~Jt99kJ_d?oq$*-E%JPGgH@hMkg4 zX%HpT*nju?A{B>n!3?8t_+speX_cbzhdUJZR~l?2({|to8>yh|IwS2(n2G>0auNQ9 z<}lLN?c>a}{E^A`h70zEquB}57f0R4us|8qI6JHwAEjyF!{eB#h?<-wEf#6D1BBX9 zl%%C0Z^PU;OkkB1G;6$tl;ddVjY8>voe_$JNPp9d`=!1i1gtI%xf_O~=`;<)kV}Ia zX9mc$zv%C8KlsU}>h_ss6s54+;g6L;lC3UTn~?Pf5P`QzC(>ZDshH3+6@h*4E$6#` zc6e^!Dz@bYq22Cblk=@AMMJMXV6avCEE#d<<0S}QUQKd?=Q-yR zI)CZFch4*RWpXG7^2T8z%LTQ9^Xuo1$tRrQmhR+&A5Ab|m=yP& zZ3)O2-}pTj#N$6G@Yn+pmL1!arfT zpl$7D9K0?joV*MU4*ZjsgZWH$aF?`y8I*!#=d)$fCQey%?(Mm7^xqdXLU-r~;Jv*v zr|&*+(|vdK*9}a_@!w?Z@IufaolW3c0pqPBGO%}w5$FNavSd))I>dG68Czzlpi$F3 zhg3BZDk!c%>s$RNw;ZwQmM3d{jSH^5PyC7^JyaQZ{E}UoPrPZHg|sZ zuK#P3Pq3fy3O$X@MG)TReij-h-&v#~$Coj@0&1Fbd0>&J>s|tA3 zoa1W&*Lji1>VHt2y9JCm%8L{T0r6MSoZv151Y6!N^H)G-y7yOL#HB+_B_MI9g9fhx zUgx+(LHI#*_xjz+;LiE@VDiorKjKkyf|r1<1ia2mK=x0x$Loi^!QshI&(4X8-9dAP zlO#h^?&p8FmKu&55 zNl`RBA5Bt9F=B;c#HRy?f6di^*rk#$u!aquvA06t83AYcpaf_*?b}dzLW3eDg)jaa zR~q0L%ZpP6My&O?=Dh;2%y_wO0E;7{OY(M^PjWC}b#u;w?@E0&Kl~W}%LI5{9R}Dq z<$5CvCx6LzlZ4drmw)==Nn1gjG9_Ks3uySh0MwQdVOFhJWp#z;*&%fa`j@Ip+H~ zz&cda^)+a4%fEIwRKK4<6|^IF0_YD}XSn5Gm#DzD1FGON{%ZUKruZ=QJ=(Yk00000 LNkvXXu0mjfj@*fZ delta 797 zcmV+&1LFM52B-#*7=Hu<0002CwraKj001peOjJdf(4ZhdNU-?$D0rAaC}#&BAvQft%uL_?0008ENkl)s`O`=K%a-OZX}Q{$9+;J@4Q3bQ%UD`0 zf6NkG|FFQH1$8r(i-aHYMtRB3Y=RT(-es4_4OWBGQKA3C_ohJ&BA%YMnYeHD|! zCo@g4Ng?mY)PG=Rbr}zxqL8<7Eh*HRV#fnQgBb^-*X#giWP)2L6hHc9rL6+`^hx?+Xny{TAA4 zF$0{T{$W$u`UGX6O$h5eBvxmJgj4Ec~Pg8EvC-* zq{gGL+jedun--wN;Zp@nF`p;?VPWL|GSe5155&&*NC1yfu;#M`vF#0!`8*!~^n-h6 zI2(u$_<^180p%3Cq3gS)0^)EZJ;9sLC+=Fdg@02g2f7yBBVQcYJwwQ13o>id%;#f= z2#qb=?-e&L_JGvuxaUFOl?p~d5Dq&%FvWa6^S-5OGQIKnKHURSOS=~TMX?33&oreq z)qFm6ZP?4coRR}Ix(7gGlKhi@=L%|*NSU;+^of{)6ZQk%eE!0dEYiJy b{TBHR1zx8T(x`FG00000NkvXXu0mjfu&IE4 diff --git a/graphics/pokemon/herdier/overworld.png b/graphics/pokemon/herdier/overworld.png index 51e2a2207bb9a8c5b05173b8141ff1ad3bd1b671..de47a0ba7f4c1c1daafa3dab43e13da9c29d6f46 100644 GIT binary patch delta 821 zcmV-51Iqlr2EYc87=H)@0001UMu)cm0004VQb$4nuFf3k0000mP)t-sn9!g$HckKl z05&#GU`QBXV2qGhKuAbv*pOK0$dHg&Kv-Bwffk6zY=7G~zVVH3{If_D^St06 z1~0l@@gq{&!x(i1zwAvI^DYOs+9luP>euk&&G3qkM(8&8Aa4_fyif5A zbC`hh@Cy=%`4p^b*I?<@aLD@C(qD>fa2+AlC@e**k&aW1T zH^D1D`UgjKv=(f_kjq`X$B+7`4=nNbP^oo6Pk&&=MG7KHz~qDyKb=(%Q*_h2 z9@r~>{15ELQVHt(Rba(oSa416I~1J~ayX$=x{Q_C^^l;)8-K-bf^7&kFM*Kb71jM< zn39!%%V|stBF_f&aO1D|Rj}*z#&!ZRPo+?r0~8~JfcMJm^Ls>oxbau~@RMn%OW|fu zj0x(z1YB#ZH|d&W2(Gw3Sz9}u)X==K7aU@O41X}o$=d^Ia7h+N3z*@M9EOJ9f^Qiw z4(t?^37f~@io*;Uz+dcdA~jbo4)0%GtZS9Cb(65Zg~;by7RKLG##e`(05}d`_Bb9J z`pkxg_ay6t*?rN>*CyLn`Ry(0G@$XlpwvmA3y}L+L493)!I9u>W(3c7Dw)q&zI(;m zEiPuyuHXS&froD10nZKWcK3fC_Vl^HH$I48Q|cpQY^ZhF00000NkvXXu0mjf^`eC5 delta 820 zcmV-41Izrt2EPW77=Hu<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000jP)t-sn9!g$HckKl06;)MU`QC4n3$MwKxk-a__%QR*szdTKv-BD0-H%hK~zY`?SIw3Yui8+2k@8k(YZ1t zUS&D*kD*Ycrdd^EOgbh-c#c~RiB47swK|6ua`fjzx&OGE^3JGZWIn5}v&7}O6*%9~VDFMP=wS0Q zff>&dhq>_i6n~Ai-PHam?RxYMnJb@vW-4)*i{;4`X+YgnnEGyWwVaC~Za_S*mI?>j zZfbP)h?%;|%CYhtep`u8IMBGH4fvGBv45Dj%(7Cctn_!A>s)6j&~|;R9K>;i7m*sq z$`l$y%qv}y2A1nvDvsANo?~hl)`3gdZEo_=vk%+^zJHG@vWV0$6iNx)0Q;HNnL@9G zZKxORdZ@`FS{6+?oNJ-VO*hY{j{WU`t4fb?fNdeAaG2eG{8nbyO@94uBgfl!y)zM7 zi}lNGfNdDcG?jRYkeOcp6e5hf{$}@Y9r^8P(3wDEPnL3a~dbW~*%YQH$Ns~D$T!y*+a;rap%S@h!g@@O` z3yXu+zP*S2_sv8*sWWy8Q$6(e9sj&8^m4%pi!{jdG%<#PE8W3=Yq+ zBaY2(5-#w0CK7&vj~jD(a&%Z_H|8>Lw?2$Bp9|bTBn*EuSO6r@G=zYD@_@D93*MZx y=q*MaKmtue5>OX53*h08f&Fao7Xklm0sI0Tq%rD@v*#oL0000AUT6#lyG1msDw|)0008WNklWoJ}JY7`SytFNX6|^6(25 zT}^f;NM^!B;ENz$rVqV=+X5UMtx4<2K1|{+;V4j?P1*IosSS3>!WT|Yf@!9}!9g!# z$a(W0b`oY*BQ}@S=7MR1!NHfMr17|s$^>?|DfJ=SaT)j*LoZy2XJ9kjZr23AtSF6zD6tlJ{OUuwP zA*Prf3CAMbY9CQ(o%Zkv{vdc{_<#d-_uiTSuBq47^kj3d0QRdjUI}rPU@%O0S^Um$ zAsCgRA%B2`BOe9S+qG314G0?##6L=S5xioLMXe>k$90F5VV<5~7WjAqwY6KTDQC{Z zr1G}EPZJ&mQoG)&sx@rz1P@>c?!s`6i^9z4h^;`ToO423tBK=A8F%Zi6S5q@K4C;D zO$oMQ*r1P(&BuVv@71WUcnE*;ZUKgaLs=ARseh!2MfL>65eJDQ3#Zg-6R}ePCwNIg zez9Sb%=>`iG0zf+#W_=?Qc~jk=;-(uU|54< zlyG1m9Q(a|00009a7bBm000id000id0mpBsWB>pH;Ymb6RDVdv?Ug@k+dvqH?>GuB zU96L^+bluvi3n}_W8%=Mwneg*woAvxM#)+^M5U9V#SPt>p%9Y}O`wpFq0q74Am5;n zy|X_-dx|XUJts#OLzkQf`|;`CM|bx-iQKijwyZ{tIz~gqB{U8;DoFwCWeY^u!Gg$H z@)Wqwut1R3vVR3a5rD43BX)zjaiZ0WnF-$AX?8$4{c3j>{r^Ve1rOOTFB} z$hrbRKu^cz7!lf9A&ZsSQAI$WIRFkk)$&Z>Gg~L5TqwC|fG`k-khi*yjZ!cxNb5I* z4RBMu%iEHXkmdD+j_-AfU6%!mF)!+oA}k8JXnOLbEq}5iP}%Afktny3#%50u5*9)# zKUEAv7ci6cyx^LDJJYz=^@|_HKUUllSeVDI9mic9!%$&TdnF$pyX1DZAUyQt;mi`?>OQuE%fo)hbrXakNzyR=>aXo@VI1z>+mvDZV*vmY2-gBa1LYj7< zoYE$TPJb!bKAMR2El7n`M7`l1owNqqE(BF<9v`|cOulP5FX*7$Qd>rR76R^Fo(M=? z*XbC=jE>KtR; zAsnCTS>7>(%_>E09?oYl`Fgf9Ol7L}ivIiOD}SG}wqzIW;rhid@9LYcV zA$JRA&8%;wknL^G`h#pg*n%u|`jw#e@sYQ3pl7)tX|Pu(*vmoyBSvZ-u79Tc9>@`Kcus%xK2^<2&>&G)J%d?{Y m& z000SaNLh0L01m?d01m?e$8V@)0003&NklXUf75S4GU69H8BJ zghZ}96V)%k6Qq(QOC9?NeS|(kACNO3a=vh0Ixvvy^trzOY!6XOEw$8A|EaXT)lJy| z`bNJtxjX904**TUPw%ZS835Wh*=n5vA7!snU{`Po+&7{zFrUbMkMn3CGhPT2rz>&e zi{J{GIP-4E1An-2yC0?#aeoEUhM56MUZn@wO>fGr>a-u)QS|V+Ao@G-SuzHm0A5G{ zcaP@?r%t{>`K%fE155%4IYvMyPeE}P6U`n=u45(vpbYP9!V`i-*{WL_a z>HgsI{@`4UbOBqMNExgAW0?IpU#iD?%$!d5OV3h&P)dCO89aV;h>cxc00000NkvXX Hu0mjflqtuYj0XU;qFBP_Mw?000BCNkl-CUIk6a>`Q((-PeJ$+TZ|?u^2j+C!D<0)(fI+81!M<1jh@F| zVSB#x4%_%BGk(^*NiLky85$rF%@g>brj0kO<%lhp;a6Hhh($ zCO+#^g>%0xI4%v1tpMj_We86<1_!6jQS^^)Iz#$vlQCIHKMMl$Rw;2c|$0KmuP z-QCk`B!75Ju~ncKZ~gk*b?hN(f4O+ocXE#qNQ8W^0T}p!djL+TP68ACbKRYh z4xBq^!`A>v13AbfkTp)`mF(iWC3k^$rJU8HFn@Y}9J~oULuV`k4SZU~T_9Obn%%*? zl3iTlZvuk~j(f%|BTMQgVrR4FT{e#lzV~ zOd)0HE%Gey;vI+SEWzZI$u!yR`nq}PM-OksR)LUN+mK+nC-^uEj49=k?E*OXR)UgK zOn=uq&ho-vc)g_XeX!amFT^=%-{^$)PV#W(l$3KW_l;ONd~q31LmM7o4FE`BepFy$ zCnFrb@oEe(SA7{mOtGH$$^^T(3<79Ssu7Fa9*)DnYdaQxbxx;a)FO+*l+MXM=;77H z<*G&p9(IC|QjBNmxZWe_bztLag#}h$Xn)?^Km*W=-BKa>8bDE&D}+T~YXS@|&K6^2 zAH)GDlRUX7(=P|t92brN<0fy!LzKJ8a<${gNI`iD{iXt^$pL`ef;?PK%vh*K`Prql zuMHmlO5|;;`Z8}%6?f43RD&uc(a2AqXX12VrQN<<3oG)J0;Kj mWbvm@W*;8}e#h_l591$^tU4$r@gm6p0000kt#1r zjES#?V7UCe+xO45&z5fh005w`fN3g+>Hq)(%1J~)RCt{2mOF3UMi9q$7jY^TPg4AzZnzju+Pk0^YfBp~6zmaax-Pxwb_ZX_QW-6MrZN+*OxC21FN^&JR`o zM45e%H!Hw~KY+LU&CLF1cJ@Is_HBH{;1OeK657&hF(P$wp9wJT&`*cdjDrqR2#BbH zNHd67rq=Qtf{HTO5B!X6(*y~Z0HBG9LrN7gbgM{o0s`H%Tmg`&-rAogq9A@AN!XTw zB8!0_>Zu;6b$<&`Fs2K@01dkH3m9ZU0W3|K$g(6bN!>L`Xq}jt&X=iR3$THZkQQf< z>7W2_RRK#4t%?lV$5IHojRg;NkT6SCP%L9*S>h5@z`W?XBsGo4{^U`hrw56f(*-EX zj2%{0HNuUJ0^TWn0_(U@miOEF`5)OfYsKZb5h)2#Z4bnyf*=*tj+ixhEv8fGpefD@$9lq z(D7N;Cg5+#k_A3pgz+Uaf(vVSabP+Zdt(Wa8kcQ!~8-x!H(Mmklb2~pMO?uJSLzlaN};7_;K~1MuWLEl&#<| z#_$jC5;#6{7sCjiS9r8)7mwG1GQRXi@NX0x)%D7*i1J$Sb=#tr|8(~Nt-qa5NdibH zOBk>%6g;n|6Po~^Fv>XL-tDCkT>7ir@u_>`u;M4@FY9VryLfzwDdPf-;OmRJp45NX zV}G4cMuFkc+e;LT{A1Me4}K5Oym4`_Hsi(0wT!YT@R(lC-(J+CvVLe!T|ya0|4H-V zuieEe_OG4i_fq-<@kVnK<&Nr+YnciePt}i$kIVc~S*}bto;t#2d~BM{!QQ9t)kl_k z?-PD#-BSQRZ7nDDQCZr8HZhK}1l1cf&40f)AN_n~ct_z?A#7@Fnz+zu_r*b$=Bwvd zgxj{)yn{nu5cVLwLpg(dziFEP`c6+koGHR)Ts6yH0qf5wat^TXKYJYVVZT4zEPr<# zZvs%pFWTN#({CqZ0dR+~Q(UpQAm6F06+vDoOm#Kv3gX7MW|8;U#=2S-y*L-Wf{+GtD8@`P%jsF4VHscka!xfONcSZ>^rzdNSkAs!UQ#r{w&xU_%R8eR(OZ=3_lpo ze4U$L5ISy2et;@Z5EHR8M))uDl&iD9G_d5Hv%r%U!}I56>eKI=Bg@ioXqj z>8HHE7O0^HetrCZH+_6jJxo^~;89Q-fR4{fc(=}0%rBl502f(TkxuT&PFFyY_j$pD zl)1Ckuq^MOeG-92etkU8>q}jMYk%W~{y1hSX@7mOC`>?A{;Iq7_dnb>S{twQAv<5b uu*38?eI@>hv|6`#{To;7``XAC@&hJU8g02c_?!R$002n`MNUMnLSTZ@Sp~TO delta 560 zcmV-00?+;61my&f7%Bt<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000dkuocPs-iem00009a7bBm000id000id0mpBsWB>pG$4Nv%R7l6|)xS@|Koke? zR|x|fM}q`d;55;si}f@lj&h3|jlrLb4*pn?)avRW=LQJ|S!EI?o49!X2l_|Z>d@=O zS4^Bt_@+ZY$>qJ5zO;o|W|?J{--nRD*_dWZvwtyvm@L`3#m#D>8B4Umn4RDh%W+<1 zE4a;O)5aYXtTS63S@UYu6HHvpe=4&YvHj0XPz0000v?u00000e@O&G0006DNklw7+FS z`&ay^b1GD$>QMEo{HSwEi1}4t^sD@+^I#SvYK#)`D|~$|zlUxD6K)!J=UoQg%(+F+l>31G%mv|SYVaT92WPI@k_GSULPnq0TIBY?z2 zFP3t$i{iP@a0f>QoNr8u$Bjr>|9-t_y5MSJpH;3*^M5+#!4c3by)D`D@|OH2O?f?J z9FhU&2sBa0-sxOxfKu=LhZcR~o?wkI<($(Xz9}z;doJ@3kJh6L85%3j;*=6HYnKB8 ze01`Sdjd#uhHsc=XM-we{FYsTCESk)P-NJ_m8&Nx2$2r(B$yC=oRB|!Ab`TG-c?ox z2^715-+9azFt=1cgS+~UyMlrkRTwCysGo3hB_9f~MZqC0qY2o>(*a&`Lif_3ehq^U z1)&uwjWPBgmG^6X*>GRj_c1;_=E7=Hu<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000gP)t-sn9!gYXml8`s2JF|0002U==kX9_|2qRAc&Y!Qd0lTdvj7CU{F99i>#3? z_=W%g010qNS#tmY4#NNd4#NS*Z>VGd00JjTL_t(Y$L*6bkAKrJ6vrJY15y~`xJ*ob z_HnH7YY}781Uhsgs2_k*6~We1)CjsD@d;ok`>E1N$8tJViqwdWZvY<%-ziO;id0aT zQ2$Hx^LzdO?Pr%9b<|Nu{k|x5|AH+__jc7d-xdJ{;BF)jV?83+84)x_WMkLTOZwB!9?(|Sj{UH4=N;L& zbo+#R3KTt&Ei8NwQBiDRJ#>KBFw_T)YGcV#GWL6R9WFDZA%mnFKX!ZO)70`io(x`RnCX#RJ}1QS(GI&8JnOlb_MR zVeDbaMaDbCV7(Fxl!Xzn{*FI}bwC`aX==Q5`F4B&VbfplX~&TKQGJl^>^BR@ iKb5`f7nA=)g!}~Ax1l*lgrDvJ0000CTKIY9a1n;w zdgn06eJ)HngW)S)>me5vINJq*a&&r!ZxPBDxO!wW2fe|CSXziJz?iQ5jI;7Kg6d=b z8COdp_yqDt9DhCP2#H8jp#5@r&RvcGb-4uXRbPJr23%;NmZO%%_;p-?9nVWXaLp~< zBZ3jMUbq~)KrD+-+%gPZ6K3cuY&=IC0vBrfw4245z@DE3YJO>8h1;{oMKQC(r)O}4 z7e(hR-*e9a0(mnCJbDbdF0YM{rR{TvV;$NA9Nv0PCVw!UOYM$No&zoEE5d0xRmubR z1g6}!kUjalZ6TlYx@ymhW=T5L`W>Gf2jqC7bw!QA4bMmX4!0U@6NtD@AiMlSimYS; zlZN}~u;ZQsOv)-VuC)Y-KH|1ZI7~x%QlHmS3UbtvD><(^+9Skn z0r=)t06GVD#D+S52rz!{uww0de_2xM9(M4$q$-Yl?I5fWuNtnxKWIPh{|yDV{Zsn{ XE=v_G*^dIP00000NkvXXu0mjfs}nm; delta 750 zcmVD0#->xK~zY`?SIujYui8+0Pwp-Qw=&v zsIx6_X6s$$uHqio($&opD9Dw#hCmBV4W84c!JnW*w?b+{y7wb=?ve}!t=Zbo&~u2T zccwNioeI9i{PfQ6-Cv3A+OF-|uKjuA;-4&h;YPW?Rv<{-CxLVwZMA>_kP1A6aNzbA z33Pqexns4>9DkIQ&^nZ$)PUyaNis^hTdWkQe51Vws8AJ+%cm$YBl!(aMx#;JD>iyL z!hEBdK}6H$^D0DL5GO^Drm0`{HyDb@X7J1G_qH=Kv7svxj}6Ih|B&&ZC+rU~x{kE# zn8fXtyCdfAgqXM24FFQH*Qb`^k-oDUL{J$4t>dbcjeqSX16I0C7(%L%F45kb1OSq0 z-?5sm5~5UKGL)@#RzhQ&5V9c_ep?U9iDvDwx_|ueZ8}S*KCzt1#t|wgwO#ebTG;}P z!^fwCA&yrEm&=(7Cz`hhIe2~c@$$pTvG01)B+L=2Do0|wM8sbXVTvML6?pRX-Eflg zuqnXDXMaZr=48CtsB8i1s>Igc=7(yU^VLpA%ur$^$h%UZ&} gjGOJ<|KG;gFa9sTvu$p!426U7GL($H|Ksl1BwDrj(q_|s;i^)i?*P7F!hf<%n>KCQv}x0({h^ie z3tlK09PwYR{H?07Eas)g5k$OjvU0+QsFWJ%5?*Shx3^$8xR*yTj&hvwA!26yU0K4h zMrHC#6!OA=QF0PaG&BfPRP?jdPjjlbIA#?OgWScO7`qc0lKeu2Rp>Qdg#*Hr*Vp*z zAYUSTl9S{{B!5L#(YG7C=pHLKxCAHuxgKVmc*V?8V(k^Y{j5O7HMWyiqk z$5qZH$?%?}%N-6X`8W6nHQK;d%?}2UFrPz7d;F89e#|Drk7hpG+x>~xQ**k=$sIbKHPD0vJg|K~zY`?SIw5YTGav2XNW+xPWDe zU3PI~cZ9(X_9t@LWs*J$yX_UmOdeqD1!j5(9lPueHhSt_pip+%6O6J$plHuByEO5q zv@-NKh;Bbi`TkO@d|`)i7>98fj~Gcd>3nZ_KKWt(K!C_5EebYa87@xD{rX&(DJO9J zHuOBBGC_jS_kWI%puudy0&LBqPMi+5BLTxBss53cSz1iE(Q!)&G$1if2LY)oM2#{l zZNyMW!+SRmdk8=k23Y!zQfLHl%%O>zOXN{A=`@mx2?EkUmYx_1p!tc7*wwd&i2I6& zl^qL8M2iItc<;0Zx3UqVb^r?XXj=m8%!C8G94jUobbr~BK=!l+UJJd-B9`c&X%I)- zrVrRzaHwfOEkFbT@?HM%^aF3Rm<>YNj2BlL3#BH0GlvysN3XZv*jKS^4coeZGXK7~ zRNv-tqpK=IU6nZcSNFoL40Cq{pDfh*vfrKC1+et&$IV5@;_hz+eT!*N96dWbw{39* z+k%@5e1C4)=zfLzeAUsLJNP9d^H!^1zG^I)_iK}r4m8`G@*?O+H<#XTev*QNuYT{m z_;THNdZNK=lIS;|IO%vZzvk4;4?FfG;CeX07@$;VJMz;>Z(YzG{izJ)UyDI|N}s*T zCoOT(GjC{nWgc_B*YB#ZJ);W$0MtC_zzGlMQz<+SmM8Q|+%4HF_{e!Rz5M?jjQs;W WQl1?2^h7=H)@0001UMu)cm0004VQb$4nuFf3k0000mP)t-sn9!gA001{P zH#avoSXfxBtgL{5fG{vH_?VdZ`1ts^D7au?fPjFOmX-hj00000Cl>pq0007GNklZ}V_A501k)%#c z??s{U)kHtA9e=`(4*5E6!W~xdzDz;4Jdy_?p^To3G;ET(BVx0DdNJA`K5foa|vS= zkK-r+?p+BWq&6G*dkPf-;1E#dZvt(nmIQ?Q=@X#uXH2&rI~`<3sFuc<@D(a0P>K}C z5|9i&@GgV31jV^N#}X_}mLBG;1tr46{u)tNq0)qR4Vz8aOp#8*Is_`i(Z>^?4D;M+ z_83)#(0^1YjX|LE#q?fh@{L`QgarQ;oNuFnmN#mj{{q*|9S;i}^twDlfAs&rAKSktxNY0EZM}U1NwpO!cm^|#00000 LNkvXXu0mjf>|#z8 delta 679 zcmV;Y0$Ba!1+xW^7=Hu<0002CwraKj001gbOjJdf(4YVS05>-`ATVG+PHS8XzOEosoQa4E%z9qvO$QE5eVKTi%yse;HdOk3P343Y#y6Q{M;gLsL_cB2Tw zexAa;y1WJOOMeo>^_-Ds>}E767_)O0vNGI5K??L^S1c5zp}@WaP^E;Xb15y)BGbCy zIs>+%fXFJS4WGa%c=_gQHy{qaz)}$}5uniPk2pIawQSR|1e$#6_yDylFe!2cIDC6h z3cDd91&AU6_+4x6VLZ<}c7x?;E{Ep>VkhxzOY#N{mw(;|asQwirFz%$N|8zMe31Zc z0&HCa1DKy{K>x4lazt;eL|vfqu2?Hd;B{VVQMnrdZ`z6H4yO?|3c?6?!^EQ-iPj*Y ze&unc$Q^&~-rEqWiTxp_P%AwI zZ)0wmUVo*sqvcpqQbjuMUi`du1&z<|c6gh6pYuf9=2C~7WSJz;&Oa062Yqbx<;3=T z6|TCzsT2E~s{fb6A*1Ux(*^~MSVywSc*SN;Nj9+awv!JNTg}ML$ N002ovPDHLkV1g^-JwyNi diff --git a/graphics/pokemon/pidove/overworld_normal.pal b/graphics/pokemon/pidove/overworld_normal.pal index 704bb5f946..820bcb20cd 100644 --- a/graphics/pokemon/pidove/overworld_normal.pal +++ b/graphics/pokemon/pidove/overworld_normal.pal @@ -14,6 +14,6 @@ JASC-PAL 248 184 40 184 96 96 128 128 128 -172 172 172 +150 150 150 0 0 0 0 0 0 diff --git a/graphics/pokemon/pignite/overworld.png b/graphics/pokemon/pignite/overworld.png index 9ea0862b2d49e5ac16a0c4ad24c4fb4b8f023c29..b6b97736b9d7652d5bf51f969a68a47b302c7b50 100644 GIT binary patch delta 719 zcmV;=0xdpr|Ezyx%5cRaa!ke;zsytg_6F;5HNp|y zOYigz9&t95@nZ1*G{Rgp2~P6at;IbEt8jvB3t6 zj+ju)+kYNch2j%3{Z>1%&X_Zvy~Uz4CP=XP6lGC?3zVEe9i+}pP*fMQfcnvw9ohEa z$jbx81?nNI7j1AZa4T@<85YyeLr{GxaDf$affx{yLyen2lI@_>EY*|Ple?*J`AwoP z4iYT225%|!J!o>VPfguEx;U1p5Fl2WIW+jY3P`o)S?5HG=A5_+tTcF!f5A;+Y@V~m zb@w-upVNGq?A+G3Z18T^yuCVo`p>M{;1BsPvp?yHFy3wkw~qh-002ovPDHLkV1j$Z BO#A=< delta 705 zcmV;y0zUoQ1D0yRlQK~zY`?bR`l(=ZeVa3`Ej>VI~j9T;;?+OkqNv~1VJ zU2dzBmz0g`sjw57u)?VvBSO02Mpiy0cH%U#xq!GsLPCAb@=MddpPe{GhdR`u{-3hS z z(eA2gWc5W$&VMgF@FKt47MYOtnwS<31(9{q>E)DC8k}`mT&}H{X@s_%kbuAH^fIS3 z;%6PUNLCcUS`*MMRy3Q%B%84=A3-stGoEzV3i7Ogv>Cv#2rRB*5?{aV@)3xZ3P?J< zg?YhSfu?209{^U@tX`9ia{c`!h(v(6_9JC={RKSX(0>XvjnH`bK26trs9Lsp<*~X? z$N3UuMRfz0%I{RiS+NrhA&Ty{SP_Rt~;+R*?)POyhLKH8PKm{Ii<(KOBr>}to z44tdHZaKQq)15aHYf45?4KPeA4?kD#Jx`)!8q-t-_R@rweo;3FY!ox64it_@@oI0m z?{|65uYc-i*EIS{=~R3|71*1IT_F8M1?KA!Pr}9bZ+ky`!y1b~e@)0d!D@Tkxbl7g zo6^OAp4WkLz|!>+2OsBKKcoYv_OAblH5P#z*^<-jTxTF0Zuak!(e`4|%viiE>7s2M z5|+5m{@sD87x*p9Qy90mo(&9Rx9!!UnX$b7R5~-hy=iY;gjbKvzcg{u?Luj%nQ>W$ nu^xzj&i`#`Grq(BrV#o8{t&*mOIZG;00000NkvXXu0mjf6%$5c diff --git a/graphics/pokemon/pignite/overworld_normal.pal b/graphics/pokemon/pignite/overworld_normal.pal index 5cf1ee3ef0..1454fac04d 100644 --- a/graphics/pokemon/pignite/overworld_normal.pal +++ b/graphics/pokemon/pignite/overworld_normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 16 16 16 0 0 0 -82 49 41 +80 48 40 57 37 37 -189 90 49 +209 95 46 123 57 41 -232 106 43 -210 182 96 -24 32 40 -83 79 60 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +232 112 40 +232 192 56 +56 32 32 +80 48 40 +232 232 248 +200 64 56 +72 72 72 +41 41 41 0 0 0 diff --git a/graphics/pokemon/pignite/overworld_shiny.pal b/graphics/pokemon/pignite/overworld_shiny.pal index 21a3212914..8d967d10b7 100644 --- a/graphics/pokemon/pignite/overworld_shiny.pal +++ b/graphics/pokemon/pignite/overworld_shiny.pal @@ -6,14 +6,14 @@ JASC-PAL 0 0 0 48 56 72 42 48 55 -120 104 240 -101 69 51 +184 136 24 +120 88 40 232 160 32 -204 156 214 +160 144 232 42 48 55 48 56 72 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +232 232 248 +212 121 189 +88 48 40 +56 32 32 0 0 0 diff --git a/graphics/pokemon/purrloin/overworld.png b/graphics/pokemon/purrloin/overworld.png index dd0d58266ef6f2cd22d825453281bae43efd1542..b751a7f8ece89edc9b5a47fb08cfd1736795b4fa 100644 GIT binary patch delta 541 zcmV+&0^tUrBfY9{)Kw zPiz)(%@AQEGU6lYT~6tLS{d`KP9om)5hZ_ufcK=J%K)z45=%X2F%;{AxFg>M1G`I^DmrGQ&|)3H;x`R_W5___u97K2^F zoTN(5Vu)r-jQFwz`XOtHSeDad0Pp&;8gwXpnj+#RP#$M2a|>X9ZuMdJbQ*Q?8dsXX za(8I!b^N>l%$veI6iS|3AmXMk(U{{!&PDjV^i7&|#Jj*OH6=SLX91XNZ&H1=xK|D2 zTx%`XARK)WZ$Ia38>~7V4`Xf$ZIk_*26F8V+9O2Qr!&pET)>CRRG(RG?qSG}W)dOC zKsPv-(o8bfcY{lKIki&xES`rkZ)?=AxOX`fp?QUm87hfeLU%ZoYEJWBbIhHC=T@li+#Dn#P$PvZi(Zm)C6Ju=LQ$RjtNyM9i8s8Ovb1L0e5eg4D0Wc_H-ds!KL fPOt6Yj(6f4Px}k^%vNXV00000NkvXXu0mjfDo*zV delta 496 zcmVpGheiAELB~0683H#sdVXhxBw#DfCE&m1UKLSEKqKX(@i~Y?FhjFp^mzFmOtZh?2235 z;uilXpv?Q{3t*A;FD%ex{qv}ryz^1&yr(9UHk`VD%OYg~q}i0QrzV#%G`_do6e$bk z$~K%Z_LOj$F`zX@osa#(gcwd3+iw|&im(LS60vU)b;=5neG{?$mOCOBmVjIKengN{ z>NC7Kk$2wfwAZ&u

z0CQGNP&_qIJT=f@0P%)6_`m@1hB(PXLg?uDb5>2sLqf>N$Y4MqA7X|@0005FNklh#vEaEBWoZjQ05BK^j;6MIshap#gP6Ch1-cXqh7V#?V2CbAK&rR>}J~?~1 z!(kKg_WYjGaDNc;)D5QV9Oh=QFApp$UgF(gA(Fyk1_*fSEn)^RIm|N^^_NrD$%XZ| z!HD+(3eYT-Pz(bRPoj+I1VGGMbP_;zR^gUUTNIBA;PKrcvKVAE0|cB>B3c(THi`Vc ztfWQ90IU31dWY3b2A6mrAeFprTQ24d`W#qK&#A5hlFETam0W zZ!9Zp7>KyoXM|IOI|n1cgtY;=wuqD+j+uzJl#hoL$;B`ba&G?Z0F9sDFVp&}CZ+1E z$0J@Hh&%CUzlcJv_Wr}uD{->EHY%_FO@YLGIxnK97MOR-Dl7N?4+ypnDg9ECW6C_l vdVz!YDkkT1IJh_Be|o<65VV?S=wtc@^)3&EFdxcA00000NkvXXu0mjf2ig4j delta 597 zcmV-b0;>JG1mXmc7=Hu<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000mP)t-sn9!g(B_;p>0B|@kKo}TMJTb5>2sLqf>N z$Y4MqoA#wP00009a7bBm000id000id0mpBsWB>pGyGcYrRDVdv?bJU{!ax)N@M}Lo zYg?l@SW3acsa#PLCrSgZm_Uph6t06#{^17V#KISFaU^kZ6F-EDqpPc*z&Lv~3ipoo z78Xr-+pq85d(EYqk2vMuxzj8so4FJr?7^A?O$-z-aAv7~t;?;)8H zGEGft%aY~`E`OM}V1!)XmbzGxUnni&%v?bo5lxCZ~&Yt%D?WUW36jyBK1YHuWgzqgZH$CA%@Ur!00000NkvXXu0mjf;B5+G diff --git a/graphics/pokemon/tympole/overworld.png b/graphics/pokemon/tympole/overworld.png index 9f9778553c0d3ad7d6ef6b09818ea5cfbd7aad70..320809dc24bd98e7aef363883c932f5ac26fdfa8 100644 GIT binary patch delta 481 zcmcc5Jb`6`gcJue0|P^`Tl;n(#aJBV?!>U}oXkrg$6%t9YCVuf2J(~Ne*`M)^K@|x ziD-R0?RL>&1s<2hr;|SXuPm z>aaU5>seFB%=L^5d}3J>-S~beRWMJu;I!@7GkdiYjG?;A4F422OjC9eJh00xpx*T* zpFRXprW2&S0CAqx6)@?#Rnz^N;{mMPs641Bnj@y$`jX}t%SuUvZ;dFCd|_Z~Th znN>@<*>>Jg%9i~u)xh;8oa-m=i|Gu43Q^AWTkl2ndVVRd=Wl5IAKWZ9UpJ$asp09Y zvW6ENmrgxrS|sJ5xT$`!Me!eLg(l-U(pxlx*Phwbx1ZVR?*8~%PmR@gSgu69>Cg_@ zqkoanVAu2KZ0`$qgr7LJ{;S&T;)rkRw-(rP2tJ==$ME-JXl-um-Ew_PjBxApPSrtebwE){`E)ecKlxm1l+%vd}i^z US^e~IA1JasUHx3vIVCg!00QaP_W%F@ delta 431 zcmV;g0Z{&s1m6RY7%Bt<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000XkuoKJ?fsAY00009a7bBm000id000id0mpBsWB>pGM@d9MR7l6|)W1){Koke? zBcXdsBhFkCoe_!a3D+Q74Yb1O53cI0-t0p72hdzs7xAz3;lkZBuaFQI)9?0ad+&ba zU0IbXRsL6kE#5b^$S<*!!g-6mLmJ$tooW4&FxoqRO%Nrdy^LHA}qC=HG%1ZMpcIJ8kN^^f&TT5k5`>+MpDz$#K|n>tXMmnqTfJRsJxH ZeFJ0SgVUT7HjV%Q002ovPDHLkV1j5D$*BMU diff --git a/graphics/pokemon/watchog/overworld.png b/graphics/pokemon/watchog/overworld.png index f2e9ff47338fc559ce5ded92ff50e2aaf4f9ec2f..e9184c7375ade42094e37621ea6fbd982f5f6194 100644 GIT binary patch delta 706 zcmV;z0zLh}2Hypc7$*n=0001UMu)cm0004VQb$4nuFf3k0000mP)t-sn9!hDC^&F1 zK#@-sf6%y)0000000000000000002HdIszO00Lb}L_t(oh3%KolEWYfMFXf&|Nny* z)HaO)Y_~J}uoI@6&g9U`g(Sw^wma^)BS-DP;Z2^%)L!wgiXS=8E*OAZH!dy^mMx%{cb#An=#*Ru0EMSH0- ze_@~JYX@o302ifXaiU6XG~>J!cr7vU8TXvZLH+m!SNv^>SIH6Aby8-MlfhGMar8Bn zn7QVFpRihUu9cs!1?LN7_}fMYIAh@=YH${8lX*5am6*BafN!)IQ;HFmoRa2W{6Q(= zuaxW0$>oV3Q(ooE(Exc|aje>iAKg4SVYItyUf52Fh z%tka;T;B|d!7*ZezeK^|(6xJmq+TKMKe(pehhzNw%vJwlu!NQdS#O|_!)5R&dwx>u zZ}dpeaa%_~w6l?LaKnG|KpBw}jsLiqqsb#>$KH|Pl$S6K3Ta^qJT%y#%~=HW{_N84 oCX5oFlMfPq%RX~(#~;QI*en_z5SD^plmGw#07*qoM6N<$f}qw+BLDyZ delta 803 zcmV+;1Kj-I1;7T77&in10002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000XP)t-sn9!hFDLHd7L6JWde-IE5V{6md00009a7bBm000id000id0mpBsWB>pH zs7XXYR7l6|l}&HcFc`;OEakkcokVY4(!V1V!f9 zHmI0yz_;XaSHFejiiEUBeaX*${QvtUw$XDu$8-Fn7);=MX7QQJ5dP`gf0Ge)6g!M_ z-%m(CLnM(u%zHD2zAM;eJWcW?>1T*IXGz$X;j^VP-Y%mNgIM%42+9&>JQIm(L<7dC zo!#Y5`V$NW(sN-9Vwn-@{^a?>>95NO-K-f~z59zx%K%E)${5^81Jz4K3QD)w>l7v4y{w7~a9J5x@*)jp+JErh8N0kZB=Wvw7xJW@v-Y zVkVO_;xM)Z*m%oGe?}ap*3mO38LXUX5K}-sMQHqMc729S1IZHEmnfqlI0WtYuihjSQFt52)3 z_#Fg6NL;2?2fv;NL2U%nAh^7;W(fM!!dClc4E8x=ueAXVVS-^mO?$j_^QbFc}0K#$tfhauv0007xNklyq0b426TR5E(-I{%>1J_zD8z?es@ytewP;KUtguf`5Izo_OMkC!ToX35~$< z0=aZ~!2{kwcLmsG#ykY{-UkHl(MnLR*ygX`y$il;Z*Gta@CY9Ca+|CCJ+Mib@lxLL zpYP4z#9-KJ`;NjPzv^oh&Nyc{Uo4E~Z({J!*Ei7N!B{D1Wg!fvm8qlX(D4q@93G;d#URsJMU%Tw#X4Y`gW2Z#&-?En+L507z^ z7%YBZtH)eX=PZE}u9704a)ekbobq*w@g3hq;I^u+J>FhJik(eFvVJ+~Ox(&Eb;aHy2(Fv@4+elu)k#dRg7f zIsB1Z?zrzcFU&4+yW0H7!^!}_FBlmR4qXE>1gnx9sl$C%)gN=|EIdqj{Y5pu;?@AD zz^I967=PFk3=Rm|-2e$dI~@>i@YMnK^ihKwg#lfbZEn+zZwc-H0eR?r;sKI(DPeU; zFi&ac>fpi&@DlYNopCuQho33iPDR8P^2 zb1dF3B9LnvRC$(!4rfg%Q{q!bKCV5d_z|rDoB9)8&dEiSEV`bfnqYHP zR$?I|g`X`e7a!&n$U4fGJ-~!Zb1 z#awYR6HsSBPgLp_R3()%xK1q(*%Bo&>fDO1Svy7*L$Y@3AJwz*{jg)AW~kI5Z~MTz z@8{kDRs`RQcjQ0^8!y7q(;j2v#v~KlJ7u=( z22yaudW<$LC0JZj)?8djL5`Cr_2T$SymG?FaXeM8ZbpvR*;a271*eDcTs_(8{_;G; zAYNu2MGnLS4iVg6er1wL6(C+-u%-wcfWz7KmEili6Tw0Wa%?6G>tD*XrTlKHt#RT*`f=2ZOdGhu-f z0W4ya$OY{M-_cA6+HE}R-gQH4TcsT0Iuf%JA+F;E^TgfGB}(MNNy6%XfHQi_ZeRYK z2);YH|9yXi8Jq1i5hs2*ld5;vLLAG$1B4Nx+<$o@up4~}p%etKKm0mzq+kZf3qrq~ z`ITEOtdAsCq176{kOT3V-#e>l70H>x8K+fOa)fC`WCQaz8R^KEFvOX!1m;-)0B>c7 z8S%BjnK}_p5Zn5V3S5P-fm+}YKB4w?a;MKj&>Be48b*wf2OYJ}H#m zKrqb0*MU>`zzm$+VKd5ynGf Date: Sun, 17 Nov 2024 09:21:01 +0000 Subject: [PATCH 404/544] Mimicry updates typing with RemoveAllTerrains() (#5666) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/battle_util.h | 1 + src/battle_script_commands.c | 1 + src/battle_util.c | 2 +- .../move_effect/hit_set_remove_terrain.c | 32 +++++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/include/battle_util.h b/include/battle_util.h index ec8c03a6bd..71d81ce3bb 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -267,6 +267,7 @@ bool32 CanGetFrostbite(u32 battler); bool32 CanBeConfused(u32 battler); bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag); u32 GetBattlerAffectionHearts(u32 battler); +void TryToRevertMimicryAndFlags(void); u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc); bool32 ChangeTypeBasedOnTerrain(u32 battler); void RemoveConfusionStatus(u32 battler); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 7212560ebd..11bf05fb0f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8655,6 +8655,7 @@ static void RemoveAllTerrains(void) break; } gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain + TryToRevertMimicryAndFlags(); } #define DEFOG_CLEAR(status, structField, battlescript, move)\ diff --git a/src/battle_util.c b/src/battle_util.c index 3ee127f389..de0d3e7cc6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1612,7 +1612,7 @@ u32 GetBattlerAffectionHearts(u32 battler) return GetMonAffectionHearts(&party[gBattlerPartyIndexes[battler]]); } -static void TryToRevertMimicryAndFlags(void) +void TryToRevertMimicryAndFlags(void) { u32 i; diff --git a/test/battle/move_effect/hit_set_remove_terrain.c b/test/battle/move_effect/hit_set_remove_terrain.c index 549b6bf04f..1efb939c34 100644 --- a/test/battle/move_effect/hit_set_remove_terrain.c +++ b/test/battle/move_effect/hit_set_remove_terrain.c @@ -124,3 +124,35 @@ AI_SINGLE_BATTLE_TEST("Ice Spinner can be chosen by the AI regardless if there i } } } + +SINGLE_BATTLE_TEST("Steel Roller and Ice Spinner reverts typing on Mimicry users") +{ + u32 j; + static const u16 terrainMoves[] = + { + MOVE_ELECTRIC_TERRAIN, + MOVE_PSYCHIC_TERRAIN, + MOVE_GRASSY_TERRAIN, + MOVE_MISTY_TERRAIN, + }; + + u16 terrainMove = MOVE_NONE; + u16 removeTerrainMove = MOVE_NONE; + + for (j = 0; j < ARRAY_COUNT(terrainMoves); j++) + { + PARAMETRIZE { removeTerrainMove = MOVE_STEEL_ROLLER; terrainMove = terrainMoves[j]; } + PARAMETRIZE { removeTerrainMove = MOVE_ICE_SPINNER; terrainMove = terrainMoves[j]; } + } + + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_STUNFISK_GALARIAN].types[1] == TYPE_STEEL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(opponent, terrainMove); MOVE(player, removeTerrainMove); } + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + MESSAGE("It doesn't affect Foe Stunfisk…"); + } +} From 9f1b9008095e6900fe8e9a947a94074ee4bab860 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 17 Nov 2024 20:36:55 +0100 Subject: [PATCH 405/544] Fixes Ice Face regression (#5678) --- src/battle_script_commands.c | 1 - test/battle/ability/ice_face.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 11bf05fb0f..c373778b68 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7372,7 +7372,6 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) break; case ABILITY_FORECAST: case ABILITY_FLOWER_GIFT: - case ABILITY_ICE_FACE: case ABILITY_PROTOSYNTHESIS: if (AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, i, 0, 0, 0)) return TRUE; diff --git a/test/battle/ability/ice_face.c b/test/battle/ability/ice_face.c index 54a307754c..22b67a7a53 100644 --- a/test/battle/ability/ice_face.c +++ b/test/battle/ability/ice_face.c @@ -135,3 +135,33 @@ SINGLE_BATTLE_TEST("Ice Face doesn't transform Eiscue if Cloud Nine/Air Lock is MESSAGE("Eiscue fainted!"); } } + +SINGLE_BATTLE_TEST("Ice Face is not restored if hail or snow and Eiscue are already out") +{ + u32 move; + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + PARAMETRIZE { move = MOVE_HAIL; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); + ASSUME(gMovesInfo[MOVE_HAIL].effect == EFFECT_HAIL); + PLAYER(SPECIES_EISCUE); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, move); } + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + } + } +} From 70ca5060f9c281e2916b3f45badce27d69d1b47f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:18:26 +0100 Subject: [PATCH 406/544] Fixes wrong Id when AI chooses mon to switch in (#5684) --- src/battle_controller_opponent.c | 35 ++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index ef12589681..b6ffd67b75 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -648,6 +648,22 @@ static void OpponentHandleChooseItem(u32 battler) OpponentBufferExecCompleted(battler); } +static inline bool32 IsAcePokemon(u32 chosenMonId, u32 pokemonInBattle, u32 battler) +{ + return AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON + && (chosenMonId == CalculateEnemyPartyCountInSide(battler) - 1) + && CountAIAliveNonEggMonsExcept(PARTY_SIZE) != pokemonInBattle; +} + +static inline bool32 IsDoubleAcePokemon(u32 chosenMonId, u32 pokemonInBattle, u32 battler) +{ + return AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_DOUBLE_ACE_POKEMON + && (chosenMonId == CalculateEnemyPartyCountInSide(battler) - 1) + && (chosenMonId == CalculateEnemyPartyCountInSide(battler) - 2) + && CountAIAliveNonEggMonsExcept(PARTY_SIZE) != pokemonInBattle + && CountAIAliveNonEggMonsExcept(PARTY_SIZE-1) != pokemonInBattle; +} + static void OpponentHandleChoosePokemon(u32 battler) { s32 chosenMonId; @@ -680,20 +696,14 @@ static void OpponentHandleChoosePokemon(u32 battler) GetAIPartyIndexes(battler, &firstId, &lastId); for (chosenMonId = (lastId-1); chosenMonId >= firstId; chosenMonId--) { - if (!IsValidForBattle(&gEnemyParty[chosenMonId])) - continue; - if (chosenMonId == gBattlerPartyIndexes[battler1] + if (!IsValidForBattle(&gEnemyParty[chosenMonId]) + || chosenMonId == gBattlerPartyIndexes[battler1] || chosenMonId == gBattlerPartyIndexes[battler2]) continue; - if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON) - && ((chosenMonId == CalculateEnemyPartyCountInSide(battler) - 1) || CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle)) - continue; - if ((AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_DOUBLE_ACE_POKEMON) - && (((chosenMonId == CalculateEnemyPartyCountInSide(battler) - 1) || (chosenMonId == CalculateEnemyPartyCountInSide(battler) - 2)) - || (CountAIAliveNonEggMonsExcept(PARTY_SIZE) == pokemonInBattle || CountAIAliveNonEggMonsExcept(PARTY_SIZE-1) == pokemonInBattle))) - continue; - // mon is valid - break; + + if (!IsAcePokemon(chosenMonId, pokemonInBattle, battler) + && !IsDoubleAcePokemon(chosenMonId, pokemonInBattle, battler)) + break; } } gBattleStruct->monToSwitchIntoId[battler] = chosenMonId; @@ -709,7 +719,6 @@ static void OpponentHandleChoosePokemon(u32 battler) #endif // TESTING BtlController_EmitChosenMonReturnValue(battler, BUFFER_B, chosenMonId, NULL); OpponentBufferExecCompleted(battler); - } static u8 CountAIAliveNonEggMonsExcept(u8 slotToIgnore) From 5fe39f6019746449f11e43923c119ddff6e8c6d6 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 19 Nov 2024 14:34:20 -0300 Subject: [PATCH 407/544] Fixed incoming master tests --- test/battle/move_effect/hit_set_remove_terrain.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/battle/move_effect/hit_set_remove_terrain.c b/test/battle/move_effect/hit_set_remove_terrain.c index fe40ec0151..a48d316d3f 100644 --- a/test/battle/move_effect/hit_set_remove_terrain.c +++ b/test/battle/move_effect/hit_set_remove_terrain.c @@ -146,13 +146,13 @@ SINGLE_BATTLE_TEST("Steel Roller and Ice Spinner reverts typing on Mimicry users } GIVEN { - ASSUME(gSpeciesInfo[SPECIES_STUNFISK_GALARIAN].types[1] == TYPE_STEEL); + ASSUME(gSpeciesInfo[SPECIES_STUNFISK_GALAR].types[1] == TYPE_STEEL); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_STUNFISK_GALARIAN) { Ability(ABILITY_MIMICRY); } + OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } } WHEN { TURN { MOVE(opponent, terrainMove); MOVE(player, removeTerrainMove); } TURN { MOVE(player, MOVE_TOXIC); } } SCENE { - MESSAGE("It doesn't affect Foe Stunfisk…"); + MESSAGE("It doesn't affect the opposing Stunfisk…"); } } From 572ea141af83caf2f57d50c4e74cb493fb306c88 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:56:34 +0100 Subject: [PATCH 408/544] Fixes Absorb regression caused by #5670 (#5688) --- data/battle_scripts_1.s | 1 - src/battle_script_commands.c | 1 + test/battle/move_effect/absorb.c | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 97dd650088..8d24dc472d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3022,7 +3022,6 @@ BattleScript_EffectAbsorb:: printfromtable gAbsorbDrainStringIds waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER - tryfaintmon BS_TARGET return BattleScript_EffectExplosion:: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 69e41c62d6..2958d200ab 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5727,6 +5727,7 @@ static void Cmd_moveend(void) gBattleMoveDamage = 1; gBattleMoveDamage = GetDrainedBigRootHp(gBattlerAttacker, gBattleMoveDamage); gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE; + effect = TRUE; if (GetBattlerAbility(gBattlerTarget) == ABILITY_LIQUID_OOZE) { gBattleMoveDamage *= -1; diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index 70c1b621af..d046876b1b 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -107,7 +107,6 @@ DOUBLE_BATTLE_TEST("Matcha Gatcha will faint the pokemon if Liquid Ooze drain de } } - SINGLE_BATTLE_TEST("Draining Kiss recovers 75% of the damage dealt") { s16 damage; From 2f7116531bd0be2d9cbddc95d177ba75210c6226 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:12:49 +0100 Subject: [PATCH 409/544] Wrong assumtion in dauntless_shield.c (#5692) --- test/battle/ability/dauntless_shield.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/battle/ability/dauntless_shield.c b/test/battle/ability/dauntless_shield.c index ff7cc723ac..0e6adedfd2 100644 --- a/test/battle/ability/dauntless_shield.c +++ b/test/battle/ability/dauntless_shield.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(B_PROTEAN_LIBERO == GEN_9); + ASSUME(B_DAUNTLESS_SHIELD == GEN_9); } SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage") From 81442e32e23818e30abad25cb68f40bdb4f04c3b Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:46:50 +0100 Subject: [PATCH 410/544] Changes name of B_SCR_NAME_WITH_PREFIX (#5675) --- charmap.txt | 4 +- src/battle_message.c | 188 +++++++++++++++++++++---------------------- 2 files changed, 96 insertions(+), 96 deletions(-) diff --git a/charmap.txt b/charmap.txt index e8e43dc996..63c2f6ebe1 100644 --- a/charmap.txt +++ b/charmap.txt @@ -370,7 +370,7 @@ B_ATK_NAME_WITH_PREFIX = FD 0F B_DEF_NAME_WITH_PREFIX = FD 10 B_EFF_NAME_WITH_PREFIX = FD 11 @ EFF = short for gEffectBattler @ FD 12 - preiously gActiveBattler with prefix -B_SCR_ACTIVE_NAME_WITH_PREFIX = FD 13 +B_SCR_NAME_WITH_PREFIX = FD 13 B_CURRENT_MOVE = FD 14 B_LAST_MOVE = FD 15 B_LAST_ITEM = FD 16 @@ -416,7 +416,7 @@ B_DEF_TEAM2 = FD 3B B_ATK_NAME_WITH_PREFIX2 = FD 3E B_DEF_NAME_WITH_PREFIX2 = FD 3F B_EFF_NAME_WITH_PREFIX2 = FD 40 -B_SCR_ACTIVE_NAME_WITH_PREFIX2 = FD 41 +B_SCR_NAME_WITH_PREFIX2 = FD 41 B_TRAINER1_NAME_WITH_CLASS = FD 42 B_TRAINER2_NAME_WITH_CLASS = FD 43 B_PARTNER_NAME_WITH_CLASS = FD 44 diff --git a/src/battle_message.c b/src/battle_message.c index 6b045bae80..761770d440 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -192,30 +192,30 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = #else [STRINGID_PLAYERWHITEOUT2] = COMPOUND_STRING("You were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"), #endif - [STRINGID_PREVENTSESCAPE] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents escape with {B_SCR_ACTIVE_ABILITY}!\p"), + [STRINGID_PREVENTSESCAPE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} prevents escape with {B_SCR_ACTIVE_ABILITY}!\p"), [STRINGID_HITXTIMES] = COMPOUND_STRING("The Pokémon was hit {B_BUFF1} time(s)!"), //SV has dynamic plural here [STRINGID_PKMNFELLASLEEP] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} fell asleep!"), - [STRINGID_PKMNMADESLEEP] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} made {B_EFF_NAME_WITH_PREFIX2} sleep!"), //not in gen 5+, ability popup + [STRINGID_PKMNMADESLEEP] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_BUFF1} made {B_EFF_NAME_WITH_PREFIX2} sleep!"), //not in gen 5+, ability popup [STRINGID_PKMNALREADYASLEEP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is already asleep!"), [STRINGID_PKMNALREADYASLEEP2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is already asleep!"), [STRINGID_PKMNWASNTAFFECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} wasn't affected!"), //not in gen 5+, ability popup [STRINGID_PKMNWASPOISONED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} was poisoned!"), - [STRINGID_PKMNPOISONEDBY] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} was poisoned by {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), //not in gen 5+, ability popup + [STRINGID_PKMNPOISONEDBY] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} was poisoned by {B_SCR_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), //not in gen 5+, ability popup [STRINGID_PKMNHURTBYPOISON] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was hurt by its poisoning!"), [STRINGID_PKMNALREADYPOISONED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is already poisoned!"), [STRINGID_PKMNBADLYPOISONED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} was badly poisoned!"), [STRINGID_PKMNENERGYDRAINED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} had its energy drained!"), [STRINGID_PKMNWASBURNED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} was burned!"), - [STRINGID_PKMNBURNEDBY] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} burned {B_EFF_NAME_WITH_PREFIX2}!"), //not in gen 5+, ability popup + [STRINGID_PKMNBURNEDBY] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_BUFF1} burned {B_EFF_NAME_WITH_PREFIX2}!"), //not in gen 5+, ability popup [STRINGID_PKMNHURTBYBURN] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was hurt by its burn!"), [STRINGID_PKMNWASFROZEN] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} was frozen solid!"), - [STRINGID_PKMNFROZENBY] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} froze {B_EFF_NAME_WITH_PREFIX2} solid!"), //not in gen 5+, ability popup + [STRINGID_PKMNFROZENBY] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_BUFF1} froze {B_EFF_NAME_WITH_PREFIX2} solid!"), //not in gen 5+, ability popup [STRINGID_PKMNISFROZEN] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is frozen solid!"), [STRINGID_PKMNWASDEFROSTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} thawed out!"), [STRINGID_PKMNWASDEFROSTED2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} thawed out!"), [STRINGID_PKMNWASDEFROSTEDBY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} melted the ice!"), [STRINGID_PKMNWASPARALYZED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} is paralyzed, so it may be unable to move!"), - [STRINGID_PKMNWASPARALYZEDBY] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} paralyzed {B_EFF_NAME_WITH_PREFIX2}, so it may be unable to move!"), //not in gen 5+, ability popup + [STRINGID_PKMNWASPARALYZEDBY] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_BUFF1} paralyzed {B_EFF_NAME_WITH_PREFIX2}, so it may be unable to move!"), //not in gen 5+, ability popup [STRINGID_PKMNISPARALYZED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} couldn't move because it's paralyzed!"), [STRINGID_PKMNISALREADYPARALYZED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is already paralyzed!"), [STRINGID_PKMNHEALEDPARALYSIS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was cured of paralysis!"), @@ -229,7 +229,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNWASCONFUSED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} became confused!"), [STRINGID_PKMNALREADYCONFUSED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is already confused!"), [STRINGID_PKMNFELLINLOVE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} fell in love!"), - [STRINGID_PKMNINLOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is in love with {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"), + [STRINGID_PKMNINLOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is in love with {B_SCR_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNIMMOBILIZEDBYLOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is immobilized by love!"), [STRINGID_PKMNBLOWNAWAY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was blown away!"), //unused [STRINGID_PKMNCHANGEDTYPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} transformed into the {B_BUFF1} type!"), @@ -239,7 +239,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNRAISEDSPDEF] = COMPOUND_STRING("Light Screen made {B_ATK_TEAM2} team stronger against special moves!"), [STRINGID_PKMNRAISEDDEF] = COMPOUND_STRING("Reflect made {B_ATK_TEAM2} team stronger against physical moves!"), [STRINGID_PKMNCOVEREDBYVEIL] = COMPOUND_STRING("{B_ATK_TEAM1} team cloaked itself in a mystical veil!"), - [STRINGID_PKMNUSEDSAFEGUARD] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected by Safeguard!"), + [STRINGID_PKMNUSEDSAFEGUARD] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is protected by Safeguard!"), [STRINGID_PKMNSAFEGUARDEXPIRED] = COMPOUND_STRING("{B_ATK_TEAM1} team is no longer protected by Safeguard!"), [STRINGID_PKMNWENTTOSLEEP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} went to sleep!"), //not in gen 5+ [STRINGID_PKMNSLEPTHEALTHY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} slept and restored its HP!"), @@ -257,7 +257,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNFREEDFROM] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was freed from {B_BUFF1}!"), [STRINGID_PKMNCRASHED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} kept going and crashed!"), [STRINGID_PKMNSHROUDEDINMIST] = gText_PkmnShroudedInMist, - [STRINGID_PKMNPROTECTEDBYMIST] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected by the mist!"), + [STRINGID_PKMNPROTECTEDBYMIST] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is protected by the mist!"), [STRINGID_PKMNGETTINGPUMPED] = gText_PkmnGettingPumped, [STRINGID_PKMNHITWITHRECOIL] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was damaged by the recoil!"), [STRINGID_PKMNPROTECTEDITSELF2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} protected itself!"), @@ -268,7 +268,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNSAPPEDBYLEECHSEED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s health is sapped by Leech Seed!"), [STRINGID_PKMNFASTASLEEP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is fast asleep."), [STRINGID_PKMNWOKEUP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} woke up!"), - [STRINGID_PKMNUPROARKEPTAWAKE] = COMPOUND_STRING("But the uproar kept {B_SCR_ACTIVE_NAME_WITH_PREFIX2} awake!"), + [STRINGID_PKMNUPROARKEPTAWAKE] = COMPOUND_STRING("But the uproar kept {B_SCR_NAME_WITH_PREFIX2} awake!"), [STRINGID_PKMNWOKEUPINUPROAR] = COMPOUND_STRING("The uproar woke {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNCAUSEDUPROAR] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} caused an uproar!"), [STRINGID_PKMNMAKINGUPROAR] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is making an uproar!"), @@ -308,7 +308,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNLAIDCURSE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} cut its own HP and put a curse on {B_DEF_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNAFFLICTEDBYCURSE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is afflicted by the curse!"), [STRINGID_SPIKESSCATTERED] = COMPOUND_STRING("Spikes were scattered on the ground all around {B_DEF_TEAM2} team!"), - [STRINGID_PKMNHURTBYSPIKES] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was hurt by the spikes!"), + [STRINGID_PKMNHURTBYSPIKES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was hurt by the spikes!"), [STRINGID_PKMNIDENTIFIED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was identified!"), [STRINGID_PKMNPERISHCOUNTFELL] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s perish count fell to {B_BUFF1}!"), [STRINGID_PKMNBRACEDITSELF] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} braced itself!"), @@ -351,9 +351,9 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNSHROUDEDITSELF] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} shrouded itself with Magic Coat!"), [STRINGID_PKMNMOVEBOUNCED] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} bounced the {B_CURRENT_MOVE} back!"), [STRINGID_PKMNWAITSFORTARGET] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} waits for a target to make a move!"), - [STRINGID_PKMNSNATCHEDMOVE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} snatched {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"), - [STRINGID_PKMNMADEITRAIN] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it rain!"), //not in gen 5+, ability popup - [STRINGID_PKMNRAISEDSPEED] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its Speed!"), //not in gen 5+, ability popup + [STRINGID_PKMNSNATCHEDMOVE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} snatched {B_SCR_NAME_WITH_PREFIX2}'s move!"), + [STRINGID_PKMNMADEITRAIN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it rain!"), //not in gen 5+, ability popup + [STRINGID_PKMNRAISEDSPEED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its Speed!"), //not in gen 5+, ability popup [STRINGID_PKMNPROTECTEDBY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was protected by {B_DEF_ABILITY}!"), //not in gen 5+, ability popup [STRINGID_PKMNPREVENTSUSAGE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents {B_ATK_NAME_WITH_PREFIX2} from using {B_CURRENT_MOVE}!"), //I don't see this in SV text [STRINGID_PKMNRESTOREDHPUSING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} restored HP using its {B_DEF_ABILITY}!"), //not in gen 5+, ability popup @@ -364,8 +364,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNPREVENTSCONFUSIONWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents confusion!"), //not in gen 5+, ability popup [STRINGID_PKMNRAISEDFIREPOWERWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised the power of Fire-type moves!"), //not in gen 5+, ability popup [STRINGID_PKMNANCHORSITSELFWITH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} anchors itself with {B_DEF_ABILITY}!"), //not in gen 5+, ability popup - [STRINGID_PKMNCUTSATTACKWITH] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cuts {B_DEF_NAME_WITH_PREFIX2}'s Attack!"), //not in gen 5+, ability popup - [STRINGID_PKMNPREVENTSSTATLOSSWITH] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents stat loss!"), //not in gen 5+, ability popup + [STRINGID_PKMNCUTSATTACKWITH] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cuts {B_DEF_NAME_WITH_PREFIX2}'s Attack!"), //not in gen 5+, ability popup + [STRINGID_PKMNPREVENTSSTATLOSSWITH] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents stat loss!"), //not in gen 5+, ability popup [STRINGID_PKMNHURTSWITH] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was hurt by {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), [STRINGID_PKMNTRACED] = COMPOUND_STRING("It traced {B_BUFF1}'s {B_BUFF2}!"), [STRINGID_STATSHARPLY] = gText_StatSharply, @@ -450,30 +450,30 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNIGNOREDX] = COMPOUND_STRING("{B_OPPONENT_MON1_NAME} completely ignored the {B_BUFF1}!"), //safari [STRINGID_THREWPOKEBLOCKATPKMN] = COMPOUND_STRING("{B_PLAYER_NAME} threw a {POKEBLOCK} at the {B_OPPONENT_MON1_NAME}!"), //safari [STRINGID_OUTOFSAFARIBALLS] = COMPOUND_STRING("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of Safari Balls! Game over!\p"), //safari - [STRINGID_PKMNSITEMCUREDPARALYSIS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its paralysis!"), - [STRINGID_PKMNSITEMCUREDPOISON] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its poison!"), - [STRINGID_PKMNSITEMHEALEDBURN] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its burn!"), - [STRINGID_PKMNSITEMDEFROSTEDIT] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} defrosted it!"), - [STRINGID_PKMNSITEMWOKEIT] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} woke it up!"), - [STRINGID_PKMNSITEMSNAPPEDOUT] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} snapped it out of its confusion!"), - [STRINGID_PKMNSITEMCUREDPROBLEM] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its {B_BUFF1} problem!"), - [STRINGID_PKMNSITEMRESTOREDHEALTH] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its health using its {B_LAST_ITEM}!"), - [STRINGID_PKMNSITEMRESTOREDPP] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored PP to its move {B_BUFF1} using its {B_LAST_ITEM}!"), - [STRINGID_PKMNSITEMRESTOREDSTATUS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its stats to normal using its {B_LAST_ITEM}!"), - [STRINGID_PKMNSITEMRESTOREDHPALITTLE] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored a little HP using its {B_LAST_ITEM}!"), + [STRINGID_PKMNSITEMCUREDPARALYSIS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its paralysis!"), + [STRINGID_PKMNSITEMCUREDPOISON] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its poison!"), + [STRINGID_PKMNSITEMHEALEDBURN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its burn!"), + [STRINGID_PKMNSITEMDEFROSTEDIT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} defrosted it!"), + [STRINGID_PKMNSITEMWOKEIT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} woke it up!"), + [STRINGID_PKMNSITEMSNAPPEDOUT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} snapped it out of its confusion!"), + [STRINGID_PKMNSITEMCUREDPROBLEM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its {B_BUFF1} problem!"), + [STRINGID_PKMNSITEMRESTOREDHEALTH] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} restored its health using its {B_LAST_ITEM}!"), + [STRINGID_PKMNSITEMRESTOREDPP] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} restored PP to its move {B_BUFF1} using its {B_LAST_ITEM}!"), + [STRINGID_PKMNSITEMRESTOREDSTATUS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} returned its stats to normal using its {B_LAST_ITEM}!"), + [STRINGID_PKMNSITEMRESTOREDHPALITTLE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} restored a little HP using its {B_LAST_ITEM}!"), [STRINGID_ITEMALLOWSONLYYMOVE] = COMPOUND_STRING("{B_LAST_ITEM} only allows the use of {B_CURRENT_MOVE}!\p"), [STRINGID_PKMNHUNGONWITHX] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} hung on using its {B_LAST_ITEM}!"), [STRINGID_EMPTYSTRING3] = gText_EmptyString3, [STRINGID_PKMNSXPREVENTSBURNS] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} prevents burns!"), //not in gen 5+, ability popup [STRINGID_PKMNSXBLOCKSY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} blocks {B_CURRENT_MOVE}!"), //not in gen 5+, ability popup [STRINGID_PKMNSXRESTOREDHPALITTLE2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} restored its HP a little!"), //not in gen 5+, ability popup - [STRINGID_PKMNSXWHIPPEDUPSANDSTORM] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} whipped up a sandstorm!"), //not in gen 5+, ability popup - [STRINGID_PKMNSXPREVENTSYLOSS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_BUFF1} loss!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXWHIPPEDUPSANDSTORM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} whipped up a sandstorm!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXPREVENTSYLOSS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_BUFF1} loss!"), //not in gen 5+, ability popup [STRINGID_PKMNSXINFATUATEDY] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} infatuated {B_ATK_NAME_WITH_PREFIX2}!"), //not in gen 5+, ability popup [STRINGID_PKMNSXMADEYINEFFECTIVE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made {B_CURRENT_MOVE} ineffective!"), //not in gen 5+, ability popup - [STRINGID_PKMNSXCUREDYPROBLEM] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXCUREDYPROBLEM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup [STRINGID_ITSUCKEDLIQUIDOOZE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} sucked up the liquid ooze!"), - [STRINGID_PKMNTRANSFORMED] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"), + [STRINGID_PKMNTRANSFORMED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} transformed!"), [STRINGID_ELECTRICITYWEAKENED] = COMPOUND_STRING("Electricity's power was weakened!"), [STRINGID_FIREWEAKENED] = COMPOUND_STRING("Fire's power was weakened!"), [STRINGID_PKMNHIDUNDERWATER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} hid underwater!"), @@ -483,14 +483,14 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PLAYERDEFEATEDTRAINER1] = sText_PlayerDefeatedLinkTrainerTrainer1, [STRINGID_SOOTHINGAROMA] = COMPOUND_STRING("A soothing aroma wafted through the area!"), [STRINGID_ITEMSCANTBEUSEDNOW] = COMPOUND_STRING("Items can't be used now.{PAUSE 64}"), //not in gen 5+, i think - [STRINGID_FORXCOMMAYZ] = COMPOUND_STRING("For {B_SCR_ACTIVE_NAME_WITH_PREFIX2}, {B_LAST_ITEM} {B_BUFF1}"), //not in gen 5+, expansion doesn't use anymore - [STRINGID_USINGITEMSTATOFPKMNROSE] = COMPOUND_STRING("Using {B_LAST_ITEM}, the {B_BUFF1} of {B_SCR_ACTIVE_NAME_WITH_PREFIX2} {B_BUFF2}"), //todo: update this, will require code changes - [STRINGID_PKMNUSEDXTOGETPUMPED] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used the {B_LAST_ITEM} to get pumped!"), + [STRINGID_FORXCOMMAYZ] = COMPOUND_STRING("For {B_SCR_NAME_WITH_PREFIX2}, {B_LAST_ITEM} {B_BUFF1}"), //not in gen 5+, expansion doesn't use anymore + [STRINGID_USINGITEMSTATOFPKMNROSE] = COMPOUND_STRING("Using {B_LAST_ITEM}, the {B_BUFF1} of {B_SCR_NAME_WITH_PREFIX2} {B_BUFF2}"), //todo: update this, will require code changes + [STRINGID_PKMNUSEDXTOGETPUMPED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} used the {B_LAST_ITEM} to get pumped!"), [STRINGID_PKMNSXMADEYUSELESS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made {B_CURRENT_MOVE} useless!"), //not in gen 5+, ability popup [STRINGID_PKMNTRAPPEDBYSANDTOMB] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} became trapped by the quicksand!"), [STRINGID_EMPTYSTRING4] = COMPOUND_STRING(""), [STRINGID_ABOOSTED] = COMPOUND_STRING(" a boosted"), - [STRINGID_PKMNSXINTENSIFIEDSUN] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} intensified the sun's rays!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXINTENSIFIEDSUN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} intensified the sun's rays!"), //not in gen 5+, ability popup [STRINGID_PKMNMAKESGROUNDMISS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} makes Ground-type moves miss with {B_DEF_ABILITY}!"), //not in gen 5+, ability popup [STRINGID_YOUTHROWABALLNOWRIGHT] = COMPOUND_STRING("You throw a Ball now, right? I… I'll do my best!"), [STRINGID_PKMNSXTOOKATTACK] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} took the attack!"), //In gen 5+ but without naming the ability @@ -500,35 +500,35 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNFLEDUSINGITS] = COMPOUND_STRING("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled using its {B_LAST_ITEM}!\p"), [STRINGID_PKMNFLEDUSING] = COMPOUND_STRING("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled using {B_ATK_ABILITY}!\p"), //not in gen 5+ [STRINGID_PKMNWASDRAGGEDOUT] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was dragged out!\p"), - [STRINGID_PREVENTEDFROMWORKING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevented {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1} from working!"), //unused - [STRINGID_PKMNSITEMNORMALIZEDSTATUS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} normalized its status!"), + [STRINGID_PREVENTEDFROMWORKING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevented {B_SCR_NAME_WITH_PREFIX2}'s {B_BUFF1} from working!"), //unused + [STRINGID_PKMNSITEMNORMALIZEDSTATUS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} normalized its status!"), [STRINGID_TRAINER1USEDITEM] = COMPOUND_STRING("{B_ATK_TRAINER_NAME_WITH_CLASS} used {B_LAST_ITEM}!"), [STRINGID_BOXISFULL] = COMPOUND_STRING("The Box is full! You can't catch any more!\p"), [STRINGID_PKMNAVOIDEDATTACK] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} avoided the attack!"), - [STRINGID_PKMNSXMADEITINEFFECTIVE] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it ineffective!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXMADEITINEFFECTIVE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it ineffective!"), //not in gen 5+, ability popup [STRINGID_PKMNSXPREVENTSFLINCHING] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} prevents flinching!"), //not in gen 5+, ability popup [STRINGID_PKMNALREADYHASBURN] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is already burned!"), [STRINGID_STATSWONTDECREASE2] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s stats won't go any lower!"), - [STRINGID_PKMNSXBLOCKSY2] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} blocks {B_CURRENT_MOVE}!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXBLOCKSY2] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} blocks {B_CURRENT_MOVE}!"), //not in gen 5+, ability popup [STRINGID_PKMNSXWOREOFF] = COMPOUND_STRING("{B_ATK_TEAM1} team's {B_BUFF1} wore off!"), [STRINGID_PKMNRAISEDDEFALITTLE] = COMPOUND_STRING("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE} raised DEFENSE a little!"), //expansion doesn't use anymore [STRINGID_PKMNRAISEDSPDEFALITTLE] = COMPOUND_STRING("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE} raised SP. DEF a little!"), //expansion doesn't use anymore [STRINGID_THEWALLSHATTERED] = COMPOUND_STRING("The wall shattered!"), //not in gen5+, uses "your teams light screen wore off!" etc instead [STRINGID_PKMNSXPREVENTSYSZ] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"), - [STRINGID_PKMNSXCUREDITSYPROBLEM] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXCUREDITSYPROBLEM] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"), //not in gen 5+, ability popup [STRINGID_ATTACKERCANTESCAPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} can't escape!"), [STRINGID_PKMNOBTAINEDX] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}."), [STRINGID_PKMNOBTAINEDX2] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."), [STRINGID_PKMNOBTAINEDXYOBTAINEDZ] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."), [STRINGID_BUTNOEFFECT] = COMPOUND_STRING("But it had no effect!"), - [STRINGID_PKMNSXHADNOEFFECTONY] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} had no effect on {B_EFF_NAME_WITH_PREFIX2}!"), //not in gen 5+, ability popup + [STRINGID_PKMNSXHADNOEFFECTONY] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} had no effect on {B_EFF_NAME_WITH_PREFIX2}!"), //not in gen 5+, ability popup [STRINGID_TWOENEMIESDEFEATED] = sText_TwoInGameTrainersDefeated, [STRINGID_TRAINER2LOSETEXT] = COMPOUND_STRING("{B_TRAINER2_LOSE_TEXT}"), [STRINGID_PKMNINCAPABLEOFPOWER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} appears incapable of using its power!"), - [STRINGID_GLINTAPPEARSINEYE] = COMPOUND_STRING("A glint appears in {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s eyes!"), - [STRINGID_PKMNGETTINGINTOPOSITION] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into position!"), - [STRINGID_PKMNBEGANGROWLINGDEEPLY] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!"), - [STRINGID_PKMNEAGERFORMORE] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!"), + [STRINGID_GLINTAPPEARSINEYE] = COMPOUND_STRING("A glint appears in {B_SCR_NAME_WITH_PREFIX2}'s eyes!"), + [STRINGID_PKMNGETTINGINTOPOSITION] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is getting into position!"), + [STRINGID_PKMNBEGANGROWLINGDEEPLY] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} began growling deeply!"), + [STRINGID_PKMNEAGERFORMORE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is eager for more!"), [STRINGID_DEFEATEDOPPONENTBYREFEREE] = COMPOUND_STRING("{B_PLAYER_MON1_NAME} defeated the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"), [STRINGID_LOSTTOOPPONENTBYREFEREE] = COMPOUND_STRING("{B_PLAYER_MON1_NAME} lost to the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"), [STRINGID_TIEDOPPONENTBYREFEREE] = COMPOUND_STRING("{B_PLAYER_MON1_NAME} tied the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"), @@ -584,7 +584,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_KINDOFFER] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} took the kind offer!"), [STRINGID_RESETSTARGETSSTATLEVELS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s stat changes were removed!"), [STRINGID_EMPTYSTRING6] = sText_EmptyString4, - [STRINGID_ALLYSWITCHPOSITION] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} and {B_SCR_ACTIVE_NAME_WITH_PREFIX2} switched places!"), + [STRINGID_ALLYSWITCHPOSITION] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} and {B_SCR_NAME_WITH_PREFIX2} switched places!"), [STRINGID_RESTORETARGETSHEALTH] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s HP was restored!"), [STRINGID_TOOKPJMNINTOTHESKY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX2} into the sky!"), [STRINGID_FREEDFROMSKYDROP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was freed from the Sky Drop!"), @@ -613,15 +613,15 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ATTACKERABILITYSTATRAISE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} raised its {B_BUFF1}!"), [STRINGID_POISONHEALHPUP] = COMPOUND_STRING("The poisoning healed {B_ATK_NAME_WITH_PREFIX2} a little bit!"), //don't think this message is displayed anymore [STRINGID_BADDREAMSDMG] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is tormented!"), - [STRINGID_MOLDBREAKERENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} breaks the mold!"), - [STRINGID_TERAVOLTENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a bursting aura!"), - [STRINGID_TURBOBLAZEENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a blazing aura!"), - [STRINGID_SLOWSTARTENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is slow to get going!"), + [STRINGID_MOLDBREAKERENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} breaks the mold!"), + [STRINGID_TERAVOLTENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is radiating a bursting aura!"), + [STRINGID_TURBOBLAZEENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is radiating a blazing aura!"), + [STRINGID_SLOWSTARTENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is slow to get going!"), [STRINGID_SLOWSTARTEND] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} finally got its act together!"), [STRINGID_SOLARPOWERHPDROP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} takes its toll!"), //don't think this message is displayed anymore [STRINGID_AFTERMATHDMG] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was hurt!"), - [STRINGID_ANTICIPATIONACTIVATES] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered!"), - [STRINGID_FOREWARNACTIVATES] = COMPOUND_STRING("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX2} to {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), + [STRINGID_ANTICIPATIONACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} shuddered!"), + [STRINGID_FOREWARNACTIVATES] = COMPOUND_STRING("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_NAME_WITH_PREFIX2} to {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"), [STRINGID_ICEBODYHPGAIN] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} healed it a little bit!"), //don't think this message is displayed anymore [STRINGID_SNOWWARNINGHAIL] = COMPOUND_STRING("It started to hail!"), [STRINGID_FRISKACTIVATES] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX2} and found its {B_LAST_ITEM}!"), @@ -630,11 +630,11 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_LASTABILITYRAISEDSTAT] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} raised its {B_BUFF1}!"), [STRINGID_MAGICBOUNCEACTIVATES] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} bounced the {B_ATK_NAME_WITH_PREFIX2} back!"), [STRINGID_PROTEANTYPECHANGE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed it into the {B_BUFF1} type!"), - [STRINGID_SYMBIOSISITEMPASS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM} to {B_ATK_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"), - [STRINGID_STEALTHROCKDMG] = COMPOUND_STRING("Pointed stones dug into {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"), + [STRINGID_SYMBIOSISITEMPASS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} passed its {B_LAST_ITEM} to {B_ATK_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"), + [STRINGID_STEALTHROCKDMG] = COMPOUND_STRING("Pointed stones dug into {B_SCR_NAME_WITH_PREFIX2}!"), [STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_ATK_TEAM2} team!"), - [STRINGID_TOXICSPIKESPOISONED] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!"), - [STRINGID_STICKYWEBSWITCHIN] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was caught in a sticky web!"), + [STRINGID_TOXICSPIKESPOISONED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was poisoned!"), + [STRINGID_STICKYWEBSWITCHIN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was caught in a sticky web!"), [STRINGID_HEALINGWISHCAMETRUE] = COMPOUND_STRING("The healing wish came true for {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_HEALINGWISHHEALED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} regained health!"), [STRINGID_LUNARDANCECAMETRUE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became cloaked in mystical moonlight!"), @@ -666,7 +666,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_SEVERELY] = gText_severely, [STRINGID_INFESTATION] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} has been afflicted with an infestation by {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_NOEFFECTONTARGET] = COMPOUND_STRING("It won't have any effect on {B_DEF_NAME_WITH_PREFIX2}!"), - [STRINGID_BURSTINGFLAMESHIT] = COMPOUND_STRING("The bursting flames hit {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"), + [STRINGID_BURSTINGFLAMESHIT] = COMPOUND_STRING("The bursting flames hit {B_SCR_NAME_WITH_PREFIX2}!"), [STRINGID_BESTOWITEMGIVING] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM} from {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_THIRDTYPEADDED] = COMPOUND_STRING("{B_BUFF1} type was added to {B_DEF_NAME_WITH_PREFIX2}!"), [STRINGID_FELLFORFEINT] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} fell for the feint!"), @@ -692,46 +692,46 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_GEMACTIVATES] = COMPOUND_STRING("The {B_LAST_ITEM} strengthened {B_ATK_NAME_WITH_PREFIX2}'s power!"), [STRINGID_BERRYDMGREDUCES] = COMPOUND_STRING("The {B_LAST_ITEM} weakened the damage to {B_DEF_NAME_WITH_PREFIX2}!"), [STRINGID_TARGETATEITEM] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} ate its {B_LAST_ITEM}!"), - [STRINGID_AIRBALLOONFLOAT] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air with its Air Balloon!"), + [STRINGID_AIRBALLOONFLOAT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} floats in the air with its Air Balloon!"), [STRINGID_AIRBALLOONPOP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s Air Balloon popped!"), [STRINGID_INCINERATEBURN] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} was burnt up!"), [STRINGID_BUGBITE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} stole and ate its target's {B_LAST_ITEM}!"), [STRINGID_ILLUSIONWOREOFF] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s illusion wore off!"), [STRINGID_ATTACKERCUREDTARGETSTATUS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} cured {B_DEF_NAME_WITH_PREFIX2}'s problem!"), [STRINGID_ATTACKERLOSTFIRETYPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} burned itself out!"), - [STRINGID_HEALERCURE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} cured {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s problem!"), - [STRINGID_SCRIPTINGABILITYSTATRAISE] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"), - [STRINGID_RECEIVERABILITYTAKEOVER] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} was taken over!"), + [STRINGID_HEALERCURE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} cured {B_SCR_NAME_WITH_PREFIX2}'s problem!"), + [STRINGID_SCRIPTINGABILITYSTATRAISE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"), + [STRINGID_RECEIVERABILITYTAKEOVER] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} was taken over!"), [STRINGID_PKNMABSORBINGPOWER] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is absorbing power!"), [STRINGID_NOONEWILLBEABLETORUNAWAY] = COMPOUND_STRING("No one will be able to run away during the next turn!"), - [STRINGID_DESTINYKNOTACTIVATES] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"), + [STRINGID_DESTINYKNOTACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"), [STRINGID_CLOAKEDINAFREEZINGLIGHT] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became cloaked in a freezing light!"), [STRINGID_CLEARAMULETWONTLOWERSTATS] = COMPOUND_STRING("The effects of the {B_LAST_ITEM} held by {B_DEF_NAME_WITH_PREFIX2} prevents its stats from being lowered!"), [STRINGID_FERVENTWISHREACHED] = COMPOUND_STRING("{B_ATK_TRAINER_NAME}'s fervent wish has reached {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_AIRLOCKACTIVATES] = COMPOUND_STRING("The effects of the weather disappeared."), - [STRINGID_PRESSUREENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its pressure!"), - [STRINGID_DARKAURAENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a dark aura!"), - [STRINGID_FAIRYAURAENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a fairy aura!"), - [STRINGID_AURABREAKENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all other Pokémon's auras!"), - [STRINGID_COMATOSEENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!"), + [STRINGID_PRESSUREENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is exerting its pressure!"), + [STRINGID_DARKAURAENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is radiating a dark aura!"), + [STRINGID_FAIRYAURAENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is radiating a fairy aura!"), + [STRINGID_AURABREAKENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} reversed all other Pokémon's auras!"), + [STRINGID_COMATOSEENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is drowsing!"), [STRINGID_SCREENCLEANERENTERS] = COMPOUND_STRING("All screens on the field were cleansed!"), - [STRINGID_FETCHEDPOKEBALL] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found a {B_LAST_ITEM}!"), - [STRINGID_BATTLERABILITYRAISEDSTAT] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"), + [STRINGID_FETCHEDPOKEBALL] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} found a {B_LAST_ITEM}!"), + [STRINGID_BATTLERABILITYRAISEDSTAT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"), [STRINGID_ASANDSTORMKICKEDUP] = COMPOUND_STRING("A sandstorm kicked up!"), [STRINGID_PKMNSWILLPERISHIN3TURNS] = COMPOUND_STRING("Both Pokémon will perish in three turns!"), //don't think this message is displayed anymore [STRINGID_ABILITYRAISEDSTATDRASTICALLY] = COMPOUND_STRING("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1} drastically!"), [STRINGID_AURAFLAREDTOLIFE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!"), - [STRINGID_ASONEENTERS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has two Abilities!"), + [STRINGID_ASONEENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} has two Abilities!"), [STRINGID_CURIOUSMEDICINEENTERS] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s stat changes were removed!"), [STRINGID_CANACTFASTERTHANKSTO] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} can act faster than normal, thanks to its {B_BUFF1}!"), - [STRINGID_MICLEBERRYACTIVATES] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its next move using {B_LAST_ITEM}!"), - [STRINGID_PKMNSHOOKOFFTHETAUNT] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off the taunt!"), - [STRINGID_PKMNGOTOVERITSINFATUATION] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over its infatuation!"), + [STRINGID_MICLEBERRYACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} boosted the accuracy of its next move using {B_LAST_ITEM}!"), + [STRINGID_PKMNSHOOKOFFTHETAUNT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} shook off the taunt!"), + [STRINGID_PKMNGOTOVERITSINFATUATION] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} got over its infatuation!"), [STRINGID_ITEMCANNOTBEREMOVED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s item cannot be removed!"), [STRINGID_STICKYBARBTRANSFER] = COMPOUND_STRING("The {B_LAST_ITEM} attached itself to {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNBURNHEALED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s burn was cured!"), - [STRINGID_REDCARDACTIVATE] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its Red Card against {B_ATK_NAME_WITH_PREFIX2}!"), - [STRINGID_EJECTBUTTONACTIVATE] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched out with the {B_LAST_ITEM}!"), + [STRINGID_REDCARDACTIVATE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} held up its Red Card against {B_ATK_NAME_WITH_PREFIX2}!"), + [STRINGID_EJECTBUTTONACTIVATE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is switched out with the {B_LAST_ITEM}!"), [STRINGID_ATKGOTOVERINFATUATION] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} got over its infatuation!"), [STRINGID_TORMENTEDNOMORE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is no longer tormented!"), [STRINGID_HEALBLOCKEDNOMORE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is cured of its heal block!"), @@ -750,7 +750,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_MYSTERIOUSAIRCURRENTBLOWSON] = COMPOUND_STRING("The mysterious strong winds blow on regardless!"), [STRINGID_ATTACKWEAKENEDBSTRONGWINDS] = COMPOUND_STRING("The mysterious strong winds weakened the attack!"), [STRINGID_STUFFCHEEKSCANTSELECT] = COMPOUND_STRING("It can't use the move because it doesn't have a Berry!\p"), - [STRINGID_PKMNREVERTEDTOPRIMAL] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s Primal Reversion! It reverted to its primal state!"), + [STRINGID_PKMNREVERTEDTOPRIMAL] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s Primal Reversion! It reverted to its primal state!"), [STRINGID_BUTPOKEMONCANTUSETHEMOVE] = COMPOUND_STRING("But {B_ATK_NAME_WITH_PREFIX2} can't use the move!"), [STRINGID_BUTHOOPACANTUSEIT] = COMPOUND_STRING("But {B_ATK_NAME_WITH_PREFIX2} can't use it the way it is now!"), [STRINGID_BROKETHROUGHPROTECTION] = COMPOUND_STRING("It broke through {B_DEF_NAME_WITH_PREFIX2}'s protection!"), @@ -758,7 +758,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_SWAPPEDABILITIES] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} swapped Abilities with its target!"), [STRINGID_PASTELVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} is protected by a pastel veil!"), [STRINGID_PASTELVEILENTERS] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} was cured of its poisoning!"), - [STRINGID_BATTLERTYPECHANGEDTO] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s type changed to {B_BUFF1}!"), + [STRINGID_BATTLERTYPECHANGEDTO] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s type changed to {B_BUFF1}!"), [STRINGID_BOTHCANNOLONGERESCAPE] = COMPOUND_STRING("Neither Pokémon can run away!"), [STRINGID_CANTESCAPEDUETOUSEDMOVE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} can no longer escape because it used No Retreat!"), [STRINGID_PKMNBECAMEWEAKERTOFIRE] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} became weaker to fire!"), @@ -776,12 +776,12 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PLAYERPAIDPRIZEMONEY] = COMPOUND_STRING("You gave ¥{B_BUFF1} to the winner…\pYou were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"), [STRINGID_ZPOWERSURROUNDS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} surrounded itself with its Z-Power!"), [STRINGID_ZMOVEUNLEASHED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} unleashes its full-force Z-Move!"), - [STRINGID_ZMOVERESETSSTATS] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its decreased stats to normal using its Z-Power!"), - [STRINGID_ZMOVEALLSTATSUP] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its stats using its Z-Power!"), - [STRINGID_ZMOVEZBOOSTCRIT] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its critical-hit ratio using its Z-Power!"), - [STRINGID_ZMOVERESTOREHP] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its HP using its Z-Power!"), - [STRINGID_ZMOVESTATUP] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its stats using its Z-Power!"), - [STRINGID_ZMOVEHPTRAP] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP was restored by the Z-Power!"), + [STRINGID_ZMOVERESETSSTATS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} returned its decreased stats to normal using its Z-Power!"), + [STRINGID_ZMOVEALLSTATSUP] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} boosted its stats using its Z-Power!"), + [STRINGID_ZMOVEZBOOSTCRIT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} boosted its critical-hit ratio using its Z-Power!"), + [STRINGID_ZMOVERESTOREHP] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} restored its HP using its Z-Power!"), + [STRINGID_ZMOVESTATUP] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} boosted its stats using its Z-Power!"), + [STRINGID_ZMOVEHPTRAP] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s HP was restored by the Z-Power!"), [STRINGID_ATTACKEREXPELLEDTHEPOISON] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} managed to expel the poison so you wouldn't worry!"), [STRINGID_ATTACKERSHOOKITSELFAWAKE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} shook itself awake so you wouldn't worry!"), [STRINGID_ATTACKERBROKETHROUGHPARALYSIS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} gathered all its energy to break through its paralysis so you wouldn't worry!"), @@ -791,12 +791,12 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ATTACKERLOSTELECTRICTYPE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} used up all its electricity!"), [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1} with its target!"), [STRINGID_BEINGHITCHARGEDPKMNWITHPOWER] = COMPOUND_STRING("Being hit by {B_CURRENT_MOVE} charged {B_DEF_NAME_WITH_PREFIX2} with power!"), - [STRINGID_SUNLIGHTACTIVATEDABILITY] = COMPOUND_STRING("The harsh sunlight activated {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Protosynthesis!"), - [STRINGID_STATWASHEIGHTENED] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!"), - [STRINGID_ELECTRICTERRAINACTIVATEDABILITY] = COMPOUND_STRING("The Electric Terrain activated {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Quark Drive!"), - [STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} weakened the {B_BUFF1} of all surrounding Pokémon!\p"), - [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength from the fallen!"), - [STRINGID_PKMNSABILITYPREVENTSABILITY] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"), //not in gen 5+, ability popup + [STRINGID_SUNLIGHTACTIVATEDABILITY] = COMPOUND_STRING("The harsh sunlight activated {B_SCR_NAME_WITH_PREFIX2}'s Protosynthesis!"), + [STRINGID_STATWASHEIGHTENED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!"), + [STRINGID_ELECTRICTERRAINACTIVATEDABILITY] = COMPOUND_STRING("The Electric Terrain activated {B_SCR_NAME_WITH_PREFIX2}'s Quark Drive!"), + [STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} weakened the {B_BUFF1} of all surrounding Pokémon!\p"), + [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} gained strength from the fallen!"), + [STRINGID_PKMNSABILITYPREVENTSABILITY] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"), //not in gen 5+, ability popup [STRINGID_PREPARESHELLTRAP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"), [STRINGID_SHELLTRAPDIDNTWORK] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"), [STRINGID_SPIKESDISAPPEAREDFROMTEAM] = COMPOUND_STRING("The spikes disappeared from the ground around {B_ATK_TEAM2} team!"), @@ -812,12 +812,12 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_THUNDERCAGETRAPPED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} trapped {B_DEF_NAME_WITH_PREFIX2}!"), [STRINGID_PKMNHURTBYFROSTBITE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} was hurt by its frostbite!"), [STRINGID_PKMNGOTFROSTBITE] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX} got frostbite!"), - [STRINGID_PKMNSITEMHEALEDFROSTBITE] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its frostbite!"), + [STRINGID_PKMNSITEMHEALEDFROSTBITE] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its frostbite!"), [STRINGID_ATTACKERHEALEDITSFROSTBITE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} cured its frostbite through sheer determination so you wouldn't worry!"), [STRINGID_PKMNFROSTBITEHEALED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s frostbite was cured!"), [STRINGID_PKMNFROSTBITEHEALED2] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s frostbite was cured!"), [STRINGID_PKMNFROSTBITEHEALEDBY] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} cured its frostbite!"), - [STRINGID_MIRRORHERBCOPIED] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its Mirror Herb to mirror its opponent's stat changes!"), + [STRINGID_MIRRORHERBCOPIED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} used its Mirror Herb to mirror its opponent's stat changes!"), [STRINGID_STARTEDSNOW] = COMPOUND_STRING("It started to snow!"), [STRINGID_SNOWCONTINUES] = COMPOUND_STRING("Snow continues to fall."), //not in gen 5+ (lol) [STRINGID_SNOWSTOPPED] = COMPOUND_STRING("The snow stopped."), @@ -843,7 +843,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_TEAMSURROUNDEDBYROCKS] = COMPOUND_STRING("{B_DEF_TEAM1} Pokémon became surrounded by rocks!"), [STRINGID_PKMNHURTBYROCKSTHROWN] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is hurt by rocks thrown out by G-Max Volcalith!"), [STRINGID_MOVEBLOCKEDBYDYNAMAX] = COMPOUND_STRING("The move was blocked by the power of Dynamax!"), - [STRINGID_ZEROTOHEROTRANSFORMATION] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} underwent a heroic transformation!"), + [STRINGID_ZEROTOHEROTRANSFORMATION] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} underwent a heroic transformation!"), [STRINGID_THETWOMOVESBECOMEONE] = COMPOUND_STRING("The two moves have become one! It's a combined move!{PAUSE 16}"), [STRINGID_ARAINBOWAPPEAREDONSIDE] = COMPOUND_STRING("A rainbow appeared in the sky on {B_ATK_TEAM2} team's side!"), [STRINGID_THERAINBOWDISAPPEARED] = COMPOUND_STRING("The rainbow on {B_ATK_TEAM2} team's side disappeared!"), @@ -866,13 +866,13 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_BIZARREAREACREATED] = COMPOUND_STRING("A bizarre area was created in which Defense and Sp. Def stats are swapped!"), [STRINGID_TIDYINGUPCOMPLETE] = COMPOUND_STRING("Tidying up complete!"), [STRINGID_PKMNTERASTALLIZEDINTO] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} terastallized into the {B_BUFF1} type!"), - [STRINGID_BOOSTERENERGYACTIVATES] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its {B_LAST_ITEM} to activate {B_SCR_ACTIVE_ABILITY}!"), + [STRINGID_BOOSTERENERGYACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} used its {B_LAST_ITEM} to activate {B_SCR_ACTIVE_ABILITY}!"), [STRINGID_FOGCREPTUP] = COMPOUND_STRING("Fog crept up as thick as soup!"), [STRINGID_FOGISDEEP] = COMPOUND_STRING("The fog is deep…"), [STRINGID_FOGLIFTED] = COMPOUND_STRING("The fog lifted."), [STRINGID_PKMNMADESHELLGLEAM] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} made its shell gleam! It's distorting type matchups!"), [STRINGID_FICKLEBEAMDOUBLED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} is going all out for this attack!"), - [STRINGID_COMMANDERACTIVATES] = COMPOUND_STRING("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was swallowed by Dondozo and became Dondozo's commander!"), + [STRINGID_COMMANDERACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was swallowed by Dondozo and became Dondozo's commander!"), [STRINGID_POKEFLUTECATCHY] = COMPOUND_STRING("{B_PLAYER_NAME} played the {B_LAST_ITEM}.\pNow, that's a catchy tune!"), [STRINGID_POKEFLUTE] = COMPOUND_STRING("{B_PLAYER_NAME} played the {B_LAST_ITEM}."), [STRINGID_MONHEARINGFLUTEAWOKE] = COMPOUND_STRING("The Pokémon hearing the flute awoke!"), From 3cc048cc01ba36f7e05b711c86baa908c7be5b3d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 21 Nov 2024 06:13:31 +0100 Subject: [PATCH 411/544] Removes redundant Decorate check (#5696) --- src/battle_util.c | 9 --------- test/battle/move_effect/protect.c | 32 ++++++++++++++++++++++--------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index f7fee897e7..e4c78132ed 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8571,15 +8571,6 @@ bool32 IsMoveMakingContact(u32 move, u32 battlerAtk) bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) { - // Decorate bypasses protect and detect, but not crafty shield - if (move == MOVE_DECORATE) - { - if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD) - return TRUE; - else if (gProtectStructs[battlerDef].protected) - return FALSE; - } - // Z-Moves and Max Moves bypass protection (except Max Guard). if ((IsZMove(move) || IsMaxMove(move)) && (!gProtectStructs[battlerDef].maxGuarded diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 207544de1f..5b1b0a4e4e 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -103,7 +103,7 @@ SINGLE_BATTLE_TEST("King's Shield, Silk Trap and Obstruct protect from damaging MESSAGE("Wobbuffet's Attack fell!"); #else MESSAGE("Wobbuffet's Attack harshly fell!"); - #endif + #endif } else if (statId == STAT_SPEED) { MESSAGE("Wobbuffet's Speed fell!"); } else if (statId == STAT_DEF) { @@ -487,36 +487,49 @@ DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from status moves") } } -SINGLE_BATTLE_TEST("Protect does not block Confide") +SINGLE_BATTLE_TEST("Protect does not block Confide or Decorate") { + u32 move; + PARAMETRIZE { move = MOVE_CONFIDE; } + PARAMETRIZE { move = MOVE_DECORATE; } + GIVEN { ASSUME(gMovesInfo[MOVE_CONFIDE].effect == EFFECT_SPECIAL_ATTACK_DOWN); + ASSUME(gMovesInfo[MOVE_CONFIDE].ignoresProtect == TRUE); + ASSUME(gMovesInfo[MOVE_DECORATE].effect == EFFECT_DECORATE); + ASSUME(gMovesInfo[MOVE_DECORATE].ignoresProtect == TRUE); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_CONFIDE); } + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, move); } } SCENE { - MESSAGE("Wobbuffet used Confide!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); + ANIMATION(ANIM_TYPE_MOVE, move, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); NOT MESSAGE("The opposing Wobbuffet protected itself!"); } } -DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from Confide") +DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from Confide and Decorate") { + u32 move; + PARAMETRIZE { move = MOVE_CONFIDE; } + PARAMETRIZE { move = MOVE_DECORATE; } + GIVEN { ASSUME(gMovesInfo[MOVE_CONFIDE].effect == EFFECT_SPECIAL_ATTACK_DOWN); + ASSUME(gMovesInfo[MOVE_CONFIDE].ignoresProtect == TRUE); + ASSUME(gMovesInfo[MOVE_DECORATE].effect == EFFECT_DECORATE); + ASSUME(gMovesInfo[MOVE_DECORATE].ignoresProtect == TRUE); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(opponentLeft, MOVE_CRAFTY_SHIELD); MOVE(playerLeft, MOVE_CONFIDE, target: opponentLeft); MOVE(playerRight, MOVE_CONFIDE, target: opponentRight); } + TURN { MOVE(opponentLeft, MOVE_CRAFTY_SHIELD); MOVE(playerLeft, move, target: opponentLeft); MOVE(playerRight, move, target: opponentRight); } } SCENE { - MESSAGE("Wobbuffet used Confide!"); + NOT ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); MESSAGE("The opposing Wobbuffet protected itself!"); - MESSAGE("Wynaut used Confide!"); + NOT ANIMATION(ANIM_TYPE_MOVE, move, playerRight); MESSAGE("The opposing Wynaut protected itself!"); } } @@ -570,3 +583,4 @@ SINGLE_BATTLE_TEST("Spiky Shield does not damage users on Counter or Mirror Coat } } } + From 596b8b20f4e0e922ccfa361f6a29e2f3e263a4af Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:35:05 +0000 Subject: [PATCH 412/544] Fixes Neutralizing Gas crashes + adds missing interaction, Regenerator small fix (#5694) --- data/battle_scripts_1.s | 7 +-- src/battle_script_commands.c | 11 +++- test/battle/ability/intimidate.c | 90 +++++++++++++++++++++++++++++++- 3 files changed, 103 insertions(+), 5 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 027c344b2d..a17c54c7e3 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2401,7 +2401,6 @@ BattleScript_EffectHealingWish:: storehealingwish BS_ATTACKER .if B_HEALING_WISH_SWITCH <= GEN_4 openpartyscreen BS_ATTACKER, BattleScript_EffectHealingWishEnd - switchoutabilities BS_ATTACKER waitstate switchhandleorder BS_ATTACKER, 2 returnatktoball @@ -5764,7 +5763,6 @@ BattleScript_PrintFullBox:: BattleScript_ActionSwitch:: hpthresholds2 BS_ATTACKER - saveattacker printstring STRINGID_RETURNMON jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_PursuitSwitchDmgSetMultihit setmultihit 1 @@ -5782,7 +5780,6 @@ BattleScript_DoSwitchOut:: switchoutabilities BS_ATTACKER updatedynamax waitstate - restoreattacker returnatktoball waitstate drawpartystatussummary BS_ATTACKER @@ -9602,7 +9599,9 @@ BattleScript_EjectButtonActivates:: removeitem BS_SCRIPTING makeinvisible BS_SCRIPTING openpartyscreen BS_SCRIPTING, BattleScript_EjectButtonEnd + copybyte sSAVED_BATTLER, sBATTLER switchoutabilities BS_SCRIPTING + copybyte sBATTLER, sSAVED_BATTLER waitstate switchhandleorder BS_SCRIPTING 0x2 returntoball BS_SCRIPTING, FALSE @@ -9699,6 +9698,7 @@ BattleScript_PastelVeilEnd: end3 BattleScript_NeutralizingGasExits:: + saveattacker savetarget pause B_WAIT_TIME_SHORT printstring STRINGID_NEUTRALIZINGGASOVER @@ -9708,6 +9708,7 @@ BattleScript_NeutralizingGasExitsLoop: switchinabilities BS_TARGET addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_NeutralizingGasExitsLoop + restoreattacker restoretarget return diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c373778b68..b1dbcc6106 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3976,6 +3976,15 @@ static void Cmd_tryfaintmon(void) } else { + if (gBattleMons[battler].ability == ABILITY_NEUTRALIZING_GAS + && !(gAbsentBattlerFlags & (1u << battler)) + && !IsBattlerAlive(battler)) + { + gBattleMons[battler].ability = ABILITY_NONE; + BattleScriptPush(gBattlescriptCurrInstr); + gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; + return; + } if (cmd->battler == BS_ATTACKER) { destinyBondBattler = gBattlerTarget; @@ -14763,7 +14772,7 @@ static void Cmd_switchoutabilities(void) MarkBattlerForControllerExec(battler); break; case ABILITY_REGENERATOR: - gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 3; + gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 3; gBattleMoveDamage += gBattleMons[battler].hp; if (gBattleMoveDamage > gBattleMons[battler].maxHP) gBattleMoveDamage = gBattleMons[battler].maxHP; diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index d2d7bc4af7..a7776dabff 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -246,7 +246,7 @@ DOUBLE_BATTLE_TEST("Intimidate is not going to trigger if a mon switches out thr } } -SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutralizing Gas") +SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutralizing Gas - switching out") { GIVEN { PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } @@ -263,3 +263,91 @@ SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutral SEND_IN_MESSAGE("Wobbuffet"); } } + +SINGLE_BATTLE_TEST("Intimidate activates when it's no longer affected by Neutralizing Gas - switching moves") +{ + u32 move; + PARAMETRIZE { move = MOVE_U_TURN; } + PARAMETRIZE { move = MOVE_HEALING_WISH; } + PARAMETRIZE { move = MOVE_BATON_PASS; } + GIVEN { + ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE); + ASSUME(gMovesInfo[MOVE_HEALING_WISH].effect == EFFECT_HEALING_WISH); + ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { MOVE(player, move); SEND_OUT(player, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing Gas filled the area!"); + ANIMATION(ANIM_TYPE_MOVE, move, player); + MESSAGE("The effects of Neutralizing Gas wore off!"); + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + SEND_IN_MESSAGE("Wobbuffet"); + } THEN { + if (move == MOVE_HEALING_WISH) + EXPECT_EQ(player->hp, player->maxHP); + } +} + +SINGLE_BATTLE_TEST("Intimidate activates when it's no longer affected by Neutralizing Gas - opponent caused switches") +{ + u32 move, item; + PARAMETRIZE { move = MOVE_TACKLE; item = ITEM_EJECT_BUTTON; } + PARAMETRIZE { move = MOVE_GROWL; item = ITEM_EJECT_PACK; } + PARAMETRIZE { move = MOVE_ROAR; item = ITEM_NONE; } + PARAMETRIZE { move = MOVE_DRAGON_TAIL; item = ITEM_NONE; } + GIVEN { + ASSUME(gItemsInfo[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); + ASSUME(gItemsInfo[ITEM_EJECT_PACK].holdEffect == HOLD_EFFECT_EJECT_PACK); + ASSUME(gMovesInfo[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + ASSUME(gMovesInfo[MOVE_ROAR].effect == EFFECT_ROAR); + ASSUME(gMovesInfo[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET); + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); Item(item); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + if (item != ITEM_NONE) { + TURN { MOVE(opponent, move); SEND_OUT(player, 1); } + } else { + TURN { MOVE(opponent, move); } + } + } SCENE { + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing Gas filled the area!"); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (item != ITEM_NONE) + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("The effects of Neutralizing Gas wore off!"); + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + if (item != ITEM_NONE) { + SEND_IN_MESSAGE("Wobbuffet"); + } else { + MESSAGE("Wobbuffet was dragged out!"); + } + } +} + +SINGLE_BATTLE_TEST("Intimidate activates when it's no longer affected by Neutralizing Gas - fainted") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_FELL_STINGER].effect == EFFECT_FELL_STINGER); + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_FELL_STINGER); SEND_OUT(player, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing Gas filled the area!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FELL_STINGER, opponent); + MESSAGE("The effects of Neutralizing Gas wore off!"); + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + MESSAGE("Weezing fainted!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + SEND_IN_MESSAGE("Wobbuffet"); + } +} + From 612c8d3ff644b7b3bfc423c7c665168047964c78 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 21 Nov 2024 18:18:44 +0100 Subject: [PATCH 413/544] Fixes heal blocked leeach seed in tests (#5700) --- data/battle_scripts_1.s | 39 ++++++++++--------- include/battle_scripts.h | 4 +- src/battle_script_commands.c | 4 +- src/battle_util.c | 21 ++++++++-- test/battle/move_effect/leech_seed.c | 58 +++++++++++++++++++++++++++- 5 files changed, 98 insertions(+), 28 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8d24dc472d..76b75075ad 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6032,33 +6032,34 @@ BattleScript_SafeguardEnds:: waitmessage B_WAIT_TIME_LONG end2 -BattleScript_LeechSeedTurnDrain:: - playanimation BS_ATTACKER, B_ANIM_LEECH_SEED_DRAIN, sB_ANIM_ARG1 - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - copyword gBattleMoveDamage, gHpDealt - jumpifability BS_ATTACKER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze - setbyte cMULTISTRING_CHOOSER, B_MSG_LEECH_SEED_DRAIN - jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_LeechSeedHealBlock - manipulatedamage DMG_BIG_ROOT - goto BattleScript_LeechSeedTurnPrintAndUpdateHp -BattleScript_LeechSeedTurnPrintLiquidOoze:: +BattleScript_LeechSeedTurnDrainLiquidOoze:: + call BattleScript_LeechSeedTurnDrain + manipulatedamage DMG_CHANGE_SIGN copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp - setbyte cMULTISTRING_CHOOSER, B_MSG_LEECH_SEED_OOZE -BattleScript_LeechSeedTurnPrintAndUpdateHp:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + goto BattleScript_LeechSeedTurnDrainGainHp + +BattleScript_LeechSeedTurnDrainHealBlock:: + call BattleScript_LeechSeedTurnDrain + end2 + +BattleScript_LeechSeedTurnDrainRecovery:: + call BattleScript_LeechSeedTurnDrain +BattleScript_LeechSeedTurnDrainGainHp: + manipulatedamage DMG_BIG_ROOT healthbarupdate BS_TARGET datahpupdate BS_TARGET printfromtable gLeechSeedStringIds waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER tryfaintmon BS_TARGET end2 -BattleScript_LeechSeedHealBlock: - setword gBattleMoveDamage, 0 - goto BattleScript_LeechSeedTurnPrintAndUpdateHp + +BattleScript_LeechSeedTurnDrain: + playanimation BS_ATTACKER, B_ANIM_LEECH_SEED_DRAIN, sB_ANIM_ARG1 + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + tryfaintmon BS_ATTACKER + return BattleScript_BideStoringEnergy:: printstring STRINGID_PKMNSTORINGENERGY diff --git a/include/battle_scripts.h b/include/battle_scripts.h index a1722a511d..1148c955e5 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -65,7 +65,9 @@ extern const u8 BattleScript_OverworldTerrain[]; extern const u8 BattleScript_SideStatusWoreOff[]; extern const u8 BattleScript_SafeguardProtected[]; extern const u8 BattleScript_SafeguardEnds[]; -extern const u8 BattleScript_LeechSeedTurnDrain[]; +extern const u8 BattleScript_LeechSeedTurnDrainLiquidOoze[]; +extern const u8 BattleScript_LeechSeedTurnDrainHealBlock[]; +extern const u8 BattleScript_LeechSeedTurnDrainRecovery[]; extern const u8 BattleScript_BideStoringEnergy[]; extern const u8 BattleScript_BideAttack[]; extern const u8 BattleScript_BideNoEnergyToAttack[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2958d200ab..46d0503307 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5722,9 +5722,7 @@ static void Cmd_moveend(void) } else if (IsBattlerAlive(gBattlerAttacker) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - gBattleMoveDamage = (gHpDealt * gMovesInfo[gCurrentMove].argument / 100); - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; + gBattleMoveDamage = max(1, (gHpDealt * gMovesInfo[gCurrentMove].argument / 100)); gBattleMoveDamage = GetDrainedBigRootHp(gBattlerAttacker, gBattleMoveDamage); gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE; effect = TRUE; diff --git a/src/battle_util.c b/src/battle_util.c index e4c78132ed..3362979323 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2436,12 +2436,25 @@ u8 DoBattlerEndTurnEffects(void) && !IsBattlerProtectedByMagicGuard(battler, ability)) { gBattlerTarget = gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver. - gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; + gBattlerAttacker = battler; gBattleScripting.animArg1 = gBattlerTarget; gBattleScripting.animArg2 = gBattlerAttacker; - BattleScriptExecute(BattleScript_LeechSeedTurnDrain); + gBattleMoveDamage = max(1, GetNonDynamaxMaxHP(battler) / 8); + gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE; + if (GetBattlerAbility(battler) == ABILITY_LIQUID_OOZE) + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_OOZE; + BattleScriptExecute(BattleScript_LeechSeedTurnDrainLiquidOoze); + } + else if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) + { + BattleScriptExecute(BattleScript_LeechSeedTurnDrainHealBlock); + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_DRAIN; + BattleScriptExecute(BattleScript_LeechSeedTurnDrainRecovery); + } effect++; } gBattleStruct->turnEffectsTracker++; diff --git a/test/battle/move_effect/leech_seed.c b/test/battle/move_effect/leech_seed.c index fce80c661c..67e829cf8a 100644 --- a/test/battle/move_effect/leech_seed.c +++ b/test/battle/move_effect/leech_seed.c @@ -20,8 +20,64 @@ SINGLE_BATTLE_TEST("Leech Seed doesn't affect Grass-type Pokémon") MESSAGE("It doesn't affect the opposing Oddish…"); } } + +SINGLE_BATTLE_TEST("Leech Seeded targets lose 1/8 of its max HP every turn and give it to the user") +{ + s16 damage; + s16 healed; + + GIVEN { + PLAYER(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_SHELLDER); + } WHEN { + TURN { MOVE(player, MOVE_LEECH_SEED); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); + HP_BAR(opponent); + HP_BAR(player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + } THEN { + EXPECT_MUL_EQ(damage, Q_4_12(-1), healed); + } +} + +SINGLE_BATTLE_TEST("Leech Seed recovery is prevented by Heal Block") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_SHELLDER); + } WHEN { + TURN { MOVE(opponent, MOVE_HEAL_BLOCK); MOVE(player, MOVE_LEECH_SEED); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BLOCK, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); + HP_BAR(opponent); + NOT HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Leech Seed recovery will drain the hp of user if leech seeded mon has Liquid Ooze") +{ + s16 damage; + s16 healed; + + GIVEN { + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } + } WHEN { + TURN { MOVE(player, MOVE_LEECH_SEED); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + } THEN { + EXPECT_EQ(damage, healed); + } +} + TO_DO_BATTLE_TEST("Leech Seed doesn't affect already seeded targets") -TO_DO_BATTLE_TEST("Leech Seeded targets lose 1/8 of its max HP every turn and give it to the user") TO_DO_BATTLE_TEST("Leech Seed's effect is paused until a new battler replaces the original user's position") // Faint, can't be replaced, then revived. TO_DO_BATTLE_TEST("Leech Seed's effect pause still prevents it from being seeded again") TO_DO_BATTLE_TEST("Baton Pass passes Leech Seed's effect"); From f41fdbff6d2894edeb66d644c915a32f7388da01 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Thu, 21 Nov 2024 12:59:51 -0800 Subject: [PATCH 414/544] First pass at scope doc and updated PR tempalte --- .github/pull_request_template.md | 4 +++ docs/scope.md | 53 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 docs/scope.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 2259d399c9..6a74e9fbd5 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,5 +1,9 @@ + + + + ## Description diff --git a/docs/scope.md b/docs/scope.md new file mode 100644 index 0000000000..c31cbb37d3 --- /dev/null +++ b/docs/scope.md @@ -0,0 +1,53 @@ +# Document Purpose + +This document is a guide for contributors and Senate to decide if a feature is within "scope" for pokeemerald-expansion. If a feature is not in scope, then it should not be merged. Even if a opened PR is within scope, this does not mean it will be merged, as acceptance critieria will often come down to the details of the implementation. + +# Definitions + +* **Showdown Supported (SS)**: A core series game game which metagame can be played on Showdown. + * Notably, this is every [core series game](https://bulbapedia.bulbagarden.net/wiki/Core_series#List_of_core_series_games) except Pokémon Legends: Arceus and Pokémon Legends: Z-A. +* **Base Expansion Version**: A .gba file built from an unmodified `master` branch of `pokeemerald-expansion`. +* **Vanilla Emerald Version**: A .gba file built from an unmodified `master` branch of `pokeemerald`. + +# Guidelines + +A pull request meets the scope crtieria if: +* The feature does not belong to a category considered “not in scope” AND +* The feature belongs to a category conisred “in scope” + +## In Scope Categories + +1. **SS Species:** Adds Species that have appeared in a Showdown-supported title +2. **SS Moves:** Adds Moves and Move Animations that have appeared in a Showdown-supported title +3. **SS Abilities:** Adds Abilities that have appeared in a Showdown-supported title +4. **SS Items:** Adds Items that have appeared in a Showdown-supported title +5. **SS Gimmicks:** Adds Gimmicks that have appeared in a Showdown-supported title +6. **SS Battle Types:** Adds Special Battle Types that have appeared in a Showdown-supported title +7. **SS Battle Mechanics:** Add mechanical battle changes that have appeared in a Showdown-supported title +8. **Improve Battle AI:** Improve the Battle AI in a way that allows it to approach the skill and capability of a human competitive player +9. **Base Link Compatibility:** Link compatibility with base +10. **SS Overworld / Menu Updates:** Replicate overworld or menu changes from Showdown-supported Pokémon titles +11. **Speed Up:** Speed up the player experience of features found in base +12. **Compression:** Automatically compress assets +13. **Novel Experience:** Add a novel experience included in another Showdown Supported title +15. **Helper Features:** Eases the addition or inclusion of any of the aforementioned + +## Not In Scope Categories + +1. **Non-SS Species**: Adds Species that have NOT appeared in a Showdown-supported title +2. **Non-SS Moves**: Adds Moves and Move Animations that have NOT appeared in a Showdown-supported title +3. **Non-SS Abilities**: Adds Abilities that have NOT appeared in a Showdown-supported title +4. **Non-SS Items**: Adds Items that have NOT appeared in a Showdown-supported title +5. **Non-SS Gimmicks**: Adds Gimmicks that have NOT appeared in a Showdown-supported title +6. **Non-SS Battle Types**: Adds Special Battle Types that have NOT appeared in a Showdown-supported title +7. **Duplicate Feature UI**: Add functionality that duplicates the core functionality of an existing vanilla feature +8. **Vanilla Link Compatibility**: Link compatibility with vanilla +9. **External Program**: External programs + +## Discussion Required Categories + +Pull Requests that fall into this category should be brought up to maintainers, who will discuss and vote as to whether or not the feature is considered in scope. Considerations for acceptance may include invasiveness of implementation, popularity, ease of maintanence, etc. + +1. **Developer Ease of Use:** Lowers barrier of entry for developers to use existing behavior +2. **Fangame Features:** Adds a popular feature from other fangames +3. **Popular Non-SS Features:** Exceptions can be made for uniquely popular or requested features (Drowsy, PLA Legend Plate, etc.) From cd11fcc2a56e9413dc68adde3cdda575143123b0 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:06:41 -0800 Subject: [PATCH 415/544] Apply suggestions from code review Co-authored-by: Pawkkie <61265402+Pawkkie@users.noreply.github.com> --- docs/scope.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/scope.md b/docs/scope.md index c31cbb37d3..01056be7c3 100644 --- a/docs/scope.md +++ b/docs/scope.md @@ -1,10 +1,10 @@ # Document Purpose -This document is a guide for contributors and Senate to decide if a feature is within "scope" for pokeemerald-expansion. If a feature is not in scope, then it should not be merged. Even if a opened PR is within scope, this does not mean it will be merged, as acceptance critieria will often come down to the details of the implementation. +This document is a guide for contributors and Senate to decide if a feature is within "scope" for pokeemerald-expansion. If a feature is not in scope, then it should not be merged. Even if an opened PR is within scope, this does not mean it will be merged, as acceptance criteria will often come down to the details of the implementation. # Definitions -* **Showdown Supported (SS)**: A core series game game which metagame can be played on Showdown. +* **Showdown Supported (SS)**: A core series game who's metagame can be played on Showdown. * Notably, this is every [core series game](https://bulbapedia.bulbagarden.net/wiki/Core_series#List_of_core_series_games) except Pokémon Legends: Arceus and Pokémon Legends: Z-A. * **Base Expansion Version**: A .gba file built from an unmodified `master` branch of `pokeemerald-expansion`. * **Vanilla Emerald Version**: A .gba file built from an unmodified `master` branch of `pokeemerald`. @@ -13,7 +13,7 @@ This document is a guide for contributors and Senate to decide if a feature is w A pull request meets the scope crtieria if: * The feature does not belong to a category considered “not in scope” AND -* The feature belongs to a category conisred “in scope” +* The feature belongs to a category considered “in scope” ## In Scope Categories @@ -23,13 +23,13 @@ A pull request meets the scope crtieria if: 4. **SS Items:** Adds Items that have appeared in a Showdown-supported title 5. **SS Gimmicks:** Adds Gimmicks that have appeared in a Showdown-supported title 6. **SS Battle Types:** Adds Special Battle Types that have appeared in a Showdown-supported title -7. **SS Battle Mechanics:** Add mechanical battle changes that have appeared in a Showdown-supported title +7. **SS Battle Mechanics:** Adds mechanical battle changes that have appeared in a Showdown-supported title 8. **Improve Battle AI:** Improve the Battle AI in a way that allows it to approach the skill and capability of a human competitive player 9. **Base Link Compatibility:** Link compatibility with base 10. **SS Overworld / Menu Updates:** Replicate overworld or menu changes from Showdown-supported Pokémon titles 11. **Speed Up:** Speed up the player experience of features found in base 12. **Compression:** Automatically compress assets -13. **Novel Experience:** Add a novel experience included in another Showdown Supported title +13. **Novel Experience:** Adds a novel experience included in another Showdown Supported title 15. **Helper Features:** Eases the addition or inclusion of any of the aforementioned ## Not In Scope Categories @@ -40,13 +40,13 @@ A pull request meets the scope crtieria if: 4. **Non-SS Items**: Adds Items that have NOT appeared in a Showdown-supported title 5. **Non-SS Gimmicks**: Adds Gimmicks that have NOT appeared in a Showdown-supported title 6. **Non-SS Battle Types**: Adds Special Battle Types that have NOT appeared in a Showdown-supported title -7. **Duplicate Feature UI**: Add functionality that duplicates the core functionality of an existing vanilla feature +7. **Duplicate Feature UI**: Adds functionality that duplicates the core functionality of an existing vanilla feature 8. **Vanilla Link Compatibility**: Link compatibility with vanilla 9. **External Program**: External programs ## Discussion Required Categories -Pull Requests that fall into this category should be brought up to maintainers, who will discuss and vote as to whether or not the feature is considered in scope. Considerations for acceptance may include invasiveness of implementation, popularity, ease of maintanence, etc. +Pull Requests that fall into this category should be brought up to maintainers, who will discuss and vote as to whether or not the feature is considered in scope. Considerations for acceptance may include invasiveness of implementation, popularity, ease of maintenance, etc. 1. **Developer Ease of Use:** Lowers barrier of entry for developers to use existing behavior 2. **Fangame Features:** Adds a popular feature from other fangames From aae6e3f903bc9f14b66faaf672d3f7cbf0281ca5 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:14:05 -0800 Subject: [PATCH 416/544] Update docs/scope.md Co-authored-by: Eduardo Quezada --- docs/scope.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scope.md b/docs/scope.md index 01056be7c3..5db9102ca8 100644 --- a/docs/scope.md +++ b/docs/scope.md @@ -7,7 +7,7 @@ This document is a guide for contributors and Senate to decide if a feature is w * **Showdown Supported (SS)**: A core series game who's metagame can be played on Showdown. * Notably, this is every [core series game](https://bulbapedia.bulbagarden.net/wiki/Core_series#List_of_core_series_games) except Pokémon Legends: Arceus and Pokémon Legends: Z-A. * **Base Expansion Version**: A .gba file built from an unmodified `master` branch of `pokeemerald-expansion`. -* **Vanilla Emerald Version**: A .gba file built from an unmodified `master` branch of `pokeemerald`. +* **Vanilla Emerald Version**: A .gba file built from an unmodified `master` branch of pret's `pokeemerald`. # Guidelines From 194f7644b84971f5201bfde9b9f2209e4df54980 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 23 Nov 2024 18:02:40 +0100 Subject: [PATCH 417/544] Changes taget bit of Flower Shield (#5698) --- include/constants/battle.h | 2 +- src/data/moves_info.h | 4 +-- test/battle/move_effect/flower_shield.c | 37 +++++++++++++++++++++++++ test/battle/move_effect/protect.c | 1 - 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 test/battle/move_effect/flower_shield.c diff --git a/include/constants/battle.h b/include/constants/battle.h index d337559f1b..ed19a72d9c 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -507,7 +507,7 @@ #define MOVE_TARGET_FOES_AND_ALLY (1 << 5) #define MOVE_TARGET_OPPONENTS_FIELD (1 << 6) #define MOVE_TARGET_ALLY (1 << 7) -#define MOVE_TARGET_ALL_BATTLERS ((1 << 8) | MOVE_TARGET_USER) +#define MOVE_TARGET_ALL_BATTLERS ((1 << 8) | MOVE_TARGET_USER) // No functionality for status moves // For the second argument of GetMoveTarget, when no target override is needed #define NO_TARGET_OVERRIDE 0 diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 1bde816281..05c8391522 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -8492,7 +8492,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .type = TYPE_NORMAL, .accuracy = 0, .pp = 40, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_USER, // Targeting is handled through the script .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_ATK_UP_1 }, @@ -14421,7 +14421,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .type = TYPE_FAIRY, .accuracy = 0, .pp = 10, - .target = MOVE_TARGET_ALL_BATTLERS, + .target = MOVE_TARGET_USER, // The targeting of Flower Shield is handled through a script .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_DEF_UP_1 }, diff --git a/test/battle/move_effect/flower_shield.c b/test/battle/move_effect/flower_shield.c new file mode 100644 index 0000000000..e31fc9e5cd --- /dev/null +++ b/test/battle/move_effect/flower_shield.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_FLOWER_SHIELD].effect == EFFECT_FLOWER_SHIELD); +} + +DOUBLE_BATTLE_TEST("Flower Shield raises the defense of all grass type pokemon") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_TANGELA].types[0] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_TANGROWTH].types[0] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_SUNKERN].types[0] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_SUNFLORA].types[0] == TYPE_GRASS); + PLAYER(SPECIES_TANGELA); + PLAYER(SPECIES_TANGROWTH); + OPPONENT(SPECIES_SUNKERN); + OPPONENT(SPECIES_SUNFLORA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FLOWER_SHIELD); MOVE(playerRight, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Tangela used Flower Shield!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Tangela's Defense rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("The opposing Sunkern's Defense rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Tangrowth's Defense rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("The opposing Sunflora's Defense rose!"); + } +} diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 5b1b0a4e4e..dff486cb00 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -537,7 +537,6 @@ DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from Confide and Decora DOUBLE_BATTLE_TEST("Crafty Shield does not protect against moves that target all battlers") { GIVEN { - ASSUME(gMovesInfo[MOVE_FLOWER_SHIELD].target == MOVE_TARGET_ALL_BATTLERS); ASSUME(gSpeciesInfo[SPECIES_TANGELA].types[0] == TYPE_GRASS); ASSUME(gSpeciesInfo[SPECIES_TANGROWTH].types[0] == TYPE_GRASS); ASSUME(gSpeciesInfo[SPECIES_SUNKERN].types[0] == TYPE_GRASS); From ea3cec339ce9d8d7c165f7b1f56118e07595be9f Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sat, 23 Nov 2024 18:06:34 +0100 Subject: [PATCH 418/544] Follower fixes, Melmetal, Patrat, Woobat (#5685) Co-authored-by: Hedara --- graphics/pokemon/melmetal/overworld.png | Bin 2053 -> 1337 bytes .../pokemon/melmetal/overworld_normal.pal | 4 ++-- graphics/pokemon/melmetal/overworld_shiny.pal | 2 +- graphics/pokemon/patrat/overworld.png | Bin 691 -> 618 bytes graphics/pokemon/woobat/overworld.png | Bin 565 -> 563 bytes 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/graphics/pokemon/melmetal/overworld.png b/graphics/pokemon/melmetal/overworld.png index 4be020a5c6a803fd1e3412ef591fd026585126da..e8097644ad166decd45c160a6cd6556db3d8780e 100644 GIT binary patch delta 1265 zcmVvHod5OW=z zKm+Udf7>Hzv5oO1`R4pBGp#8SyAqeRI}CsAul=>PCAI&VuUkmhj*?@t}tlu&2@z3$SrIH@yHBHm&f$oX^D?*78@e(5s z#RfhT1~B?9qs6WC_&vJGd!$gtgau9kkE4StLiPmM+1FIYV(|BRc!K;Lqs0w`J${ew z^fAR#Q>l?2b`7{18ewFu=#t|2T4Fc0o=iri%M@D6W zi5VDwVgimX2JRX6_~-a)h82apq6UHZ({=_f30OZ|r(C9=6vB)aLi(9X#%5V`eUbem zgY!VR#5pPhmuTD^z}N(NQ4Ip|XJ_DwU;&W~_Zt}!a^Tkw)~fUdP8b*te|Cd625#an z`lghtJRZF?9SmF$OvlQY01eU6kYF&JG?nVCjtxD-bQq1e*0{&_J8+7&uL1~^JTnRG z^B6%O6(ae*6wh4RLk0?SeVC4u_U zjBkjC;;TMc2pmNRj}XXj8Kz14Amc5{WVCn)8nqP;yZE-kTf?1*2s@9~zvC7{5n=2I zTFFcYDKP;ak{x{11P57Z7)F2d;Ze1GVEqoWaYfQ5^ycJexZ_W(+O*gy*=A-{4g~IQSW#d_$b+r@>ON zYGAZ?2g|6+gpx7F5V!`jbaQOina71;b&Af|AT=#MJ7LXY9)51)w|JG0ea@0Go){n_ zLca^O;r)KE1~APRe;N6;hw~hdI}m3I6vM};zos(7nhJjt$J@#{w5<|aARgme@om`Q zlF#Tt`m@9>3Ks@8@u`z*B>evVI)T-sI`E6>4p`$@JdjwOr|a`(tNyKyRQ&zBDC}DG zC%DH=o2jb6&YUR@5;q5{LmnUzumF{?Z2=B37CiVK9}MV(e>lUs4Uh)n0RmaR=I(y# zCeJKpAOyy5&krW!^w41D7arWbA?~-?BRYJ#{!j^Z-#v6#4A@dW!>W6A5|(mmi-ER` zSPX=r&m)`|&}KdD!41&e?u5C+YO(b8StN8PZK--}Mc2?@MCud`SBBo^xhW$k z4^en^5JH#3f6>8r2lmy z5EWkxbPC;H-GCbZU_kogQQzi}l+w>$3~-HgK#IPvj|Ql*9-wIYMsnFnjPS#~j)M0}M)Y3{@nvhW)+8UjWvf(hffwIKjB00000NkvXXu0mjfbeL5} literal 2053 zcmeHH`BM@I7^Q_pP`pBoNKsogGF@*(^B}~tB(dB`$@`$(!mD)GlRU6U)Xcnf3vbP1 z^U9jQ6)MZsOxi3h1+6t*HO+%qgtdQTr#JI`@0T~y8Jsjc9)a0Du6WV<%nZa=C2r-qh5aMQ(U|`|q{6j=8xR z$&u*b;NU=S)SQtd8I zxpP9MW@~0?u}?bTb1a|gQPFD9x$2O;+c~lM=`7BNCO^qSac2B?E`IziP2U`QWM9}< zef!$Y?;pm*9N|*EZ4jbpI?7B5fgYCV%%bGl(*bQ?NI{<+IH>vRdCq>p4K*{XxJE7U zFoHYZdkxiVFWQxved%5JFryRAbfamR8V|X^T70?5c)Ln8p>8}Q|#DZWP6%a zQJ<6$<4J`^CWjkjJdk$0h97IA^+( z8#VWSp|F=m(q}&o6Exn5nd0|qzC$h(@Dt{*#jF5`U)EVYs-cq3+%PD~xyC~&xk6Jl3WQ`mK9X@HBGulyy%4FxUz!)mSK3nEw}AzXE8vlQ(AI2)T; za)NCS()tCHm}HFbUx%8V)#VIUq{Mup{ko9Cfv4s2?pfU;iZw4lMTu{=)*-I`{ADpR6)ZoG|%o z%!!$`Tx;r=e`f(HVR}?G3m-k7e2@?Udan_ynU}o*cZn5%FKSp445L;MyBV4h-3s*G zNKLiINE8?Cgb%$i*`I!31*IdYjLvB1i87T z1)PZSQjk(-)Y1>Axw=W7l{pEAO#K~)1IJ6c8&~*wY{_5(%yNc}H|%54WM#CdWeh`* t-nNWi_xqRUbV973c0Q}+Idc&BN!1MyPwAMwy7je=Jza@}Hhl2q{{V+zb*TUV diff --git a/graphics/pokemon/melmetal/overworld_normal.pal b/graphics/pokemon/melmetal/overworld_normal.pal index 28e4593192..d9b329362b 100644 --- a/graphics/pokemon/melmetal/overworld_normal.pal +++ b/graphics/pokemon/melmetal/overworld_normal.pal @@ -1,7 +1,7 @@ JASC-PAL 0100 16 -255 255 255 +120 255 255 254 235 185 220 220 218 235 192 100 @@ -16,4 +16,4 @@ JASC-PAL 64 64 64 45 43 43 8 8 8 -0 0 0 +255 255 255 diff --git a/graphics/pokemon/melmetal/overworld_shiny.pal b/graphics/pokemon/melmetal/overworld_shiny.pal index 6d1c75c9bb..4f5321a062 100644 --- a/graphics/pokemon/melmetal/overworld_shiny.pal +++ b/graphics/pokemon/melmetal/overworld_shiny.pal @@ -16,4 +16,4 @@ JASC-PAL 64 64 64 45 43 43 8 8 8 -0 0 0 +255 255 255 diff --git a/graphics/pokemon/patrat/overworld.png b/graphics/pokemon/patrat/overworld.png index ea2df04dc1ae62d0fbbdd1068f564c15fa2084f4..8b6a34f19870bd4736d739af3c9e5acab7e74267 100644 GIT binary patch delta 605 zcmV-j0;2u11?mKl7=H)@0001UMu)cm0004VQb$4nuFf3k0000mP)t-sn9!g}Fephd zC;$Keqi-=UE-&UyDE7}z%EF<_!lAX8Ztm{)wU}-I0000000000Gq-fz0005#NklB7q|u|&VQC=#*7&=X3Ur|<0X;O z$LpgU;N$gC9T^M4jjC>2TMj{ReH&;2u zN9Q-huP|`S(B7titHJC!46sNLb$&$KK*)E4PjT$IIolIpoByO4%q;*h;YtM4aZX zQ373IByg?34wFK}A+|GUg{+ay((D?JINe~iKPw!bRbg?cwaEPHzrY9^8B(l(tzECJ zA*_~xh=V>QhEK6BFpC7pV%1(ne}0zSV=F_RKP8k%$$u_^kc0XImumtx=S`(H&8?mi zFa!sd1NovzG;fojm5fdmahaVB(zjV70Vjtw^WHGGI>mt(JHx~Vslc1vXt@>d-0s9` zuA%#P!A;-}FJP`gzh=2nQnK%XgFBs8m-aHyH$k5x)i{@-h=$nqFU^7u zcO4m6iB>y}cppDZfVn%KZp8!i%7y|#Ri00000NkvXXu0mjfw_z5i delta 679 zcmV;Y0$Ba(1hWN@7=Hu<0002CwraKj0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000dP)t-sn9!hDNJtP65C8xGh@DcSB~OEw6gEiw3$KvJ@7WG`s2f%mi2pgRQU4R&xT*vt_? zW{{$vErA?SZvrqHs%8cYK-hN#?hboy7!0@r=V}JC$!LlNY7Fqw|252IN5y6|onV9B z`&rH4VXhh(>{ZR6?5OzFayp4Ei{9R+uV2ji#D9Rj&gUoj_rPh%%fQ+${l!2G zz9VqD%I98ie6PvZdH(x~xN1cE-R-v@ogmOY|9brev9Y#x%Zx$H(|nmIzS=HYuNLJ? zi!Q4H*)!+*v1(>*!D2SXAZF1(3(3Qlolb;eY1Pr{oZa2sv=0NHuGd9iu7xo|t0rbq zA*?{<;eR}f6Uovr;OOk<=NnYqTBlbZi-W*kuv}93Cqhbr&Sbo{*dSUICXpP?Na8%t zkl;~#agpJd>t_qXlJIzuX%XsOlovAbA6k*q9V*c7I7RZB=C#K8=u!x>qeS>6;ESrg z1`$-8RP={=TJZ;75F2WNk7%pW1dqsf`&5rR$sqn|@VeuJ_5ZKI*e@Qqn(HW?Wpn@l N002ovPDHLkV1n^cL`DDr diff --git a/graphics/pokemon/woobat/overworld.png b/graphics/pokemon/woobat/overworld.png index 1d14a5c43d798ca82fd85c3103b4e524903b5407..18bff8d5c3b0302fea9b089865903cdc11e1ecf1 100644 GIT binary patch delta 476 zcmV<20VDpk1hWK?VSl|zL_t(oh3!_+a)clZ1On0e{~z3hC{ReiK6K_f!+H;Ti)(fR zsB;?|8yg!Np94?FKZf^#4w#Gpn6Yl1z@PFyhQPl`jgS)R3?e)U&?5lVVTHFUu=yAI zTz`h?zyqd~R2KRFCjoC5t-PUc^KbNhc%T~~`xp>a18fYTCV!Bx`$4csXu`kICwqJ_ zuRh?huQ|wi2}=TWKDG)QUYlSO{*}Hzj^L$!%|Mx8+B&BHND(D~$R;VTpW~=?Ek9U5 zzNggJ@uJ`IgT8a;7aUYOM#DgLudf2|G5TMWpSDj`M5yR!%^AUxf! zlyCx^R640#dVd2XKN?^-pt|A#5<|ZX`7Uhuegi`mQ=la>%317MvWz7!b%VSa}!> zKojx67yU^C?i^4rPbL`6K3YyR&S(K#kq%Jw^DPbEOI57+m3}n<#^*v#P9`Yt3YG#G z9~*Z;g;xzs_?7+*^F`~bedAMNg-*O*-|4`$`#>U3R$KV^toDLVo S3Pb1s0000}4#t-PYI^KbO6E07J4eRPPT0XBwE6Msm*`$e!wXu`kICwqJ_ zFJ7S7mmDO$fKLMSeQXsryfk1F{*}Hx4rg=yl7VNyr2CluBSp*scs5CS{a#0{Yx%(f z@;Og^9iR1Ee$Y22o^Vj@=oJIiy?hsd_1?OJW1ufX`jlD2ht2}#Omj#+=iONZ7RWrE zE|d@fB9%@mmw()VoF6Sv98g{UIM0(~=x;+l3md+lfW)Wl5>VPKtgjHafyni9qs0c? z1D0AT8!-0rkqV6d8uYn9Xm}6|FrP8;`Zv@Et*Q2vSBVvR*}wjNdl_xMGr4@1`v81HjT;*q8yg>kA53iy UQ&T@M2LJ#707*qoM6N<$f=&F>=>Px# From 6560bbab21ff171d7f0078d9f4966338f6466ef8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 23 Nov 2024 14:17:40 -0500 Subject: [PATCH 419/544] Restore .map file creation --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index a5f0224331..6252664bde 100644 --- a/Makefile +++ b/Makefile @@ -379,6 +379,7 @@ libagbsyscall: @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) # Elf from object files +LDFLAGS = -Map ../../$(MAP) $(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) libagbsyscall @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ | cat" From e7e701f8ec8188165041997d35d565531d8e4110 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sat, 23 Nov 2024 23:10:34 +0100 Subject: [PATCH 420/544] Trainer class+name expansion fix for Battle Frontier (#5699) Co-authored-by: Hedara --- src/battle_message.c | 97 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 82 insertions(+), 15 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 761770d440..049bda6d39 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2622,6 +2622,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) if (*src == PLACEHOLDER_BEGIN) { src++; + u32 classLength = 0; + u32 nameLength = 0; + const u8 *classString; + const u8 *nameString; switch (*src) { case B_TXT_BUFF1: @@ -2800,9 +2804,24 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) break; case B_TXT_TRAINER1_NAME_WITH_CLASS: // trainer1 name with trainer class toCpy = textStart; - textStart = StringCopy(textStart, BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A)); - textStart = StringAppend(textStart, gText_Space2); - textStart = StringAppend(textStart, BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, textStart, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))); + classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); + while (classString[classLength] != EOS) + { + textStart[classLength] = classString[classLength]; + classLength++; + } + textStart[classLength] = CHAR_SPACE; + textStart += classLength + 1; + nameString = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_A, textStart, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); + if (nameString != textStart) + { + while (nameString[nameLength] != EOS) + { + textStart[nameLength] = nameString[nameLength]; + nameLength++; + } + textStart[nameLength] = EOS; + } break; case B_TXT_LINK_PLAYER_NAME: // link player name toCpy = gLinkPlayers[multiplayerId].name; @@ -2922,9 +2941,24 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) break; case B_TXT_TRAINER2_NAME_WITH_CLASS: toCpy = textStart; - textStart = StringCopy(textStart, BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B)); - textStart = StringAppend(textStart, gText_Space2); - textStart = StringAppend(textStart, BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_B, textStart, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))); + classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B); + while (classString[classLength] != EOS) + { + textStart[classLength] = classString[classLength]; + classLength++; + } + textStart[classLength] = CHAR_SPACE; + textStart += classLength + 1; + nameString = BattleStringGetOpponentNameByTrainerId(gTrainerBattleOpponent_B, textStart, multiplayerId, GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)); + if (nameString != textStart) + { + while (nameString[nameLength] != EOS) + { + textStart[nameLength] = nameString[nameLength]; + nameLength++; + } + textStart[nameLength] = EOS; + } break; case B_TXT_TRAINER2_LOSE_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) @@ -2962,9 +2996,24 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) break; case B_TXT_PARTNER_NAME_WITH_CLASS: toCpy = textStart; - textStart = StringCopy(textStart, gTrainerClasses[GetFrontierOpponentClass(gPartnerTrainerId)].name); - textStart = StringAppend(textStart, gText_Space2); - textStart = StringAppend(textStart, BattleStringGetPlayerName(textStart, GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))); + classString = gTrainerClasses[GetFrontierOpponentClass(gPartnerTrainerId)].name; + while (classString[classLength] != EOS) + { + textStart[classLength] = classString[classLength]; + classLength++; + } + textStart[classLength] = CHAR_SPACE; + textStart += classLength + 1; + nameString = BattleStringGetPlayerName(textStart, GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)); + if (nameString != textStart) + { + while (nameString[nameLength] != EOS) + { + textStart[nameLength] = nameString[nameLength]; + nameLength++; + } + textStart[nameLength] = EOS; + } break; case B_TXT_ATK_TRAINER_NAME: toCpy = BattleStringGetTrainerName(text, multiplayerId, gBattlerAttacker); @@ -2995,24 +3044,42 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) } else { + classString = NULL; switch (GetBattlerPosition(gBattlerAttacker)) { case B_POSITION_PLAYER_RIGHT: if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - textStart = StringCopy(textStart, gTrainerClasses[GetFrontierOpponentClass(gPartnerTrainerId)].name); + classString = gTrainerClasses[GetFrontierOpponentClass(gPartnerTrainerId)].name; break; case B_POSITION_OPPONENT_LEFT: - textStart = StringCopy(textStart, BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A)); + classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); break; case B_POSITION_OPPONENT_RIGHT: if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && !BATTLE_TWO_VS_ONE_OPPONENT) - textStart = StringCopy(textStart, BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B)); + classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_B); else - textStart = StringCopy(textStart, BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A)); + classString = BattleStringGetOpponentClassByTrainerId(gTrainerBattleOpponent_A); break; } - textStart = StringAppend(textStart, gText_Space2); - textStart = StringAppend(textStart, BattleStringGetTrainerName(textStart, multiplayerId, gBattlerAttacker)); + classLength = 0; + nameLength = 0; + while (classString[classLength] != EOS) + { + textStart[classLength] = classString[classLength]; + classLength++; + } + textStart[classLength] = CHAR_SPACE; + textStart += 1 + classLength; + nameString = BattleStringGetTrainerName(textStart, multiplayerId, gBattlerAttacker); + if (nameString != textStart) + { + while (nameString[nameLength] != EOS) + { + textStart[nameLength] = nameString[nameLength]; + nameLength++; + } + textStart[nameLength] = EOS; + } } break; case B_TXT_ATK_TEAM1: From 2baea35414f2846f1fe745aa93fb9b6f69da0d98 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sun, 24 Nov 2024 14:38:56 +0100 Subject: [PATCH 421/544] Fixed Farfetch'd overworld sprite (#5711) Co-authored-by: Hedara --- graphics/pokemon/farfetchd/overworld.png | Bin 686 -> 813 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/farfetchd/overworld.png b/graphics/pokemon/farfetchd/overworld.png index 46aec0976444a8250ad6fa9446a09e6ac95d35b7..63d29215b72960dd3c0d269481a07ab5f333a17f 100644 GIT binary patch delta 737 zcmV<70v`RY1+4}yiBL{Q4GJ0x0000DNk~Le000310000W2m=5B0Lph()&Kwi0drDE zLIAGL9O;owT7LqMNkl#RFdU6HYq^r2`ndGOH+ z-HX6GzFbzUSg~ToiWMtXtk6g)y~W=z@J~a#%QjK(gkTKy&q5YwRPjJpj@bVLW5p58cpL3nC5wO7@;erjGaS6-MIp?Ch0FQ`be(FO@ ze1eyWKOsLBC=-J*C(6GR7ya)YGuk$a__!gC0LT2vkpU&bbAHq>NZ^E7S^9&cLzZaFw`RInK7Y7p5K*dClnd~G!mUH$?IyJ*{|G4G zZVb7$o!AD=nsg1IkPm^633p#t6QA5S$TVsOiGcUri0elp+S(ndKlnWXJ_Is%YScM- zU$tcIKe%gveyZY3R+w^j9l9JKa{@Xe z;^?Vr;QUfqeX~5KlND( zpWs{I&*g~ejWag>uZP)Av26Ie{jpd=HZBo!29rcHw}1P1j-x2uSv#TUE#qM z35aEr<}g>6kN6ZQ$0Xeihwna@8Jq#TYT&^YgIH_bcx_8yf5fN2jHMQ|Cg9`bh5^K( z4|ye@D+aNaT8a1A+JJyhfvm5JLT$?68@GlOaLfm1s+hjGW)KldA?9TCFW@2&vTT$T zQ4OHWhrnY()XzQSlj{aWBWECyabNH`$Obp8*fMBGElT-=s|NU27AG1*Zr*30wc*g* z;{$741h!5{f4zZm44hp3mP~+iwB@3jhEBNkvXXu0mjfNeB?l From 632ef149e0773fd9b5385db244cd820c32bc465e Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Sun, 24 Nov 2024 20:42:14 +0100 Subject: [PATCH 422/544] Handle showdowns apostrophe the same way as ASCII apostrophe (#5712) --- tools/trainerproc/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c index b410e810b0..8b939a955f 100644 --- a/tools/trainerproc/main.c +++ b/tools/trainerproc/main.c @@ -1545,6 +1545,7 @@ static void fprint_species(FILE *f, const char *prefix, struct String s) static const unsigned char *male = (unsigned char *)u8"♂"; static const unsigned char *female = (unsigned char *)u8"♀"; static const unsigned char *e_diacritic = (unsigned char *)u8"é"; + static const unsigned char *right_single_quotation_mark = (unsigned char *)u8"’"; for (int i = 0; i < s.string_n; i++) { unsigned char c = s.string[i]; @@ -1562,7 +1563,7 @@ static void fprint_species(FILE *f, const char *prefix, struct String s) underscore = false; fputc(c - 'a' + 'A', f); } - else if (c == '\'' || c == '%') + else if (c == '\'' || c == '%' || is_utf8_character(s, &i, right_single_quotation_mark)) { // Do nothing. } From d924b361e64a1a171c18abc1bb9b48591c55c434 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sun, 24 Nov 2024 23:04:43 +0100 Subject: [PATCH 423/544] Added Minimize interaction to Supercell Slam (#5713) Co-authored-by: Hedara --- src/data/moves_info.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 4eee90a802..3a6837dd2b 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -20605,6 +20605,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, + .minimizeDoubleDamage = TRUE, .battleAnimScript = Move_SUPERCELL_SLAM, }, From 4beb0efbcc202048fafa606147b7b5243ed55951 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 24 Nov 2024 22:46:01 -0300 Subject: [PATCH 424/544] Added extra encoded character support (#2050) --- src/mini_printf.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/mini_printf.c b/src/mini_printf.c index ac8a0ef127..e4b8937242 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -86,6 +86,8 @@ static inline char mini_pchar_decode(char encoded) ret = '('; // opening parentheses else if (encoded == CHAR_RIGHT_PAREN) ret = ')'; // closing parentheses + else if (encoded == CHAR_HYPHEN) + ret = '-'; // hyphen return ret; } @@ -133,7 +135,31 @@ static s32 _putsEncoded(char *s, s32 len, void *buf) { break; } - *(b->pbuffer ++) = mini_pchar_decode(s[i]); + if (s[i] == CHAR_NEWLINE) + { + *(b->pbuffer ++) = '\\'; + *(b->pbuffer ++) = 'n'; + } + else if (s[i] == CHAR_PROMPT_SCROLL) + { + *(b->pbuffer ++) = '\\'; + *(b->pbuffer ++) = 'l'; + } + else if (s[i] == CHAR_PROMPT_CLEAR) + { + *(b->pbuffer ++) = '\\'; + *(b->pbuffer ++) = 'p'; + } + else if (s[i] == CHAR_ELLIPSIS) + { + *(b->pbuffer ++) = '.'; + *(b->pbuffer ++) = '.'; + *(b->pbuffer ++) = '.'; + } + else + { + *(b->pbuffer ++) = mini_pchar_decode(s[i]); + } } *(b->pbuffer) = 0; return b->pbuffer - p0; From 64887ee876d1ba0c01c66bc2dda0e6e1e7f3aa0d Mon Sep 17 00:00:00 2001 From: Sadfish the Sad Date: Mon, 25 Nov 2024 13:57:22 -0500 Subject: [PATCH 425/544] dark void, clangorous soulblaze, vortex animation fixes (#5650) --- data/battle_anim_scripts.s | 8 +-- src/battle_anim_flying.c | 1 - src/battle_anim_mon_movement.c | 103 ++++++++++++++++++++++++++++++++- src/battle_anim_rock.c | 7 ++- 4 files changed, 108 insertions(+), 11 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 643ee2cd0e..6e8a54c627 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -3666,7 +3666,7 @@ gBattleAnimMove_DarkVoid:: loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_ATTACKER, 5, 2 delay 48 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -768, 21, 0, 112 @Last is duration - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, -768, 21, 0, 112 @Last is duration + createsprite gSlideMonToOffsetPartnerSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, -768, 21, 0, 112 @Last is duration delay 64 invisible ANIM_TARGET invisible ANIM_DEF_PARTNER @@ -3674,7 +3674,7 @@ gBattleAnimMove_DarkVoid:: createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_DEF_PARTNER, 0, 32, 60 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 16 - createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0, 16 + createsprite gSlideMonToOriginalPosPartnerSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0, 16 delay 32 call UnsetPsychicBg visible ANIM_TARGET @@ -33527,7 +33527,7 @@ gBattleAnimMove_ClangorousSoulblaze:: delay 0x2 createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0xFFE0, 0x1, 0xffff createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0xa, 0x0, 0x2a - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0xa, 0x0, 0x2a + createsprite gSlideMonToOffsetPartnerSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0xa, 0x0, 0x2a delay 0x20 createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x20, 0x1, 0xffff delay 0xC @@ -33719,7 +33719,7 @@ FINISH_SOULBLAZE: call ResetFromWhiteScreen blendoff createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0x0, 0x10 - createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0x0, 0x10 + createsprite gSlideMonToOriginalPosPartnerSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0x0, 0x10 waitforvisualfinish end ClangorousSoulblazeEnergySwirl: diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index 42c99740d3..8b613ad677 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -363,7 +363,6 @@ static void AnimEllipticalGustCentered(struct Sprite *sprite) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); - sprite->y += 20; sprite->data[1] = 191; sprite->callback = AnimEllipticalGust_Step; diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 04fd111a84..240e43b713 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -15,8 +15,10 @@ static void ReverseHorizontalLungeDirection(struct Sprite *sprite); static void DoVerticalDip(struct Sprite *sprite); static void ReverseVerticalDipDirection(struct Sprite *sprite); static void SlideMonToOriginalPos(struct Sprite *sprite); +static void SlideMonToOriginalPosPartner(struct Sprite *sprite); static void SlideMonToOriginalPos_Step(struct Sprite *sprite); static void SlideMonToOffset(struct Sprite *sprite); +static void SlideMonToOffsetPartner(struct Sprite *sprite); static void SlideMonToOffsetAndBack(struct Sprite *sprite); static void SlideMonToOffsetAndBack_End(struct Sprite *sprite); static void AnimTask_WindUpLunge_Step1(u8 taskId); @@ -63,6 +65,17 @@ const struct SpriteTemplate gSlideMonToOriginalPosSpriteTemplate = .callback = SlideMonToOriginalPos, }; +const struct SpriteTemplate gSlideMonToOriginalPosPartnerSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SlideMonToOriginalPosPartner, +}; + const struct SpriteTemplate gSlideMonToOffsetSpriteTemplate = { .tileTag = 0, @@ -74,6 +87,17 @@ const struct SpriteTemplate gSlideMonToOffsetSpriteTemplate = .callback = SlideMonToOffset, }; +const struct SpriteTemplate gSlideMonToOffsetPartnerSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SlideMonToOffsetPartner, +}; + const struct SpriteTemplate gSlideMonToOffsetAndBackSpriteTemplate = { .tileTag = 0, @@ -487,7 +511,41 @@ static void ReverseVerticalDipDirection(struct Sprite *sprite) // arg 2: duration static void SlideMonToOriginalPos(struct Sprite *sprite) { - u32 monSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + u32 monSpriteId; + if (!gBattleAnimArgs[0]) + monSpriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + else + monSpriteId = gBattlerSpriteIds[gBattleAnimTarget]; + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gSprites[monSpriteId].x + gSprites[monSpriteId].x2; + sprite->data[2] = gSprites[monSpriteId].x; + sprite->data[3] = gSprites[monSpriteId].y + gSprites[monSpriteId].y2; + sprite->data[4] = gSprites[monSpriteId].y; + InitSpriteDataForLinearTranslation(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = gSprites[monSpriteId].x2; + sprite->data[6] = gSprites[monSpriteId].y2; + sprite->invisible = TRUE; + + if (gBattleAnimArgs[1] == 1) + sprite->data[2] = 0; + else if (gBattleAnimArgs[1] == 2) + sprite->data[1] = 0; + + sprite->data[7] = gBattleAnimArgs[1]; + sprite->data[7] |= monSpriteId << 8; + sprite->callback = SlideMonToOriginalPos_Step; +} + +static void SlideMonToOriginalPosPartner(struct Sprite *sprite) +{ + u32 monSpriteId; + if (!gBattleAnimArgs[0]) + monSpriteId = gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]; + else + monSpriteId = gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]; sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gSprites[monSpriteId].x + gSprites[monSpriteId].x2; @@ -550,9 +608,48 @@ static void SlideMonToOriginalPos_Step(struct Sprite *sprite) // arg 4: duration static void SlideMonToOffset(struct Sprite *sprite) { - u8 monSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + u8 battler; + u8 monSpriteId; + if (!gBattleAnimArgs[0]) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; - if (GetBattlerSide(gBattleAnimArgs[0]) != B_SIDE_PLAYER) + monSpriteId = gBattlerSpriteIds[battler]; + if (GetBattlerSide(battler) != B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[3] == 1) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + } + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gSprites[monSpriteId].x; + sprite->data[2] = gSprites[monSpriteId].x + gBattleAnimArgs[1]; + sprite->data[3] = gSprites[monSpriteId].y; + sprite->data[4] = gSprites[monSpriteId].y + gBattleAnimArgs[2]; + InitSpriteDataForLinearTranslation(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = monSpriteId; + sprite->invisible = TRUE; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = TranslateSpriteLinearByIdFixedPoint; +} + +static void SlideMonToOffsetPartner(struct Sprite *sprite) +{ + u8 battler; + u8 monSpriteId; + if (!gBattleAnimArgs[0]) + battler = BATTLE_PARTNER(gBattleAnimAttacker); + else + battler = BATTLE_PARTNER(gBattleAnimTarget); + + monSpriteId = gBattlerSpriteIds[battler]; + if (GetBattlerSide(battler) != B_SIDE_PLAYER) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; if (gBattleAnimArgs[3] == 1) diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index 354fb21014..ec7bc535df 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -478,14 +478,15 @@ void AnimRockFragment(struct Sprite *sprite) // Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb void AnimParticleInVortex(struct Sprite *sprite) { - if (IsDoubleBattle() //got a little lazy here will fix later - && (gAnimMoveIndex == MOVE_BLEAKWIND_STORM + if (IsDoubleBattle() + && (gAnimMoveIndex == MOVE_BLEAKWIND_STORM || gAnimMoveIndex == MOVE_SANDSEAR_STORM || gAnimMoveIndex == MOVE_SPRINGTIDE_STORM || gAnimMoveIndex == MOVE_WILDBOLT_STORM)) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else - InitSpritePosToAnimTarget(sprite, FALSE); + InitSpritePosToAnimBattler(gBattleAnimArgs[6], sprite, FALSE); + sprite->data[0] = gBattleAnimArgs[3]; sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[4]; From b1231269393e9135f87d515e69622666630e3165 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 27 Nov 2024 13:59:39 -0500 Subject: [PATCH 426/544] Update README.md to link to INSTALL.md (#5720) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index facd5f5626..5330e40981 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,16 @@ pokeemerald-expansion is a decomp hack base project based off pret's [pokeemerald](https://github.com/pret/pokeemerald) decompilation project. It's recommended that any new projects that plan on using it, to clone this repository instead of pret's vanilla repository, as we regurlarly incorporate pret's documentation changes. This is ***NOT*** a standalone romhack, and as such, most features will be unavailable and/or unbalanced if played as is. +## Using pokeemerald-expansion + If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` Based off RHH's pokeemerald-expansion 1.9.3 https://github.com/rh-hideout/pokeemerald-expansion/ ``` +Please follow the instructions in `INSTALL.md` to get pokeemerald-expansion set up on your machine. + ## What features are included? - ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**: - [Battle configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h) From 6b170d70f1fb87728d9916b67ddf173a5409a4c8 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 27 Nov 2024 20:05:11 +0100 Subject: [PATCH 427/544] Fixes Red Card / Eject Pack interaction (#5724) --- include/constants/battle_script_commands.h | 2 +- test/battle/form_change/primal_reversion.c | 16 ++++++++++++++++ test/battle/hold_effect/red_card.c | 22 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index a8daf8841b..5f3feefa31 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -300,9 +300,9 @@ enum MoveEndEffects MOVEEND_RECOIL, MOVEEND_ITEM_EFFECTS_ATTACKER, MOVEEND_MAGICIAN, // Occurs after final multi-hit strike, and after other items/abilities would activate + MOVEEND_RED_CARD, // Red Card triggers before Eject Pack MOVEEND_EJECT_ITEMS, MOVEEND_WHITE_HERB, - MOVEEND_RED_CARD, MOVEEND_LIFEORB_SHELLBELL, // Includes shell bell, throat spray, etc MOVEEND_CHANGED_ITEMS, MOVEEND_PICKPOCKET, diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index df19a1d0d6..4b9e019b5b 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -332,3 +332,19 @@ DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); } } + +SINGLE_BATTLE_TEST("111") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + PLAYER(SPECIES_GROUDON) { HP(1); Item(ITEM_RED_ORB); } + PLAYER(SPECIES_WOBBUFFET) + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon fainted!"); + } +} diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 3209549de1..7cdbba2412 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -467,4 +467,26 @@ SINGLE_BATTLE_TEST("Red Card prevents Emergency Exit activation when triggered") } } +SINGLE_BATTLE_TEST("Red Card activates before Eject Pack") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffectSelf(MOVE_OVERHEAT, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_OVERHEAT); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OVERHEAT, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + // SINGLE_BATTLE_TEST("Red Card activates but fails if the attacker has Dynamaxed") From 846427ac432942fb743850f06fcb9569bf26df5a Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 27 Nov 2024 20:08:38 +0100 Subject: [PATCH 428/544] Fixes gems triggering on confusion damage (#5723) --- src/battle_script_commands.c | 1 + test/battle/status2/confusion.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b1dbcc6106..2ca3cd52f8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2119,6 +2119,7 @@ END: } if (gSpecialStatuses[gBattlerAttacker].gemBoost && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleMons[gBattlerAttacker].item && gMovesInfo[gCurrentMove].effect != EFFECT_PLEDGE && gCurrentMove != MOVE_STRUGGLE) diff --git a/test/battle/status2/confusion.c b/test/battle/status2/confusion.c index 3c86e5d555..03a17bcfeb 100644 --- a/test/battle/status2/confusion.c +++ b/test/battle/status2/confusion.c @@ -26,3 +26,21 @@ SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power") EXPECT_EQ(damage[0], damage[1]); } } + +SINGLE_BATTLE_TEST("Confusion self hit does not consume Gems") +{ + PASSES_RANDOMLY(B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 ? 33 : 50, 100, RNG_CONFUSION); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CONFUSE_RAY); MOVE(player, MOVE_TACKLE); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Normal Gem strengthened Wobbuffet's power!"); + } + MESSAGE("It hurt itself in its confusion!"); + } +} From 4f1dced851f2fb6b7153d3ad5646c2db2603d4a2 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Wed, 27 Nov 2024 22:50:39 +0100 Subject: [PATCH 429/544] Updated the new pokemon tutorial for 1.10 (#5721) Co-authored-by: Hedara Co-authored-by: Pawkkie <61265402+Pawkkie@users.noreply.github.com> --- docs/tutorials/how_to_new_pokemon_1_10_0.md | 1163 +++++++++++++++++++ 1 file changed, 1163 insertions(+) create mode 100644 docs/tutorials/how_to_new_pokemon_1_10_0.md diff --git a/docs/tutorials/how_to_new_pokemon_1_10_0.md b/docs/tutorials/how_to_new_pokemon_1_10_0.md new file mode 100644 index 0000000000..f6eaedee99 --- /dev/null +++ b/docs/tutorials/how_to_new_pokemon_1_10_0.md @@ -0,0 +1,1163 @@ + +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to 1.10.x versions. +- [Version 1.9.x](how_to_new_pokemon_1_9_0.md) +- [Version 1.8.x](how_to_new_pokemon_1_8_0.md) +- [Version 1.7.x](how_to_new_pokemon_1_7_0.md) +- [Version 1.6.x](how_to_new_pokemon_1_6_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. +* You have 6 icon palettes available instead of the base 3. +* Most tables that use `SPECIES_x` as indexes have been moved to `gSpeciesInfo`. + +# Content +* [Useful resources](#useful-resources) +* [The Data - Part 1](#the-data---part-1) + * [1. Declare a species constant](#1-Declare-a-species-constant) + * [2. `SpeciesInfo`'s structure](#2-speciesinfos-structure) + * [3. Define its basic species information](#3-define-its-basic-species-information) + * [4. Species Name](#4-species-name) + * [5. Define its cry](#5-define-its-cry) + * [6. Define its Pokédex entry](#6-define-its-pokédex-entry) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Add the sprites to the rom](#2-add-the-sprites-to-the-rom) + * [3. Add the animations to the rom](#3-add-the-animations-to-the-rom) + * [4. Linking graphic information to our Pokémon](#4-linking-graphic-information-to-our-pokémon) +* [The Data - Part 2](#the-data---part-2) + * [1. Species Flags](#1-species-flags) + * [2. Delimit the moveset](#2-delimit-the-moveset) + * [3. Define the Evolutions](#3-define-the-evolutions) + * [4. Make it appear!](#4-make-it-appear) +* [Optional data](#optional-data) + * [1. Form tables](#1-form-tables) + * [2. Form change tables](#2-form-change-tables) + * [3. Gender differences](#3-gender-differences) + * [4. Overworld Data](#4-overworld-data) + +# Useful resources +You can open a sprite debug menu by pressing `Select` in a Pokémon's summary screen outside of battle. + +![mGBA_6WOo1TSlsn](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/0c625cd8-8f89-4bc8-a285-b10a420a8f6d) + + +# The Data - Part 1 + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_MIMIKYU_BUSTED_TOTEM 1523 + #define SPECIES_MIMIKYU_TOTEM_BUSTED SPECIES_MIMIKYU_BUSTED_TOTEM ++#define SPECIES_MEWTHREE 1524 + +-#define SPECIES_EGG (SPECIES_MIMIKYU_BUSTED_TOTEM + 1) ++#define SPECIES_EGG (SPECIES_MEWTHREE + 1) + + #define NUM_SPECIES SPECIES_EGG +``` +This number is stored in a Pokémon's save structure. These should generally never change, otherwise your saved Pokémon species will change as well. + +We add this at the end so that no existing species change Id and so that we don't have to renumber everything after it. + +Now, let's see how it looks in-game! + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/dc15b0ba-a4bd-4f4e-9658-2dff73a11f79) + +Hmmm, something's not right... + +Oh, I know! We need to add the rest of the data! Normally, the vanilla game would crash if we try to look up anything about Mewthree in this state, but the expansion defaults all of its data to `SPECIES_NONE`. + +Now, let's see what needs to be done. + +## 2. `SpeciesInfo`'s structure +Now, to better understand Mewthree, we also need to understand Mew. Let's look at its data. +```diff + [SPECIES_MEW] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 100, + .baseSpAttack = 100, + .baseSpDefense = 100, + .types = MON_TYPES(TYPE_PSYCHIC), + .catchRate = 45, + #if P_UPDATED_EXP_YIELDS >= GEN_8 + .expYield = 300, + #elif P_UPDATED_EXP_YIELDS >= GEN_5 + .expYield = 270, + #else + .expYield = 64, + #endif + .evYield_HP = 3, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, + .genderRatio = MON_GENDERLESS, + .eggCycles = 120, + .friendship = 100, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), + .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PINK, + .speciesName = _("Mew"), + .cryId = CRY_MEW, + .natDexNum = NATIONAL_DEX_MEW, + .categoryName = _("New Species"), + .height = 4, + .weight = 40, + .description = COMPOUND_STRING( + "A Mew is said to possess the genes of all\n" + "Pokémon. It is capable of making itself\n" + "invisible at will, so it entirely avoids\n" + "notice even if it approaches people."), + .pokemonScale = 457, + .pokemonOffset = -2, + .trainerScale = 256, + .trainerOffset = 0, + .frontPic = gMonFrontPic_Mew, + .frontPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(40, 40) : MON_COORDS_SIZE(64, 48), + .frontPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 13 : 9, + .frontAnimFrames = sAnims_Mew, + .frontAnimId = P_GBA_STYLE_SPECIES_GFX ? ANIM_SWING_CONVEX : ANIM_ZIGZAG_SLOW, + .enemyMonElevation = P_GBA_STYLE_SPECIES_GFX ? 8 : 11, + .backPic = gMonBackPic_Mew, + .backPicSize = P_GBA_STYLE_SPECIES_GFX ? MON_COORDS_SIZE(48, 48) : MON_COORDS_SIZE(64, 64), + .backPicYOffset = P_GBA_STYLE_SPECIES_GFX ? 8 : 0, + .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, + .palette = gMonPalette_Mew, + .shinyPalette = gMonShinyPalette_Mew, + .iconSprite = gMonIcon_Mew, + .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) + FOOTPRINT(Mew) + OVERWORLD( + sPicTable_Mew, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Mew, + gShinyOverworldPalette_Mew + ) + .isMythical = TRUE, + .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, + .levelUpLearnset = sMewLevelUpLearnset, + .teachableLearnset = sMewTeachableLearnset, + }, +``` + +That's a lot of stuff! But don't worry, we'll go through it step by step throughout the tutorial +(and it's miles better than having this same data through 20+ files like it used to be). + +We'll start by adding the self-explanatory data that's also present in pret's vanilla structure: + +## 3. Define its basic species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [SPECIES_EGG] = + { + FRONT_PIC(Egg, 24, 24), + .frontPicYOffset = 20, + .backPic = gMonFrontPic_Egg, + .backPicSize = MON_COORDS_SIZE(24, 24), + .backPicYOffset = 20, + .palette = gMonPalette_Egg, + .shinyPalette = gMonPalette_Egg, + ICON(Egg, 1), + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = MON_TYPES(TYPE_PSYCHIC), ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), ++ .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, ++ .bodyColor = BODY_COLOR_PURPLE, ++ }, + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +- `baseHP`, `baseAttack`, `baseDefense`, `baseSpeed`, `baseSpAttack` and `baseSpDefense` are the base stats. They can't go higher than 255. +- `types` is using the macro `MON_TYPES` as a helper function for formatting so that only one type has to be input for species with a single type. + - To add a species with 2 types, use the format `MON_TYPES(TYPE_PSYCHIC, TYPE_NORMAL)`. +- `catchRate` is how likely it is to catch a Pokémon, the lower the value, the harder it is to catch. Legendaries generally have a catch rate of 3, so we put that here. +- `expYield` is the base amount of experience that a Pokémon gives when defeated/caught. In vanilla, this value caps at 255, but we've increased it to a maximum of 65535 accomodate later gen's higher experience yields. (The highest official value is Blissey's with 608, so going beyond this point may cause exponential gains that could break the system 😱) + - If you noticed, Mew's had some `#if`s, `#elif`s and `#endif` around it. This is because its yield has changed over time, and we let you choose which ones you want. This is not relevant to our Mewthree however, so we can just put a single `.expYield = 255,` line here. +- `evYield_HP`, `evYield_Attack`, `evYield_Defense`, `evYield_Speed`, `evYield_SpAttack` and `evYield_SpDefense` are how many EVs does the Pokémon give when they're caught. Each of these fields can have a value of 3 at most. Officially, no Pokémon give out more than 3 EVs total, with them being determined by their evolution stage (eg, Pichu, Pikachu and Raichu give 1, 2 and 3 Speed EVs respectively), and they tend to be associated with its higher stats. Since our Mewthree is a Special Attack monster, we'll be consistent and make it give out 3 Special Attack EVs, but you're always free to assign whatever you feel like :) + - Notice that the other `evYield` fields are not there. In C, numbers in a struct default to 0, so if we don't specify them, they'll be 0 all around! Less lines to worry about :D +- `itemCommon` and `itemRare` are used to determine what items is the Pokémon holding when encountering it in the wild. + - 50% for `itemCommon` and 5% for `itemRare` (boosted to 60%/20% when the first mon in the party has Compound Eyes or Super Luck) + - If they're both set as the same item, the item has a 100% chance of appearing. +- `genderRatio` is a fun one. + - There are 4 ways of handling this + - `PERCENT_FEMALE` is what most Pokémon use, where you define how likely it's gonna be female. It supports decimals, so you can put `PERCENT_FEMALE(12.5)` to have a 1 in 8 chance of your mon to be female. + - `MON_MALE` guarantees that all mon of this species will be male (eg. Tauros) + - `MON_FEMALE` guarantees that all mon of this species will be female (eg. Miltank) + - `MON_GENDERLESS` makes your species genderless, unable to breed with anything but Ditto to produce eggs. Most Legendaries are this, so we'll be chosing this as Mewthree's gender ratio. + - When working with evolution lines and don't want their genders to change after evolving, be sure that their gender ratios match their stages and evolution methods. Azurill is the only case where there's a mismatch, causing 1/3 of all Azurill to change from Female to Male. + - You might be wondering why some species have multiple defines for their genders, like `SPECIES_MEOWSTIC_(FE)MALE`. This is because those species have different stats and data from each other, so they're defined internally as different forms with `MON_MALE` and `MON_FEMALE` as gender ratios. If your species evolves depending on its gender and the evolutions have different stats, be sure to apply the correct evolution method! +- `eggCycles` determines how fast an egg of this species will hatch. Doesn't matter much for evolved species or those that can't lay eggs, but we add the field here just in case. +- `friendship` determines the amount of friendship of the mon when you catch it. Most Pokémon use `STANDARD_FRIENDSHIP`, but this creature of chaos does not want to be your friend, starting with 0. +- `growthRate` determines the amounts of experience required to reach each level. Go [here](https://bulbapedia.bulbagarden.net/wiki/Experience) for more info. + - This should be consistent across evolution lines, otherwise levels could change upon evolution. +- `eggGroups` are used for breed compatibility. Most Legendaries and Mythicals have the `EGG_GROUP_NO_EGGS_DISCOVERED` group, and so does our Mewthree. Go [here](https://bulbapedia.bulbagarden.net/wiki/Egg_Group) for more info. + - This is using the helper macro `MON_EGG_GROUPS`. +- `abilities` determines the potential abilites of our species. Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h). + - When both slot 1 and 2 are defined as not being `ABILITY_NONE`, their starting ability will be decided on a coin flip using their personality. They can later be changed using an Ability Capsule. + - Certain Pokémon such as Zygarde and Rockruff have different forms to add additional abilities. As such, they cannot be changed using an Ability Capsule (though the Zygarde Cube can change Zygarde's ability by changing them to their corresponding form) + - The 3rd slot is for Hidden Abilities. If defined as `ABILITY_NONE`, it will default to Slot 1 (eg. Metapod doesn't have a Hidden Ability, but Caterpie and Butterfree do). Go [here](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities) and [here](https://bulbapedia.bulbagarden.net/wiki/Ability_Patch) for more info. + - If the array is defined as `{ABILITY_1, ABILITY_2}`, the Hidden Ability is set as `ABILITY_NONE`. +- `bodyColor` is used in the Pokédex as a search filter. +- `noFlip` is used in to prevent front sprites from being flipped horizontally and cause weird issues, like Clawitzer's big claw changing sides. + +That's all the basic fields present in vanilla emerald, so now let's take a look at the new fields added by the expansion. + +## 4. Species Name + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .bodyColor = BODY_COLOR_PURPLE, ++ .speciesName = _("Mewthree"), + }, + }; +``` +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 5. Define its cry + +Time for audio! +We first need to convert an existing audio file to the format supported by the expansion. + +Most formats are supported for conversion, but for simplicity's sake, we're gonna use an mp3 file. + +Now, let's copy the file to the `sound/direct_sound_samples/cries` folder. +Once that's done, let's run the following command: +``` +ffmpeg -i sound/direct_sound_samples/cries/mewthree.mp3 -c:a pcm_s8 -ac 1 -ar 13379 sound/direct_sound_samples/cries/mewthree.aif +``` +This will convert your audio file to .aif, which is what's read by the compiler. + +Let's add the cry to the ROM via [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff +.if P_FAMILY_PECHARUNT == TRUE + .align 2 +Cry_Pecharunt:: + .incbin "sound/direct_sound_samples/cries/pecharunt.bin" +.endif @ P_FAMILY_PECHARUNT + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +``` + +Then we add the cry ID to [include/constants/cries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/cries.h): + +```diff +enum { + CRY_NONE, + ... +#if P_FAMILY_TERAPAGOS + CRY_TERAPAGOS, +#endif //P_FAMILY_TERAPAGOS +#if P_FAMILY_PECHARUNT + CRY_PECHARUNT, +#endif //P_FAMILY_PECHARUNT ++ CRY_MEWTHREE, + CRY_COUNT, +}; +``` + +And then link it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. The order of these two tables should match the order of the cry IDs, otherwise they'll be shifted. + +```diff + cry Cry_Terapagos + cry Cry_Pecharunt ++ cry Cry_Mewthree +``` +```diff + cry_reverse Cry_Terapagos + cry_reverse Cry_Pecharunt ++ cry_reverse Cry_Mewthree +``` + +Lastly, we add the cry to our species entry +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .speciesName = _("Mewthree"), ++ .cryId = CRY_MEWTHREE, + }, + }; +``` + +And let's see how it sounds in-game: + +https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/4f7667db-4db9-4bfd-a8dd-ece26f09f327 + +Good! Our monster now has a mighty roar! + +You can now delete the mp3 from the cries folder now once you made sure that the cry sounds like how you want it to. + +## 6. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_PECHARUNT, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI + +#if P_GEN_9_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it and give it a `HOENN_TO_NATIONAL` member, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +}; + +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + const u16 sHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can add the number and entry to our Mewthree: +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .cryId = CRY_MEWTHREE, ++ .natDexNum = NATIONAL_DEX_MEWTHREE, ++ .categoryName = _("New Species"), ++ .height = 15, ++ .weight = 330, ++ .description = COMPOUND_STRING( ++ "The rumors became true.\n" ++ "This is Mew's final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"), ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, + }, + }; +``` +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3759dd4c-8da5-4b1c-9a50-b9e9d0815e7f) + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. + +`height` and `weight` are specified in decimeters and hectograms respectively (which are meters and kilograms multiplied by 10, so 2.5 meters are 25 decimeters). + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight, so we added comments to the listings in order help out were they should fit. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + // 72.8 lbs / 33.0 kg + //NATIONAL_DEX_MEWTWO_MEGA_Y, + NATIONAL_DEX_ESCAVALIER, + NATIONAL_DEX_FRILLISH, + NATIONAL_DEX_DURANT, + NATIONAL_DEX_CINDERACE, ++ NATIONAL_DEX_MEWTHREE, + //NATIONAL_DEX_PERSIAN_ALOLAN, + NATIONAL_DEX_TOEDSCOOL, + // 73.4 lbs / 33.3 kg + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + // 4'11" / 1.5m + ... + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_IRON_BOULDER, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` +![mGBA_lUBfmFEKUx](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3a8b8a17-759b-486b-9831-deb2f494bd71) + + +# The Graphics +We will start by copying the following files for *Mew* (not Mewtwo) and rename it to `mewthree`. +```sh +cp -r graphics/pokemon/mew/. graphics/pokemon/mewthree +``` +We aren't copying Mewtwo's folder because he has those pesky Mega Evolutions that will get in the way of what we're doing, so our sample will need to be pure from the source. + +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I recommend Aseprite or its free alternative, Libresprite) and change `anim_front.png` and `back.png` to meet your expectations. + +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ + +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. +**Note**: the icon will use one of 6 predefined palettes instead of `normal.pal`. +Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. + +## 2. Add the sprites to the rom +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff +#if P_FAMILY_PECHARUNT + const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz"); + const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz"); + const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz"); + const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz"); + const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp"); +#if P_FOOTPRINTS + const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); +#endif //P_FOOTPRINTS +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_Pecharunt[] = INCBIN_COMP("graphics/pokemon/pecharunt/overworld.4bpp"); +#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE + const u32 gOverworldPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/overworld_shiny.gbapal.lz"); +#endif //OW_PKMN_OBJECTS_SHARE_PALETTES +#endif //OW_POKEMON_OBJECT_EVENTS +#endif //P_FAMILY_PECHARUNT + + const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz"); + const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz"); + const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp"); + ++ const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/anim_front.4bpp.lz"); ++ const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); ++ const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); ++ const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); ++ const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); ++ const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Pecharunt, the Pokémon that should be above your insertion for the time being, reads a `front.png` sprite instead of an `anim_front.png` sprite. This is because currently, Pecharunt lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use `anim_front`. + +## 3. Add the animations to the rom + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +#if P_FAMILY_PECHARUNT +PLACEHOLDER_ANIM_SINGLE_FRAME(Pecharunt); +#endif //P_FAMILY_PECHARUNT + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +``` + +```diff +#if P_FAMILY_PECHARUNT +SINGLE_ANIMATION(Pecharunt); +#endif //P_FAMILY_PECHARUNT ++SINGLE_ANIMATION(Mewthree); +SINGLE_ANIMATION(Egg); +``` + +You might be wondering what `PLACEHOLDER_ANIM_SINGLE_FRAME` is. Well, since Pecharun only has 1 frame, we use what's called a preprocessor *macro* to have in a single line what otherwise would've been this in the C file: +```c +static const union AnimCmd sAnim_Pecharunt_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +} +``` +Instead, we can use the already established macro that does the same thing, replacing the value in parenthesis with what we want (in this case, `Pecharunt`): +```c +#define PLACEHOLDER_ANIM_SINGLE_FRAME(name) \ +static const union AnimCmd sAnim_##name##_1[] = \ +{ \ + ANIMCMD_FRAME(0, 1), \ + ANIMCMD_END, \ +} +``` + +## 4. Linking graphic information to our Pokémon +Now that we have all the external data ready, we just need to add it to `gSpeciesInfo` plus the rest of the animation and graphical data that we want to use: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 2, ++ .frontPic = gMonFrontPic_Mewthree, ++ .frontPicSize = MON_COORDS_SIZE(64, 64), ++ .frontPicYOffset = 0, ++ .frontAnimFrames = sAnims_Mewthree, ++ .frontAnimId = ANIM_GROW_VIBRATE, ++ .frontAnimDelay = 15, ++ .enemyMonElevation = 6, ++ .backPic = gMonBackPic_Mewthree, ++ .backPicSize = MON_COORDS_SIZE(64, 64), ++ .backPicYOffset = 0, ++ .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, ++ .palette = gMonPalette_Mewthree, ++ .shinyPalette = gMonShinyPalette_Mewthree, + .iconSprite = gMonIcon_Mewthree, + .iconPalIndex = 2, ++ FOOTPRINT(Mewthree) + }, + }; +``` +Let's explain each of these: +- `frontPic`: + - Used to reference the front sprite, so in this case, we call for `gMonFrontPic_Mewthree`. +- `frontPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the front sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `frontPicYOffset`: + - Used to define what Y position the sprite sits at. This is used to set where they'd be "grounded". For the shadow, see `enemyMonElevation`. +- `frontAnimFrames`: + - We link our animation frame animations that we defined earlier here. +- `frontAnimId`: + - Because you are limited to two frames, there are already [predefined front sprite animations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h), describing translations, rotations, scalings or color changes. +- `frontAnimDelay`: + - Sets a delay in frame count between when the Pokémon appears and when the animation starts. +- `enemyMonElevation`: + - Used to determine the altitude from the ground. Any value above 0 will show a shadow under the Pokémon, to signify that they're floating. +- `backPic`: + - Used to reference the back sprite, so in this case, we call for `gMonBackPic_Mewthree`. +- `backPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the back sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. + - **NOTE**: Mew has a tarnary switch here in order to change values depending on if a config option is set for displaying th original Gen 3 sprites. +- `backPicYOffset`: + - Used to define what Y position of the back sprite. When working with the animation debug menu, we recommend aligning the back sprite to the white background, as it was designed to properyly align with the real battle layout. +- `backAnimId`: + - Like `frontAnimId` except for the back sprites and them being a single frame. The IDs listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h) are used to represent 3 different animations that happen based on the the Pokémon's nature. +- `palette`: + - Used to reference the non-shiny palette, so in this case, we call for `gMonPalette_Mewthree`. +- `shinyPalette`: + - Used to reference the shiny palette, so in this case, we call for `gMonShinyPalette_Mewthree`. +- `iconSprite`: + - Used to reference the icon sprite, so in this case, we call for `gMonIcon_Mewthree`. +- `iconPalIndex`: + - Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. +- `FOOTPRINT` + - We made this single field into a macro so that they can be ignored when `P_FOOTPRINTS` is set to false. It's also why we don't have an "," after calling it like the other macros (we add it as part of the macro itself). + ```c + #if P_FOOTPRINTS + #define FOOTPRINT(sprite) .footprint = gMonFootprint_## sprite, + #else + #define FOOTPRINT(sprite) + #endif + ``` + +# The Data - Part 2 + +We're almost there just a bit left! + +## 1. Species Flags + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PURPLE, ++ .isLegendary = TRUE, ++ .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, + }, + }; +``` +Each species flag provides properties to the species: +- `isLegendary`: + - Does nothing. +- `isMythical`: + - Is skipped during Pokédex evaluations. + - Unless it also has the `dexForceRequired` flag. + - Cannot obtain Gigantamax factor via `ToggleGigantamaxFactor`. +- `isUltraBeast`: + - Beast Ball's multiplier is set to x5 for this species. + - All other ball multipliers are set to x0.1. +- `isParadox` (previously `isParadoxForm`): + - Makes it so that Booster Energy cannot be knocked off. +- `isTotem`: + - Does nothing. +- `isMegaEvolution`: + - A Mega indicator is added to the battle box indicating that they're Mega Evolved. + - The species doesn't receive affection benefits. + - Required when adding new Mega Evolutions. +- `isPrimalReversion`: + - A Primal Reversion indicator (Alpha or Omega for Kyogre/Groudon respectively) is added to the battle box indicating that they're Primal Reverted. + - Required when adding new Primal Reversions. +- `isUltraBurst`: + - Required when adding new Ultra Burst forms. +- `isGigantamax`: + - Used to determine if Gigantamax forms should have their GMax moves or not. + - Required when adding new Gigantamax forms. +- `isAlolanForm`, `isGalarianForm`, `isHisuianForm`, `isPaldeanForm`: + - In the future, these will be used to determine breeding offspring from different based on their region. +- `cannotBeTraded`: + - This species cannot be traded away (like Black/White Kyurem). +- `perfectIVCount`: + - Guarantees that the number of IVs specified here will be perfect. +- `tmIlliterate`: + - This species will be unable to learn the universal moves. +- `isFrontierBanned`: + - This species will be unable to enter Battle Frontier facilities. Replaces `gFrontierBannedSpecies`. + +## 2. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets/gen_9.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets/gen_9.h): +**NOTE**: You can ignore the warning at the top of the file if you're just adding moves to Pokemon. + +```diff +#if P_FAMILY_PECHARUNT +static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_WITHDRAW), + LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN), + LEVEL_UP_MOVE(56, MOVE_TOXIC), + LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(72, MOVE_RECOVER), + LEVEL_UP_END +}; +#endif + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +``` +**NOTE**: If `P_LVL_UP_LEARNSETS` is not set to something equal to `GEN_9`, the file to be edited will change to what's specified. + +Again, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .palette = gMonPalette_Mewthree, + .shinyPalette = gMonShinyPalette_Mewthree, + .iconSprite = gMonIcon_Mewthree, + .iconPalIndex = 2, ++ .levelUpLearnset = sMewthreeLevelUpLearnset, + }, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const u16 sPecharuntTeachableLearnset[] = { + ... + MOVE_UNAVAILABLE, +}; +#endif //P_FAMILY_PECHARUNT + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, // This is required to determine where the array ends. ++}; +#endif +``` + +Once more, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) + .levelUpLearnset = sMewthreeLevelUpLearnset, ++ .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + + +## 3. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTWO] = + { + ... + FOOTPRINT(Mewtwo) + .isLegendary = TRUE, + .levelUpLearnset = sMewtwoLevelUpLearnset, + .teachableLearnset = sMewtwoTeachableLearnset, + .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, + .formChangeTable = sMewtwoFormChangeTable, ++ .evolutions = EVOLUTION({EVO_LEVEL, 100, SPECIES_MEWTHREE}), + }, + }; +``` + +## 4. Make it appear! +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Optional data + +Now that you now have all the essential pieces to create a base species, there are some aspects that you might want to know if you want to do other stuff with your custom Pokémon. + +## 1. Form tables +Found in `src/data/pokemon/form_species_tables.h`. + +These are introduced to have a reference of what forms correspond to what Species of Pokémon. For example, we have Pikachu's table: +```c +#if P_FAMILY_PIKACHU +static const u16 sPikachuFormSpeciesIdTable[] = { + SPECIES_PIKACHU, + SPECIES_PIKACHU_COSPLAY, + SPECIES_PIKACHU_ROCK_STAR, + SPECIES_PIKACHU_BELLE, + SPECIES_PIKACHU_POP_STAR, + SPECIES_PIKACHU_PH_D, + SPECIES_PIKACHU_LIBRE, + SPECIES_PIKACHU_ORIGINAL_CAP, + SPECIES_PIKACHU_HOENN_CAP, + SPECIES_PIKACHU_SINNOH_CAP, + SPECIES_PIKACHU_UNOVA_CAP, + SPECIES_PIKACHU_KALOS_CAP, + SPECIES_PIKACHU_ALOLA_CAP, + SPECIES_PIKACHU_PARTNER_CAP, + SPECIES_PIKACHU_WORLD_CAP, + FORM_SPECIES_END, +}; +#endif //P_FAMILY_PIKACHU +``` +We register the table each form entry in `gSpeciesInfo`. + +```diff + [SPECIES_PIKACHU] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + .evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, + {EVO_NONE, 0, SPECIES_RAICHU_ALOLAN}), + }, + + [SPECIES_PIKACHU_COSPLAY] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + }, +``` +...and so on. + +What this allows us to do is to be able to get all forms of a Pokémon in our code by using the `GetSpeciesFormTable` function. + +For example, in the HGSS dex, it lets us browse between the entries of every form available.: + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/a1a90b79-46a1-4cd6-97d6-ec5d741bfdc8) ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/7cffc6be-0b5c-4074-b689-736a97297843) + +In addition, we have the `GET_BASE_SPECIES_ID` macro, which returns the first entry of the table (or return the species itself if it doesn't have a table registered). With this, you can check if a Pokémon is any form of a species. For example, making it so that the Light Ball affects all Pikachu forms: +```c + case HOLD_EFFECT_LIGHT_BALL: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PIKACHU && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + break; +``` + +## 2. Form change tables +Found in `src/data/pokemon/form_species_tables.h`. + +These tables, unlike the regular form tables, registers how Pokémon can switch between forms. + +```c +#if P_FAMILY_GASTLY +static const struct FormChange sGengarFormChangeTable[] = { + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; +#endif //P_FAMILY_GASTLY +``` +The first value is the type of form change. In the case of Gengar, we have both Mega Evolution and Gigantamax form changes. + +The second value is the target form, to which the Pokémon will change into. + +Values after that are referred as arguments, and needs to be put there depends on the type of form change, detailed in `include/constants/form_change_types.h`. + +## 3. Gender differences +![mGBA_Wq5cbDkNZG](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/45256192-b451-4baa-af06-f57ca16e1e46) + +You may have seen that there's a couple of duplicate fields with a "Female" suffix. +```diff + [SPECIES_FRILLISH] = + { + ... + .frontPic = gMonFrontPic_Frillish, ++ .frontPicFemale = gMonFrontPic_FrillishF, + .frontPicSize = MON_COORDS_SIZE(56, 56), ++ .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .frontPicYOffset = 5, + .frontAnimFrames = sAnims_Frillish, + .frontAnimId = ANIM_RISING_WOBBLE, + .backPic = gMonBackPic_Frillish, ++ .backPicFemale = gMonBackPic_FrillishF, + .backPicSize = MON_COORDS_SIZE(40, 56), ++ .backPicSizeFemale = MON_COORDS_SIZE(40, 56), + .backPicYOffset = 7, + .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, + .palette = gMonPalette_Frillish, ++ .paletteFemale = gMonPalette_FrillishF, + .shinyPalette = gMonShinyPalette_Frillish, ++ .shinyPaletteFemale = gMonShinyPalette_FrillishF, + .iconSprite = gMonIcon_Frillish, ++ .iconSpriteFemale = gMonIcon_FrillishF, + .iconPalIndex = 0, ++ .iconPalIndexFemale = 1, + FOOTPRINT(Frillish) + .levelUpLearnset = sFrillishLevelUpLearnset, + .teachableLearnset = sFrillishTeachableLearnset, + .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_JELLICENT}), + }, +``` +These are used to change the graphics of the Pokémon if they're female. If they're not registered, they default to the male values. + +However, `iconPalIndexFemale` is a special case, where it's *doesn't* read the male icon palette if its `iconSpriteFemale` is set, so if you're setting a female icon, be sure to set their palette index as well. + +## 4. Overworld Data +![mGBA_4iqvhhSltK](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/e59238dc-9779-4f26-a9e7-159a32caa3d9) + +If you have `OW_POKEMON_OBJECT_EVENTS` in your hack, you can add Overworld of your new species by following these steps: + +First, since you copied the contents from Mew's folder previously, you should also have copied its overworld sprites. Edit those to your liking, as we have done before, making sure to update the palettes + +Secondly, in [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h), add the following: + +```diff + const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); + const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); ++ const u32 gObjectEventPic_Mewthree[] = INCBIN_COMP("graphics/pokemon/mewthree/overworld.4bpp"); ++ const u32 gOverworldPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/overworld_normal.gbapal.lz"); ++ const u32 gShinyOverworldPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/overworld_shiny.gbapal.lz"); +``` + +Thirdly, in [spritesheet_rules.mk](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/spritesheet_rules.mk) + +```diff +$(POKEMONGFXDIR)/mewtwo/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + ++$(POKEMONGFXDIR)/mewthree/overworld.4bpp: %.4bpp: %.png ++ $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/mew/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 +``` + +Fourthly, in [src/data/object_events/object_event_pic_tables_followers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/object_events/object_event_pic_tables_followers.h): +```diff +#if P_FAMILY_PECHARUNT +/*static const struct SpriteFrameImage sPicTable_Pecharunt[] = { + overworld_ascending_frames(gObjectEventPic_Pecharunt, 4, 4), +};*/ +#endif //P_FAMILY_PECHARUNT + ++static const struct SpriteFrameImage sPicTable_Mewthree[] = { ++ overworld_ascending_frames(gObjectEventPic_Mewthree, 4, 4), ++}; +``` + +And finally, in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) ++ OVERWORLD( ++ sPicTable_Mewthree, ++ SIZE_32x32, ++ SHADOW_SIZE_M, ++ TRACKS_FOOT, ++ gOverworldPalette_Mewthree, ++ gShinyOverworldPalette_Mewthree ++ ) + .levelUpLearnset = sMewthreeLevelUpLearnset, + .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +### Sprite Size +Depending on your species, you might want to use different sizes for it. For example, certain species known for being big like Steelix use sprites that fit a 64x64 frame instead of 32x32, and as such have `SIZE_64x64` in their data instead of `SIZE_32x32` to accomodate for them. + +Also, in `spritesheet_rules.mk`, `-mwidth` and `-mheight` need to be set to 8 instead of 4 for such cases. + +### Shadows +Gen 4 style shadows are defined by the `SHADOW` macro which takes the following arguments: + - X offset + - Y offset + - Shadow size +You have 4 options for their shadow, between Small, Medium, Large and Extra Large: + - `SHADOW_SIZE_S` + - `SHADOW_SIZE_M` + - `SHADOW_SIZE_L` + - `SHADOW_SIZE_XL_BATTLE_ONLY` +To make the Pokémon have no shadow, use the `NO_SHADOW` macro instead of `SHADOW`. + +### Tracks +You have 4 options for the tracks that your species will leave behind on sand. + - `TRACKS_NONE` + - `TRACKS_FOOT` ![sand_footprints](https://github.com/user-attachments/assets/8b8c34d6-72e9-4b9d-839d-0a5cc1ae1a4c) + - `TRACKS_SLITHER` ![slither_tracks](https://github.com/user-attachments/assets/28219c05-61e0-48b3-9aeb-43f48e4ffdd4) + - `TRACKS_SPOT` ![spot_tracks](https://github.com/user-attachments/assets/f7a24887-c5ca-47f2-8825-01f3df61deca) + - `TRACKS_BUG` ![bug_tracks](https://github.com/user-attachments/assets/8cd1dea4-4123-4af8-a558-992874a6d589) + + ...though technically you can also use `TRACKS_BIKE_TIRE` if you wish to. + +![bike_tire_tracks](https://github.com/user-attachments/assets/ac81d211-85e5-443a-ac54-c2976f1f0b82) From 174177a4d57d102bc181c02b2422d1b88a55b1dd Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 28 Nov 2024 11:17:48 +0100 Subject: [PATCH 430/544] Fixes minor move desc errors (#5728) --- src/data/moves_info.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 3a6837dd2b..df12555c5b 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -12220,7 +12220,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = COMPOUND_STRING("Coil"), .description = COMPOUND_STRING( - "Coils up to raise Attack\n" + "Coils up to raise Attack,\n" "Defense and Accuracy."), .effect = EFFECT_COIL, .power = 0, @@ -17336,7 +17336,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .name = COMPOUND_STRING("Octolock"), .description = COMPOUND_STRING( "Traps the foe to lower Def\n" - "and Sp. Def fall each turn."), + "and Sp. Def each turn."), .effect = EFFECT_OCTOLOCK, .power = 0, .type = TYPE_FIGHTING, From 88cdd8bdfb901d22149ba027e17eadebb92b2839 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 28 Nov 2024 11:22:32 +0100 Subject: [PATCH 431/544] Fixes Kee Maranga and Enigma Berry (#5727) --- include/battle.h | 2 +- src/battle_util.c | 4 ++-- test/battle/hold_effect/enigma_berry.c | 16 ++++++++++++++++ test/battle/hold_effect/kee_berry.c | 16 ++++++++++++++++ test/battle/hold_effect/maranga_berry.c | 16 ++++++++++++++++ 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/include/battle.h b/include/battle.h index fda1639fa5..20afe876ca 100644 --- a/include/battle.h +++ b/include/battle.h @@ -831,7 +831,7 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define BATTLER_MAX_HP(battlerId)(gBattleMons[battlerId].hp == gBattleMons[battlerId].maxHP) #define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0) || (gBattleStruct->enduredDamage & gBitTable[gBattlerTarget])) -#define BATTLER_TURN_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0) || (gBattleStruct->enduredDamage & gBitTable[battler])) +#define BATTLER_TURN_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0) || (gBattleStruct->enduredDamage & gBitTable[battlerId])) #define IS_BATTLER_OF_TYPE(battlerId, type)((GetBattlerType(battlerId, 0, FALSE) == type || GetBattlerType(battlerId, 1, FALSE) == type || (GetBattlerType(battlerId, 2, FALSE) != TYPE_MYSTERY && GetBattlerType(battlerId, 2, FALSE) == type))) #define IS_BATTLER_OF_BASE_TYPE(battlerId, type)((GetBattlerType(battlerId, 0, TRUE) == type || GetBattlerType(battlerId, 1, TRUE) == type || (GetBattlerType(battlerId, 2, TRUE) != TYPE_MYSTERY && GetBattlerType(battlerId, 2, TRUE) == type))) diff --git a/src/battle_util.c b/src/battle_util.c index de0d3e7cc6..dc98c278e3 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6831,7 +6831,7 @@ static u8 TrySetEnigmaBerry(u32 battler) { if (IsBattlerAlive(battler) && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) - && ((TARGET_TURN_DAMAGED && gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || gBattleScripting.overrideBerryRequirements) + && ((BATTLER_TURN_DAMAGED(battler) && gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || gBattleScripting.overrideBerryRequirements) && !(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) { @@ -6855,7 +6855,7 @@ static u8 DamagedStatBoostBerryEffect(u32 battler, u8 statId, u8 category) || (!DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && GetBattleMoveCategory(gCurrentMove) == category && battler != gBattlerAttacker - && TARGET_TURN_DAMAGED)) + && BATTLER_TURN_DAMAGED(battler))) ) { BufferStatChange(battler, statId, STRINGID_STATROSE); diff --git a/test/battle/hold_effect/enigma_berry.c b/test/battle/hold_effect/enigma_berry.c index c678b178d3..16a598b272 100644 --- a/test/battle/hold_effect/enigma_berry.c +++ b/test/battle/hold_effect/enigma_berry.c @@ -58,3 +58,19 @@ SINGLE_BATTLE_TEST("Enigma Berry does nothing if Heal Block applies") } } } + +DOUBLE_BATTLE_TEST("Enigma Berry doesn't trigger if partner was hit") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { Item(ITEM_ENIGMA_BERRY); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); + } THEN { + EXPECT(opponentRight->item == ITEM_ENIGMA_BERRY); + } +} diff --git a/test/battle/hold_effect/kee_berry.c b/test/battle/hold_effect/kee_berry.c index ace35a824c..35a4e6fcd5 100644 --- a/test/battle/hold_effect/kee_berry.c +++ b/test/battle/hold_effect/kee_berry.c @@ -73,3 +73,19 @@ SINGLE_BATTLE_TEST("Kee Berry doesn't trigger if the item hold user used a physi EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); } } + +DOUBLE_BATTLE_TEST("Kee Berry doesn't trigger if partner was hit") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { Item(ITEM_KEE_BERRY); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); + } THEN { + EXPECT(opponentRight->item == ITEM_KEE_BERRY); + } +} diff --git a/test/battle/hold_effect/maranga_berry.c b/test/battle/hold_effect/maranga_berry.c index a7b90bd9b3..036b2a51c0 100644 --- a/test/battle/hold_effect/maranga_berry.c +++ b/test/battle/hold_effect/maranga_berry.c @@ -73,3 +73,19 @@ SINGLE_BATTLE_TEST("Maranga Berry doesn't trigger if the item hold user used a s EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE); } } + +DOUBLE_BATTLE_TEST("Maranga Berry doesn't trigger if partner was hit") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { Item(ITEM_MARANGA_BERRY); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); + } THEN { + EXPECT(opponentRight->item == ITEM_MARANGA_BERRY); + } +} From 0cd0e0b00567c87f649ba9111f0092d6bb5fd9ea Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 28 Nov 2024 11:24:38 +0100 Subject: [PATCH 432/544] Fixes Blunder Policy (#5722) --- src/battle_script_commands.c | 9 +++- test/battle/hold_effect/blunder_policy.c | 67 ++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 test/battle/hold_effect/blunder_policy.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2ca3cd52f8..7a9409d4d4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1767,8 +1767,6 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u if (!RandomPercentage(RNG_ACCURACY, accuracy)) { gMoveResultFlags |= MOVE_RESULT_MISSED; - if (holdEffectAtk == HOLD_EFFECT_BLUNDER_POLICY) - gBattleStruct->blunderPolicy = TRUE; // Only activates from missing through acc/evasion checks if (gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_DARTS && !recalcDragonDarts // So we don't jump back and forth between targets @@ -2532,6 +2530,13 @@ static void Cmd_resultmessage(void) return; } + if (gMoveResultFlags & MOVE_RESULT_MISSED && !(gMoveResultFlags & (MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED))) + { + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_BLUNDER_POLICY + && !IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + gBattleStruct->blunderPolicy = TRUE; // Only activates from missing through acc/evasion checks + } + if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK)) { if (gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate - show the ability pop-up diff --git a/test/battle/hold_effect/blunder_policy.c b/test/battle/hold_effect/blunder_policy.c new file mode 100644 index 0000000000..552ad2f6fb --- /dev/null +++ b/test/battle/hold_effect/blunder_policy.c @@ -0,0 +1,67 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_BLUNDER_POLICY].holdEffect == HOLD_EFFECT_BLUNDER_POLICY); +} + +SINGLE_BATTLE_TEST("Blunder Policy raises the users speed by 2 stages if the user misses") +{ + PASSES_RANDOMLY(3, 10, RNG_ACCURACY); + GIVEN { + ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].accuracy == 70); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BLUNDER_POLICY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FOCUS_BLAST); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_BLAST, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + } THEN { + EXPECT(player->item == ITEM_NONE); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } +} + + +SINGLE_BATTLE_TEST("Blunder Policy will never trigger if the move fails due to an immunity") +{ + PASSES_RANDOMLY(10, 10, RNG_ACCURACY); + GIVEN { + ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].accuracy == 70); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BLUNDER_POLICY); } + OPPONENT(SPECIES_GASTLY); + } WHEN { + TURN { MOVE(player, MOVE_FOCUS_BLAST); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_BLAST, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + } + } THEN { + EXPECT(player->item == ITEM_BLUNDER_POLICY); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Blunder Policy will never trigger if the move fails due to Protect") +{ + PASSES_RANDOMLY(10, 10, RNG_ACCURACY); + GIVEN { + ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].accuracy == 70); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BLUNDER_POLICY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_FOCUS_BLAST); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_BLAST, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + } + } THEN { + EXPECT(player->item == ITEM_BLUNDER_POLICY); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } +} From c4fe97011e5269e83d91cd710c22501f1e86bc3c Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 28 Nov 2024 22:51:34 +0100 Subject: [PATCH 433/544] Fix Floral Healing anim (#5733) --- data/battle_anim_scripts.s | 4 ++-- test/battle/form_change/primal_reversion.c | 16 ---------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 68f804e8ed..55abebbbf0 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -10103,7 +10103,6 @@ Move_FLORAL_HEALING:: loadspritegfx ANIM_TAG_ORBS @circles loadspritegfx ANIM_TAG_PINK_PETAL @pink particles monbg ANIM_ATTACKER - monbg ANIM_TARGET playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER call CIRCLES_LEAVES call CIRCLES_LEAVES @@ -10111,6 +10110,7 @@ Move_FLORAL_HEALING:: panse SE_M_COMET_PUNCH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 playsewithpan SE_M_TWISTER, 0x0 createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x46, 0x1, 0x40 + clearmonbg ANIM_ATTACKER delay 0x2 createsprite gFloralHealingWindLeavesTemplate, ANIM_ATTACKER, 2, 0x3c, 0x0, 0x40 delay 0x2 @@ -10133,6 +10133,7 @@ Move_FLORAL_HEALING:: createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 0x55, 0x0, 0x78 delay 0x2 loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 0x12, 0xa + monbg ANIM_TARGET call FloralHealingSpores call FloralHealingSpores call FloralHealingSpores @@ -10143,7 +10144,6 @@ Move_FLORAL_HEALING:: createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 16, 0xc, 0xfffb, 0x1, 0x0, 0x20, 0x3c, 0x1 waitforvisualfinish clearmonbg ANIM_TARGET - clearmonbg ANIM_ATTACKER end FloralHealingSpores: createsprite gFloralHealingFlowerTemplate, ANIM_ATTACKER, 2, 0x0, 0xffec, 0x55, 0x50, 0x0 diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 4b9e019b5b..df19a1d0d6 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -332,19 +332,3 @@ DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); } } - -SINGLE_BATTLE_TEST("111") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); - PLAYER(SPECIES_GROUDON) { HP(1); Item(ITEM_RED_ORB); } - PLAYER(SPECIES_WOBBUFFET) - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } - } SCENE { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); - MESSAGE("Groudon fainted!"); - } -} From 0f4b59898419b4ae2167ab7a14fb7c2e92daded3 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 28 Nov 2024 23:21:42 +0100 Subject: [PATCH 434/544] Fixes Aegislash not reverting back (#5734) --- include/constants/form_change_types.h | 4 ++++ src/battle_script_commands.c | 5 ++--- src/battle_util.c | 4 ++++ src/data/pokemon/form_change_tables.h | 8 +++++--- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 74bc16cf2f..79a8a4cee7 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -134,4 +134,8 @@ // param1: amount of days #define FORM_CHANGE_DAYS_PASSED 23 +// Form change for Aegislash +#define FORM_CHANGE_BATTLE_ATTACK 24 +#define FORM_CHANGE_BATTLE_KINGS_SHIELD 25 + #endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 7a9409d4d4..f8619880d0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1127,7 +1127,6 @@ static bool32 NoTargetPresent(u8 battler, u32 move) return FALSE; } -// TODO: Convert this to a proper FORM_CHANGE type. static bool32 TryAegiFormChange(void) { // Only Aegislash with Stance Change can transform, transformed mons cannot. @@ -1142,12 +1141,12 @@ static bool32 TryAegiFormChange(void) case SPECIES_AEGISLASH_SHIELD: // Shield -> Blade if (IS_MOVE_STATUS(gCurrentMove)) return FALSE; - gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH_BLADE; + TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_ATTACK); break; case SPECIES_AEGISLASH_BLADE: // Blade -> Shield if (gCurrentMove != MOVE_KINGS_SHIELD) return FALSE; - gBattleMons[gBattlerAttacker].species = SPECIES_AEGISLASH_SHIELD; + TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_KINGS_SHIELD); break; } diff --git a/src/battle_util.c b/src/battle_util.c index dc98c278e3..7e0970bcab 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10848,6 +10848,10 @@ u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method) if (GetBattlerTeraType(battler) == formChanges[i].param1) targetSpecies = formChanges[i].targetSpecies; break; + case FORM_CHANGE_BATTLE_ATTACK: + case FORM_CHANGE_BATTLE_KINGS_SHIELD: + targetSpecies = formChanges[i].targetSpecies; + break; } } } diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 52f888a55b..153dde2546 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -789,9 +789,11 @@ static const struct FormChange sFurfrouFormChangeTable[] = { #if P_FAMILY_HONEDGE static const struct FormChange sAegislashFormChangeTable[] = { - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH_SHIELD}, - {FORM_CHANGE_FAINT, SPECIES_AEGISLASH_SHIELD}, - {FORM_CHANGE_END_BATTLE, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_BATTLE_ATTACK, SPECIES_AEGISLASH_BLADE}, + {FORM_CHANGE_BATTLE_KINGS_SHIELD, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_FAINT, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_END_BATTLE, SPECIES_AEGISLASH_SHIELD}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_FAMILY_HONEDGE From 320c015565854c982da8a368db3d3f84ec475710 Mon Sep 17 00:00:00 2001 From: Hedara Date: Fri, 29 Nov 2024 11:58:40 +0100 Subject: [PATCH 435/544] Fixed test messages --- test/battle/ability/intimidate.c | 12 ++++++------ test/battle/hold_effect/red_card.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index f3b1f05c0c..e0f97d5bda 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -281,9 +281,9 @@ SINGLE_BATTLE_TEST("Intimidate activates when it's no longer affected by Neutral TURN { MOVE(player, move); SEND_OUT(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); ANIMATION(ANIM_TYPE_MOVE, move, player); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); SEND_IN_MESSAGE("Wobbuffet"); } THEN { @@ -316,11 +316,11 @@ SINGLE_BATTLE_TEST("Intimidate activates when it's no longer affected by Neutral } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); ANIMATION(ANIM_TYPE_MOVE, move, opponent); if (item != ITEM_NONE) ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); if (item != ITEM_NONE) { SEND_IN_MESSAGE("Wobbuffet"); @@ -341,9 +341,9 @@ SINGLE_BATTLE_TEST("Intimidate activates when it's no longer affected by Neutral TURN { MOVE(opponent, MOVE_FELL_STINGER); SEND_OUT(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FELL_STINGER, opponent); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); MESSAGE("Weezing fainted!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index c2a7238934..aa312797b2 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -486,7 +486,7 @@ SINGLE_BATTLE_TEST("Red Card activates before Eject Pack") MESSAGE("Wobbuffet is switched out with the Eject Button!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } From e4ef3a440fbdb18f86c16d39441768caea8be6d2 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 29 Nov 2024 18:46:45 +0100 Subject: [PATCH 436/544] Automatic Line Breaks, somewhat even lines (#5689) Co-authored-by: Hedara Co-authored-by: Eduardo Quezada --- include/battle_message.h | 1 + include/line_break.h | 33 ++++ src/battle_controller_player.c | 2 + src/battle_controller_safari.c | 2 + src/battle_message.c | 62 ++------ src/line_break.c | 281 +++++++++++++++++++++++++++++++++ 6 files changed, 331 insertions(+), 50 deletions(-) create mode 100644 include/line_break.h create mode 100644 src/line_break.c diff --git a/include/battle_message.h b/include/battle_message.h index 0b4570e389..7d000d289f 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -10,6 +10,7 @@ max(POKEMON_NAME_LENGTH + 1, \ ABILITY_NAME_LENGTH + 1))) #define BATTLE_MSG_MAX_WIDTH 208 +#define BATTLE_MSG_MAX_LINES 2 // for 0xFD #define B_TXT_BUFF1 0x0 diff --git a/include/line_break.h b/include/line_break.h new file mode 100644 index 0000000000..c423c9bf40 --- /dev/null +++ b/include/line_break.h @@ -0,0 +1,33 @@ +#ifndef GUARD_LINE_BREAK_H +#define GUARD_LINE_BREAK_H + +#define BADNESS_UNFILLED 1 // Badness added per pixel diff from max width +#define BADNESS_JAGGED 1 // Badness added per pixel diff from longest, squared per line +#define BADNESS_RUNT 100 // Badness added if there's a runt +#define BADNESS_OVERFLOW 100 // Badness added per pixel overflow, squared per line (not used) +#define BADNESS_WIDE_SPACE 1 // Badness added per extra pixel width (not used) +#define MAX_SPACE_WIDTH 5 + +struct StringWord { + u32 startIndex:16; + u32 length:8; + u32 width:8; +}; + +struct StringLine { + struct StringWord *words; + u16 numWords; + u8 spaceWidth; + u8 extraSpaceWidth; +}; + +void StripLineBreaks(u8 *src); +void BreakStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId); +void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId); + +bool32 IsWordSplittingChar(const u8 *src, u32 index); +u32 GetStringBadness(struct StringLine *stringLines, u32 numLines, u32 maxWidth); +void BuildNewString(struct StringLine *stringLines, u32 numLines, u32 maxLines, u8 *str); +bool32 StringHasManualBreaks(u8 *src); + +#endif // GUARD_LINE_BREAK_H diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 87b1cd5ca4..3396999487 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -31,6 +31,7 @@ #include "text.h" #include "util.h" #include "window.h" +#include "line_break.h" #include "constants/battle_anim.h" #include "constants/battle_move_effects.h" #include "constants/battle_partner.h" @@ -2044,6 +2045,7 @@ static void PlayerHandleChooseAction(u32 battler) ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, battler, gBattlerPartyIndexes[battler]); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo); + BreakStringAutomatic(gDisplayedStringBattle, WindowWidthPx(B_WIN_ACTION_PROMPT), 2, FONT_NORMAL); if (B_SHOW_PARTNER_TARGET && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && IsBattlerAlive(B_POSITION_PLAYER_RIGHT)) { diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index b85157f246..932ce47fd9 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -20,6 +20,7 @@ #include "text.h" #include "util.h" #include "window.h" +#include "line_break.h" #include "constants/battle_anim.h" #include "constants/songs.h" #include "constants/trainers.h" @@ -298,6 +299,7 @@ static void SafariHandleChooseAction(u32 battler) ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2); + BreakStringAutomatic(gDisplayedStringBattle, WindowWidthPx(B_WIN_ACTION_PROMPT), 2, FONT_NORMAL); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } diff --git a/src/battle_message.c b/src/battle_message.c index 049bda6d39..0dbb0c76a4 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -22,6 +22,7 @@ #include "text.h" #include "trainer_hill.h" #include "window.h" +#include "line_break.h" #include "constants/abilities.h" #include "constants/battle_dome.h" #include "constants/battle_string_ids.h" @@ -165,6 +166,11 @@ const u8 gText_drastically[] = _("drastically "); const u8 gText_severely[] = _("severely "); static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to normal!"); // Unused +// Remove these when done testing +static const u8 sTest_TempTestText1[] = _("This is a text for testing stuff."); +static const u8 sTest_TempTestText2[] = _("This is a text for testing stuff that should be two lines."); +static const u8 sTest_TempTestText3[] = _("This is a text for testing stuff that should be three lines so it has to have some extra text."); + const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { [STRINGID_TRAINER1LOSETEXT] = COMPOUND_STRING("{B_TRAINER1_LOSE_TEXT}"), @@ -1402,8 +1408,8 @@ const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p"); const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p"); const u8 gText_EllipsisQuestionMark[] = _("……?\p"); -const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_BUFF1} do?"); -const u8 gText_WhatWillPkmnDo2[] = _("What will\n{B_PLAYER_NAME} do?"); +const u8 gText_WhatWillPkmnDo[] = _("What will {B_BUFF1} do?"); +const u8 gText_WhatWillPkmnDo2[] = _("What will {B_PLAYER_NAME} do?"); const u8 gText_WhatWillWallyDo[] = _("What will\nWALLY do?"); const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…"); const u8 gText_BattleMenu[] = _("Battle{CLEAR_TO 56}Bag\nPokémon{CLEAR_TO 56}Run"); @@ -2421,8 +2427,7 @@ static void GetBattlerNick(u32 battler, u8 *dst) } \ } \ GetBattlerNick(battler, text); \ - toCpy = text; \ - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize); + toCpy = text; #define HANDLE_NICKNAME_STRING_LOWERCASE(battler) \ if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ @@ -2439,8 +2444,7 @@ static void GetBattlerNick(u32 battler, u8 *dst) } \ } \ GetBattlerNick(battler, text); \ - toCpy = text; \ - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize); + toCpy = text; static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, u8 multiplayerId, u8 battler) { @@ -2589,17 +2593,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) { u32 dstID = 0; // if they used dstID, why not use srcID as well? const u8 *toCpy = NULL; - u32 lastValidSkip = 0; - u32 toCpyWidth = 0; - u32 dstWidth = 0; - // This buffer may hold either the name of a trainer, Pokémon, or item. u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)]; u8 *textStart = &text[0]; u8 multiplayerId; u8 fontId = FONT_NORMAL; - s16 letterSpacing = 0; - u32 lineNum = 1; - u32 displayedLineNums = 1; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) multiplayerId = gRecordedBattleMultiplayerId; @@ -2617,7 +2614,6 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) while (*src != EOS) { toCpy = NULL; - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize); if (*src == PLACEHOLDER_BEGIN) { @@ -3122,18 +3118,6 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) if (toCpy != NULL) { - toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1, dstSize); - - if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) - { - dst[lastValidSkip] = displayedLineNums == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize); - if (displayedLineNums == 1) - displayedLineNums++; - else - displayedLineNums = 1; - lineNum++; - } while (*toCpy != EOS) { dst[dstID] = *toCpy; @@ -3153,31 +3137,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) } else { - toCpyWidth = GetGlyphWidth(*src, FALSE, fontId); dst[dstID] = *src; - if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) - { - dst[lastValidSkip] = displayedLineNums == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; - if (displayedLineNums == 1) - displayedLineNums++; - else - displayedLineNums = 1; - lineNum++; - dstWidth = 0; - } - switch (*src) - { - case CHAR_PROMPT_CLEAR: - case CHAR_PROMPT_SCROLL: - displayedLineNums = 1; - case CHAR_NEWLINE: - lineNum++; - dstWidth = 0; - //fallthrough - case CHAR_SPACE: - lastValidSkip = dstID; - break; - } dstID++; } src++; @@ -3186,6 +3146,8 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) dst[dstID] = *src; dstID++; + BreakStringAutomatic(dst, BATTLE_MSG_MAX_WIDTH, BATTLE_MSG_MAX_WIDTH, fontId); + return dstID; } diff --git a/src/line_break.c b/src/line_break.c new file mode 100644 index 0000000000..b8888f501f --- /dev/null +++ b/src/line_break.c @@ -0,0 +1,281 @@ +#include "global.h" +#include "line_break.h" +#include "text.h" +#include "malloc.h" + +void StripLineBreaks(u8 *src) +{ + u32 currIndex = 0; + while (src[currIndex] != EOS) + { + if (src[currIndex] == CHAR_PROMPT_SCROLL || src[currIndex] == CHAR_NEWLINE) + src[currIndex] = CHAR_SPACE; + currIndex++; + } +} + +void BreakStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId) +{ + u32 currIndex = 0; + u8 *currSrc = src; + while (src[currIndex] != EOS) + { + if (src[currIndex] == CHAR_PROMPT_CLEAR) + { + u8 replacedChar = src[currIndex + 1]; + src[currIndex + 1] = EOS; + BreakSubStringAutomatic(currSrc, maxWidth, screenLines, fontId); + src[currIndex + 1] = replacedChar; + currSrc = &src[currIndex + 1]; + } + currIndex++; + } + BreakSubStringAutomatic(currSrc, maxWidth, screenLines, fontId); +} + +void BreakSubStringAutomatic(u8 *src, u32 maxWidth, u32 screenLines, u8 fontId) +{ + // If the string already has line breaks, don't interfere with them + if (StringHasManualBreaks(src)) + return; + // Sanity check + if (src[0] == EOS) + return; + u32 numChars = 1; + u32 numWords = 1; + u32 currWordIndex = 0; + u32 currWordLength = 1; + bool32 isPrevCharSplitting = FALSE; + bool32 isCurrCharSplitting; + // Get numbers of chars in string and count words + while (src[numChars] != EOS) + { + isCurrCharSplitting = IsWordSplittingChar(src, numChars); + if (isCurrCharSplitting && !isPrevCharSplitting) + numWords++; + isPrevCharSplitting = isCurrCharSplitting; + numChars++; + } + // Allocate enough space for word data + struct StringWord *allWords = Alloc(numWords*sizeof(struct StringWord)); + + allWords[currWordIndex].startIndex = 0; + allWords[currWordIndex].width = 0; + isPrevCharSplitting = FALSE; + // Fill in word begin index and lengths + for (u32 i = 1; i < numChars; i++) + { + isCurrCharSplitting = IsWordSplittingChar(src, i); + if (isCurrCharSplitting && !isPrevCharSplitting) + { + allWords[currWordIndex].length = currWordLength; + currWordIndex++; + currWordLength = 0; + } + else if (!isCurrCharSplitting && isPrevCharSplitting) + { + allWords[currWordIndex].startIndex = i; + allWords[currWordIndex].width = 0; + currWordLength++; + } + else + { + currWordLength++; + } + isPrevCharSplitting = isCurrCharSplitting; + } + allWords[currWordIndex].length = currWordLength; + + // Fill in individual word widths + for (u32 i = 0; i < numWords; i++) + { + for (u32 j = 0; j < allWords[i].length; j++) + allWords[i].width += GetGlyphWidth(src[allWords[i].startIndex + j], FALSE, fontId); + } + + // Step 1: Does it all fit one one line? Then no break + // Step 2: Try to split across minimum number of lines + u32 spaceWidth = GetGlyphWidth(0, FALSE, fontId); + u32 totalWidth = allWords[0].width; + // Calculate total widths without any line breaks + for (u32 i = 1; i < numWords; i++) + totalWidth += allWords[i].width + spaceWidth; + + // If it doesn't fit on 1 line, do fancy line break calculation + // NOTE: Currently the line break calculation isn't fancy + if (totalWidth > maxWidth) + { + // Figure out how many lines are needed with naive method + u32 currLineWidth = 0; + u32 totalLines = 1; + bool32 shouldTryAgain; + for (currWordIndex = 0; currWordIndex < numWords; currWordIndex++) + { + if (currLineWidth + allWords[currWordIndex].length > maxWidth) + { + totalLines++; + currLineWidth = allWords[currWordIndex].width; + } + else + { + currLineWidth += allWords[currWordIndex].width + spaceWidth; + } + } + // LINE LAYOUT STARTS HERE + struct StringLine *stringLines; + do + { + shouldTryAgain = FALSE; + u16 targetLineWidth = totalWidth/totalLines; + stringLines = Alloc(totalLines*sizeof(struct StringLine)); + for (u32 lineIndex = 0; lineIndex < totalLines; lineIndex++) + { + stringLines[lineIndex].numWords = 0; + stringLines[lineIndex].spaceWidth = spaceWidth; + stringLines[lineIndex].extraSpaceWidth = 0; + } + currWordIndex = 0; + u16 currLineIndex = 0; + stringLines[currLineIndex].words = &allWords[currWordIndex]; + stringLines[currLineIndex].numWords = 1; + currLineWidth = allWords[currWordIndex].width; + currWordIndex++; + while (currWordIndex < numWords) + { + if (currLineWidth + spaceWidth + allWords[currWordIndex].width > maxWidth) + { + // go to next line + currLineIndex++; + if (currLineIndex == totalLines) + { + totalLines++; + Free(stringLines); + shouldTryAgain = TRUE; + break; + } + stringLines[currLineIndex].words = &allWords[currWordIndex]; + stringLines[currLineIndex].numWords = 1; + currLineWidth = allWords[currWordIndex].width; + currWordIndex++; + } + else if (currLineWidth > targetLineWidth) + { + // go to next line + currLineIndex++; + if (currLineIndex == totalLines) + { + totalLines++; + Free(stringLines); + shouldTryAgain = TRUE; + break; + } + stringLines[currLineIndex].words = &allWords[currWordIndex]; + stringLines[currLineIndex].numWords = 1; + currLineWidth = allWords[currWordIndex].width; + currWordIndex++; + } + else + { + // continue on current line + // add word and space width + currLineWidth += spaceWidth + allWords[currWordIndex].width; + stringLines[currLineIndex].numWords++; + currWordIndex++; + } + } + } while (shouldTryAgain); + //u32 currBadness = GetStringBadness(stringLines, totalLines, maxWidth); + BuildNewString(stringLines, totalLines, screenLines, src); + Free(stringLines); + } + + Free(allWords); +} + +// Only allow word splitting on allowed chars +bool32 IsWordSplittingChar(const u8 *src, u32 index) +{ + switch (src[index]) + { + case CHAR_SPACE: + return TRUE; + default: + return FALSE; + } +} + +// Badness calculation +// unfilled lines scale linerarly +// jagged lines scales by the square +// runts scale linearly +// numbers not final +// ISN'T ACTUALLY USED RIGHT NOW +u32 GetStringBadness(struct StringLine *stringLines, u32 numLines, u32 maxWidth) +{ + u32 badness = 0; + u32 *lineWidths = Alloc(numLines*4); + u32 widestWidth = 0; + for (u32 i = 0; i < numLines; i++) + { + lineWidths[i] = 0; + for (u32 j = 0; j < stringLines[i].numWords; j++) + lineWidths[i] += stringLines[i].words[j].width; + lineWidths[i] += (stringLines[i].numWords-1)*stringLines[i].spaceWidth; + if (lineWidths[i] > widestWidth) + widestWidth = lineWidths[i]; + if (stringLines[i].numWords == 1) + badness += BADNESS_RUNT; + } + for (u32 i = 0; i < numLines; i++) + { + u32 extraSpaceWidth = 0; + if (lineWidths[i] != widestWidth) + { + // Not the best way to do this, ideally a line should be allowed to get longer than current widest + // line. But then the widest line has to be recalculated. + while (lineWidths[i] + (extraSpaceWidth + 1) * (stringLines[i].numWords - 1) < widestWidth && extraSpaceWidth < MAX_SPACE_WIDTH) + extraSpaceWidth++; + lineWidths[i] += extraSpaceWidth*(stringLines[i].numWords-1); + } + badness += (maxWidth - lineWidths[i]) * BADNESS_UNFILLED; + u32 baseBadness = (widestWidth - lineWidths[i]) * BADNESS_JAGGED; + badness += baseBadness*baseBadness; + stringLines[i].extraSpaceWidth = extraSpaceWidth; + } + Free(lineWidths); + return badness; +} + +// Build the new string from the data stored in the StringLine structs +void BuildNewString(struct StringLine *stringLines, u32 numLines, u32 maxLines, u8 *str) +{ + u32 srcCharIndex = 0; + for (u32 lineIndex = 0; lineIndex < numLines; lineIndex++) + { + srcCharIndex += stringLines[lineIndex].words[0].length; + for (u32 wordIndex = 1; wordIndex < stringLines[lineIndex].numWords; wordIndex++) + // Add length of word and a space + srcCharIndex += stringLines[lineIndex].words[wordIndex].length + 1; + if (lineIndex + 1 < numLines) + { + // Add the appropriate line break depending on line number + if (lineIndex >= maxLines - 1 && numLines > maxLines) + str[srcCharIndex] = CHAR_PROMPT_SCROLL; + else + str[srcCharIndex] = CHAR_NEWLINE; + srcCharIndex++; + } + } +} + +bool32 StringHasManualBreaks(u8 *src) +{ + u32 charIndex = 0; + while (src[charIndex] != EOS) + { + if (src[charIndex] == CHAR_PROMPT_SCROLL || src[charIndex] == CHAR_NEWLINE) + return TRUE; + charIndex++; + } + return FALSE; +} From 51fbc80ac5a9c9003bff03399f156e9366638a5d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:32:46 +0100 Subject: [PATCH 437/544] Fixes Misty Terrain displaying wrong message (#5742) --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 7e0970bcab..f95b8f9901 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2784,7 +2784,7 @@ u8 DoBattlerEndTurnEffects(void) && !IsLeafGuardProtected(battler)) { CancelMultiTurnMoves(battler); - gEffectBattler = battler; + gEffectBattler = gBattlerTarget = battler; if (IsBattlerTerrainAffected(battler, STATUS_FIELD_ELECTRIC_TERRAIN)) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINPREVENTS_ELECTRIC; From 953f2292e2b28a031b02c5171be7b901515a0b89 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sat, 30 Nov 2024 17:39:27 -0500 Subject: [PATCH 438/544] Fixes Switch in flag not restoring mons properly with test (#5746) --- src/battle_ai_util.c | 1 + test/battle/ai/ai_switching.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 0277d7fd07..c033061dc9 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3507,6 +3507,7 @@ u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePoke SetBattlerAiData(battlerAtk, AI_DATA); u32 aiMonFaster = AI_IsFaster(battlerAtk, battlerDef, moveConsidered); FreeRestoreBattleMons(savedBattleMons); + SetBattlerAiData(battlerAtk, AI_DATA); return aiMonFaster; } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 5610689f49..7f2368261d 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -895,3 +895,17 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch into mon with good type matchup TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI correctly handles abilities when scoring moves") +{ + GIVEN { + ASSUME(B_PRANKSTER_DARK_TYPES >= GEN_7); + ASSUME(gSpeciesInfo[SPECIES_GRENINJA].types[1] == TYPE_DARK); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_GRENINJA) { Moves(MOVE_WATER_GUN); } + OPPONENT(SPECIES_WHIMSICOTT) { Ability(ABILITY_PRANKSTER); Moves(MOVE_LEECH_SEED, MOVE_STUN_SPORE, MOVE_ABSORB); } + OPPONENT(SPECIES_WHIMSICOTT) { Ability(ABILITY_INFILTRATOR); } + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN); EXPECT_MOVE(opponent, MOVE_ABSORB); } + } +} From 3343a16a7c00bb7eef9f7f261033ddd185d4c9cc Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:49:50 +0100 Subject: [PATCH 439/544] Fixes Dynamax dynamic move type (#5739) --- src/battle_dynamax.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 073e2c55bc..e0b782d12c 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -280,7 +280,10 @@ static u16 GetTypeBasedMaxMove(u32 battler, u32 type) // Returns the appropriate Max Move or G-Max Move for a battler to use. u16 GetMaxMove(u32 battler, u32 baseMove) { - u32 move = baseMove; + u32 moveType; + SetTypeBeforeUsingMove(baseMove, battler); + GET_MOVE_TYPE(baseMove, moveType); + if (baseMove == MOVE_NONE) // for move display { return MOVE_NONE; @@ -291,18 +294,12 @@ u16 GetMaxMove(u32 battler, u32 baseMove) } else if (gMovesInfo[baseMove].category == DAMAGE_CATEGORY_STATUS) { - move = MOVE_MAX_GUARD; - } - else if (gBattleStruct->dynamicMoveType) - { - move = GetTypeBasedMaxMove(battler, gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK); + return MOVE_MAX_GUARD; } else { - move = GetTypeBasedMaxMove(battler, gMovesInfo[baseMove].type); + return GetTypeBasedMaxMove(battler, moveType); } - - return move; } // First value is for Fighting, Poison and Multi-Attack. The second is for everything else. From b3b0973fbb88b5ab368925d764ba3cbee289ae54 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 1 Dec 2024 00:06:17 +0100 Subject: [PATCH 440/544] Fixes Population Bomb / Triple Kick missing message (#5747) --- asm/macros/battle_script.inc | 4 +--- include/config/battle.h | 2 +- src/battle_script_commands.c | 40 +++++++++++------------------------- 3 files changed, 14 insertions(+), 32 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 6dbcabe43e..27488c25d8 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -798,9 +798,7 @@ 2: .endm - .macro setmultihitcounter value:req - .byte 0x8d - .byte \value + .macro unused_0x8d .endm .macro initmultihitstring diff --git a/include/config/battle.h b/include/config/battle.h index fbc41be6ba..1b19d0d2c9 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -6,7 +6,7 @@ #define B_CRIT_MULTIPLIER GEN_LATEST // In Gen6+, critical hits multiply damage by 1.5 instead of 2. #define B_PARALYSIS_SPEED GEN_LATEST // In Gen7+, Speed is decreased by 50% instead of 75%. #define B_CONFUSION_SELF_DMG_CHANCE GEN_LATEST // In Gen7+, confusion has a 33.3% of self-damage, instead of 50%. -#define B_MULTI_HIT_CHANCE GEN_LATEST // In Gen5+, multi-hit moves have different %. See Cmd_setmultihitcounter for values. +#define B_MULTI_HIT_CHANCE GEN_LATEST // In Gen5+, multi-hit moves have different %. See SetRandomMultiHitCounter for values. #define B_WHITEOUT_MONEY GEN_LATEST // In Gen4+, the amount of money lost by losing a battle is determined by the amount of badges earned. Previously, it would cut the current money by half. (While this change was also in FRLG, for the sake of simplicity, setting this to GEN_3 will result in RSE behavior.) #define B_LIGHT_BALL_ATTACK_BOOST GEN_LATEST // In Gen4+, Light Ball doubles the power of physical moves in addition to special moves. #define B_SANDSTORM_SPDEF_BOOST GEN_LATEST // In Gen4+, Sandstorm weather multiplies the Sp. Defense of Rock-type Pokémon by x1.5. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index f8619880d0..0375cfeed0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -481,7 +481,7 @@ static void Cmd_statbuffchange(void); static void Cmd_normalisebuffs(void); static void Cmd_setbide(void); static void Cmd_twoturnmoveschargestringandanimation(void); -static void Cmd_setmultihitcounter(void); +static void Cmd_unused_0x8d(void); static void Cmd_initmultihitstring(void); static void Cmd_forcerandomswitch(void); static void Cmd_tryconversiontypechange(void); @@ -740,7 +740,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_normalisebuffs, //0x8A Cmd_setbide, //0x8B Cmd_twoturnmoveschargestringandanimation, //0x8C - Cmd_setmultihitcounter, //0x8D + Cmd_unused_0x8d, //0x8D Cmd_initmultihitstring, //0x8E Cmd_forcerandomswitch, //0x8F Cmd_tryconversiontypechange, //0x90 @@ -2538,6 +2538,15 @@ static void Cmd_resultmessage(void) if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK)) { + if (gMultiHitCounter && gMultiHitCounter < gMovesInfo[gCurrentMove].strikeCount) + { + gMultiHitCounter = 0; + gMoveResultFlags &= ~MOVE_RESULT_MISSED; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings; + return; + } + if (gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate - show the ability pop-up CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); stringId = gMissStringIds[gBattleCommunication[MISS_TYPE]]; @@ -12019,33 +12028,8 @@ static void Cmd_twoturnmoveschargestringandanimation(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setmultihitcounter(void) +static void Cmd_unused_0x8d(void) { - CMD_ARGS(u8 value); - - if (cmd->value) - { - gMultiHitCounter = cmd->value; - } - else - { - if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SKILL_LINK) - { - gMultiHitCounter = 5; - } - else - { - // WARNING: These seem to be unused, see SetRandomMultiHitCounter. - if (B_MULTI_HIT_CHANCE >= GEN_5) - // 35%: 2 hits, 35%: 3 hits, 15% 4 hits, 15% 5 hits. - gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 7, 7, 3, 3); - else - // 37.5%: 2 hits, 37.5%: 3 hits, 12.5% 4 hits, 12.5% 5 hits. - gMultiHitCounter = RandomWeighted(RNG_HITS, 0, 0, 3, 3, 1, 1); - } - } - - gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_initmultihitstring(void) From acdd447160f6e069a57b291ab551e0a65a181ee9 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 1 Dec 2024 01:19:08 +0100 Subject: [PATCH 441/544] Changes Max Phantasm move anim script call (#5737) --- data/battle_anim_scripts.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 55abebbbf0..48ccc089dc 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -34257,7 +34257,7 @@ Move_G_MAX_TERROR:: Move_MAX_PHANTASM:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PHANTOM_FORCE + goto Move_SHADOW_BALL end Move_G_MAX_GRAVITAS:: From 987264caea512645d06d999531e56e7e4b4c1ac2 Mon Sep 17 00:00:00 2001 From: SarnPoke <77281351+SarnPoke@users.noreply.github.com> Date: Sun, 1 Dec 2024 01:35:44 +0100 Subject: [PATCH 442/544] Deoxys Sprite/Animation Fixes (#5603) --- graphics/pokemon/deoxys/anim_front.png | Bin 1484 -> 1494 bytes graphics/pokemon/deoxys/attack/anim_front.png | Bin 1705 -> 1787 bytes graphics/pokemon/deoxys/attack/normal.pal | 4 ++-- .../pokemon/deoxys/defense/anim_front.png | Bin 1280 -> 1670 bytes graphics/pokemon/deoxys/defense/normal.pal | 6 +++--- graphics/pokemon/deoxys/defense/shiny.pal | 2 +- graphics/pokemon/deoxys/normal.pal | 6 +++--- graphics/pokemon/deoxys/shiny.pal | 2 +- graphics/pokemon/deoxys/speed/anim_front.png | Bin 1599 -> 1681 bytes graphics/pokemon/deoxys/speed/normal.pal | 4 ++-- src/data/pokemon_graphics/front_pic_anims.h | 3 +-- 11 files changed, 13 insertions(+), 14 deletions(-) diff --git a/graphics/pokemon/deoxys/anim_front.png b/graphics/pokemon/deoxys/anim_front.png index d2f3e993818961667895514e9aca7a3d3685cef7..fc782931d1587be45130f8000e6b5e331e1eeace 100644 GIT binary patch delta 1463 zcmV;o1xWhL3)TyeB!35VNliru=n5MS9v0DHT=W0{02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMfjkw%t1l;u#o?AN? zME|7+^2GoE1o}xtK~#90wU*C|<2Dq>Jzy~CCSvH~|H8b?(gq4K($Et2&=N#4OV2$l z6lT~OyXmE27@`__oV^unk~FEHyO&<}U+A@$rGLU4y7xUy`y@N@kJw3Js1AcY?~||I zd$OdjWivf_6f_i^=ayO&3hKwZuU0Oov<7@(5iNn4@n`G1?=!0E zDTY5-76M%Na3tT!IZYctssS6k%*BVFmA`4v@p`6htb4sz$a#0Jw)6dEUpJLpPCAho=z*4Bf-_ux1oTf-2F+g4# z^SxI~1U{N=CFE=72ou@^zrOtw0h*HS;+ncz;JH--4)cHcSpzsBSx>|@O3X~e-kK$k zmoWH7$5Smme-VplS4!Z?MHGo7(;3pd*Gj5TjHuMp=FWy5TWs+ES8OP^9Jv@9U zIxK`t($r#JxvtC~y!rd#gSX0oiJ6(D6~M(MQXYU2e^q&jbpW@7&wy4`tANcs+5>mr zsiKGFGY>qB_523ll>&X5AwcT@*#n=00RlIu0ecDiCHR3C&;aA3N*woFj)!{kz+34# zssfmsd3C6FzN;TiBkwKNsUxz{U)`GzV&pEK@B~v(KRm z@P<2}e=SD~TjZKt#(tXsW{(6nKbe+(E+YMOQ z>Yyvf-N;S>1_G&?RXDZPAtR84xs8g5&gj`3QiO`GMpB7f*m~j zP0W7B6MKJ2gm_iS^>ntY0{wxM?x?&(*7zI zf7TG+=qRnmod^{ca*3A>9x!}_pZ&ZBgj1abY5*buxSp1%3J8qpG;!z#;(;t_uOi_{ zljUx_)JHmneuYpvubGN-;2LrdQa5u1+u|raB8)x#I)i>4C`X3Z-lwnrf4gs1)=F*PS*ck(Ee~zVe05MjGCL;?vT#R!A z=0YQ^!$L6db7=9002ovPDHLkV1musmb(A| delta 1466 zcmV;r1x5PS3(O0UB!4haOjJeqps=`TX!x*@_;5&II5=p?;8-{?I8b0vkg%9wuoxH^ z`1tt1z|e3wh*(ficzAFfL~c<4000SaNLh0L01m_e01m_fl`9S#000F-NklKfU*6-kbN{T9&!!2iD$257}P1 zeGmNMKH#%M@b{^>^Z7&Y=@-2^s4K*=&mia_Y`8xb!vDyHpa(dL9|>_vDR@05BJYtn z`I}PO2Uw%0=YKzb&*-S=1FY4#k~HcSBk(%w*RL1(IoqROujjK-G~6SPSn9!^v$j78 zvH*Cmibx&;4FlSzB7#2-0T&(h$)SYN0^{wgE;#{Evp}g3!wHKHAOtVX2QQwL{(%C2 zm#|@Qk*UG+ze<{B%7vYsgis_oVK1I>dhjGxJ1Kz*9Dh+*a-=95CSp>yRS+ngF#?zj z%yL9b+A6|`*J zy?UhxUX3KSLKEjl=r}Q93cbch%J~}71&%Eo)%ThZ!p4bLZ>P;ZPuC7O* z0WrZXH-Gj~dI%8k;OqYe{teJ@LL!h`q32@Aea+Orc)ld8HSi{Y zbh^ZhXCsSjG)NO*DY^jq)eT_WAMT|ktW%&iVSmQLk_S250F?$anwDJwmC<^eycsKW zLIdk6j0c54_PFUIu8Z8QtDo)8Jj=-*w@Oi(Z>pcI|3RQ=0dv^`3>WZ)2@pJp7Vucs zm8Ak?6L2PYmon+m^~Tn~K{mMol6abmoFlOIi?@LbA;fq=M_ZuK(bYDl>qAt``#-JZAMOqa&b0A>6T(i% zSvF1#M+`6%9=~5^+n_Mv0%hMdfkd3HHhIMYcw7kT}{Ui}*XBROltCK2;A7xT>* z~fgd3fMe3JUs#wWb8-Gc& zGmW?(^Dk#+q%r?do@)q;(5Lspug#4nwj8^6q29kI3gCW>@ypvl zh#tPbx?1?FY>qLWF55N`7+qamhcKvsdDgZOQbxbI{uldeI*)aX+cpqzgX<6js+2fQ zb5iU$>EYE4t81~0cf=Lo>i(>O9rbzCt|`;+==x1dK}B0obW-7~y2=f{rLY!6MKJMEe_ZUy%KGQDL!sFu79Aj9g<|I8)+ U@k3AW7XSbN07*qoM6N<$f{6jhNdN!< diff --git a/graphics/pokemon/deoxys/attack/anim_front.png b/graphics/pokemon/deoxys/attack/anim_front.png index 0b43a9fe11e147604f6fb112102d703d15d38de5..566e80eafd01372ad38973a81193358cd53aade8 100644 GIT binary patch delta 186 zcmZ3<``sf3odCsWfl*^R3-)n2JsTth?3y^w370~qErTVAC~|>cZIUl zA_ZeTlfu>|4}nTJN(%hkfilKGHiK7#raX{hNq6*hWMJ6X&;2Kn705RT@CkAKv0y`j zg~k73uQQI05)u*_CmsY$*f1kugGE3>fknrU9}_(Vq&K|Eiw3G^O!9Vj`M;F?(@_Qn hHhE7M$B>FS8*60Q1pY}WvjgQBJYD@<);T3K0RUEdIz|8h delta 84 zcmey(yOMW;il9M&Pl)S}1sf79EPfPt?8wNN*sr3TH|d2h0|NtRfk$L90|Va?5N4dJ l%_q&kz$WkM;usRqy78PWn}EP`+YF#O22WQ%mvv4FO#sU48dLxP diff --git a/graphics/pokemon/deoxys/attack/normal.pal b/graphics/pokemon/deoxys/attack/normal.pal index 246d4784a2..52ddbb8fc6 100644 --- a/graphics/pokemon/deoxys/attack/normal.pal +++ b/graphics/pokemon/deoxys/attack/normal.pal @@ -3,8 +3,8 @@ JASC-PAL 16 248 160 176 96 56 56 -248 112 72 -184 104 104 +255 115 74 +204 65 65 24 24 24 104 200 224 80 144 176 diff --git a/graphics/pokemon/deoxys/defense/anim_front.png b/graphics/pokemon/deoxys/defense/anim_front.png index 2ee6e0c527eddef7c6f11f0f0e651cb6cbbf429d..ce3cdad39cf4eaeca8018faa22cef35fdac81e0e 100644 GIT binary patch delta 1640 zcmV-u2ABDO3Wg1kB!35VNliru=n5MSAShA9S|R`d02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMfjkwU^qC;K|%j>N< zME|7+^2GoE1*%CzK~#90t(VPeBS#R&)xJc`Nz)D1;#0Z?5~G`@U{~xpFJdqBD25#5 z1+{Hh@cJMPX3u*G0civ)r$g>}gs|ke5OUaeNmciZG&A}LhV;Q7)4!>zuCA{BPp8uy zI_`Cj4UITFMu?Y&e~2T1G9TX{E{+)ZaY`m$A2u+(H8*hz2TjQSZT8_az~GRF*MHuQ zKmP%6$b=ZWcUSHKK%ecOU!i$tvTM+B?Dhfc3!MHmwE!`knmt5hG}?F8f(C7@-3?=X zImB1??`u$anoZ>0j)Bt)RLBN!XeJV%wI!nPKnjqc&SZk9f17|rJ;5Ok9C_#ifeAKD z2zmt&rE?N7RS2&Rh5qjp--8O zlCTs?)_`|nf4=dtqE+#eA}QxX!OY)Q0QvM=6G1ure5X4}gAWlraK6KQS&|!o5_@_d z(h-2(7SJJ!dV1ffnP>rmLNFePJA#S$+m2f_00@A+Vt}nt2z?KbD_=37 zSI7(51pt&!LrgygHGnq4jKhus17yc9bshkU5!TbOf8Q}hwM1L3LNe$4TQ`6NDM+a) z>R6V*padugnd-0?1W3@mZdL=VS#*j3up{z-x_f~>?d)}6DM}A;B9%WJIGZ$pE0LxU zGOgGEj*Pc7=&U?o??j3XV3yT@wapg_6F%3@EelN^M#g*aKw1GQ_%`c-(!d6I6v)B& zT8ao5f0+xvE%bnZfxUSYL%&2{Y=ul_MqycfA^>#w5zE#T$@9tp0bKJ87~Hl;aZVxD zfEV^=InC+~R?ch{BOj|Ln=h&N)cUKSMc@`#tn-3^dOLVgrlIGL3j_V@2GBK`s*V@| zQC>)BHmzBs~ z_0o{OIIJH8nvaIh&mj|DfV@FGs2?N=knFum4+DKtD1UMB>|aPs0>pgyjRnSD{UDYk ze?W|T;`zP$VSS-qUG&XC{ScjAs(kgDj^KX%5G|+FRvvIEK?VKL+>=Oxc`-BNL}?Zn zGD(|6L>Gmb8Ef97_mG5ZVGHms<`mgfjUE#0PeM=Lo<^1zBa>Mh<7})e1(I&hGpP=0 zjFtqzxiJrPYf#6O+_-yNU_=hA8qJKkf7C&N#0gX;s7>R@vV%GK83W&9{BK$ZhV$Tn z0)5aVFmgAy8!_d9wRb>)OvfNuU_@@R0WiT~#11$RYaWVF5lcwQDAkZ|v*5t8iJ|mc zB|w!xfpLt%0gtOBXlof)3fggMO9wPQ<;jrJEaFWQq9S?KjcyIm5%FES7mO8aAq z&fW%)zz3_>GJsygoH=&}9>6xh`a;JGz6S!(^r42~Kodav!UGK-!h|LI)w4vQF9~b{ z+=7Q^3;*Ae_Jm|#{jUDTysadT=gG%+ZyJE*t9+Y1GGVg%ZQi%njr}1LUi3v)10;QZ z=|!jZAThQ9v_G2!d~dJy5r8DPg(lGYtP-H*HYm<+3m_8>V7JDKHn3;`Y;|!QfQE+I mEz;syK;+sU{uhN2WXr#DE;#sW?fH%X0000`@VP+*u~uoxH^ z`1tt1z|e3whyVZp0000DLkd>_000SaNLh0L01m_e01m_fl`9S#000DbNklqrBaQ`m9z9Rj$QfW;TDqv!~J5MBWGSFfY*{{#=woMN&2@`vc>r61t> zaAQ=EEafligrPhxNXQPK=~qOME;%fqt<*6|%0Tk+XCgrD9#4>o5+EKI;F z^Z=e?HB10w=qt~=2-xBlH|i~|#->EUO~4U1fBj9sDm4OZl?I#Nex=n~$KWkFuNsw%Df@l?lL$MO+FqU~7Ov`+syQf&hw83LVK)oB*WpRuv>+ zX)TL|K?DIza2H;}5;rChx=P@o3!Dlqa(663YeYC9LP?F_`9!4#1P^JMN?qw~h!q$;J}XdW-U78r=2A_!ol&tcRo4d56^5kn7(7Pw{x zK=_KjR)Aj5o(Nm4;xfc)S^`L)Zp09f1XMq10IFR#0CGw4E5K_2w_gSmq?*;g*hoi| zfOHIqSpf3%{tkM8rS}i-1G^7N^8>>xy%^Mp4u7zbfanSM@eKj}M%2Kr1=b&u8t6pm zKFNL70N#4L;~Ee{;N&%cy_P%O%3dSb5I~t}ARPmK2dtn0T9ph4IQq>yU5Gq3o+IR3XN|A9rZz4&;Zu_!h}b;m!twMF5D zAbPriUoHrAxMUAY($Gl}JWR9H6Y4Ikp&{fQMLK;~~oEVdZp?gW-<$ z1SODc9noD^!nr!?{S>wkTvCFZrpY*c)qlhg061S$f>>@7c)L12$`b^=IkZM9loH4) z1)bG&1PGs@P9P~oRiOgbSII(p>~bBKGAZ@0blic1cnnY+qAD)a3|-51#i|cH+)=zv zARiJym#)sF-v=jY<2$vD4jI59A1t}EZU3)GW|SNbQFJrt^;tIm*Pq*nMmz+ZeSf7- z)f^F%P32Hbojlc~lIe{#9!gafMO9hUG;TSqMNvvUPQx_%7R5B2zC|$ttwllLMxe7O zM$1bHu(K#;pnS3@W)TEHV^NHNgRCn}9g$9%a4z_s1!)*g*&E Wqydg=Q!o7h0000`sf3odCsB~~@vl&cI34B{oO5hcO-X(i=}MX3z#J}v=%?h0k8 zMGD4xCWWm_9s-qcloa^617(bXYzD6eO?e>2lJ4m1$iT3%pZiZD>qJFy&i}<;5)u+; z933Y*N=QrWyr>9N#F*sm?(%;r`=_G}46Iu{T^vIy=4`Cl%qqZOck>0vFi%%Mmvv4F FO#lqnF2Mi* delta 116 zcmbQpyPs!*N`ygxPl)S}1sf~^5&|Y{$T;yJ!NTH4fro^I#DR>A0|ze5NZ9b>$BzPw zj);JOii!dTFnDcYcooRtEbxddW?X?_wfUqO7+AM@x;TbJv~E1NnN{Fb@P>~d N4W6!kF6*2UngDyWDt`a~ diff --git a/graphics/pokemon/deoxys/speed/normal.pal b/graphics/pokemon/deoxys/speed/normal.pal index dad052e1da..ea1073a0ee 100644 --- a/graphics/pokemon/deoxys/speed/normal.pal +++ b/graphics/pokemon/deoxys/speed/normal.pal @@ -6,9 +6,9 @@ JASC-PAL 80 144 176 104 200 224 96 56 56 -248 112 72 +255 115 74 24 24 24 -192 104 104 +204 65 65 192 192 208 152 96 176 248 248 248 diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index d802521afe..5b49ed6d20 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -5205,8 +5205,7 @@ static const union AnimCmd sAnim_DeoxysNormal_1[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), - ANIMCMD_FRAME(0, 26), - ANIMCMD_FRAME(1, 16), + ANIMCMD_FRAME(1, 26), ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; From 0ca588943b47606b6abd91c757b0b27e9001f518 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 1 Dec 2024 13:45:35 +0100 Subject: [PATCH 443/544] Fixes choiced moves not locked in after ability block (#5738) --- include/battle.h | 2 +- include/battle_util.h | 1 + src/battle_script_commands.c | 40 -------------------------- src/battle_util.c | 56 ++++++++++++++++++++++++++++++++---- test/battle/ai/ai.c | 25 ++++++++++++++++ 5 files changed, 77 insertions(+), 47 deletions(-) diff --git a/include/battle.h b/include/battle.h index 20afe876ca..d32481ee4d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -802,8 +802,8 @@ struct BattleStruct u8 categoryOverride; // for Z-Moves and Max Moves u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side u8 fickleBeamBoosted:1; - u8 obedienceResult:3; u8 redCardActivates:1; + u8 padding:6; u8 usedMicleBerry; }; diff --git a/include/battle_util.h b/include/battle_util.h index 71d81ce3bb..0d73a0a9dd 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -82,6 +82,7 @@ enum CANCELLER_SKY_DROP, CANCELLER_ASLEEP, CANCELLER_FROZEN, + CANCELLER_OBEDIENCE, CANCELLER_TRUANT, CANCELLER_RECHARGE, CANCELLER_FLINCH, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0375cfeed0..ede9c07332 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1282,46 +1282,6 @@ static void Cmd_attackcanceler(void) gHitMarker &= ~HITMARKER_ALLOW_NO_PP; - if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) - { - switch (gBattleStruct->obedienceResult) - { - case OBEYS: - break; - case DISOBEYS_LOAFS: - // Randomly select, then print a disobedient string - // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE - gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - gMoveResultFlags |= MOVE_RESULT_MISSED; - return; - case DISOBEYS_HITS_SELF: - gBattlerTarget = gBattlerAttacker; - gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); - gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - gHitMarker |= HITMARKER_OBEYS; - return; - case DISOBEYS_FALL_ASLEEP: - gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep; - gMoveResultFlags |= MOVE_RESULT_MISSED; - return; - case DISOBEYS_WHILE_ASLEEP: - gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep; - gMoveResultFlags |= MOVE_RESULT_MISSED; - return; - case DISOBEYS_RANDOM_MOVE: - gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - SetAtkCancellerForCalledMove(); - gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; - gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gHitMarker |= HITMARKER_DISOBEDIENT_MOVE; - gHitMarker |= HITMARKER_OBEYS; - return; - } - } - - gHitMarker |= HITMARKER_OBEYS; // Check if no available target present on the field or if Sky Battles ban the move if ((NoTargetPresent(gBattlerAttacker, gCurrentMove) && (!gBattleMoveEffects[gMovesInfo[gCurrentMove].effect].twoTurnEffect || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) diff --git a/src/battle_util.c b/src/battle_util.c index f95b8f9901..6f0b2af880 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -145,8 +145,6 @@ void HandleAction_UseMove(void) gBattleScripting.savedMoveEffect = 0; gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker); - gBattleStruct->obedienceResult = GetAttackerObedienceForAction(); - // choose move if (gProtectStructs[gBattlerAttacker].noValidMoves) { @@ -3222,7 +3220,8 @@ void SetAtkCancellerForCalledMove(void) u8 AtkCanceller_UnableToUseMove(u32 moveType) { - u8 effect = 0; + u32 effect = 0; + u32 obedienceResult; do { switch (gBattleStruct->atkCancellerTracker) @@ -3306,6 +3305,53 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) } gBattleStruct->atkCancellerTracker++; break; + case CANCELLER_OBEDIENCE: + obedienceResult = GetAttackerObedienceForAction(); + if (obedienceResult != OBEYS + && !(gHitMarker & HITMARKER_NO_PPDEDUCT) // Don't check obedience after first hit of multi target move or multi hit moves + && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) + { + switch (obedienceResult) + { + case DISOBEYS_LOAFS: + // Randomly select, then print a disobedient string + // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE + gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); + gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; + gMoveResultFlags |= MOVE_RESULT_MISSED; + break; + case DISOBEYS_HITS_SELF: + gBattlerTarget = gBattlerAttacker; + gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); + gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + gHitMarker |= HITMARKER_OBEYS; + break; + case DISOBEYS_FALL_ASLEEP: + gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep; + gMoveResultFlags |= MOVE_RESULT_MISSED; + break; + case DISOBEYS_WHILE_ASLEEP: + gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep; + gMoveResultFlags |= MOVE_RESULT_MISSED; + break; + case DISOBEYS_RANDOM_MOVE: + gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + SetAtkCancellerForCalledMove(); + gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; + gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); + gHitMarker |= HITMARKER_DISOBEDIENT_MOVE; + gHitMarker |= HITMARKER_OBEYS; + break; + } + effect = 1; + } + else + { + gHitMarker |= HITMARKER_OBEYS; + } + gBattleStruct->atkCancellerTracker++; + break; case CANCELLER_TRUANT: // truant if (GetBattlerAbility(gBattlerAttacker) == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter) { @@ -3554,7 +3600,6 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE - || gBattleStruct->obedienceResult != OBEYS || HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE)) gBattlescriptCurrInstr = BattleScript_MoveUsedPowder; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; @@ -3575,8 +3620,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_Z_MOVES: - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE - && gBattleStruct->obedienceResult == OBEYS) + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) { // For Z-Mirror Move, so it doesn't play the animation twice. bool32 alreadyUsed = HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE); diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index a19481c7ed..b52e64262d 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -805,3 +805,28 @@ AI_SINGLE_BATTLE_TEST("AI uses a guaranteed KO move instead of the move with the NOT MESSAGE("Wobbuffet fainted!"); } } + +AI_SINGLE_BATTLE_TEST("AI stays choice locked into moves in spite of the player's ability disabling them") +{ + u32 playerMon, ability, aiMove; + PARAMETRIZE { ability = ABILITY_DAZZLING; playerMon = SPECIES_BRUXISH; aiMove = MOVE_QUICK_ATTACK; } + PARAMETRIZE { ability = ABILITY_QUEENLY_MAJESTY; playerMon = SPECIES_TSAREENA; aiMove = MOVE_QUICK_ATTACK; } + PARAMETRIZE { ability = ABILITY_ARMOR_TAIL; playerMon = SPECIES_FARIGIRAF; aiMove = MOVE_QUICK_ATTACK; } + PARAMETRIZE { ability = ABILITY_SOUNDPROOF; playerMon = SPECIES_EXPLOUD; aiMove = MOVE_BOOMBURST; } + PARAMETRIZE { ability = ABILITY_BULLETPROOF; playerMon = SPECIES_CHESNAUGHT; aiMove = MOVE_BULLET_SEED; } + + GIVEN { + ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND); + ASSUME(gMovesInfo[MOVE_QUICK_ATTACK].priority == 1); + ASSUME(gMovesInfo[MOVE_BOOMBURST].soundMove == TRUE); + ASSUME(gMovesInfo[MOVE_BULLET_SEED].ballisticMove == TRUE); + ASSUME(gMovesInfo[MOVE_TAIL_WHIP].category == DAMAGE_CATEGORY_STATUS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(playerMon) { Ability(ability); } + OPPONENT(SPECIES_SMEARGLE) { Item(ITEM_CHOICE_BAND); Moves(aiMove, MOVE_TACKLE); } + } WHEN { + TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, aiMove); } + TURN { EXPECT_MOVE(opponent, aiMove); } + } +} From 6fe935f1b8b8d3eb515c794fd2212b1b97cdbde1 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 1 Dec 2024 14:04:13 -0300 Subject: [PATCH 444/544] Version 1.9.4 --- .../ISSUE_TEMPLATE/01_battle_engine_bugs.yaml | 3 +- .../ISSUE_TEMPLATE/02_battle_ai_issues.yaml | 3 +- .github/ISSUE_TEMPLATE/04_other_errors.yaml | 3 +- README.md | 4 +- docs/SUMMARY.md | 1 + docs/changelogs/1.9.x/1.9.4.md | 200 ++++++++++++++++++ include/constants/expansion.h | 4 +- 7 files changed, 211 insertions(+), 7 deletions(-) create mode 100644 docs/changelogs/1.9.x/1.9.4.md diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 8240a56801..6a654402ac 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.3 (Latest release) + - 1.9.4 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.3 - 1.9.2 - 1.9.1 - 1.9.0 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 5688f8a7fb..ff9823aa01 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.3 (Latest release) + - 1.9.4 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.3 - 1.9.2 - 1.9.1 - 1.9.0 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index add0633d95..ab400f7b9d 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.3 (Latest release) + - 1.9.4 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.3 - 1.9.2 - 1.9.1 - 1.9.0 diff --git a/README.md b/README.md index 5330e40981..823a02479c 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ pokeemerald-expansion is a decomp hack base project based off pret's [pokeemeral If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` -Based off RHH's pokeemerald-expansion 1.9.3 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.9.4 https://github.com/rh-hideout/pokeemerald-expansion/ ``` Please follow the instructions in `INSTALL.md` to get pokeemerald-expansion set up on your machine. @@ -177,7 +177,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple - Check your current version. - You can check in the debug menu's `Utilities -> Expansion Version` option. - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](CHANGELOG.md) to determine your version based on the features available on your repository. -- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.9.3, use `git pull RHH expansion/1.9.3`). +- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.9.4, use `git pull RHH expansion/1.9.4`). - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on) - Alternatively, you can update to unreleased versions of the expansion. - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`. diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index ac4698fdc3..ab016136a1 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -19,6 +19,7 @@ - [How to use the Testing System](tutorials/how_to_testing_system.md) - [Changelog](./CHANGELOG.md) - [1.9.x]() + - [Version 1.9.4](changelogs/1.9.x/1.9.4.md) - [Version 1.9.3](changelogs/1.9.x/1.9.3.md) - [Version 1.9.2](changelogs/1.9.x/1.9.2.md) - [Version 1.9.1](changelogs/1.9.x/1.9.1.md) diff --git a/docs/changelogs/1.9.x/1.9.4.md b/docs/changelogs/1.9.x/1.9.4.md new file mode 100644 index 0000000000..36dc2afc73 --- /dev/null +++ b/docs/changelogs/1.9.x/1.9.4.md @@ -0,0 +1,200 @@ +# Version 1.9.4 + +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.9.4`. +``` + +## 🌋 IMPORTANT 🌋 +- This update integrates pret's latest Makefile changes, which rearranges the entire file in order to speed up compilation times overall. If you did any changes to it (such as installing Poryscript) and are having issues resolving the conflicts, keep expansion's version of Makefile and reapply your changes afterwards. + +## 🧬 General 🧬 +### Fixed +* Fixed alignment errors in `EWRAM_INIT` and friends when using u8, u16, etc. by @aronson in [#5512](https://github.com/rh-hideout/pokeemerald-expansion/pull/5512) +* Update test LD script to respect 4 byte data section alignment by @aronson in [#5517](https://github.com/rh-hideout/pokeemerald-expansion/pull/5517) +* Fixed Missing `string_util.h` include in `mini_printf.c` by @mrgriffin in [#5572](https://github.com/rh-hideout/pokeemerald-expansion/pull/5572) +* Fixed unnecessary dependency scanning for test build and test rom names by @ravepossum in [#5594](https://github.com/rh-hideout/pokeemerald-expansion/pull/5594) +* Fixed makefile: dependencies for `map_group_count.h` by @SBird1337 in [#5648](https://github.com/rh-hideout/pokeemerald-expansion/pull/5648) + - Fixes an issue that caused the build to fail on updates to `src/debug.c` due to mismatched dependency. + +## 🗺️ Overworld 🗺️ +### Changed +* Followers sprite fixes by @Cafeei in [#5669](https://github.com/rh-hideout/pokeemerald-expansion/pull/5669) +* Follower fixes, Melmetal, Patrat, Woobat by @hedara90 in [#5685](https://github.com/rh-hideout/pokeemerald-expansion/pull/5685) +* Fixed Farfetch'd overworld sprite by @hedara90 in [#5711](https://github.com/rh-hideout/pokeemerald-expansion/pull/5711) + +### Fixed +* Fixed Berry mutations always generating a Persim Berry by @Bassoonian in [#5504](https://github.com/rh-hideout/pokeemerald-expansion/pull/5504) + +## 🐉 Pokémon 🐉 +### Changed +* Changing `EVO_NONE` from `0xFFFE` to `0` by @GhoulMage in [#5547](https://github.com/rh-hideout/pokeemerald-expansion/pull/5547) + - There could be a case for out of bounds errors if arrays or iterations are happening where you're using + 1 or - 1, as `EVO_FRIENDSHIP` used to be the first index although it started with 1. +* PokeCommunity sprites batch (October) by @kittenchilly in [#5655](https://github.com/rh-hideout/pokeemerald-expansion/pull/5655) +* Followers sprite fixes by @Cafeei in [#5669](https://github.com/rh-hideout/pokeemerald-expansion/pull/5669) +* Follower fixes, Melmetal, Patrat, Woobat by @hedara90 in [#5685](https://github.com/rh-hideout/pokeemerald-expansion/pull/5685) +* Fixed Farfetch'd overworld sprite by @hedara90 in [#5711](https://github.com/rh-hideout/pokeemerald-expansion/pull/5711) + +### Fixed +* Fixed `P_FRIENDSHIP_EVO_THRESHOLD` not checking for Gen 8 by @kittenchilly in [#5503](https://github.com/rh-hideout/pokeemerald-expansion/pull/5503) +* Fixed HGSS dex search printing wrong mon after selecting evos by @ravepossum in [#5552](https://github.com/rh-hideout/pokeemerald-expansion/pull/5552) +* Fixed 64px uncompressed followers by @hedara90 in [#5601](https://github.com/rh-hideout/pokeemerald-expansion/pull/5601) +* Deoxys Sprite/Animation Fixes by @SarnPoke in [#5603](https://github.com/rh-hideout/pokeemerald-expansion/pull/5603) +* Fixes Aegislash not reverting back by @AlexOn1ine in [#5734](https://github.com/rh-hideout/pokeemerald-expansion/pull/5734) + +## ⚔️ Battle General ⚔️ +### Changed +* Fixed damage calc modifiers by @AlexOn1ine in [#5604](https://github.com/rh-hideout/pokeemerald-expansion/pull/5604) + +### Fixed +* Fixed Shiny Pokemon not being shiny after transforming with a gimmick by @hedara90 in [#5573](https://github.com/rh-hideout/pokeemerald-expansion/pull/5573) +* Handle showdowns apostrophe the same way as ASCII apostrophe by @cawtds in [#5712](https://github.com/rh-hideout/pokeemerald-expansion/pull/5712) +* Fixes Misty Terrain displaying wrong message by @AlexOn1ine in [#5742](https://github.com/rh-hideout/pokeemerald-expansion/pull/5742) +* Fixes Dynamax dynamic move type by @AlexOn1ine in [#5739](https://github.com/rh-hideout/pokeemerald-expansion/pull/5739) + +## 🤹 Moves 🤹 +### Changed +* Fixed damage calc modifiers by @AlexOn1ine in [#5604](https://github.com/rh-hideout/pokeemerald-expansion/pull/5604) +* Updated ability popups for Skill Swap, Mummy/Lingering Aroma, Worry Seed, Simple Beam, fix Doodle/Role Play bugs by @PhallenTree in [#5493](https://github.com/rh-hideout/pokeemerald-expansion/pull/5493) + +### Fixed +* Fixed Follow Me failing in Single Battles for Gen 6/7 config by @AsparagusEduardo in [#5542](https://github.com/rh-hideout/pokeemerald-expansion/pull/5542) +* Fixed `AnimTask_HorizontalShake` uses for shaking screen in battle anims by @ghoulslash in [#5562](https://github.com/rh-hideout/pokeemerald-expansion/pull/5562) +* Fixed weather genie move anims and Springtide Storm targets by @ravepossum in [#5553](https://github.com/rh-hideout/pokeemerald-expansion/pull/5553) +* Fixes Magic Guard not preventing Salt Cure by @AlexOn1ine in [#5583](https://github.com/rh-hideout/pokeemerald-expansion/pull/5583) +* Fixes Dragon Tail using the effect twice during a Parental Bond attack by @AlexOn1ine in [#5630](https://github.com/rh-hideout/pokeemerald-expansion/pull/5630) +* Fixes Magic Coat message by @AlexOn1ine in [#5645](https://github.com/rh-hideout/pokeemerald-expansion/pull/5645) +* Fixes Take heart by @AlexOn1ine in [#5658](https://github.com/rh-hideout/pokeemerald-expansion/pull/5658) +* Fixed Floral Healing anim by @AlexOn1ine in [#5733](https://github.com/rh-hideout/pokeemerald-expansion/pull/5733) +* Fixes Population Bomb / Triple Kick missing message by @AlexOn1ine in [#5747](https://github.com/rh-hideout/pokeemerald-expansion/pull/5747) +* Changes Max Phantasm move anim script call by @AlexOn1ine in [#5737](https://github.com/rh-hideout/pokeemerald-expansion/pull/5737) +* Fixes Partner targeting and Acupressure/Ally Switch interaction by @AlexOn1ine in [#5446](https://github.com/rh-hideout/pokeemerald-expansion/pull/5446) +* Revival Blessing fixes + Using Lunar Blessing's animation by @ghoulslash in [#5490](https://github.com/rh-hideout/pokeemerald-expansion/pull/5490) +* Fixed curse + Protean interaction by @hedara90 in [#5663](https://github.com/rh-hideout/pokeemerald-expansion/pull/5663) +* Added Minimize interaction to Supercell Slam by @hedara90 in [#5713](https://github.com/rh-hideout/pokeemerald-expansion/pull/5713) + +## 🎭 Abilities 🎭 +### Changed +* Fixed damage calc modifiers by @AlexOn1ine in [#5604](https://github.com/rh-hideout/pokeemerald-expansion/pull/5604) + +### Fixed +* Adds tests and Costar fix from PR #5526 by @AlexOn1ine in [#5529](https://github.com/rh-hideout/pokeemerald-expansion/pull/5529) +* Fixes Red Card / Eject Pack interaction with Emergency Exit by @AlexOn1ine in [#5657](https://github.com/rh-hideout/pokeemerald-expansion/pull/5657) +* Fixed curse + Protean interaction by @hedara90 in [#5663](https://github.com/rh-hideout/pokeemerald-expansion/pull/5663) +* Mimicry updates typing with `RemoveAllTerrains()` by @AERDU in [#5666](https://github.com/rh-hideout/pokeemerald-expansion/pull/5666) +* Updated ability popups for Skill Swap, Mummy/Lingering Aroma, Worry Seed, Simple Beam, fix Doodle/Role Play bugs by @PhallenTree in [#5493](https://github.com/rh-hideout/pokeemerald-expansion/pull/5493) +* Fixed curse + Protean interaction by @hedara90 in [#5663](https://github.com/rh-hideout/pokeemerald-expansion/pull/5663) +* Fixes Ice Face regression by @AlexOn1ine in [#5678](https://github.com/rh-hideout/pokeemerald-expansion/pull/5678) +* Fixes Neutralizing Gas crashes + adds missing interaction, Regenerator small fix by @PhallenTree in [#5694](https://github.com/rh-hideout/pokeemerald-expansion/pull/5694) + +## 🧶 Items 🧶 +### Changed +* Removes duplicate Booster Energy code by @AlexOn1ine in [#5656](https://github.com/rh-hideout/pokeemerald-expansion/pull/5656) + +### Fixed +* Fixes Red Card / Eject Pack interaction with Emergency Exit by @AlexOn1ine in [#5657](https://github.com/rh-hideout/pokeemerald-expansion/pull/5657) +* Fixes Red Card / Eject Pack interaction by @AlexOn1ine in [#5724](https://github.com/rh-hideout/pokeemerald-expansion/pull/5724) +* Fixes gems triggering on confusion damage by @AlexOn1ine in [#5723](https://github.com/rh-hideout/pokeemerald-expansion/pull/5723) +* Fixes Kee Maranga and Enigma Berry by @AlexOn1ine in [#5727](https://github.com/rh-hideout/pokeemerald-expansion/pull/5727) +* Fixes Blunder Policy by @AlexOn1ine in [#5722](https://github.com/rh-hideout/pokeemerald-expansion/pull/5722) + +## 🤖 Battle AI 🤖 +### Fixed +* Fixed certain move data being cleared on turn end by @Pawkkie and @AlexOn1ine in [#5488](https://github.com/rh-hideout/pokeemerald-expansion/pull/5488) +* Global is used instead of passed var by @AlexOn1ine in [#5546](https://github.com/rh-hideout/pokeemerald-expansion/pull/5546) +* Fixes `dynamicMoveType` global not being reset during AI calcs by @AlexOn1ine in [#5628](https://github.com/rh-hideout/pokeemerald-expansion/pull/5628) + +## 🧹 Other Cleanup 🧹 +* Remove one redundant call of `SetAiLogicDataForTurn` in `DoBattleIntro` by @AlexOn1ine in [#5491](https://github.com/rh-hideout/pokeemerald-expansion/pull/5491) +* Cleanup extraneous function in `battle_anim.h` by @hedara90 in [#5506](https://github.com/rh-hideout/pokeemerald-expansion/pull/5506) +* Add newline to move relearner string by @Bassoonian in [#5523](https://github.com/rh-hideout/pokeemerald-expansion/pull/5523) +* Fixed 10,000,000 Volt Thunderbolt name by @AsparagusEduardo in [#5533](https://github.com/rh-hideout/pokeemerald-expansion/pull/5533) +* Added constant to expansion inclusive copyright magic number by @pkmnsnfrn in [#5413](https://github.com/rh-hideout/pokeemerald-expansion/pull/5413) +* Centralise AI Tests trainer name by @Bassoonian in [#5532](https://github.com/rh-hideout/pokeemerald-expansion/pull/5532) +* Remove now outdated information from readme by @Bassoonian in [#5548](https://github.com/rh-hideout/pokeemerald-expansion/pull/5548) +* Changing `EVO_NONE` from `0xFFFE` to `0` by @GhoulMage in [#5547](https://github.com/rh-hideout/pokeemerald-expansion/pull/5547) + - There could be a case for out of bounds errors if arrays or iterations are happening where you're using + 1 or - 1, as `EVO_FRIENDSHIP` used to be the first index although it started with 1. +* Shed Skin chance fix by @Pawkkie in [#5558](https://github.com/rh-hideout/pokeemerald-expansion/pull/5558) +* Restore test file dependencies so they're rebuilt properly by @ravepossum in [#5617](https://github.com/rh-hideout/pokeemerald-expansion/pull/5617) +* Improve `SEND_OUT` error message; require Speed for all battlers by @mrgriffin in [#5631](https://github.com/rh-hideout/pokeemerald-expansion/pull/5631) +* Removes duplicate Booster Energy code by @AlexOn1ine in [#5656](https://github.com/rh-hideout/pokeemerald-expansion/pull/5656) +* Wrong assumtion in dauntless_shield.c by @AlexOn1ine in [#5692](https://github.com/rh-hideout/pokeemerald-expansion/pull/5692) + +## 🧪 Test Runner 🧪 +### Added +* Add curious medicine test by @ghoulslash in [#5540](https://github.com/rh-hideout/pokeemerald-expansion/pull/5540) +* Tests: detect task leaks by @mrgriffin in [#5528](https://github.com/rh-hideout/pokeemerald-expansion/pull/5528) + +### Changed +* Add text width tests for move, ability, item, and pokedex descriptions by @kittenchilly in [#5505](https://github.com/rh-hideout/pokeemerald-expansion/pull/5505) +* Centralise AI Tests trainer name by @Bassoonian in [#5532](https://github.com/rh-hideout/pokeemerald-expansion/pull/5532) +* Add basic Steam Engine, Guard Dog Tests by @ghoulslash in [#5569](https://github.com/rh-hideout/pokeemerald-expansion/pull/5569) +* Fixed damage test by @GhoulMage and @mrgriffin for teaching me pokeemerald-expansion tests in [#5574](https://github.com/rh-hideout/pokeemerald-expansion/pull/5574) +* Fallback `memmem` implementation by @mrgriffin in [#5561](https://github.com/rh-hideout/pokeemerald-expansion/pull/5561) +* Hydra: Support `%p` in test summaries by @mrgriffin in [#5626](https://github.com/rh-hideout/pokeemerald-expansion/pull/5626) +* Improve `SEND_OUT` error message; require Speed for all battlers by @mrgriffin in [#5631](https://github.com/rh-hideout/pokeemerald-expansion/pull/5631) +* Check that `PASSES_RANDOMLY` affected a `Random` call by @mrgriffin in [#5635](https://github.com/rh-hideout/pokeemerald-expansion/pull/5635) +* Wrong assumtion in dauntless_shield.c by @AlexOn1ine in [#5692](https://github.com/rh-hideout/pokeemerald-expansion/pull/5692) + +### Fixed +* Update test LD script to respect 4 byte data section alignment by @aronson in [#5517](https://github.com/rh-hideout/pokeemerald-expansion/pull/5517) +* Adds tests and Costar fix from PR #5526 by @AlexOn1ine in [#5529](https://github.com/rh-hideout/pokeemerald-expansion/pull/5529) +* Fixed broken Starting Terrain test by @hedara90 in [#5582](https://github.com/rh-hideout/pokeemerald-expansion/pull/5582) + +## 📚 Documentation 📚 +* Add changelog header in PR template to aid automation by @AsparagusEduardo in [#5539](https://github.com/rh-hideout/pokeemerald-expansion/pull/5539) +* Added compressed OW mon VRAM notice in config file by @AsparagusEduardo in [#5599](https://github.com/rh-hideout/pokeemerald-expansion/pull/5599) +* Update `README.md` to link to `INSTALL.md` by @Pawkkie in [#5720](https://github.com/rh-hideout/pokeemerald-expansion/pull/5720) +* Fixes minor move desc errors by @AlexOn1ine in [#5728](https://github.com/rh-hideout/pokeemerald-expansion/pull/5728) + +## 📦 Branch Synchronisation 📦 +### pret +* 15th of October in [#5527](https://github.com/rh-hideout/pokeemerald-expansion/pull/5527) + * Slight storage system documentation by @luckytyphlosion in [pret#2024](https://github.com/pret/pokeemerald/pull/2024) + * Clean up defines lacking spaces by @Bassoonian in [pret#2025](https://github.com/pret/pokeemerald/pull/2025) + * UB fix in battle_transition.c by @cawtds in [pret#2007](https://github.com/pret/pokeemerald/pull/2007) + * preproc: support arbitrary expressions in enums by @mrgriffin in [pret#2026](https://github.com/pret/pokeemerald/pull/2026) + * [Build System Rewrite] Refactored `Makefile` by @Icedude907 in [pret#1950](https://github.com/pret/pokeemerald/pull/1950) + * Fixed incorrect point macros in contest_ai_script.inc by @NTx86 in [pret#2028](https://github.com/pret/pokeemerald/pull/2028) + * [Build System Rewrite] Massive build speed improvement via scaninc changes by @Icedude907 in [pret#1954](https://github.com/pret/pokeemerald/pull/1954) + * [Build System Rewrite] Improved audio rules by @Icedude907 in [pret#1957](https://github.com/pret/pokeemerald/pull/1957) + * Update INSTALL.md to state that Windows 8 is no longer supported by Microsoft by @luciofstars in [pret#2029](https://github.com/pret/pokeemerald/pull/2029) + * Update pull_request_template.md to include Discord username update by @luciofstars in [pret#2030](https://github.com/pret/pokeemerald/pull/2030) + * remove ScriptContext_Enable from secret_base.h by @DizzyEggg in [pret#2032](https://github.com/pret/pokeemerald/pull/2032) + * Remove gflib by @Kurausukun in [pret#2033](https://github.com/pret/pokeemerald/pull/2033) + * Minor toolchain fixes by @GriffinRichards in [pret#2031](https://github.com/pret/pokeemerald/pull/2031) + * Bugfix for cable car hikerGraphicsIds array by @Scyrous in [pret#2039](https://github.com/pret/pokeemerald/pull/2039) + * Remove explicit symbol sizes in sym_common.txt by @GriffinRichards in [pret#2038](https://github.com/pret/pokeemerald/pull/2038) + * Ignore mGBA screenshots by @Jaizu in [pret#2041](https://github.com/pret/pokeemerald/pull/2041) + * Replaced copyright magic numbers in intro.c with constants by @pkmnsnfrn in [pret#2035](https://github.com/pret/pokeemerald/pull/2035) + * Fixed typo: | should be || in Task_TryFieldPoisonWhiteOut by @AreaZR in [pret#2044](https://github.com/pret/pokeemerald/pull/2044) + * [preproc] support C23 enum underlying type syntax by @mrgriffin in [pret#2043](https://github.com/pret/pokeemerald/pull/2043) + * Fixed deleting files with dependency files by @mid-kid in [pret#2045](https://github.com/pret/pokeemerald/pull/2045) + * Remove unnecessary looping for rule generation and unroll macros by @mid-kid in [pret#2046](https://github.com/pret/pokeemerald/pull/2046) + * Get rid of common syms by @luckytyphlosion in [pret#2040](https://github.com/pret/pokeemerald/pull/2040) + * Bugfix for cable car hikerGraphicsIds array by @Scyrous in [pret#2039](https://github.com/pret/pokeemerald/pull/2039) + * UB fix in battle_transition.c by @cawtds in [pret#2007](https://github.com/pret/pokeemerald/pull/2007) + * Fixed typo: | should be || in Task_TryFieldPoisonWhiteOut by @AreaZR in [pret#2044](https://github.com/pret/pokeemerald/pull/2044) + * Get rid of common syms by @luckytyphlosion in [pret#2040](https://github.com/pret/pokeemerald/pull/2040) + * Fixed incorrect point macros in contest_ai_script.inc by @NTx86 in [pret#2028](https://github.com/pret/pokeemerald/pull/2028) +* 5th of November in [#5644](https://github.com/rh-hideout/pokeemerald-expansion/pull/5644) + * Added define value for bard sound length by @fdeblasio in [pret#2052](https://github.com/pret/pokeemerald/pull/2052) + * Silence 'Nothing to be done for generated' messages by @GriffinRichards in [pret#2059](https://github.com/pret/pokeemerald/pull/2059) + * Lay out emerald version png horizontally by @GriffinRichards in [pret#2062](https://github.com/pret/pokeemerald/pull/2062) +* 29 of November in [#5736](https://github.com/rh-hideout/pokeemerald-expansion/pull/5736) + * Remove usage of gHeap in sSpritePalettes_ContestantsTurnBlinkEffect by @Lactozilla in [pret#2064](https://github.com/pret/pokeemerald/pull/2064) + * BUGFIX: Fix Counter and Mirror Coat checking the wrong category by @surtr-games in [pret#2066](https://github.com/pret/pokeemerald/pull/2066) + * Add TRY_DRAW_SPOT_PIXEL by @GriffinRichards in [pret#2055](https://github.com/pret/pokeemerald/pull/2055) + * Added extra encoded character support by @AsparagusEduardo in [pret#2050](https://github.com/pret/pokeemerald/pull/2050) +### merrp's followers +* Merrp merge (12th of October) by @Bassoonian in [#5514](https://github.com/rh-hideout/pokeemerald-expansion/pull/5514) + - d80190fe105eee12bbf74ae29647ac909084d35c fix: Dig in Sealed Chamber no longer freezes follower. + +## New Contributors +* @AERDU made their first contribution in [#5666](https://github.com/rh-hideout/pokeemerald-expansion/pull/5666) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.9.3...expansion/1.9.4 + + + diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 44b1169bcd..7d883d77a8 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,13 +1,13 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.9.3 +// Last version: 1.9.4 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 9 #define EXPANSION_VERSION_PATCH 4 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE FALSE +#define EXPANSION_TAGGED_RELEASE TRUE #endif From 720938f040248ebbcecf9bba8b627223783934f0 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 1 Dec 2024 14:28:26 -0300 Subject: [PATCH 445/544] Fix conflicts --- include/battle.h | 3 +-- src/battle_util.c | 9 ++++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/battle.h b/include/battle.h index 54c81a3e57..37f2359641 100644 --- a/include/battle.h +++ b/include/battle.h @@ -828,9 +828,8 @@ struct BattleStruct u8 commandingDondozo; u16 commanderActive[MAX_BATTLERS_COUNT]; u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side - u8 fickleBeamBoosted:1; u8 redCardActivates:1; - u8 padding:6; + u8 padding:7; u8 usedEjectItem; u8 usedMicleBerry; }; diff --git a/src/battle_util.c b/src/battle_util.c index dc2dcc55f1..01822691a3 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3314,7 +3314,14 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) break; case DISOBEYS_HITS_SELF: gBattlerTarget = gBattlerAttacker; - gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); + struct DamageCalculationData damageCalcData; + damageCalcData.battlerAtk = damageCalcData.battlerDef = gBattlerAttacker; + damageCalcData.move = MOVE_NONE; + damageCalcData.moveType = TYPE_MYSTERY; + damageCalcData.isCrit = FALSE; + damageCalcData.randomFactor = FALSE; + damageCalcData.updateFlags = TRUE; + gBattleMoveDamage = CalculateMoveDamage(&damageCalcData, 40); gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gHitMarker |= HITMARKER_OBEYS; From bb274c06918b19aca172f3d0e65be1c21cb27df4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 1 Dec 2024 14:42:40 -0300 Subject: [PATCH 446/544] Add missing changelogs to list --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb9fec3e7e..70abeffd3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Pokeemerald-Expansion Changelogs ## 1.9.x +- **[Version 1.9.4](docs/changelogs/1.9.x/1.9.4.md) - 🧹 Bugfix Release** +- **[Version 1.9.3](docs/changelogs/1.9.x/1.9.3.md) - 🧹 Bugfix Release** - **[Version 1.9.2](docs/changelogs/1.9.x/1.9.2.md) - 🧹 Bugfix Release** - **[Version 1.9.1](docs/changelogs/1.9.x/1.9.1.md) - 🧹 Bugfix Release** - **[Version 1.9.0](docs/changelogs/1.9.x/1.9.0.md) - ✨ Feature Release** From ebc03c3cb313b242f7bcdd396dcb00233d44b839 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 1 Dec 2024 14:46:22 -0300 Subject: [PATCH 447/544] Added missing PR --- docs/changelogs/1.9.x/1.9.4.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelogs/1.9.x/1.9.4.md b/docs/changelogs/1.9.x/1.9.4.md index 36dc2afc73..2a41988bd4 100644 --- a/docs/changelogs/1.9.x/1.9.4.md +++ b/docs/changelogs/1.9.x/1.9.4.md @@ -98,6 +98,7 @@ * Fixes gems triggering on confusion damage by @AlexOn1ine in [#5723](https://github.com/rh-hideout/pokeemerald-expansion/pull/5723) * Fixes Kee Maranga and Enigma Berry by @AlexOn1ine in [#5727](https://github.com/rh-hideout/pokeemerald-expansion/pull/5727) * Fixes Blunder Policy by @AlexOn1ine in [#5722](https://github.com/rh-hideout/pokeemerald-expansion/pull/5722) +* Fixes Rusted Shield/Sword allowed to be Knocked Off from Zamazenta/Zacian by @iriv24 in [#5750](https://github.com/rh-hideout/pokeemerald-expansion/pull/5750) ## 🤖 Battle AI 🤖 ### Fixed From bd7a46f9c7b42ad25e50723a4a2aca8028039ed5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 1 Dec 2024 15:10:46 -0300 Subject: [PATCH 448/544] Version 1.10.0 --- .../ISSUE_TEMPLATE/01_battle_engine_bugs.yaml | 12 +- .../ISSUE_TEMPLATE/02_battle_ai_issues.yaml | 12 +- .github/ISSUE_TEMPLATE/04_other_errors.yaml | 12 +- CHANGELOG.md | 3 + README.md | 4 +- docs/SUMMARY.md | 2 + docs/changelogs/1.10.0/1.10.0.md | 324 ++++++++++++++++++ include/constants/expansion.h | 2 +- 8 files changed, 341 insertions(+), 30 deletions(-) create mode 100644 docs/changelogs/1.10.0/1.10.0.md diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 6a654402ac..0a3eff0e43 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,21 +23,15 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.4 (Latest release) + - 1.10.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.4 - 1.9.3 - 1.9.2 - 1.9.1 - 1.9.0 - - 1.8.6 - - 1.8.5 - - 1.8.4 - - 1.8.3 - - 1.8.2 - - 1.8.1 - - 1.8.0 - - pre-1.8.0 + - pre-1.9.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index ff9823aa01..4b8eec3a43 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,21 +23,15 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.4 (Latest release) + - 1.10.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.4 - 1.9.3 - 1.9.2 - 1.9.1 - 1.9.0 - - 1.8.6 - - 1.8.5 - - 1.8.4 - - 1.8.3 - - 1.8.2 - - 1.8.1 - - 1.8.0 - - pre-1.8.0 + - pre-1.9.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index ab400f7b9d..54335ca5e4 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,21 +23,15 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.4 (Latest release) + - 1.10.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.4 - 1.9.3 - 1.9.2 - 1.9.1 - 1.9.0 - - 1.8.6 - - 1.8.5 - - 1.8.4 - - 1.8.3 - - 1.8.2 - - 1.8.1 - - 1.8.0 - - pre-1.8.0 + - pre-1.9.0 validations: required: true - type: input diff --git a/CHANGELOG.md b/CHANGELOG.md index 70abeffd3e..13d6e4f4eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Pokeemerald-Expansion Changelogs +## 1.10.x +- **[Version 1.10.0](docs/changelogs/1.10.x/1.10.0.md) - ✨ Feature Release** + ## 1.9.x - **[Version 1.9.4](docs/changelogs/1.9.x/1.9.4.md) - 🧹 Bugfix Release** - **[Version 1.9.3](docs/changelogs/1.9.x/1.9.3.md) - 🧹 Bugfix Release** diff --git a/README.md b/README.md index 823a02479c..277dae2be7 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ pokeemerald-expansion is a decomp hack base project based off pret's [pokeemeral If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` -Based off RHH's pokeemerald-expansion 1.9.4 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.10.0 https://github.com/rh-hideout/pokeemerald-expansion/ ``` Please follow the instructions in `INSTALL.md` to get pokeemerald-expansion set up on your machine. @@ -177,7 +177,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple - Check your current version. - You can check in the debug menu's `Utilities -> Expansion Version` option. - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](CHANGELOG.md) to determine your version based on the features available on your repository. -- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.9.4, use `git pull RHH expansion/1.9.4`). +- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.10.0, use `git pull RHH expansion/1.10.0`). - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on) - Alternatively, you can update to unreleased versions of the expansion. - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`. diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index ab016136a1..cb02bb306e 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -18,6 +18,8 @@ - [v1.6.x](tutorials/how_to_new_pokemon_1_6_0.md) - [How to use the Testing System](tutorials/how_to_testing_system.md) - [Changelog](./CHANGELOG.md) + - [1.10.x]() + - [Version 1.10.0](changelogs/1.9.x/1.9.4.md) - [1.9.x]() - [Version 1.9.4](changelogs/1.9.x/1.9.4.md) - [Version 1.9.3](changelogs/1.9.x/1.9.3.md) diff --git a/docs/changelogs/1.10.0/1.10.0.md b/docs/changelogs/1.10.0/1.10.0.md new file mode 100644 index 0000000000..9cf2f9b41e --- /dev/null +++ b/docs/changelogs/1.10.0/1.10.0.md @@ -0,0 +1,324 @@ +# Version 1.10.0 + +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.10.0`. +``` + +## 🌋 *REFACTORS* 🌋 +📜 = Uses a migration script. +* Changes Evolution methods to Enums by @AlexOn1ine in [#4977](https://github.com/rh-hideout/pokeemerald-expansion/pull/4977) +* Turn item hold effects into an enum by @Bassoonian in [#5498](https://github.com/rh-hideout/pokeemerald-expansion/pull/5498) +* Change `GET_MOVE_TYPE` to a function by @AlexOn1ine in [#5090](https://github.com/rh-hideout/pokeemerald-expansion/pull/5090) +* Created `COMPOUND_STRING`s for default player names by @fdeblasio in [#5037](https://github.com/rh-hideout/pokeemerald-expansion/pull/5037) +* Removed agbcc by @mrgriffin in [#4994](https://github.com/rh-hideout/pokeemerald-expansion/pull/4994) +* Refactor Frontier Brains by @fdeblasio in [#5027](https://github.com/rh-hideout/pokeemerald-expansion/pull/5027) +* Removed all instances of `gBitTable[x]` by @hedara90 in [#5123](https://github.com/rh-hideout/pokeemerald-expansion/pull/5123) +* Made `BuildColorMaps` redundant by using static tables by @pkmnsnfrn in [#5289](https://github.com/rh-hideout/pokeemerald-expansion/pull/5289) +* Removed `FRONTIER_BRAIN_SPRITES` and updated `TRAINER_SPRITE`, `TRAINER_BACK_SPRITE`, and `TRAINER_CLASS` by @fdeblasio in [#5166](https://github.com/rh-hideout/pokeemerald-expansion/pull/5166) +* Added `ShouldSwitch` result to `AiLogicData` by @Pawkkie and @AlexOn1ine had the idea! in [#5440](https://github.com/rh-hideout/pokeemerald-expansion/pull/5440) +* Switch AI refactor + considers free switches by @Pawkkie in [#5379](https://github.com/rh-hideout/pokeemerald-expansion/pull/5379) +* Refactor `ShouldSwitchIfAllBadMoves` by @Pawkkie in [#5452](https://github.com/rh-hideout/pokeemerald-expansion/pull/5452) +* Updated Wring Out effects to match Eruption effects by @AsparagusEduardo in [#5549](https://github.com/rh-hideout/pokeemerald-expansion/pull/5549) + - Changed Wring Out/Crush Grip/Hard Press to use `power` instead of `argument` to determine its max power, just like how Eruption/Water Spout/Dragon Energy do it. + - Also: + - Renamed `EFFECT_VARY_POWER_BASED_ON_HP` to `EFFECT_POWER_BASED_ON_TARGET_HP` + - Renamed `EFFECT_ERUPTION` to `EFFECT_POWER_BASED_ON_USER_HP` +* Update battle messages to Gen 5+ standards by @kittenchilly in [#3240](https://github.com/rh-hideout/pokeemerald-expansion/pull/3240) +* Should switch refactor to facilitate switch prediction by @Pawkkie in [#5466](https://github.com/rh-hideout/pokeemerald-expansion/pull/5466) +* Unwind `TRAINER_CLASS` macro by @SBird1337 in [#5611](https://github.com/rh-hideout/pokeemerald-expansion/pull/5611) +* Refactors Absorb to use `Moveend` by @AlexOn1ine in [#5670](https://github.com/rh-hideout/pokeemerald-expansion/pull/5670) + * For new absorbing moves an argument should be added in `moves_info.h` +* Changes name of `B_SCR_NAME_WITH_PREFIX` by @AlexOn1ine in [#5675](https://github.com/rh-hideout/pokeemerald-expansion/pull/5675) + +## 🧬 General 🧬 +### Added +* Added performance counter by @hedara90 and @SBird1337 provided the actual code in [#5284](https://github.com/rh-hideout/pokeemerald-expansion/pull/5284) +* Added debug build target by @u8-Salem in [#4817](https://github.com/rh-hideout/pokeemerald-expansion/pull/4817) +* Added `AUTO_SCROLL_TEXT` and `NUM_FRAMES_AUTO_SCROLL_DELAY` by @pkmnsnfrn in [#5054](https://github.com/rh-hideout/pokeemerald-expansion/pull/5054) +* Adds `SAVE_TYPE_ERROR_SCREEN` by @pkmnsnfrn in [#5188](https://github.com/rh-hideout/pokeemerald-expansion/pull/5188) +* Move Relearner and Renaming From Summary Screen by @ravepossum in [#5513](https://github.com/rh-hideout/pokeemerald-expansion/pull/5513) +* Automatic Line Breaks, somewhat even lines by @hedara90 and @AsparagusEduardo in [#5689](https://github.com/rh-hideout/pokeemerald-expansion/pull/5689) + - Automatically insert line breaks into a string with `BreakStringAutomatic`. + - This function does not modify strings with existing line breaks. + - Remove existing line breaks from a string with `StripLineBreaks`. + +### Changed +* Removed agbcc by @mrgriffin in [#4994](https://github.com/rh-hideout/pokeemerald-expansion/pull/4994) +* Removed all instances of `gBitTable[x]` by @hedara90 in [#5123](https://github.com/rh-hideout/pokeemerald-expansion/pull/5123) +* Converted Mechadoll text to `COMPOUND_STRING`s by @fdeblasio in [#5276](https://github.com/rh-hideout/pokeemerald-expansion/pull/5276) +* New terrain bgs by @TheTrueSadfish in [#5162](https://github.com/rh-hideout/pokeemerald-expansion/pull/5162) +* Removed agbcc screenshots from `.gitignore` by @Bassoonian in [#5538](https://github.com/rh-hideout/pokeemerald-expansion/pull/5538) +* Set default battle shadow to Gen3 by @hedara90 in [#5632](https://github.com/rh-hideout/pokeemerald-expansion/pull/5632) + - Note: Trainerslides don't work properly with Gen4 shadows. +* Convert 3 variouses to `callnatives` by @AlexOn1ine in [#5646](https://github.com/rh-hideout/pokeemerald-expansion/pull/5646) + +## 🗺️ Overworld 🗺️ +### Added +* FRLG+ whiteout message by @cawtds in [#4967](https://github.com/rh-hideout/pokeemerald-expansion/pull/4967) +* Dynamic Move Types in Summary Screen/Battle by @Galaxeeh in [#5084](https://github.com/rh-hideout/pokeemerald-expansion/pull/5084) +* Adds `OW_BERRY_IMMORTAL` by @pkmnsnfrn in [#5187](https://github.com/rh-hideout/pokeemerald-expansion/pull/5187) +* (Default Off) Item Description Headers by @ghoulslash in [#4767](https://github.com/rh-hideout/pokeemerald-expansion/pull/4767) +* RTC-based wild encounters by @hjk321 in [#5313](https://github.com/rh-hideout/pokeemerald-expansion/pull/5313) +* Added `MB_X_Y_STAIR_WARP` metatile behaviors by @pkmnsnfrn in [#5278](https://github.com/rh-hideout/pokeemerald-expansion/pull/5278) +* Added Sideways Stairs by @ghoulslash in [#4836](https://github.com/rh-hideout/pokeemerald-expansion/pull/4836) +* Added `OW_UNION_DISABLE_CHECK` and `OW_FLAG_MOVE_UNION_ROOM_CHECK` by @pkmnsnfrn in [#5448](https://github.com/rh-hideout/pokeemerald-expansion/pull/5448) +* Adds new scripting macros to increase developer quality of life by @pkmnsnfrn in [#5177](https://github.com/rh-hideout/pokeemerald-expansion/pull/5177) +* Added more later gen fishing mechanics by @kittenchilly in [#5518](https://github.com/rh-hideout/pokeemerald-expansion/pull/5518) + +### Changed +* Created PokeNav `COMPOUND_STRING`s by @fdeblasio in [#4983](https://github.com/rh-hideout/pokeemerald-expansion/pull/4983) +* Added `I_REPEL_INCLUDE_FAINTED` config and behavior by @kittenchilly in [#5239](https://github.com/rh-hideout/pokeemerald-expansion/pull/5239) +* RTC-based wild encounters follow up by @AlexOn1ine in [#5328](https://github.com/rh-hideout/pokeemerald-expansion/pull/5328) +* Revert rtc based encounters by @AlexOn1ine in [#5331](https://github.com/rh-hideout/pokeemerald-expansion/pull/5331) +* Made BuildColorMaps redundant by using static tables by @pkmnsnfrn in [#5289](https://github.com/rh-hideout/pokeemerald-expansion/pull/5289) +* Added `OW_AUTO_SIGNPOST` and associated metatile behaviors by @pkmnsnfrn in [#5044](https://github.com/rh-hideout/pokeemerald-expansion/pull/5044) +* Added support for overworld sprite gender differences + add all the sprites by @kittenchilly in [#5394](https://github.com/rh-hideout/pokeemerald-expansion/pull/5394) + +### Fixed +* Added some null pointer checks by @tertu-m in [#5130](https://github.com/rh-hideout/pokeemerald-expansion/pull/5130) +* Reset item flags on new game by @ghoulslash in [#5363](https://github.com/rh-hideout/pokeemerald-expansion/pull/5363) +* Follower female fix by @hedara90 in [#5475](https://github.com/rh-hideout/pokeemerald-expansion/pull/5475) + +## 🐉 Pokémon 🐉 +### Added +* Added config to change Vivillon's breeding form by @kittenchilly in [#4813](https://github.com/rh-hideout/pokeemerald-expansion/pull/4813) +* Added back GBA sprites via config by @AsparagusEduardo and @AlexOn1ine for their help with script to migrate data from vanilla to our current `gSpeciesInfo` in [#5206](https://github.com/rh-hideout/pokeemerald-expansion/pull/5206) +* Added config to disable gender differences by @AsparagusEduardo in [#5595](https://github.com/rh-hideout/pokeemerald-expansion/pull/5595) + +### Changed +* Made perfect IV count into a granular setting by @AsparagusEduardo in [#5115](https://github.com/rh-hideout/pokeemerald-expansion/pull/5115) +* Updated species defines by @pkmnsnfrn in [#5075](https://github.com/rh-hideout/pokeemerald-expansion/pull/5075) +* Added support for overworld sprite gender differences + add all the sprites by @kittenchilly in [#5394](https://github.com/rh-hideout/pokeemerald-expansion/pull/5394) +* Renamed folders and symbols to match species defines by @AsparagusEduardo in [#5581](https://github.com/rh-hideout/pokeemerald-expansion/pull/5581) + - Burmy and Wormadam footprints were in a `plant` subfolder. They have been moved to the species root folder + - Paldean Wooper's subfolder was named `wooper_paldean` instead of just `paldean`. This has been corrected. + - Zen Mode Galarian Darmanitan's folder was located in `darmanitan/galarian/zen_mode`. This has been corrected to `darmanitan/galar_zen`, alongside Galarian Standard Mode's `darmanitan/galar_standard`. + - Also updated Ogerpon's folders similarly. + - Renamed `SPECIES_PIKACHU_PARTNER_CAP` to `SPECIES_PIKACHU_PARTNER`. +* Changing `EVO_NONE` from `0xFFFE` to `0` by @GhoulMage in [#5547](https://github.com/rh-hideout/pokeemerald-expansion/pull/5547) + - There could be a case for out of bounds errors if arrays or iterations are happening where you're using + 1 or - 1, as `EVO_FRIENDSHIP` used to be the first index although it started with 1. + +### Fixed +* Follower female fix by @hedara90 in [#5475](https://github.com/rh-hideout/pokeemerald-expansion/pull/5475) +* Fixed some gba sprites by @SubzeroEclipse in [#5607](https://github.com/rh-hideout/pokeemerald-expansion/pull/5607) + +## ⚔️ Battle General ⚔️ +### Added +* FRLG+ whiteout message by @cawtds in [#4967](https://github.com/rh-hideout/pokeemerald-expansion/pull/4967) +* Added B_SHOW_TYPES and cleaned up IsDoubleBattle by @pkmnsnfrn in [#5131](https://github.com/rh-hideout/pokeemerald-expansion/pull/5131) +* EV Caps and EV Items by @Flash1Lucky and @AlexOn1ine in [#5269](https://github.com/rh-hideout/pokeemerald-expansion/pull/5269) +* Added in-battle shadows underneath all enemy battlers by @lhearachel in [#5178](https://github.com/rh-hideout/pokeemerald-expansion/pull/5178) +* Added Gen 1 Crit Chance by @Pawkkie in [#5439](https://github.com/rh-hideout/pokeemerald-expansion/pull/5439) +* Added battle flag that prevents running from wild Pokémon by @SarnPoke in [#5502](https://github.com/rh-hideout/pokeemerald-expansion/pull/5502) + +### Changed +* Refactor Frontier Brains by @fdeblasio in [#5027](https://github.com/rh-hideout/pokeemerald-expansion/pull/5027) +* Removed some hardcoding of move IDs + Gen4/5 Defog by @AsparagusEduardo in [#5156](https://github.com/rh-hideout/pokeemerald-expansion/pull/5156) +* Convert 8 various to `callnatives` by @AsparagusEduardo in [#5172](https://github.com/rh-hideout/pokeemerald-expansion/pull/5172) +* Anger Shell use `saveattacker` by @ghoulslash in [#5409](https://github.com/rh-hideout/pokeemerald-expansion/pull/5409) +* Clean up Unseen Fist Check by @AlexOn1ine in [#5420](https://github.com/rh-hideout/pokeemerald-expansion/pull/5420) +* Updated species defines by @pkmnsnfrn in [#5075](https://github.com/rh-hideout/pokeemerald-expansion/pull/5075) +* Removes Crit Chance preproc by @AlexOn1ine in [#5520](https://github.com/rh-hideout/pokeemerald-expansion/pull/5520) +* Update battle messages to Gen 5+ standards by @kittenchilly in [#3240](https://github.com/rh-hideout/pokeemerald-expansion/pull/3240) +* More post-#3240 cleanup by @kittenchilly in [#5593](https://github.com/rh-hideout/pokeemerald-expansion/pull/5593) +* Unwind `TRAINER_CLASS` macro by @SBird1337 in [#5611](https://github.com/rh-hideout/pokeemerald-expansion/pull/5611) +* Removes redundant Decorate check by @AlexOn1ine in [#5696](https://github.com/rh-hideout/pokeemerald-expansion/pull/5696) +* Changes target bit of Flower Shield by @AlexOn1ine in [#5698](https://github.com/rh-hideout/pokeemerald-expansion/pull/5698) + +### Fixed +* Fixed a sprite issue with `B_SHOW_TYPES` by @pkmnsnfrn in [#5157](https://github.com/rh-hideout/pokeemerald-expansion/pull/5157) +* Dynamic Move Display fixes by @Galaxeeh in [#5251](https://github.com/rh-hideout/pokeemerald-expansion/pull/5251) +* Fixed a display issue with `B_SHOW_TYPES` by @pkmnsnfrn and @iriv24 in [#5201](https://github.com/rh-hideout/pokeemerald-expansion/pull/5201) +* Fixed Gen 3 foreseen and Beat Up damage type by @hedara90 in [#5323](https://github.com/rh-hideout/pokeemerald-expansion/pull/5323) +* Fixes Defog used by the wrong side when there is a Substitue and Screen by @AlexOn1ine in [#5381](https://github.com/rh-hideout/pokeemerald-expansion/pull/5381) +* Fixes Hidden Power dynamic type bug by @AlexOn1ine in [#5463](https://github.com/rh-hideout/pokeemerald-expansion/pull/5463) +* Display the correct shadow size when sending out a new Pokemon by @lhearachel in [#5618](https://github.com/rh-hideout/pokeemerald-expansion/pull/5618) +* Fixed text wrap obtaining the incorrect glyph width by @AsparagusEduardo and @AlexOn1ine for their help verifying that the fix works with one of his custom strings in [#5620](https://github.com/rh-hideout/pokeemerald-expansion/pull/5620) +* Improve line breaks/scrolls by @cawtds in [#5641](https://github.com/rh-hideout/pokeemerald-expansion/pull/5641) +* Fixed Order Up + Tera Stellar breaking each other with Commander by @PhallenTree in [#5667](https://github.com/rh-hideout/pokeemerald-expansion/pull/5667) +* Fixes wrong Id when AI chooses mon to switch in by @AlexOn1ine in [#5684](https://github.com/rh-hideout/pokeemerald-expansion/pull/5684) +* Fixes Absorb regression caused by #5670 by @AlexOn1ine in [#5688](https://github.com/rh-hideout/pokeemerald-expansion/pull/5688) +* Fixes heal blocked leeach seed in tests by @AlexOn1ine in [#5700](https://github.com/rh-hideout/pokeemerald-expansion/pull/5700) +* Trainer class+name expansion fix for Battle Frontier by @hedara90 in [#5699](https://github.com/rh-hideout/pokeemerald-expansion/pull/5699) + +## 🤹 Moves 🤹 +### Changed +* Added Population Bomb animation by @kittenchilly in [#5194](https://github.com/rh-hideout/pokeemerald-expansion/pull/5194) +* Move battle anim arrays to C by @cawtds in [#5306](https://github.com/rh-hideout/pokeemerald-expansion/pull/5306) +* Grass/Water Pledge Swamp Animation + Sea of Fire animation tweak by @SonikkuA-DatH in [#5325](https://github.com/rh-hideout/pokeemerald-expansion/pull/5325) +* New animations for many moves more details in description by @TheTrueSadfish in [#5367](https://github.com/rh-hideout/pokeemerald-expansion/pull/5367) +* Use move effect for some moves instead of ids by @AlexOn1ine in [#5433](https://github.com/rh-hideout/pokeemerald-expansion/pull/5433) +* Adds Commander and Order Up by @AlexOn1ine in [#5246](https://github.com/rh-hideout/pokeemerald-expansion/pull/5246) +* Heart Swap Move Animation by @SonikkuA-DatH in [#5460](https://github.com/rh-hideout/pokeemerald-expansion/pull/5460) +* Update `shed_tail.c` by @Bassoonian in [#5494](https://github.com/rh-hideout/pokeemerald-expansion/pull/5494) +* Added Ion Deluge animation by @kittenchilly in [#5467](https://github.com/rh-hideout/pokeemerald-expansion/pull/5467) +* Updated Wring Out effects to match Eruption effects by @AsparagusEduardo in [#5549](https://github.com/rh-hideout/pokeemerald-expansion/pull/5549) + - Changed Wring Out/Crush Grip/Hard Press to use `power` instead of `argument` to determine its max power, just like how Eruption/Water Spout/Dragon Energy do it. Also: + - Renamed `EFFECT_VARY_POWER_BASED_ON_HP` to `EFFECT_POWER_BASED_ON_TARGET_HP` + - Renamed `EFFECT_ERUPTION` to `EFFECT_POWER_BASED_ON_USER_HP` +* Refactors Absorb to use Moveend by @AlexOn1ine in [#5670](https://github.com/rh-hideout/pokeemerald-expansion/pull/5670) + * For new absorbing moves an argument should be added in `moves_info.h` + +### Fixed +* Dark Void, Clangorous Soulblaze, vortex animation fixes by @TheTrueSadfish in [#5650](https://github.com/rh-hideout/pokeemerald-expansion/pull/5650) + +## 🎭 Abilities 🎭 +### Changed +* Adds Commander and Order Up by @AlexOn1ine in [#5246](https://github.com/rh-hideout/pokeemerald-expansion/pull/5246) + +## 🧶 Items 🧶 +### Added +* Adds `OW_BERRY_IMMORTAL` by @pkmnsnfrn in [#5187](https://github.com/rh-hideout/pokeemerald-expansion/pull/5187) +* Added functionality to Poké Flute and Town Map by @kittenchilly and @LOuroboros basically did the Town Map implementation in [#5405](https://github.com/rh-hideout/pokeemerald-expansion/pull/5405) +* Decouple Poke Ball ids from item ids by @AlexOn1ine in [#5560](https://github.com/rh-hideout/pokeemerald-expansion/pull/5560) + +### Changed +* Consolidated the values of Rotom's moves and added Gen9 base form effect by @fdeblasio in [#5186](https://github.com/rh-hideout/pokeemerald-expansion/pull/5186) +* Added `I_REPEL_INCLUDE_FAINTED` config and behavior by @kittenchilly in [#5239](https://github.com/rh-hideout/pokeemerald-expansion/pull/5239) + +### Fixed +* Replace hardcoded flute check with consumability check by @Bassoonian in [#5508](https://github.com/rh-hideout/pokeemerald-expansion/pull/5508) + +## 🤖 Battle AI 🤖 +### Added +* Adds config to show target of ingame partner by @AlexOn1ine in [#5307](https://github.com/rh-hideout/pokeemerald-expansion/pull/5307) +* Switch AI refactor + considers free switches by @Pawkkie in [#5379](https://github.com/rh-hideout/pokeemerald-expansion/pull/5379) +* New AI flag for marking the two last Pokémon as Ace Pokémon by @GhoulMage in [#5587](https://github.com/rh-hideout/pokeemerald-expansion/pull/5587) + +### Changed +* Chilly Reception AI by @kittenchilly in [#5271](https://github.com/rh-hideout/pokeemerald-expansion/pull/5271) +* Shed Tail AI by @SarnPoke and @AlexOn1ine, @Pawkkie in [#5275](https://github.com/rh-hideout/pokeemerald-expansion/pull/5275) +* More missing AI logic by @kittenchilly in [#5279](https://github.com/rh-hideout/pokeemerald-expansion/pull/5279) +* Adds basic trainer and smart trainer flags by @AlexOn1ine in [#5298](https://github.com/rh-hideout/pokeemerald-expansion/pull/5298) +* `AI_FLAG_SETUP_FIRST_TURN` rename and clarifications by @Pawkkie in [#5310](https://github.com/rh-hideout/pokeemerald-expansion/pull/5310) +* Added Composite AI Flags to Docs by @Pawkkie in [#5349](https://github.com/rh-hideout/pokeemerald-expansion/pull/5349) +* AI frostbite score fixes and improvements by @Pawkkie and @kittenchilly for the suggestion! in [#5362](https://github.com/rh-hideout/pokeemerald-expansion/pull/5362) +* Switch AI `hitsToKO` considers one shot prevention by @Pawkkie in [#5371](https://github.com/rh-hideout/pokeemerald-expansion/pull/5371) +* Adds `CanEndureHit` AI function by @AlexOn1ine in [#5373](https://github.com/rh-hideout/pokeemerald-expansion/pull/5373) +* Switch AI `hitsToKO` considers Disguise by @Pawkkie in [#5375](https://github.com/rh-hideout/pokeemerald-expansion/pull/5375) +* Added `ShouldSwitch` result to `AiLogicData` by @Pawkkie and @AlexOn1ine had the idea! in [#5440](https://github.com/rh-hideout/pokeemerald-expansion/pull/5440) +* Removes duplicate code in AI functions by @AlexOn1ine in [#5457](https://github.com/rh-hideout/pokeemerald-expansion/pull/5457) +* Unify `GetBattlerAbility`/`TerrainAffected` to remove duplicate ai function by @AlexOn1ine in [#5497](https://github.com/rh-hideout/pokeemerald-expansion/pull/5497) +* `ShouldSwitchIfGameStatePrompt` Tests by @Pawkkie in [#5462](https://github.com/rh-hideout/pokeemerald-expansion/pull/5462) +* `AI_FLAG_ACE_POKEMON` takes into account separate trainers by @GhoulMage and @/uvula on Discord noted the weird behaviour. in [#5608](https://github.com/rh-hideout/pokeemerald-expansion/pull/5608) + - Fix for the AI not considering both trainers Ace Pokémons in double battles with `AI_FLAG_ACE_POKEMON`. +* Moves that deal a Fixed amount don't need AI handling by @AlexOn1ine in [#5614](https://github.com/rh-hideout/pokeemerald-expansion/pull/5614) +* Combines `CalculateMoveDamage` arguments into a struct by @AlexOn1ine in [#5570](https://github.com/rh-hideout/pokeemerald-expansion/pull/5570) + +### Fixed +* AI burn score fixes and improvements by @Pawkkie and @iriv24 and @AlexOn1ine in [#5356](https://github.com/rh-hideout/pokeemerald-expansion/pull/5356) +* Improve AI's Skill Swap handling in double battles by @Pawkkie in [#5360](https://github.com/rh-hideout/pokeemerald-expansion/pull/5360) +* Refactor `ShouldSwitchIfAllBadMoves` by @Pawkkie in [#5452](https://github.com/rh-hideout/pokeemerald-expansion/pull/5452) +* Should switch refactor to facilitate switch prediction by @Pawkkie in [#5466](https://github.com/rh-hideout/pokeemerald-expansion/pull/5466) +* Fixes Switch in flag not restoring mons properly with test by @Pawkkie and @iriv24 for finding, @AlexOn1ine for fixing in [#5746](https://github.com/rh-hideout/pokeemerald-expansion/pull/5746) + +## 🧹 Other Cleanup 🧹 +* Removed metadata in AIF files by @SombrAbsol in [#4958](https://github.com/rh-hideout/pokeemerald-expansion/pull/4958) +* Removed `gPaletteDecompressionBuffer` and unused palette functions/vars by @DizzyEggg in [#4841](https://github.com/rh-hideout/pokeemerald-expansion/pull/4841) +* Changes Evolution methods to `enum`s by @AlexOn1ine in [#4977](https://github.com/rh-hideout/pokeemerald-expansion/pull/4977) +* Doesn't compile on some compilers by @AlexOn1ine in [#5099](https://github.com/rh-hideout/pokeemerald-expansion/pull/5099) +* Update `event.inc` to accomodate new `gDecompressionBuffer` name by @Bassoonian in [#5100](https://github.com/rh-hideout/pokeemerald-expansion/pull/5100) +* Created `COMPOUND_STRING`s for default player names by @fdeblasio in [#5037](https://github.com/rh-hideout/pokeemerald-expansion/pull/5037) +* Changed single-use berry blender strings to be `COMPOUND_STRING`s by @fdeblasio in [#4963](https://github.com/rh-hideout/pokeemerald-expansion/pull/4963) +* Made perfect IV count into a granular setting by @AsparagusEduardo in [#5115](https://github.com/rh-hideout/pokeemerald-expansion/pull/5115) +* Dynamic move type clean up by @AlexOn1ine in [#5132](https://github.com/rh-hideout/pokeemerald-expansion/pull/5132) +* Refactor Frontier Brains by @fdeblasio in [#5027](https://github.com/rh-hideout/pokeemerald-expansion/pull/5027) +* Removed some hardcoding of move IDs + Gen4/5 Defog by @AsparagusEduardo in [#5156](https://github.com/rh-hideout/pokeemerald-expansion/pull/5156) +* Teatime animations use `B_WAIT_TIME_LONG` by @AsparagusEduardo in [#5173](https://github.com/rh-hideout/pokeemerald-expansion/pull/5173) +* Created PokeNav `COMPOUND_STRING`s by @fdeblasio in [#4983](https://github.com/rh-hideout/pokeemerald-expansion/pull/4983) +* Removed `gBitTable` usage again by @hedara90 in [#5193](https://github.com/rh-hideout/pokeemerald-expansion/pull/5193) +* Removed support for the original LCG random number generator by @tertu-m in [#5078](https://github.com/rh-hideout/pokeemerald-expansion/pull/5078) +* Deprecate MMBN Names by @pkmnsnfrn in [#5240](https://github.com/rh-hideout/pokeemerald-expansion/pull/5240) +* Convert 8 various to `callnatives` by @AsparagusEduardo in [#5172](https://github.com/rh-hideout/pokeemerald-expansion/pull/5172) +* Converted PC strings to `COMPOUND_STRING`s by @fdeblasio in [#5314](https://github.com/rh-hideout/pokeemerald-expansion/pull/5314) +* Cleaned up duplicate dynamic type functions by @AsparagusEduardo in [#5338](https://github.com/rh-hideout/pokeemerald-expansion/pull/5338) +* Removes redundant `moveTargetType` ai function by @AlexOn1ine in [#5354](https://github.com/rh-hideout/pokeemerald-expansion/pull/5354) +* Made `BuildColorMaps` redundant by using static tables by @pkmnsnfrn in [#5289](https://github.com/rh-hideout/pokeemerald-expansion/pull/5289) +* Some strings were switched by @AlexOn1ine in [#5374](https://github.com/rh-hideout/pokeemerald-expansion/pull/5374) +* Switch AI hitsToKO considers Disguise by @Pawkkie in [#5375](https://github.com/rh-hideout/pokeemerald-expansion/pull/5375) +* Cleaned up a bit of code with `GetBattlerPartyData` by @AlexOn1ine in [#5378](https://github.com/rh-hideout/pokeemerald-expansion/pull/5378) +* Minor Gem check optimazation by @AlexOn1ine in [#5401](https://github.com/rh-hideout/pokeemerald-expansion/pull/5401) +* Simplify HP Logic by @AreaZR in [#5403](https://github.com/rh-hideout/pokeemerald-expansion/pull/5403) +* Anger Shell use `saveattacker` by @ghoulslash in [#5409](https://github.com/rh-hideout/pokeemerald-expansion/pull/5409) +* Converted berry and PokeBlock strings to `COMPOUND_STRING`s by @fdeblasio in [#5324](https://github.com/rh-hideout/pokeemerald-expansion/pull/5324) +* Merge item description branch history by @Bassoonian in [#5419](https://github.com/rh-hideout/pokeemerald-expansion/pull/5419) +* Clean up Unseen Fist Check by @AlexOn1ine in [#5420](https://github.com/rh-hideout/pokeemerald-expansion/pull/5420) +* Merge level_caps and ev_caps into one caps file by @kittenchilly in [#5429](https://github.com/rh-hideout/pokeemerald-expansion/pull/5429) +* Removed trailing whitespace pass 10-2-2024 (Upcoming) by @kittenchilly in [#5456](https://github.com/rh-hideout/pokeemerald-expansion/pull/5456) +* Fixed Commander test name by @Bassoonian in [#5458](https://github.com/rh-hideout/pokeemerald-expansion/pull/5458) +* Updated species defines by @pkmnsnfrn in [#5075](https://github.com/rh-hideout/pokeemerald-expansion/pull/5075) +* Adds padding in `AiLogicData` by @AlexOn1ine in [#5468](https://github.com/rh-hideout/pokeemerald-expansion/pull/5468) +* Simplify `BS_FAINTED_MULTIPLE_1` double battle logic in openpartyscreen by @ghoulslash in [#5435](https://github.com/rh-hideout/pokeemerald-expansion/pull/5435) +* Removes duplicate code in AI functions by @AlexOn1ine in [#5457](https://github.com/rh-hideout/pokeemerald-expansion/pull/5457) +* `ShouldPivot` type cleanup by @Pawkkie in [#5441](https://github.com/rh-hideout/pokeemerald-expansion/pull/5441) +* Turn item hold effects into an enum by @Bassoonian in [#5498](https://github.com/rh-hideout/pokeemerald-expansion/pull/5498) +* Unify `GetBattlerAbility`/`TerrainAffected` to remove duplicate ai function by @AlexOn1ine in [#5497](https://github.com/rh-hideout/pokeemerald-expansion/pull/5497) +* Clean up Shedinja code by @Bassoonian in [#5501](https://github.com/rh-hideout/pokeemerald-expansion/pull/5501) +* Clean up `scrcmd` PR by @Bassoonian in [#5511](https://github.com/rh-hideout/pokeemerald-expansion/pull/5511) +* Removes Crit Chance preproc by @AlexOn1ine in [#5520](https://github.com/rh-hideout/pokeemerald-expansion/pull/5520) +* Removed agbcc screenshots from gitignore by @Bassoonian in [#5538](https://github.com/rh-hideout/pokeemerald-expansion/pull/5538) +* Removed unnecessary `gBattlerAttacker` usage by @AlexOn1ine in [#5554](https://github.com/rh-hideout/pokeemerald-expansion/pull/5554) +* Removed remaining line breaks from #3240 + Prefix wrap fix by @AsparagusEduardo in [#5556](https://github.com/rh-hideout/pokeemerald-expansion/pull/5556) +* More post-#3240 cleanup by @kittenchilly in [#5593](https://github.com/rh-hideout/pokeemerald-expansion/pull/5593) +* Renamed folders and symbols to match species defines by @AsparagusEduardo in [#5581](https://github.com/rh-hideout/pokeemerald-expansion/pull/5581) + - Also: + - Burmy and Wormadam footprints were in a `plant` subfolder. They have been moved to the species root folder + - Paldean Wooper's subfolder was named `wooper_paldean` instead of just `paldean`. This has been corrected. + - Zen Mode Galarian Darmanitan's folder was located in `darmanitan/galarian/zen_mode`. This has been corrected to `darmanitan/galar_zen`, alongside Galarian Standard Mode's `darmanitan/galar_standard`. + - Also updated Ogerpon's folders similarly. + - Renamed `SPECIES_PIKACHU_PARTNER_CAP` to `SPECIES_PIKACHU_PARTNER`. +* Minor `BattleStruct` clean up by @AlexOn1ine in [#5585](https://github.com/rh-hideout/pokeemerald-expansion/pull/5585) +* Fixed a ball update oversight by @Bassoonian in [#5609](https://github.com/rh-hideout/pokeemerald-expansion/pull/5609) +* `AI_FLAG_ACE_POKEMON` takes into account separate trainers by @GhoulMage and @/uvula on Discord noted the weird behaviour in [#5608](https://github.com/rh-hideout/pokeemerald-expansion/pull/5608) + - Fix for the AI not considering both trainers Ace Pokémons in double battles with `AI_FLAG_ACE_POKEMON`. +* Moves that deal a Fixed amount don't need AI handling by @AlexOn1ine in [#5614](https://github.com/rh-hideout/pokeemerald-expansion/pull/5614) +* Combines `CalculateMoveDamage` arguments into a struct by @AlexOn1ine in [#5570](https://github.com/rh-hideout/pokeemerald-expansion/pull/5570) +* Follow up for #5570 by @AlexOn1ine in [#5625](https://github.com/rh-hideout/pokeemerald-expansion/pull/5625) +* `AI_CalcDamage` clean up by @AlexOn1ine in [#5629](https://github.com/rh-hideout/pokeemerald-expansion/pull/5629) +* Convert 3 variouses to `callnatives` by @AlexOn1ine in [#5646](https://github.com/rh-hideout/pokeemerald-expansion/pull/5646) +* Convert `gBattleStringsTable` to `COMPOUND_STRING`s by @AsparagusEduardo in [#5649](https://github.com/rh-hideout/pokeemerald-expansion/pull/5649) +* Added merged placeholder text for trainer name with class by @kittenchilly in [#5622](https://github.com/rh-hideout/pokeemerald-expansion/pull/5622) +* Cleans up Primal Reversion code by @AlexOn1ine in [#5659](https://github.com/rh-hideout/pokeemerald-expansion/pull/5659) +* Critical Hit documentation and distorted match up struct switch by @AlexOn1ine in [#5665](https://github.com/rh-hideout/pokeemerald-expansion/pull/5665) +* Changes name of `B_SCR_NAME_WITH_PREFIX` by @AlexOn1ine in [#5675](https://github.com/rh-hideout/pokeemerald-expansion/pull/5675) +* Removes redundant Decorate check by @AlexOn1ine in [#5696](https://github.com/rh-hideout/pokeemerald-expansion/pull/5696) +* Changes taget bit of Flower Shield by @AlexOn1ine in [#5698](https://github.com/rh-hideout/pokeemerald-expansion/pull/5698) +* Changing `EVO_NONE` from `0xFFFE` to `0` by @GhoulMage in [#5547](https://github.com/rh-hideout/pokeemerald-expansion/pull/5547) + - There could be a case for out of bounds errors if arrays or iterations are happening where you're using + 1 or - 1, as `EVO_FRIENDSHIP` used to be the first index although it started with 1. + +## 🧪 Test Runner 🧪 +### Changed +* Fixed Commander test name by @Bassoonian in [#5458](https://github.com/rh-hideout/pokeemerald-expansion/pull/5458) +* `ShouldSwitchIfGameStatePrompt` Tests by @Pawkkie in [#5462](https://github.com/rh-hideout/pokeemerald-expansion/pull/5462) +* Added various tests, add `RNG_RANDOM_TARGET` by @ghoulslash in [#5438](https://github.com/rh-hideout/pokeemerald-expansion/pull/5438) +* Added Costar Tests, Download Test for Doubles by @ghoulslash in [#5526](https://github.com/rh-hideout/pokeemerald-expansion/pull/5526) +* Updated Wring Out effects to match Eruption effects by @AsparagusEduardo in [#5549](https://github.com/rh-hideout/pokeemerald-expansion/pull/5549) + - Changed Wring Out/Crush Grip/Hard Press to use `power` instead of `argument` to determine its max power, just like how Eruption/Water Spout/Dragon Energy do it. Also: + - Renamed `EFFECT_VARY_POWER_BASED_ON_HP` to `EFFECT_POWER_BASED_ON_TARGET_HP` + - Renamed `EFFECT_ERUPTION` to `EFFECT_POWER_BASED_ON_USER_HP` +* Healer ability tests by @Pawkkie in [#5559](https://github.com/rh-hideout/pokeemerald-expansion/pull/5559) +* Mark all tests as used by @mrgriffin in [#5531](https://github.com/rh-hideout/pokeemerald-expansion/pull/5531) + +### Fixed +* Should switch refactor to facilitate switch prediction by @Pawkkie in [#5466](https://github.com/rh-hideout/pokeemerald-expansion/pull/5466) + +## 📚 Documentation 📚 +* `DoBattleIntro` state documentation by @AsparagusEduardo and @ShinyDragonHunter in [#5231](https://github.com/rh-hideout/pokeemerald-expansion/pull/5231) +* Deprecate MMBN Names by @pkmnsnfrn in [#5240](https://github.com/rh-hideout/pokeemerald-expansion/pull/5240) +* `AI_FLAG_SETUP_FIRST_TURN` Rename and Clarifications by @Pawkkie in [#5310](https://github.com/rh-hideout/pokeemerald-expansion/pull/5310) +* Added Composite AI Flags to Docs by @Pawkkie in [#5349](https://github.com/rh-hideout/pokeemerald-expansion/pull/5349) +* Updated the new pokemon tutorial for 1.10 by @hedara90 in [#5721](https://github.com/rh-hideout/pokeemerald-expansion/pull/5721) + - Some changes compared to previous. + +## New Contributors +* @SombrAbsol made their first contribution in [#4958](https://github.com/rh-hideout/pokeemerald-expansion/pull/4958) +* @Galaxeeh made their first contribution in [#5084](https://github.com/rh-hideout/pokeemerald-expansion/pull/5084) +* @Flash1Lucky made their first contribution in [#5269](https://github.com/rh-hideout/pokeemerald-expansion/pull/5269) +* @GhoulMage made their first contribution in [#5547](https://github.com/rh-hideout/pokeemerald-expansion/pull/5547) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.9.4...expansion/1.10.0 + + + diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 6e6ce7f0ee..c24fbeec80 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.9.4 +// Last version: 1.10.0 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 10 #define EXPANSION_VERSION_PATCH 0 From 1dde42c0cc9d13c853e215c81f9ecc53ae9cffea Mon Sep 17 00:00:00 2001 From: iriv24 <40581123+iriv24@users.noreply.github.com> Date: Sun, 1 Dec 2024 14:37:46 -0500 Subject: [PATCH 449/544] Cant't knock off Rusted Shield/Sword from Zamazenta/Zacian (#5750) --- src/battle_util.c | 1 + test/battle/move_effect/knock_off.c | 122 +++++++++++++++++++++++++++- 2 files changed, 122 insertions(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 6f0b2af880..4dd236a695 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10672,6 +10672,7 @@ bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId) case FORM_CHANGE_BATTLE_PRIMAL_REVERSION: case FORM_CHANGE_BATTLE_ULTRA_BURST: case FORM_CHANGE_ITEM_HOLD: + case FORM_CHANGE_BEGIN_BATTLE: if (formChanges[i].param1 == heldItemId) return TRUE; break; diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index 50d8aaa773..b03432e695 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -202,6 +202,126 @@ SINGLE_BATTLE_TEST("Knock Off doesn't knock off items from Pokemon behind substi } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_KNOCK_OFF); } } SCENE { - NOT MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Poké Ball"); + NOT MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Poké Ball!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off does knock off Mega Stones from Pokemon that don't actually use them") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ABSOLITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Absolite!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off doesn't knock off Mega Stones from Pokemon that actually use them") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ABSOL) { Item(ITEM_ABSOLITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + NOT MESSAGE("Wobbuffet knocked off Foe Absol's Absolite!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off does knock off Orbs for Primal Reversion from Pokemon that don't actually use them") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_ORB); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Red Orb!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off doesn't knock off Orbs for Primal Reversion from Pokemon that actually use them") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + NOT MESSAGE("Wobbuffet knocked off Foe Groudon's Red Orb!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off doesn't knock off Z-Crystals") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ELECTRIUM_Z); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + NOT MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Electrium Z!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off doesn't knock off Ultranecrozium Z from Pokemon that actually use it") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + NOT MESSAGE("Wobbuffet knocked off Foe Necrozma's Ultranecrozium Z!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off does knock off other form-change hold items from Pokemon that don't actually use them") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SKY_PLATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Sky Plate!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off doesn't knock off other form-change hold items from Pokemon that actually use them") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ARCEUS) { Item(ITEM_SKY_PLATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + NOT MESSAGE("Wobbuffet knocked off Foe Arceus's Sky Plate!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off does knock off begin-battle form-change hold items from Pokemon that don't actually use them") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RUSTED_SHIELD); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Rusted Shield!"); + } +} + +SINGLE_BATTLE_TEST("Knock Off doesn't knock off begin-battle form-change hold items from Pokemon that actually use them") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ZAMAZENTA_HERO_OF_MANY_BATTLES) { Item(ITEM_RUSTED_SHIELD); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + NOT MESSAGE("Wobbuffet knocked off Foe Zamazenta's Rusted Shield!"); } } From 7e5327864e306fc46bb987a1fa5174c390d25641 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 1 Dec 2024 15:27:01 -0300 Subject: [PATCH 450/544] Start of 1.10.1 cycle --- include/constants/expansion.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/constants/expansion.h b/include/constants/expansion.h index c24fbeec80..24d5ed3853 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -4,10 +4,10 @@ // Last version: 1.10.0 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 10 -#define EXPANSION_VERSION_PATCH 0 +#define EXPANSION_VERSION_PATCH 1 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE TRUE +#define EXPANSION_TAGGED_RELEASE FALSE #endif From 4635f0e0f857af389dcb924b770e4c47d50a15bb Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 1 Dec 2024 18:36:25 -0300 Subject: [PATCH 451/544] Converted Stance Change to proper Form Change + Tests (#5749) --- include/constants/form_change_types.h | 12 +++- src/battle_script_commands.c | 29 +++------ src/battle_util.c | 12 +++- src/data/pokemon/form_change_tables.h | 11 ++-- test/battle/ability/stance_change.c | 84 +++++++++++++++++++++++++++ 5 files changed, 115 insertions(+), 33 deletions(-) create mode 100644 test/battle/ability/stance_change.c diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h index 79a8a4cee7..8af9740cad 100644 --- a/include/constants/form_change_types.h +++ b/include/constants/form_change_types.h @@ -134,8 +134,14 @@ // param1: amount of days #define FORM_CHANGE_DAYS_PASSED 23 -// Form change for Aegislash -#define FORM_CHANGE_BATTLE_ATTACK 24 -#define FORM_CHANGE_BATTLE_KINGS_SHIELD 25 +// Form change that activates before using a move. +// param1: move to check +// param2: ability to check, optional +#define FORM_CHANGE_BATTLE_BEFORE_MOVE 24 + +// Form change that activates before using a specific move category. +// param1: move category to check +// param2: ability to check, optional +#define FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY 25 #endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0390f0e85a..29c1c02edc 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1125,29 +1125,14 @@ static bool32 NoTargetPresent(u8 battler, u32 move) return FALSE; } -static bool32 TryAegiFormChange(void) +static bool32 TryFormChangeBeforeMove(void) { - // Only Aegislash with Stance Change can transform, transformed mons cannot. - if (GetBattlerAbility(gBattlerAttacker) != ABILITY_STANCE_CHANGE - || gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) + bool32 result = TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_BEFORE_MOVE); + if (!result) + result = TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY); + if (!result) return FALSE; - switch (gBattleMons[gBattlerAttacker].species) - { - default: - return FALSE; - case SPECIES_AEGISLASH_SHIELD: // Shield -> Blade - if (IS_MOVE_STATUS(gCurrentMove)) - return FALSE; - TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_ATTACK); - break; - case SPECIES_AEGISLASH_BLADE: // Blade -> Shield - if (gCurrentMove != MOVE_KINGS_SHIELD) - return FALSE; - TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_KINGS_SHIELD); - break; - } - BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AttackerFormChange; return TRUE; @@ -1221,7 +1206,7 @@ static void Cmd_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_MoveEnd; return; } - if (B_STANCE_CHANGE_FAIL < GEN_7 && TryAegiFormChange()) + if (B_STANCE_CHANGE_FAIL < GEN_7 && TryFormChangeBeforeMove()) return; if (AtkCanceller_UnableToUseMove(moveType)) return; @@ -1282,7 +1267,7 @@ static void Cmd_attackcanceler(void) gMoveResultFlags |= MOVE_RESULT_MISSED; return; } - if (B_STANCE_CHANGE_FAIL >= GEN_7 && TryAegiFormChange()) + if (B_STANCE_CHANGE_FAIL >= GEN_7 && TryFormChangeBeforeMove()) return; gHitMarker &= ~HITMARKER_ALLOW_NO_PP; diff --git a/src/battle_util.c b/src/battle_util.c index bcd43f8962..5238bbfc53 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10988,9 +10988,15 @@ u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method) if (GetBattlerTeraType(battler) == formChanges[i].param1) targetSpecies = formChanges[i].targetSpecies; break; - case FORM_CHANGE_BATTLE_ATTACK: - case FORM_CHANGE_BATTLE_KINGS_SHIELD: - targetSpecies = formChanges[i].targetSpecies; + case FORM_CHANGE_BATTLE_BEFORE_MOVE: + if (formChanges[i].param1 == gCurrentMove + && (formChanges[i].param2 == ABILITY_NONE || formChanges[i].param2 == GetBattlerAbility(battler))) + targetSpecies = formChanges[i].targetSpecies; + break; + case FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY: + if (formChanges[i].param1 == GetBattleMoveCategory(gCurrentMove) + && (formChanges[i].param2 == ABILITY_NONE || formChanges[i].param2 == GetBattlerAbility(battler))) + targetSpecies = formChanges[i].targetSpecies; break; } } diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 4af68ce318..340bdb1fa6 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -789,11 +789,12 @@ static const struct FormChange sFurfrouFormChangeTable[] = { #if P_FAMILY_HONEDGE static const struct FormChange sAegislashFormChangeTable[] = { - {FORM_CHANGE_BATTLE_ATTACK, SPECIES_AEGISLASH_BLADE}, - {FORM_CHANGE_BATTLE_KINGS_SHIELD, SPECIES_AEGISLASH_SHIELD}, - {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH_SHIELD}, - {FORM_CHANGE_FAINT, SPECIES_AEGISLASH_SHIELD}, - {FORM_CHANGE_END_BATTLE, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY, SPECIES_AEGISLASH_BLADE, DAMAGE_CATEGORY_PHYSICAL, ABILITY_STANCE_CHANGE}, + {FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY, SPECIES_AEGISLASH_BLADE, DAMAGE_CATEGORY_SPECIAL, ABILITY_STANCE_CHANGE}, + {FORM_CHANGE_BATTLE_BEFORE_MOVE, SPECIES_AEGISLASH_SHIELD, MOVE_KINGS_SHIELD, ABILITY_STANCE_CHANGE}, + {FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_FAINT, SPECIES_AEGISLASH_SHIELD}, + {FORM_CHANGE_END_BATTLE, SPECIES_AEGISLASH_SHIELD}, {FORM_CHANGE_TERMINATOR}, }; #endif //P_FAMILY_HONEDGE diff --git a/test/battle/ability/stance_change.c b/test/battle/ability/stance_change.c new file mode 100644 index 0000000000..8221e16385 --- /dev/null +++ b/test/battle/ability/stance_change.c @@ -0,0 +1,84 @@ +#include "global.h" +#include "test/battle.h" + + +SINGLE_BATTLE_TEST("Stance Change changes Aegislash from Shield to Blade when using a damaging move") +{ + u16 move; + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_SWIFT; } + PARAMETRIZE { move = MOVE_GROWL; } + GIVEN { + PLAYER(SPECIES_AEGISLASH_SHIELD); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + if (move != MOVE_GROWL) { + ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } else { + NONE_OF { + ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } + } + ANIMATION(ANIM_TYPE_MOVE, move, player); + } THEN { + if (move != MOVE_GROWL) + EXPECT_EQ(player->species, SPECIES_AEGISLASH_BLADE); + else + EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD); + } +} + +SINGLE_BATTLE_TEST("Stance Change changes Aegislash from Blade to Shield when using King's Shield") +{ + u16 move; + PARAMETRIZE { move = MOVE_PROTECT; } + PARAMETRIZE { move = MOVE_KINGS_SHIELD; } + GIVEN { + PLAYER(SPECIES_AEGISLASH_BLADE); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + if (move == MOVE_KINGS_SHIELD) { + ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } else { + NONE_OF { + ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } + } + ANIMATION(ANIM_TYPE_MOVE, move, player); + } THEN { + if (move == MOVE_KINGS_SHIELD) + EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD); + else + EXPECT_EQ(player->species, SPECIES_AEGISLASH_BLADE); + } +} + +SINGLE_BATTLE_TEST("Stance Change doesn't change Aegislash to Shield if King's Shield is called by a different move - Sleep Talk") +{ + KNOWN_FAILING; // Currently does change form + GIVEN { + ASSUME(gMovesInfo[MOVE_SLEEP_TALK].effect == EFFECT_SLEEP_TALK); + PLAYER(SPECIES_AEGISLASH_BLADE) { Moves(MOVE_KINGS_SHIELD, MOVE_SLEEP_TALK); Status1(STATUS1_SLEEP_TURN(3)); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + NONE_OF { + ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_KINGS_SHIELD, player); + } THEN { + EXPECT_EQ(player->species, SPECIES_AEGISLASH_BLADE); + } +} + +TO_DO_BATTLE_TEST("Stance Change doesn't change Aegislash to Shield if King's Shield is called by a different move - Me First"); From 4ddcef8944404172c0bae53f3f72dda8fb1abf94 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Sun, 1 Dec 2024 17:17:55 -0800 Subject: [PATCH 452/544] Update docs/scope.md Co-authored-by: Bassoonian --- docs/scope.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scope.md b/docs/scope.md index 5db9102ca8..21f401b29e 100644 --- a/docs/scope.md +++ b/docs/scope.md @@ -11,7 +11,7 @@ This document is a guide for contributors and Senate to decide if a feature is w # Guidelines -A pull request meets the scope crtieria if: +A pull request meets the scope criteria if: * The feature does not belong to a category considered “not in scope” AND * The feature belongs to a category considered “in scope” From 8d262e7bd282580d5472d3e54abd812359ece554 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Mon, 2 Dec 2024 15:12:09 +0100 Subject: [PATCH 453/544] Removed testing strings for automatic line breaks (#5757) --- src/battle_message.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 0dbb0c76a4..51d41d947e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -166,11 +166,6 @@ const u8 gText_drastically[] = _("drastically "); const u8 gText_severely[] = _("severely "); static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to normal!"); // Unused -// Remove these when done testing -static const u8 sTest_TempTestText1[] = _("This is a text for testing stuff."); -static const u8 sTest_TempTestText2[] = _("This is a text for testing stuff that should be two lines."); -static const u8 sTest_TempTestText3[] = _("This is a text for testing stuff that should be three lines so it has to have some extra text."); - const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { [STRINGID_TRAINER1LOSETEXT] = COMPOUND_STRING("{B_TRAINER1_LOSE_TEXT}"), From 65587be4d75e3f38732e6797bce1b1ba54bdf1d3 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Mon, 2 Dec 2024 09:26:48 -0800 Subject: [PATCH 454/544] Update scope.md --- docs/scope.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/scope.md b/docs/scope.md index 21f401b29e..896be8e280 100644 --- a/docs/scope.md +++ b/docs/scope.md @@ -5,8 +5,8 @@ This document is a guide for contributors and Senate to decide if a feature is w # Definitions * **Showdown Supported (SS)**: A core series game who's metagame can be played on Showdown. - * Notably, this is every [core series game](https://bulbapedia.bulbagarden.net/wiki/Core_series#List_of_core_series_games) except Pokémon Legends: Arceus and Pokémon Legends: Z-A. -* **Base Expansion Version**: A .gba file built from an unmodified `master` branch of `pokeemerald-expansion`. + * Notably, this is every [core series game](https://bulbapedia.bulbagarden.net/wiki/Core_series#List_of_core_series_games) except Pokémon Legends: Arceus. +* **Base Expansion Version**: "A .gba file built from an unmodified `master` or `upcoming` branch of `pokeemerald-expansion`. * **Vanilla Emerald Version**: A .gba file built from an unmodified `master` branch of pret's `pokeemerald`. # Guidelines From d9baebafab9adaa693ca574a4473b0937c175563 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 2 Dec 2024 15:44:46 -0300 Subject: [PATCH 455/544] Fixed changelog links to changelog 1.10 (#5758) --- docs/SUMMARY.md | 2 +- docs/changelogs/{1.10.0 => 1.10.x}/1.10.0.md | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/changelogs/{1.10.0 => 1.10.x}/1.10.0.md (100%) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index cb02bb306e..a0c58cb1c6 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -19,7 +19,7 @@ - [How to use the Testing System](tutorials/how_to_testing_system.md) - [Changelog](./CHANGELOG.md) - [1.10.x]() - - [Version 1.10.0](changelogs/1.9.x/1.9.4.md) + - [Version 1.10.0](changelogs/1.10.x/1.10.0.md) - [1.9.x]() - [Version 1.9.4](changelogs/1.9.x/1.9.4.md) - [Version 1.9.3](changelogs/1.9.x/1.9.3.md) diff --git a/docs/changelogs/1.10.0/1.10.0.md b/docs/changelogs/1.10.x/1.10.0.md similarity index 100% rename from docs/changelogs/1.10.0/1.10.0.md rename to docs/changelogs/1.10.x/1.10.0.md From 9b06f7e4924604b8f69619009829ab0ba1dee437 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:01:49 -0800 Subject: [PATCH 456/544] Update scope.md --- docs/scope.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/scope.md b/docs/scope.md index 896be8e280..1bec4f2db7 100644 --- a/docs/scope.md +++ b/docs/scope.md @@ -41,8 +41,7 @@ A pull request meets the scope criteria if: 5. **Non-SS Gimmicks**: Adds Gimmicks that have NOT appeared in a Showdown-supported title 6. **Non-SS Battle Types**: Adds Special Battle Types that have NOT appeared in a Showdown-supported title 7. **Duplicate Feature UI**: Adds functionality that duplicates the core functionality of an existing vanilla feature -8. **Vanilla Link Compatibility**: Link compatibility with vanilla -9. **External Program**: External programs +8. **Vanilla Link Compatibility**: Link compatibility with vanilla ## Discussion Required Categories @@ -51,3 +50,5 @@ Pull Requests that fall into this category should be brought up to maintainers, 1. **Developer Ease of Use:** Lowers barrier of entry for developers to use existing behavior 2. **Fangame Features:** Adds a popular feature from other fangames 3. **Popular Non-SS Features:** Exceptions can be made for uniquely popular or requested features (Drowsy, PLA Legend Plate, etc.) +4. **External Program**: External programs like poryscript, porymoves, etc. + From 3cd89c6e1961a7da6c653e3c311e191da4cee800 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 2 Dec 2024 11:49:06 -0800 Subject: [PATCH 457/544] Added scope document link to website --- docs/SUMMARY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index ac4698fdc3..168a8b5e51 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -64,3 +64,4 @@ - [Version 0.9.0](changelogs/0.9.x/0.9.0.md) - [Team Procedures]() - [How to make an Expansion version](team_procedures/expansion_versions.md) + - [Scope Guidelines](docs/scope.md) From 0d31f3b972c0469114302c6e7cc2cc18284d64e3 Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Mon, 2 Dec 2024 11:50:21 -0800 Subject: [PATCH 458/544] Fixed broken link to scope doc --- docs/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 168a8b5e51..e0f2a62bed 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -64,4 +64,4 @@ - [Version 0.9.0](changelogs/0.9.x/0.9.0.md) - [Team Procedures]() - [How to make an Expansion version](team_procedures/expansion_versions.md) - - [Scope Guidelines](docs/scope.md) + - [Scope Guidelines](scope.md) From 70224f0ea390aa7c97718029c24d367507fdd50f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:15:29 +0100 Subject: [PATCH 459/544] Fixes items preventing other switch in effects (#5732) Co-authored-by: Pawkkie <61265402+Pawkkie@users.noreply.github.com> --- data/battle_scripts_1.s | 6 +- include/battle_scripts.h | 1 + include/battle_util.h | 28 +- src/battle_main.c | 2 +- src/battle_script_commands.c | 8 +- src/battle_util.c | 317 +++++++++++------------ test/battle/hold_effect/booster_energy.c | 25 ++ test/battle/hold_effect/cure_status.c | 27 ++ 8 files changed, 230 insertions(+), 184 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 3d24cbfdf0..b38dc4b7f8 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -10079,6 +10079,10 @@ BattleScript_BerserkGeneRet_End: end3 BattleScript_BoosterEnergyEnd2:: + call BattleScript_BoosterEnergyRet + end2 + +BattleScript_BoosterEnergyRet:: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 call BattleScript_AbilityPopUpScripting printstring STRINGID_BOOSTERENERGYACTIVATES @@ -10086,7 +10090,7 @@ BattleScript_BoosterEnergyEnd2:: printstring STRINGID_STATWASHEIGHTENED waitmessage B_WAIT_TIME_MED removeitem BS_SCRIPTING - end2 + return BattleScript_EffectSnow:: attackcanceler diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 1148c955e5..3c58b28e1e 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -518,6 +518,7 @@ extern const u8 BattleScript_AromaVeilProtectsRet[]; extern const u8 BattleScript_LowerAtkSpAtk[]; extern const u8 BattleScript_Terastallization[]; extern const u8 BattleScript_BoosterEnergyEnd2[]; +extern const u8 BattleScript_BoosterEnergyRet[]; extern const u8 BattleScript_TeraShellDistortingTypeMatchups[]; extern const u8 BattleScript_TeraFormChange[]; diff --git a/include/battle_util.h b/include/battle_util.h index e3fc7d869f..82f4ed2ce1 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -65,16 +65,20 @@ enum { #define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS >= GEN_6 // For the first argument of ItemBattleEffects, to deteremine which block of item effects to try -#define ITEMEFFECT_ON_SWITCH_IN 0 -#define ITEMEFFECT_NORMAL 1 -#define ITEMEFFECT_DUMMY 2 // Unused, empty -#define ITEMEFFECT_MOVE_END 3 -#define ITEMEFFECT_KINGSROCK 4 -#define ITEMEFFECT_TARGET 5 -#define ITEMEFFECT_ORBS 6 -#define ITEMEFFECT_LIFEORB_SHELLBELL 7 -#define ITEMEFFECT_USE_LAST_ITEM 8 // move end effects for just the battler, not whole field -#define ITEMEFFECT_STATS_CHANGED 9 // For White Herb and Eject Pack +enum ItemEffect +{ + ITEMEFFECT_NONE, + ITEMEFFECT_ON_SWITCH_IN, + ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN, + ITEMEFFECT_NORMAL, + ITEMEFFECT_MOVE_END, + ITEMEFFECT_KINGSROCK, + ITEMEFFECT_TARGET, + ITEMEFFECT_ORBS, + ITEMEFFECT_LIFEORB_SHELLBELL, + ITEMEFFECT_USE_LAST_ITEM, // move end effects for just the battler, not whole field + ITEMEFFECT_STATS_CHANGED, // For White Herb and Eject Pack +}; #define WEATHER_HAS_EFFECT ((!IsAbilityOnField(ABILITY_CLOUD_NINE) && !IsAbilityOnField(ABILITY_AIR_LOCK))) @@ -208,7 +212,7 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move); bool32 CanBattlerEscape(u32 battler); // no ability check void BattleScriptExecute(const u8 *BS_ptr); void BattleScriptPushCursorAndCallback(const u8 *BS_ptr); -u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn); +u32 ItemBattleEffects(enum ItemEffect, u32 battler, bool32 moveTurn); void ClearVariousBattlerFlags(u32 battler); void HandleAction_RunBattleScript(void); u32 SetRandomTarget(u32 battler); @@ -265,7 +269,7 @@ void TryRestoreHeldItems(void); bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item); void TrySaveExchangedItem(u32 battler, u16 stolenItem); bool32 IsPartnerMonFromSameTrainer(u32 battler); -u8 TryHandleSeed(u32 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute); +u32 TryHandleSeed(u32 battler, u32 terrainFlag, u32 statId, u32 itemId, enum ItemEffect caseID); bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes); void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast); bool32 CompareStat(u32 battler, u8 statId, u8 cmpTo, u8 cmpKind); diff --git a/src/battle_main.c b/src/battle_main.c index ecad0d4e82..075dd3dd3c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3900,7 +3900,7 @@ static void TryDoEventsBeforeFirstTurn(void) case FIRST_TURN_EVENTS_ITEM_EFFECTS: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest { - if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++], FALSE)) + if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN, gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++], FALSE)) return; } gBattleStruct->switchInBattlerCounter = 0; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 29c1c02edc..12a2e215bf 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10410,16 +10410,16 @@ static void Cmd_various(void) switch (GetBattlerHoldEffectParam(battler)) { case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, FALSE); + effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, item, ITEMEFFECT_NONE); break; case HOLD_EFFECT_PARAM_GRASSY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, FALSE); + effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, item, ITEMEFFECT_NONE); break; case HOLD_EFFECT_PARAM_MISTY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, FALSE); + effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, item, ITEMEFFECT_NONE); break; case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, FALSE); + effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, item, ITEMEFFECT_NONE); break; } diff --git a/src/battle_util.c b/src/battle_util.c index 5238bbfc53..b376a20920 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6799,7 +6799,7 @@ bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId) return FALSE; } -static u8 HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, bool32 end2) +static u32 HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, enum ItemEffect caseID) { if (HasEnoughHpToEatBerry(battler, (B_CONFUSE_BERRIES_HEAL >= GEN_7 ? 4 : 2), itemId) && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) @@ -6817,7 +6817,7 @@ static u8 HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, bool32 end2) gBattlerAbility = battler; } gBattleScripting.battler = battler; - if (end2) + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { if (GetFlavorRelationByPersonality(gBattleMons[battler].personality, flavorId) < 0) BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); @@ -6838,7 +6838,7 @@ static u8 HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, bool32 end2) return 0; } -static u8 StatRaiseBerry(u32 battler, u32 itemId, u32 statId, bool32 end2) +static u32 StatRaiseBerry(u32 battler, u32 itemId, u32 statId, enum ItemEffect caseID) { if (CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN) && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, itemId), itemId)) { @@ -6852,7 +6852,7 @@ static u8 StatRaiseBerry(u32 battler, u32 itemId, u32 statId, bool32 end2) gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; gBattleScripting.animArg2 = 0; - if (end2) + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); } @@ -6863,10 +6863,10 @@ static u8 StatRaiseBerry(u32 battler, u32 itemId, u32 statId, bool32 end2) } return ITEM_STATS_CHANGE; } - return 0; + return ITEM_NO_EFFECT; } -static u8 RandomStatRaiseBerry(u32 battler, u32 itemId, bool32 end2) +static u32 RandomStatRaiseBerry(u32 battler, u32 itemId, enum ItemEffect caseID) { s32 i; u16 stringId; @@ -6902,7 +6902,7 @@ static u8 RandomStatRaiseBerry(u32 battler, u32 itemId, bool32 end2) gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + i + 1; gBattleScripting.animArg2 = 0; - if (end2) + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); } @@ -6917,12 +6917,12 @@ static u8 RandomStatRaiseBerry(u32 battler, u32 itemId, bool32 end2) return 0; } -static u8 TrySetMicleBerry(u32 battler, u32 itemId, bool32 end2) +static u32 TrySetMicleBerry(u32 battler, u32 itemId, enum ItemEffect caseID) { if (HasEnoughHpToEatBerry(battler, 4, itemId)) { gBattleStruct->usedMicleBerry |= 1u << battler; - if (end2) + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { BattleScriptExecute(BattleScript_MicleBerryActivateEnd2); } @@ -6985,7 +6985,7 @@ static u8 DamagedStatBoostBerryEffect(u32 battler, u8 statId, u8 category) return 0; } -u8 TryHandleSeed(u32 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute) +u32 TryHandleSeed(u32 battler, u32 terrainFlag, u32 statId, u32 itemId, enum ItemEffect caseID) { if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) { @@ -6995,7 +6995,7 @@ u8 TryHandleSeed(u32 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 exe SET_STATCHANGER(statId, 1, FALSE); gBattleScripting.animArg1 = STAT_ANIM_PLUS1 + statId; gBattleScripting.animArg2 = 0; - if (execute) + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); } @@ -7009,7 +7009,7 @@ u8 TryHandleSeed(u32 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 exe return 0; } -static u32 ItemRestorePp(u32 battler, u32 itemId, bool32 execute) +static u32 ItemRestorePp(u32 battler, u32 itemId, enum ItemEffect caseID) { struct Pokemon *party = GetBattlerParty(battler); struct Pokemon *mon = &party[gBattlerPartyIndexes[battler]]; @@ -7037,7 +7037,7 @@ static u32 ItemRestorePp(u32 battler, u32 itemId, bool32 execute) PREPARE_MOVE_BUFFER(gBattleTextBuff1, move); - if (execute) + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { BattleScriptExecute(BattleScript_BerryPPHealEnd2); } @@ -7056,7 +7056,7 @@ static u32 ItemRestorePp(u32 battler, u32 itemId, bool32 execute) return 0; } -static u8 ItemHealHp(u32 battler, u32 itemId, bool32 end2, bool32 percentHeal) +static u32 ItemHealHp(u32 battler, u32 itemId, enum ItemEffect caseID, bool32 percentHeal) { if (!(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) @@ -7072,7 +7072,7 @@ static u8 ItemHealHp(u32 battler, u32 itemId, bool32 end2, bool32 percentHeal) gBattleMoveDamage *= 2; gBattlerAbility = battler; // in SWSH, berry juice shows ability pop up but has no effect. This is mimicked here - if (end2) + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { BattleScriptExecute(BattleScript_ItemHealHP_RemoveItemEnd2); } @@ -7153,9 +7153,9 @@ static bool32 GetMentalHerbEffect(u32 battler) return ret; } -static u8 TryConsumeMirrorHerb(u32 battler, bool32 execute) +static u32 TryConsumeMirrorHerb(u32 battler, enum ItemEffect caseID) { - u8 effect = 0; + u32 effect = 0; if (gProtectStructs[battler].eatMirrorHerb) { @@ -7164,7 +7164,7 @@ static u8 TryConsumeMirrorHerb(u32 battler, bool32 execute) gBattleScripting.battler = battler; gProtectStructs[battler].eatMirrorHerb = 0; ChooseStatBoostAnimation(battler); - if (execute) + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) { BattleScriptExecute(BattleScript_MirrorHerbCopyStatChangeEnd2); } @@ -7178,7 +7178,7 @@ static u8 TryConsumeMirrorHerb(u32 battler, bool32 execute) return effect; } -static inline u32 TryBoosterEnergy(u32 battler) +static inline u32 TryBoosterEnergy(u32 battler, enum ItemEffect caseID) { if (gBattleStruct->boosterEnergyActivates & (1u << battler) || gBattleMons[battler].status2 & STATUS2_TRANSFORMED) return ITEM_NO_EFFECT; @@ -7189,7 +7189,15 @@ static inline u32 TryBoosterEnergy(u32 battler) PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); gBattlerAbility = gBattleScripting.battler = battler; gBattleStruct->boosterEnergyActivates |= 1u << battler; - BattleScriptExecute(BattleScript_BoosterEnergyEnd2); + if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL) + { + BattleScriptExecute(BattleScript_BoosterEnergyEnd2); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BoosterEnergyRet; + } return ITEM_EFFECT_OTHER; } @@ -7224,59 +7232,59 @@ static u8 ItemEffectMoveEnd(u32 battler, u16 holdEffect) { case HOLD_EFFECT_MICLE_BERRY: if (B_HP_BERRIES >= GEN_4) - effect = TrySetMicleBerry(battler, gLastUsedItem, FALSE); + effect = TrySetMicleBerry(battler, gLastUsedItem, ITEMEFFECT_NONE); break; case HOLD_EFFECT_RESTORE_HP: if (B_HP_BERRIES >= GEN_4) - effect = ItemHealHp(battler, gLastUsedItem, FALSE, FALSE); + effect = ItemHealHp(battler, gLastUsedItem, ITEMEFFECT_NONE, FALSE); break; case HOLD_EFFECT_RESTORE_PCT_HP: if (B_BERRIES_INSTANT >= GEN_4) - effect = ItemHealHp(battler, gLastUsedItem, FALSE, TRUE); + effect = ItemHealHp(battler, gLastUsedItem, ITEMEFFECT_NONE, TRUE); break; case HOLD_EFFECT_RESTORE_PP: if (B_BERRIES_INSTANT >= GEN_4) - effect = ItemRestorePp(battler, gLastUsedItem, FALSE); + effect = ItemRestorePp(battler, gLastUsedItem, ITEMEFFECT_NONE); break; case HOLD_EFFECT_CONFUSE_SPICY: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, FALSE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, ITEMEFFECT_NONE); break; case HOLD_EFFECT_CONFUSE_DRY: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, FALSE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, ITEMEFFECT_NONE); break; case HOLD_EFFECT_CONFUSE_SWEET: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, FALSE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, ITEMEFFECT_NONE); break; case HOLD_EFFECT_CONFUSE_BITTER: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, FALSE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, ITEMEFFECT_NONE); break; case HOLD_EFFECT_CONFUSE_SOUR: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, FALSE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, ITEMEFFECT_NONE); break; case HOLD_EFFECT_ATTACK_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, FALSE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, ITEMEFFECT_NONE); break; case HOLD_EFFECT_DEFENSE_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, FALSE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, ITEMEFFECT_NONE); break; case HOLD_EFFECT_SPEED_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, FALSE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, ITEMEFFECT_NONE); break; case HOLD_EFFECT_SP_ATTACK_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, FALSE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, ITEMEFFECT_NONE); break; case HOLD_EFFECT_SP_DEFENSE_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, FALSE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, ITEMEFFECT_NONE); break; case HOLD_EFFECT_ENIGMA_BERRY: // consume and heal if hit by super effective move if (B_BERRIES_INSTANT >= GEN_4) @@ -7292,7 +7300,7 @@ static u8 ItemEffectMoveEnd(u32 battler, u16 holdEffect) break; case HOLD_EFFECT_RANDOM_STAT_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = RandomStatRaiseBerry(battler, gLastUsedItem, FALSE); + effect = RandomStatRaiseBerry(battler, gLastUsedItem, ITEMEFFECT_NONE); break; case HOLD_EFFECT_CURE_PAR: if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && !UnnerveOn(battler, gLastUsedItem)) @@ -7427,20 +7435,79 @@ static u8 ItemEffectMoveEnd(u32 battler, u16 holdEffect) effect = ITEM_STATS_CHANGE; break; case HOLD_EFFECT_MIRROR_HERB: - effect = TryConsumeMirrorHerb(battler, FALSE); + effect = TryConsumeMirrorHerb(battler, ITEMEFFECT_NONE); break; } return effect; } -u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) +static inline bool32 TryCureStatus(u32 battler, enum ItemEffect caseId) { - int i = 0, moveType; - u8 effect = ITEM_NO_EFFECT; - u32 battlerHoldEffect = 0, atkHoldEffect; - u8 atkHoldEffectParam; - u16 atkItem; + u32 effect = ITEM_NO_EFFECT; + u32 string = 0; + + if ((gBattleMons[battler].status1 & STATUS1_ANY || gBattleMons[battler].status2 & STATUS2_CONFUSION) && !UnnerveOn(battler, gLastUsedItem)) + { + if (gBattleMons[battler].status1 & STATUS1_PSN_ANY) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + string++; + } + if (gBattleMons[battler].status1 & STATUS1_SLEEP) + { + gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + string++; + } + if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + string++; + } + if (gBattleMons[battler].status1 & STATUS1_BURN) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + string++; + } + if (gBattleMons[battler].status1 & STATUS1_FREEZE || gBattleMons[battler].status1 & STATUS1_FROSTBITE) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + string++; + } + if (gBattleMons[battler].status2 & STATUS2_CONFUSION) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); + string++; + } + if (string <= 1) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; + gBattleMons[battler].status1 = 0; + RemoveConfusionStatus(battler); + if (caseId == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseId == ITEMEFFECT_NORMAL) + { + BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); + } + else + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; + } + effect = ITEM_STATUS_CHANGE; + } + + return effect; +} + +u32 ItemBattleEffects(enum ItemEffect caseID, u32 battler, bool32 moveTurn) +{ + u32 moveType = 0; + u32 effect = ITEM_NO_EFFECT; + u32 battlerHoldEffect = 0, atkHoldEffect = 0; + u32 atkHoldEffectParam = 0; + u32 atkItem = 0; if (caseID != ITEMEFFECT_USE_LAST_ITEM) { @@ -7454,7 +7521,10 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) switch (caseID) { + case ITEMEFFECT_NONE: + break; case ITEMEFFECT_ON_SWITCH_IN: + case ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN: if (!gSpecialStatuses[battler].switchInItemDone) { switch (battlerHoldEffect) @@ -7476,43 +7546,43 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_CONFUSE_SPICY: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, caseID); break; case HOLD_EFFECT_CONFUSE_DRY: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, caseID); break; case HOLD_EFFECT_CONFUSE_SWEET: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, caseID); break; case HOLD_EFFECT_CONFUSE_BITTER: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, caseID); break; case HOLD_EFFECT_CONFUSE_SOUR: if (B_BERRIES_INSTANT >= GEN_4) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, caseID); break; case HOLD_EFFECT_ATTACK_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, caseID); break; case HOLD_EFFECT_DEFENSE_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, caseID); break; case HOLD_EFFECT_SPEED_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, caseID); break; case HOLD_EFFECT_SP_ATTACK_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, caseID); break; case HOLD_EFFECT_SP_DEFENSE_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, caseID); break; case HOLD_EFFECT_CRITICAL_UP: if (B_BERRIES_INSTANT >= GEN_4 @@ -7527,7 +7597,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_RANDOM_STAT_UP: if (B_BERRIES_INSTANT >= GEN_4) - effect = RandomStatRaiseBerry(battler, gLastUsedItem, TRUE); + effect = RandomStatRaiseBerry(battler, gLastUsedItem, caseID); break; case HOLD_EFFECT_CURE_PAR: if (B_BERRIES_INSTANT >= GEN_4 @@ -7589,59 +7659,16 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_CURE_STATUS: - if (B_BERRIES_INSTANT >= GEN_4 - && (gBattleMons[battler].status1 & STATUS1_ANY || gBattleMons[battler].status2 & STATUS2_CONFUSION) - && !UnnerveOn(battler, gLastUsedItem)) - { - i = 0; - if (gBattleMons[battler].status1 & STATUS1_PSN_ANY) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - i++; - } - if (gBattleMons[battler].status1 & STATUS1_SLEEP) - { - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - i++; - } - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - i++; - } - if (gBattleMons[battler].status1 & STATUS1_BURN) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - i++; - } - if (gBattleMons[battler].status1 & STATUS1_FREEZE || gBattleMons[battler].status1 & STATUS1_FROSTBITE) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - i++; - } - if (gBattleMons[battler].status2 & STATUS2_CONFUSION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - i++; - } - if (i <= 1) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; - gBattleMons[battler].status1 = 0; - RemoveConfusionStatus(battler); - BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); - effect = ITEM_STATUS_CHANGE; - } + if (B_BERRIES_INSTANT >= GEN_4) + effect = TryCureStatus(battler, caseID); break; case HOLD_EFFECT_RESTORE_HP: if (B_BERRIES_INSTANT >= GEN_4) - effect = ItemHealHp(battler, gLastUsedItem, TRUE, FALSE); + effect = ItemHealHp(battler, gLastUsedItem, caseID, FALSE); break; case HOLD_EFFECT_RESTORE_PCT_HP: if (B_BERRIES_INSTANT >= GEN_4) - effect = ItemHealHp(battler, gLastUsedItem, TRUE, TRUE); + effect = ItemHealHp(battler, gLastUsedItem, caseID, TRUE); break; case HOLD_EFFECT_AIR_BALLOON: effect = ITEM_EFFECT_OTHER; @@ -7660,16 +7687,16 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) switch (GetBattlerHoldEffectParam(battler)) { case HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, gLastUsedItem, TRUE); + effect = TryHandleSeed(battler, STATUS_FIELD_ELECTRIC_TERRAIN, STAT_DEF, gLastUsedItem, caseID); break; case HOLD_EFFECT_PARAM_GRASSY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, gLastUsedItem, TRUE); + effect = TryHandleSeed(battler, STATUS_FIELD_GRASSY_TERRAIN, STAT_DEF, gLastUsedItem, caseID); break; case HOLD_EFFECT_PARAM_MISTY_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, gLastUsedItem, TRUE); + effect = TryHandleSeed(battler, STATUS_FIELD_MISTY_TERRAIN, STAT_SPDEF, gLastUsedItem, caseID); break; case HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN: - effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, gLastUsedItem, TRUE); + effect = TryHandleSeed(battler, STATUS_FIELD_PSYCHIC_TERRAIN, STAT_SPDEF, gLastUsedItem, caseID); break; } break; @@ -7709,10 +7736,10 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = ITEM_STATS_CHANGE; break; case HOLD_EFFECT_MIRROR_HERB: - effect = TryConsumeMirrorHerb(battler, TRUE); + effect = TryConsumeMirrorHerb(battler, caseID); break; case HOLD_EFFECT_BOOSTER_ENERGY: - effect = TryBoosterEnergy(battler); + effect = TryBoosterEnergy(battler, caseID); break; } if (effect != 0) @@ -7736,15 +7763,15 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) { case HOLD_EFFECT_RESTORE_HP: if (!moveTurn) - effect = ItemHealHp(battler, gLastUsedItem, TRUE, FALSE); + effect = ItemHealHp(battler, gLastUsedItem, caseID, FALSE); break; case HOLD_EFFECT_RESTORE_PCT_HP: if (!moveTurn) - effect = ItemHealHp(battler, gLastUsedItem, TRUE, TRUE); + effect = ItemHealHp(battler, gLastUsedItem, caseID, TRUE); break; case HOLD_EFFECT_RESTORE_PP: if (!moveTurn) - effect = ItemRestorePp(battler, gLastUsedItem, TRUE); + effect = ItemRestorePp(battler, gLastUsedItem, caseID); break; case HOLD_EFFECT_RESTORE_STATS: effect = RestoreWhiteHerbStats(battler); @@ -7786,43 +7813,43 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_CONFUSE_SPICY: if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SPICY, caseID); break; case HOLD_EFFECT_CONFUSE_DRY: if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_DRY, caseID); break; case HOLD_EFFECT_CONFUSE_SWEET: if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SWEET, caseID); break; case HOLD_EFFECT_CONFUSE_BITTER: if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_BITTER, caseID); break; case HOLD_EFFECT_CONFUSE_SOUR: if (!moveTurn) - effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, TRUE); + effect = HealConfuseBerry(battler, gLastUsedItem, FLAVOR_SOUR, caseID); break; case HOLD_EFFECT_ATTACK_UP: if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_ATK, caseID); break; case HOLD_EFFECT_DEFENSE_UP: if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_DEF, caseID); break; case HOLD_EFFECT_SPEED_UP: if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPEED, caseID); break; case HOLD_EFFECT_SP_ATTACK_UP: if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPATK, caseID); break; case HOLD_EFFECT_SP_DEFENSE_UP: if (!moveTurn) - effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, TRUE); + effect = StatRaiseBerry(battler, gLastUsedItem, STAT_SPDEF, caseID); break; case HOLD_EFFECT_CRITICAL_UP: if (!moveTurn && !(gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) @@ -7836,7 +7863,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_RANDOM_STAT_UP: if (!moveTurn) - effect = RandomStatRaiseBerry(battler, gLastUsedItem, TRUE); + effect = RandomStatRaiseBerry(battler, gLastUsedItem, caseID); break; case HOLD_EFFECT_CURE_PAR: if (gBattleMons[battler].status1 & STATUS1_PARALYSIS && !UnnerveOn(battler, gLastUsedItem)) @@ -7894,49 +7921,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) } break; case HOLD_EFFECT_CURE_STATUS: - if ((gBattleMons[battler].status1 & STATUS1_ANY || gBattleMons[battler].status2 & STATUS2_CONFUSION) && !UnnerveOn(battler, gLastUsedItem)) - { - i = 0; - if (gBattleMons[battler].status1 & STATUS1_PSN_ANY) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - i++; - } - if (gBattleMons[battler].status1 & STATUS1_SLEEP) - { - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - i++; - } - if (gBattleMons[battler].status1 & STATUS1_PARALYSIS) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - i++; - } - if (gBattleMons[battler].status1 & STATUS1_BURN) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - i++; - } - if (gBattleMons[battler].status1 & STATUS1_FREEZE || gBattleMons[battler].status1 & STATUS1_FROSTBITE) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - i++; - } - if (gBattleMons[battler].status2 & STATUS2_CONFUSION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - i++; - } - if (i <= 1) - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CURED_PROBLEM; - else - gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_NORMALIZED_STATUS; - gBattleMons[battler].status1 = 0; - RemoveConfusionStatus(battler); - BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); - effect = ITEM_STATUS_CHANGE; - } + effect = TryCureStatus(battler, caseID); break; case HOLD_EFFECT_MENTAL_HERB: if (GetMentalHerbEffect(battler)) @@ -7949,7 +7934,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) break; case HOLD_EFFECT_MICLE_BERRY: if (!moveTurn) - effect = TrySetMicleBerry(battler, gLastUsedItem, TRUE); + effect = TrySetMicleBerry(battler, gLastUsedItem, caseID); break; case HOLD_EFFECT_BERSERK_GENE: BufferStatChange(battler, STAT_ATK, STRINGID_STATROSE); @@ -7967,10 +7952,10 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = ITEM_STATS_CHANGE; break; case HOLD_EFFECT_MIRROR_HERB: - effect = TryConsumeMirrorHerb(battler, TRUE); + effect = TryConsumeMirrorHerb(battler, caseID); break; case HOLD_EFFECT_BOOSTER_ENERGY: - effect = TryBoosterEnergy(battler); + effect = TryBoosterEnergy(battler, caseID); break; } diff --git a/test/battle/hold_effect/booster_energy.c b/test/battle/hold_effect/booster_energy.c index a63f462b72..072eb8df60 100644 --- a/test/battle/hold_effect/booster_energy.c +++ b/test/battle/hold_effect/booster_energy.c @@ -209,3 +209,28 @@ SINGLE_BATTLE_TEST("Booster Energy can't be tricked if a Paradox species is invo MESSAGE("But it failed!"); } } + +DOUBLE_BATTLE_TEST("Booster Energy triggers correctly for all battlers if multiple fainted the previous turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CATERPIE) { HP(1); } + PLAYER(SPECIES_GOUGING_FIRE) { Item(ITEM_BOOSTER_ENERGY); } + PLAYER(SPECIES_IRON_MOTH) { Item(ITEM_BOOSTER_ENERGY); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_FLUTTER_MANE) { Item(ITEM_BOOSTER_ENERGY); } + OPPONENT(SPECIES_CATERPIE); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EXPLOSION); + SEND_OUT(opponentRight, 3); + SEND_OUT(opponentLeft, 2); + SEND_OUT(playerRight, 3); + SEND_OUT(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + ABILITY_POPUP(playerLeft, ABILITY_PROTOSYNTHESIS); + ABILITY_POPUP(playerRight, ABILITY_QUARK_DRIVE); + ABILITY_POPUP(opponentLeft, ABILITY_PROTOSYNTHESIS); + } +} diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index d954983f88..133eeafb41 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -265,3 +265,30 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft STATUS_ICON(player, poison: TRUE); } } + +DOUBLE_BATTLE_TEST("Lum Berry correctly cures all battlers if multiple fainted the previous turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CATERPIE) { HP(1); } + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); Status1(STATUS1_BURN); } + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); Status1(STATUS1_POISON); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_CATERPIE) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); Status1(STATUS1_PARALYSIS); } + OPPONENT(SPECIES_CATERPIE); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EXPLOSION); + SEND_OUT(opponentRight, 3); + SEND_OUT(opponentLeft, 2); + SEND_OUT(playerRight, 3); + SEND_OUT(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + } THEN { + EXPECT_EQ(playerLeft->status1, STATUS1_NONE); + EXPECT_EQ(playerRight->status1, STATUS1_NONE); + EXPECT_EQ(opponentLeft->status1, STATUS1_NONE); + + } +} From 5c180a0b09cec08ddc42ac84ccceef86de217095 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 4 Dec 2024 11:30:19 -0300 Subject: [PATCH 460/544] Added FONT_SHORT_NARROWER (#5101) --- charmap.txt | 1 + data/scripts/debug.inc | 119 ++++++++++++++++++++++++ graphics/fonts/latin_short_narrower.png | Bin 0 -> 4374 bytes graphics/fonts/latin_small_narrower.png | Bin 7037 -> 4397 bytes graphics_file_rules.mk | 3 + include/fonts.h | 2 + include/text.h | 1 + src/debug.c | 11 +++ src/fonts.c | 36 +++++++ src/text.c | 77 ++++++++++++++- 10 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 graphics/fonts/latin_short_narrower.png diff --git a/charmap.txt b/charmap.txt index 63c2f6ebe1..3a2081e304 100644 --- a/charmap.txt +++ b/charmap.txt @@ -465,6 +465,7 @@ FONT_SMALL_NARROW = FC 06 08 FONT_NARROWER = FC 06 0A FONT_SMALL_NARROWER = FC 06 0B FONT_SHORT_NARROW = FC 06 0C +FONT_SHORT_NARROWER = FC 06 0D @ colors diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 4851c87c40..9da3f529fc 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -447,3 +447,122 @@ Debug_EventScript_EWRAMCounters:: Debug_EventScript_EWRAMCounters_Text:: .string "Follower Steps: {STR_VAR_1}.\n" .string "Fishing Chain: {STR_VAR_2}.$" + +Debug_EventScript_FontTest_Text_1:: + .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "Angel Adept Blind Bodice Clique\n" + .string "Coast Dunce Docile Enact Eosin\l" + .string "Furlong Focal Gnome Gondola Human\l" + .string "Hoist Inlet Iodine Justin Jocose\l" + .string "Knoll Koala Linden Loads Milliner\l" + .string "Modal Number Nodule Onset Oddball\l" + .string "Pneumo Poncho Quanta Qophs Rhone\l" + .string "Roman Snout Sodium Tundra Tocsin\l" + .string "Uncle Udder Vulcan Vocal Whale\l" + .string "Woman Xmas Xenon Yunnan Young\l" + .string "Zloty Zodiac.$" + +Debug_EventScript_FontTest_Text_2:: + .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "Angel angel adept for the nuance loads\n" + .string "of the arena cocoa and quaalude. Blind\l" + .string "blind bodice for the submit oboe of the\l" + .string "club snob and abbot. Clique clique\l" + .string "coast for the pouch loco of the franc\l" + .string "assoc and accede. Dunce dunce docile\l" + .string "for the loudness mastodon of the\l" + .string "loud statehood and huddle.$" + +Debug_EventScript_FontTest_Text_3:: + .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "Enact enact eosin for the quench coed\n" + .string "of the pique canoe and bleep. Furlong\l" + .string "furlong focal for the genuflect\l" + .string "profound of the motif aloof and offers.\l" + .string "Gnome gnome gondola for the impugn\l" + .string "logos of the unplug analog and smuggle.\l" + .string "Human human hoist for the buddhist\l" + .string "alcohol of the riyadh caliph and\l" + .string "bathhouse.$" + +Debug_EventScript_FontTest_Text_4:: + .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "Inlet inlet iodine for the quince\n" + .string "champion of the ennui scampi and shiite.\l" + .string "Justin justin jocose for the djibouti\l" + .string "sojourn of the oranj raj and hajjis.\l" + .string "Knoll knoll koala for the banknote\l" + .string "lookout of the dybbuk outlook and\l" + .string "trekked. Linden linden loads for the\l" + .string "ulna monolog of the consul menthol and\l" + .string "shallot.$" + +Debug_EventScript_FontTest_Text_5:: + .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "Milliner milliner modal for the alumna\n" + .string "solomon of the album custom and summon.\l" + .string "Number number nodule for the unmade\l" + .string "economic of the shotgun bison and\l" + .string "tunnel. Onset onset oddball for the\l" + .string "abandon podium of the antiquo tempo\l" + .string "and moonlit. Pneumo pneumo poncho for\l" + .string "the dauphin opossum of the holdup\l" + .string "bishop and supplies.$" + +Debug_EventScript_FontTest_Text_6:: + .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "Quanta quanta qophs for the inquest\n" + .string "sheqel of the cinq coq and suqqu. Rhone\l" + .string "rhone roman for the burnt porous of the\l" + .string "lemur clamor and carrot. Snout snout\l" + .string "sodium for the ensnare bosom of the\l" + .string "genus pathos and missing. Tundra\l" + .string "tundra tocsin for the nutmeg isotope\l" + .string "of the peasant ingot and ottoman.$" + +Debug_EventScript_FontTest_Text_7:: + .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "Uncle uncle udder for the dunes cloud\n" + .string "of the hindu thou and continuum. Vulcan\l" + .string "vulcan vocal for the alluvial ovoid of\l" + .string "the yugoslav chekhov and revved. Whale\l" + .string "whale woman for the meanwhile blowout\l" + .string "of the forepaw meadow and glowworm.\l" + .string "Xmas xmas xenon for the bauxite\l" + .string "doxology of the tableaux equinox and\l" + .string "exxon.$" + +Debug_EventScript_FontTest_Text_8:: + .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "Yunnan yunnan young for the dynamo\n" + .string "coyote of the obloquy employ and\l" + .string "sayyid. Zloty zloty zodiac for the gizmo\l" + .string "ozone of the franz laissez and buzzing.$" + +Debug_PrintFontTest:: + msgbox Debug_EventScript_FontTest_Text_1, MSGBOX_DEFAULT + msgbox Debug_EventScript_FontTest_Text_2, MSGBOX_DEFAULT + msgbox Debug_EventScript_FontTest_Text_3, MSGBOX_DEFAULT + msgbox Debug_EventScript_FontTest_Text_4, MSGBOX_DEFAULT + msgbox Debug_EventScript_FontTest_Text_5, MSGBOX_DEFAULT + msgbox Debug_EventScript_FontTest_Text_6, MSGBOX_DEFAULT + msgbox Debug_EventScript_FontTest_Text_7, MSGBOX_DEFAULT + msgbox Debug_EventScript_FontTest_Text_8, MSGBOX_DEFAULT + releaseall + end + +Debug_EventScript_FontTest:: + lockall + goto Debug_PrintFontTest +@ goto_if_eq VAR_RESULT, 0, Debug_NoPokemon +@ dynmultipush Debug_EventScript_InflictStatus1_Text_Single, 0 +@ dynmultipush Debug_EventScript_InflictStatus1_Text_PartyWide, 1 +@ dynmultipush Debug_EventScript_InflictStatus1_Text_Close, 2 +@ dynmultistack 0, 0, FALSE, 3 FALSE, 0, NULL +@ switch VAR_RESULT +@ case 0, Debug_EventScript_InflictStatus1_Single +@ case 1, Debug_EventScript_InflictStatus1_Party +@ case 2, Debug_EventScript_InflictStatus1_Close +@Debug_EventScript_InflictStatus1_Close: +@ releaseall +@ end diff --git a/graphics/fonts/latin_short_narrower.png b/graphics/fonts/latin_short_narrower.png new file mode 100644 index 0000000000000000000000000000000000000000..9c79ae474fdc289bea5a2332d0847001c3aeb190 GIT binary patch literal 4374 zcmcIoc{J3E+yBnjObjM8wnU@sA}-mBAz8AFN>TQ!C`@rJBijr`DqE7uI;But`Eh_>>JASNb2yyex&KqPhKFK*Hwgw^w!QLuTwQrVoKT(y%48}rbX;ys1dSZ%{V-l=;FZc$bO}czc6hz zjd=0!X#7jV47YHuf&8~M{39GSiU^RLC)HEx(MV$3_E$D3%ngy~d;mc6IUrWkvdNx9o>T&BZ{8EmXc_yOB zV9T^F!Y<9+6C;c#Hg1)*ZxT4AvBf`D^mmt(n~QoVkKY~y#UPtq2@ZERCO{U-;^%|M zVsXvOkD%Bt-^=nwDKnMl{VFw6eO_v-04#z{o9|^FUjLAI>@^FY7fGVhVnRN}rmOqtif3Q2x@oNpRJ-$v9s1K4=0^V@d0+-Paq+ z9G5{$AW5R3rogeevpQ||phUILCH!dPp$pTheF8-3S02;|atQ2IQ$1r)Xs6)Y(&$h& zafgx}fNrC`VKvTi+I^IaSXs9B%FLLJ0N zPmR8ZeAMq{!tEN%7cgPY4d%c-So~&h<18bt^x<&Wez_Lf{+Xt%KWu|_Cu?uG@@9VX z%&8OFFHiUH~yRB;>R^{#Y)F50bt|Dq<*kM}A4m z8tKUMc0&H__rMz}19f?om7_a`wt~`;mkIymphlpsN+dg^xTy34KtmpV#!y=D}R)k-ir!Mm&%i`Igfmhs;gr<`s3HHYEPTJA>{9YL( zGG9vit!ouKqW&-MMC$ztaJVGKlwfVz_DS*R34JJC*p)GU2#&h|COjt|3jV8{Q8>Bx zHfq5Mp4Zc_jeOf|fsreEv(K%1k)W%LsQuNtu`ux{f z*hYq_GvU*KawK82@*T~m!R^8QwOhW-ZBX184Gi9-MZs2Mzt^fPzDNd3rv8~<*5xJU zTeV0!P3N<9a+sQUGXfN53fa&dcEf~8M;?RKITBZbyMNx?>2(= z*DP^G<-><<@4YU$8lp9(8~$90-6uA>U(VIOtyNq6RYwvG#ZRAnxZ7>O83 z-_K+ZC_y_pvW;vE8HU;s#&9vXaD+CrZV+9lgr0!Tbv|nAT8n_p?SlV(t^cYy2FcL8 zM^)vt7smW}?h)39MLyv&-&sjM+fSciePde*oV9=k0Xt49#h}wBOpv&Vd!kSl30dBE zp(ej+z$=ZiPTX3`7h4D$GIRxYHuJv{We9FSaa%}35a7y>$4)!42^xlb7W0zT{WQIpbs3v`sTL0tMK-# zo`wvu-VJ?1-@c4!u$}56Z#z71d61b_Z>-Vq#TRmCJ9ML;-oM8^?MjH+t{;30wLko06xU#CaIsRvBnflqw*Oo67JQmS)sawfU> z62PADIvQF?)qwG;^vR~TaH~tBf8d{;Xus%*FI+v`!~{uPp{+xa1k%eMD^#BlIw(Q8 z-S%rg7`FL%7Dlqg)Dqz>v}zkPo)23~r<;U`6P5~$oPkxEfA}MQqcaSkS}uMvqiH6q zUZ}8{em@5I)caqGIXyW-m=??kkfP)q#wHdS%IcY z>fr7(q-!mDWLo>tk&To>b^zpULoO=|h`vIO1|^-}yOsy4v!7|h>Y9Lc@Q~()c(#;w z=gtEC!9jB^(7t+ets%MmwX_3Z;8YYPj#}Q`9up*mo0KnY`6G0l3FDqA)()3m8j3t`v9SxLGz7-V z`*@idb4!|V1Cy%j=2!td90{kAv>z`dtdy7V@Xso5TX@IXM|)8 zpspY06O1%bq@*!xSD+j6~5HX;s)VQ;AaO8y}PfxDFS>2nDR_KX< zxp&vz_GD*2cPBDIle?&XLc+f+{FqDYANuTxc*iA-daoGJx%B{&?2o9nsTzaFowrZI zQ%m)pd_l5U^+NJ&iO++}{h@?Q!&R+Ojc;r<~C!FmY*x4_jN)6avXmZK6l z?LTei|4QK9VA}v483FfH=Et26Z%drjLkH-YWdg9hFi4gmsdpiKo5`Mi*?tVZ?ue(p zZ>a&g*34qM)?m^&8O|SG=A}3q+pW6A7|_bTU*&Sw5hGr!@vzfr34@e=(Nlk5=4(EN zh)vBf>bXuXTxdZ}$`J|?dk36TFVuQ#v1*YeYi7}zA%7EvEU>Lgp8z>*aC1#Mtx2M8 zj;=Rm$LkPzH)CEvtr|P<)NeEyJjWLgP6s@n6msu%-HD~8MlWpW%56dg6$M3gJ)>P3 z^zj!3-rdUsl4rdFtIXmy;Dfn*YOg<(c*965FP54{dzTqsk=DPwbBx@)zEe>Dft<4% z{LEjk`N@_=G&A5ntJaC2(NwSMe;HG^4=hW*QsxMnj^zt1YDK^QVdQt+X(Am+4FfH@ ztrX~6LD+Mygut54?3F2U`{)2Ba_V?L}_L#_%;+coST7kxZZ4Lp5?F-9?EuGNg%1z55Z zOo}@OdRGp|?n{P?3lrsTf1A9>2_AO^w$@hvt|-`_&6V$DFTEbcrBFqs_4^#ZajGaD zZFJsg24ytL9uViH`y@zMsG9vUj1(tdM>9)7za(MG+MsW=kMZ0Lxv3!HGy->tG+{l$ z+ZW#E=vf666$QPP@7pM~L0A|=OyL_mcUbQonmam2gh(l7NS>dBPN{<*MG~6<2h2_@ z#MEwX;F_BlWFEBw4uV}jxZ{^;RniRVP{b>#gTT8@hia!lL5#YP+_M`g$;jOTiZU^$ zFbd&A-=3K;T>C3}g-4KHa20aAKe|+kN9cb@;s0Rme>md*SE%0o4g&8O7_p4b8H0t%Ilv80$Bu+I4f;wg1q9EOyk9q>0E_3V0J9Ty zV#0kv*A>y6uvhrZeLaq49MrBLFUKm*7vdLV%U205^6HAYuENXjO8Qn|+dsmmmn

vbi3sH%;uxH@mAbop3bWN@S?Tn?hQIO{fCW!f&vQ?=h}f=+7k_t z_2U92RND4$DGEF`R-bkK2Yn+vFR?tVtvtVXT{e5$VF7!E;1!QJFBt>A1wZJE@cD^! z=3R^)Ja=t96$>4E#jn49$C03s=5VxQMG0~-K;Nd&`Cc1$$(mj5Z#?}r_K7YLJ8^n<9%Nes91hHNZTIUlJxxY0GwI-6c7cO(ON3BD?FU_A0t*xy6-)2i~)%UMcry zTe}=$W-5ITPy`sDDX`g*+0!=Cp-mv%zn!{>D+%G4GW}iDm zb!SGD9ul{X?hD`C_$2Kwnppef>lf?XjxEilP+r4LGgP^Z=~eiXg3x;>N-f7|$nP!Y zE^@P24^u=zWx$1m^v`hOnE_nM%XE%DsH-KLguId^LJj_ygFPwl1-q=$9MFhUnK1Nj ovn^UG#rf&9=WQZPy0Z7U$%uzHu;0E_{QJ?cykKiuV&We2U-w!$FaQ7m literal 0 HcmV?d00001 diff --git a/graphics/fonts/latin_small_narrower.png b/graphics/fonts/latin_small_narrower.png index a183bed7cc286937c85ea2f7d7245fa41750ae85..d03f1b8ad0e2dd74778b0054d91943ab79943dc0 100644 GIT binary patch literal 4397 zcmeHLX*`tc-@otM48~Z}SV}UY=%lfn?24&`#29oCCu=7R!m%`EyDdp4TmMdSl4x;K zl0ju`GlOUoqB8ce?_oj`q{m$Ip`QFP{IBQg%pMVN;Yu^IEJ8xp**GYLRNxcX#jcy*Burxw@ae zg&}{PBgvMBJQEjPpv)SJHdn&Z`*_;mj5vJe8X8KTS&weC0ecCFy!dJ1VL)jHL6(`y zVMWM9DC%<3#0|aydP%wAkL70E4Y0lYHlu1^0{PjdA1|i>cEuwMb>&(m|^0yF=1GY-x#I&HMX!Q%% zUAUF>-zMbm;aC{?N3FhY?`0>OAx3gghW#*tBIBgYX!$CUb&9M)HlXff_+sFd8-UXL z$k>C7pQj$s=_qNbna1?%jUNILyGYRM5yT_t>>s8w5*|va&al+KPHhFpqZK~p2YK)>!BAcqV3i!R?;zJ`7xaxok9?rdP^tr@TJCoztNbc@1s$CuZknOySs%oCYg<& zZ+#)G)e6ehyk*pI#ZEz-P0d9A1$Q{`E58f&Q!hePFcNeMxeB$$Wlz&BwzSiAIjG- zR3^7qxdlNbyBw|d;df&I|4b(%GcPfREGo*=N(aA}1Yr>Q{fI|gkgRiUi{}R(qA6a& zJ<-N@iFlP^CC;L~<7hw7Z3ZLU2+`NYW2}_aak$0)?{m@3yDWCMMJ<`gKLvhbu#j&e zFS^4iCwmlF^+xf|w} zaBb=H0apRN-(q?vaq#vfqs(YTxT-T<=!Z(wC7Hmhx_Bbssk0!-8Xf2!4M=`|{!`ts+-6JM^QP6NYw`ekkl7s&iy=Q^Xbl~G zvW3BF0)&??b)zjo69^6NG5B4QRtbQfAr<;yyCDKq-;qe!s*!1qPQL-&zh%;s2v{I`7x zMn%$wJY~a*;|C*TXyRqn$oejTq2uyU4zGZ(5*c1V6S#?(iKN(Hb>2v_(vipAFB zFG5rSx`RIQ0YTxcR5bk)$$_U9$CiZH8U=Nv9Z1juGP8DjF-><=^`PLWn1jIF7xSH! z)hMFWA^82@QNrRvM_3Tb6)|-c!@t8Med(NL%IY0*Wne_-C{G~CuMi~DVh1oE%n@|{2IF}N89 zaR${C`GavcvQ$1V8a(mB*)k9K$#i)b2-%-X0>h}=J0YH&o@DCq?fxp>l zUp)x;tVzUwgr4qh-AmhNxfW=C+CikRCDi28dV204VJw>d0H`Ui%!Xe5V4M3--+j&v z2=cUoYExhfBDp;N0@nh~pGskrl z*UUk1UHc5cTqh4WOtYe29xlMs?KS+4(NfcwcfIqDP}N^l>FeQEk>W&XT6)2 z7A6J>`bcUWz}{>;vNqYtz8bJnE2Py3fhAFzfLSyrg=P$^B7HUDAI0y1SeV~0hV0R? zb4UziR~Y0K9ma=l4D+5g9yoj$-)>d0>-aKaaU>@m?GD6`5eiUx8M_qK%@fon1kz3U z02jEXiO=yjQZMq~!cSM;EH2^%FFk(aBTFzj+tgy)Eif3<~cX)2VBUCmC1P7|?q? znVmwfVCJjrS*Qq0Me(MlduA+jaTyPI?Y$wfN*pOR+Xq9snJkAbEwi zxdIX}=QipUf&>1Cvk!to32^6U`1X-qW+c!pJlv!Rs(kD{*M)^wwI6d>~* zGlr&_6LYH>-(E6C(^{FU+Hi+!1lTeYeJq?Gp(AntRe5>-DUau6?yG#{J=G#v9nX+r zok~-&u#6r$caI%AhWetYQJ(*37SWfK-701}cQdRjDlmYH$SG3RW6}ci&2~ION_!N` z(cOyr@L!EfjiH23H@D(JhvwV8&gYkJdA@CV*wC_zPO_Von+;vpexOXvN zbS)oiax-OKaV2I^=C1C`hpUB;8V~sYc{8v_8UW{nJh=)bc2VbLBz4jlSxQuAT#Hy_ zU3-&j4N_a96|bHK>PJ+(RS_QdwH+YFy0M5h;PuqT*L?EbYMnp$SxDN?@YWRD&h!!$ z_!pYj$-Khhai|Uo9cYa~l>RU|swK&K9r+S0+(cV)|Ck(DHIqu0)inYSvPeIyFM!V# z0R`b{1B>M$9lV_0tQ!a^+^@Aa{>D{_*S`wjZ-a9!S7sES)leR4h;;@ z1LwrNxkb-1KF!BM;H%gx;C6lZ>VIoEa|FBpi8*cim+7`$j{X1g|Gkg@-y^5Hn_>UV zmU1rP{+8hIVc1b9ApN!TYyGhTda{AV)ZYt8?D3h62kUFKMaeE+$l^oMe}0|Pd+p3< zxwZV*^8S}=54dZlXY>;EvT%M*uuG|UpJ2p(z>E`hHCdX7JqErIX3ZOQ%%CFb@hHhI zYF@3VTpW+}N2*_Ac@yz-RYX|0mTPsJⅇt1ES35YB82ljNRtAOe95-zvH&hbaLAMB(Lk6WY_1`)> zk+o%S>*2Vb4H1%OxW+E69;13Oh5eGu4yyurw2OlKhYUK!pQAj5cgfY0+#Z*yZU zddB|zbr747yy$aSJ$o&OCU)NmVny=^OO=;V`AbHijKL;J*8 ziQ`;_CESGJY^)4JTgYFQ(F{jxl1vM;bo^iJCjcdX(W4rxL@@{kxs76G&{{CoNch&G zVDM1UZip|A(jT#Sd4_kD8Emw*CL4?5jqkbZqnq@PD!$l~n0|t7Fo^rqx&6-poIXXc KetE(-<-Y*@4^nRc literal 7037 zcmeHKc{o&k`#)nD>l6>kl1!sV5@s-inb$J1m(gSw#ViLCW5D4Hm;RHVlvA(iY| z(xNPlDB7e&lop|AkBU6{gcx8A@nY9B0msH>{iJpV6k+?35~W#A;@#$$M;c34NQ~UE|Fe zWjvESd+@f@R#?BUzw+?`Lq3$<4u-uw+11|uuVkPU3KFudUD}CDE(YCR<7i+IqZHLe zE_`(aHRM%A-XVY3C#<(^eTb^pWB?C(;tYIN7gk?0q`B|gH)h%T`pNLi zjr&8RZKg)Yyt!(UTTxM&8l|LWJF6CkR>4$Sd$oR5$7si}-o`9(_RI86R)K=Cf|XfB zsps1c3bnrH(i*LXBNfW)l%2guWm}gG*I$XtXz-~y@yz<8f;~O~Jn$0hoFzo%BJFl0 z8LZK7ciQh$sH(8?{@z&8!luNuK>4$4f=B#_(wg+Xgvb$4X z>4CH+uJfZ!Ou;3&!ENxGce&?1WI}9QYfqi*Qtml}2n;-f1s66xfTa{E-rK+N@;cA1 z(d|=apGplee1&(_aV@y1s82viMb!v`&6dqvq`#%5y{Tzn%k-36!+D*3i#ZMThvErP z)A1QlbNP|n2s9Scm_lb!L1R9X4Rsv=SlRN~6k0gQLsG#|Mx-@rqUk&e$)H=Kd~qZU ziER&tFHa6Bc*36j2 z2}PUW@pv@G6m4p11X&ny<05$!zELDscMjq!h6Bi@aTshKgB6LK!=zAI(L8Gu3eqG0 zijT=Ak-o!6a=)su@^_Cp3PKr7_PiHF_D_~PM#$e} z{S@1rWQmgYuuQz{)FLc!CqRN8zrbQ-~l#bHvQax$2dP!P?I44qfZ5l*lpyIP}6jWK^q z$PpA?2;^Xma$`hB^Z!jrC3j(Pq5b3LMPE;pCm8j0 z^>rD+m_JHLjoRj1n0NLet}0yZ$9-{D)RBqteaIKq}6N zVhUo7uy`}5Dd-kZB`t8&5E|B$Zh^=BjLv0+@M0+(&@L3>5#kDJ&v~wp`tyZa`LlIw z7&uo2h%h6JnbE%!hW?f?dTwU?m9Z82-#D?FH~3-5Kz?6k(C~t0A^Q6;{Knbb*!eI1 zzSZKtxB~?JYmKqWc;hU{@>`5|NCY9aKQTzM*XJ==F2DvCmF2{E9=K_F&%G@6Yb-@j#843y`Y=1y_LQ^|XyJER1F}`8J@+QaeHWF^rC}L~_PY}3sx09jZ z`5vZ;1j%P}Dy*+pOn{g4RR9D)8m@iSi~eU2E}iIHr5eqbjcrD}695 zd&#^IZP~GKpDVggIc@viRCy9J^;US>kz+t>(Yo-M`V`80N@8Ek?L518cy(MZF&ecj1$jN&Z$23L`y{~(H zh#}Z^NROXMOFi+hJh?>C6`m3f|ELICB(b$oydUuDZR!BX=U=<#+lagnHYLaHsDc2` zLb1IEv7rpmK_^ykr=Q_#;|4tI00r@5ss8IxC%o%-X@=$KFH7i*2rIO`Bz1Bacq3}p zB3Hsvq5!}C-(@8N8^=@6UvPVmNVuN#HX*QOOkkdnErM?!DZV-2jJci~`}BzxPC9a- z*OTr>&5=e-*M#7lg1{VTwe_%gKCVyP7Kk{#5MUSk{Qf9=vxLO!RR%XcUsM$ut0u-3 zd))9OiC|vIUxF2j-2|*CJL#$uESTsnBA?B5yP6b563Ma`N>9reXiM}yOxA2k%J1(W6*CMV!3d^vQW{=V&O}EM{X4~D| zjn8_e*3Ks6)RLr6-j-;Vi~Gbl*z;w5evfNFvd;#=)MeN-1NKlZE`Fiu{&DjJ30yBb zahc#_LFR!yUHvjk?M&5E%!jd zYK1-f&dTV>#Av;pPO(ehiy1!&ppAq0fzv`LH%Fi9`980qq3-b;Qc7B;$Dn}0aQ*OnpS6$OHs&Doe zVE|j1BeCk!OP4AH?MUw*)f@qJkix0ja(HWM?1jZo0$&~Sh(99ffmq%|GRdDYiLtyG zAfE7kAEz$kxk?Ur_;Nwji)3!7;$SNQCWv)*$!OicCD{a~z^vr)(Ha7svV-E@^wtf- zbxsS56L;!8CLamHP2&#Q3XiXv)q?Y`RQjB&ugH{q<@-mV%3vzD7ke7Eh+>urRNKUa zq<#XzZ>izRWxXvV>OS3z_Lh8Xu-(-l$Z=Z8N}33#hg~qaI}`|uFK%BXG16r|B3@ab z0f@1pDcM+iaN(p$QP9dQQK*R3X5Hl1B(1cVwM%hIVZ$qA8iziQrk^p{JGC)cJ1nCw zs7s}>6o$E7+O~kbNr$YACdX7=OVfe#VEc%R3ij z)qdO~*Ibn=4ov@-H-J&mT`;3D>NLRNyN^TaldgUDgE?#ec+!^3$) zi*G^m?qcThTO%!b>;yQl@pho|4oWuXvg(cDzRB2`&9`BlShr~5aiAIgvC~p$gt*u2 z*HS0F`DR?r_7yPa)w%(2QFebQvD+lC;)LC?jig?UtXOO>Gdv#Mr^wuJ$^pP#FK*nQ zJqml(VCZWmtIyHNi?H*(CfOf))|uSAsqB+$$s6dg;Qft@uBWTEF_%NR-+ zB1xQxVI(aYt%}rFGL|E%y$O*%S#w0W&(sjDM)b`+u(_ut{nDq?p%pM0*p>^s_ze=x zCg#i5>nw-g>DVf`-CwBR2W-sN({wT0>(E3J7q(+ubfhprn6(kYE8G1u1EdR!-WsH^ zraTG zm4Dt+aUg`oyzKq$AQUJXisNMMy{(ERybr3sHI1 zw#j??To!aBcJzfU*mi@w94KkpA}=}_rgpS;y^5OTsHkXSbv*nM6+u57nLFD}K0Ofe zMb0yNivhA^pk%QbjKB4$_`aX4eW`@gr}6c6D2>J24t0MX`g3ODkMx_J9p;?p$R)G8iciG{+uu3wTj>n5J;t>SLUh{J;F2~R jLAY8!oVE2w&&W9OFF#gk*>)0og9cn3-5qLH2PgdxOU@pT diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 39d634e19d..9f1be162f4 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -248,6 +248,9 @@ $(FONTGFXDIR)/small_narrower.latfont: $(FONTGFXDIR)/latin_small_narrower.png $(FONTGFXDIR)/short_narrow.latfont: $(FONTGFXDIR)/latin_short_narrow.png $(GFX) $< $@ +$(FONTGFXDIR)/short_narrower.latfont: $(FONTGFXDIR)/latin_short_narrower.png + $(GFX) $< $@ + $(FONTGFXDIR)/small.hwjpnfont: $(FONTGFXDIR)/japanese_small.png $(GFX) $< $@ diff --git a/include/fonts.h b/include/fonts.h index a6be35db98..5e6a9ffad5 100644 --- a/include/fonts.h +++ b/include/fonts.h @@ -21,5 +21,7 @@ extern const u8 gFontSmallNarrowerLatinGlyphWidths[]; extern const u16 gFontSmallNarrowerLatinGlyphs[]; extern const u8 gFontShortNarrowLatinGlyphWidths[]; extern const u16 gFontShortNarrowLatinGlyphs[]; +extern const u8 gFontShortNarrowerLatinGlyphWidths[]; +extern const u16 gFontShortNarrowerLatinGlyphs[]; #endif // GUARD_FONTS_H diff --git a/include/text.h b/include/text.h index 55500868dc..a148410c2f 100644 --- a/include/text.h +++ b/include/text.h @@ -21,6 +21,7 @@ enum { FONT_NARROWER, FONT_SMALL_NARROWER, FONT_SHORT_NARROW, + FONT_SHORT_NARROWER, }; // Return values for font functions diff --git a/src/debug.c b/src/debug.c index f1c403fc1e..590e415b7e 100644 --- a/src/debug.c +++ b/src/debug.c @@ -89,6 +89,7 @@ enum UtilDebugMenu DEBUG_UTIL_MENU_ITEM_SAVEBLOCK, DEBUG_UTIL_MENU_ITEM_ROM_SPACE, DEBUG_UTIL_MENU_ITEM_WEATHER, + DEBUG_UTIL_MENU_ITEM_FONT_TEST, DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK, DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK, DEBUG_UTIL_MENU_ITEM_WATCHCREDITS, @@ -365,6 +366,7 @@ static void DebugAction_Util_CheckSaveBlock(u8 taskId); static void DebugAction_Util_CheckROMSpace(u8 taskId); static void DebugAction_Util_Weather(u8 taskId); static void DebugAction_Util_Weather_SelectId(u8 taskId); +static void DebugAction_Util_FontTest(u8 taskId); static void DebugAction_Util_CheckWallClock(u8 taskId); static void DebugAction_Util_SetWallClock(u8 taskId); static void DebugAction_Util_WatchCredits(u8 taskId); @@ -453,6 +455,7 @@ static void DebugAction_BerryFunctions_Weeds(u8 taskId); extern const u8 Debug_FlagsNotSetOverworldConfigMessage[]; extern const u8 Debug_FlagsNotSetBattleConfigMessage[]; extern const u8 Debug_FlagsAndVarNotSetBattleConfigMessage[]; +extern const u8 Debug_EventScript_FontTest[]; extern const u8 Debug_EventScript_CheckEVs[]; extern const u8 Debug_EventScript_CheckIVs[]; extern const u8 Debug_EventScript_InflictStatus1[]; @@ -525,6 +528,7 @@ static const u8 sDebugText_Util_SaveBlockSpace[] = _("Save Block space static const u8 sDebugText_Util_ROMSpace[] = _("ROM space…{CLEAR_TO 110}{RIGHT_ARROW}"); static const u8 sDebugText_Util_Weather[] = _("Set weather…{CLEAR_TO 110}{RIGHT_ARROW}"); static const u8 sDebugText_Util_Weather_ID[] = _("Weather ID: {STR_VAR_3}\n{STR_VAR_1}\n{STR_VAR_2}"); +static const u8 sDebugText_Util_FontTest[] = _("Font Test…{CLEAR_TO 110}{RIGHT_ARROW}"); static const u8 sDebugText_Util_CheckWallClock[] = _("Check wall clock…{CLEAR_TO 110}{RIGHT_ARROW}"); static const u8 sDebugText_Util_SetWallClock[] = _("Set wall clock…{CLEAR_TO 110}{RIGHT_ARROW}"); static const u8 sDebugText_Util_WatchCredits[] = _("Watch credits…{CLEAR_TO 110}{RIGHT_ARROW}"); @@ -714,6 +718,7 @@ static const struct ListMenuItem sDebugMenu_Items_Utilities[] = [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = {sDebugText_Util_SaveBlockSpace, DEBUG_UTIL_MENU_ITEM_SAVEBLOCK}, [DEBUG_UTIL_MENU_ITEM_ROM_SPACE] = {sDebugText_Util_ROMSpace, DEBUG_UTIL_MENU_ITEM_ROM_SPACE}, [DEBUG_UTIL_MENU_ITEM_WEATHER] = {sDebugText_Util_Weather, DEBUG_UTIL_MENU_ITEM_WEATHER}, + [DEBUG_UTIL_MENU_ITEM_FONT_TEST] = {sDebugText_Util_FontTest, DEBUG_UTIL_MENU_ITEM_FONT_TEST}, [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = {sDebugText_Util_CheckWallClock, DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK}, [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = {sDebugText_Util_SetWallClock, DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK}, [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = {sDebugText_Util_WatchCredits, DEBUG_UTIL_MENU_ITEM_WATCHCREDITS}, @@ -884,6 +889,7 @@ static void (*const sDebugMenu_Actions_Utilities[])(u8) = [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = DebugAction_Util_CheckSaveBlock, [DEBUG_UTIL_MENU_ITEM_ROM_SPACE] = DebugAction_Util_CheckROMSpace, [DEBUG_UTIL_MENU_ITEM_WEATHER] = DebugAction_Util_Weather, + [DEBUG_UTIL_MENU_ITEM_FONT_TEST] = DebugAction_Util_FontTest, [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = DebugAction_Util_CheckWallClock, [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = DebugAction_Util_SetWallClock, [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = DebugAction_Util_WatchCredits, @@ -2294,6 +2300,11 @@ static void DebugAction_Util_Weather_SelectId(u8 taskId) } } +static void DebugAction_Util_FontTest(u8 taskId) +{ + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_FontTest); +} + static void DebugAction_Util_CheckWallClock(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, PlayersHouse_2F_EventScript_CheckWallClock); diff --git a/src/fonts.c b/src/fonts.c index 2dcb0a7e78..2eb8ed062b 100644 --- a/src/fonts.c +++ b/src/fonts.c @@ -288,6 +288,42 @@ ALIGNED(4) const u8 gFontShortNarrowLatinGlyphWidths[] = { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, }; +ALIGNED(4) const u16 gFontShortNarrowerLatinGlyphs[] = INCBIN_U16("graphics/fonts/short_narrower.latfont"); +ALIGNED(4) const u8 gFontShortNarrowerLatinGlyphWidths[] = { + 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, + 8, 4, 4, 4, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, + 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 5, 8, 6, 6, 3, + 3, 3, 3, 3, 8, 8, 3, 5, 5, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 5, 5, 4, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, + 3, 3, 3, 3, 3, 3, 3, 5, 3, 7, 7, 7, 7, 0, 0, 3, + 4, 5, 6, 7, 4, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 3, 5, 3, + 5, 5, 5, 3, 3, 5, 5, 6, 3, 6, 6, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, + 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, + 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, + 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, +}; + ALIGNED(4) const u16 gFontSmallJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/small.hwjpnfont"); ALIGNED(4) const u16 gFontNormalJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/normal.hwjpnfont"); diff --git a/src/text.c b/src/text.c index acb2871a86..29ffc5ea3a 100644 --- a/src/text.c +++ b/src/text.c @@ -26,6 +26,7 @@ static u16 FontFunc_SmallNarrow(struct TextPrinter *); static u16 FontFunc_Narrower(struct TextPrinter *); static u16 FontFunc_SmallNarrower(struct TextPrinter *); static u16 FontFunc_ShortNarrow(struct TextPrinter *); +static u16 FontFunc_ShortNarrower(struct TextPrinter *); static void DecompressGlyph_Small(u16, bool32); static void DecompressGlyph_Normal(u16, bool32); static void DecompressGlyph_Short(u16, bool32); @@ -35,6 +36,7 @@ static void DecompressGlyph_Bold(u16); static void DecompressGlyph_Narrower(u16, bool32); static void DecompressGlyph_SmallNarrower(u16, bool32); static void DecompressGlyph_ShortNarrow(u16, bool32); +static void DecompressGlyph_ShortNarrower(u16, bool32); static u32 GetGlyphWidth_Small(u16, bool32); static u32 GetGlyphWidth_Normal(u16, bool32); static u32 GetGlyphWidth_Short(u16, bool32); @@ -43,6 +45,7 @@ static u32 GetGlyphWidth_SmallNarrow(u16, bool32); static u32 GetGlyphWidth_Narrower(u16, bool32); static u32 GetGlyphWidth_SmallNarrower(u16, bool32); static u32 GetGlyphWidth_ShortNarrow(u16, bool32); +static u32 GetGlyphWidth_ShortNarrower(u16, bool32); static EWRAM_DATA struct TextPrinter sTempTextPrinter = {0}; static EWRAM_DATA struct TextPrinter sTextPrinters[WINDOWS_MAX] = {0}; @@ -102,6 +105,7 @@ static const struct GlyphWidthFunc sGlyphWidthFuncs[] = { FONT_NARROWER, GetGlyphWidth_Narrower }, { FONT_SMALL_NARROWER, GetGlyphWidth_SmallNarrower }, { FONT_SHORT_NARROW, GetGlyphWidth_ShortNarrow }, + { FONT_SHORT_NARROWER, GetGlyphWidth_ShortNarrower }, }; struct @@ -260,6 +264,16 @@ static const struct FontInfo sFontInfos[] = .bgColor = 1, .shadowColor = 3, }, + [FONT_SHORT_NARROWER] = { + .fontFunction = FontFunc_ShortNarrower, + .maxLetterWidth = 5, + .maxLetterHeight = 14, + .letterSpacing = 0, + .lineSpacing = 0, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, + }, }; static const u8 sMenuCursorDimensions[][2] = @@ -277,6 +291,7 @@ static const u8 sMenuCursorDimensions[][2] = [FONT_NARROWER] = { 8, 15 }, [FONT_SMALL_NARROWER] = { 8, 8 }, [FONT_SHORT_NARROW] = { 8, 14 }, + [FONT_SHORT_NARROWER] = { 8, 14 }, }; static const u16 sFontBoldJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/bold.hwjpnfont"); @@ -850,6 +865,18 @@ static u16 FontFunc_ShortNarrow(struct TextPrinter *textPrinter) return RenderText(textPrinter); } +static u16 FontFunc_ShortNarrower(struct TextPrinter *textPrinter) +{ + struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); + + if (subStruct->hasFontIdBeenSet == FALSE) + { + subStruct->fontId = FONT_SHORT_NARROWER; + subStruct->hasFontIdBeenSet = TRUE; + } + return RenderText(textPrinter); +} + void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); @@ -1238,6 +1265,9 @@ static u16 RenderText(struct TextPrinter *textPrinter) case FONT_SHORT_NARROW: DecompressGlyph_ShortNarrow(currChar, textPrinter->japanese); break; + case FONT_SHORT_NARROWER: + DecompressGlyph_ShortNarrower(currChar, textPrinter->japanese); + break; case FONT_BRAILLE: break; } @@ -2161,6 +2191,50 @@ static u32 GetGlyphWidth_ShortNarrow(u16 glyphId, bool32 isJapanese) return gFontShortNarrowLatinGlyphWidths[glyphId]; } +static void DecompressGlyph_ShortNarrower(u16 glyphId, bool32 isJapanese) +{ + const u16 *glyphs; + + if (isJapanese == TRUE) + { + glyphs = gFontShortJapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); + DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); + DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8); + DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); // gCurGlyph + 0x20 + DecompressGlyphTile(glyphs + 0x88, gCurGlyph.gfxBufferBottom + 8); // gCurGlyph + 0x60 + gCurGlyph.width = gFontShortJapaneseGlyphWidths[glyphId]; + gCurGlyph.height = 14; + } + else + { + glyphs = gFontShortNarrowerLatinGlyphs + (0x20 * glyphId); + gCurGlyph.width = gFontShortNarrowerLatinGlyphWidths[glyphId]; + + if (gCurGlyph.width <= 8) + { + DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); + DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom); + } + else + { + DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop); + DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8); + DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom); + DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8); + } + + gCurGlyph.height = 14; + } +} + +static u32 GetGlyphWidth_ShortNarrower(u16 glyphId, bool32 isJapanese) +{ + if (isJapanese == TRUE) + return gFontShortJapaneseGlyphWidths[glyphId]; + else + return gFontShortNarrowerLatinGlyphWidths[glyphId]; +} + static const s8 sNarrowerFontIds[] = { [FONT_SMALL] = FONT_SMALL_NARROW, @@ -2175,7 +2249,8 @@ static const s8 sNarrowerFontIds[] = [FONT_BOLD] = -1, [FONT_NARROWER] = -1, [FONT_SMALL_NARROWER] = -1, - [FONT_SHORT_NARROW] = -1, + [FONT_SHORT_NARROW] = FONT_SHORT_NARROWER, + [FONT_SHORT_NARROWER] = -1, }; // If the narrowest font ID doesn't fit the text, we still return that From 93e733820c3d7736185c36d934ccb3889d609fa3 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Wed, 4 Dec 2024 07:54:39 -0800 Subject: [PATCH 461/544] Added instructions in PR template to make crediting people more clear (#5755) --- .github/pull_request_template.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 6a74e9fbd5..f083a2a23f 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -17,7 +17,8 @@ ## **People who collaborated with me in this PR** - + + ## Feature(s) this PR does NOT handle: From c714caa27aba5c838faca1509f41f98311073f47 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Wed, 4 Dec 2024 18:22:35 +0000 Subject: [PATCH 462/544] trainerproc: Fix showing incorrect error context (#5769) --- tools/trainerproc/main.c | 98 ++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c index 8b939a955f..f1bcf1bfa4 100644 --- a/tools/trainerproc/main.c +++ b/tools/trainerproc/main.c @@ -251,51 +251,6 @@ static bool set_parse_error(struct Parser *p, struct SourceLocation location, co return false; } -static bool show_parse_error(struct Parser *p) -{ - // Print error message. - int n = fprintf(stderr, "%s:%d: ", p->source->path, p->error_location.line); - fprintf(stderr, "error: %s\n", p->error); - - // Seek to the line. - int line, begin, end; - for (line = 1, begin = 0; begin < p->source->buffer_n; begin++) - { - if (p->error_location.line == line) - break; - if (p->source->buffer[begin] == '\n') - line++; - } - for (end = begin; end < p->source->buffer_n; end++) - { - if (p->source->buffer[end] == '\n') - break; - } - - // Print the source line. - fprintf(stderr, "%s:%d: %.*s\n", p->source->path, p->error_location.line, end - begin, &p->source->buffer[begin]); - - // Print caret pointing at the column. - fprintf(stderr, "%*s", n, ""); - for (int column = 1; column < p->error_location.column && begin + column < end; column++) - { - unsigned char c = p->source->buffer[begin + column]; - fputc(c == '\t' ? c : ' ', stderr); - } - fprintf(stderr, "^\n"); - - p->error = NULL; - p->fatal_error = true; - - return false; -} - -static bool set_show_parse_error(struct Parser *p, struct SourceLocation location, const char *error) -{ - set_parse_error(p, location, error); - return show_parse_error(p); -} - __attribute__((warn_unused_result)) static bool peek_char(struct Parser *p, unsigned char *c) { @@ -618,6 +573,59 @@ static bool match_move_identifier(struct Parser *p, struct Token *t) return true; } +static bool show_parse_error(struct Parser *p) +{ + // Print error message. + int n = fprintf(stderr, "%s:%d: ", p->source->path, p->error_location.line); + fprintf(stderr, "error: %s\n", p->error); + + struct Parser p_ = { + .source = p->source, + .location = { .line = 1, .column = 1 }, + .offset = 0, + }; + + for (;;) { + if (p->error_location.line == p_.location.line) + break; + if (!match_empty_line(&p_)) + skip_line(&p_); + if (match_eof(&p_)) + assert(false); + } + + int begin = p_.offset; + int end; + for (end = begin; end < p->source->buffer_n; end++) + { + if (p->source->buffer[end] == '\n') + break; + } + + // Print the source line. + fprintf(stderr, "%s:%d: %.*s\n", p->source->path, p->error_location.line, end - begin, &p->source->buffer[begin]); + + // Print caret pointing at the column. + fprintf(stderr, "%*s", n, ""); + for (int column = 1; column < p->error_location.column && begin + column < end; column++) + { + unsigned char c = p->source->buffer[begin + column]; + fputc(c == '\t' ? c : ' ', stderr); + } + fprintf(stderr, "^\n"); + + p->error = NULL; + p->fatal_error = true; + + return false; +} + +static bool set_show_parse_error(struct Parser *p, struct SourceLocation location, const char *error) +{ + set_parse_error(p, location, error); + return show_parse_error(p); +} + __attribute__((warn_unused_result)) static bool parse_section(struct Parser *p, struct Token *section) { From e605ffba539fd54f2a5d105493c2943a6bdd91c1 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 4 Dec 2024 18:22:16 -0300 Subject: [PATCH 463/544] Fix recorded battle link player loops (#2071) --- src/recorded_battle.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 42866c723b..ebd2a5800f 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -35,13 +35,13 @@ struct RecordedBattleSave { struct Pokemon playerParty[PARTY_SIZE]; struct Pokemon opponentParty[PARTY_SIZE]; - u8 playersName[MAX_BATTLERS_COUNT][PLAYER_NAME_LENGTH + 1]; - u8 playersGender[MAX_BATTLERS_COUNT]; - u32 playersTrainerId[MAX_BATTLERS_COUNT]; - u8 playersLanguage[MAX_BATTLERS_COUNT]; + u8 playersName[MAX_LINK_PLAYERS][PLAYER_NAME_LENGTH + 1]; + u8 playersGender[MAX_LINK_PLAYERS]; + u32 playersTrainerId[MAX_LINK_PLAYERS]; + u8 playersLanguage[MAX_LINK_PLAYERS]; u32 rngSeed; u32 battleFlags; - u8 playersBattlers[MAX_BATTLERS_COUNT]; + u8 playersBattlers[MAX_LINK_PLAYERS]; u16 opponentA; u16 opponentB; u16 partnerId; @@ -85,7 +85,7 @@ EWRAM_DATA static u32 sAI_Scripts = 0; EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0}; EWRAM_DATA static u16 sPlayerMonMoves[MAX_BATTLERS_COUNT / 2][MAX_MON_MOVES] = {0}; -EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0}; +EWRAM_DATA static struct PlayerInfo sPlayers[MAX_LINK_PLAYERS] = {0}; EWRAM_DATA static bool8 sIsPlaybackFinished = 0; EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0}; EWRAM_DATA static u8 sRecordMixFriendClass = 0; @@ -148,7 +148,7 @@ void RecordedBattle_SetTrainerInfo(void) gRecordedBattleMultiplayerId = GetMultiplayerId(); linkPlayersCount = GetLinkPlayerCount(); - for (i = 0; i < MAX_BATTLERS_COUNT; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { sPlayers[i].trainerId = gLinkPlayers[i].trainerId; sPlayers[i].gender = gLinkPlayers[i].gender; @@ -333,7 +333,7 @@ bool32 MoveRecordedBattleToSaveData(void) battleSave->opponentParty[i] = sSavedOpponentParty[i]; } - for (i = 0; i < MAX_BATTLERS_COUNT; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++) battleSave->playersName[i][j] = sPlayers[i].name[j]; @@ -535,7 +535,7 @@ static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src) gEnemyParty[i] = src->opponentParty[i]; } - for (i = 0; i < MAX_BATTLERS_COUNT; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { for (var = FALSE, j = 0; j < PLAYER_NAME_LENGTH + 1; j++) { From 3f98c782973c912907ecc941aa98e519d15b27fc Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 4 Dec 2024 19:38:23 -0300 Subject: [PATCH 464/544] Added POKEMART_LIST_END to avoid users accidentally removing it (#1947) --- asm/macros/event.inc | 7 +++++++ data/maps/BattleFrontier_Mart/scripts.inc | 4 +--- .../EverGrandeCity_PokemonLeague_1F/scripts.inc | 4 +--- data/maps/FallarborTown_Mart/scripts.inc | 4 +--- data/maps/FortreeCity_DecorationShop/scripts.inc | 8 ++------ data/maps/FortreeCity_Mart/scripts.inc | 4 +--- data/maps/LavaridgeTown_HerbShop/scripts.inc | 4 +--- data/maps/LavaridgeTown_Mart/scripts.inc | 4 +--- .../LilycoveCity_DepartmentStore_2F/scripts.inc | 8 ++------ .../LilycoveCity_DepartmentStore_3F/scripts.inc | 8 ++------ .../LilycoveCity_DepartmentStore_4F/scripts.inc | 8 ++------ .../LilycoveCity_DepartmentStore_5F/scripts.inc | 16 ++++------------ data/maps/MauvilleCity_Mart/scripts.inc | 4 +--- data/maps/MossdeepCity_Mart/scripts.inc | 4 +--- data/maps/OldaleTown_Mart/scripts.inc | 8 ++------ data/maps/PetalburgCity_Mart/scripts.inc | 8 ++------ .../Route104_PrettyPetalFlowerShop/scripts.inc | 4 +--- data/maps/RustboroCity_Mart/scripts.inc | 8 ++------ data/maps/SlateportCity/scripts.inc | 16 ++++------------ data/maps/SlateportCity_Mart/scripts.inc | 4 +--- data/maps/SootopolisCity_Mart/scripts.inc | 4 +--- data/maps/TrainerHill_Entrance/scripts.inc | 8 ++------ data/maps/VerdanturfTown_Mart/scripts.inc | 4 +--- 23 files changed, 43 insertions(+), 108 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index b91ac68210..66aeb8482d 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1108,6 +1108,13 @@ .4byte \products .endm + @ Used as the endpoint for a Pokemart item list + .macro pokemartlistend + .2byte ITEM_NONE + release + end + .endm + @ Opens the Pokemart system and treats the list of items as decorations. @ Products should be a list of .2byte decoration values preceded by an .align 2 .macro pokemartdecoration products:req diff --git a/data/maps/BattleFrontier_Mart/scripts.inc b/data/maps/BattleFrontier_Mart/scripts.inc index 6afe6a0186..f118476cfe 100644 --- a/data/maps/BattleFrontier_Mart/scripts.inc +++ b/data/maps/BattleFrontier_Mart/scripts.inc @@ -28,9 +28,7 @@ BattleFrontier_Mart_Pokemart: .2byte ITEM_ZINC .2byte ITEM_CARBOS .2byte ITEM_HP_UP - .2byte ITEM_NONE - release - end + pokemartlistend BattleFrontier_Mart_EventScript_OldMan:: msgbox BattleFrontier_Mart_Text_ChaperonGrandson, MSGBOX_NPC diff --git a/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc b/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc index c13e716975..37e691fa3b 100644 --- a/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc +++ b/data/maps/EverGrandeCity_PokemonLeague_1F/scripts.inc @@ -45,9 +45,7 @@ EverGrandeCity_PokemonLeague_1F_Pokemart: .2byte ITEM_FULL_HEAL .2byte ITEM_REVIVE .2byte ITEM_MAX_REPEL - .2byte ITEM_NONE - release - end + pokemartlistend @ The door guards only check for FLAG_BADGE06_GET because Winonas badge is the only one that can be skipped @ Its assumed the player has the remaining badges diff --git a/data/maps/FallarborTown_Mart/scripts.inc b/data/maps/FallarborTown_Mart/scripts.inc index cb92f28f52..0cdb11ee5e 100644 --- a/data/maps/FallarborTown_Mart/scripts.inc +++ b/data/maps/FallarborTown_Mart/scripts.inc @@ -25,9 +25,7 @@ FallarborTown_Mart_Pokemart: .2byte ITEM_X_DEFEND .2byte ITEM_DIRE_HIT .2byte ITEM_GUARD_SPEC - .2byte ITEM_NONE - release - end + pokemartlistend FallarborTown_Mart_EventScript_Woman:: msgbox FallarborTown_Mart_Text_DecidingSkittyEvolve, MSGBOX_NPC diff --git a/data/maps/FortreeCity_DecorationShop/scripts.inc b/data/maps/FortreeCity_DecorationShop/scripts.inc index 4394312876..4da66f27b9 100644 --- a/data/maps/FortreeCity_DecorationShop/scripts.inc +++ b/data/maps/FortreeCity_DecorationShop/scripts.inc @@ -29,9 +29,7 @@ FortreeCity_DecorationShop_PokemartDecor_Desks: .2byte DECOR_BRICK_DESK .2byte DECOR_CAMP_DESK .2byte DECOR_HARD_DESK - .2byte DECOR_NONE - release - end + pokemartlistend FortreeCity_DecorationShop_EventScript_ClerkChairs:: lock @@ -53,9 +51,7 @@ FortreeCity_DecorationShop_PokemartDecor_Chairs: .2byte DECOR_BRICK_CHAIR .2byte DECOR_CAMP_CHAIR .2byte DECOR_HARD_CHAIR - .2byte DECOR_NONE - release - end + pokemartlistend FortreeCity_DecorationShop_Text_MerchandiseSentToPC: .string "Merchandise you buy here is sent to\n" diff --git a/data/maps/FortreeCity_Mart/scripts.inc b/data/maps/FortreeCity_Mart/scripts.inc index c37716bc85..0986e68c0c 100644 --- a/data/maps/FortreeCity_Mart/scripts.inc +++ b/data/maps/FortreeCity_Mart/scripts.inc @@ -23,9 +23,7 @@ FortreeCity_Mart_Pokemart: .2byte ITEM_REVIVE .2byte ITEM_SUPER_REPEL .2byte ITEM_WOOD_MAIL - .2byte ITEM_NONE - release - end + pokemartlistend FortreeCity_Mart_EventScript_Woman:: msgbox FortreeCity_Mart_Text_SuperRepelBetter, MSGBOX_NPC diff --git a/data/maps/LavaridgeTown_HerbShop/scripts.inc b/data/maps/LavaridgeTown_HerbShop/scripts.inc index dbe1b564ac..22e3851e9d 100644 --- a/data/maps/LavaridgeTown_HerbShop/scripts.inc +++ b/data/maps/LavaridgeTown_HerbShop/scripts.inc @@ -17,9 +17,7 @@ LavaridgeTown_HerbShop_Pokemart: .2byte ITEM_ENERGY_ROOT .2byte ITEM_HEAL_POWDER .2byte ITEM_REVIVAL_HERB - .2byte ITEM_NONE - release - end + pokemartlistend LavaridgeTown_HerbShop_EventScript_ExpertM:: msgbox LavaridgeTown_HerbShop_Text_HerbalMedicineWorksButMonWillDislike, MSGBOX_NPC diff --git a/data/maps/LavaridgeTown_Mart/scripts.inc b/data/maps/LavaridgeTown_Mart/scripts.inc index 001df31401..8df5d02dfc 100644 --- a/data/maps/LavaridgeTown_Mart/scripts.inc +++ b/data/maps/LavaridgeTown_Mart/scripts.inc @@ -22,9 +22,7 @@ LavaridgeTown_Mart_Pokemart: .2byte ITEM_REVIVE .2byte ITEM_SUPER_REPEL .2byte ITEM_X_SPEED - .2byte ITEM_NONE - release - end + pokemartlistend LavaridgeTown_Mart_EventScript_ExpertM:: msgbox LavaridgeTown_Mart_Text_XSpeedFirstStrike, MSGBOX_NPC diff --git a/data/maps/LilycoveCity_DepartmentStore_2F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_2F/scripts.inc index 478f5cfd31..0a502a4f0e 100644 --- a/data/maps/LilycoveCity_DepartmentStore_2F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_2F/scripts.inc @@ -36,9 +36,7 @@ LilycoveCity_DepartmentStore_2F_Pokemart1: .2byte ITEM_ICE_HEAL .2byte ITEM_AWAKENING .2byte ITEM_FLUFFY_TAIL - .2byte ITEM_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_2F_EventScript_ClerkRight:: lock @@ -62,9 +60,7 @@ LilycoveCity_DepartmentStore_2F_Pokemart2: .2byte ITEM_MAX_REPEL .2byte ITEM_WAVE_MAIL .2byte ITEM_MECH_MAIL - .2byte ITEM_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_2F_Text_LearnToUseItemsProperly: .string "Learn to use items properly.\n" diff --git a/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc index 20480068b8..bc42b293be 100644 --- a/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_3F/scripts.inc @@ -19,9 +19,7 @@ LilycoveCity_DepartmentStore_3F_Pokemart_Vitamins: .2byte ITEM_ZINC .2byte ITEM_CARBOS .2byte ITEM_HP_UP - .2byte ITEM_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_3F_EventScript_ClerkRight:: lock @@ -42,9 +40,7 @@ LilycoveCity_DepartmentStore_3F_Pokemart_StatBoosters: .2byte ITEM_DIRE_HIT .2byte ITEM_GUARD_SPEC .2byte ITEM_X_ACCURACY - .2byte ITEM_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_3F_EventScript_TriathleteM:: msgbox LilycoveCity_DepartmentStore_3F_Text_ItemsBestForTougheningPokemon, MSGBOX_NPC diff --git a/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc index 760abc600d..0d6403b206 100644 --- a/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_4F/scripts.inc @@ -29,9 +29,7 @@ LilycoveCity_DepartmentStore_4F_Pokemart_AttackTMs: .2byte ITEM_TM_THUNDER .2byte ITEM_TM_BLIZZARD .2byte ITEM_TM_HYPER_BEAM - .2byte ITEM_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_4F_EventScript_ClerkRight:: lock @@ -49,9 +47,7 @@ LilycoveCity_DepartmentStore_4F_Pokemart_DefenseTMs: .2byte ITEM_TM_SAFEGUARD .2byte ITEM_TM_REFLECT .2byte ITEM_TM_LIGHT_SCREEN - .2byte ITEM_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_4F_Text_AttackOrDefenseTM: .string "Hmm…\p" diff --git a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc index a9683d13c9..f75a48e708 100644 --- a/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc +++ b/data/maps/LilycoveCity_DepartmentStore_5F/scripts.inc @@ -41,9 +41,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Dolls: .2byte DECOR_SKITTY_DOLL .2byte DECOR_SWABLU_DOLL .2byte DECOR_GULPIN_DOLL - .2byte DECOR_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_5F_EventScript_ClerkMidLeft:: lock @@ -66,9 +64,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Cushions: .2byte DECOR_GRASS_CUSHION .2byte DECOR_FIRE_CUSHION .2byte DECOR_WATER_CUSHION - .2byte DECOR_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_5F_EventScript_ClerkMidRight:: lock @@ -91,9 +87,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Posters: .2byte DECOR_LONG_POSTER .2byte DECOR_SEA_POSTER .2byte DECOR_SKY_POSTER - .2byte DECOR_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_5F_EventScript_ClerkFarRight:: lock @@ -117,9 +111,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Mats: .2byte DECOR_GLITTER_MAT .2byte DECOR_JUMP_MAT .2byte DECOR_SPIN_MAT - .2byte DECOR_NONE - release - end + pokemartlistend LilycoveCity_DepartmentStore_5F_EventScript_PokefanF:: msgbox LilycoveCity_DepartmentStore_5F_Text_PlaceFullOfCuteDolls, MSGBOX_NPC diff --git a/data/maps/MauvilleCity_Mart/scripts.inc b/data/maps/MauvilleCity_Mart/scripts.inc index 4cf5bc20bb..3a416b5907 100644 --- a/data/maps/MauvilleCity_Mart/scripts.inc +++ b/data/maps/MauvilleCity_Mart/scripts.inc @@ -25,9 +25,7 @@ MauvilleCity_Mart_Pokemart: .2byte ITEM_GUARD_SPEC .2byte ITEM_DIRE_HIT .2byte ITEM_X_ACCURACY - .2byte ITEM_NONE - release - end + pokemartlistend MauvilleCity_Mart_EventScript_ExpertM:: msgbox MauvilleCity_Mart_Text_ItemsToTemporarilyElevateStats, MSGBOX_NPC diff --git a/data/maps/MossdeepCity_Mart/scripts.inc b/data/maps/MossdeepCity_Mart/scripts.inc index 50edddd09a..b66fbe4209 100644 --- a/data/maps/MossdeepCity_Mart/scripts.inc +++ b/data/maps/MossdeepCity_Mart/scripts.inc @@ -22,9 +22,7 @@ MossdeepCity_Mart_Pokemart: .2byte ITEM_MAX_REPEL .2byte ITEM_X_ATTACK .2byte ITEM_X_DEFEND - .2byte ITEM_NONE - release - end + pokemartlistend MossdeepCity_Mart_EventScript_Woman:: msgbox MossdeepCity_Mart_Text_ReviveIsFantastic, MSGBOX_NPC diff --git a/data/maps/OldaleTown_Mart/scripts.inc b/data/maps/OldaleTown_Mart/scripts.inc index 0b3c7b1a34..1e1aacbb10 100644 --- a/data/maps/OldaleTown_Mart/scripts.inc +++ b/data/maps/OldaleTown_Mart/scripts.inc @@ -18,9 +18,7 @@ OldaleTown_Mart_Pokemart_Basic: .2byte ITEM_ANTIDOTE .2byte ITEM_PARALYZE_HEAL .2byte ITEM_AWAKENING - .2byte ITEM_NONE - release - end + pokemartlistend OldaleTown_Mart_ExpandedItems:: pokemart OldaleTown_Mart_Pokemart_Expanded @@ -35,9 +33,7 @@ OldaleTown_Mart_Pokemart_Expanded: .2byte ITEM_ANTIDOTE .2byte ITEM_PARALYZE_HEAL .2byte ITEM_AWAKENING - .2byte ITEM_NONE - release - end + pokemartlistend OldaleTown_Mart_EventScript_Woman:: lock diff --git a/data/maps/PetalburgCity_Mart/scripts.inc b/data/maps/PetalburgCity_Mart/scripts.inc index abaa7b5b0e..27393c51bf 100644 --- a/data/maps/PetalburgCity_Mart/scripts.inc +++ b/data/maps/PetalburgCity_Mart/scripts.inc @@ -25,9 +25,7 @@ PetalburgCity_Mart_Pokemart_Basic: .2byte ITEM_X_ATTACK .2byte ITEM_X_DEFEND .2byte ITEM_ORANGE_MAIL - .2byte ITEM_NONE - release - end + pokemartlistend PetalburgCity_Mart_EventScript_ExpandedItems:: pokemart PetalburgCity_Mart_Pokemart_Expanded @@ -50,9 +48,7 @@ PetalburgCity_Mart_Pokemart_Expanded: .2byte ITEM_X_ATTACK .2byte ITEM_X_DEFEND .2byte ITEM_ORANGE_MAIL - .2byte ITEM_NONE - release - end + pokemartlistend PetalburgCity_Mart_EventScript_Woman:: msgbox PetalburgCity_Mart_Text_WeakWillGrowStronger, MSGBOX_NPC diff --git a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc index 5f0ec28fa5..e239ea658b 100644 --- a/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc +++ b/data/maps/Route104_PrettyPetalFlowerShop/scripts.inc @@ -59,9 +59,7 @@ Route104_PrettyPetalFlowerShop_Pokemart_Plants: .2byte DECOR_COLORFUL_PLANT .2byte DECOR_BIG_PLANT .2byte DECOR_GORGEOUS_PLANT - .2byte DECOR_NONE - release - end + pokemartlistend Route104_PrettyPetalFlowerShop_EventScript_WailmerPailGirl:: lock diff --git a/data/maps/RustboroCity_Mart/scripts.inc b/data/maps/RustboroCity_Mart/scripts.inc index 18120cb4de..5d6a7fe5f7 100644 --- a/data/maps/RustboroCity_Mart/scripts.inc +++ b/data/maps/RustboroCity_Mart/scripts.inc @@ -28,9 +28,7 @@ RustboroCity_Mart_Pokemart_Basic: .2byte ITEM_X_SPEED .2byte ITEM_X_ATTACK .2byte ITEM_X_DEFEND - .2byte ITEM_NONE - release - end + pokemartlistend RustboroCity_Mart_EventScript_PokemartExpanded:: pokemart RustboroCity_Mart_Pokemart_Expanded @@ -52,9 +50,7 @@ RustboroCity_Mart_Pokemart_Expanded: .2byte ITEM_X_SPEED .2byte ITEM_X_ATTACK .2byte ITEM_X_DEFEND - .2byte ITEM_NONE - release - end + pokemartlistend RustboroCity_Mart_EventScript_PokefanF:: msgbox RustboroCity_Mart_Text_BuyingHealsInCaseOfShroomish, MSGBOX_NPC diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc index ae3910750e..5438a7f364 100644 --- a/data/maps/SlateportCity/scripts.inc +++ b/data/maps/SlateportCity/scripts.inc @@ -154,9 +154,7 @@ SlateportCity_Pokemart_EnergyGuru: .2byte ITEM_ZINC .2byte ITEM_CALCIUM .2byte ITEM_HP_UP - .2byte ITEM_NONE - release - end + pokemartlistend SlateportCity_EventScript_EffortRibbonWoman:: lock @@ -514,9 +512,7 @@ SlateportCity_PokemartDecor_Dolls: .2byte DECOR_AZURILL_DOLL .2byte DECOR_MARILL_DOLL .2byte DECOR_SKITTY_DOLL - .2byte DECOR_NONE - release - end + pokemartlistend SlateportCity_EventScript_ComeBackWithSecretPower:: msgbox gText_ComeBackWithSecretPower, MSGBOX_DEFAULT @@ -550,9 +546,7 @@ SlateportCity_PokemartDecor: .2byte DECOR_A_NOTE_MAT .2byte DECOR_B_NOTE_MAT .2byte DECOR_C_HIGH_NOTE_MAT - .2byte DECOR_NONE - release - end + pokemartlistend SlateportCity_EventScript_PowerTMClerk:: lock @@ -568,9 +562,7 @@ SlateportCity_EventScript_PowerTMClerk:: SlateportCity_Pokemart_PowerTMs: .2byte ITEM_TM_HIDDEN_POWER .2byte ITEM_TM_SECRET_POWER - .2byte ITEM_NONE - release - end + pokemartlistend @ Scene with Capt Sterns interview and Team Aqua announcing plans to steal Submarine SlateportCity_EventScript_CaptStern:: diff --git a/data/maps/SlateportCity_Mart/scripts.inc b/data/maps/SlateportCity_Mart/scripts.inc index a0c0a8612e..ce7dd45b86 100644 --- a/data/maps/SlateportCity_Mart/scripts.inc +++ b/data/maps/SlateportCity_Mart/scripts.inc @@ -22,9 +22,7 @@ SlateportCity_Mart_Pokemart: .2byte ITEM_ESCAPE_ROPE .2byte ITEM_REPEL .2byte ITEM_HARBOR_MAIL - .2byte ITEM_NONE - release - end + pokemartlistend SlateportCity_Mart_EventScript_BlackBelt:: msgbox SlateportCity_Mart_Text_SomeItemsOnlyAtMart, MSGBOX_NPC diff --git a/data/maps/SootopolisCity_Mart/scripts.inc b/data/maps/SootopolisCity_Mart/scripts.inc index 3cade5fbc4..5539eb8be1 100644 --- a/data/maps/SootopolisCity_Mart/scripts.inc +++ b/data/maps/SootopolisCity_Mart/scripts.inc @@ -22,9 +22,7 @@ SootopolisCity_Mart_Pokemart: .2byte ITEM_X_ATTACK .2byte ITEM_X_DEFEND .2byte ITEM_SHADOW_MAIL - .2byte ITEM_NONE - release - end + pokemartlistend SootopolisCity_Mart_EventScript_FatMan:: lock diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index 2dd001a3ba..83a12e1c97 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -265,9 +265,7 @@ TrainerHill_Entrance_Pokemart_Basic: .2byte ITEM_DIRE_HIT .2byte ITEM_GUARD_SPEC .2byte ITEM_X_ACCURACY - .2byte ITEM_NONE - release - end + pokemartlistend TrainerHill_Entrance_EventScript_ExpandedPokemart:: pokemart TrainerHill_Entrance_Pokemart_Expanded @@ -289,9 +287,7 @@ TrainerHill_Entrance_Pokemart_Expanded: .2byte ITEM_DIRE_HIT .2byte ITEM_GUARD_SPEC .2byte ITEM_X_ACCURACY - .2byte ITEM_NONE - release - end + pokemartlistend TrainerHill_Entrance_Text_StillGettingReady: .string "This is the TRAINER HILL where\n" diff --git a/data/maps/VerdanturfTown_Mart/scripts.inc b/data/maps/VerdanturfTown_Mart/scripts.inc index 7eb340df2a..e67ccd0e60 100644 --- a/data/maps/VerdanturfTown_Mart/scripts.inc +++ b/data/maps/VerdanturfTown_Mart/scripts.inc @@ -24,9 +24,7 @@ VerdanturfTown_Mart_Pokemart: .2byte ITEM_REPEL .2byte ITEM_X_SPECIAL .2byte ITEM_FLUFFY_TAIL - .2byte ITEM_NONE - release - end + pokemartlistend VerdanturfTown_Mart_EventScript_Boy:: msgbox VerdanturfTown_Mart_Text_XSpecialIsCrucial, MSGBOX_NPC From 47768431a2973884cff5a0efb7c01a469bb543b9 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 5 Dec 2024 09:56:41 -0300 Subject: [PATCH 465/544] Fix test TIMEOUT messaging in summary (#5772) --- test/test_runner.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_runner.c b/test/test_runner.c index f7c4cf780e..1ff37fe8bc 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -490,6 +490,7 @@ static void Intr_Timer2(void) if (gTestRunnerState.state == STATE_RUN_TEST) gTestRunnerState.state = STATE_REPORT_RESULT; gTestRunnerState.result = TEST_RESULT_TIMEOUT; + Test_MgbaPrintf(":L%s:%d - TIMEOUT", gTestRunnerState.test->filename, SourceLine(0)); ReinitCallbacks(); IRQ_LR = ((uintptr_t)JumpToAgbMainLoop & ~1) + 4; } From 5483e05db65f2085fe8c4969eb3f1f9dcec3e1a0 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 5 Dec 2024 12:46:50 -0300 Subject: [PATCH 466/544] Fixed brace style inconsistencies --- src/AgbRfu_LinkManager.c | 2 ++ src/battle_anim_effects_1.c | 2 ++ src/battle_anim_effects_2.c | 4 +++ src/battle_anim_electric.c | 6 ++++ src/battle_anim_ghost.c | 2 ++ src/battle_anim_throw.c | 14 +++++++++ src/battle_controller_opponent.c | 12 ++++++-- src/battle_gfx_sfx_util.c | 8 +++++ src/battle_main.c | 34 ++++++++++++++++++++ src/battle_message.c | 6 ++++ src/battle_script_commands.c | 41 +++++++++++++++++++++---- src/battle_util.c | 10 ++++++ src/berry.c | 4 +++ src/berry_crush.c | 2 ++ src/bike.c | 2 ++ src/contest.c | 2 ++ src/contest_effect.c | 15 +++++++-- src/decompress.c | 12 ++++++++ src/evolution_graphics.c | 32 +++++++++++++++++++ src/field_camera.c | 2 ++ src/field_door.c | 2 ++ src/field_effect.c | 15 ++++++--- src/item_use.c | 12 ++++++++ src/librfu_sio32id.c | 2 ++ src/link_rfu_2.c | 11 +++++-- src/lottery_corner.c | 4 +++ src/mauville_old_man.c | 6 ++++ src/mini_printf.c | 18 ++++++----- src/party_menu.c | 2 ++ src/player_pc.c | 2 ++ src/pokedex.c | 6 ++++ src/pokemon.c | 15 ++++++++- src/pokenav_conditions_search_results.c | 10 ++++++ src/pokenav_menu_handler_gfx.c | 2 ++ src/slot_machine.c | 2 ++ src/sprite.c | 4 +++ src/tv.c | 3 +- 37 files changed, 301 insertions(+), 27 deletions(-) diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index d696c01d3c..b53b69c48b 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -59,7 +59,9 @@ void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag) clockChangeFlag = FALSE; } else + { lman.parentAck_flag = 0; + } rfu_REQ_sendData(clockChangeFlag); } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 3a558969b5..ee532f4134 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4043,7 +4043,9 @@ static void AnimMilkBottle_Step1(struct Sprite *sprite) sprite->data[6]++; } else if (sprite->data[7] > 0) + { sprite->data[7]--; + } SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7])); if (sprite->data[6] == 16 && sprite->data[7] == 0) diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 3d2e72cacb..bf7e774f6b 100644 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -2209,7 +2209,9 @@ static void AnimTask_Splash_Step(u8 taskId) task->data[4] -= 2; } else + { task->data[1]++; + } break; case 3: if (!RunAffineAnimFromTaskData(task)) @@ -2956,7 +2958,9 @@ static void AnimTask_SpeedDust_Step(u8 taskId) task->data[8] = 1; } else + { task->data[8] = 2; + } } } break; diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index b6a82b8d9a..cc36e608f8 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -597,7 +597,9 @@ static void AnimZapCannonSpark_Step(struct Sprite *sprite) sprite->invisible ^= 1; } else + { DestroyAnimSprite(sprite); + } } static void AnimThunderboltOrb_Step(struct Sprite *sprite) @@ -870,7 +872,9 @@ static void AnimTask_ElectricChargingParticles_Step(u8 taskId) } } else if(task->data[7] == 0) + { DestroyAnimVisualTask(taskId); + } } static void AnimElectricChargingParticles_Step(struct Sprite *sprite) @@ -991,7 +995,9 @@ void AnimTask_VoltTackleAttackerReappear(u8 taskId) gSprites[task->data[15]].x2 = task->data[14]; } else + { task->data[0]++; + } } break; diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index d6afd4c304..6cb7da5c20 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -280,7 +280,9 @@ static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite) sprite->callback = DestroyAnimSpriteAndDisableBlend; } else + { UpdateConfuseRayBallBlend(sprite); + } } static void UpdateConfuseRayBallBlend(struct Sprite *sprite) diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 951794fc54..956020b305 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -1147,7 +1147,9 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite) gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF; } else + { gBattleSpritesDataPtr->animationData->ballSubpx += 176; + } sprite->sTimer++; sprite->affineAnimPaused = FALSE; @@ -1172,7 +1174,9 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite) ChangeSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT); } else + { sprite->affineAnimPaused = TRUE; + } break; case BALL_ROLL_2: if (gBattleSpritesDataPtr->animationData->ballSubpx > 255) @@ -1181,7 +1185,9 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite) gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF; } else + { gBattleSpritesDataPtr->animationData->ballSubpx += 176; + } sprite->sTimer++; sprite->affineAnimPaused = FALSE; @@ -1216,7 +1222,9 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite) gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF; } else + { gBattleSpritesDataPtr->animationData->ballSubpx += 176; + } sprite->sTimer++; sprite->affineAnimPaused = FALSE; @@ -1390,7 +1398,9 @@ static void SpriteCB_Ball_FadeOut(struct Sprite *sprite) static void DestroySpriteAfterOneFrame(struct Sprite *sprite) { if (sprite->sFrame == 0) + { sprite->sFrame = -1; + } else { FreeSpriteOamMatrix(sprite); @@ -1410,7 +1420,9 @@ static void MakeCaptureStars(struct Sprite *sprite) u8 subpriority; if (sprite->subpriority) + { subpriority = sprite->subpriority - 1; + } else { subpriority = 0; @@ -2358,7 +2370,9 @@ static void SpriteCB_ShinyStars_Diagonal(struct Sprite *sprite) { // Delayed four frames to de-sync from encircling stars if (sprite->sTimer < 4) + { sprite->sTimer++; + } else { sprite->invisible = FALSE; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index dc3652b457..c01dcb442f 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -257,7 +257,9 @@ static void Intro_WaitForShinyAnimAndHealthbox(void) FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); } else + { return; + } } else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { @@ -270,13 +272,17 @@ static void Intro_WaitForShinyAnimAndHealthbox(void) FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); } else + { return; + } } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = FALSE; } else + { return; + } gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; @@ -331,7 +337,9 @@ static void Intro_TryShinyAnimShowHealthbox(void) m4aMPlayContinue(&gMPlayInfo_BGM); } else + { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); + } } gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].bgmRestored = TRUE; bgmRestored = TRUE; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index ed8cf572ea..2deced13c0 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -773,13 +773,21 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) LoadCompressedSpriteSheet(&sSpriteSheet_SinglesPlayerHealthbox); } else if (state == 3) + { LoadCompressedSpriteSheet(&sSpriteSheet_SinglesOpponentHealthbox); + } else if (state == 4) + { LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[gBattlerPositions[0]]); + } else if (state == 5) + { LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[gBattlerPositions[1]]); + } else + { retVal = TRUE; + } } else { diff --git a/src/battle_main.c b/src/battle_main.c index 7ee8d8cf55..25b1cfa844 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1654,7 +1654,9 @@ static void CB2_HandleStartMultiBattle(void) gBattleCommunication[MULTIUSE_STATE]++; } else + { break; + } // fall through case 3: if (IsLinkTaskFinished()) @@ -3084,7 +3086,9 @@ static void BattleStartClearSetData(void) gHitMarker |= HITMARKER_NO_ANIMATIONS; } else if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) && GetBattleSceneInRecordedBattle()) + { gHitMarker |= HITMARKER_NO_ANIMATIONS; + } gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle; @@ -3584,7 +3588,9 @@ static void BattleIntroPrintOpponentSendsOut(void) return; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) + { position = B_POSITION_OPPONENT_LEFT; + } else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) @@ -3593,7 +3599,9 @@ static void BattleIntroPrintOpponentSendsOut(void) position = B_POSITION_PLAYER_LEFT; } else + { position = B_POSITION_OPPONENT_LEFT; + } PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(position)); gBattleMainFunc = BattleIntroOpponent1SendsOutMonAnimation; @@ -3604,7 +3612,9 @@ static void BattleIntroOpponent2SendsOutMonAnimation(void) u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) + { position = B_POSITION_OPPONENT_RIGHT; + } else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) @@ -3613,7 +3623,9 @@ static void BattleIntroOpponent2SendsOutMonAnimation(void) position = B_POSITION_PLAYER_RIGHT; } else + { position = B_POSITION_OPPONENT_RIGHT; + } for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { @@ -3641,10 +3653,14 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void) position = B_POSITION_PLAYER_LEFT; } else + { position = B_POSITION_OPPONENT_LEFT; + } } else + { position = B_POSITION_OPPONENT_LEFT; + } if (gBattleControllerExecFlags) return; @@ -3699,7 +3715,9 @@ static void BattleIntroPrintPlayerSendsOut(void) u8 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) + { position = B_POSITION_PLAYER_LEFT; + } else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) @@ -3708,7 +3726,9 @@ static void BattleIntroPrintPlayerSendsOut(void) position = B_POSITION_OPPONENT_LEFT; } else + { position = B_POSITION_PLAYER_LEFT; + } if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(position)); @@ -3722,7 +3742,9 @@ static void BattleIntroPlayer2SendsOutMonAnimation(void) u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) + { position = B_POSITION_PLAYER_RIGHT; + } else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) @@ -3731,7 +3753,9 @@ static void BattleIntroPlayer2SendsOutMonAnimation(void) position = B_POSITION_OPPONENT_RIGHT; } else + { position = B_POSITION_PLAYER_RIGHT; + } for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { @@ -3754,7 +3778,9 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void) u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) + { position = B_POSITION_PLAYER_LEFT; + } else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER) @@ -3763,7 +3789,9 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void) position = B_POSITION_OPPONENT_LEFT; } else + { position = B_POSITION_PLAYER_LEFT; + } if (gBattleControllerExecFlags) return; @@ -4678,7 +4706,9 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) moveBattler1 = gBattleMons[battler1].moves[*(gBattleStruct->chosenMovePositions + battler1)]; } else + { moveBattler1 = MOVE_NONE; + } if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE) { @@ -4688,7 +4718,9 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) moveBattler2 = gBattleMons[battler2].moves[*(gBattleStruct->chosenMovePositions + battler2)]; } else + { moveBattler2 = MOVE_NONE; + } } // both move priorities are different than 0 @@ -4705,7 +4737,9 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) // else battler1 has more speed } else if (gBattleMoves[moveBattler1].priority < gBattleMoves[moveBattler2].priority) + { strikesFirst = 1; // battler2's move has greater priority + } // else battler1's move has greater priority } diff --git a/src/battle_message.c b/src/battle_message.c index e50fcff3de..d539bc540d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2350,7 +2350,9 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = gStringVar2; } else + { toCpy = gBattleTextBuff2; + } break; case B_TXT_BUFF3: if (gBattleTextBuff3[0] == B_BUFF_PLACEHOLDER_BEGIN) @@ -2359,7 +2361,9 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = gStringVar3; } else + { toCpy = gBattleTextBuff3; + } break; case B_TXT_COPY_VAR_1: toCpy = gStringVar1; @@ -2486,7 +2490,9 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = text; } else + { toCpy = sText_EnigmaBerry; + } } } else diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6f43c6af70..1891ea9285 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1769,7 +1769,9 @@ static void Cmd_attackanimation(void) gActiveBattler = gBattlerAttacker; if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE) + { multihit = gMultiHitCounter; + } else if (gMultiHitCounter != 0 && gMultiHitCounter != 1) { if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) @@ -1778,7 +1780,9 @@ static void Cmd_attackanimation(void) multihit = gMultiHitCounter; } else + { multihit = gMultiHitCounter; + } BtlController_EmitMoveAnimation(BUFFER_A, gCurrentMove, gBattleScripting.animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBattlerAttacker].friendship, &gDisableStructs[gBattlerAttacker], multihit); gBattleScripting.animTurn++; @@ -2276,7 +2280,9 @@ void SetMoveEffect(bool8 primary, u8 certain) {} } else + { gActiveBattler = gBattlersCount; + } if (gBattleMons[gEffectBattler].status1) break; @@ -2409,7 +2415,9 @@ void SetMoveEffect(bool8 primary, u8 certain) RESET_RETURN } else + { break; + } } if (gBattleMons[gEffectBattler].status1) break; @@ -3111,7 +3119,9 @@ static void Cmd_jumpifability(void) gBattleScripting.battlerWithAbility = battlerId - 1; } else + { gBattlescriptCurrInstr += 7; + } } else if (gBattlescriptCurrInstr[1] == BS_NOT_ATTACKER_SIDE) { @@ -3124,7 +3134,9 @@ static void Cmd_jumpifability(void) gBattleScripting.battlerWithAbility = battlerId - 1; } else + { gBattlescriptCurrInstr += 7; + } } else { @@ -3137,7 +3149,9 @@ static void Cmd_jumpifability(void) gBattleScripting.battlerWithAbility = battlerId; } else + { gBattlescriptCurrInstr += 7; + } } } @@ -3387,13 +3401,10 @@ static void Cmd_getexp(void) { if (gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && !(gAbsentBattlerFlags & gBitTable[2])) gBattleStruct->expGetterBattlerId = 2; + else if (!(gAbsentBattlerFlags & gBitTable[0])) + gBattleStruct->expGetterBattlerId = 0; else - { - if (!(gAbsentBattlerFlags & gBitTable[0])) - gBattleStruct->expGetterBattlerId = 0; - else - gBattleStruct->expGetterBattlerId = 2; - } + gBattleStruct->expGetterBattlerId = 2; } else { @@ -8558,11 +8569,17 @@ static void Cmd_presentdamagecalculation(void) s32 rand = Random() & 0xFF; if (rand < 102) + { gDynamicBasePower = 40; + } else if (rand < 178) + { gDynamicBasePower = 80; + } else if (rand < 204) + { gDynamicBasePower = 120; + } else { gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 4; @@ -8570,10 +8587,15 @@ static void Cmd_presentdamagecalculation(void) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; } + if (rand < 204) + { gBattlescriptCurrInstr = BattleScript_HitFromCritCalc; + } else if (gBattleMons[gBattlerTarget].maxHP == gBattleMons[gBattlerTarget].hp) + { gBattlescriptCurrInstr = BattleScript_AlreadyAtFullHp; + } else { gMoveResultFlags &= ~MOVE_RESULT_DOESNT_AFFECT_FOE; @@ -8910,6 +8932,7 @@ static void Cmd_trydobeatup(void) && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS)) break; } + if (gBattleCommunication[0] < PARTY_SIZE) { PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleCommunication[0]) @@ -8927,9 +8950,13 @@ static void Cmd_trydobeatup(void) gBattleCommunication[0]++; } else if (beforeLoop != 0) + { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + } else + { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + } } } @@ -9907,7 +9934,9 @@ static void Cmd_handleballthrow(void) } } else + { ballMultiplier = sBallCatchBonuses[gLastUsedItem - ITEM_ULTRA_BALL]; + } odds = (catchRate * ballMultiplier / 10) * (gBattleMons[gBattlerTarget].maxHP * 3 - gBattleMons[gBattlerTarget].hp * 2) diff --git a/src/battle_util.c b/src/battle_util.c index d79c61b382..6e201a2956 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1336,9 +1336,13 @@ u8 DoFieldEndTurnEffects(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_STOPPED; } else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR) + { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOWNPOUR_CONTINUES; + } else + { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_CONTINUES; + } } else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR) { @@ -3824,7 +3828,9 @@ u8 GetMoveTarget(u16 move, u8 setTarget) case MOVE_TARGET_SELECTED: side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + { targetBattler = gSideTimers[side].followmeTarget; + } else { side = GetBattlerSide(gBattlerAttacker); @@ -3853,7 +3859,9 @@ u8 GetMoveTarget(u16 move, u8 setTarget) case MOVE_TARGET_RANDOM: side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + { targetBattler = gSideTimers[side].followmeTarget; + } else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) @@ -3874,7 +3882,9 @@ u8 GetMoveTarget(u16 move, u8 setTarget) targetBattler ^= BIT_FLANK; } else + { targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GET_BATTLER_SIDE(gBattlerAttacker))); + } break; case MOVE_TARGET_USER_OR_SELECTED: case MOVE_TARGET_USER: diff --git a/src/berry.c b/src/berry.c index 389a09a106..543041e526 100644 --- a/src/berry.c +++ b/src/berry.c @@ -980,7 +980,9 @@ bool32 IsEnigmaBerryValid(void) const struct Berry *GetBerryInfo(u8 berry) { if (berry == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid()) + { return (struct Berry *)(&gSaveBlock1Ptr->enigmaBerry.berry); + } else { if (berry == BERRY_NONE || berry > ITEM_TO_BERRY(LAST_BERRY_INDEX)) @@ -1219,7 +1221,9 @@ static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) u32 extraYield; if (water == 0) + { return min; + } else { randMin = (max - min) * (water - 1); diff --git a/src/berry_crush.c b/src/berry_crush.c index 05e708162d..c7bff2abcd 100644 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -3398,7 +3398,9 @@ static u32 Cmd_StopGame(struct BerryCrushGame *game, u8 *args) break; case 2: if (game->gfx.counter != 0) + { game->gfx.counter--; + } else { RunOrScheduleCommand(CMD_CLOSE_LINK, SCHEDULE_CMD, NULL); diff --git a/src/bike.c b/src/bike.c index ae9dfd3e91..d8a3d1ab52 100644 --- a/src/bike.c +++ b/src/bike.c @@ -372,7 +372,9 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16 gPlayerAvatar.runningState = NOT_MOVING; if (heldKeys & B_BUTTON) + { gPlayerAvatar.bikeFrameCounter++; + } else { // B button was released. diff --git a/src/contest.c b/src/contest.c index 40a42a3529..0615f7b504 100644 --- a/src/contest.c +++ b/src/contest.c @@ -2667,7 +2667,9 @@ static void Task_EndAppeals(u8 taskId) CalculateFinalScores(); ContestClearGeneralTextWindow(); if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)) + { BravoTrainerPokemonProfile_BeforeInterview1(eContestantStatus[gContestPlayerMonIndex].prevMove); + } else { CalculateContestLiveUpdateData(); diff --git a/src/contest_effect.c b/src/contest_effect.c index 24de8e1692..92cc5a169c 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -619,15 +619,18 @@ static void ContestEffect_QualityDependsOnTiming(void) { appeal = 10; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); - } else if (rval < 6) + } + else if (rval < 6) { appeal = 20; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); - } else if (rval < 8) + } + else if (rval < 8) { appeal = 40; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); - } else if (rval < 9) + } + else if (rval < 9) { appeal = 60; SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL); @@ -868,7 +871,9 @@ static void ContestEffect_ScrambleNextTurnOrder(void) break; } else + { rval--; + } } } } @@ -908,7 +913,9 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) eContestAppealResults.jam = RoundUp(eContestAppealResults.jam); } else + { eContestAppealResults.jam = 10; + } eContestAppealResults.jamQueue[0] = i; eContestAppealResults.jamQueue[1] = CONTESTANT_NONE; if (WasAtLeastOneOpponentJammed()) @@ -1071,7 +1078,9 @@ static s16 RoundTowardsZero(s16 score) score -= 10 - absScore; } else + { score -= absScore; + } return score; } diff --git a/src/decompress.c b/src/decompress.c index 55807e89bb..491ae8587f 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -100,9 +100,13 @@ void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 LZ77UnCompWram(gMonFrontPicTable[i].data, dest); } else if (species > NUM_SPECIES) // is species unknown? draw the ? icon + { LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + } else + { LZ77UnCompWram(src->data, dest); + } DuplicateDeoxysTiles(dest, species); DrawSpindaSpots(species, personality, dest, isFrontPic); @@ -327,9 +331,13 @@ void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s LZ77UnCompWram(gMonFrontPicTable[i].data, dest); } else if (species > NUM_SPECIES) // is species unknown? draw the ? icon + { LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + } else + { LZ77UnCompWram(src->data, dest); + } DuplicateDeoxysTiles(dest, species); DrawSpindaSpots(species, personality, dest, isFrontPic); @@ -385,9 +393,13 @@ void LoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src LZ77UnCompWram(gMonFrontPicTable[i].data, dest); } else if (species > NUM_SPECIES) // is species unknown? draw the ? icon + { LZ77UnCompWram(gMonFrontPicTable[0].data, dest); + } else + { LZ77UnCompWram(src->data, dest); + } DrawSpindaSpots(species, personality, dest, isFrontPic); } diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index 96ff1b52df..1568c18d5f 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -150,7 +150,9 @@ static void SpriteCB_Sparkle_SpiralUpward(struct Sprite *sprite) sprite->oam.matrixNum = matrixNum; } else + { DestroySprite(sprite); + } } static void CreateSparkle_SpiralUpward(u8 trigIdx) @@ -178,7 +180,9 @@ static void SpriteCB_Sparkle_ArcDown(struct Sprite *sprite) sprite->sTimer++; } else + { DestroySprite(sprite); + } } static void CreateSparkle_ArcDown(u8 trigIdx) @@ -206,7 +210,9 @@ static void SpriteCB_Sparkle_CircleInward(struct Sprite *sprite) sprite->sTrigIdx += 4; } else + { DestroySprite(sprite); + } } static void CreateSparkle_CircleInward(u8 trigIdx, u8 speed) @@ -238,7 +244,9 @@ static void SpriteCB_Sparkle_Spray(struct Sprite *sprite) sprite->sTrigIdx++; matrixNum = 31 - (sprite->sTrigIdx * 12 / 128); if (sprite->sTrigIdx > 64) + { sprite->subpriority = 1; + } else { sprite->invisible = FALSE; @@ -252,7 +260,9 @@ static void SpriteCB_Sparkle_Spray(struct Sprite *sprite) sprite->sTimer++; } else + { DestroySprite(sprite); + } } static void CreateSparkle_Spray(u8 id) @@ -348,7 +358,9 @@ static void Task_Sparkles_ArcDown(u8 taskId) gTasks[taskId].tTimer++; } else + { gTasks[taskId].func = Task_Sparkles_ArcDown_End; + } } static void Task_Sparkles_ArcDown_End(u8 taskId) @@ -388,7 +400,9 @@ static void Task_Sparkles_CircleInward(u8 taskId) gTasks[taskId].tTimer++; } else + { gTasks[taskId].func = Task_Sparkles_CircleInward_End; + } } static void Task_Sparkles_CircleInward_End(u8 taskId) @@ -437,7 +451,9 @@ static void Task_Sparkles_SprayAndFlash(u8 taskId) gTasks[taskId].tTimer++; } else + { gTasks[taskId].func = Task_Sparkles_SprayAndFlash_End; + } } static void Task_Sparkles_SprayAndFlash_End(u8 taskId) @@ -486,7 +502,9 @@ static void Task_Sparkles_SprayAndFlashTrade(u8 taskId) gTasks[taskId].tTimer++; } else + { gTasks[taskId].func = Task_Sparkles_SprayAndFlash_End; + } } #undef tTimer @@ -560,9 +578,13 @@ static void Task_CycleEvolutionMonSprite_Init(u8 taskId) static void Task_CycleEvolutionMonSprite_TryEnd(u8 taskId) { if (gTasks[taskId].tEvoStopped) + { EndOnPreEvoMon(taskId); + } else if (gTasks[taskId].tScaleSpeed == 128) + { EndOnPostEvoMon(taskId); + } else { gTasks[taskId].tScaleSpeed += 2; @@ -574,7 +596,9 @@ static void Task_CycleEvolutionMonSprite_TryEnd(u8 taskId) static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId) { if (gTasks[taskId].tEvoStopped) + { gTasks[taskId].func = EndOnPreEvoMon; + } else { u16 oamMatrixArg; @@ -583,7 +607,9 @@ static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId) { // Set pre-evo sprite growth if (gTasks[taskId].tPreEvoScale < MON_MAX_SCALE - gTasks[taskId].tScaleSpeed) + { gTasks[taskId].tPreEvoScale += gTasks[taskId].tScaleSpeed; + } else { gTasks[taskId].tPreEvoScale = MON_MAX_SCALE; @@ -592,7 +618,9 @@ static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId) // Set post-evo sprite shrink if (gTasks[taskId].tPostEvoScale > MON_MIN_SCALE + gTasks[taskId].tScaleSpeed) + { gTasks[taskId].tPostEvoScale -= gTasks[taskId].tScaleSpeed; + } else { gTasks[taskId].tPostEvoScale = MON_MIN_SCALE; @@ -603,7 +631,9 @@ static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId) { // Set post-evo sprite growth if (gTasks[taskId].tPostEvoScale < MON_MAX_SCALE - gTasks[taskId].tScaleSpeed) + { gTasks[taskId].tPostEvoScale += gTasks[taskId].tScaleSpeed; + } else { gTasks[taskId].tPostEvoScale = MON_MAX_SCALE; @@ -612,7 +642,9 @@ static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId) // Set pre-evo sprite shrink if (gTasks[taskId].tPreEvoScale > MON_MIN_SCALE + gTasks[taskId].tScaleSpeed) + { gTasks[taskId].tPreEvoScale -= gTasks[taskId].tScaleSpeed; + } else { gTasks[taskId].tPreEvoScale = MON_MIN_SCALE; diff --git a/src/field_camera.c b/src/field_camera.c index 290ddddaf1..e76ba3d855 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -231,7 +231,9 @@ static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x, if (metatileId > NUM_METATILES_TOTAL) metatileId = 0; if (metatileId < NUM_METATILES_IN_PRIMARY) + { metatiles = mapLayout->primaryTileset->metatiles; + } else { metatiles = mapLayout->secondaryTileset->metatiles; diff --git a/src/field_door.c b/src/field_door.c index 255233ec23..908a65a453 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -437,7 +437,9 @@ static const struct DoorGraphics *GetDoorGraphics(const struct DoorGraphics *gfx static s8 StartDoorAnimationTask(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frames, u32 x, u32 y) { if (FuncIsActiveTask(Task_AnimateDoor) == TRUE) + { return -1; + } else { u8 taskId = CreateTask(Task_AnimateDoor, 0x50); diff --git a/src/field_effect.c b/src/field_effect.c index d907c3f16d..5dcc4b3c08 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1293,7 +1293,8 @@ static void CreateHofMonitorSprite(s16 taskId, s16 x, s16 y, bool8 isSmallMonito { spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HofMonitorBig, x, y, 0); SetSubspriteTables(&gSprites[spriteId], &sSubspriteTable_HofMonitorBig); - } else + } + else { spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HofMonitorSmall, x, y, 0); } @@ -2003,7 +2004,8 @@ static bool8 LavaridgeGymB1FWarpEffect_Rise(struct Task *task, struct ObjectEven { task->data[1] <<= 1; } - } else if (!(task->data[2] & 4) && (task->data[1] > 0)) + } + else if (!(task->data[2] & 4) && (task->data[1] > 0)) { task->data[1] >>= 1; } @@ -2017,7 +2019,8 @@ static bool8 LavaridgeGymB1FWarpEffect_Rise(struct Task *task, struct ObjectEven { task->data[3]++; } - } else + } + else { task->data[4] = 1; } @@ -2169,7 +2172,8 @@ static bool8 LavaridgeGym1FWarpEffect_AshPuff(struct Task *task, struct ObjectEv gFieldEffectArguments[3] = sprite->oam.priority; task->data[1] = FieldEffectStart(FLDEFF_ASH_PUFF); task->data[0]++; - } else + } + else { task->data[1]++; ObjectEventSetHeldMovement(objectEvent, GetWalkInPlaceFasterMovementAction(objectEvent->facingDirection)); @@ -2499,7 +2503,8 @@ static void TeleportWarpInFieldEffect_SpinEnter(struct Task *task) objectEvent->triggerGroundEffectsOnMove = TRUE; sprite->subspriteMode = task->data[14]; } - } else + } + else { sprite->oam.priority = 1; if (sprite->subspriteMode != SUBSPRITES_OFF) diff --git a/src/item_use.c b/src/item_use.c index abd80e0eae..322eaf76c0 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -122,7 +122,9 @@ static void SetUpItemUseOnFieldCallback(u8 taskId) SetUpItemUseCallback(taskId); } else + { sItemUseOnFieldCB(taskId); + } } static void FieldCB_UseItemOnField(void) @@ -148,7 +150,9 @@ static void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyIte DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage); } else + { DisplayItemMessageOnField(taskId, gStringVar4, Task_CloseCantUseKeyItemMessage); + } } static void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField) @@ -202,7 +206,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId) PlayerGetDestCoords(&coordsX, &coordsY); behavior = MapGridGetMetatileBehaviorAt(coordsX, coordsY); if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE || MetatileBehavior_IsVerticalRail(behavior) == TRUE || MetatileBehavior_IsHorizontalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE) + { DisplayCannotDismountBikeMessage(taskId, tUsingRegisteredKeyItem); + } else { if (Overworld_IsBikingAllowed() == TRUE && IsBikingDisallowedByPlayer() == 0) @@ -211,7 +217,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId) SetUpItemUseOnFieldCallback(taskId); } else + { DisplayDadsAdviceCannotUseItemMessage(taskId, tUsingRegisteredKeyItem); + } } } @@ -264,7 +272,9 @@ void ItemUseOutOfBattle_Rod(u8 taskId) SetUpItemUseOnFieldCallback(taskId); } else + { DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } } static void ItemUseOnFieldCB_Rod(u8 taskId) @@ -951,7 +961,9 @@ void ItemUseInBattle_PokeBall(u8 taskId) DisplayItemMessage(taskId, FONT_NORMAL, gText_BoxFull, CloseItemMessage); } else + { DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage); + } } static void Task_CloseStatIncreaseMessage(u8 taskId) diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c index 32391d781c..c40bb825b3 100644 --- a/src/librfu_sio32id.c +++ b/src/librfu_sio32id.c @@ -145,7 +145,9 @@ static void Sio32IDIntr(void) } } else + { gRfuSIO32Id.lastId = regSIODATA32; + } } else { diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 4c4323c1ed..6b20cf9678 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -1175,7 +1175,9 @@ static void RfuHandleReceiveCommand(u8 unused) gRfu.numBlocksReceived[i] = 0; } else + { gRfu.numBlocksReceived[i]++; + } } } } @@ -1302,7 +1304,9 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size) gRfu.sendBlock.count = (size / 12) + r4; gRfu.sendBlock.next = 0; if (size > BLOCK_BUFFER_SIZE) + { gRfu.sendBlock.payload = src; + } else { if (src != gBlockSendBuffer) @@ -1629,9 +1633,8 @@ static bool8 CheckForLeavingGroupMembers(void) } else if (gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) - rfu_clearSlot(TYPE_NI_RECV, i); { - + rfu_clearSlot(TYPE_NI_RECV, i); } } } @@ -1777,7 +1780,9 @@ static void Task_PlayerExchange(u8 taskId) gTasks[taskId].tState = 101; } else + { gTasks[taskId].tState = 2; + } break; case 101: if (gSendCmd[0] == 0) @@ -1798,7 +1803,9 @@ static void Task_PlayerExchange(u8 taskId) } } else + { gTasks[taskId].tState++; + } break; case 4: if (AreAllPlayersFinishedReceiving()) diff --git a/src/lottery_corner.c b/src/lottery_corner.c index 052e2cfc38..117a5d6331 100644 --- a/src/lottery_corner.c +++ b/src/lottery_corner.c @@ -76,7 +76,9 @@ void PickLotteryCornerTicket(void) } } else // Pokémon are always arranged from populated spots first to unpopulated, so the moment a NONE species is found, that's the end of the list. + { break; + } } for (i = 0; i < TOTAL_BOXES_COUNT; i++) @@ -134,7 +136,9 @@ static u8 GetMatchingDigits(u16 winNumber, u16 otId) matchingDigits++; } else + { break; + } } return matchingDigits; } diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index dda6e6bffa..7338afb94b 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -481,7 +481,9 @@ static void BardSing(struct Task *task, struct BardSong *song) GetWordPhonemes(song, MACRO1(word)); song->currWord++; if (song->sound->songLengthId != 0xFF) + { song->state = 0; + } else { song->state = 3; @@ -531,7 +533,9 @@ static void BardSing(struct Task *task, struct BardSong *song) { song->currPhoneme++; if (song->currPhoneme != 6 && song->sound[song->currPhoneme].songLengthId != 0xFF) + { song->state = 0; + } else { song->state = 3; @@ -850,7 +854,9 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language trader->language[i] = LANGUAGE_JAPANESE; } else + { trader->language[i] = language; + } } } else diff --git a/src/mini_printf.c b/src/mini_printf.c index e4b8937242..17665cdf06 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -167,9 +167,9 @@ static s32 _putsEncoded(char *s, s32 len, void *buf) static s32 mini_strlen(const char *s) { - s32 len = 0; - while (s[len] != '\0') len++; - return len; + s32 len = 0; + while (s[len] != '\0') len++; + return len; } static s32 mini_itoa(s32 value, u32 radix, s32 uppercase, bool32 unsig, char *buffer) @@ -274,7 +274,8 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) { len = 1; len = _putsAscii(&ch, len, buf); - } else + } + else { char pad_char = ' '; s32 pad_to = 0; @@ -310,7 +311,8 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) if(l) { len = mini_itoa(va_arg(va, u32), 10, 0, (ch=='u'), bf2); - } else + } + else { if(ch == 'u') { @@ -352,7 +354,8 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) { len = mini_pad(ptr, len, pad_char, pad_to, bf); len = _putsAscii(bf, len, buf); - } else + } + else { len = _putsAscii(ptr, len, buf); } @@ -364,7 +367,8 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) { len = mini_pad(ptr, len, pad_char, pad_to, bf); len = _putsEncoded(bf, len, buf); - } else + } + else { len = _putsEncoded(ptr, len, buf); } diff --git a/src/party_menu.c b/src/party_menu.c index 56625d09a3..cbd469713a 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4800,7 +4800,9 @@ static void Task_LearnNextMoveOrClosePartyMenu(u8 taskId) if (IsFanfareTaskInactive() && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) { if (gPartyMenu.learnMoveState == 1) + { Task_TryLearningNextMove(taskId); + } else { if (gPartyMenu.learnMoveState == 2) // never occurs diff --git a/src/player_pc.c b/src/player_pc.c index 009aa7810f..81170a86c9 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -880,7 +880,9 @@ static void Mailbox_CancelMoveToBag(u8 taskId) static void Mailbox_Give(u8 taskId) { if (CalculatePlayerPartyCount() == 0) + { Mailbox_NoPokemonForMail(taskId); + } else { FadeScreen(FADE_TO_BLACK, 0); diff --git a/src/pokedex.c b/src/pokedex.c index c0b20bf9d6..030020df89 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -2396,7 +2396,9 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored) if (vOffset >= LIST_SCROLL_STEP) vOffset -= LIST_SCROLL_STEP; if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) + { ClearMonListEntry(17, vOffset * 2, ignored); + } else { ClearMonListEntry(17, vOffset * 2, ignored); @@ -2685,7 +2687,9 @@ static bool8 TryDoInfoScreenScroll(void) } if (sPokedexView->selectedPokemon == selectedPokemon) + { return FALSE; + } else { sPokedexView->selectedPokemon = selectedPokemon; @@ -2708,7 +2712,9 @@ static bool8 TryDoInfoScreenScroll(void) } if (sPokedexView->selectedPokemon == selectedPokemon) + { return FALSE; + } else { sPokedexView->selectedPokemon = selectedPokemon; diff --git a/src/pokemon.c b/src/pokemon.c index d59f46ada1..e98182b0ae 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2874,8 +2874,11 @@ void CalculateMonStats(struct Pokemon *mon) else { if (currentHP == 0 && oldMaxHP == 0) + { currentHP = newMaxHP; - else if (currentHP != 0) { + } + else if (currentHP != 0) + { // BUG: currentHP is unintentionally able to become <= 0 after the instruction below. This causes the pomeg berry glitch. currentHP += newMaxHP - oldMaxHP; #ifdef BUGFIX @@ -2884,7 +2887,9 @@ void CalculateMonStats(struct Pokemon *mon) #endif } else + { return; + } } SetMonData(mon, MON_DATA_HP, ¤tHP); @@ -6394,11 +6399,17 @@ void ClearBattleMonForms(void) u16 GetBattleBGM(void) { if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) + { return MUS_VS_KYOGRE_GROUDON; + } else if (gBattleTypeFlags & BATTLE_TYPE_REGI) + { return MUS_VS_REGI; + } else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) + { return MUS_VS_TRAINER; + } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { u8 trainerClass; @@ -6445,7 +6456,9 @@ u16 GetBattleBGM(void) } } else + { return MUS_VS_WILD; + } } void PlayBattleBGM(void) diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c index 1817398020..e42f35481b 100644 --- a/src/pokenav_conditions_search_results.c +++ b/src/pokenav_conditions_search_results.c @@ -184,13 +184,21 @@ static bool32 HandleConditionSearchInput_WaitSetup(struct Pokenav_SearchResults static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *menu) { if (JOY_REPEAT(DPAD_UP)) + { return CONDITION_SEARCH_FUNC_MOVE_UP; + } else if (JOY_REPEAT(DPAD_DOWN)) + { return CONDITION_SEARCH_FUNC_MOVE_DOWN; + } else if (JOY_NEW(DPAD_LEFT)) + { return CONDITION_SEARCH_FUNC_PAGE_UP; + } else if (JOY_NEW(DPAD_RIGHT)) + { return CONDITION_SEARCH_FUNC_PAGE_DOWN; + } else if (JOY_NEW(B_BUTTON)) { // Exiting back to main search menu @@ -207,7 +215,9 @@ static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *menu) return CONDITION_SEARCH_FUNC_SELECT_MON; } else + { return CONDITION_SEARCH_FUNC_NONE; + } } static u32 ReturnToConditionSearchList(struct Pokenav_SearchResults *menu) diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index ede88affdb..e223b7caba 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -505,7 +505,9 @@ static u32 LoopedTask_OpenMenu(s32 state) ShowBg(2); ShowBg(3); if (gfx->pokenavAlreadyOpen) + { PokenavFadeScreen(POKENAV_FADE_FROM_BLACK); + } else { PlaySE(SE_POKENAV_ON); diff --git a/src/slot_machine.c b/src/slot_machine.c index 34c7ef8849..217767fc9e 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -2324,7 +2324,9 @@ static bool8 ReelTask_MoveToStop(struct Task *task) memcpy(reelStopShocks, sReelStopShocks, sizeof(sReelStopShocks)); reelPixelPos = sSlotMachine->reelPixelOffsets[task->tReelId] % REEL_SYMBOL_HEIGHT; if (reelPixelPos != 0) + { reelPixelPos = AdvanceSlotReelToNextSymbol(task->tReelId, sSlotMachine->reelSpeed); + } else if (sSlotMachine->reelExtraTurns[task->tReelId]) { sSlotMachine->reelExtraTurns[task->tReelId]--; diff --git a/src/sprite.c b/src/sprite.c index 0736269be0..d11277400f 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -1090,9 +1090,13 @@ void ContinueAffineAnim(struct Sprite *sprite) u8 matrixNum = GetSpriteMatrixNum(sprite); if (sAffineAnimStates[matrixNum].delayCounter) + { AffineAnimDelay(matrixNum, sprite); + } else if (sprite->affineAnimPaused) + { return; + } else { s16 type; diff --git a/src/tv.c b/src/tv.c index 9ab9fc8969..26d568642f 100644 --- a/src/tv.c +++ b/src/tv.c @@ -5364,7 +5364,8 @@ static void DoTVShow3CheersForPokeblocks(void) if (show->threeCheers.sheen > 24) { StringCopy(gStringVar2, gText_Excellent); - } else if (show->threeCheers.sheen > 22) + } + else if (show->threeCheers.sheen > 22) { StringCopy(gStringVar2, gText_VeryGood); } From 19578f6d2226af96550fbc90a46e7d35643a0aca Mon Sep 17 00:00:00 2001 From: iriv24 <40581123+iriv24@users.noreply.github.com> Date: Fri, 6 Dec 2024 04:04:37 -0500 Subject: [PATCH 467/544] Fix Off-by-One Error in Move Relearner (#5778) --- src/move_relearner.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/move_relearner.c b/src/move_relearner.c index a4cc778a45..1e66702695 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -165,18 +165,18 @@ enum { static EWRAM_DATA struct { u8 state; - u8 heartSpriteIds[16]; /*0x001*/ - u16 movesToLearn[MAX_RELEARNER_MOVES]; /*0x01A*/ - u8 partyMon; /*0x044*/ - u8 moveSlot; /*0x045*/ - struct ListMenuItem menuItems[MAX_RELEARNER_MOVES]; /*0x0E8*/ - u8 numMenuChoices; /*0x110*/ - u8 numToShowAtOnce; /*0x111*/ - u8 moveListMenuTask; /*0x112*/ - u8 moveListScrollArrowTask; /*0x113*/ - u8 moveDisplayArrowTask; /*0x114*/ - u16 scrollOffset; /*0x116*/ - u8 categoryIconSpriteId; /*0x117*/ + u8 heartSpriteIds[16]; /*0x001*/ + u16 movesToLearn[MAX_RELEARNER_MOVES]; /*0x01A*/ + u8 partyMon; /*0x044*/ + u8 moveSlot; /*0x045*/ + struct ListMenuItem menuItems[MAX_RELEARNER_MOVES + 1]; /*0x0E8*/ + u8 numMenuChoices; /*0x110*/ + u8 numToShowAtOnce; /*0x111*/ + u8 moveListMenuTask; /*0x112*/ + u8 moveListScrollArrowTask; /*0x113*/ + u8 moveDisplayArrowTask; /*0x114*/ + u16 scrollOffset; /*0x116*/ + u8 categoryIconSpriteId; /*0x117*/ } *sMoveRelearnerStruct = {0}; static EWRAM_DATA struct { From 54d372162fb89907256782e8689d0cfc3c9cdabe Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sat, 7 Dec 2024 11:26:23 +0100 Subject: [PATCH 468/544] Added NBSP and up+down arrows to all fonts (#5767) Co-authored-by: Hedara --- charmap.txt | 2 ++ graphics/fonts/latin_narrow.png | Bin 3449 -> 4553 bytes graphics/fonts/latin_narrower.png | Bin 7346 -> 4764 bytes graphics/fonts/latin_short.png | Bin 3475 -> 4678 bytes graphics/fonts/latin_short_narrow.png | Bin 7508 -> 4993 bytes graphics/fonts/latin_short_narrower.png | Bin 4374 -> 4409 bytes graphics/fonts/latin_small.png | Bin 3665 -> 4587 bytes graphics/fonts/latin_small_narrow.png | Bin 3114 -> 4518 bytes graphics/fonts/latin_small_narrower.png | Bin 4397 -> 4433 bytes include/constants/characters.h | 1 + src/battle_message.c | 5 ++++- src/fonts.c | 16 ++++++++-------- test/test_runner_battle.c | 1 + 13 files changed, 16 insertions(+), 9 deletions(-) diff --git a/charmap.txt b/charmap.txt index 3a2081e304..e2acfdf16b 100644 --- a/charmap.txt +++ b/charmap.txt @@ -46,6 +46,8 @@ LV = 34 '=' = 35 ';' = 36 V_D_ARROW = 38 +NBSP = 39 +'~' = 39 '¿' = 51 '¡' = 52 PK = 53 diff --git a/graphics/fonts/latin_narrow.png b/graphics/fonts/latin_narrow.png index 08652d45f4896aac83a107b00b8086f2740b2964..434638ed17692ef98bf2c8cee733168c77144e99 100644 GIT binary patch literal 4553 zcmc&&`8U)L_kX{~V8)CsVUlGmAv-C2!VHb5kZj31wid)>U&kOy$&y548?@WWQno?a zrmSVjHpup|M40UJcz$@k|HAj2d(P`Fzufye_uPB#jW;tjD^~z!s<9c?6)JxuHH#(k;ArWFXCqEe(=8n3|fJ!^6W&Cew-TCjkJwo|kZXmcdyo z4x{Er%`ubr)e_orlU(LBY_kO(zJTEaf2MjS*X`c~JobyJRaM#tD>Cl{y!tt*ra`KD$B z)YxkKFRaW}|MHPE08M`P+2vH z?XgWRxp*?dbLX`|e%Nq`V68Rr5uiGlCyicwN)G6}q2&z*cq7X`)eEsuLvbU|Z~Z)V zy~2TF`UG?Y{ShR{lVXwfW;J*FVk!JH8RFZ>>NS>ce8>n1KoLU{$NBJ94uu{;jE){&o;zfdRkm(zP({ASTT2yc z{At+U;EfDLJ#2H`B9=W4>eVp&xtgRUXlFzX7+m<{H9nR8iS%Z1E1{zw!Un~OqRjY< zvufJ+avgo&ZS8209eRuq>4`wIlFB9O6-MyifufL=8kJ{E;(M!_!2}+;HmU^O&##F)R;!e?AgUhn-+~2Xfkk&;0^id zGDjleXXdT0b3fb4ZsjQ(&Rv4bE`XXSBuKkFdVwpjQHc?X?Jp@;C}sXYpJ$^Ayqam| zNnVCD4M8XfTw1C%Q}QU+=dfi+vv^e@UnNd{xGrw2z9MMEIHq~D_*)nO50NmqJ$rax zB9;n{`y3H=ikF`Rxxd?f_15(o zt@;B|u`GTz#nG^bk5o6DOv0zzJyZuF&@m6>6gR}}Ij{$@jOu&iD2dT_ApyVP^P%H0?iOmJ?enhKT(v#?+OnR zR{wD5P?nQ`3oxGE*;+4|7}%?OcPPxW9U~OmIDM%22UdbZ=XyWiv$6(do+xXyhFvb!IaM2^Bu_Mu!4$O)c;N z%bz6WU-M4Mk#+liJM(nM*a$gDmZU~)((f90nN#ew2uRV;BumNiu(J04^N-$m27k-R zc7b(2sw&r>b|M_ZevI^}cchNG!=_irk?Se6=@n&hT0ccqs;Pt{cS1-C7LER&XbQ`D zl@oNd&!?K~RCz6Fz?@26^#u{b8=`YhQD760jV%r?_j#9BodOh0+Cf+QptCd1i564X z&V%8o`LjK`pv-#|;5^ZybGEO2XscL{b{KUn{1S0&{Ntz>8K@n(6aG;s?#kL$usuqS z(c1O#>b=phCvz|xZ{N_va(^j6zCIrkxTTq{i>9FS1Vu!7%zT1(vGtBUW4apN;@esV z&rDd+W6Rik-ibn1Jng8;D&4Et=FB&7J_`TNR6m|Vsf)4@)=$8xnH6*JvVo3SrcgYx`rB~>uA~MNZ|%~|?P`M#6YLGYGm{ne(NF8IGMs~xqUxQ98I8xHy~`7K)1vvR+LUlIL>`J zGFWf$6hoNHB8IZgP0yg%kY7p)*EwP;7ct_Kkwim5G+4P9WPq(D{{C7Q zu}gLm<`lR*w|o$`-H`P*etM&2E39B->P=Y%bofixjlGGq-?Irt1B3(JI$a-OS?S0b zXR_5@he&EeR*IHL$z+p0RvNRFT@t{bV7s8kR&>Pbn}V&7N`c$Uf0K?8G@AGn0fg}0 z=I-W(B6d|LzQWXgDJzr7D68JACv#aJkU&l@iG#Qi1 z->~T54fcPb&*d1DOcjJ29G!Qak#W}^nO)DS@_s>w@b*oSbAqb6^;w1;S{N1o8(Q;V+#zrVVH{RO;5oCmav{utZy`$z8wptA zgGI&vxoSqyzqXUm3Y``+-b9U^-Ys@87XY0q;*Zt$cE{5FF9fPp!hDlJ(sc~UO4Jg?|!OmzPO=D z5o~k6zVT2iTqR|FF~BePLgW| zK^F%bSBOL;Yv5@<@0(HUXcP}VGfUO!0Ti|LwRWrs;f;+WaBMg?dF#4OWK?Rd1U6k+r}QE;+_uzaMtS%duo35cYHsGy4~|H1aAypw)<0nO zhjWF?rv7$v$W-!=a#(PX*tiH1Oj$qk?!+orAo5{Cc6qMO(;)UR-wn4Ix;ogYRC%8M zgy#V?+H{fHru(shkLL;4cR=jh)s6ejl_FO^O>9y* z%!5(n!p}iWlXj_D2|ETmJ_q~P-H#Cf$amklLEkWZ6MmT=*4nV`BS}$II=o?HN8`F+ zP@G#$kiwqXy$Sin_${8^ujqW<_jnVd!ovCb>Irq|R?d2Ck*U&3eA1?^?R1hY-F%|y zOPuvbQwPQVfnm@ zwgu$ncXyuDs*170;>W*{p|m}7-+KC z%@VEZZ(FmkImJPbizs;@u@G;Ow_#vr*Q&O{)6_7C(2Mbm-s!;mRc5esZ(gSKe&?04 zP;t91L$laPxm41?%%%?s`fFuTK6F%1jekN6ykRh7&BW}ymKIJY^)?RvX#h!b+8(Nx zQ*7^dhwrLMxPr5WEWz(jR|^!t|AnX2>HK}M8%y|V0Qyy0UZE~XVWn;!dwg&kzbzw*CeLr7PuyZN;0oxGR`1gt}NQ|nfX{=jrqA>Z&wrPOT%N1 z3bAIiqoQx=v3^UAg(e)0>CqM^ znv>fjAWeA3o@0y;FNqAzIEB@qdd_~4?%W?Es_-j^8)ozE+_S!MG#nQMEXe zDLU^DI#9JiK(%w7bt&jvmigFN-ath(>UhGi)8x?a<0vwJ+Eh2^zcfG8 zarI+ffama>+#F%&;`CB~T^>BK(Oi$5xiB4#A^q#_l^%81`K6WOMUzuD5t|I{n3L2}8*>)Zx8|gCec)6URI5=1XFCXL-jrOaj{) zoM9(oCuJ9|(6>`_hJJU~b`zGxV0afhCRZrz;$rr4(FJ-4v3iZM{&AQ0=myexq-sb+ zzGX!XNZ8wJpQBor4e|-uxqkSN>!$Fo%c-cG)Kyu|Z=8x!dacxTIDnECmLpYTE%og8 z)fcmm;}O^=<*XDBI77#}ql-*`p6-aW>M^vV90Zj zC99WnKF3RrhtNxpi>%Kp%Q7$@m{a{jM%7UJ@A8esqA>w$+7aI&NaNVv(0CqBJ-mXD zCx5}?8@k`p=JO9uZ?|Quy2L(yFL^u_S84YB)!ltWQPVAxQ?7UO3^~&)?-?e%mLgDU z*V%W{W__^OUj09?@JH9%3}ZZ`PA0{VL_OQ^@$wO&5x#z;Q)YiIv1lo*6-CCNO=BYw XTA6~m{)Yek)Bu+ZOmQXp_~`!t#W_z& delta 3436 zcma)<_czsl;KyI@d#`I=krfhkGcroz%7~j$lFKb4nOC?7*?kE2-m+2(akF#FNMwX^ zt=wd1?=rLZ9!c`;obUG!`2O}hkDs6C@jTCF^qx@6F;*BH0Km0n;T(Hbh>ViDrgPcE zKXo~+#zVN7ud(rpY+XV3V3Bo}*Z8kOJa?ucw*v2Xd8m}@jIqJ=3Ptw`?=4ZL$Sa<1 zvQ53W@A&DCWA}~l0&(+XUQQ9(vBTTZl@2G?6e~+Er0?yGwx4x! zKdJXSmP@;vr`s!Dy)aCxH;nv3!-bHQpwOEX<9}SdeS^Il^7DzeQk`LU<*i&OV$g?$E^Ohp&o!lvZX*yYtY zD7jfa5b-TN`GX11rxKW9#@;4DEy|QFTV_$*Wymb8Ab(r^iRlv+C9+X1ukrV&i)9zi z!J1A_dUby$>+m3(j~0~RS>>1aZ^y&r{k#Mj*ECd)(Dp75%OYF7ecs%}5pB@|{sEDo_hIx!IwDP44gY(~hYhCz87!axh^PI%P%f>*Dp?(AzG z=d0bk%2iYzvc$Mvx#JA8`o^D-VvnVs8uPuWc)6XS(AGXnW|MaSW2;AZY>KU{GM#Ln z);`rspwnrGwRb>!s z;JJpsw4Z>WDDl<*wUXT;^9N1J2@4R_(7h>Ea=r}_BY~zF16vA2z)&%%H+5`N^pixl|1YVRfS;Wma57;;2%vNO@{nM-_;XM;kh|qj8XpY z6f!6u+c|*p>%RttaRVlzdW@PmbNCJsqO;OJ=mXQhgp~qaRE{e!o7;pQB9{yX#@lS2 zzyl#qoyAAD5dON)G%kQ)X33H(cE<3A_<&NJzV36j<{NXi%29u`PC~RHpIBrK*&=fG z%Wo~pB@|8Kcqe?i>owOQ@51+uqG`ZL{DcF1%F^#728{(jQ8<^AK-GsS<)ik}3vBwX znR&s=lypyx^fgP4*^lYWgbm?G+TkVV>J_O&~+ypA3tUkpi_=$!|9V z_Pu6IK>R4}?YcXx+F;X!lVMpgl1{>x9b`=(xaK41`WM)2Nv9l|(b3-AJ}iEugx0?*cat@o%)NY7Ge`wHBjK>10~Amh zrD5LTk#!BeseEhmB+a#n`lkuE6*dQO32b~Mc`fdE1z7(MKl7T$7Aqi0lqoM%vG=J$ zjmI~TCuFfNC~&?2p?b~H8rHtgI>&1`;)MP0VhGm{@zDa_EVlD?gN%^sCmHhP!9)l6 zbIv;q88jKb`mF@g7N*!aFr=b(t?YVWzB!XZLY+N=UCK!HirE$0wg%;^ zVo_sD);}+Hd+fcLI+4k4y^RoylXE~i@RuOC$eM{>@L-KZYni>-M*K5yAIaAZ9_c}^ zEPxx~4hX+50h0dHrV7?5Z)#-PsIX$KG@fWrr2rU;5ho`>EhWR{IY#!A#j*E@&w3GG z;@pdJ+XfIi4Wrfan1ETSrFq22OJRKU4CuVldhlwc?tuzMy0rS0XhU{wIpLer8L{1;gp?>o@61sobWPd zpI@l=iQ}rED0r`@3yXV?UI@w1%W~B0>i?=akcg>+eex6;uMD8HPHbG<^jo@Dn*gmH z*gpTDH)<77J4hNo-SRC-+SY=+sR|@fQ9RP!YV5yI#p9F^nD=(QOw(mcP~ ztSSb{PxOmWW@913e!C!L;yB|SD+N~=u`bk90PPx$vYcC%@H{0z;bY35cSQ>m3Ler; zgz?IEElQv&qof*K%!%fvR#9EI!i{oR)2aYr_J3)k-5(sBJQ1^U$D4HWAnXt6=eHp( z;x$t^dc+724EdKVXXN<&(g>LyV}k4I_KRm3-vlYIxTCix`eYf-NSdhN`YDZ94mLf& zX0(KTF}(R|dQ}&~g*|&Lj-n^G?5^C;5f`noR4xI`g@W!FCEPvhm{}5;EgJmfzUbQB zVH;)>v@(s1z;ZQYKV>iQ!{P>Lb`T6C-{?j|;h|NW&Y|l*Uz3<(YQpavbli_#r*?4I zRdL1yzC=@3WYE?)(Q``F8$5=Mjn|>}XTCwH*8IC#oPPJp{w`5SNGzEfdzkDhc^ewB zN3pz_I*ROPS#;1GFGkh<7myz7Drn4MuQ?85khkq_ts@AM6w^~BE)78$x-1=iBUMOX z>nVhT8-}uFO{#bULc=q88-IDq!4+NGt0<%Aav+y^)rY@fF}zGQWL~*l@qL6{sC&vH za0o3K_xrk!-$V3xFwQYNtmxSaaQ+SUvq1lIGCc8DSadP;FumKn?FBzFQ8Y3e)=Iv+ zSPMwD&K(V5(2P?B(TD%2dJ=I#N0@+dI{Cc}RAJ0>j~Ep8pc0mJ6dzun%KF<4624hf z9Ql=I_mxH9=&P2v)uh^sR>xujq@7?6FW3DE?>bfGYrp^A0~s$Y>*)m-`aiaV)T+6Q zrZ-2YBg0#>zEeo~=+XCQrYALaM9JuqUaPCVkgAz2?{uZe4Vj;o1g4z6Z*O+0WIyRm zuRpxml@$fVLKSG;nTWu_`}x4qk6Las0GuO1xz%kM;26-s46^K2yPyN zX1@iGyV-<2D_!=5nc75Ztqdw>m-+6#64a^aGe?q-SPxE7aDVZp1k=~~Gev?`s@uM! z0+!0BW@tJY1wv{(o8gfATcV!1BS0)0Vb*R(kY z1rpkrl7Vo7l9V9DdZE?W5xoh8=P9_#AI~MWQaxN-3TniKMGqqsVlSty#D1+>YWkcg zqj?O|o&gTQ;b5f|jR!Y$BBR&dF?)9TIh}3+2tRfb6{^UGOP|)}mq-51yiJw=`aj+O ze}lsdVaJo+d*#ji2;NXSUp6QmT0hTQto1-Z{?VAi#O-_QDzsR%NMRuV8-?YlTtD1$C4Sll z-dkOi;B^PhxOhE5VcwcMzJnRTOp5!o$Y}KWpt;mYnvVWf=)~%=uE&*R!Cd?+(8pJ^T@v(r0$d+4dko+s87owIXze-W2M-@iH$ zT8$sK_e9X?3DM$ZW<5k%nY3Zq1Ztp~^d@}rkZ*9WZE0(!H-RiZ`FR%$CnUwxR$tUX z4#J%3aD1~j@!qu6!^Br>P!pn_cg#Ph;442S$836kK_k-V3_WWWc4@#;(S6r+dpA8N z6a*hAjWo<@^uGzTUi_d+YTf-<6O*R=^g+Q>I+E-3gBv)^t?;}S{j5JKg)3FEGQzpO zTTGR5gMSzF)y?&X-AqG>L5*QF33K5u@zCYQk-m1_6N~h*0~@C%mA_Y+cVc(_8jE3D znT~rg_g#h7u8Zt0HvU+#^kVjr8#+|`JYM6p!u{ZGmKEaPtpe9{4Rs2%2#@{;zXoDk diff --git a/graphics/fonts/latin_narrower.png b/graphics/fonts/latin_narrower.png index 22847ef09953dda2644214d2619277f4090324b2..2b92e411c3ebec97196a6302e89ead3af7f9cf17 100644 GIT binary patch delta 4397 zcmcgw`8$-4*M4R^nwf~v*s^a?gdxRP$5IkSMP&;gLHXQT`isF@18IX%SO+Jo_+B4tWc+9`Rv%n6l$TiPjuQ@0BtxrSxgCw z5GSzjgN)G`sw?~&B6!mMCttL8D3Xy_`vtR86aUG5R#Zi2T|Z2T`^ZUIPVN9Nz5!c4 z#bTpOX(04->?@ShV_}clY+DciD7V(%Q=rfT^q`!M0a1Qn3)W2?6t%HuV)!#yVl+^B z@8XnGUAhD|r=u@NZHwUXs4iCyD)Jlz<~?+7OS3YfHeq3lJpJg@oK}6XiX-_7s?{d! zE~c#eN(y{M(JKgT-oaA7b^kRgO-Qb9K1>8){gHy243H~QaGgljIsp_}?U-Q(NRknCT3$3)C7J(G#{-V^Wm zwZSg=L3;iub|=EGtfpNt5XENVQ_yGGPRg+O6$QuW+b6;`{E~}`FQ$A$k44ap%LYEP zAe`fXVVBQg3rB&enQYS@Xs`DLiv38KE^bDN5eyW_d3{oB~(E*${6bq(-0P5@}OqZqZ#sUd|1NMLyzm~C~k>c$V4RDDeOD<7u zJGap2v*Al$g94(*JH(K@`y?#{s}>-`!d13VaWFSk`)ly10JMN=ET_bK&Tf(bp)2a5 z(eMOz=bH$iFZRwRdmg%tZ1JeA5kl4mMpxl*oW5CXBvR&M%*{g&yD7mQmnrP$V>(*a zG5^7}xrO5fb+P{qHQ|nvj~U1A_Y|!Fn-k_inRed1U#@At{u-ye`u0=;+{fmTm9wr3 zRb%Q}O@jorOo`qCS_kh=Nn9ebB1O(bt%xG$P9O$>BrS6E>#nC&r|Q8j0bIv~S&Y^& zBY?E2sx6ZHniLU$?G#lOPXm~X%L~|>1yS%9WK`bnvSGtE-_E70>#ZDMuXZF#d|Fjs z3z_2G$zsJ(1$OnfEU^hj#*celCPFHp^!oMIt2%P2SM7cvY>_bjnz-gyWAghEEztgS zg(2}HnC4)UVl;jnVJ>dP>Jg`pB}M>8cq%;5)<-HX+*)3^}+U-x#vvI=0>ha^U@;l(tT*^PDFd zC1ErInIWUlh;h?!nv!JbtVJwy-XE6fO$PG#H{yIjlj{mUu>2O0zj$X%G6+anGffLS zuCFd5pMIAabf^f zH#x!iGtgP5hsfYcT)s1yb*iomU8&`g|;C&9)L1H`x z&nH~VvYL@G)B0;i0UvrHE+?0%yxGpiWJBDJ&6S(LVQ&Cc-Y?g|(4buS$IC*j2zKRj z^Q?0eWuNZDLmL{m*@J=V5P8TLP#TzEV4*1vX63Lt zB_P2SMyCrQ0{HrP!HL@kd9h^BVa&aC(=%f5AZ?Vd5@k>x;8wYT-0of`X z?D&mz&399}_8%Q1y~-gnBPts3J9*a_c)UCOZVYSY@VmBtijq)r^Y7%UaMU0J4VkVy zl*tO_hy-m$AHd`h5J5ok#SN}!rx1kjfTsf4;Jr4;R86K=q{H(1EX(0qA=*AClG#vP z7s;qk5*xlevg=`*3G%%CZhY6-=G9$#6GYor)%Ik6BJn+gmiahe71xoSJYqzhe1GPJ z`@|b^^#@G}+8P+Kzg@A!;T8Y>?zgqLtw&aj@zxu#U>G^W%_I@H< z%x16^vf;VXzyLjgU>l7E#JJ&gj|5%5>-~f61e0Dzi-qa=Eg8Uf_X^oi;X$K=qbZFO zhfS+o_$VwT#{WD^=jW9#M)(DvClu|`0!zw{Fr*hF){+~XWeXizJ^yGS5b!e|mx|D$ z)_B1OnB-x3y9vdc!#8@(c;e9kmABs4*_Fv7?uWBjZw$p)EGVX}RJyY?Ur^L<=2aIe z3t1I^{aztd&3<=F`&l<99b*LchR8dmG z603pmLmXZmgf7<{w#k8AIcNv;L56meD901o>M{BQZl(=*f#;h5BDHbjq0+HjJ}qdT z&XkRXaaj9Lrz=yY*$0k{-wMN5^FgY}mXHq}36DO09CUb-cF;)>!j#1=nGhe)_n)-V zTMpa_F*+Z8Uf0=vaZW_LRc45w@S&4e-GU##dX};S-Qu)q*{>SF-zXt;*eszmirZG* zADq;Y+pyOCt0pHyiBw8J`|iL?pl0r#Wk#!Ho?c{G9qzhX@&Imh^3h!D1?p*`?SXW_ zO^GD-;H1gArZga@=C%BB%_+xDqRu36sp?~E{O&k;uSm3|mnDZar!=-+Vd#2Un`PGx zuxlC`aYIfmw)f~iPvc!WOSDGLt(oc-nUG*rkR8zq7cL6fW8Qq1%uBhG{_mXC7i~sy z>`3~?JAxj*wY~jaXL)o*lKm#8j9UqjbQ~t%^h?it+DZ#aD0*ua9AW>&;aJ6Jwq?y% zkX!IpyATX&9y03$GFygxKX+#h9>pj1wLuutU{o1_yUv}Ix~#wREY-eK%(}(JEYknk zIqKxSU0y6AFnBM%+wV>KVbKJ*==tg!W+~ka_rsXzYG=LMhamE71;t${;LTUc)sAbr zN!)$SQr*R!T9to9S6+Pc&QHqgP;vFCe^^N$OibXOx?aaqh|V!lwKnWbZ%-G?Md&H) zh7S0u5;`VmJw86uKhPnmt}phBC5J%&S5<3l{Ii{IU%!{|exTdpd^)_Ja5vHlIj4*= zKRs)y*H0K5zv-Z3N^xG(`uT6N{iR)nG>uML?{kjM)%L@F&gFahKNSkj=+>=<}iyr$9oW~pU7vP`05lS zMTJCCa@in7=&e4OHqkVFm6ig;)8g>bR6lC)q?}CCrSaYuf$W*$aC7Wpor+$ZO{&tq z54!#1o$=1-d3J;~RTBYUYmN^C=vk{VxB&I&bC;G^qM^p(E_P9ZXw=`8JE!839g3SubjMC(H&x5Tyq7Omi<@){e zouvkTm1kse?Lz_ z|J|&Ty|$kKfWd=`KdnYs%k(G;zjri^!s@hKx#>vSnc{vka88T3 zcRW@a3KIIF8jV$?>*`vE$Lq}c9^}Lgp!OJH0C(nr#*FyNZ-0?Sj$S{35^d8CY|H%QO1wJ~ceJMOr}uAm^>8_lF*qHW!fiEZ*hs?rG| zS@;vtTz8OOu#wGe&qjRw9+l^Y+0wcm?QFb4KUHwD1c2X9dJ29WK) z-RDaRzxKDAT%!_-GLY#=30>cK4?hjB6Q6Y2nDxbqrnixvub@YwRgLz-)t5y#0i*@G zI2HYi8*GrUEaa#B-nvtwsXA|3%e&mhC1+!PBtK2cD)PB_`>IzNGv~~+rhdHy0Z*6l zNBqV{G~#T7f6k2*9WtCpp5WTyUXBY+a+6AGjJPZ|Nf#WjZv2x?@>ILyyXb4k!KOJk ff{id973Fk|;hNdLZRqm%0RkAEyKGRRXCMAQmU9UA literal 7346 zcmeHKeK^zW|NqP|=BYxY2Qw$>VKy@}V;=Hc#*#`Twiy<-VQeH8={WLKsguVRw9X^_Zug@Wu5NLX+py@N&_}g*O}W~T=%}CvPV+tlI<(|j4gzV zc6smaB3d_THV-JCs~tE2BU@$DJPhIaVWTbmG-#)L`-zjJs~is*GHv4=Hs0r`jg7^7 zX4|v4&G2)Qq&pH_{xy-mMhf94v|}1xR7ZWvaAcQ%kyl)wAp4|cmE5@0<{tNPua7ZL z%EG+2_@&R7eR(`=IRkWD-mjoeZS(=tJI1uIpx9Yh{GJV%L*|i_B-?vt>+X9z-(j_7 zOX!NgW=hsrF0#+LgmMgiVXtp{{lGJ{@3WMPHwf@D37F~X5_z2`w}?03(IQw}Wz6Z^ z6RDr;F18|H#Pmnj)=b|x43qkZeO_uN+sf^>-`Gdfs@Wpx@v9B6peihF*+zFbb!v!k z=iRUUqwc9bAtuvfS6Rnay3vym5t^$e#|tZ|?9Ma50lm^XgFe0;{XJHgQ_i)oSck|%UX}#I}Z5Y1HRB704{prA2;9^n9fEZeqK zDzBUmCxTVSXM)w`LbfN;*#SCKFE)*#!w=wqWd{JprhE>S?#JLFXbc}Fi-de%Q-?$_ zy-3J?`eY25W5Muc+J*-)c85DS)5HDfhF(Zh6Sy&-2oeM^xKso`z@HUNe#X%|a}3QfcfE zE(wVQ*Ac(R7r-Ht|Db0De^UX}1I?#$(7HMpbU*<5dyinQRVYaEEueqv5$p_JQnV8z zm>m*CXIOFZ*?qq1WKbEzykV~GkR*I|M@ zI76B@9gFcs>EbXn6b@s+KoM{>Jc>Z24LXpJ_Dog?|4*nhGk~$1OI=b^*8pQ^fWZ^=@CI0Y{I{5w zz4tPLg275$;?%|H=zYy*=~#$hGN7>3r8)%(e$SF<5yYT!*+I^1wm%8EM1ffH{9~C6 zUMDXqmugAnGC)!c7DvSB5ixjY44$Z`N7Tn}#bAh-@9=Cdrgzx?hhDlo2;;9uZp#b? z_YYe(eZ5h;8G&DCU#I@e<*S51EME#DmHst_U}`ACYdKDk>+2HTm&)>CfZgL;x&Cfv z{+m*u>Uz`k4Hz^O-4KIE;iwoo%8;suMPc=H>3BMwiU&{guk68WZ!V7-#4z^(bp*8n z%X3*Pg!b}5ZT>5o=gU|+1yC@sUQz!l82Ven=%t?Vd&b7-f6>Hv8Sq_`0sX$(z~%+^ zLi8Wa@SA2!ZRdaZd^?N(;SM16Kb!n5egBc`AG!XP0)GqqPj&qx*WXg$Z-M`*uK$`` z@IPOt7%cE#5D$D=vJ>W0z!xo9ioLT{O7kLtKZC@y^< zKzgPsXoPX?$X2i+sHCI@VM?_r0d(JIXKC)t?|Pf{nBCp1EZk&{!Wn)%h4@hPvl8=5 z{JQw;!-X#UZxu?|yIf^_N_B(e{YV-MLv_OAhgO-NynWJvq_nv-YI|2=Ty8;OocK2G zeu%Dr<@>s*?F7o`7?!W@s#=}?zg3@^BH76u18|(Ya^KU?ztPcT*)e8nWKOb z&K)kwiWRt%JBp8HRZCy166|?no>+uN>4H3w#kreZGMNd5mVmz; z#jWjFv2rzAJoSR~9*sRAH1hK`o^9~%X*Zw>f?4Gx5%PwxeP8y&n5t^b7ymnm&~yjn zp-V{{7EJal3U2o{WI-c$< zjmg?p5mI~f>EV*CgLf4G)$3Gm2PB|D-~1$lpx(H7J{zS2_^S+}QlY&avA%68?KzdI zl#$Yx;_E38;Z1o_b>snsd2@X+3hF8~;p(J1@u;cl$z+irkW_DM8(@D$;HOe2-YNsN zmFGyM?1T;}JBe9u+Ky9%j#VA;EC`53Wu&Nj%6Ta!of31UOLy8CopfLaXsPMa8f<9~ zCZ;7eJeLV|IBJl5z1wLX)AU#Jf5Wetw1J4=G`miVtFP z%P1Pww+>lDx3keK%i3dgN6Z0UJ^T3{0KMuiJ70QhyXU#pt&TDk?DZ6~j4JAL!2I)y z*wGKtDpY-exIq22UDozDk9g9+ZIbkmrYG7?``l^3*!#5cnL3tanj)lP%7U*}E;jVo zVY?9K^6p2KpqCzQPhOuC6OFuj8mv{eUg2UmeK=pDlL=8(2v=3mk`O6A*l771%gO9a z?gY~bD8suDUm!nVXmeN8Sqdq)q>G5Z>@-R^*!9!Jgkk?6w->$*aVs^4vn3i1g|7@$ z`gCxI@Wn490utP8yI_ZdRxydMb6bVd&G;PI0NU;fcBg%I5|0{g9Q+NNW#AJ2gQuyA zf8wue)Q?NFkPi@i?t51`vlL5T{qEQ4{(KogM{&XZ4m`p zl?z0O=c@tbj+@1u$i5@Mk7vq&no`%r{>t9NacPst&auKz8w<5sAdSe{>G5?_ z$DVW}`7s6Qt!>0vAR_O<|c$oPY59>QS!hAf5@*V{1$9dGB9 zY~3W~uzJq$cIg`di_q`?vsaroPX33SeaVu9M?hy}L^mnNfg3-81|B*RT6`?UDi$op z){2SVY`DHNs*oypMF94i$}CVcg%z5Rtp*TCr-BP~-I|`fYu$;xs;Fr-Cg5)x>Y4~J zWEZ7#<}D9Cj=8=Pi0FR5IP8nuw6{iQdRz6m^8}5>D{bdO_g;y$5f!v#t^t;OuLy@1nyk!LdNu>fT8+B%DGKjMdNUS){HlvDUwU5W9YfSn{w> zu*I(n18>!;8NB1!&?i_~dE{EtLMrz9i>!zG_%nWX{?rzr-)|D8cqMz|@wPc6a9;`F zDGO>u*CSoc-X{RntM5*|%#hvMh{xO>T!9$Luaz=+njn@lde8lSrP|P~tTem2DTQ`bs?F@sx}UiN~O5!rNi&POdrD>~6nUdE@m?I!;4`sfOXyp{V2 zxwec9{LHc73F&~)^Aj@tg+*f(*F4ia;;LftXKuxNjF;WlIN+OC5jqv9aaTP?OYCBN zl#XRf6UJ`NY_U3|Xy92WjkQa=E*_^Z#Mr63bj`J018%BDae@U}lM==o3d@YnG`SjM zZv9d;Ka(x7H~iqZR(f&PNyX5FjtuC5)wz54@(ivm9a!kdvi-Q()Ya@>ODtdDHXJwY z=G1=k#9Xp&W%P$9*LGp~l#fO0`y^jM1 zVg@uvh7E z+99aoBX@>rA{OqA7_gCr|&z>B)z<$CNZTjqz*g3 zcgT{}z2R)Q)?;qlNZf~ZI2h0dFG5|Q+voXDtfjVVouCT-lK!Uyrw3WNEB24x0t_|q z@~Z&X%c6D48=jHmtSOhWumu>n zV9nE5(CtaR@}UHIqYNfU%(Rz*?AQy8pGHj5#}wDr`Q>gOdhKE@xD5T0-2oVFH?Ggn zIMSW_L`%4!1&k{;l-?)8R=uZY@CJCvypaj(HdiuUdhy!e-qYzR9S{WXie)ojYIw~H zs$=@9=DD2X>Nb7j)WH__xQL!dZMn)a{Q0Ap)T(g@RJTh1`>$^M7AWGmZP(B;u@8s)9Z`@2mKnC9i>RIPS@&0bS; zBl0Cb8%N(Y;{9xK|Lc32X*0TWi|};|T3;efJ}#UJe0A7fAp4U4j>>6}^_AJ8sZ-1+ zx%CIQE(V6@DhTZh3HN#U-`@Mm7*R_4G;cceee}0`+J)-~?7}lXW;`88l$xFOb7}Nk zUvkfNU(}YT=Ziz$qCE$%89xqL*#=0k!`-tLn4Bv4$<)t2JIiW!V2!R$+3RxLeCM9( z)oT}dKT>OpR^GQ?v(ei3p;Ud+VY4UqO$(}CFB}ZZiCfHznK+qTNI!!d+V4K8ae3BQ r^mFQ`(E_jOk2x_`#}sCMdb9}1TilZ#+$8Y@03SOm2g|bUp3(mYl3ugd diff --git a/graphics/fonts/latin_short.png b/graphics/fonts/latin_short.png index 7eba3e748bfd2c0371cfd6a398c1901e5b5a65a7..98ad3c5cc3c9e2bc7864f6a541d7a0cce72f2cdf 100644 GIT binary patch literal 4678 zcmc&&`8Sl0|9zgvV1}_yqL4|Jk}bTEEMtizOCf8RD3X24Zct>2@uos{VJtP)p|VVr ztwj>X5@X9=#yXba)A^k9`Th&vbM86!zJ9zv-FsgNW+nz4Y$w?O0N^mZqIUxTz`qg# z;7otXR!^trFM<9y40M3kUxgO`9!Rrm7MJneN2;o-6bj|&=*W@kFA4xW3x;~y7Qs2I zx9-Olqmj~6M@RGT5`X?{D0a8T&eL^U)4o?%0D)gy3u5|lWvL!_C)!%5oy=7aL? zpiuKxm%WAEZBSHAn&#qm!%on8Ufr~__AL4$yLOxphs-ZFJ4IU zOc8x#eU!Dkh2u+)!s$u>bPyCs@gp^}P|8=*m|a$0D){{{95D$VKc`>&-WyIRfC#)N zb{R02z@g^;qfGpyDaLj__Bd@(3XM&o`#?)A{F?pp!BMCG#dG-F6M*S4vr4aH_oB!eO-_;fciPm6=_;ovJox&u zKZ8~s({qSmU+}8|`Dka@R6Nod`ToO)if&BFwUBB^E~w_`{B}trVT12DoRyEwf(;7~ zu1Q*TIK6l=Te2V}A}){n;h4%gEUrAtfR~oD^^^j7v zoF3!O0#fjj&BGbbbwU;YGYQ9j}UCpHYp%3yvRu~L4z4?&=?v~gU)RmLW4K4(Ix z;sATD=3}-~tT5O-%H1yK5Dk$Jk`dM@`z+i9y2A61yLUi>qP_*I{4CHPdGngWUp4Lwfh0yBK>9(z^|@>~BvWr>Z-?Qoq+2 zR?mrbLcoJkBrKh7U0iD4GWq&6UlQw6Jv4EPB`kXCiE|P>O#5vWI z-A{`K{2iU5H-Ih_cR9w=HN%!sZ@w7Ta5JgmK2+5^_B@4gS?V}Hq3_H!6!&;{QxdLXPQfgCBnu6>M)t=cW7qWc{fk~M zshDk@Nd2dYbJiI_Q02=T_e2>#{K_Id5#ZaFhimI}M1{ZQzY1N!3_Vh0H2Zsg8XS13 z6*BQAsN@FozYdFw^NgC_M{unWUwM-&m{*e~6$o9<^5&5MpV| z1!BGtwCK6vA$VLx>OdG@r%#Jhl&^)VNov`r`-%(yfbMTLr>psb=0rr=Q|T9AWURX` z5a-BP`=>}9?R)}3Hwv3B!FSzTZ_rsMi1bn*%}2n%>{KvA>V+oN*@7Gtx);n4eNg#i z=V_ObNSncrE)HZL){Otmu~RHqilXi~K>Aklgi!jvcE;`Hmtr8bbw-BHOl7Q)D1R5UmKTIE-EowXVahnzz zi0IuvFP}kkI6ZIvQw1LnBR?%9hy{KW)cm@INuV3NBa-}+fndO);7{H?Nqq0?n^wjQ~yVz?&%U z#o$LD{ZXeTyj+QUOXuCZdb1@8D3uKs%wGhPUMN+3KFfHG9r!^^r;Vl9KtA`?CiI8B zy2d#Bg51Mw#gGF*!?vYd@{K*rGo+RXP79#DcxxoVkJPkNGigN2i<0b0LS@eoxB^iHd`FHq(QG%&f9E|D(KUR@8nhX?E)1Oqf|l4;$j`O zacstit_<#7zK# z8BZR}yrgNZEHEj+es1oZ{DtsQ(=Y}|fS6NxbpQtDO; zP$-VxjmsId7M{!|UW8I|mkoXec$mg7ZxBR>g8Th=#8$3A^}60%puCl=&)9w|u`iG| z0P8k0cya;t(27!68w(Ue9V!a1AX4fH6i$v{4f)1jxw{+jmdj^)-rfS7;*7pxz4Yi2 zOdw26fTfQ1V4=FFFN3&ZDzd62zfEc=6W$N2)o#elvj%r=L&Xm#WP-Z~Vo{tz$RRCsDVG3cd793zF9UR(fvRFz zG`$~h`?(Qc&^xv8wr#}zT_!hda9lTy6^W3~R|)UB=6RJQX%W{^aBQVM)^~lgR-;fM zkM*%)+FPCvT-An6#`0{bvkM`0yJd5~`FYnoVfE#12AK7NsVxMqr>X5ajS8hmA^kVB z(3n0MY{dZ|j9?%Ne&sDhb<4AZcX<7Q`h=ul?&6TvB!?X33rU6$Nh~2Ra8n-XA`hrJ+j+b(RUH@ zmsBfS&Mum|#zeQ_&;UiJw!@y3kjH7=+I`-m<%5VmIY2TX1SFIx4{7e>(~02)|g=l^a4}SKEp=~ zb1YI#Px1X)q?V6>-c(uF@D~`5qbWf1Bxq%(*X;^34kml8&=?ulQ!+${ao^|*<4H#f z(6feyd5=}M5iEhQHDJ4y7|Ph4BEs>beG-4pYnRw@_|2Y;T)k7){(4-|4Zbw2dD5nj zP1^U}rfukF^+tr-T*OzC=e>cSEO(xs#(RdR8Sh>%bY)HhkSa7LNbiT$HCr$*eddOk zD5gNidMc5Rb1t%l_}>f-emE2Q&I%o_%kXnPf9-j`IIv;&Y$x^;j`i3$ZNt%`7DKZl?N*$!~<4 zizXssJeAVZ>-_Du*6^Cu)H$mN-KqX{B|MO7W;&4=bunB6{4iM4*wgy?RFsPQL|$ug zqwwq~%ti9#eMbJensJjXSQznY&VUJ5zDD>+NU%VuZ7hCyoXngNb&~w+TFon2shCim zS!^G}n4zQks|feTrb66lGp^>N8+6lrQAvtQ87^hc5Ceip=~Fgv&-^4A~i$}*E)U}!cs0}-d<9M7;c%ePEkt}Zqp2r3ov+Mbb`Rbyq%Epf~kp%AltHJ-jf_6JYw51wD zDvmn!9kxJSt}AgzpWp6$;F6qDW4swdL_dvs*rbtqCew@vl_It>mgtvr*n-+Jj#hLN z3kBZ)axG47xAP3(Fo0#;w#7#twvb{)4khKd!BJ;D+^@-=KEn&5)I4oNZt84FUX(ZZ zE#3`6>aIx>3KnbeINwO?NIQDiZqhZLf`8BCzandZ%I%mAY49yLab8YY`}N;`<{4;R z4oJwoMF?_SuT{$ZX;E0B91&jZo5HpL{Xzhb4O8T-+v=w9)4w>cY7MYn0b_EoUg`@W zcZ9@McKhbM6dxyE+7141ar>Iw!Qc`P*75k}Dx#`X-JjVx9n#0Tp^(g#zP^SV4KEM0qVFnCOi99UDBq>IP66a*O7 zv_JDjS|Y1{)hIl#;`Qh_CNFO~0FyQkv2^-u%2RFOTA*VTsS-YAYZ7>Vn4F64RFD*oos?LHe`QXm&SV>;yfhLo7-%9@+2u_uc$M@l*Y5IgANCJKc*a0Ro?_0arY-~`?vnBkxgB$(Ftq+s< zKD>$azJv)S9=^pS)qDPYV{X-wSf_#|NR94hL=tBUh6o;{0FlVid+By delta 3462 zcma)<`8$-2_s8#h#>_AxTb4n_PJ}E&3Zs%CYfP5RkVi#`A!{->WnYUCvQ}f?vSeqH zEy|XM9uiU3vhPcMeE);*Z}0c(T-UkIFXw%((hsCA+@dv3-=ah&~;#de!d(%o&Kx5VWpXGGQddCKoKarWa_c0-J z=Z>$hvz*?Lu#7QjG<&>HS5u5};#^uo~JmDLH%mFcjIGgIf55jNf(gEf6j z1D*ikYb5`$5|B#$Ew4yt@3lD?;fVI+uedZNKIQCY4DgkfJaTOXies%spHpz`oA+p0 z8vXk62>!mMo?69vz5c?KO~&&0kt49Fy*V)UU3)USgn6Jj8KB?MCuQ3}O)l56UU1`^ zC(UODU_Xp+u74E@lntDHcMfhAO)G-FMP!|CnlI>8VWnc>dG1RSXg({|88fM2WEam3 z3h=gc)T9z3Cn93~3ZwJcu`}E~Huy56wnZ#nJtf1g_bpe)O!@b=5u1K zOC6Qnp&6$UJyHS-Ft^NA$}vg;EpM6e3^Yu4eUU>a#y@zYkh5yx(CrRy@?Tqbi7pwy z_xvDWR3FLN%lWwFowFtGi)l+z(L;NtG{+QXvrnMIG->&Ba>eD(Eqy|GW8g?0Ke0#7&0&Ui^mcvy6AVqq^BEw4>{`T>^Cj*q zEJJ|dN>7hg@t+`@g)-smPY*ITvoUmNV`{+10X}#U($mcl4-EjFKLwyNuv&K1gJtzB zZ7&m{!Hf4n;%`Vu@qFJmTd+!BGJMNPY1Lunm<0>oy)EqCvfbxDs47YXsTushf^4&T z^`y*}U&m6Ue?ls(8+{wL8y|Dh=b@O>07Xiq@={c73d>K=%l}PeRL+8Bn&*=eh`c;X zzf9SVT;a1)sc`a{&*P}rxhv@lvu*(wq_3~&7lxL|&VFcGlzbM1ltmM?K^{bRy5lXV zM3xtMEVAs5R2$a2L=UN$!W}r8c4KumAx_d69#!3G6V4g zH2RhId~(3MMd&G zPT-FQ*=teOjc8Z(Y1;&I_{ahQgOB>#xV-bYMh9PV#Mu_Zr)%y*zw;ewk_}^7$kN;yf3|W+~{z9!^)A~|r*n@BA$^(x}d=+wI*a`0%$EO5E53cBk7bQhm!8D*MZgsDmmH(Op#B6@K5|Ou~)zKXd@u@{JCw zkyFp-G?MV)yU>e3F6a>MYjSJlGAqYN5KB?{(cUFR5w>WaIR(_<;JyaMq8{~vI~G9f z;#dAup{<7+z*)n?a4#)-yZca*FYkbeAJ;3d9ku)e6L~#BA&wtM3UFkziKFF*tXYV9 zq^AJ5D`ADR&rNyNCh-#uGUCqnBXYoNq8_$GNh=kvjGLXJ6`*~2U@^g$KSS9e=&SkB z)2i$M@~KNIH=oCyXx7y~K>Mi|A{|WgSn+U}l9Hf+LYbyZv-mcf#$p$<$P_Gm*x!nK zBxC_)jbm(ArR=iL=y(+;eu=7jdW(9;Gy_#<%~!E%!H57$az#MA6h~zyP9Ux{Yi=JD zc(PepZzSOv;t>s~#&)Q@)9S%r_XZXqm71KWyYja z%PyWH3F;fQNeUG^jn0<_KqDvc9?9YMGFh=wfVD7LIbJO5+Z?#hi$7j<2dXwUl`u7d zw|o9a_;QAi%k{9%7V5Me2vLCPWfHG@=R!SDBm;U)C=(O?kmEiE@3%`mK}&$2pFvJ+ zQHkW{3{&|4pXVYx?J&Tq2mK?jH>)M;fS6*y7z+-ZH^*zfX!UJrKbFZvoe-~z2xwn1 zj`X_)cx+q!ikdSY<32e9BL(p1L%9!rj`JO;;Vgc{)2paOYW40AdGB`_I1f{@2Il)g zha2U7H9W{CNI+20PrmVFa$rmU~b@w+_aP+k?3iuo1-Sj>YnH%SoAZ&{b`E0PGF| zkk!fE(~inqf+P&qeF`^a2pP2z!6D=-f;#XXtEC`0#GN#$thYdMu_=}g=3xAeZX`zX ziLUo;__zSROg|Tf$**jndovuQYiybWaVTI+igX(BT9?jiUssknrz;iX%`uc<3%?SZ#By|9Ft^ zelfeo7KDw5%}41#LHf~rORdPO#!==3_Ewi6$UXh!#k-8g-x^l5V+I`N6&fotdlYDm zsdDl^`<4;!rPhVZyFeX^?yQlT>Utiw-9m61&$8>f*K~%ljO9)bCTEp0a|lM5bSmAo zz${uHElGw;pF_{T?$YuKx|BHc6chU#V94)u8won)C27ya4gsG3*}X(pP)MQC2#uGW zLKSiHNb9m5g?IiR|FxExRQ*!cDk_+L7{T>am(8U67P+(GEHAZZCnc`e0-{3HUnGUW z$hYpMiAw@6781YxRlJ`9e0i&t%Vbr&eMOOceE+9Aj-&toE7t!iWFrh|JtF9e!r{y# z7<5BUE8-H4umWCPy>O$hTev<&aEC_ykZDLs;CiGxck*dP(eNuip?(G7Hf3nY{yGCk zoA*Xj2~TlFyF^ZszU)+=RK#td#tS{5o4hMJ_Bwh}EzJmL0~RzuIvy7wVftxtg&G_a4k%`D-*0D%Iq&*U)=I2#5jf37;jq|0}t+xq(V!IV#uii z(OLf;*ZWOFaxKBJ5By#Y)8)M5kYS^P+oq$YpUl%LQtDe==^N|R+#h{aFInItP8D{< z<<_b8d6Jl7@c9cZ6I(ug{5z*HfIN3)fR2_J=%&l%Xx34~`@>FcMyEkK2;kBk?C?9i z_UKC+JMD}=V@9H^#(|(nG`3GD7;l-LZVl|=1os!^FrCgqG0r71S*v^80;7NMzTdv$ z9+Bvh5O%0H@U2(F{%&lkW$#Mw#r0^nU!Kd(tdyG-M|TAmES}x-W=UU&WYslLQV*4d zhlV%a&4|%fzt#FD&cJLeE!b#UTqHI86k^`x$1cZS>sR-^dX|Irs5b{P?hdlIdk;dd b{6Xc{7)jIeEgFv>F2F#~-xU8cP4|oB9 zDO*=V)%0QdZ>zDKX)N8V_0!WvS21mgCwcL2-(|=hmd9VS)q@{h^N_)dn7CejoEyf(>5G|YepcNtZ{^KF>nKl9h^C9Q-lk-o zFN%H2K-xnS(bEg|-n&R!*{+ezQR-;ekaU+l{&Zo84`{poCGk6D=@swoa^_+x2|sTX zU0sG<>CqW6jIk=xn9pQ$7yW6uBp{df;$NrpEBGsKs1@>(8l z;}h?7l^K@<=>UcJA-=gi*2i~zIMHmzpgLUpqH?})pornKCF-(0LN)~E1<=dIKx*;Y z4$gqlO}Be=fI;;w0?N45g`7FF*6GPqgx`t2bsc6pHZuFxC9q-wa>9@U{KiSx=s;srO7huSX(Qn&v)YaEo?Zjyd6Ulb5bt+A>Cazl#&|3Q&H{N}S{6~tB zX~X3g?asrkfkNLD{_MqXqeZgzh}n$1Ao<%>2)3-*LYhWXkli@U7Wyh6Xpe9>rV2V_ ztwc;-X6mD&So_UZA2$^cFZ`hX8=Uprw#6yYJe;aqs8<9L;*X!+U$5CdJhz;HhjNsO zlez~oNt@5Hpt%6SqGyE(!)3gu1UVi`s^ZZluOsZOtgII%1{CX4erQ?Va8+fbd?uiD zc0j)ETU=bbUDswFeR>PHU6wZq%fC+K8r{~6zk zHo{l5p^)daAub)I$z9}}ymuE04I%PJV?kXA6^{L1DZeN&4^(D9Soi7~`Xb{+>4(}qES=#{&eL<(7l;@C-DPIWLt~bhaZ$zR zvacvMxA6xb943ST<12KXR6kYmc~GGG!5tNmq*}Gz*Hs)CtPokb9K8DKNqpT|Obwh2 z^dkztO-uN5qyqU8WX)lID@h)H@33B4SD8wQv{ z9Ny@?09J?}t)SWG2z{E7`%E8@J-l5m!vjKbD~R5$XM-}#m?Di#xOO1*0PxLmP`0n? z>c`zmvaWsIYy@9Gpp1ob`ofTA3YEi z*M{55yTHEj@n^X|@!#%AB~FgU@A73&n?CexAZki6$#axHY-?{)1hYB{XoKrn^&n9r zN>rU*^N;pK&6c8xv@p@yvIwE|sdxWQId2+WJeqC)B8vriR;gZSQ`*h2A8b55xL&}E zp)EhMWZXno=@=r+1z@byGLLnF5#w3or1oaRNbx&j!&zLuUb!kl_37>J3}nw{CtfpR zAX?g*pFD6mdZMC^52N7)*%&sLuHV$L(Sp7NpIF#h$lo^{?6y#ORe?OB0ZE_B9yyI{ zgDSaD?Lb+A6n>7VA@-Thn{7Yl#U)5Y4l|76K`NT)s;#5oBl^N!sO$41B6%~;ts zk7>S_QI%mi34sV4p-NC=S?eMdeX{{f+^@Xx%~ecgzO2HNOq*9%6>;={vh&=7%kpDi z3kHyn4QcHQLl`6D;BNnLbIvp8A?@a;#Xt z_s@PoGL9U%Z*~6q#&>z5j9}go6uHgtToGK)cRCdDsweRu>^%HNEN*u^1wO{MW*qhY z_M4ZeAM+d8H<1dy#)XO|D_K87Cs_yUhK`LlkF5kC>o9N$;$!tl6RZ2yS}k^9T5AE^ zL-q)RS_Q7_9rn&zFcXmYl9EjqQ@h#@FhCFc{b7(BFlwlx`W*n*9K{lQbQ`908dRan;)hN*w2?BtSa5ps~(`+~x4+<%c z{dx-gX`4b{_DoYai{r6yyX*UW{ookT#P>2~ziawbPt)2f=XwdBHJ09E<12b2yA=`= zClVP6F#Kdv`w`8M$t-RJJ9B*e0kIBQ$NBPLJu3rNspJtoHV#gxuR|sdSF+pM(QCyN z95}q>O#fj@*QOXc5U!p9mk&8hs7Rbdf2e$*?bmssqseV>Sr5|)G5bD@pzbQ9q@lm+ zJqu|aZ8cf{Dx77$!B1~l}&)Mv@Hb= zLve6X>%SP|Lj>Z4icY32`@L0Y9Q;EAjP!q4un~AAG6#hcB~3vTJnsn zPs12F|4s<}=0WVlMQp;}c`PU<^`?J2D=}z}4@?rkj#DP}6|rsoMb6b>MBck=K~whw zHUg&3oT(aiR*s5dp(&A+a$I@*)atHqnL2)lp50zZ8~za{Az!yvD=S>ahpjAl{uF`G zcveKBIQ@LV1S?qBL4;B_T8AAVBoUBu4EJ0Zuw(*NnR|=zFJT?zB=U7=pl}~8V)g)7 zcs_r}R5#K zEIU`6vb`?;LBP`C<)+htdM`rE2=MZ4{P$7iQtaTY%`z1(R9XqWSDr37@i>LeFg-^6 zZe8W_Q4ZukFayTmPCeg}CBgcue*O^Q2exP8%YzS+-L{Zt!y%CqwMg3CZ04Kxs3=p1 ze8PHD-kh*!w@7MApBf`qID2p1=-_i)IX$+rNZGp``}!W)&y1o-k;iwW=e?j7N+1r| zN{WxWdNYB!JAt#nNCw~rdNDJga0}EiD%lO8v338ZTDrUmX3O*+CPWf^{UVObEaT)< z;w+oX_(L9M67kHA$DkF2JK1*(-+820*ZAd0VuDemOgid4-!yYl)L7n?Pi*8Ww@jYT z#^m6Gd4aQ@SD~jrf3NnYho-|h{@kG%z}kMiq86OlWD^fuZSY&zG5b6sB6K|G(P@*N z+1#Q!a6&jQ9q;SBvu3$2T(_ghrhY6UoQsGiPTC2s&NHCdepK2SMeUkWialfD z%S{`CZ)11gv#%Hci-gIRC%c@p7O*<(qtFr!JE@TE%gh%gV`9rflxs0Q!zd~AOnz-h z44(!Qyraan-G9)qF?lQK{1N@oNwYJ%WlY7HF>3h}nup|oOm4Pu+e_kf^6pE7H*H<> z`|-qa_A|XC!5Em0kFqjJ;k=}*5Bw(bqO}VijD3B1W1_94e`&n5)aK&kkIg9p4Hvsg zgk)P=%T1hw-vKRse6VZ`d1|W|P8sD#>u|r9SlJYSu?$gf{Uw@}j5{gC;>WNQy zFxVWjodoNoc#!DUuVp5z@r4r4cA6+}g$c1Md14nqSJ~3KAY`k|U@GSW+tedrFnOZ7 z@q3rqoDFZQX#hz~>Xjpt&CtP{7!iU9ZanE8O>pe!M;XMYgSr&hIbch!MYG9v7g^1R zGYI9==q52P7U3Jh8!o3;hrs*BkzwfZ9#i%@jb%ihk@vp9 zWfG%P;7HArp#p@d0c=*Wf-_HO%O-2r4$Yl2=4-ykhnqQ^lQWwoa5=1|kB(iti|E!L`D+D#w%M`;rm2gDi^jY7|z`uyFY zA4e)`K9hU7Po-UcW|DJj&d-h`90WM79rJ8T7|4o&Z$jS9)qoV!`tNpw8ZPHJwwAi1 zW00>-IVb}u(}Q+Wsv;LEM;~Mr*`PY_{DYIZR)g67iK}HZpx6nW*Ftg~j#k4jFX8_I zi?7Xykt?r~U(hqqd6{B~{m_uWQMHt`6%Nb|WE-4caQUG;D;P0@iK{CxL*87Y zI18x#2MYd|4*stp{@>{TKlzw;{b_Y8B7pmNH;x}qos}hGMs>UVD*2+l4>9I`4r?&7 z=;-3d-|u-^9tE=C3<~p2JH@6=%lGq-?(vxTw4>d?EjlIh;bkbqpt*MbPrft5Iqw**uux_-Wo&aV=q291m-Y6mX__>-UsfCG z18yOJkC!@GOD1mn>v%n&&gWU8$^%rt;J)*0H%jchOgrlIu4C6|KOe04KP0Bzv3e49 zR`G)LVin^G$FP&W{YK+LL;!n7)JG%{E=sDflCO=-KwDDd>xj{Dp{ZT!4%nXLB-!|( zp+ZS>G1>2f?M=D@$99cMd=%e`H_z1L@DABhx)rU7UUX)3!t)gpNhN0$qXY?rOcFYo zwE32joW)CcYp5MbI&$A@tw~?Lxx%?wVsN>+ayNrtOukVB^MTRfW)Z0!-d}74F5#IJ z7iyZ&gvdsIViccyZi7&6&a>r6ghJS7OTx-=ZRije*_UQkx}O_+d=x#u&#y4^6ZdGl zm6c}ntn5kN!XHca@9aCrRG_}wuL)H~Rk5ao3}2LDU*EZ(%F5;{e{ZQAP4W3pvEV(h zqZ-A^+DBi`Qu60f$4#Caqec>m>0J{g6>!2m`zy)(#C|LN41q%<`()2TU=+HJ^x7E6 z^EZJ-fU6zn;2YP<*DBO*4k3&JmfDT~1Xm+Tr*=rM(uq-qxSz$%qF*m5)vb;f6eR8I#C?m3)&V>y64lx}lb>?d!BS9E;j7KD9w)ScOxG zS&XQ^t literal 7508 zcmeHKdo+~m_kU*wYUSA-|t$#?^)~n{qM|rXT8s}pS?eO@6WTJz1}C4 z>f#_PttJfsfUJ|FohtyqpdlQ9BcPYUJMR$abv@R78_$&%h2li8gP5TpiWkEHQD8JP z2mqo7!l*uS2yMwPAC)ZO*rgft#wVvtC#MgVbPViT*1D8u_wZAKW%v0cYW7&5_txv$ zTMdj=B@#`R+elzVW0)d~5d9gYx!YTC$Ll<_Ox1j$f#?2?(bwp1ru+uxIcQYhS=W$Ad6tZ{35_eOgI zgIx;Y?bPEhOVA_k<8P)U4oXvW1pp9K9 zV<=-`6ne((Z3`{1x~p}gdQC~$(#=a9+$p8;+N0ICV-D7MR9+mn{3K&*z8frfL3GFz zq7S2NlJ^>H)W5kQ*W=_?G1s~NX_vf5SHDka(@QTgt0vnw*l%BiaMQv1@bI$2-eIwB}vKM31@Vo86l zU&m&*_KC!gMxW2D!$r%ytBAQ~{4xA9aH_0)OqRouOjFj6yLPj&@k!j=N9UU6mD#Eh zHPuD2B&g`3nNV?Uqd1f3>@Y(bgB=JOMu%~rssjKE>u3&*z7yo30>NM=%M$&%u^EkG zGAz-a#uOZdV+)2b9b+Rvw^$cXGmgsF1D$14}0iuY8L_-|LKAO3UfVPrGSwt{`NUnApzC%DWOLPd2$01>{ zQBhHbQAURBh+r(<+}s?CBVY*x45WeK#;|y_Xbg+1vjFi8!w%%qBbXc>lg&acVA2BF zkvvN@8d^vF9$y%TLiq!p#r@6##0NH-#=+tZaoDgh?2i^)p8YNe)`IH}ol&eS z$Yn=H&_VlMAd9E-BLsu~hdn1UB6Kkw1|18Af?<#<7xIe#i%SP53iS_*1qy;@|Zz?lJ%F^7FHJ1`7sd4{14o}X#bx3qB5jKp^)s@^vH$qoa`*o3;szAHl4{J zeH-F&Ac&)b7-Lg&9EM0^m|y~p%z`j9GaTML$P~nbri34$oLF2QjYS6+pdfHVCWJ%4 z6B)*Mx;ci1BZ3$rXl8~nqvHcHj3B%@!GvgLZfy2(fMP&UL}Mbs zlz?YojEw0<7zj296KG;?f}w!~b0Z=l2xQ>CMZ=(zHn1bYXwY^t!)U=Emct5O^szuV z$%g7=i6$80{*+KdX}loFz!L4uWJN~*x!}$W1KoJE1vc@fcmk0?Fu@bejEwO{W`8Pq zfDv4%5*IM>I71`i;>yCdkf3BBVrdI?3IQz2pkVeM^VF*S>45$=v(AE)5Xcz_~Fv!%L7D&Sp=zm4$vV(Y0ve!&f9U#K4E!zSf2!-hMwj%T z*C~(%eFa59m!-owk8+`l))K0-yM1Q+yqTFL|-sVp{E! zx9_xcPsSAUy@eIJp5v>xtJMkU;TcZk%rs~gcPDxPq4d7-%+d1w^c)Ll~`@%?GG=-h#bU!@R^)87GyyWcG20{&d}Q8nzI2lnERa z>|giJ(emXjV6|*t+3KgYdBep<0$(ywn-r%YPq^WJ*sJezEGO#oL?tfV zSD`Bt!(%&<4;EHDlMt*kvM}MkE}!W(SUU(Bmfm53V&2MKZ;YHB8D_`jg^l6o z5j{sTm37>KXX*W68d-YrmO2~G0$0`d`IJa+JGW*6{;J3hyt5zhLKf)@waLv(1fFXV zoadp@=a$g(VY%f=yQ@w~Dc~O@pN91ci|l_neTs`=joSC`Ctj&Jd{&P1N-m%!C9Bgd zNXI3uUBS^i_`>lUHQ{!Ny31?@@(FUHDk8(SRvQ!tc1eifU+dQ6_sS=k^Y@D-I|1|7 zO2Y{PgdXv;2Ze(Qmp!rLxC(tJyX?cR2!CzykY$2YUH)AY#knVe5x5P_rrvCzb7Mr}W zbqFrP5ST1im~ASit^ z*tNT@&pLcilsb{31avf>fX{j;t=!5^jWE%{&yr^{Pb8x2Z^-(-8g~y-5s})L$1BC~ z+Y3|H$<||RU+o#)49Brsj;fEl7f|*Dx8It-mHe!5nX?LvcpL5w!j6HkIS}@G0;sf3 zKNG)aT*>_!f^S=(S-cPQRLxi3meKWzQf z#&wbECojr6HEo||7pNXM9Y1^$NL!Adi8xZCHs(aVn2wYUktF50@bw^wDKDkas3hr(1deqDreY-O;%$6++7+>cT1iE*fEG?M6B^Jc`Do#d<1L>7O zXwpDtzYTdg;>?Ke z=c=_NN|o+w2kajmiyd#!dn5fN>z)e1cM1HmrAyV85uoveM1VLtfGo3O!($kip-BzB zaQ3yRW{wmfsT?iK-|5}X{}m{e<@mX-c5KaXR&@9D9MT=T+!Djz;w3y^1;35hJ9e>S z-_2u%hS%cA_P;6p*Nh#icE@@E%{=S__}f0R5n_!J3SYYPHPc=iNje@ z54Idow)R3sNo1yr=W9NRSfA}3XlFZ=qP2c3rhn}CI-!%C2%XYN*SXSxaE<_q;hB1? zfG{aRFk;1(*nygy(?^8IJ3Ow+XwxzkZw!vr$q*u@S2EYPXWxvQdZ--MS0$mC|mM^CB`nsZ(bb z&GLOXOUr$^!g$r4t<7OQfZx&UN09Xn)#O9+u0_X`)&wf8Y9{zeXO_w!#*$Ay zQ&UZ7JC`s~ezXQBaMzVHCU1@r^RAccNvz%BQcMbI&^6dHPrj%??oBK-8qA-w_bDkf zimysT9>~Z~(zUiXl&v3)7GRW@-+OMj%?92T@w_6E8vK(We%?J~$N4NV;y|WI(vu=1JfuSyeY^ov zRvR08eoK{}mD7##;elTUf{r8J6xPV9^%hWY&N<#Yc`*h+Z)F?ovL?dYFN;~TL6yvJ z>Pib_q zp4T{S;SZ2YQadZ}OT$lPoZO(u3pS7?R&cHe38X2dvk&%#Waa4aHPZS6E&{;Q2;|@; zahBS?k=xtU#C&U2aj@Nm`GPaRhhhTqh64+!U%U}>oq@hvzqN@e)%;Z=-r}=71OBs` zhK=y*OpM>4!O&VO!`JXuWLk!*r;K~a^CwIF-#gb&T^Ox-a1RbVs?%xb`0d(Su~cUR z)X)Q4QvTz?r?QSD5?%QP9oDJV0>OZhGo7Y%&eqeU%QjIu#0O(h^2~hJ`A}U3_|9%NA0EZoh1cpQ3qXnW* zH;t?PYQ^|%2GoO7B4JDlV3{Xh&S+N2^E6j!!{UeNSh=aRL)Gi? z&pGoyk3PNx@+xiHGJa~sS~XQvV2)KA@_M~g@=DouL7{%G&%PK~UmJM$DX)4c&V|2q zX8L{Uw2F}c+n&}}HZon2QCBwKHlB(HjEVylhhnwAI&AOT>-wlDHDOssuwU%0GnWtD z`>;)Eezw*zMNrkWm$l?GUj8%bbza{d-ML!p#G<lK<`-Egwpx*yJp{01u{({W`AFRXqz=p6f+dFzc0XWA8@lKAa0HLc>yHW zWDb)p0UUpN{gGhwf~fG-1t51LuRQE(qNqQe;DpNy@Xigc zEx`YQL_L^zW9X}XNYIA7CS~#i89qA1HajD!c4@-`zz^6Yye5U907r+|W`(3yX>S3- zO~47d?%o9E!jCn9)NKOUgshygJ_cO}Lv$NLU~_+~8fXG20Mvk}H)g%XG536<00T|H z2w*M7k!)80CnR$ACSXT)dgNI~vXuaWO~4aiXMY=? zz#9RU_`s|BDQA7fl$_bdy=Pk!)X`yoJ}Q3zxTCYP+VwsT5FmY1fWGTs0yNuX;QY%$0d^2z9;{wgfRg!+0O;NUxlB&~kO0O13<$8EaAki1 z%KwYK%(K-oI_b|%mGV0(of#uQv=5NQfA(hZ&dXeQse%yUCh!Y2pbmqXCg2GmrTo_w zAeCiS^6D+%EYr%lG=a-@g3IHsqAvC|=yZa)$ah%*+<}l6k;+BB-xc7(WqS(>aCZR+ zA%qY@2qA*Els3JJ;FV=*m0f?1|1Efyb?)q8Hv=YM*Z0d_Tz!<3_4@4$Asn=m zfB-PHxgOt700@~cx2q>!U|pZLF48b8fQT=E%5by>H14lvo^;sVn};x10s5=0qfKC) zIjWB9_5G_pPr=}O0&JpXEwT~-R*fAkfJk3}a$MB_{4`e;xcu-^09@>x?Du~Gdkf$- z0lgr-luz5KF3>!4mK^~^rH7TGx`ZO4dWA340AB#n0;sv)R5}eUfNC=K6CHRUs>Yo{ z03!$pQ1?sC8UTGpoxfIo>Rw@g0a9N85&dQs5I{tKvM?`zhzMZ5F=`1Q2MVw>$Zn0$ zHK3SitJj`x0>Mtu+&{sGlKX!P;5CW30ClIe^Z{zmlBHMM{2I(_FI(H+7r+Pt0;ndV z_bXUe7d-83zaLQR|8c*AVF5tlvR(r&=n0UuojOfmbR>x2$j@7lVQ46+NUwalEay z_U6-qyRZp_V$yru?_@RL_Dz5S++6@~f5E*uodDkcf(P91WCGm&HF$Rc2+`y}-m@Dws4$pT&PBag4i*8+dZqkL#%4fquSOqGYv>sQ%TJYRF_^ZH`rIN+yVgLdE}vfUZrVaO-Oi%!upP&F3we|$S z4BIy9G$Gr@yEV=>Dbopd1;9SWd{__`0B`6#F|Ubu0@~}x-U9fy%=Zu=*6TY}+!erV zuQxUhFyCrN1u$(oJ5StgjVF@4U?adZ9LJ>Ez^^^cDVaI&Fqw2g?cAiy4U*X{UJH<5&5sp8uZqj?Wpjofwg`ZGpC2m#6j;_jAn>Zd zf&xH+%f5fXN&xl4=>z|nK3c489b!xR?<-8}F1!%|^fte~bJaa=KC?yv^mm)f zz(akPDNta6CQ<$#z<>Zr|3!ujD~1&&S{ubJ9@9%}|FaXm}zq@|`*y-W+4jF!E^Z{y15WO{f!#Q&! zP<`+700DHP#Xe!F5xpjm^=k*$ns0EI9RUt*0?ke@zpeqMQ=T7DRfq7?`0-8<1b}&w zVF4PQo)!RVfDvFRuv7x%z5rhQz=?0z-Q@=b$oefhW&IYN@N0kEP%^^>ac_V|d_s={ zY&j}DX^%y9?&Q99F4FS9-6q_y&*MQvx$o(2&1n~T6 zZw-%`9q!NlH43n+0Cs(WCjidQI&Efy0DXT!qXIZp7?1mltj^X1#A^b<2NYa?Ff70h z0SZTeSpK583*Ap|em=TBz)Np!y`aEfKafND@obI+ zZ!ZA3J7;JDJKIwv{TVV$0d}^hNcwT_%ftt8id5R zU{`~8uW!dW{gLIc0MRG(h5+638`qyA>4zgK<_Xz|PrpEe-xM|6?@6V1yj9oV_MC~h zcermz%Uw;rL4Z&JY=L)nkE21_r~sH?G$J(WuX_QI-38b^AY$SJ{g4$_X-to{ZGtfY zyz&@-d({8OzaQw$-(z~uf48q;6JLLrBI(aCatqmZUZVdR^wNL5Kw;Z_q2i1Kob=@O zV1@X475{*(exm?)69AU`PcSU_eg+R00G3{UT>!`3JwO1xboGt`z&AaU!dqYOFHwnw z(EPc>okMoGe%}bNcZQ5V?|mG-b3DN~bFiA*tpPi`x6u_GqtoAwh?V{X<9L4oa4bI< z@CesX+eEvaU^qnO`1k&rqgXt_&z~D%(yu{WtsadB7==w6?8h4#@qlhT!Ovgc|IhH* z-|$G#hNZoUj$>`JXewg~fl&d>3J%;s;?v^_`u`+GhB^|T8jDrY(}4m+S9$%M07rLH zr^5)a^H9}HM4S!$o1t-MBi4UpPRFPK*KYza){J{&G3VxVnAhOJ0gBTx+5{-TQLlm>s>|-uHjkzJdU1I&*J(xnVtF z+{zFhZ>2v>fV6DR^*37E+iob7)ck4AdPY6}{qQLPL~X$L|6ghO;{1QL?WNDP-6(L= zt`#%_sVz7~7hp+Sov*EuzE=ZFexI`qOW~@|P1F40rM7K)k(c(PK+giA0C?P_cLbQT zSA8K}GVmN8rzD;L0tLbXXDqO5SLaXZf%I(@;Bnk+j@HN!KB4+^;gXr^dR73u-ZH&c z+gV*dd4j3@%=71E#(aPMK_2Bp8*9KL!?0hT$?%-CN^b;^$A6mzSf)2$3!KywZa#oI z2d2tD1ktwX1A0xMRQiW4YpZ)DfTW%Pl5*+9WUDRf|F)%Xbb6we5Ug8VR)UD=<9fTe zwMy2Vo|4E4khK7|iA7&?IrtjX`^e_J?gFZ8cn#{~>b16rDM^2N0@O3OB{lXbmAy8g z>H+L(H{Zh|F}oI^i1`%su|HyEs|^)P>Sq*UHJ)}}cPPxq*u$UzEkRrMtMr%S_5zTr zv$e_|=8u1y9QUVZYTrSwEkJajv6la7ufv4v3gG(J+J0037z+1lj2cK4qjI0VjOQ$% z{Z|2AjuhAJ)oXu&YC+`T&wZwRE)924z}-yQ3ebDPSYxyRtE+UHCeZM&O$|sv0YnM# z2xh!cA z`tR0!nGODPZoLLyzXc$kU?NH)wIE+7>`$*%Ks{0Y8q^l<=fk^w+RFvbBS74rRt0!O z2QE7hB9p-lMU%h{D}Qn@DM@WC$m`_4M_2%T`1)$863EKd^bH%6V``H;;UfrL-@~uZ z{RHM{s{p17)spJ;Ng4&Leo6n;hcmjShrOOn(mP&Cqf6KmASF|S^!?}3c7FJOdV&N{ zA3XuI{*CK3&gcm+UmyhpXk1I(f35-0hiCzeLU1oApy{$ufDiulF#k65bN-VI37}3# zJ(H9UBY&mMzHCBEY3lT*#Wk9M&R|>sK+Ng*fb}!$zEYZ3hekir2S@^e8n3zjORts3 z-s$H0V^_Bq@UlC2dqM~ygq)e(;}6NXgYVEsZ`gIP(V52VweAn@rJEj3PWS^1y^QbD z@h$8~*aiT)S%mYKp*$o8!Hj!}18MDzHpc1+$A6kSyOVUzU!Av?0yINx7~&8V5EV$( zsaRmEI386BtnRULmuw?=jme^lqOZx7;qmO4*&&F0+(xTuL4-0R+YmX*U6hrMkN>33kh}tOSHiF z`+s%$tUEk)GSsZ1J>dLui|YR7awfcC1nC`LC8%@Ih$p=+-$QYI!G3(e!KAkF9gGn4 z&Tm}K1_WMT&t~4?;zE=Ybrah>2N& y6pL@{?;T6G&zZ2(YWnLP+s*K3e1i~jC;kCN28Cx+-04;T0000ER~; delta 4062 zcmZ9OX*`q*z{Q_=%w!o88X>7sb`g<13<+f!m7=U&MV2Y9Wn_DXB9$#ki)~7wxb`*M zpb#-5G4>_0?}lL(-h1Eo+j~BoFX!9&o!{?&YEGt}Op<qKb^ z00>53G%>ObPG8Q5tjsPr7%fw`uSbd9PFa#XbHTyk`BQza-tEEX9V#*mB!Ez}I_VBM z6Yr*J;DptM%M4Y>z8K#!S;>3xI}c#e{kN@O9EV9jOpa939OClieNo~_eBDNI%Q|tt zD7xV1qVD#*Vncox?aBMSfGBi>Gtute+9=4znE!hCL^P&h;V~TF?tMkpFln;vyib{W zvezq3C4fz|YWBXu!{-|mi@$E}^)f+3as-}ETAZ|UJ6PhnEdWWv@c9>V5BBBq~ zgrJM1^z=6zO-o+_QC4L1ge!D3i;RS&?vV4D3LfF#Qql)ovppQpzj|s|+on2No zv}Ir|C>ef*_&XCb2zOQ>+n~inBp(85ve>f*l7c6nGFP)f9urTFAGv8SX#QiF?pQoG z3Gdv}V*r4{4S*eliWvvD_k>AuzzMhMxR-10B%n)k_tTGhECKAGlwnniInvuHv?r+HyWK!y#>!n*FzOOvPb^iF- zT^41Dv)8Su$9QyvJ{8SwOBp=^N1Om-o)eD*|1(DnLFS{CN?@GZjnwOdo$HMVN@;h7 z{*pTxzQl~!U8)Z02;l_92p$}|h$U8h^<`_rk`q3s4)>uUmEuB*gQ%yN2==Qe_Kx;V zE^&sPI!<@#c;@3`kZ$K-mPXd~w>?H%WZ8vhMl~_u117I3+Ajh28bOu7os%D=$bUQb z0qnDOhl6)-T?HJM(w7)8GvtH@tX?u)A*=GL6Y0T>k{%d)N#N9lK;Dn?e}4v?QELc6 zW#U_9YYQm%9m2+{HR3&&fJtAq1&=En23v^ubc2gT$=jrL;6_hLs9+b6lJCcVfMDz# zPNeiJTy%0AG& zYF!>aSia-U+62Xnut48!dIVx|Au2axnZe}+aST@os!D*o<8hoVv0(X^Czvf|1UHMA zL>xgyZ;4`xn{Ra|gn&1o?2_Z%$5{3-wS&>zqPK&&-sMLQ9_?OPMg(iEcCY@SzXPg7 zC%P8p>pA@62~`#SJ#`MgqMDI5mdsd|Q^A3e23{LtEplR6CHU+sGM zzhzYp@JUUj@qEk5n65%3nWAhKccD|xZcWP@$AvyCvu4T6c$|dySIR9oQ8O{TnPLPR zfZGs<2~mVllqS5o51Xfe9feP~J#KDa4uef^ga13(|7@B`h78QQl$B1qT9`Z|Cl8qZqYqPU zsf^dPYOjRW@5Pr{bp%8?!HN^lU_>4v$VYW?KfF(761SNpRluI|rW8DOi)nqBfKVM? zjF0E~Q8jcKW|`LAjV25SFDXy;0b$LP27s1E1-`vb<_nHLF>Uc7N$=+(8>0+FxFq6v z@RnI+{v(ctghZ{MIL=fy=;$+d6hC$Ao(fO{=~2OcymwaPhf)upiV0Xh`$PX1?A|4X@-=k_Uu? z2es^ZNfFg`0B?}L87wtX#M|NVK=K}oulEb`z6ns@RkZ3Dn3zT>xD0Sc-H!z4twL%D zJ|(JjY9qI*B=#rt{6xzoHz;rEU_A>Ya|Ji`hZD)Kx-2kMA#6aLVvF_n9x!D6$rOTY zjjJN@HqtAsun-bo#b6i*i4o^>4IP0cx^L)Xe#5g&ph6~g>}~yIdW}$C1LHvy@TKRk zEE_MABHr7ap{9x%y^%X+#1~K+wyd{vSc4qUu_^U=K`=txaEvz!P*qV=!e;mO{tG5m zFa@-b!LA@Dz6qr7#Ed#c*bocG-(T&&-^1Iu-G-7;cNAnCxcgO(u1#*`rW!Cb=5D1~ z`Y_OSv^POXfFxQQD5gks={efReS{zxH}?a&N>X8+gp; zN)rtRCzc9&-Gg|jqGuI}SEJXf8`~GWtgv;mf??REE$$XjLXhMOkNu{nx43jtFq9edwQVq|)<0U-w^;wePnQ!d z!V|8cPd{K74VGbm**)hN)@*3o(fl5{jEJ@$)Ywt`!iWMONF$iR3`+0C+&G973^!Kc zq3SpKaTJmxwBP@gnH0Z6N1olWy4=Fav<+!<2;@L`%A45G$89m?BYo3)aGt|tksVit zw)ls5J|eHFlyUan7g0dRk=Vj@Qr3VfaO2j?R{GsxSur&ERN{J-83$ssBFEVJISe*| zC9b(1t&qIOCsmb%pOs-28L4pEkiwN+qKe(xUSz}rW*+T3n`3P~ z+->MMb?*F{QE}hm(4$UGXLLEEvG(&g)oxLsZQ~&<(HB)=RX)rcbKW)qS}oFf`VGxy z*9ggS#J~0}^aK+x50p1W)V&iDm}`apO}04u{8=1SA{=i&ls2bL(|nermMSQAm|QSH zJ|;b;Ur5@={dGG}YW-7*{o#5Ed2GN-8im(4NG?z(4&WBJ)@AawkKA}foS^xa)y&^< zd}|ylp!KcaeWjTZ$Ag>V=X9`sI;Lp=VkZQaZb0sy4c%mMre3uie=(2_5^YW7UM&4y9Y$!`t2 zZcy@O8!=-t#5~l_-u|hVD&19hmGHu4)5x@-e@H^+_$GxffDAscp)!?TFJ3*(&>6Pj zvkSlXc1A#@0^j@0XDAT@^^vjQgx`xXA=hr_t!R33`R&I{LfxkckO~HvH|MYo#mn6qD=30z|Qu67y|m6OA-xra2oZYICQ> z+XiD-RBU!mnjo(F1oN+;G zZ};NC=v_!6R7{v8bGLKs(thBGGqAC|^iOH-?o^g+8)yE_5Fu$*L{gV(-??8-yVcC# zn_$w0B5VOMK89DExVf_FAA@i)$_*^52=qx1rY-k*M|v4ePg3f0!%m|Jm&v1+gM8G` zW_!1CAU{9gjVyJo$O>g{1T*1X5qXPBKOF{35m;+xwX>zV5fjYO_F% zZ)f>0yNJSOFpFRx*#46{c7a|l$z1IZdwp!r|6cups&P;drz#}#{AN-jdOMe@+Twap1-G_A=^;j2+T{&1a9uPZi#!);jdMaK=5qg#}z{wFn7KjFg;N%DohQy zA&(W<4|xrx?dt4bjDg$aW@o;rI4A{Kq>cI*e>@u)()(N73hSYI8jzd`2qQD!1iC16 z<)6>S%yUUcV&iF!`yXi?ZmR+QoRa)uWbojzI{p9dZ{d&0^~cjAO@z5@ttH)oIZL0e(-#>0nS^Xsm7+7s1M?2fc9D!?xJ>00GE z-f!kET(+tDmusEFkJzW6#>;;$V2acqO>*6MYkSR&9PV=t5XSP>IeJ5f$za82iJ5Ba zF&{O>nmlLoVzhh@IJHWH{*)L`O3kTq4i3A5+!B6x}#{6@zC^~XKk3k zw=D!~9mf4)sFk2W?Q(2&_xS07#w_HPGX$$n-L{1ON;T62aY`ySb@cnq!U z5Z+Oa}7|hNaU1R+_>OKY4%&I>Y=ndefnCZLTnw{F#10;${?- zh$yWTsdlu$#e8OEtJv&4L3}NVSk@!&{jf7pAt*88B-*6o}QR~=c!^NJ7UlTyBV zRr(v3?Y(0oa~nb`54&DT49?I$u@)%8A%OYU;85ID-vJz^!qoeL1R diff --git a/graphics/fonts/latin_small.png b/graphics/fonts/latin_small.png index 371cd5a9684dbb02da670b7f02e3b6d80f72cb33..41bb38cff8c3803e29a8ba0fda854f8182a94cbe 100644 GIT binary patch literal 4587 zcmeHLc|6o>+yDK3W-v3!h-`zI6Ish>afoEdnk9}cyAw}zlr5P_mY=2NNYN=N`yh_2 zp~x{zM3%}{A&fzuF<~ra8Dq@jywAVy=kvVpfA1gf_n+@|-+x@6`*Ypbb$ze<{@uae zQVcDR1^__J+RE$~004JQ2oM$8B@Z*x?p;Czn%J2D!1H@CJjVySYaIt$XY=$ffxf=} z$jFF5AlTjek60b~d;m(YqR~BI_5d|N?6_s!!uaJMHv6WlA^Ix^LBxr_NCLV2{i>6a(Jw)bk zlfL)V95~HSg_gtLhz|w!_&Yx@=n-k;pUZFO2(?9Cjr*h8vBSW5;5g^lrkb7`U~8E( z8+_F?1gEPbWkvo?PGJqyR1AC6>e3P6B8@4|HbZ|$TDe_oHo4`ack3*Hq@Be0lBt^z zARKHw>!U*}e%=RW1rPZ?7%OzucAbkaDC{o5SRU5Hv+TN|9cBL9y2 zotdUIfNH68vJ)};(MS+Y&jE<`Tk|M0iIUNIHD%j|J+%y9?7)h$sYTZz`YTbFpWEtP zrZm8;r9-(bC_h}D4C#|7zFgB-=KfIwwgcR)T9ErB^?K!4MMP%l0q5#a=nP%mhiRE{ z7wCOR=B5Kqc7#JZ=&yPSRl)r>LWde~P2fGz`BPxu();#j;;_j1Wt%Anc)!B83gf#g z;2J_F4nEhq@rj@AyRVf@__*e<^>O9K?(y$rf3hanlTCwHx7j?tA{10=iL|iYPfA;R zvB5p|GJT^@)NhZJj?rRT8Wd11-fSZ&o>hz#b@Mt|ci!wHTw$EAkkz27J<8dzvtxp+ z@-+EST`M#}>i2B8?V`X_q3f+ol!vjxqFPj%h1J*XA z<`;7?@J?-K*(Uw7g`uA1Je@OP-|m?_xP(^GYs_$_(c-r6_*P(DH% zJOg*{c^O`!MQW#N2wNro2$dlj1p5-;2;=J;h#%eX&++~Gft&nSLEJ$jw%3jaxX9RK=L8lLhai zSAv^%{R7bPZHioG-^SGp48ip|silb2U@%e8NrARqpZo>Y%jkhGd?qR4mN?2pYng?;HrsGbe={OOC;F+AcH{Zt@=HmsS@WT8Op6%N zW;HQ$dQL`b@7oAJa~WnC(L7LR&%zv}vs|k}q=ZX0Mu|~)dmpkSnbWbP`c~#J2FoFC zE<(vXj8a@{9g0M^ao_bRSm)TQHwnfn5$e0?^Z*51`BmN~NWp59jiA3WkOJ0f?gcDd zf|#ry=T6xUv(y%M?VD)FgjRbXW?HeQVg5V0U}MMIj--3>kgs6fJ}dzVVn{bK%U1Ip z;N60(6+c=xguC~6H;wL6zAP-R5mn$54P*^4b=3RC!?kiG{YFM(7EVSlJ{$PfK#NQ$ zGqh;&0@lWSEHVN)vfOBJSvXUM8DU47WP0QlTuri}3BSjAT_iZWx~`9Qa*{_L+rxL+ zi2q2vJw4hX^VO(Swpx3N0Kp(f|Hf~Fm>=xa)S21Abj^~@wG{F3GL2iGwh{uGR_51# zfxE?ICWNmJLML)vZA44!4ZdvBBV1F^THe zJ{JZU7h+fEzhB;HSow+FH+sd+6je~(+#|km)brrppUJ_ThPRHAPSvj+fEPEOP9h35 z?{Uk26rjw;SY@=q3rL-3^;?C??oW@z3%2JDW3Q%6j3|bjv);F~&o(N|E}nNvz6$w{+Z7r#l7{dQm-{ zq&ED>yB6|UBFRZePFL#22B#NEVO!Wxzr%^LJJ+=1YI-J>tuWXVZYE7zgR&^5Rdt|c z#2M1!_U(xo7s-cz4HY%Wyj3>6bjc-_z&M`@1+#kg`vqV51x~H|=ohT5%pai^KQo~o z8_Lq6zdXiGzsD$y`cTVwHYKKX`-SnOb18cRbU01-Of9DnVD?`8?aEF1h>EkAj)BX{ z9Vta**Ny%*)vzD;?m5Qzm4kVJ_YO=~cKH$<@wkcs@#py4g`0HE_~Z@+%ROvG1gT}f z6FszYn4Czhk)Vh1Zu|dN+gW^KAF#ef_D>5%gT0`SX~}fFh2Yz z3Q^ZR_YSdRR7Jdv1Ok6*H9JT%RZ)YdO9!3iQA!t~vV)ouR1rw3+x|HA-6m+AR^61a zTAI{A7h;uuskxs&%|gjns?j57LxbZzc#}4(+nkbWPP9;xZ?9MNXGsN#ec7}f=YQYX zm|j$(T--tWEVApmXU~&}z(-*!fmrl~l0Ud2TGs7l&ntjN*{v`zF@MmNORfN0$OeaD zk18cwUz~4pfU>E{&aYz2r_CN+0U3|?5oYX-B?eZ6G`nYi%vBjLzu{w@qF(WY>S)hM z$2d*yu z#KmzxYF3MEU)3nsiX-U7SFfvll4YP90p+i(M@!#@O~qrd_ov)kU8BMclQ!0)PAVB7 zspOe`eo}s`JYHHmkA+SG`eIhX)u}rnV6n0E3C!7w{;;_vW7k7K8?EE<~{NRY~;+Z>~=kU8bzB=D(DT@#7mY=VBt$W~KM3 zVM$8SMhOhw6N|)u?85R3n)aJ?d~*hH3sZ0kHkQR-;w|ue6GD>m228xNbDFpFKV_8qoqjC>Xul6Eqg#Up)@ef=bPadk3^zMYiBlH2C@2J)+8WVDDs(i| z#s5tBKGsnPD54RK8sm!1OY1j}Z9(0US5K8}#GY>cNpA|T0j`Toi`Kw^&2n-E5Jo#0 zKgyo?Tct8>6dnR&XGvYB{B{MR@R_h*206GZ@ocj{H_K~i;JSD=+)NdPaL|tmz!5jB zOF!X@s`29%^uB>6KftQWFR}HAprhXFphHJou>_az3WyV*eAnBlB~55eM)`$bx)OCu zQ}CDZbUrYaOtZ>#+8pUD_IW!~bUB((k5Ms@8(*C|=jH0^YEkbdVzfJ`N{Z6g^10Ag ze&DS3`?=FH1SL;Pf7VF+`T_!avvXV+I}Rjl>C432!pYyuA;Gltc>QO)!;zSfHioV} z9G`CjM9NIuw()>HFFGcGd8dKl$<8y2nEt1F%?kn>^Dj>j6nd+$z+J@5`KZOafc+BD zgGfqSyz5{0G|5f}*bK&wkrRG7RZx-AcrsKCTToH4(DT1ltp)qr{}YAV6~V?`_tXFH z{=Xjv{_h2+r-$w_uRKyQY0T#xIt<(H#Jn&=ZB-jZwufBj^N;9Sq9jU~SvOl6fz2ObBlb%?+@x6B!#M}6;N zpFVzdx+tG56fKmHI-DaItkaLqEZ=5D49l5Cs)hRQ*5odtE*PHN=}$C#vp07AW>wPN z561`VIO3dtP)>P`F9UmM50|DlrK43UgaB>x#yDJ0dpF^61Tma&nC9qT!3e9+U~5mj z+8Ms~mliB{z8!062|6bH?3IH2oZ|n?fjMj>&G{n)v0*2%XMCt07<2H!c5WvFp5ZyF z^|K93p-lZxm2+wV*Rtupn>>q*rK7Pb$x}%!dS%p3m=|;skRpjTv(_m4>5#k2Ub(c= zY&(k_hB@)$bIFlHWX~kNw{&8vu$3Es3U%H*|5~bNpMXU_QAC#4oT`A_x@_fUe zQ1N(C+uX_-L)o8}tMqDzzyu!m;_BA=tJRFZarg5>!&U2b`T-3Er26oIoZXja2Lx9a z(9|Md#*9_PmY#p@z`)XFPkb9S(+9`TmQpU`7bcBPKRpfh%iKoaevnV0Nt3vc!}$tO zzaAk_!W2K3qV(F>-%Q~Z5o`E&kZ+#v%o)q24 zw3n{S#k8%^*YWnTCq}S-5^0;{b=l^m*%qWO>4_#bnt0#b8>@eZdD#O}zh%VI>Y|`e zg%_n!2xhvXDVb)W)B@`3=;Cl5+Vv&l6@VFT_}k>_I=CN*tZV}l`&*ZwxWj+5)>E4zZI!(`nh+7b^&-xgyP=!pq;3Go1iW@y?r!eJgE z!k1+fg722k(@dB!LFR@u&1ISlOdts%8qs^{T+spGC649Lg@HDgvoyP|pV3EEQBfHm zAE#2Ozit25*cktMmu3TVH8n(2pCLB7X-5w=M(bRUDEw9Al30H6MDl1m>YY7movv(# z8t~_AhB78Gb<~4VWimP9B^lW+FyqaO)&eQv_s&b+&4 z-+TMaQ!{p#WxEz$)TjgrtDyYa?Zr1h({J9+w7&oKc4jdt4_2j*WBI;jb)<$8(_L>k zH*+n~ae%{pf}(+XzCdvnyl94DeRIL?5~>S#x{ z)l&GtD&9CY6y4o&A>jsh{mVUR6Wu(f$6le1q>5??_KqBRbo%d_MHoJk`xLMG^GMcZ zYh!zXX4VAGstLaU78SvA&uU{(=%~*F_$Md@?LEyPy#DIx0{*j3$|ZhmL0jZ|fqcsO z`SyYutEcAoI}QyxLm+2Iv|Xz-K3m|oI#HY3b}?)op)(X0Kw0h6BZ zM-Bq7GgRO1S4CyQrr-F1N^(LRt4+h$pQ(d%rSw2vh$N2hmaN3GEc;0Iz&}evSi!7V zD^NdJBSlEO^`Lx74;!r4bl(2Em*BgKR#&d9^L&}UW`jySZnwZKN)>EsBOZzOREQH0 zW}|=2ba|hwlmVLQwVW8L=(X79V)j?wW94E_3lHU|!(Ow)+uB9tFTJV0)J~R=1MuH~ zl;QdLb9Y<=1mHwhxu`3Ykm79TR~*N7YYctER9U)av7;ru0^5c9z=SD!C{3^~NyJUd zJgX09)3h~64kZ(t>AY){odJ4I)lJqEx}5$zH`a)<<7c*(j&mMr4DoficEX6KB&^Ox z=Nu@oUtF(CS|-A~2tC97Qc%RtF&1d@Aufv9vgBbwZ?-6`gQEGJY)lcE12&oei}BUvwd3jFcbJ0iRDyKOKK8Ba#&U`Msdt& zTI&SGl^2Au)PKDY=`oQ zpx#BJ1$HjhjE9pF^Rd0?ZgDR&$6u*tX8UX=)IUJG<9frkGHj$XUkRW080_05knHKS z9eg5%P-{wa(Kb3vMX=45uKuwjKS4dNtP&-W*ml@yJW44+(LjT6$O~o0+vmy)@Z#Ak zLUW`;8 zB@C$dt6;hcl3gBUqA(N*zFT#8`OmCuxZ+HI>R4&wRbk9cgw1jpYZqe-nHwF15577DuPl6 zoTcR-2o3bU7I3(~ulCvYkAZc+OzTI|*;B@>VJ)F(adGWH_ZIST&84Mu-B6VmOFLn} zpMyttsBLik6<{M+G0fHeq4~&>RRLB)cgyHK#aT`C2*WWIGR#deM=x zCDp@aM=&LgKHWH$@=>zmbS|3?@r|~lbo4TjB)y4U<0{PcDfw|uCp|b?3qrRn=<3^d zn%zbjHR9%k39oJdEiD#2j+l2LVaj%Rjcr~1?$;h;dj=aD^v~e8i)COu*B$DATHL+G zM6t4*H8k?olo=OQQhSIy`2#)s4@GXskCwY{ zOVoW})0liTIIm-G)3!#SKM<`1^-b?Wc@z&WJAqw=zzF$HTl%0> zy;BZmFEJ$k`}}Tmhns@k`)?kZBubPJ`t@v7yz8%UVWAR_e1%@UsQKNt8N|zYLwDDW zHwF=f#jrwuw#Ne`X^}Sbh@7PzlNin0c5MZtKu$H58%2H3Pgc&xZ=3_-0ud)}#`8WQ zbTb+Cj)~!WD&-_QxxwA%=L$rNKae6}bADn_Qhkn|hgyeH(d?!}!b3Yy>X^61P*|$w z>r3P}ths;tx2lx5$HZocV5mW#p{v5m#yEjUlVO z_7|d(+Li(pUalL-I!o3^1czp-5+oGpy#CbDC;Ca2tOyTR%L+>0!B9v8Nw6%Mhk|uV zELyf}ZHN68i>Npdlpvzi_%01egx2*zT7CUd5c6k~)Xv;~S{9euoZ^a)4msw7tUU92 zBl=J{p3Pm6K2jt>jK_ojGdS!J@<^We;f@T<4ni5^kQr(RUxj!l?H@U{50bhi4>h4q ze#@BG2fak{F4W7;qb{=Th9SS}*&-+WLOJVhP=sETQympeSS?9=Rm?TVj!*^HZq9z= z7;IVWN*%&~A}J?s55tdgIpVVp5(4c~)@#`Z0XOA4w?|ZGzcNb-F!=~(Nz z(O&8FwykGcysdk>22lrXRo@PnG8utVfA>tIj1gG#4tH95cA|HFTT9m(Og>gB*Yx8R z{wM*TG`Z2*x?-%NTZjlQfGu7cav!vu1~1-xb6ojy*;LuDQllo`RGi)DoJiS#qdIA&UwJu zoVSa3MNMl_da*lqL%I_&aaE52pZQIQZO&46VbhZ}`(zk3rL0^+5RTX6_&y3WrVcJZ z0#Y6tUD&$efW!=;gjciYOnQ}p=S*!UBlKxob$($QVV%w2L@ylJI)fPf`M?04H!y?+ zl(e>q4x{{OcC#TDE3`%}-49&pq;C#?0<_B=h~kR5hFiKNjQ)Xx_^+HD!lJ_XF@k5( z^N~C7Y;yUD$NBk(-SPuAqThvxO%=bKjVEr|l4J$8vRe zOc3BY4{qU$f0A&SJw^fsepJ1+yrlTlsQCPZjwrTJE)jVlAuv2_d}^ZIa!%=N7cV+l zh<*g=)gpsjzejPagSg}4Rm`wihD!cxmkKlHH6VQG&lqWKuB>=m^Sgj~C5iLTv!mZ` z{2+e0Cr-RW=s|T)8lf=N zca<5Yps#9w}mMe|K!g`sV0b IUFXFA055H-fdBvi diff --git a/graphics/fonts/latin_small_narrow.png b/graphics/fonts/latin_small_narrow.png index 3a88def3adfe70baf0990c294288bec78bed18e1..ff07b857d7e91ea619ab5bfed1be35f517a3ce9f 100644 GIT binary patch literal 4518 zcmeHLYc$kr+yBqsjA5J&ksPKcp`0t{%nZpXj8Z!_Vx*#+CTu3B`8%|;BeYfItlFrp z674a<%&6p$32tK(!@T?a6`4wwhU8}{$M0hAR%T*h%unvouY1Ja z@?}t^tqM4|F|T4fWvM6e&~VmT!e9bE&x4l}k33a%MA?0kffV_CPzL%G0(qI%yX$Vr znkc2&{4Jfi3AiE)r*Kcs*Y8h9Oz7Nx9SiF{r5WB`Ht=B_Es@=T4_|nnkN*Ki;s%I- zmUC)-?sX5t*SLtNIPB`IF{wnW5n+Nee++Q6=uv8$TThcb&zu?hJ9J5{lefao((I8; ztnqS3I#7J%;m#hAuC7oBe<0B}x)S4<7pBq{OSN-o&61F@zXa<#T3Mq|{wIo~Sjy|_ zohbll<3iB$){^NdUV_47J6#P_b**Ie!JMnl>p%R_(5P>}wxxpy9hX7elfx3#^FNGA z6iKJi5>go;&%HEKCN>zFiauh&Qt)3yn^40w%dvoF8{~(&0d}%I1BI6}A$9zFuP&D{rr~Deiw{KjD6$*(IQ`{30it&p)$Pp16gZBe8EoQAU_bU zDy?KCnoMH?>n+RI5&!8=E_yUK;*_vWJP7?}nc}n9snl&ptd#rOZxC zWi9W|LCB05+442y8Q7)1y#nC?$rmWtqf}Z|HUD|N+@p4P73d*`y^$`}dIN=MhQsFPQNVFoVJOLUk|JmWd|A zRK7=S#C~-K{*;7(gXXX**tgwJ{Wer#e!uyrswZ7xl~q zma7r#nBUFCW|Qh1sZv(oox|fF+}WSa*poJ%#RMpw3+vfR_A|!Qnd~|#`9)*OhOkQq z0tgqkO*G$E63&af7JtKO|AcUQ7Z|R^ab!tidJ+N zLO}L!sN+dY4v#5v616 zYA3HvW!~nf0O90oFrxwZhWNlN+{uF8A55mC=*y&bbaZUd9^33TyNC7+u!8*)OxD!Y zqz}hiq?igXB`WZMvK$gk-poDwA!79p+$onLx-G^j`g(C**VQ&&F z=pQBme3p|^OE%W7wT(3iYh3*P*tC_fG zR?HJ>j*j(Yk@&WwW5%x+(KqY3Qa>sXmd*I@55>y1qYf^3RUF9NiJK$ zK;!EQtrP#vvVKw9=nC$ZEn_ch3L){GgWO|GCtaD|Nw~YP!gZPlc*aa9RaZK)}Bbd!sGfN_w?<~5{Vz#a! zUI1)^uep_vPN#i^V-oKapCv50p`8tn|1M#xQ0g50Ac>TsmA$&rE7MjYI|>rM68;`< zUP~*{4SHD&^tF#&qUH-Z`|dLvW@;NoNv!7=yDHY;PN{F#i>XikBg6~4Y?`H+itHcY z*CxY=@-O%Is<+EXAP#!9&mr|)-aLL$1<+MD$*|;--txJaDi|Z?6%jc5Ow-Lzjv>+R zn3_Cy!;B@TaH~*i>76r_VI#D6XqBtf&h2~Hu=N(rJ>oVrwMgh(KasRfpVJ0>!e1Zt zyv=vDz$9C7El`m3y*>^a2*y|FP9yd7SokqHQm3&X5hy4mifu^UO)K%ko}F4tWriUh zagY%!+?Trh0x0@yFeAH!$Y5H?$4;cANi%OO>Gc+ZLtEuT|@`9OEdKlz?ZSGeWAvGJRk41R+p~IZ6raYALU`SA^FX89g1B!AxC?I2r_AiIfVWEX^1-p zj=Z~1L|zSx{&8jJHEYn|$c)V7T9h33WD(#Oi5O(9C>MTfPrO3DL+XDj{px+9UxlaG?kZLBOWD@^4)hFRda#*eCm~iR}RhJS0o+ zo)}y37D$7o4bzT3z2FzubW{l23QiV=R`oN05$lw`P3EabMJ|x8Ab6?7N)z9%YEpCR z?esnswzBBHZ%Ss|NKaFfFs>Z?bAQvaDNI)$ADsJ>IJe+g59eD`@P2O({67JGo92n~ z#nk`J-JkB>cXSwq{lEMFIj#Tal2cVBUG+Buk-pYC#QfL`4t`}mzqikhIb6#_s@4XC zb&M`4JbI>e#-~ImeaCt~aH{O-BXjCp3K*98QfqBoTE+3*z@&li=2 zbDdM)uxhdsugtm){32>z6Az?-UyQmHLFs1~7pZ^2x^H;HoOjbzl(JtLD6yEDKLUSP zY(3>DvI;X}pQYA;WbumYF8~@iiW=jk`dDO|4>i%tcvaN&L<)r#qHryQjIUu%;w@%0Qv0ch}WbkBT`?gS8*#LBq=W&slQY z0%>n1zI4-S#x~2%DRvSKhSC$g#T9<5gPg*tboPfX_|x)`2@WIx(vC zxt7_q(P>iED7otLjK_$TXtB{&iKKe|jl7c+?06E*N?EG&X26r<>_yF8F~9F>4%m~N z6qmn)w6kN^Yl`h2)(Q0rNyCAHr6gkE>@ORVw;J8q;R2!EU5^5QUC*tBTR?zXoY;2mgF)49%^p89f;m7MlbPL{%k!+%}ePm z1E!@M5O3QFhf5F`KfpD^47hQRJr9*B^8(x00ni3}Wo#IPu#W|$d5IY&nL$Hji zc%~nbR4Xz1%^8RojASI=s$iqFRuu@TmFCG4`+A6aLA{e|5J9j!g>)R<;n+{M-gWw| zw@Wh6VZw}TqHS4$q{9Jq2-B8=3Ev7e|C@Q;C~XUd9jMOH;I=nuMxQ-G9ckX}k7Hcr hP5t=U5<5RrNtcaC&;xPd_FoI&a@51&nLR1_zW|_qij4pO delta 3099 zcmV+$4CM2sBdQpX7zqLc0000G^jc_)RQ)qudc_!4BC8JJTJqs-F(1W3f%<01i4 zCYK-$17Yi1uU=PmxsBW1DBF{%k{;#muKINSdaujv_YxtBrkhBJzLX0oN0B+c4$Xh@ zI+sH(W!<{2E?nqJtD!l*(8rLzE*A)rzI9z)7%9TaojU5zkt3BbDOFt#Im9ljE;PfW zv>a*ca>yZeS#^Q?3Rw$jkZj>GKn}6Xs|$8>QK9O{NPyiWoNPr&840jYZ06~Lec~j; zENq5G)P=p!$Xj{b3mwtrkVDQQBLjbn<~$m6A^D{BJu>=z9FC`<34?-l5M-(B0@8$` z?y+m7#9^3RiL1IRY^4}rTP@p4iNLA+BqXKE+=U<-1Ry`ul4h|WaSIww3vdh@!0L@c zt!U6{4edfBG4kEMED=*}=JY8V@XvroYzmYcd!0H0T*7f7>lL`j) zJ_<=UHiiLgT@UJm8VWsuZk&HfB{-2?I9zf7aRqtzh67-`z|(mAOo-E0!vJW(_r@MH z(g0~)ux-M2-PnWe6u^mW!AAz1Yq4#@yNdtR7JQ4@q2=fW8Er zzMvbNKO1~Cl4!w-EWCfZBXfBWyr3=saJ^2~uiuOS;L-kFKzR^Q7ZgCZ;NofsU_}G= z<;LP#ekA$QpT4C5d}{-+5;t7{ zHW{)dy))U8f6MO+Kj?RgvJ00{@^yfE;fOC8>V<+V^-&hS!6tv>EaO7*si0B)B!Ht^ zu3cmSB)+ve(*Gn~;CG6-TX5Uk%}jv8W6&rH*e(iqcMIVBPNvbP+XsoSdw>x4Ly`%3 z{6&}pFjXhOLjdYI0F^}oAcu?%c-b|Ta{+Mo4cYWf3EIum1pppNc`R}c;-suJDM;># z8~~rjOlknHME-x5Fh@lJ>RDI>puPea;_VbTlg zI~TCuql@g=iIxDszKIthc>}Qn&xHnX*VHsJ0I&K^bql!Z7rJYw4A6J(r2)`n<)~pb z`)y=7G3Z&~fjnaXUI!kA=GEX%XnYaSs`#@=x|ZEAK=~bn=GEY3WPB0M?a#toO8^Qj zB%ekM+Kqpcr-=IVpODsoJI9#;aIeD)C#<@YApj`VPyp@@2<{FDx8%b?5`c5n$mFOO zD@HFeD-X+BDbhM!@ApXy)BKuKn-wf*1=E0&m81{%n$FjwAplmMLk;+OpSq?Teo3KDFPy_pdeuIB-ot#t`(%x9IO*q*n!1=k=Y~4NN zY8LiV0BjR3Z}hsjA(z8FYqolN_C_w{%V@+(^l7xw9A#ij0N{tDT4lmKjd|s<|FUfd zR4%mZJ?{f>&~^ZTv;VRyZ3dv=T4bL800a@8Z-&Ny*_O4?I0ULD;SGMp0xU(Q3+x?O z4UK;dz1+Mk+2kSiVSl814 zyF&o{b2-lcB+LCW41kRUHW+Mql%IA)$9#XDTcDIFR+z}RUZ+{07g18}Q7*7sz-G$c z-rL)MH+};E7#_8`s#q6L(2c54@d^=rYq0^U1?|WfjlP}*Z25Q}5XUP-q|RKfrt7I) z8S6cC9CiS|G4ehjj#r4t@te!N()Gq#NM|YKd=g_CQdd$v#y>frUjT5F1<=3c+TnkJ z1_V)Z2Lio^Lh<)$cYnYddiZw@NZW1OUqgx8xY$7Qps?GfLV4epSM+3l3LO z08nG7FN}%WNJP{fwj0gRsQ2N%1AzXwbVUFF`)^40!L}Qx8g_(1gl^mW091q}#(n@c z;W8xqVA~DY1@*2WZ6TrJ$1tN^@D6_nl(PO9GfWh~UV*s)g<1d?dwyT&>O*FL9Vk3@ z3lOJZ-<9_RnOlG{u#LvJtx*6wo-x-L*p(VqJ{BO3WwP?jgUGfZj@ycE_d~kdh2&Fu za$Sw@1aQBeE|~$dTj`RT5K*)wADqXFLU|7(HFl%~Buy(H@HK(}5NIFWCmMgyd@dh* z0ST@JJ0t_XMhU=c3D_XOQweyg?~H4W=k$5N*Jx^y+>L8B0yMS_0C#L@2)AUw*XYYG z0ajK90S&7%kI8_qk?I1Rp4SP`lz^$K5dV_jM%r4otj`0!M)yLBX;J{$jnxeTJX%hd zR9_>+H0|$GWYu0zhdO8E3Znb~`4cVOu33W z(6)5@0s0O#m3OXGX=X+OY~8+xY3z`S_oNEX&1C>2bh}HH$65!YlHY$HWJpCeSZWYG zzym%LfKO$Z1rP9masYfP!z_4!2b2TgQyFH#13aJ{0H4Y*3m)JBwilmp#V=g)uqFBl_4X$r6^MOe81vT+=B!50vc!~p;Zzj+`(&!A#Je*A85 zL>y7YfXZ_NsL2-Hljmm;%b=sD?sW{{{-TbkvH{Ji0jN{5@(jj=W0!;pTLK_(0spKy z07Mm_usq+W>cQ54$*u%!3L5=*aJnXj0sjv37ab}HL3{(cgaCi4URQUa<^qI?Vc3x8 zC#(T`)Fq%j25osxO&Q*Q5r%o3KBCBw` zNaw#1`uc=Zc4C2+Db_lo3$eVRFb|;+(?S^(oPW7M`9zff${wIFqK2?cMTd?zYFg`H z=3r$4`uyczB@2HluPsys0g~HN%Vz&zT3pe0a{;X#Qf&YN-KCZ^K+57E^vVVxvIqdQ zqz+(9<`X)MQJ#C!(l-GB{aF5;0icp<-XeiicjWQbtPs0@p#aL}B3Y_70P1emGXcj4 z#R34ig6Mqm8ydVySI0o19^#nTqziqF0fp63`Y(^?Llb}Rq^{}XNvobuca`ohj8{J1 zWO01s(D36?fQLH1amM;@0k$3wugFVZ0dQwL_hvKznu)ad(B!B9UEqp%sNz@waOXfj z|FJw_15gQqCB8gM*P#o`vQ_nI9q&7<0eGZW0=?Eda@lsN`Q3Rc2+-GGQ=DH%KI=Mj z^qJ%S#NU6Up0{fzZkJntghDS{rtfURFk8@41$bJeCoiXoWx6}Yg3T6me__JR5_g+g z&`w4aq9xcHL6rf)z)fl6qCV?$fBLfqRF(&)iEZTcRxOV07(Z$PDHLkV1ie~tQ!CT diff --git a/graphics/fonts/latin_small_narrower.png b/graphics/fonts/latin_small_narrower.png index d03f1b8ad0e2dd74778b0054d91943ab79943dc0..576dac01e4fb45fe0255626f61cc5ae976468283 100644 GIT binary patch literal 4433 zcmeI0S5%Yfx5mFO1xNydBE2dOAcBC3bP^On0g(X}L`nn(kgk+uNFW~_Mw+7s86glx ztSCj0CV?PL9BCp_1QK9|A|*&mC`tZ!&h1(2f6m>xIPcB#?tSrIJZtagx7M5P=wKs; zmPZ2sAa>!rl@kDfdsi4B0^buit214D0!BF5oB_&u6zBH}QAhjB=W^Z)jEszihld3M zffp;{FaSubU9hseOe|RP=uars5bFM+U)=n~#xZq&4x(frl8_HR zFv&l==Ki7uD;M0*P2q2yZXMxhfOA5ST`~q1KerW0w+3e&;yC14zBV8|2P5vA$!3L% zg-ab@NfOc@1av7mVUNV;T=Z3j4(&$NmjQWMMjto`FbCJ{yjn3NoUy6j1oUg&LH?<} zzcmKz$Y+=(U>$(a#G(mAf=r&i$FB5>$%VEfxOUHxmXi~z#3oWK8AIHvykJZut0oz8 ztK%Kr+(zk{h|Be^@u{*fORwr9b*jk#3l4s#$Co?&z!npBJuj{bM7$n z#Ht8YhZQf<@2hvrH}&=nkcB&C^-~yZIOUQIqxG|J<~gD~@kHGr23`_cO9!Oi--^~` zoR}$WZbFHo=jbV^^e#1+s6qT_80=?I>s&z!T>D;&CJx#4C;wCv68(=2Wqcm4$vTnZ z0s4hMd&FNCPg1wq>h~g;SZYudF9|irs9siZzJ7PjOTsHp&m0cBdGn^=E2d*&=6%4^ zn8moNRR2U9%$%gW86{ghgGUi^2^XXRx~|`EAZY8ZNnO;m=h1q~(yT=(8F%>h(Ar`9 zkExyfos+pcu~#IGPRIozTsQP!vgdZy^|HF}63L)%>KUp)mGS(ds=NwR>oiPJk)};uzj5=B zIheq2&JH=2xy_dK62a)5En1l`Z>a+=?z%$N)zzfyr2{CRMPFI0ncycf%m{fN6wnxbZl>nsdP->7Br%DZX^lE&s3>1iKMtyEqddWNj z3_?vnkr(`feA^54*ayE99>v`VVz}|erSY+2V>6sOChF?jlBsD#z`?p?70Em;ByK_r z_hS~8#;HAn6$Oy|U#Mr5|3;oZemp*g_X`Y+{9O`%?;q8|qRv^;;iQ%mm3;U zDewkC1f%PUts$8U zM`^O20ij|QDu|b*tztC@%7BU?co2AUPk~CK2FEr7n^jMu;+P_O_i#J#Om!SAG6;y1 zjI056&6}j~zcRRYo%9nRoE`Nz2`o?tuDsy=F=mIPZS0V^Y}6kLZW;4I`vwrw=lGLM zsl#t;p(Vt;j-x-{%CBhOr9K(P2yPMuY8@vIyWC}NASlG^R&VTzx;5b4JY;u}1lm2Z zyyaUk4YwoS6a826$m%#cLq+@Z1p0tVE6);&13kb`pFS;zJfgmrpJM#HwArnX&j9bskA1NY;6Z)zt%GY=kp(2gO>}_iJUpNdp(L*f)VtYrOko32UQ2*Pp0~5J+fi+` z2rdk%{nD1_m6p2H7sC&erqStqDk9+HVxQBOa%qSni>m2KXzymK1HDT>$G;_|KmT6Q zKj!)9gN(b0DUKThV{AA&oRJTx&W;F@2+NgR-e!FFLY|Z}NcUD>Ee| zQvRE(&#YEzYGoGreqng_N?UmsVIYVbGnORA)IjJt??zeWHtuc0HH9RR%X)k56)7ZZ~Cg*duBr43!{g*y9uUudB(zs3S@X;o=dwqxV2qr z0T}uyNJAWjMM8}5b{c=9?l(yaiQ}}jeVVPrDmt?D7AJWKXFTkQl9>6EP#fX zL%oiv0Tis;PctQJ(Xr!^1QOO(MT!*)FaEEzxJNRcPzsE0$l-r*$P07yBePp4rj1Ty zg!qzw1<@I1TB7X%(^IU_J4&k;sc+B8X70C?k_@X~th@h*SJ=dw>!2bJ-NPdg!-eP_^?T=(E*r4ayH5_Ds zINO31ciVY%Md-yQyHxd=Esi2&d_df2zw>`|I=mh&qTxYW3NC%0RmL`~G3KPf%hd(G z(9W(S+-?8iwL1q5v~cz`YX$Rq6zjTgi#hm$2ZB3qEURoe)51xUI(WlQY_T=#I*cRm zvf~oa9l&=3S4$wnCP%<-6J8Zy2iH~}2n zBKd#&t7v?qV`g@HXJQ-PC;&N?*g+|2h;EE#SaGekP9qo^e}DXP`f5(zZqJyPk2d8s zP&rRx7H#HMQ~>&dMsGxyWHkl5s^bo>q??AQH>!GHhUV6P&0+6P&Y}oZ&;46_`6jV14Z(}TmJEiR*hO~HfHEu_#oASb3@N=>71pUryx2IZ#;A!#nTTz&v$LRJ`$x1?yggz_RU>rO8x=aLMDxylamJ>MlR!po6m>0|Xf; zB}+z?>(m%q7Jdj6GQ<(j0B^T*JA3pgg#+eZhfN5?+ihs+pen#$(wk#^x;`eREzlWH zc;~ygt^xHphl8zik>+9Ciu(e4P?3}Co$zQutU&$)=c#%i)-nyvI+rAGY7sep?cs9t z6slk9@Tu$y5&k~k5!ppDx~|RsMiHu37}*M3Sllb+5geHP!|ve< z8{!?q=tK6x@6;;8BvsvL{)qZqpiu=E@NyaT=>z2^XidG_TMFt$qA?O1J;yZw#k3Ci zp9|n;suNM2`%Ft+kLT3Vw>ISkm4wA=iXdu_^yt6MDGQGSe8RZN^@k_WL=U?%h=8 z5k5a9Z_Csiy?)rbo_M+&kf4Q91S`Rln_FZT=%?DFxMUc3JSj-{Qg!kXG(+b}X`eG} znD=F6N|o`q*^L80PwiIi_=Jf8Y~U#N$&ef-VADkntdWwGFy!3i z(cg;@0mj^W24;ZEv6*ch5IvZ;>IiM5U*55DXkR!P>s}~S*r3}VCh zw^WsWIyVcUPkucfr@0r_xzd#w#JM;8Do;pbceao%VNeh7hezd1Rl-$B(I7~sjG|fG z&N^e+eN>rh)7v1pNTzwgw_ykO)w#O9Di243eIAR}?(bmQkIx~aSL9)lypWflW5K}6 ziJ8sjD<$q1AUNNE+p8!}^A(jH(ehruk6FnO*q66tkv#h89(=l!%8&Y7L18UMg!bku zCMP%diNXJpIL?GK{}Vd>0N5Up4GsVQ`Tri||L4rf%@w+8JDxcBZF-UEe*+9&oh|*v z){(Llz!&OR%*%f*Lq-%YkYEj-hF7`ueL= zHA&{6ZLz#ByZL@i1Z#F3CP%Y~fw}S&hJp(ECGqt*lt^D)ZoR+>P7|+$<(vuE)l`kT zril~8yf5m~-L+FXz$nOy2~Fa_!c!bDK437?9qqN1cvJ@xD2+6+!0&u)D8D~5Slpkz4!(hKnM3Y^$3s)YrqnWQbW{^$ zLs;3|GylhNsTr6SZ?8{e_t}IEM^*IyVIA{oCy_KilX?%M3>C|49amx|*t}B&=A4q& zhKkL6g<9Uz+v2M?tQCAV5_~S&5nfQ&DAd|i*r~I@vQy7ARka+WpL)k%yJc^H-figY z@R+h*8BU{37p5RxQ&&^;JbOhdq@NBXeOb83W$5gSI<}kSHle;^$d7yU!6m;*BWW_R z!Qi<^<{q=Z1CD^&O7yGgD*)#6i`(ysMf4G0`^~_Z;@_wYc^y>>#mgc(_36H1KdB|T zg645=0;NGQ+3`2?n_^#* z|I-4}vA?s(zbm;ONqz*})*0(+KbEfxaM6qA#Z`l~8)F2m8PR_fV5h9J%<@I#7`(-U z<-v)(RAWsgG}HvS;0kuz)~*4oNLrgKJUjr!H5{mcGi>+rV2To`SEwKCV1Mi9#-Zmid56`jVb2wqs$dT%YvD6pIojqj-dhi$16RJKHBmhVLQL$#oj`q{m$Ip`QFP{IBQg%pMVN;Yu^IEJ8xp**GYLRNxcX#jcy*Burxw@ae zg&}{PBgvMBJQEjPpv)SJHdn&Z`*_;mj5vJe8X8KTS&weC0ecCFy!dJ1VL)jHL6(`y zVMWM9DC%<3#0|aydP%wAkL70E4Y0lYHlu1^0{PjdA1|i>cEuwMb>&(m|^0yF=1GY-x#I&HMX!Q%% zUAUF>-zMbm;aC{?N3FhY?`0>OAx3gghW#*tBIBgYX!$CUb&9M)HlXff_+sFd8-UXL z$k>C7pQj$s=_qNbna1?%jUNILyGYRM5yT_t>>s8w5*|va&al+KPHhFpqZK~p2YK)>!BAcqV3i!R?;zJ`7xaxok9?rdP^tr@TJCoztNbc@1s$CuZknOySs%oCYg<& zZ+#)G)e6ehyk*pI#ZEz-P0d9A1$Q{`E58f&Q!hePFcNeMxeB$$Wlz&BwzSiAIjG- zR3^7qxdlNbyBw|d;df&I|4b(%GcPfREGo*=N(aA}1Yr>Q{fI|gkgRiUi{}R(qA6a& zJ<-N@iFlP^CC;L~<7hw7Z3ZLU2+`NYW2}_aak$0)?{m@3yDWCMMJ<`gKLvhbu#j&e zFS^4iCwmlF^+xf|w} zaBb=H0apRN-(q?vaq#vfqs(YTxT-T<=!Z(wC7Hmhx_Bbssk0!-8Xf2!4M=`|{!`ts+-6JM^QP6NYw`ekkl7s&iy=Q^Xbl~G zvW3BF0)&??b)zjo69^6NG5B4QRtbQfAr<;yyCDKq-;qe!s*!1qPQL-&zh%;s2v{I`7x zMn%$wJY~a*;|C*TXyRqn$oejTq2uyU4zGZ(5*c1V6S#?(iKN(Hb>2v_(vipAFB zFG5rSx`RIQ0YTxcR5bk)$$_U9$CiZH8U=Nv9Z1juGP8DjF-><=^`PLWn1jIF7xSH! z)hMFWA^82@QNrRvM_3Tb6)|-c!@t8Med(NL%IY0*Wne_-C{G~CuMi~DVh1oE%n@|{2IF}N89 zaR${C`GavcvQ$1V8a(mB*)k9K$#i)b2-%-X0>h}=J0YH&o@DCq?fxp>l zUp)x;tVzUwgr4qh-AmhNxfW=C+CikRCDi28dV204VJw>d0H`Ui%!Xe5V4M3--+j&v z2=cUoYExhfBDp;N0@nh~pGskrl z*UUk1UHc5cTqh4WOtYe29xlMs?KS+4(NfcwcfIqDP}N^l>FeQEk>W&XT6)2 z7A6J>`bcUWz}{>;vNqYtz8bJnE2Py3fhAFzfLSyrg=P$^B7HUDAI0y1SeV~0hV0R? zb4UziR~Y0K9ma=l4D+5g9yoj$-)>d0>-aKaaU>@m?GD6`5eiUx8M_qK%@fon1kz3U z02jEXiO=yjQZMq~!cSM;EH2^%FFk(aBTFzj+tgy)Eif3<~cX)2VBUCmC1P7|?q? znVmwfVCJjrS*Qq0Me(MlduA+jaTyPI?Y$wfN*pOR+Xq9snJkAbEwi zxdIX}=QipUf&>1Cvk!to32^6U`1X-qW+c!pJlv!Rs(kD{*M)^wwI6d>~* zGlr&_6LYH>-(E6C(^{FU+Hi+!1lTeYeJq?Gp(AntRe5>-DUau6?yG#{J=G#v9nX+r zok~-&u#6r$caI%AhWetYQJ(*37SWfK-701}cQdRjDlmYH$SG3RW6}ci&2~ION_!N` z(cOyr@L!EfjiH23H@D(JhvwV8&gYkJdA@CV*wC_zPO_Von+;vpexOXvN zbS)oiax-OKaV2I^=C1C`hpUB;8V~sYc{8v_8UW{nJh=)bc2VbLBz4jlSxQuAT#Hy_ zU3-&j4N_a96|bHK>PJ+(RS_QdwH+YFy0M5h;PuqT*L?EbYMnp$SxDN?@YWRD&h!!$ z_!pYj$-Khhai|Uo9cYa~l>RU|swK&K9r+S0+(cV)|Ck(DHIqu0)inYSvPeIyFM!V# z0R`b{1B>M$9lV_0tQ!a^+^@Aa{>D{_*S`wjZ-a9!S7sES)leR4h;;@ z1LwrNxkb-1KF!BM;H%gx;C6lZ>VIoEa|FBpi8*cim+7`$j{X1g|Gkg@-y^5Hn_>UV zmU1rP{+8hIVc1b9ApN!TYyGhTda{AV)ZYt8?D3h62kUFKMaeE+$l^oMe}0|Pd+p3< zxwZV*^8S}=54dZlXY>;EvT%M*uuG|UpJ2p(z>E`hHCdX7JqErIX3ZOQ%%CFb@hHhI zYF@3VTpW+}N2*_Ac@yz-RYX|0mTPsJⅇt1ES35YB82ljNRtAOe95-zvH&hbaLAMB(Lk6WY_1`)> zk+o%S>*2Vb4H1%OxW+E69;13Oh5eGu4yyurw2OlKhYUK!pQAj5cgfY0+#Z*yZU zddB|zbr747yy$aSJ$o&OCU)NmVny=^OO=;V`AbHijKL;J*8 ziQ`;_CESGJY^)4JTgYFQ(F{jxl1vM;bo^iJCjcdX(W4rxL@@{kxs76G&{{CoNch&G zVDM1UZip|A(jT#Sd4_kD8Emw*CL4?5jqkbZqnq@PD!$l~n0|t7Fo^rqx&6-poIXXc KetE(-<-Y*@4^nRc diff --git a/include/constants/characters.h b/include/constants/characters.h index 3725cecce0..6ac3c5224c 100644 --- a/include/constants/characters.h +++ b/include/constants/characters.h @@ -54,6 +54,7 @@ #define CHAR_SEMICOLON 0x36 #define CHAR_BARD_WORD_DELIMIT 0x37 // Empty space to separate words in Bard's song #define CHAR_V_D_ARROW 0x38 +#define CHAR_NBSP 0x39 #define CHAR_INV_QUESTION_MARK 0x51 #define CHAR_INV_EXCL_MARK 0x52 #define CHAR_PK 0x53 diff --git a/src/battle_message.c b/src/battle_message.c index 51d41d947e..76b9fde5cc 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3115,7 +3115,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) { while (*toCpy != EOS) { - dst[dstID] = *toCpy; + if (*toCpy == CHAR_SPACE) + dst[dstID] = CHAR_NBSP; + else + dst[dstID] = *toCpy; dstID++; toCpy++; } diff --git a/src/fonts.c b/src/fonts.c index 2eb8ed062b..fba0dfb7a6 100644 --- a/src/fonts.c +++ b/src/fonts.c @@ -5,7 +5,7 @@ ALIGNED(4) const u8 gFontSmallNarrowLatinGlyphWidths[] = { 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 4, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 5, 6, 3, - 3, 3, 3, 3, 8, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 0, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 3, 8, 8, 8, 8, 8, 8, 8, 4, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 4, @@ -41,7 +41,7 @@ ALIGNED(4) const u8 gFontSmallLatinGlyphWidths[] = { 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 8, 7, 8, 3, - 3, 3, 3, 3, 8, 8, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 8, 7, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 8, 8, 8, 8, 8, 8, 8, 4, 7, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 4, @@ -77,7 +77,7 @@ ALIGNED(4) const u8 gFontNarrowLatinGlyphWidths[] = { 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, 8, 5, 5, 5, 5, 6, 5, 5, 3, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, 8, 5, 5, 5, 5, 5, 6, 9, 6, 6, 3, - 3, 3, 3, 3, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 8, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 4, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 4, @@ -113,7 +113,7 @@ ALIGNED(4) const u8 gFontShortLatinGlyphWidths[] = { 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 8, 8, 3, - 3, 3, 3, 3, 10, 8, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 10, 8, 5, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 8, 8, 8, 8, 8, 8, 4, 6, 8, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 6, @@ -185,7 +185,7 @@ ALIGNED(4) const u8 gFontNarrowerLatinGlyphWidths[] = { 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 8, 4, 4, 4, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 5, 8, 6, 6, 3, - 3, 3, 3, 3, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 8, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 4, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, @@ -221,7 +221,7 @@ ALIGNED(4) const u8 gFontSmallNarrowerLatinGlyphWidths[] = { 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 3, 4, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 4, 7, 5, 6, 3, - 3, 3, 3, 3, 8, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 0, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 7, 7, 7, 8, 8, 8, 8, 4, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, @@ -257,7 +257,7 @@ ALIGNED(4) const u8 gFontShortNarrowLatinGlyphWidths[] = { 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, 8, 5, 5, 5, 5, 6, 5, 5, 3, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5, 8, 5, 5, 5, 5, 6, 6, 9, 6, 6, 3, - 3, 3, 3, 3, 10, 8, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 10, 8, 5, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 8, 8, 8, 8, 8, 8, 4, 6, 8, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 6, @@ -294,7 +294,7 @@ ALIGNED(4) const u8 gFontShortNarrowerLatinGlyphWidths[] = { 8, 4, 4, 4, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 5, 8, 6, 6, 3, 3, 3, 3, 3, 8, 8, 3, 5, 5, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 5, 5, 4, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 5, 3, 7, 7, 7, 7, 0, 0, 3, diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index b073ac226a..c55ef489b3 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1160,6 +1160,7 @@ static s32 TryMessage(s32 i, s32 n, const u8 *string) switch (string[j]) { case CHAR_SPACE: + case CHAR_NBSP: case CHAR_PROMPT_SCROLL: case CHAR_PROMPT_CLEAR: case CHAR_NEWLINE: From a45f18b9b7dcbbb9778bec843e7fe4d431af7aae Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:37:37 +0100 Subject: [PATCH 469/544] Fixes Wormadam define for teachable learnset script (#5783) --- tools/learnset_helpers/porymoves_files/b2w2.json | 2 +- tools/learnset_helpers/porymoves_files/bdsp.json | 2 +- tools/learnset_helpers/porymoves_files/bw.json | 2 +- tools/learnset_helpers/porymoves_files/dp.json | 2 +- tools/learnset_helpers/porymoves_files/hgss.json | 2 +- tools/learnset_helpers/porymoves_files/la.json | 2 +- tools/learnset_helpers/porymoves_files/oras.json | 2 +- tools/learnset_helpers/porymoves_files/pt.json | 2 +- tools/learnset_helpers/porymoves_files/sm.json | 2 +- tools/learnset_helpers/porymoves_files/sv.json | 2 +- tools/learnset_helpers/porymoves_files/usum.json | 2 +- tools/learnset_helpers/porymoves_files/xy.json | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/learnset_helpers/porymoves_files/b2w2.json b/tools/learnset_helpers/porymoves_files/b2w2.json index 976b125c6c..bd1762990e 100644 --- a/tools/learnset_helpers/porymoves_files/b2w2.json +++ b/tools/learnset_helpers/porymoves_files/b2w2.json @@ -50290,7 +50290,7 @@ "MOVE_SNORE" ] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/bdsp.json b/tools/learnset_helpers/porymoves_files/bdsp.json index 8e4ac589d3..af2e75a3ae 100644 --- a/tools/learnset_helpers/porymoves_files/bdsp.json +++ b/tools/learnset_helpers/porymoves_files/bdsp.json @@ -46223,7 +46223,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 0, diff --git a/tools/learnset_helpers/porymoves_files/bw.json b/tools/learnset_helpers/porymoves_files/bw.json index 7728235c5f..4a93b57602 100644 --- a/tools/learnset_helpers/porymoves_files/bw.json +++ b/tools/learnset_helpers/porymoves_files/bw.json @@ -45087,7 +45087,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/dp.json b/tools/learnset_helpers/porymoves_files/dp.json index 666a6dda58..fdae45c2a6 100644 --- a/tools/learnset_helpers/porymoves_files/dp.json +++ b/tools/learnset_helpers/porymoves_files/dp.json @@ -44067,7 +44067,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/hgss.json b/tools/learnset_helpers/porymoves_files/hgss.json index b0241c96f4..8aaf2714b3 100644 --- a/tools/learnset_helpers/porymoves_files/hgss.json +++ b/tools/learnset_helpers/porymoves_files/hgss.json @@ -49305,7 +49305,7 @@ "MOVE_STRING_SHOT" ] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/la.json b/tools/learnset_helpers/porymoves_files/la.json index 599596a902..4492a37c69 100644 --- a/tools/learnset_helpers/porymoves_files/la.json +++ b/tools/learnset_helpers/porymoves_files/la.json @@ -8433,7 +8433,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/oras.json b/tools/learnset_helpers/porymoves_files/oras.json index 11a737628e..da1a3bf21f 100644 --- a/tools/learnset_helpers/porymoves_files/oras.json +++ b/tools/learnset_helpers/porymoves_files/oras.json @@ -53725,7 +53725,7 @@ "MOVE_SNORE" ] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/pt.json b/tools/learnset_helpers/porymoves_files/pt.json index e969777fa6..bf2ace3c59 100644 --- a/tools/learnset_helpers/porymoves_files/pt.json +++ b/tools/learnset_helpers/porymoves_files/pt.json @@ -48085,7 +48085,7 @@ "MOVE_SNORE" ] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 1, diff --git a/tools/learnset_helpers/porymoves_files/sm.json b/tools/learnset_helpers/porymoves_files/sm.json index 65255a69fa..d79ab5c4e9 100644 --- a/tools/learnset_helpers/porymoves_files/sm.json +++ b/tools/learnset_helpers/porymoves_files/sm.json @@ -48246,7 +48246,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 0, diff --git a/tools/learnset_helpers/porymoves_files/sv.json b/tools/learnset_helpers/porymoves_files/sv.json index 04bc72f9e6..190b084611 100644 --- a/tools/learnset_helpers/porymoves_files/sv.json +++ b/tools/learnset_helpers/porymoves_files/sv.json @@ -36838,7 +36838,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], diff --git a/tools/learnset_helpers/porymoves_files/usum.json b/tools/learnset_helpers/porymoves_files/usum.json index ed4cfb69e0..2587a7de81 100644 --- a/tools/learnset_helpers/porymoves_files/usum.json +++ b/tools/learnset_helpers/porymoves_files/usum.json @@ -53477,7 +53477,7 @@ "MOVE_SNORE" ] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 0, diff --git a/tools/learnset_helpers/porymoves_files/xy.json b/tools/learnset_helpers/porymoves_files/xy.json index 8be594e6d7..1cb68d527b 100644 --- a/tools/learnset_helpers/porymoves_files/xy.json +++ b/tools/learnset_helpers/porymoves_files/xy.json @@ -47960,7 +47960,7 @@ "EggMoves": [], "TutorMoves": [] }, - "WORMADAM_PLANT_CLOAK": { + "WORMADAM_PLANT": { "LevelMoves": [ { "Level": 1, From a775098e83e4b5e9b171e085664a364591de13d1 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sat, 7 Dec 2024 07:38:34 -0500 Subject: [PATCH 470/544] Fix octolock + defiant (#5781) Co-authored-by: ghoulslash --- data/battle_scripts_1.s | 2 +- src/battle_util.c | 3 +-- test/battle/move_effect/octolock.c | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index b38dc4b7f8..6c2b9ecac1 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -864,7 +864,7 @@ BattleScript_EffectOctolock:: goto BattleScript_MoveEnd BattleScript_OctolockEndTurn:: - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE + playstatchangeanimation BS_TARGET, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef printfromtable gStatDownStringIds diff --git a/src/battle_util.c b/src/battle_util.c index b376a20920..3aaa756e44 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2618,15 +2618,14 @@ u8 DoBattlerEndTurnEffects(void) gBattleStruct->turnEffectsTracker++; break; case ENDTURN_OCTOLOCK: - { if (gDisableStructs[battler].octolock) { + gBattlerAttacker = gDisableStructs[battler].battlerPreventingEscape; gBattlerTarget = battler; BattleScriptExecute(BattleScript_OctolockEndTurn); effect++; } gBattleStruct->turnEffectsTracker++; - } break; case ENDTURN_UPROAR: // uproar if (gBattleMons[battler].status2 & STATUS2_UPROAR) diff --git a/test/battle/move_effect/octolock.c b/test/battle/move_effect/octolock.c index 1a04de7331..e93f6f29cb 100644 --- a/test/battle/move_effect/octolock.c +++ b/test/battle/move_effect/octolock.c @@ -131,3 +131,24 @@ SINGLE_BATTLE_TEST("Octolock will not decrease Defense and Sp. Def further then } } } + +SINGLE_BATTLE_TEST("Octolock triggers Defiant for both stat reductions") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BISHARP) { Ability(ABILITY_DEFIANT); } + } WHEN { + TURN { MOVE(player, MOVE_OCTOLOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); + MESSAGE("The opposing Bisharp can no longer escape because of Octolock!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Bisharp's Defense fell!"); + ABILITY_POPUP(opponent, ABILITY_DEFIANT); + MESSAGE("The opposing Bisharp's Attack sharply rose!"); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Bisharp's Sp. Def fell!"); + ABILITY_POPUP(opponent, ABILITY_DEFIANT); + MESSAGE("The opposing Bisharp's Attack sharply rose!"); + } +} From 6e24b6af3dd134c90fa2342d7378825697dd5d27 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sat, 7 Dec 2024 08:48:01 -0500 Subject: [PATCH 471/544] Gravity fix + Sky Drop Test (#5780) Co-authored-by: ghoulslash --- data/battle_scripts_1.s | 4 +-- test/battle/move_effect/gravity.c | 47 +++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 test/battle/move_effect/gravity.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 6c2b9ecac1..5f7e898e1d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2741,9 +2741,9 @@ BattleScript_GravityLoopDrop: printstring STRINGID_GRAVITYGROUNDING waitmessage B_WAIT_TIME_LONG BattleScript_GravityLoopEnd: - moveendto MOVEEND_NEXT_TARGET + moveendcase MOVEEND_TARGET_VISIBLE jumpifnexttargetvalid BattleScript_GravityLoop - end + goto BattleScript_MoveEnd BattleScript_EffectRoost:: attackcanceler diff --git a/test/battle/move_effect/gravity.c b/test/battle/move_effect/gravity.c new file mode 100644 index 0000000000..4ccad08b58 --- /dev/null +++ b/test/battle/move_effect/gravity.c @@ -0,0 +1,47 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_GRAVITY].effect == EFFECT_GRAVITY); +} + +DOUBLE_BATTLE_TEST("Gravity cancels fly and sky drop if they are in the air") +{ + u8 visibility; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(100); } + PLAYER(SPECIES_WYNAUT) { Speed(90); } + OPPONENT(SPECIES_PIDGEY) { Speed(50); } + OPPONENT(SPECIES_ROOKIDEE) { Speed(45); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SKY_DROP, target: playerRight); MOVE(opponentRight, MOVE_FLY, target: playerLeft); } + TURN { MOVE(playerLeft, MOVE_GRAVITY); SKIP_TURN(opponentRight); SKIP_TURN(opponentLeft); } + } SCENE { + // turn 1 + MESSAGE("The opposing Pidgey used Sky Drop!"); + MESSAGE("The opposing Pidgey took Wynaut into the sky!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKY_DROP, opponentLeft); + MESSAGE("The opposing Rookidee used Fly!"); + MESSAGE("The opposing Rookidee flew up high!"); + // turn 2 + MESSAGE("Wobbuffet used Gravity!"); + MESSAGE("Gravity intensified!"); + MESSAGE("The opposing Pidgey fell from the sky due to the gravity!"); + MESSAGE("The opposing Rookidee fell from the sky due to the gravity!"); + MESSAGE("The opposing Pidgey can't use Sky Drop because of gravity!"); + MESSAGE("The opposing Rookidee can't use Fly because of gravity!"); + } THEN { + // all battlers should be visible. assign to var first because expect_eq not working with bitfield address + visibility = gBattleSpritesDataPtr->battlerData[0].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[1].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[2].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[3].invisible; + EXPECT_EQ(visibility, 0); + // ensure moveend properly recorded + EXPECT_EQ(gLastMoves[0], MOVE_GRAVITY); + } +} From cb12bdc22086bafc34d90c3288d23662d0f514a6 Mon Sep 17 00:00:00 2001 From: iriv24 <40581123+iriv24@users.noreply.github.com> Date: Sat, 7 Dec 2024 16:11:45 -0500 Subject: [PATCH 472/544] Fix No Guard failing OHKO Moves into Semi-Invulnerable Pokemon (#5779) Co-authored-by: Bassoonian --- data/battle_scripts_1.s | 2 +- test/battle/move_effect/ohko.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5f7e898e1d..1eb74cea31 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3413,7 +3413,7 @@ BattleScript_EffectOHKO:: attackcanceler attackstring ppreduce - accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE typecalc jumpifmovehadnoeffect BattleScript_HitFromAtkAnimation tryKO BattleScript_KOFail diff --git a/test/battle/move_effect/ohko.c b/test/battle/move_effect/ohko.c index 511d76a8ad..8a8015309b 100644 --- a/test/battle/move_effect/ohko.c +++ b/test/battle/move_effect/ohko.c @@ -20,6 +20,22 @@ SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon") MESSAGE("It doesn't affect the opposing Glalie…"); } } + +SINGLE_BATTLE_TEST("OHKO moves can hit semi-invulnerable mons when the user has No-Guard") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SHEER_COLD].effect == EFFECT_OHKO); + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_NO_GUARD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_FLY); } + TURN { MOVE(player, MOVE_SHEER_COLD); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHEER_COLD, player); + HP_BAR(opponent, hp: 0); + } +} + TO_DO_BATTLE_TEST("Fissure faints the target, skipping regular damage calculations") TO_DO_BATTLE_TEST("Fissure always fails if the target has a higher level than the user") TO_DO_BATTLE_TEST("Fissure's accuracy increases by 1% for every level the user has over the target") From 6e6352569fd051ec1cedace97057b8929823af3f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 7 Dec 2024 15:12:09 -0600 Subject: [PATCH 473/544] Narrower font tweaks and font fitting fixes (#5782) --- data/scripts/debug.inc | 29 ++++-- graphics/fonts/latin_narrower.png | Bin 4764 -> 4617 bytes graphics/fonts/latin_short_narrower.png | Bin 4409 -> 4399 bytes graphics/fonts/latin_small_narrower.png | Bin 4433 -> 4349 bytes src/debug.c | 130 +++++++++++++----------- src/fonts.c | 40 ++++---- src/item_menu.c | 4 +- test/text.c | 123 +++++----------------- 8 files changed, 137 insertions(+), 189 deletions(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 9da3f529fc..0be780609d 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -449,7 +449,7 @@ Debug_EventScript_EWRAMCounters_Text:: .string "Fishing Chain: {STR_VAR_2}.$" Debug_EventScript_FontTest_Text_1:: - .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font .string "Angel Adept Blind Bodice Clique\n" .string "Coast Dunce Docile Enact Eosin\l" .string "Furlong Focal Gnome Gondola Human\l" @@ -463,7 +463,7 @@ Debug_EventScript_FontTest_Text_1:: .string "Zloty Zodiac.$" Debug_EventScript_FontTest_Text_2:: - .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font .string "Angel angel adept for the nuance loads\n" .string "of the arena cocoa and quaalude. Blind\l" .string "blind bodice for the submit oboe of the\l" @@ -474,7 +474,7 @@ Debug_EventScript_FontTest_Text_2:: .string "loud statehood and huddle.$" Debug_EventScript_FontTest_Text_3:: - .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font .string "Enact enact eosin for the quench coed\n" .string "of the pique canoe and bleep. Furlong\l" .string "furlong focal for the genuflect\l" @@ -486,7 +486,7 @@ Debug_EventScript_FontTest_Text_3:: .string "bathhouse.$" Debug_EventScript_FontTest_Text_4:: - .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font .string "Inlet inlet iodine for the quince\n" .string "champion of the ennui scampi and shiite.\l" .string "Justin justin jocose for the djibouti\l" @@ -498,7 +498,7 @@ Debug_EventScript_FontTest_Text_4:: .string "shallot.$" Debug_EventScript_FontTest_Text_5:: - .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font .string "Milliner milliner modal for the alumna\n" .string "solomon of the album custom and summon.\l" .string "Number number nodule for the unmade\l" @@ -510,7 +510,7 @@ Debug_EventScript_FontTest_Text_5:: .string "bishop and supplies.$" Debug_EventScript_FontTest_Text_6:: - .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font .string "Quanta quanta qophs for the inquest\n" .string "sheqel of the cinq coq and suqqu. Rhone\l" .string "rhone roman for the burnt porous of the\l" @@ -521,7 +521,7 @@ Debug_EventScript_FontTest_Text_6:: .string "of the peasant ingot and ottoman.$" Debug_EventScript_FontTest_Text_7:: - .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font .string "Uncle uncle udder for the dunes cloud\n" .string "of the hindu thou and continuum. Vulcan\l" .string "vulcan vocal for the alluvial ovoid of\l" @@ -533,12 +533,24 @@ Debug_EventScript_FontTest_Text_7:: .string "exxon.$" Debug_EventScript_FontTest_Text_8:: - .string "{FONT_SHORT_NARROWER}" @ Edit this to test your font + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font .string "Yunnan yunnan young for the dynamo\n" .string "coyote of the obloquy employ and\l" .string "sayyid. Zloty zloty zodiac for the gizmo\l" .string "ozone of the franz laissez and buzzing.$" + +Debug_EventScript_FontTest_Text_9:: @ Special thanks to Nintendo for this nice pangram to test other glyphs + .string "{FONT_SMALL_NARROWER}" @ Edit this to test your font + .string "42 × 138 = 5796.\n" + .string "Mr Jock, TV quiz PhD: bags 20% fewer\l" + .string "lynx at a café; voilà, they're “worth”\l" + .string "♂1/♀1 = ¥1. That's 10 + 9 - 8 = 11\l" + .string "Nintendo GBA can connect to a Nintendo\l" + .string "GameCube console! He claimed-though I don't\l" + .string "believe him-to have done so in an eyes-shut\l" + .string "state…?$" + Debug_PrintFontTest:: msgbox Debug_EventScript_FontTest_Text_1, MSGBOX_DEFAULT msgbox Debug_EventScript_FontTest_Text_2, MSGBOX_DEFAULT @@ -548,6 +560,7 @@ Debug_PrintFontTest:: msgbox Debug_EventScript_FontTest_Text_6, MSGBOX_DEFAULT msgbox Debug_EventScript_FontTest_Text_7, MSGBOX_DEFAULT msgbox Debug_EventScript_FontTest_Text_8, MSGBOX_DEFAULT + msgbox Debug_EventScript_FontTest_Text_9, MSGBOX_DEFAULT releaseall end diff --git a/graphics/fonts/latin_narrower.png b/graphics/fonts/latin_narrower.png index 2b92e411c3ebec97196a6302e89ead3af7f9cf17..19a6a98fb664f1084cb901ff4cb3fd550b9234dd 100644 GIT binary patch delta 4197 zcma);X*|>m+sEfWCT8rzU@S4VWM59QGxkbF2dTy~EkvWpZesppi#sun65$}u;gmHh zVus0nB1;N|%%m)b>>+eO*p>S$a=BBjBCj(x(TPvKzb^lKB{_J@BmcX3sPXgNrmjn&fIJA^+a~t+;kJm2e6p{r;Jz5s~C=UZiT0 z5Cb(xUrMSf-W4JzS^zzFSnD{)_Uwl*7et)Q?S3B3n1*pzDt7$YpwPSFgC}&QdzGk< zLORr!nLp|>^FRM_Mj8UPWZr^Z%R0RBCd)50_HIp3NHjFt_RwmUiW>cGt2%x}lO-fK zDFHYVuuFBoUpf_oJMu4GI0UB(ItPxvAfR_ipuqtNEaK&Vsr;gWza~sK7{UCJU$X27 zi#>d_Lj2KdU|EU*)>h~N75-ngQAQ&Ijk{4-VJ%WwD?3;Tvhelgl!ydWkcf^&pgTXK zu3JT3*1mCq0~;xSTs>U6!gqYysj_RRL?KIXp`5wn^s_5^sJ;5V4nO{3}23 z19d1Y#e;-6t7wKPyN{$Vh??cJ!N?ZGg(gB`s4?_zB^?87!7W)Rv?d-34ZTmco17!T z1$mH%pew>C+_P_r@pgBYddl5^x-5Z}KM+|mg_xMrlyhbewIm=%)Ujx%HlZ8)wcAtP z;e-qb5(BL}L-!k7MUL1B6-Mu@OZ7dmhw1GuaA2ryNU^9BJ>vatfSCmR=#w|3aJ|0e z#YZGijI4WVK>(Rk44pND;)R`VHoZQ$egrHVl;sX+OBy6^q0Beb%wwCa3i@xQ$hL%v zXP-dcb73vXJQ*M)Cu89MR+WI|pQAP@Lxqz9A0B!xCC0z;yLPWM$}ms6HSf^IK!ohJ zu3>DR7TmC7DRJ8xcyn`myQ(qc7$69A}4EI81XPKK8il}p-L9Fl#ihQCEt59YCS=U5_K&8M6JHf$vQ zH%ZX8Z&9)#wGHVJ`B{Tr^QcWF6xEvDaU5Wx3Z{MZ-8fX=do*8xLKx(7T>`b$E&sWl z%^`--3ukgXbo!V9I8eTk3%Mcr18Uo=3dcB*A(`XkZg|Ur|E>l-G@^7>UJ^fVcdgQz3x&k%4Gvb=6=(58tO`os-ndf>ldFP)%Q%bD$Zbfa+`MiT9Fm!IeD^o`)Ni zng5!)+A~2rc7~^zb#d3s#TP-4&LJ5)n4=rgJ8G$tYK%=-!d_(*v1nR>>F!^1-(6bS z!ILrO$p}}+EO#sEuZ92I*KwKfjFJhQq8cL@=CmeKm(_)oq#3r@#|x=5Hi`6)2uTP7 z1D+bFN{34VYK(tidn}kjBLFOrKuFRWLJ~+rm>0%a!MKG=2>SXMn3zpx!O8`}!@%U+ zUi?8P#VXW>wZMWGZmq{3T+4D^FB*q%i`z8?fCU~`S=9y$^DQQi0ZV=2`)qOHwJp#J z*lx4USBHR~Z)|F9T`OBGx^RU z+@$;Zjq-r(-ms*N^zNhlZ9~ti2YrZeSMGF~EpS^P9IiN{wOB<_j#1EHY~+p&KyhpP z-xcUpeXq9xU~lizBgnL%Iy7S=_+B^RRB3qOuO56n@>_F%LR<-?CVb@TDC%GEZ`>z5 z0N~0#1||3+z-we!Z$kvn#&V@dN*wur)1RI{~c z-*%g#qrNxM2gewLy|6Y{(PV5+7BVXa+I;X~@hssL{k{cOQc%8~(vRi&ie1wAXi`_g zY2{QWSZXV`HR4)H`T`65H1?HxtG%{MU15~DpIAs{ED|`%rEJe+c*e@oqPT=~j#|`B zi}tJC1niA$QZcz-Q+C>CuM36N!0(u17R%l!>UF{HTOECMrt}Er^YL;HaE{A;<-DV7 zYdu*hpb{8oTS`-rZ2h>wqocmN?znx_;+nS7yhmx@XLK8y^}v-Gf#rc_+z}q2qX*s9 z#9xpLqiQYAxyob@X-4cf1gV`9E{%U_kX!$pqYo?m)H z^_{XFijU%9L2QGdhK&QRjr!F+*rf`~ZffDFIm?I+tr?Tdd&d0*7P-H#ajI7McWL5c z7>mH+xiysQ#NLH4`F53t`qSzf9%&VOZDvRHx7@}PosVW1UaPGN%bA&V`uSfNiIIHa zTRL)9Xdvpv%jo!?y0h5l%D|k@1vPKt%3|nbV6!iHepRv|Cau4O(k|xzsg!=0QBO!$ z$6r{*QQ{-b7K|=ayf^Funr(o;1}K)+f;Q*fI6fK}qp(i|s}oow=hq4T6%m*IRb`}4-gOAaUJ~u4GHxP+}N86nx2$&eY&HUaxyRccnq+#HzV2sqK7BjA(=Lc=U$Zg_?l z(`?8U4`hR2`oKtC|pl7jUt07-piAasaeVk0^`g!grYG4$6T)qZBI38Sw`Gyl`;8 zGXK#Y4cYR6#SiJ4Zn^R@6cd@yl)u?z&sWTV;mvy_;4MD&L>0nQI=IuK2hMy{rBkmCQ=PSp}G@I>< z&YAty?$FTRAjV$reHP{iy(eMTEQkRp2(M`RvxrEQ;{$)20>3=|SZLH&3omk1O;}2v z6)t>`kDpK_yuI#`W|rqn|9*R4SrUl9!_NL3({MV4;)*>#8utR^cW^zVhupBi0eAK- zAXu5zEOgZgeTP8XANTt&VE1Do)DNfy+x<{a6zWve9+?pvcJS!#s=(k zCde@IEV~>q20wZdI*4443gPy~zUo~K{yb%*rr?P&hL&jloTy)koh~h_`O$p$!209v z&T0AqB|7B>6b!v6FsM%~$suM<9uAuv_9Q4K&_u{~N!F*D4q}V_FgM-p?vj_!b%+tS zwnAoj`3s`ij@U0HF=BBgHZl2{tu{4i+MXvuXPqKoyoTC^NS zthL<&q7)VbLUz`XhE-8L` z?#PHH`NkXAPT2ko;E9WByv^`tkiw->52d`)*G zXHmJ*;4N@h=BR7|UrsTj zm2}ez%RbLZObc3i89m|UcW}9~nxPa_=TMh?BIn(2Ga(CNJ#2|BK6BK^JqUWME>oqd z4}X|?RwWApHHFva!$+lHy=oV$(KCyC$9zhQSXFq6*?5MTub0e|0*%jU<=XEy{KCR{ zC8l}(pB*R)%Gc+z(C#N0*pS|}Z$6K}!_Z`8t}DZn`pXxbm-=JtBT)j{3$qtyEnlq` qMs_(@ht$V@Yv`=tiP^WHcmQWG{Z7rfTQQKIb<+8)Q=J1o`M&_*fWrF# delta 4345 zcmb_eX*iUP_kLzPnwf~v*s^a?gduN?ZN^d(MMY%`FCv6Y_VPT05uzgdT3T(Bl#0pV z&8`&Lm$C2r&KSRbAKw3$-`D@S?hofWU(R*zbFOpW4`ecrQd)dAdg|VrQzGrs zrPFUJB`8PCqpsy0Pmz3Cvj6zF!zrD^;nNt4JnrU@l!TLLYrN+$($3fXjN$V8@o`Q! zQ!J(EKyCmnWInb7? zoz09e&kgMQB4daHH3eVp3Lp3QArS2oiex>i{*2kGivQ>VO^d4$R}I2ccn=+y=jILc z7U;7RP%bjgkOe|N#lA#2KNR(>&a(3ih;ncKH35p;L-#8X4M~c98?atVzqqZ#K1MK| zEk+BK`!-HB#kE6deKPt&)TS67kLqyaq9ad(x%XXKQmu{Y4OrMR*C0A2yV(G&;7YoP zYPJo#g@LG@7n9+O%HF|fi#E2>jXSSUsUiwJvteQY`}btjc%VX|lG|94&Yry*ftBKT zSSDmZ4wh}T4PrU(i=X2QeGd%>f|Wg05_5UMAFDinK7ZyjSDjkbhvG5=-h3={FE<(L z;%T#)RH;=-^$8)gHRl%zWF^?t>kpepHXm(fx{!XN>F-U`T2xj=#dDf z3AOJN8^R?H7*9p9)|25*!#k+9rYI-zDoH*mVFoHXiC++1|`V_0RspLUXA4Qd+#%^g0<3 zxu_`~4Ub{BzKQ_`5^rs@W}zDpvdOc$N(5OQ6kUPCarwM`7A&k|M)DET*?W6J>O6@ZDfU;?k~nha7@{8n5_KriuR5MooTvpmgm7(R z<}o^htU&U*x~^ExD{@32wq0CRG8NdLU!22U%a4LTBcpP+7meyR1-8y#T5aY6yLBT` zl9TENI>=<7b~bCS3b3QMX@NsHGJe$i0!a;&UA@wLiKvir$^JXS4hiEgOKN{Hp}ZT? z0Ub`3K}MtxV5*~SvhnCqgoUIvyJwsMmJ|UX{z_*%tixcfl`0^p#XbU=Ed?Qb=-0o$ zmg0Y_A*xMmv`Ucd8}1=7=uEUqxtn%)pWgsi*qD4<2;}IBd~L*uYuk7e#Dxz?ZfUnZ z!+oq?8b%|K>2gZ-7 ztad~cy@Em?4kmRzAfyisqXSp1wrhE?b|vM18Pb2EqZb7Fg(%VzU+jG-Os+F@XnY+m zz)1jfy`*F_?mvfRNdJwYZes3?9RxFXSqN}Yjs)_`GTeISu}imnWq?|<{S5+g5f?4b z^aCAYM`zbLh&SG^_m>PwyS3ELu3w%v4IffNF=p3vj-WL*XE)K)2r0%0n8|gPc&edG z-8?XRzYmkUxMLd+Fw1^J&H;?!!nMt?!EU&=&Vd#x?&C_ST3WK3&DgmgI;G4@q82MA1J{=gjVueA6|3s8zl&@q z19na(PSMH6RW;b}U1Rzj-eOv``TEW>g2O4yCzCeV+IEMux!wF7?|H&PIt)-M^wb=pE2gVHnD<>-? zNLFp4#NdUYZBNK71LS-2&E%Gg?aN!t28gk%uIt75Sn69kBjaJ7I<74%X~>v9 z{_d~m9%HX5mG8Bs7%O1J?q=Bnmv{WL`!1J5h?)>dfKWf-HI6Wh>-is+i(^J{q?FKjv=c^F~82b9c#vV1W6#JLNqmNYe6t#!Gv_T zE_xE~$bYAUsK%n}@KK{d;Y7|q;&I?=n9pve+1*d$Jy~$&eJK-C@!g)4O9y_I@?>#G zj~Ic48bou?K&okbnzX-%(S};@ke`h1j(CGOPmcK6r*cf8fpN>>W}Ht@;my2btm-iv z*{|qN+6YnToAj%UfCXH{Bs=>?yV0=d>De2j6k%y6aH+BFA%@Y;SXd28+vF>7M3yQh z$??;C=({F$Ju|z+}XtULoZ}iJN1z@?fuvC)GNwLy_51W4MM`q?~fKs56bR0DkIu52TufxY!)99&6nQ;Yuy}O9* ztw4?{y;D^W{(Ll`U_|oZrvlrVYIJT<5p7jreFp5VeRY;}r&9alru2YruV&vh+1XNv zzPbAdF5)oUxVz@HRL26nfDl`)ImD>Z70(1cfh)cJtpw9Z$+SDLeCEMi5a4ez zDifhYukwcXFiC@o_G8M|2CsIT^Fi_G!1C+wYV4_sh&$nIHfsYhmUGIfOXVJHjc1h& z8u>LvsCSnoU%gWb)o|F}5PMEx<9Vd*k@1w9@{=H;<;;Z&C9nRS$iO3dMyHL~Hrmt> z_Ub4ZQK{u1_&yG=30|l=XqyeYaWVFo{Vd%majwVml_Si1y!*D`S-!7A5F(|1?Y_#9 z9046@mbot<3*)d3A5WGiPjdDh8oeHduM~jPkxh5swpHh>({4o{{%SFy&2|B$ zRn)TVaql=$Va-PGkC+^XLP>O5VC#0@3!rM|wpDtwbgq6RwFY-ZBdHHJJpN#&`7HgU z$Yx&};I2ZJxOd!iRa+KN(C}XTu;QF;FI8h2v{3P(IevSTvQsGD)XkR7o?Q}Kt2A(h z+G5pl73`QCaz{?gw{{skOXXiUMY2K8teEK+nv!94kQ31i7eMnO4w%>9q;r#Rru{Qx z{aKe)6g!l*_LiWJZ*FaU+g=)7mgumKq4KIA5|6@^YyN2&PnsEb6AIs$heS9$c05ux zoMlz@1>_aJ-YNov+6T;x!K!n_aI1o8^LiG^ZD~s za&+Swu93E1u~l~Prc~q|(o>XNzxjjqDpXQ);%|2Hds9=mtESuO1fqRJT%!d$)!o&> zcJ2x6jt=~y7CItqGdeoe+t((oX&~{FEt|mnM_p%R6#8VZ*VF4Qx*Oy^Kbr>cCftg& zM$V|BEKW{a>Gu*wMz1*%&1f!5>+%2#TshXdF?9P%Seee=6!PWic~!U8AFup&6@GAQ zaQ&I0*Mc!Es!<}9bYiJJ<(H9+8QZL#Y?d#@asMV9M z%^kVA)Kj5GbyI>+#xnuW@QzjKfA)G3NO`n_<^t}=KP;QfTTr)OFkQtjefk>=6*F3{ zN$Kqt3I>z(bs8q1lA_hx{V{ea5)_A~G6S-^jE8xAAd)e*EhxEhe~`_A>m7(ScqCx) z=;a9+IwY2y!vQHnZw$cHv4+V@jAS655r>zh`_n_lAqBaH^P}C*gE%uJ;l|kc8a4em z+Z2^uUv%q-o1^W~vz!PUx;6qn*Z3~%R>o(ObDPunDWeJ48qWQ$I;k8?Qw?sM-gYvZ zL>Yb)ZMptm?jod}$omEu-{?a-o>9eN59`$UOHzobDUNr~+Ag8YX$}6jJvllfdJqhL zo?p<9x7vmWY8omHPxo3s7qz417T=5wDY&phS>AX87snp56XC-c9ypiCtI!hX^xBc( zC?-sPfU5Q|N3gA`ou?NzWgtgaIT2*POi4B3V$>n8@s6?@#g6x<@|bmli+8r&Yx|IS zySYjRZ>Lopbp3?@3?5YeVLil7)u$;@jzV6~11ND1uD71BxP3U4#_qgWzV1Zcn&5ri zcUp(Eb2L^K3KsdS9*tFI>gm~p#}lXh_Oj#pP&=$JfHz}LYf5tISAbYOS6J7N(Hio` z=N-%+3#fQ7P1^oI2eP3ItuFB65S6bxSl_9+K64{0?x^LqurSAK?ZhIIUCn^09h9_} zqH;_`9{xzO(CcUBuVwK%aF8CpL*=?-Hgv8;yO=C7PgERnUoouV2)@5(%e)eBa8+!E< zguGlw9|)QlGf2~Q0ohlRi4-`OGRCvTyBHUe=q{63A8|oqoGILAQ~x`Q?4@zjZ{E*{ hi$i;62peHCEY9r~Gqric$QAe##-}eB7VA5N{|Bbb_WS?< diff --git a/graphics/fonts/latin_short_narrower.png b/graphics/fonts/latin_short_narrower.png index 830a90389f8f86eaf22db5fdda00960583fea13e..5c4f4c1d4d87a4dcbd5b58a6da7b03a920ad78bf 100644 GIT binary patch delta 3843 zcmV+e5B%`CBCjHlZ7QuvL_t(|ob8=~x~r%Tg(bZIJD;Q2U9v(+Q?zPb|J=FXq@uzS zkOX8;k(V%kXnXJc*&8?tdUi@sB?oQ9OCQazy@6>{QCo)W|Cj3ufXC5}=GQP@;C`p* z+1?X!YvA_vGwv}Yk;UCXGq`*;Q7-y@$t@*nfivG zgxFMm>_}84SVpp40i2M?*_(hJ+3AsI8Oc@x2sQyvfQ|iad;%W?SmFb(>ZhFb6;pC% z8@HZqO;AUN{rRW>;EvADYS;VNL4b6m0E>IRWfSkj%lz)r8%(K-oI_b|%mGV0( zof#uQv=5NQf0IxHNCNu^lbQoR0ZxkwbCw+e zM5Tw7qPm14qI!h`YJe|*XaUsRZz`RJ7ChKUtU;Ktu#E-x#$7kR1hB8f3Rd=o(N=wAE`*H-TU$Xzrij zL&@z0fAE?_T!6aMTKWLBXUWp5z5N=@YcE^d#|vNt0RdE#(fbvws|%iXw%-q^_5Zlv z!LR_Ja9OVb7xVIr21jmCO7ckFEi$T$=p zTy5hGgw6(LZ#cWR7vS4`JHMyXhXUMQfG;nSfA#h={5sy&T3hpN!Clw{LNVzr?su{p zaQh}e0q!n?`hcHl0=CoBpVu#THQP9Qlb8Pd9?6d#7@n^=^?7}-u#G?8Z+Y2vE=OdVdVv{Y%m24=GDGy*Ssie~7uYf45nE zJT8Fxc++Ii5x_41-p_8A*FS$}0oI+IUf&P|zykXPFoO4+Oi+NbQn)@I6ab^vo&cC( z)26*9WZQVR#$l6c?Jn2r1Z^K<3KSFocYJi7nAb!+0rC3YeupT4`CH~22oUS_oht4M zV7AvA90%avc8m&O+H`iFxZB2qe{UJD2EY>z_W`)6DLzrOTbrQvj+^U)pkDgj1;Fp? zu??9vWondj++5#O(Y|eVw*$MeZgB#;FTmkL-7#Mv%?jM00oxy z4+y*}u=xWDP~hUPD*@CGrxzf>Ztf^R`Dn4Wb%?FFt6G2@6F_@=zH`+*Za%X{0rYp9 z%Rohamnl$SfhJM@9>9PAi@?tWS)c9>m3>?K0>A_Kz}9_$z?aRX59kOWI!1-=ZnS`2 zd}4b6u+!5mXu>ajZ4=Pn3_{xokQcH8XU$2!xsxmi7=LpI0d%9qK4Ga5y(W#?DX>M8elr*`4Lrh2tSPA;Kdu9 z_=eqGeo%m{-=eF(ZtQv>r3HWs;@$v__=Fw@*mwro`@RM}Y?F!YeuDQJwGS5{y8Fq` z2@p7SAAcyo##QQS_Td>g+CDr3N8A1a1~c#&ogMBwC!_wpw*bTJWbM0;v6&!O0N0t> z*0wWIMgY%wh)tKros+HY+^-Qv0MDQH*6^6w;r`s;7oK=f0Gyq5s^}X6^aYI;(5b?B z+?&q7U=s*Fpy2w0VFAVi6#JeZ7QpK@z4ZZJ`hR$@ZSt4&apx@s0^o6Xem=TBz)Npz zXFY+HRvkxDM9c>?;fun75dycMx+uPF=Nq>S2Q-EUy7On`nj-0kBP!+znYG2Mad&qRKrdarqX6(t&!iY%!V(Li?Y?5f?jNAn?;8QO&XDovy^pCk zjwcvr4pwtVy{A$4HoAgibo#pyvC^Ml>@NV0f8_@Q9^o2ln`pNa42P&3|K4A76pJVL z`Ew&o`Zb9Db2J`c6gF+JA8%;H1G@19KYxAyKf`B#!y`c(mUhD2JKJW_RK^klqXL)} z9Ju1++v5uQ|0G6+Iuf56i&fFnfdWKVdHtLKdv{W&!w9hPP}NLCoDJN0Dei2c8r(TRaXLnu00p?b08SrZ=kvY!{r>UO;f(~}Sby)OKeqtL z?M8yg?FArrBmXgGN3XZ_{Xey@Ab^_A+}d7lSWg(YGK9xl>30(#Et_-wjn=ld8ww>g zf10zNQO|!rd`kdP8}R-AuQ_`?+e@Eof4foOrd=y&1X5dYiY~yCwmM&1C4H|3mi#_v z8izCGi9hC=eDnV}V_}I)6$J zq;I1DkK<-@v_^*T301dW1*ooP1;Fbq(|fg@)%BAnn99%c7aEos`{4QxaJLvKGKLvFK|q2VaAFAK9GO zT|ku$uR(oWz19{nB}q?!dIqy%wkzL>~U!e|O5~(r_0A z+|87&0KF%SHAV}tx=N>M0uBG#)PNKeK$HNFkj7tnzoNNDj5n%qYE>JCils-UIr>6zcf4Amf-teDu>oxfLEdcQZ6HyYW1v#9s zKfP7~^+fe+P`jTG@Ahdg4;MI(0C9g>72pvaxa>fPlhF-Ulkg21f5^_HB(#L^tZ`ha|Q=8-oA3^B)9)5l9Coo4_1u#{pmQ<%t(kNi{OZu-qoY6Hs z?DcGt-tkfzUBaFKDVZ9i??0Ee^TYqs6C{B8=n0_pZ(Of&Mo)nG0x2Ls<67$ea}9t# zL2Y2-JAZ z^+(Gm*B9)^2OLal z8{feQLGS#=Fuh?Ae@{KgsJ3qXmn2H?;V{Cg~rwY9*@ zwe)1Dx}{5nI6_1e2@4qf$Rrpn-QOjL$c22mhc606zH3C;S4 z<-c(1f2(I(0Vef`*V$w64ql({)c}Jj5PB~jUKa$;qVZNSxtQtGSbioQPr)bN=p)_; zQB{KCDc)PiYtlCT1oQ7vSIKx=7*WINY+MneC2;~M&Gen?rSeZl0H=n;abk+I;=NAQ zvrWXrtU!vzH@5eVrQ7FB*l9KW^^Wakcr?C283?%({{TQahIf7vu9^S<002ovPDHLk FV1ia9M`&97m+!2M3q zv%M$e*1*pT00lBlB4&SIfM}aFPZTp0v%fFEa3659CLnH&_;~>&)?^NT4SH`0?=53T zR*s#$k=dXf&0oeo#jy?HkrgO<{gGhwf~fG-1t52SBdBU0B)let zpa4gQ*k*;KR%vem!cD*ly6)Zt=E9FPfz)jR*@Uc|u|5V}2SaolLSS>N8fXG20Mvk} zH)g#d#WDAMqW}X*n0V~H9%C6GbC^Y@ce0<_}H>!roQ1j zAvTpCI}%k1mXT~%04F4J_9kFQc6#JlMzWOvf=$2^U}t|DpTHXdmiWM{`YC69#gv@c z#=U1-6V%aRe?BSzxTCYP+VwsT5FmY1fWoXna5*L=^Sk zM+Fdw()#0oo&D{lm(J>VHy(htc@0PV00>a{0-XId7=8=b`%{3P0ECQ@GgiWzfdVw! zWZ?YEK>>CUU>>YqR)CWEjsWQ10l7?0|BwL1{|pGQo^WLW%KwYK%(K-oI_b|%mGV0( zof#uQv=5NQf0IxHNCJBclbQoR0Z)_K1402ElN|&Ye|rnyH37XKy_8SesV>kwbCw+e zM5Tw7qPm14qI!id)Bs-q(E_Ns-&8scEr4n=_7fd=AgaclLI5KO2vGM+%^CoGMxDP_ ze(GLfe*sco01^FW77##0f3h$yfQSfSzA;G}T zgJA(c;j&%>F6ar6wVgUmV00vi;K`0^D5yZ-2qPIh_FB{(=YG?_>hp{xx`a0SM9LKi;!14+Y5jbNW_+@wlF_zc?8_ zr^m0$bD5db0;uWIi(?DiwExC)f9B5!03TBu0r2?MKfXrN1L@l+z{vt#?<0?|$=3qO zf1`Y8V-5Hf0Zf&L&+Av)^Z`H91Z=0LKd)cxYPNCqCNKT@J(3?gFg#y#>htGcKSj#yy70HzK1n@msuo1dTn7`65Uzzo|q>NFwS#=AAnHYw8y zb_Kvb#(Y>1765PPJTb3{cmmq%$KC??x6JntAlBn^+z0rWP%zH`+*Za%X{0rYp9%fLf@mnl$SfhJM@9>9PA zN&iKL3@eTOp|U&l?h619;0;^%0Rmq(mp-5)fan-ihMkh51@z(*`wM`bo^C-Ce(7tQ zfc_TRZtw4f>@Wb+PrthWf7t2a_6`|-X!HSUOAx&^d&4<%BT#+s^8f*Kqs2a9sS&*< zko9W^*P3r|mmL8PZUW6tFTbt%m zI%WM9o$zaa+)y&Z1#xeHMtnk#18jT%f9+#mgC4fY#CAWy zdyU#(7a+R($U@!xZ(b-{hTz`H)=SdWnH}!W{WS`(s{nR= zfhPdY&N^*og8+R&f1?68RTz)^i>%Jp1jK6s!3Pvve=sb-4gm^BfLQ*b`E}>#z1Ltg zy(hqi^#e&CcivLC$P3+1Z+fpO zOaXSbr%3v7@5{soaOCD?xPQKPys;X6(&;zM42{^0aTkNklh8?J(3C}e-mGrBI(aCatqmZUZVdR^wNL5Kw;Z_q2i1K zob=@OV1@X475{*(exm?)69AU`PcSU_eg+R00G3{UT>!`3JwO1xboGt`z&AaU!dqYO zFHwnw(EPc>okMoGe%}bNcZQ5V?|mG-b3DN~bFiA*tpPi`x6u_GqtoAwh?V{Xf8%%o za4bI<@CesX+eEvaU^qnO`1k&rqgXt_&z~D%(yu{WtsadB7==w6?8h4#@qlhT!Ovgc z|IhH*-|$G#hNZoUj$>`JXewg~fl&d>3J%;s;?v^_`u`+GhB^|T8jDrY(}4m+S9$%M z07rLHr^5)a^H9}HM4S!$o1t-MeQLlm>s>|-uHjkzJdU1I&*J( zxnVtF+{zFhZ>2v>fV6DR^*37E+iob7)ck4AdPY6}{qQLPL~X$L|6ghOf8zYL?WNDP z-6(L=t`#%_sVz7~7hp+Sov*EuzE=ZFexI`qOW~@|P1F40rM7K)k(c(PK+giA0C?P_ zcLbQTSA8K}GVmN8rzD;L0tLbXXDqO5SLaXZf%I(@;Bnk+j@HN!KB4+^;gXr^dR73u z-ZH&c+gV*dd4j3@%=71Ef5v?MK_2Bp8*9KL!?0hT$?%-CN^b;^$A6mzSf)2$3!Kyw zZa#oI2d2tD1ktwX1A0xMRQiW4YpZ)DfTW%Pl5*+9WUDRf|F)%Xbb6we5Ug8VR)UD= z<9fTewMy2Vo|4E4khK7|iA7&?IrtjX`^e_J?gFZ8cn#{~>b16reH+L(H{Zh|F}oI^i1`%su|HyEs|^)P>Sq*UHJ)}}cPPxq*u$UzEkRrMtMr%S z_5zTrv$e_|=8u1y9QUVZYTrSwEkJajv6la7ufv4v3gG(J+J0037z+1lj2cK4qjI0V zjOQ$%{Z|2AjuhAJf7NS&YC+`T&wZwRE)924z}-yQ3ebDPSYxyRtE+UHCeZM&O$|sv z0YnM#2xh!cA`tR0!nGODPZoLLyzXc$kU?NH)wIE+7>`$*%Ks{0Y7#h^>=fk^w+RFvbBS74r zRt0!O2QE7hB9rkAE0f?2Jd@xJ34d}hDM@WC$m`_4M_2%T`1)$863EKd^bH%6V``H; z;UfrL-@~uZ{RHM{s{p17)spJ;Ng4&Leo6n;hcmjShrOOn(mP&Cqf6KmASF|S^!?}3 zc7FJOdV&N{A3XuI{*CK3&gcm+UmyhpXk1I(f35-0hiCzeLU1oApy{$ufPen=F#k65 zbN-VI37}3#Jxhjb0c?U!3$p^~3OE;D>S43=}A{%(?XOjrOm!G**4GwZ%mnpcNLKhg(C0)ZN@x&BM9mB-%c=K5n-w-@lTJ9v9S z2qA==ncd?L$+?5?&_{3Bb$_tYna1q3?ho#zn;uS1_yY{RjPKI%E$m3x1^~KQg!7l7 zJR}CejC+X#Y3+?R#_9>jnmW6abk1L$x0eDmLu?r05EKvMDRSK-`v2vGe zBY2I;pyQr~1z3jiD#Lg^CBRagP7_+LH{k=LjIM%-+!p`qL0@Z!tjBV zCRNoKa332F00mG2muqdW0$89{mBSp@$(v0^B^T8T33dWYw7~fLb@{A2JasbEtfD>O z{Bn!x{^oKfykP|C9bYA=bI^z@D;50gw9r<<=jsy797e?)>**8v+)&7mFP~UmcjnZ z6y`V-0DS?kfH?VS&TpInz5tXMYXA-{!N11>Sz8OdTuV=es{5lau>2DXh-3ZQcYyO- z<<}Wntk>RMbLgrkGgStcW1=#oGKd1nl32}lPH5IYEdRo(uYaCx1(?($UT2TNJ9vG* zR|5>DKmA$8@MwI45EybN{sBb>g=bUT=~e&$002ovPDHLkV1mVsaPLYNU05R@qp0#P9ik}wkp$-}Pus@{iJ_kO(}?*8)MtJbbvYyWDkwRi2` zh&Cr>Ww0^;0LY#`b=)2R!1XBvNK34X^KtX{>jH+_pEL(vcc^mLjg3TW#}nzTVq;_D z{{DWkSWISzZU+E`?9<2193vn7aQhUWzjveJvN)FR!VK;EK=f2%78?xQS2I(yBy3JU z*#4yeJXrd`qTsF{-*!W0(40mr{Uc?5?KDscvh7FX37S!+ZiNmE!&cs7-cUAz0c8Q@ z?jmWqKH&T)WP53|gDihmN)WLEhisV($*RZSSCN6a$xox@6#!%^ZkIgu8Y4i1gHkAX ztEDWhsLe)Q7HvJ!vR>-J^7 zkRTn*_m%jgq@=`Or7F`bR-KjNGx@bu5Q-Ffh8OkblC%B!zzbxE@*~fbOoST9P*HHk(QT$Nx(tYhM+Ot`2_dC zVa({&SagPB7gg4ldYdYl;Rl5eNj`xbZy2AEa#BjLgJpg{vF00%Qfx~TRrW{`8NbR^ zL5C?Xo{Hw>X8sfOYq4Jkzy80{?PE8xvrQOu}JPAUL;3Y-NCuyXkwuzrTVGEyG8x&Qsvqx2E0Wl4%mI%G|9SM!mR zgnxT5i6pv#GP2k3F2H3x#_M>F6K`e*qCYBZ($#BNhp^{dTqg$bgZrdDXX2b{PXjN& z$3Qk&q7B>lr`EOGO$DI80Ph4Zgm|_3-fp^va;$nb#*t(|`lQrNak=)u*8=ESZmt`X zHOze^+m3uu{0PSW8wqiC9&D2Jey%jVGf>nUVDtuEUdv&522_|nm*U$$EI$~0LFrU% zJ}~@k*&J-UW;l;&7#z~(q78E92Jgub5F1jtnv91dAJhvmyK4oR7xoVhUucsinRDw1%+1zASe$3$Cs?jqWgxR2=>tHor+3cNL2D#dDw6` zE_1t>?{&TP`vG^HSrqDXb9QS$&nR*QGFI6wG=p!T)XUC(Eq=_#j4*8Pjm&$SDo;%7 zTp}e9+1O~=b3PK+JD?=LzWIJz)n14rg<25E{C;ffv^>g0WXHy~;)K7nN2Qu@r$;I^^mGT#2m<#xRD-{N>dw zYXCJO##&ohRh89L^~_C+BdkDsSdo1ZV)SR|S%2ZjrDxdykMb=*VjAmKa@H9@_)xVy ziTenD$p;NAq4_exaEOgAB+{!)nG4brM5!NBP?({naMnh_G;bUk)!6PRu-&~LtMj0g z@}ft`Q`4-JnmzF<@g z2(BOrq13FsWD0jma&!&}^jU!i`y@}nDdF*I;OhnK6q0}td4t{E-KNaXS?T{S8~>TG zeyIBEJ7@!#tL*KHI{*nn^zi=r`G7Xf>7Txm9$nyuopv@GgG)PGvR@>K?~byxB@lz)2P%D33GFHyr~7D~u7Y z1V!J_*-vc?yriOfB?`BaJhPycU%`|l0<6Y6rWfk=;-bgy*f1ALmD=TnHRZ=00U@1k zruJlQ?b6+h+dmy1l~py_wQFP|oG(jT$MZUHE{iCPVtUog1+MtxJWLd>SXKb)HlQbD zoLQTF2GAjOP04SjA^2JO9wyf=r9wq>x)E9mR64_pH$M&y#eS#`oXh+p(l|!K*O)-7}2EJjHHr(j3j&r6E=DXT5d z;|OSQ4^8xn6|qzX6Md3eI^MskbB(a;fnOuosrEESqhmPn)>*8JG(JpCSYuDoTan=J&$*e@1 zsOzAf?GP=NGu{wP#uOQ<8H;q2Rpg*h-6Pn0Z^T-MBh#}-UJ1URudyF!(rE50bduP6 zZ^<2u6h!YIv#2$ih_M^Hn%(X>=Os&#i|k>}u{`>Z$dF?7ETJ6z!y29@{l{)L@8&?p zXEaq6j+lHk2s$K0ynhC~#`BPDp(<hC5?JIsd9 z2Jjictw+6#aBWU+(RDgB7t$H&|eU;8kQ1Z@~vflum}#vkxxQH z{uc>A^b<#kqBeQ|*2{TI)$nVeba2iN_KR)c0ARIYhk<)~Y@If#I6B|drLLquF;V!;3YxxYO>RirJhq&erMW1Fi)blS`7j9lhEdz+P?pALt{Bg`M+P zubM3(yMdXK4Mc8%KbK;e83@orKm=L+xpfksEx$mM0?G9K+bMa-d%bg z_|x3wbfCx{hZs`bga4~R*OBG3!`Jzb`yZA~;#n|YigMU5MhQHK? z)^sTE0D~~QLC~b{&{FLeV8Y@R@JwL{C3DJ6Nk(`5z2GxzB+9ixy4##Q#-o)(lteR> z7Z`x3-a?;676+;NA1?Rkk>t;N=IfR!Buv(PGz~QO_bn5=Yzlt}@7jt1UUhSq;UD@c zbo3O`$WXxj)TRz{(rmi2l|`W2ZaYmuy3* zbs^CVy|#}tYN-mT9X!{Y5>RJh%U8i-@$BCS0t?b{v!~0vZYkb`T1zR~n9cw?z}{E1 zMC<77?+qP!nW2A&C*7rdWHw;?MPMnESbbSz3jfiJO9bW-)zH{i?Z=%^x(=|b84Fuj z@p;9B)B?t2>D0v+@9-z?vs&$~g9Y z@Gc8At2kC9N^&4e3~h4POIy~XZe-QX4n4vWED`3sCjCMbdtn$qwuj}?>f61Bg>8j`Z#YYqlI3TLiOTs#r_+ysUyQ`;sBa=81%RX6^Sx0q z_(qz^S$T&>+Br>Gj>=BP3@gMfv9G}t7ha=@T}`Uz@wf{}2C};o|@R literal 4433 zcmeI0S5%Yfx5mFO1xNydBE2dOAcBC3bP^On0g(X}L`nn(kgk+uNFW~_Mw+7s86glx ztSCj0CV?PL9BCp_1QK9|A|*&mC`tZ!&h1(2f6m>xIPcB#?tSrIJZtagx7M5P=wKs; zmPZ2sAa>!rl@kDfdsi4B0^buit214D0!BF5oB_&u6zBH}QAhjB=W^Z)jEszihld3M zffp;{FaSubU9hseOe|RP=uars5bFM+U)=n~#xZq&4x(frl8_HR zFv&l==Ki7uD;M0*P2q2yZXMxhfOA5ST`~q1KerW0w+3e&;yC14zBV8|2P5vA$!3L% zg-ab@NfOc@1av7mVUNV;T=Z3j4(&$NmjQWMMjto`FbCJ{yjn3NoUy6j1oUg&LH?<} zzcmKz$Y+=(U>$(a#G(mAf=r&i$FB5>$%VEfxOUHxmXi~z#3oWK8AIHvykJZut0oz8 ztK%Kr+(zk{h|Be^@u{*fORwr9b*jk#3l4s#$Co?&z!npBJuj{bM7$n z#Ht8YhZQf<@2hvrH}&=nkcB&C^-~yZIOUQIqxG|J<~gD~@kHGr23`_cO9!Oi--^~` zoR}$WZbFHo=jbV^^e#1+s6qT_80=?I>s&z!T>D;&CJx#4C;wCv68(=2Wqcm4$vTnZ z0s4hMd&FNCPg1wq>h~g;SZYudF9|irs9siZzJ7PjOTsHp&m0cBdGn^=E2d*&=6%4^ zn8moNRR2U9%$%gW86{ghgGUi^2^XXRx~|`EAZY8ZNnO;m=h1q~(yT=(8F%>h(Ar`9 zkExyfos+pcu~#IGPRIozTsQP!vgdZy^|HF}63L)%>KUp)mGS(ds=NwR>oiPJk)};uzj5=B zIheq2&JH=2xy_dK62a)5En1l`Z>a+=?z%$N)zzfyr2{CRMPFI0ncycf%m{fN6wnxbZl>nsdP->7Br%DZX^lE&s3>1iKMtyEqddWNj z3_?vnkr(`feA^54*ayE99>v`VVz}|erSY+2V>6sOChF?jlBsD#z`?p?70Em;ByK_r z_hS~8#;HAn6$Oy|U#Mr5|3;oZemp*g_X`Y+{9O`%?;q8|qRv^;;iQ%mm3;U zDewkC1f%PUts$8U zM`^O20ij|QDu|b*tztC@%7BU?co2AUPk~CK2FEr7n^jMu;+P_O_i#J#Om!SAG6;y1 zjI056&6}j~zcRRYo%9nRoE`Nz2`o?tuDsy=F=mIPZS0V^Y}6kLZW;4I`vwrw=lGLM zsl#t;p(Vt;j-x-{%CBhOr9K(P2yPMuY8@vIyWC}NASlG^R&VTzx;5b4JY;u}1lm2Z zyyaUk4YwoS6a826$m%#cLq+@Z1p0tVE6);&13kb`pFS;zJfgmrpJM#HwArnX&j9bskA1NY;6Z)zt%GY=kp(2gO>}_iJUpNdp(L*f)VtYrOko32UQ2*Pp0~5J+fi+` z2rdk%{nD1_m6p2H7sC&erqStqDk9+HVxQBOa%qSni>m2KXzymK1HDT>$G;_|KmT6Q zKj!)9gN(b0DUKThV{AA&oRJTx&W;F@2+NgR-e!FFLY|Z}NcUD>Ee| zQvRE(&#YEzYGoGreqng_N?UmsVIYVbGnORA)IjJt??zeWHtuc0HH9RR%X)k56)7ZZ~Cg*duBr43!{g*y9uUudB(zs3S@X;o=dwqxV2qr z0T}uyNJAWjMM8}5b{c=9?l(yaiQ}}jeVVPrDmt?D7AJWKXFTkQl9>6EP#fX zL%oiv0Tis;PctQJ(Xr!^1QOO(MT!*)FaEEzxJNRcPzsE0$l-r*$P07yBePp4rj1Ty zg!qzw1<@I1TB7X%(^IU_J4&k;sc+B8X70C?k_@X~th@h*SJ=dw>!2bJ-NPdg!-eP_^?T=(E*r4ayH5_Ds zINO31ciVY%Md-yQyHxd=Esi2&d_df2zw>`|I=mh&qTxYW3NC%0RmL`~G3KPf%hd(G z(9W(S+-?8iwL1q5v~cz`YX$Rq6zjTgi#hm$2ZB3qEURoe)51xUI(WlQY_T=#I*cRm zvf~oa9l&=3S4$wnCP%<-6J8Zy2iH~}2n zBKd#&t7v?qV`g@HXJQ-PC;&N?*g+|2h;EE#SaGekP9qo^e}DXP`f5(zZqJyPk2d8s zP&rRx7H#HMQ~>&dMsGxyWHkl5s^bo>q??AQH>!GHhUV6P&0+6P&Y}oZ&;46_`6jV14Z(}TmJEiR*hO~HfHEu_#oASb3@N=>71pUryx2IZ#;A!#nTTz&v$LRJ`$x1?yggz_RU>rO8x=aLMDxylamJ>MlR!po6m>0|Xf; zB}+z?>(m%q7Jdj6GQ<(j0B^T*JA3pgg#+eZhfN5?+ihs+pen#$(wk#^x;`eREzlWH zc;~ygt^xHphl8zik>+9Ciu(e4P?3}Co$zQutU&$)=c#%i)-nyvI+rAGY7sep?cs9t z6slk9@Tu$y5&k~k5!ppDx~|RsMiHu37}*M3Sllb+5geHP!|ve< z8{!?q=tK6x@6;;8BvsvL{)qZqpiu=E@NyaT=>z2^XidG_TMFt$qA?O1J;yZw#k3Ci zp9|n;suNM2`%Ft+kLT3Vw>ISkm4wA=iXdu_^yt6MDGQGSe8RZN^@k_WL=U?%h=8 z5k5a9Z_Csiy?)rbo_M+&kf4Q91S`Rln_FZT=%?DFxMUc3JSj-{Qg!kXG(+b}X`eG} znD=F6N|o`q*^L80PwiIi_=Jf8Y~U#N$&ef-VADkntdWwGFy!3i z(cg;@0mj^W24;ZEv6*ch5IvZ;>IiM5U*55DXkR!P>s}~S*r3}VCh zw^WsWIyVcUPkucfr@0r_xzd#w#JM;8Do;pbceao%VNeh7hezd1Rl-$B(I7~sjG|fG z&N^e+eN>rh)7v1pNTzwgw_ykO)w#O9Di243eIAR}?(bmQkIx~aSL9)lypWflW5K}6 ziJ8sjD<$q1AUNNE+p8!}^A(jH(ehruk6FnO*q66tkv#h89(=l!%8&Y7L18UMg!bku zCMP%diNXJpIL?GK{}Vd>0N5Up4GsVQ`Tri||L4rf%@w+8JDxcBZF-UEe*+9&oh|*v z){(Llz!&OR%*%f*Lq-%YkYEj-hF7`ueL= zHA&{6ZLz#ByZL@i1Z#F3CP%Y~fw}S&hJp(ECGqt*lt^D)ZoR+>P7|+$<(vuE)l`kT zril~8yf5m~-L+FXz$nOy2~Fa_!c!bDK437?9qqN1cvJ@xD2+6+!0&u)D8D~5Slpkz4!(hKnM3Y^$3s)YrqnWQbW{^$ zLs;3|GylhNsTr6SZ?8{e_t}IEM^*IyVIA{oCy_KilX?%M3>C|49amx|*t}B&=A4q& zhKkL6g<9Uz+v2M?tQCAV5_~S&5nfQ&DAd|i*r~I@vQy7ARka+WpL)k%yJc^H-figY z@R+h*8BU{37p5RxQ&&^;JbOhdq@NBXeOb83W$5gSI<}kSHle;^$d7yU!6m;*BWW_R z!Qi<^<{q=Z1CD^&O7yGgD*)#6i`(ysMf4G0`^~_Z;@_wYc^y>>#mgc(_36H1KdB|T zg645=0;NGQ+3`2?n_^#* z|I-4}vA?s(zbm;ONqz*})*0(+KbEfxaM6qA#Z`l~8)F2m8PR_fV5h9J%<@I#7`(-U z<-v)(RAWsgG}HvS;0kuz)~*4oNLrgKJUjr!H5{mcGi>+rV2To`SEwKCV1Mi9#-Zmid56`jVb2wqs$dT%YvD6pIojqj-dhi$16RJKHBmhVLQL$#regionMapSectionId, 0); StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMap); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Util_Warp_SelectMap; } @@ -2033,7 +2033,7 @@ static void DebugAction_Util_Warp_SelectMap(u8 taskId) GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].tMapGroup, gTasks[taskId].tInput)->regionMapSectionId, 0); StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMap); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -2045,7 +2045,7 @@ static void DebugAction_Util_Warp_SelectMap(u8 taskId) StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectWarp); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Util_Warp_SelectWarp; } else if (JOY_NEW(B_BUTTON)) @@ -2076,7 +2076,7 @@ static void DebugAction_Util_Warp_SelectWarp(u8 taskId) StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectWarp); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -2236,7 +2236,7 @@ static void DebugAction_Util_Weather(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar1, sWeatherNames[0], CHAR_SPACE, 30); StringExpandPlaceholders(gStringVar4, sDebugText_Util_Weather_ID); - AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Util_Weather_SelectId; gTasks[taskId].tSubWindowId = windowId; @@ -2282,7 +2282,7 @@ static void DebugAction_Util_Weather_SelectId(u8 taskId) StringCopyPadded(gStringVar1, sDebugText_WeatherNotDefined, CHAR_SPACE, 30); StringExpandPlaceholders(gStringVar4, sDebugText_Util_Weather_ID); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -2445,7 +2445,7 @@ static void DebugAction_FlagsVars_Flags(u8 taskId) StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); StringCopy(gStringVar3, gText_DigitIndicator[0]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Flag); - AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_FlagsVars_FlagsSelect; gTasks[taskId].tSubWindowId = windowId; @@ -2506,7 +2506,7 @@ static void DebugAction_FlagsVars_FlagsSelect(u8 taskId) StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Flag); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } } @@ -2534,7 +2534,7 @@ static void DebugAction_FlagsVars_Vars(u8 taskId) StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar2, gText_DigitIndicator[0]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Variable); - AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_FlagsVars_Select; gTasks[taskId].tSubWindowId = windowId; @@ -2586,7 +2586,7 @@ static void DebugAction_FlagsVars_Select(u8 taskId) //Combine str's to full window string StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Variable); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -2606,7 +2606,7 @@ static void DebugAction_FlagsVars_Select(u8 taskId) StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_VariableValueSet); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].data[6] = gTasks[taskId].data[5]; //New value selector gTasks[taskId].func = DebugAction_FlagsVars_SetValue; @@ -2674,7 +2674,7 @@ static void DebugAction_FlagsVars_SetValue(u8 taskId) StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_VariableValueSet); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } } @@ -2960,10 +2960,11 @@ static void DebugAction_Give_Item(u8 taskId) // Display initial item StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); - CopyItemName(1, gStringVar1); + u8* end = CopyItemName(1, gStringVar1); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(windowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemID); - AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Item_SelectId; gTasks[taskId].tSubWindowId = windowId; @@ -3005,11 +3006,12 @@ static void DebugAction_Give_Item_SelectId(u8 taskId) } StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); - CopyItemName(gTasks[taskId].tInput, gStringVar1); + u8* end = CopyItemName(gTasks[taskId].tInput, gStringVar1); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(gTasks[taskId].tSubWindowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringExpandPlaceholders(gStringVar4, sDebugText_ItemID); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon @@ -3031,7 +3033,7 @@ static void DebugAction_Give_Item_SelectId(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemQuantity); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Item_SelectQuantity; } @@ -3082,7 +3084,7 @@ static void DebugAction_Give_Item_SelectQuantity(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemQuantity); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -3158,11 +3160,12 @@ static void DebugAction_Give_PokemonSimple(u8 taskId) // Display initial Pokémon StringCopy(gStringVar2, gText_DigitIndicator[0]); - ConvertIntToDecimalStringN(gStringVar3, sDebugMonData->species, STR_CONV_MODE_LEADING_ZEROS, 3); - StringCopy(gStringVar1, GetSpeciesName(sDebugMonData->species)); + ConvertIntToDecimalStringN(gStringVar3, sDebugMonData->species, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); + u8 *end = StringCopy(gStringVar1, GetSpeciesName(sDebugMonData->species)); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(windowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); //Set task data gTasks[taskId].func = DebugAction_Give_Pokemon_SelectId; @@ -3198,11 +3201,12 @@ static void DebugAction_Give_PokemonComplex(u8 taskId) // Display initial Pokémon StringCopy(gStringVar2, gText_DigitIndicator[0]); - ConvertIntToDecimalStringN(gStringVar3, sDebugMonData->species, STR_CONV_MODE_LEADING_ZEROS, 4); - StringCopy(gStringVar1, GetSpeciesName(sDebugMonData->species)); + ConvertIntToDecimalStringN(gStringVar3, sDebugMonData->species, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); + u8 *end = StringCopy(gStringVar1, GetSpeciesName(sDebugMonData->species)); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(windowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectId; gTasks[taskId].tSubWindowId = windowId; @@ -3247,11 +3251,12 @@ static void DebugAction_Give_Pokemon_SelectId(u8 taskId) } StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); - StringCopy(gStringVar1, GetSpeciesName(gTasks[taskId].tInput)); //CopyItemName(gTasks[taskId].tInput, gStringVar1); + u8 *end = StringCopy(gStringVar1, GetSpeciesName(gTasks[taskId].tInput)); //CopyItemName(gTasks[taskId].tInput, gStringVar1); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(gTasks[taskId].tSubWindowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 4); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); FreeMonIconPalettes(); @@ -3270,7 +3275,7 @@ static void DebugAction_Give_Pokemon_SelectId(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonLevel); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectLevel; } @@ -3317,7 +3322,7 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonLevel); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -3343,7 +3348,7 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonShiny); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectShiny; } @@ -3371,7 +3376,7 @@ static void DebugAction_Give_Pokemon_SelectShiny(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 0); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonShiny); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -3385,7 +3390,7 @@ static void DebugAction_Give_Pokemon_SelectShiny(u8 taskId) StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar1, gNaturesInfo[0].name); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonNature); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectNature; } @@ -3421,7 +3426,7 @@ static void DebugAction_Give_Pokemon_SelectNature(u8 taskId) StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar1, gNaturesInfo[gTasks[taskId].tInput].name); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonNature); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -3435,9 +3440,10 @@ static void DebugAction_Give_Pokemon_SelectNature(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); abilityId = GetAbilityBySpecies(sDebugMonData->species, 0); - StringCopy(gStringVar1, gAbilitiesInfo[abilityId].name); + u8 *end = StringCopy(gStringVar1, gAbilitiesInfo[abilityId].name); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(gTasks[taskId].tSubWindowId)); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonAbility); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectAbility; } @@ -3480,9 +3486,10 @@ static void DebugAction_Give_Pokemon_SelectAbility(u8 taskId) StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringCopy(gStringVar1, gAbilitiesInfo[abilityId].name); + u8 *end = StringCopy(gStringVar1, gAbilitiesInfo[abilityId].name); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(gTasks[taskId].tSubWindowId)); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonAbility); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -3495,7 +3502,7 @@ static void DebugAction_Give_Pokemon_SelectAbility(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_IV_HP); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectIVs; } @@ -3560,7 +3567,7 @@ static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpDefense); break; } - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } //If A or B button @@ -3619,7 +3626,7 @@ static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpDefense); break; } - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectIVs; } @@ -3633,7 +3640,7 @@ static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_EV_HP); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectEVs; } } @@ -3710,7 +3717,7 @@ static void DebugAction_Give_Pokemon_SelectEVs(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_EV_SpDefense); break; } - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } //If A or B button @@ -3769,7 +3776,7 @@ static void DebugAction_Give_Pokemon_SelectEVs(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_EV_SpDefense); break; } - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectEVs; } @@ -3793,18 +3800,19 @@ static void DebugAction_Give_Pokemon_SelectEVs(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_EV_HP); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectEVs; } else { StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); - StringCopy(gStringVar1, GetMoveName(gTasks[taskId].tInput)); + u8 *end = StringCopy(gStringVar1, GetMoveName(gTasks[taskId].tInput)); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(gTasks[taskId].tSubWindowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_0); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_Move; } @@ -3848,7 +3856,8 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) } StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); - StringCopy(gStringVar1, GetMoveName(gTasks[taskId].tInput)); + u8 *end = StringCopy(gStringVar1, GetMoveName(gTasks[taskId].tInput)); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(gTasks[taskId].tSubWindowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); switch (gTasks[taskId].tIterator) @@ -3866,7 +3875,7 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_3); break; } - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -3900,7 +3909,8 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) gTasks[taskId].tDigit = 0; StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); - StringCopy(gStringVar1, GetMoveName(gTasks[taskId].tInput)); + u8 *end = StringCopy(gStringVar1, GetMoveName(gTasks[taskId].tInput)); + WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(gTasks[taskId].tSubWindowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); switch (gTasks[taskId].tIterator) @@ -3918,7 +3928,7 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_3); break; } - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_Move; } @@ -4271,7 +4281,7 @@ static void DebugAction_Sound_SE(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringCopyPadded(gStringVar1, sSENames[0], CHAR_SPACE, 35); StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SFX_ID); - AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); StopMapMusic(); //Stop map music to better hear sounds @@ -4313,7 +4323,7 @@ static void DebugAction_Sound_SE_SelectId(u8 taskId) StringCopyPadded(gStringVar1, sSENames[gTasks[taskId].tInput-1], CHAR_SPACE, 35); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SFX_ID); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) @@ -4353,7 +4363,7 @@ static void DebugAction_Sound_MUS(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, START_MUS, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringCopyPadded(gStringVar1, sBGMNames[0], CHAR_SPACE, 35); StringExpandPlaceholders(gStringVar4, sDebugText_Sound_Music_ID); - AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); StopMapMusic(); //Stop map music to better hear new music @@ -4395,7 +4405,7 @@ static void DebugAction_Sound_MUS_SelectId(u8 taskId) StringCopyPadded(gStringVar1, sBGMNames[gTasks[taskId].tInput-START_MUS], CHAR_SPACE, 35); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringExpandPlaceholders(gStringVar4, sDebugText_Sound_Music_ID); - AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 0, 0, 0, NULL); } if (JOY_NEW(A_BUTTON)) diff --git a/src/fonts.c b/src/fonts.c index fba0dfb7a6..853f6fbde2 100644 --- a/src/fonts.c +++ b/src/fonts.c @@ -185,19 +185,19 @@ ALIGNED(4) const u8 gFontNarrowerLatinGlyphWidths[] = { 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 8, 4, 4, 4, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 5, 8, 6, 6, 3, - 3, 3, 3, 3, 8, 8, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 8, 2, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 5, 5, 4, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3, + 5, 4, 2, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 5, 3, 7, 7, 7, 7, 0, 0, 3, 4, 5, 6, 7, 4, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 3, 5, 3, - 5, 5, 5, 3, 3, 5, 5, 6, 3, 6, 6, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, + 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 2, 4, 2, + 4, 4, 4, 2, 2, 4, 4, 6, 2, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, - 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3, + 2, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3, 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -221,19 +221,19 @@ ALIGNED(4) const u8 gFontSmallNarrowerLatinGlyphWidths[] = { 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 3, 4, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 4, 7, 5, 6, 3, - 3, 3, 3, 3, 8, 0, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 8, 0, 2, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 5, 4, 3, 7, 7, 7, 8, 8, 8, 8, 4, 5, 4, 4, 3, 3, + 5, 4, 2, 7, 7, 7, 8, 8, 8, 8, 4, 7, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 5, 3, 8, 8, 8, 8, 0, 0, 3, 4, 5, 6, 7, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 3, 4, 4, - 5, 5, 5, 3, 3, 5, 5, 5, 4, 5, 5, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, + 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 2, 4, 2, + 4, 4, 4, 2, 2, 4, 4, 8, 2, 8, 5, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 3, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, - 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3, + 2, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 8, 3, 3, 3, 3, 8, 8, 8, 8, 8, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -293,19 +293,19 @@ ALIGNED(4) const u8 gFontShortNarrowerLatinGlyphWidths[] = { 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 8, 4, 4, 4, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 5, 8, 6, 6, 3, - 3, 3, 3, 3, 8, 8, 3, 5, 5, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 10, 8, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, - 5, 5, 4, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3, + 6, 6, 6, 8, 8, 8, 8, 8, 8, 4, 6, 8, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 5, 3, 7, 7, 7, 7, 0, 0, 3, 4, 5, 6, 7, 4, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 3, 5, 3, - 5, 5, 5, 3, 3, 5, 5, 6, 3, 6, 6, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, + 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 5, 4, 5, + 6, 6, 6, 3, 3, 6, 6, 8, 3, 9, 6, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, - 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, diff --git a/src/item_menu.c b/src/item_menu.c index d885f0a8ec..eae1c17eab 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -910,7 +910,7 @@ static void GetItemName(u8 *dest, u16 itemId) { case TMHM_POCKET: end = StringCopy(gStringVar2, GetMoveName(ItemIdToBattleMoveId(itemId))); - PrependFontIdToFit(gStringVar2, end, FONT_NARROW, 73); + PrependFontIdToFit(gStringVar2, end, FONT_NARROW, 61); if (itemId >= ITEM_HM01) { // Get HM number @@ -927,7 +927,7 @@ static void GetItemName(u8 *dest, u16 itemId) case BERRIES_POCKET: ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2); end = CopyItemName(itemId, gStringVar2); - PrependFontIdToFit(gStringVar2, end, FONT_NARROW, 73); + PrependFontIdToFit(gStringVar2, end, FONT_NARROW, 61); StringExpandPlaceholders(dest, gText_NumberItem_TMBerry); break; default: diff --git a/test/text.c b/test/text.c index 17d9ab0ee9..ed343d1039 100644 --- a/test/text.c +++ b/test/text.c @@ -44,7 +44,7 @@ TEST("Move names fit on Battle Screen") TEST("Move names fit on Contest Screen") { u32 i; - const u32 fontId = FONT_NARROWER, widthPx = 61; + const u32 fontId = FONT_NARROWER, widthPx = 59; u32 move = MOVE_NONE; for (i = 1; i < MOVES_COUNT; i++) { @@ -53,7 +53,9 @@ TEST("Move names fit on Contest Screen") // All moves explicitly listed here are too big to fit. switch (move) { + case MOVE_STOMPING_TANTRUM: case MOVE_NATURES_MADNESS: + case MOVE_DOUBLE_IRON_BASH: EXPECT_GT(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); break; default: @@ -65,14 +67,11 @@ TEST("Move names fit on Contest Screen") TEST("Move names fit on TMs & HMs Bag Screen") { u32 i; - const u32 fontId = FONT_NARROWER, widthPx = 63; + const u32 fontId = FONT_NARROWER, widthPx = 61; u32 move = MOVE_NONE; - for (i = 1; i < ITEMS_COUNT; i++) + for (i = 1; i < MOVES_COUNT; i++) { - if (gItemsInfo[i].pocket == POCKET_TM_HM) - { - PARAMETRIZE_LABEL("%S", gMovesInfo[gItemsInfo[i].secondaryId].name) { move = gItemsInfo[i].secondaryId; } - } + PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; } } EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); } @@ -105,7 +104,7 @@ TEST("Item names fit on Bag Screen (list)") { u32 i; const u32 fontId = FONT_NARROWER; - const u32 tmHmBerryWidthPx = 71, restWidthPx = 88; + const u32 tmHmBerryWidthPx = 61, restWidthPx = 88; u32 item = ITEM_NONE; for (i = 1; i < ITEMS_COUNT; i++) { @@ -122,7 +121,7 @@ TEST("Item plural names fit on Bag Screen (left box)") { u32 i; // -6 for the question mark in FONT_NORMAL. - const u32 fontId = FONT_NARROWER, widthPx = 102 - 6; + const u32 fontId = FONT_NARROWER, widthPx = 101 - 6; u32 item = ITEM_NONE; u8 pluralName[ITEM_NAME_PLURAL_LENGTH + 1]; for (i = 1; i < ITEMS_COUNT; i++) @@ -133,6 +132,18 @@ TEST("Item plural names fit on Bag Screen (left box)") EXPECT_LE(GetStringWidth(fontId, pluralName, 0), widthPx); } +TEST("Item names fit on PC Storage (list)") +{ + u32 i; + const u32 fontId = FONT_NARROWER, widthPx = 73; + u32 item = ITEM_NONE; + for (i = 1; i < ITEMS_COUNT; i++) + { + PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } + } + EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx); +} + TEST("Item plural names fit on PC storage (left box)") { u32 i; @@ -151,108 +162,22 @@ TEST("Item plural names fit on PC storage (left box)") TEST("Item names fit on Pokemon Storage System") { u32 i; - const u32 fontId = FONT_SMALL_NARROWER, widthPx = 50; + const u32 fontId = FONT_SMALL_NARROWER, widthPx = 66; u32 item = ITEM_NONE; for (i = 1; i < ITEMS_COUNT; i++) { if (gItemsInfo[i].importance) continue; PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } - // All items explicitly listed here are too big to fit. The ones - // with a hold effect are listed at the bottom in case you want to - // focus on making them fit (they are the most likely to appear on - // the storage system UI, along with anything that could be held - // in the wild). + // All items explicitly listed here are too big to fit. switch (item) { - case ITEM_ENERGY_POWDER: - case ITEM_PEWTER_CRUNCHIES: - case ITEM_RAGE_CANDY_BAR: - case ITEM_LUMIOSE_GALETTE: - case ITEM_HEALTH_FEATHER: - case ITEM_MUSCLE_FEATHER: - case ITEM_RESIST_FEATHER: - case ITEM_GENIUS_FEATHER: - case ITEM_CLEVER_FEATHER: - case ITEM_ABILITY_CAPSULE: - case ITEM_DYNAMAX_CANDY: - case ITEM_MAX_MUSHROOMS: - case ITEM_GOLD_BOTTLE_CAP: - case ITEM_PRETTY_FEATHER: - case ITEM_STRANGE_SOUVENIR: - case ITEM_FOSSILIZED_BIRD: - case ITEM_FOSSILIZED_FISH: - case ITEM_FOSSILIZED_DRAKE: - case ITEM_FOSSILIZED_DINO: - case ITEM_SURPRISE_MULCH: - case ITEM_YELLOW_APRICORN: - case ITEM_GREEN_APRICORN: - case ITEM_WHITE_APRICORN: - case ITEM_BLACK_APRICORN: - case ITEM_THUNDER_STONE: - case ITEM_GALARICA_WREATH: - case ITEM_STRAWBERRY_SWEET: - case ITEM_AUSPICIOUS_ARMOR: - case ITEM_BIG_BAMBOO_SHOOT: - case ITEM_GIMMIGHOUL_COIN: - case ITEM_LEADERS_CREST: - case ITEM_MALICIOUS_ARMOR: - case ITEM_TINY_BAMBOO_SHOOT: - case ITEM_BUG_TERA_SHARD: - case ITEM_DARK_TERA_SHARD: - case ITEM_DRAGON_TERA_SHARD: case ITEM_ELECTRIC_TERA_SHARD: - case ITEM_FAIRY_TERA_SHARD: case ITEM_FIGHTING_TERA_SHARD: - case ITEM_FIRE_TERA_SHARD: - case ITEM_FLYING_TERA_SHARD: - case ITEM_GHOST_TERA_SHARD: - case ITEM_GRASS_TERA_SHARD: - case ITEM_GROUND_TERA_SHARD: - case ITEM_ICE_TERA_SHARD: - case ITEM_NORMAL_TERA_SHARD: - case ITEM_POISON_TERA_SHARD: case ITEM_PSYCHIC_TERA_SHARD: - case ITEM_ROCK_TERA_SHARD: - case ITEM_STEEL_TERA_SHARD: - case ITEM_WATER_TERA_SHARD: - case ITEM_BLACK_AUGURITE: case ITEM_UNREMARKABLE_TEACUP: case ITEM_MASTERPIECE_TEACUP: - case ITEM_FRESH_START_MOCHI: - case ITEM_STELLAR_TERA_SHARD: - case ITEM_JUBILIFE_MUFFIN: - case ITEM_SUPERB_REMEDY: - case ITEM_AUX_POWERGUARD: - case ITEM_CHOICE_DUMPLING: case ITEM_TWICE_SPICED_RADISH: - // Items with hold effects: - case ITEM_ELECTRIC_MEMORY: - case ITEM_FIGHTING_MEMORY: - case ITEM_GROUND_MEMORY: - case ITEM_PSYCHIC_MEMORY: - case ITEM_DRAGON_MEMORY: - case ITEM_CHARIZARDITE_X: - case ITEM_CHARIZARDITE_Y: - case ITEM_ULTRANECROZIUM_Z: - case ITEM_DEEP_SEA_SCALE: - case ITEM_DEEP_SEA_TOOTH: - case ITEM_NEVER_MELT_ICE: - case ITEM_WEAKNESS_POLICY: - case ITEM_SAFETY_GOGGLES: - case ITEM_ADRENALINE_ORB: - case ITEM_TERRAIN_EXTENDER: - case ITEM_PROTECTIVE_PADS: - case ITEM_HEAVY_DUTY_BOOTS: - case ITEM_UTILITY_UMBRELLA: - case ITEM_MARANGA_BERRY: - case ITEM_PUNCHING_GLOVE: - case ITEM_BOOSTER_ENERGY: - case ITEM_ADAMANT_CRYSTAL: - case ITEM_LUSTROUS_GLOBE: - case ITEM_CORNERSTONE_MASK: - case ITEM_WELLSPRING_MASK: - case ITEM_HEARTHFLAME_MASK: EXPECT_GT(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx); break; default: @@ -398,7 +323,7 @@ TEST("Species names fit on Pokemon Storage System") } } EXPECT_LE(GetStringWidth(FONT_NARROWER, gSpeciesInfo[species].speciesName, 0), 66); - EXPECT_LE(GetStringWidth(FONT_SHORT_NARROW, gSpeciesInfo[species].speciesName, 0), 60); + EXPECT_LE(GetStringWidth(FONT_SHORT_NARROWER, gSpeciesInfo[species].speciesName, 0), 60); } TEST("Species names fit on Contest Screen") @@ -434,7 +359,7 @@ TEST("Species names fit on Contest Screen - Rankings") TEST("Species names fit on Battle Dome Screen") { u32 i; - const u32 fontId = FONT_SHORT_NARROW, widthPx = 60; + const u32 fontId = FONT_SHORT_NARROWER, widthPx = 60; u32 species = SPECIES_NONE; for (i = 1; i < NUM_SPECIES; i++) { From fd397e9e1c2878111ce33484c1f76a000d9d0388 Mon Sep 17 00:00:00 2001 From: RavePossum <145081120+ravepossum@users.noreply.github.com> Date: Sun, 8 Dec 2024 05:07:19 -0500 Subject: [PATCH 474/544] Fix move category and category icon when PSS is off (#5786) --- src/battle_controller_player.c | 3 +-- src/battle_util.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 3396999487..00e73735e8 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1759,7 +1759,6 @@ static void MoveSelectionDisplayMoveDescription(u32 battler) u16 move = moveInfo->moves[gMoveSelectionCursor[battler]]; u16 pwr = gMovesInfo[move].power; u16 acc = gMovesInfo[move].accuracy; - u8 cat = gMovesInfo[move].category; u8 pwr_num[3], acc_num[3]; u8 cat_desc[7] = _("CAT: "); @@ -1796,7 +1795,7 @@ static void MoveSelectionDisplayMoveDescription(u32 battler) if (gCategoryIconSpriteId == 0xFF) gCategoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 38, 64, 1); - StartSpriteAnim(&gSprites[gCategoryIconSpriteId], cat); + StartSpriteAnim(&gSprites[gCategoryIconSpriteId], GetBattleMoveCategory(move)); CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_FULL); } diff --git a/src/battle_util.c b/src/battle_util.c index 3aaa756e44..9cb4da700b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -11212,7 +11212,7 @@ u8 GetBattleMoveCategory(u32 moveId) if (IS_MOVE_STATUS(moveId)) return DAMAGE_CATEGORY_STATUS; - return gTypesInfo[GetMoveType(gCurrentMove)].damageCategory; + return gTypesInfo[GetMoveType(moveId)].damageCategory; } static bool32 TryRemoveScreens(u32 battler) From 8088547334640b342a8fafd14a1c9c9b04555b69 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sun, 8 Dec 2024 11:09:36 +0100 Subject: [PATCH 475/544] Palette cleanup (#5661) Co-authored-by: Hedara --- .../battle_anims/sprites/attack_order.png | Bin 1252 -> 545 bytes graphics/battle_anims/sprites/aura_sphere.png | Bin 1086 -> 302 bytes graphics/battle_anims/sprites/blue_flare.pal | 242 +----------------- .../battle_anims/sprites/dragon_pulse.png | Bin 930 -> 223 bytes graphics/battle_anims/sprites/embers.png | Bin 1334 -> 557 bytes graphics/battle_anims/sprites/fly.png | Bin 1172 -> 465 bytes .../battle_anims/sprites/horn_hit_new.png | Bin 1010 -> 286 bytes graphics/battle_anims/sprites/mean_look.png | Bin 1144 -> 344 bytes graphics/battle_anims/sprites/poison_jab.png | Bin 912 -> 205 bytes graphics/battle_anims/sprites/power_gem.png | Bin 905 -> 198 bytes graphics/battle_anims/sprites/psycho_cut.png | Bin 922 -> 215 bytes .../battle_anims/sprites/stealth_rock.png | Bin 926 -> 219 bytes graphics/battle_anims/sprites/stone_edge.png | Bin 1181 -> 474 bytes graphics/battle_anims/sprites/wood_hammer.png | Bin 1549 -> 842 bytes 14 files changed, 1 insertion(+), 241 deletions(-) diff --git a/graphics/battle_anims/sprites/attack_order.png b/graphics/battle_anims/sprites/attack_order.png index 18531b8304514c66d315a403a50cca37d8e82644..624708545e28f16adf325c0f0d4c577523c18db4 100644 GIT binary patch delta 62 zcmaFDxsYXoGCu=jage(c!@6@aFBupZ3?{0Y@U2O7{lmb(IN#I7F~p;DvpMrzMuGAe RP8py)gQu&X%Q~loCICO|5widQ delta 408 zcmZ3;@`Q7OG7~eyL?e@l32dW?4k5tz&E@AG1_s9Yo-U3d6>~P0%w-ga`aUI^0SG)@ L{an^LB{Ts5Sk;6g diff --git a/graphics/battle_anims/sprites/aura_sphere.png b/graphics/battle_anims/sprites/aura_sphere.png index 04c5030245573d73d59f3b99bae5317afb74c2b4..4ee16cd4881370980bf132e560c032c5278d2eeb 100644 GIT binary patch delta 213 zcmV;`04o2!2(AKL_t(Ijg6Dx4uv2HMp>{mG_(XCx7hiL8>cOQCSb$|%)*T?ggO4o@DFii6o5|ziWzNf416F^ zcouHnaZ}7t>k*D25EMd)Tn(*0rpX0ef$kvkW{7RE66AwGdqF-3^dd>5b?SA1@Kz{& zic*vHVSZSC*u`;=LfSBEM~0RQJ-ak*axb*)`^u~PAwD4IQgIpi4%3AH^jZ?(gxjt# P00000NkvXXu0mjfh5=mQ literal 1086 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WMyDrW(e>JaRrM1`0?Y!j~_FB{K)w6!{Wye4j?-5gJZ@Ij*K517C$&RfG7i~ zY!r-!!0-zJk*s~jKwohdctjR6Fz_7)VaDV6D^h@h$30yfLoEDTCoyt08wjvCYi{}V zpZ$B;H=jP2%L}9SN-j!>dT3)Q*{{W;EC1z#P*YhwSR5D?JyCqipQ%$oVT*#g%{tEmXw$=&%S zd}Ge7Efc=q`&PJ>g|oQx&uqujKWv(LcASblC=^_hZT}@o=wbYfFK0oq=jrO_vd$@? F2>|#Hjtu|+ diff --git a/graphics/battle_anims/sprites/blue_flare.pal b/graphics/battle_anims/sprites/blue_flare.pal index 3b224c3459..87bb2254a3 100644 --- a/graphics/battle_anims/sprites/blue_flare.pal +++ b/graphics/battle_anims/sprites/blue_flare.pal @@ -1,6 +1,6 @@ JASC-PAL 0100 -256 +16 0 0 0 248 248 248 205 248 255 @@ -17,243 +17,3 @@ JASC-PAL 238 238 238 189 189 189 156 164 164 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 diff --git a/graphics/battle_anims/sprites/dragon_pulse.png b/graphics/battle_anims/sprites/dragon_pulse.png index cc6e28bc328092c6fdc8cdd6d5f1ce5b6908745e..5a1f62321f0f6435d05afbe5d059b70995ab32d3 100644 GIT binary patch delta 61 zcmZ3)exGrIGCu=jage(c!@6@aFBupZ3?{0Y@Trs8|P)z4*}Q$iB}A*2#U literal 930 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!3-oF?)7FfFfcO&_=LFrVE6$NaX65W@L|J- z4ILdFK<+3Q4S^970vhp>kwCA;db&7F_7mdKI;Vst0Py2Kxc~qF diff --git a/graphics/battle_anims/sprites/embers.png b/graphics/battle_anims/sprites/embers.png index 8bf2dd5aa6c2633c32e509bcb78a84641516ee53..c5799e7160bff96f4bcdc27178aec209d5983acc 100644 GIT binary patch delta 475 zcmV<10VMvm3atc?ED4T$`%#ks001zNH8g)hH(4D300F2;L_t(oh3#0;a>O7A%!4zC z`~Ux26peNQ*j{_nKFI6tkwn=A?z&D`0c`M6LIw(RltX^c%s~!GkaIw&I8ner$&`{X z-bvWJ!v&7NLJw+ll-OOyi4)(7T}6pH!)4}hmlftFGDTJzAP=KQ7}$fVTJ{t_|@2{8*#q? zddqPbz}=cnMpqvhy1Vh*)or%ksZK+g*KDil*8iibV?rMuR$;v&|34M1MG6B0;~7sE$B+p3w=)jrF&PRtf8P*fw)_A8{Ws<@GR~ao z5gH!zNciab%M)%e?$T}DrB^@Uh1K~u(E&1c`y=p^d=Dx)YFSdsXT(8_x%U-B% z5P7)l>#xuZx0lTge;!`CRG%?TW6S0eF7@ z`F^|UukHHacBVQ@ZGAQ$XKUX?scQ9$;lJ0ED<^)Qd27MU2~YpceAO_6G3wyzsA+%r zo0ykf{cU>Sz1)qb)BEe{e@Qh;x>U#286OO{H~cO@L}o+o(u28TV^%-YiK534a_Zacq-GK&6My| zmqBn%-4A^(#u(;sNk*kp`VzM?Z*Jso;wZQJ=(#5CU*PR;49@xLo}V^#9s?y}Pgg&e IbxsLQ0Go0NhX4Qo diff --git a/graphics/battle_anims/sprites/fly.png b/graphics/battle_anims/sprites/fly.png index dd1149de9937b3be65a8ba4f8951cbdc0c36bee3..ff648a6e2ebb87b4fbaf0f71d4c376bb0317870b 100644 GIT binary patch delta 62 zcmbQjd69X7GCu=jage(c!@6@aFBupZ3?{0Y@Lk;h;tT@=qraz%V@O2nW^-m=MgiUB R{SSfi44$rjF6*2UngCo=6F>j} literal 1172 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz|0Wf6XLpHLdTCEKN@a4$hdGL z;=%)i0~aJ3CI~oqyjbw!2g8pW0XHr%TKz56Auyamz|Pg~GXn#ozo(01 zNX4AD(+&zXEAY6OI{f%=pC`mp=q0q^^6cAkw^shXljHWba8K3O@TY#!??h%@GE!!C z;9sy_yJgN{htHZXz9=6k>6&xtgn#oANrz`26X!G@pK&sup^1IM=lN^)@|e_Z++5aG z!KAde>k)H;fI!~=N}&Z^c6WKU{NZ<4uXj{#fntL61r9BSpR*XRo;T%C(qvg8${@Sw z7ptSPO6viJILR0PDsqDu1?Jo{*tSi|;chcSQ)<3#R>K3e2Z|5Avz$^2d~osg0j~oE z)(5wG6t{Hh&QQLgYN2dkQ)N0!_0-Px#Fp(uRf9?c%NdN!z(@PG; zAP7Lw4hb6F|86Ttkx#XgH+W3%iM9z|*M2I^DI>PF1C{dVub^se4HFmxCa^sp@eANP13UsJ z7=%q=Ie-g51WpjhyJkcw`2ZDU26)}(`K8FKu~~P1DwGfJngtZY91MJ{mi zw_V?yZI<^$Xup+rd*|&CmhBo9GU25ya)R007oWL_t(oh3%Bf4uc>NMJ)`MrT_o8MMY!N zd0f*)H*;1ba1JD(%aSBX64Gz{BtMU6Hs7#qsuAfyg3+CXva;@wiSJdVlxiiI?Oy}C z&?%oSD6_qM2DC!={4;ySl2mle7$gZ7iz$Ni-`R2W55$%O<*RV z_}mX+BsQ4so$KIrHsR<@BG7{dW7`ehRw9q(BuSD#@CLn^A#mrtx-kF%002ovPDHLk FV1k*JcGCa= literal 1144 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$jZRL%n;xc;`)Q(2N*DXxWI5>2g8C13<(JW8X6iv^`l@k1crSGBguM`2ddawf`m;2}F z>G+K%Eq6Zs6-~0Q`^XiPSz)*3neg+8-?=Q0N>nz+^mTqd@mHuw>(SjKRol3;>aI=r zR9l>|=Ifrj7mE2eH&h&T3E~Z#ry=3B=%H=Afw+}=)Zqja PVPNod^>bP0l+XkK9GMXN literal 912 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR=Xd7%T)VG9)qe85Ol?aTfj;#1ba4!+m@~KETj+oRhtpC1kN?!y zE%UvdbC|D&XYq-RAy?nzpKUJrzvj5cMxi^`x6M?Z<;a}!bB>4m)%gd!*IZ)eXpnno e7h_eQe4X`&5aVva3F1Pafb(?qb6Mw<&;$SwDLtJ4 diff --git a/graphics/battle_anims/sprites/power_gem.png b/graphics/battle_anims/sprites/power_gem.png index 8d9ad469e39e0d64c9e2e409c4a5179bc6d4ffda..439610c71bbdfdaf6b14e2f810d455f0de3b5d8f 100644 GIT binary patch delta 61 zcmeBVKgKvgnV*5NILO_JVcj{ImkbOH1`}0H_*6;_wgTBMo-U3d5>qFeGdl@vHIiNg P6k_mn^>bP0l+XkK`xOva literal 905 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR^0^`~ZqLI2=ew_^@Ha zhK`O7Aa@juhQJ630gZUcNT63;JY5_^D&|Z*=gq{Rz~UNM^=<#Nn(nljcas?cc^r}t z==iVKyR~Ol#bd8Gvk%;6VcqtZRrtjd$&*JaRhI5uWppcLo7Y#ih3gsJcQ5Ky1O=U^ LtDnm{r-UW|29Gti diff --git a/graphics/battle_anims/sprites/psycho_cut.png b/graphics/battle_anims/sprites/psycho_cut.png index 3eb1de7d2aea2fe98f3edaa17a1965bf7c15904c..f40d21f7064146b4b6f0a1820b6a13f58f15be5b 100644 GIT binary patch delta 61 zcmbQmew}fGGCu=jage(c!@6@aFBupZ3?{0Y@bM?9gTe~DWM4f82%9x literal 926 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR>8_C@h%Z(NJKJ5TW2< zAz`2)z`?-*R5J=jLtrF?z%wK9#Xx^Xdb&7&?fY$ioz%d*QeI&9LQllN1XN z3MXg(FMNLaqH^8c^!GQMHfvT3Hz;goy2-=UqEqO_(oyWR)}BM5<;nMB6Qy4@Y-+ip k|1L<+OlRjWqxxSb8P2sb9>2FyRTdPOp00i_>zopr07~aO>;M1& diff --git a/graphics/battle_anims/sprites/stone_edge.png b/graphics/battle_anims/sprites/stone_edge.png index 44f678d8db953314d1507da7cf97123a6356c869..80377da7ee9a910caecfd588ee64b65693cab1b0 100644 GIT binary patch delta 62 zcmbQsd5d|1GCu=jage(c!@6@aFBupZ3?{0Y@SQi_ewu-SF~ZZuF(jgOvpI7Zqd;^? R@^_#-gQu&X%Q~loCICj)5{Uo+ literal 1181 zcmeAS@N?(olHy`uVBq!ia0vp^3P8MogBeIhiOiE@U|?nl@Ck9XxS()iL&Aay9t{Ns z6&V%<2^t9z3JC!k0Uin-77`W)5(XLq3KAR=5)vF796-IJU^E1VQwUsp-*TFPfic3< z#WAE}&f6I$`;I8^xLD`(8J_!WX?TrMLvf^uS-9f3p;)JSsH6; z?X>5N!pEK&#n}-j0%wIUU^AUQf6kxdJqPvl9gXLF?`>z|?JJbr;M}^%tH)!)j-Uw& zM;F+gm=M$w&T6m!@!(Ps(;1RIhFzr_5*&F}HKrN1b(lINO7q=6SMc-X$@I(CJ8f=0 zyfgQEZ#<`z$RVSIb}rAU0uuth|C=-+V6tQFguvicTeMc#oo@{C$`TNiSgihfL04;5 z0Ix~+z3i=Q8aam_-hQcPZ}~Il*%$lSmf6cb@B4V>!i3*(Y;OV@LwDw@Y^iRYc;N=n zMHy#&!&+_rC;3?ax_aTVbdTXpt0jpGB}16cCY`&shLP)b!H=?Kr~UovBAq^bd>SwR zW_`EBL%px6PkPqzZ>p=wa8#?ImI?XnV*5NILO_JVcj{ImkbOH1`}0H_&U_qzGGluI^pT!7!uLC*_`}!PC{xWt~$(697T75;gz; delta 801 zcmX@b*2^pYfAv)|1zR=&J(!YU?#ov%3`fgIuK>gTe~DWM4fpI{+@ From 09a8d051d4d530edf43074c324783f8ab13fbde0 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Mon, 9 Dec 2024 12:28:31 +0100 Subject: [PATCH 476/544] Added the missing config to use new terrains (#5792) Co-authored-by: Hedara --- include/config/battle.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/config/battle.h b/include/config/battle.h index b0184838cb..f38be8949c 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -219,6 +219,7 @@ #define B_SECRET_POWER_ANIMATION GEN_LATEST // Secret Power's animations change depending on terrain and generation. #define B_NATURE_POWER_MOVES GEN_LATEST // Nature Power calls different moves depending on terrain and generation. See sNaturePowerMoves. #define B_CAMOUFLAGE_TYPES GEN_LATEST // Camouflage changes the user to different types depending on terrain and generation. See sTerrainToType. +#define B_NEW_TERRAIN_BACKGROUNDS FALSE // If set to TRUE, uses new terrain backgrounds for Electric, Misty, Grassy and Psychic Terrain. // Interface settings #define B_ABILITY_POP_UP TRUE // In Gen5+, the Pokémon abilities are displayed in a pop-up, when they activate in battle. From 5477033a19ee77ac5917e4db38c906fdbfebabfa Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 9 Dec 2024 05:51:18 -0600 Subject: [PATCH 477/544] Updated Ogerpon, Enamorus and Sinistcha sprites (#5793) --- graphics/pokemon/enamorus/back.png | Bin 841 -> 734 bytes graphics/pokemon/enamorus/front.png | Bin 832 -> 785 bytes graphics/pokemon/enamorus/normal.pal | 20 +-- graphics/pokemon/enamorus/shiny.pal | 24 +-- graphics/pokemon/enamorus/therian/back.png | Bin 710 -> 891 bytes graphics/pokemon/enamorus/therian/front.png | Bin 821 -> 867 bytes graphics/pokemon/enamorus/therian/normal.pal | 28 ++-- graphics/pokemon/enamorus/therian/shiny.pal | 28 ++-- graphics/pokemon/ogerpon/back.png | Bin 447 -> 515 bytes graphics/pokemon/ogerpon/cornerstone/back.png | Bin 537 -> 540 bytes .../pokemon/ogerpon/cornerstone/front.png | Bin 962 -> 947 bytes .../pokemon/ogerpon/cornerstone/normal.pal | 33 ++-- .../pokemon/ogerpon/cornerstone/shiny.pal | 33 ++-- graphics/pokemon/ogerpon/front.png | Bin 1043 -> 1007 bytes graphics/pokemon/ogerpon/hearthflame/back.png | Bin 533 -> 534 bytes .../pokemon/ogerpon/hearthflame/front.png | Bin 958 -> 947 bytes .../pokemon/ogerpon/hearthflame/normal.pal | 32 ++-- .../pokemon/ogerpon/hearthflame/shiny.pal | 32 ++-- graphics/pokemon/ogerpon/normal.pal | 33 ++-- graphics/pokemon/ogerpon/shiny.pal | 33 ++-- graphics/pokemon/ogerpon/wellspring/back.png | Bin 472 -> 534 bytes graphics/pokemon/ogerpon/wellspring/front.png | Bin 960 -> 909 bytes .../pokemon/ogerpon/wellspring/normal.pal | 32 ++-- graphics/pokemon/ogerpon/wellspring/shiny.pal | 32 ++-- graphics/pokemon/sinistcha/back.png | Bin 583 -> 591 bytes graphics/pokemon/sinistcha/front.png | Bin 646 -> 654 bytes graphics/pokemon/sinistcha/normal.pal | 23 +-- graphics/pokemon/sinistcha/shiny.pal | 25 +-- .../pokemon/species_info/gen_8_families.h | 4 +- .../pokemon/species_info/gen_9_families.h | 146 +++++++++--------- 30 files changed, 282 insertions(+), 276 deletions(-) diff --git a/graphics/pokemon/enamorus/back.png b/graphics/pokemon/enamorus/back.png index 1b2b00e218f9f00d05f649ab21fd56845f8afffc..2e7af720cfc05968495d84e24b5616d3bdbab889 100755 GIT binary patch delta 722 zcmV;@0xkW?2Hpjb7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-snbM?nJW)zY zN{t~Qz)v#tTobcqwWwEZ|HVA%hv(0Op0u>R5D*aj{QLj_00000T(YcO00079NklG|hZqrPn$3uzNW zS`XE2gzo>z-``bCTjvnulm&}W{jmc0qpo60D=Au=o1HzNeFqp-8n;V7eHRW zfK`}hgCPsR!X{2&Ha$@aq54IfAg~y)p33T%g{36@M0+=WJ{bTN)^a(d7nM*yB?8z3 z5P;N^A)69v34euQ04`!tHQWvPs$$guseZgee-!kPwn{_;8Si>;?mMTi#yw>s{X2s)u7@lwZA9s&f`>rA|K zLZ*^f=7FG_2cbf!_p^-E3XDo-a^NG0hhkMjwh9NJ)sq=641iwUc#>WSrM=J9;Xvc% zrnwo1fq$h00WfEGf>Iz~+52dBfChU3m`hNN=bnS_zN*EF06Kb#jkV`{gd0ssI207*qoM6N<$ Eg5C5tq5uE@ delta 830 zcmV-E1Ht^>1<3}G7=Hu<00013M{Ml?000McNliru=K>ZG2`{b^|JeWl02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1poj5Fi=cXMVZs3N=iz!w7vZN{16Zjb}~AXA%7m=be!`pF0M*f$1W-J zRFAtpUjM~B@8qxm0052siG%^3p!LMeSoHyF@vN&frW4IVDB0G0ScK7DR}525QO_43Iyb#1qBMe50!T(xg^%R zJmX0}|L?t%e1G!1vA{Rqx#y}`BIYw8uASh!5Lbl|!WA(~;zBG^KZ#v{&lwLgFK_|I zGYg9J9T4a5f-iZSq~4GqGPg6v3Moz^rd${D^9T z?aW4)?X+D?Bg)+thK(?D5TM$jsK#$Bo4Nt!a&|vP`i0+uJeor161b@9Zf-YMhDR4R`bkLDNw;mh7`stbM z;gk)a?GDtRvyr-m5s+t4!{n(QR_HPkcueZG4QQv=%}!=)JA$47*d>%BXnRH;5G4#t zfRwUyG+_YnP_{%D27Cb4nUf51;`M2|y+T0Q#Un0=cO4#Q*>R07*qo IM6N<$f}06olmGw# diff --git a/graphics/pokemon/enamorus/front.png b/graphics/pokemon/enamorus/front.png index c679b07e571f202cbeaeaf1bbe6459f76043c961..67493a1e6b1deef6ed020f2cbb38e7acd05cb54b 100755 GIT binary patch delta 773 zcmV+g1N!{H29XAk7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-snbM?oGCE31 zN|PZT$1W-JE-t%1Uam@4|HVA>RFB|voV2vP5D*aj{QLj_00000+%&-iJiBBci) z2o&+8W|jj4L1zgm_32V_iZK5ka?h6{$7K||g)g_8z%u%6v%YOiLxfM{4$Ba>vKbGH z1cv;6KN5tklz*K^<5HS>5EgTR*>2GCXm$aRl2w3LX_ujfhQ5>ppl;jNcmzOo>Q@0E zVE!#)(72AERT5V9+6C&yqc+q-6^E^dfPmWgY4zkBD$*y%`UJ3e1S;QK#ZROAP=qe+L6U7a(}pE{Dd9^Kb$q(Yn4Mpi|(0q za2rK~g$zB{VJXEkdIz8=8-TI~?*{=1eE>qqD*?J(g43jw`%{lblI%vp)*(^-oXHX1 zWDp*UU&4;(MAiv@Q1tL$$K8?1qv#V5dZ=@SKROe%* zgkG|85(XgjC<00DR)+&+0^q@8o3Logtj!2C2gAA1SluUabJX3t4gl_(kNxtR58T*A zL+x6cdOTRh-)noVDISFWW{Uvp-O{0yhCMh6qmp00N^)L_t(Y$F0>dPuoBg0Ds_fv3J{-Dq*Y7bgQb` zM>dL*U_>EQ3R0|y(1{_k%9H_J8MB?@i7Kc~=PraUg@BNbP7RaYq3W3b(BIHIKrL$C z4VC(2Ig#F%_b%u29YX&z49C8^Y4Sb|)GgErOdV|Fz>y3tAQN*zU?aS!12!_kXX;A@ z1SYi~DDX%NLVtVC4@2L^8h~oHDTf&#S2G4w^H7A$ia{1Mz$A{GCBr4!nW_=j4_s2! zPqiD;kT}SS8!+hj9qKP4tHt(VknASAKCQGEJAg|h{iJ_J%S^@qNL!8MBsn=%pzA=u zycR0_HO5Lk5agY`&YtkA#V((R0NPB_q%ZJd@37Q^o_~f>zDO_9%w1|m)p;0XS#~u& zU20fEu!He>USI@u80w0dS1z{{Vr(a%XPa5sv5C%W%XJ5rtJlHsf zJD|dV(xvO8t==*GBn&?PmgI5k4PS)|RCzCsog#bBD>~q?E-$jff@VEgTsm-qfhx{GlzkdUvG>?qkJ;hoWSpH9^ZiV=FS*y@j^6H-p^M>su_bRCh27= zb}l2`+r2swB0U#P?dxw!Aa=&XEzJ&MzN%kJAb*;~gGC{)%OQ-<$04{&88(gr32=Rd zhR}wN14?P>a~+rEC-H!dSVcf@0|Gw%6CnUFz6S`IolBSAD-n7gu!$1?UW?h?R)V`E zC9;JMgg1ad!1PoLBCE^#WFbN`b5$dEp#bq_kG9|7He^3%2Ds{{w|Sqg{9VGVkw{*| zQ!dOU1#{-)G9z`>NR`N}JXACbPnszDrxX7d?+)P|ss9?Y00000NkvXXu0mjft*>;| diff --git a/graphics/pokemon/enamorus/normal.pal b/graphics/pokemon/enamorus/normal.pal index 08f6e5ebf1..43c4eb7a07 100755 --- a/graphics/pokemon/enamorus/normal.pal +++ b/graphics/pokemon/enamorus/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 211 165 -74 74 74 -180 180 189 -252 252 252 -16 16 16 +153 210 164 118 50 58 +74 74 74 147 33 30 -224 116 156 -243 46 46 -174 74 87 199 46 41 -243 84 143 +243 46 46 187 62 94 +174 74 87 255 197 60 -239 228 176 +243 84 143 +224 116 156 +180 180 189 +16 16 16 +252 252 252 +0 0 0 0 0 0 diff --git a/graphics/pokemon/enamorus/shiny.pal b/graphics/pokemon/enamorus/shiny.pal index 180ae687e5..edbd1c73cb 100644 --- a/graphics/pokemon/enamorus/shiny.pal +++ b/graphics/pokemon/enamorus/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 +153 210 164 +117 60 81 74 74 74 +141 33 33 +192 79 50 +244 92 19 +179 102 181 +168 87 109 +255 197 60 +233 135 231 +207 131 158 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 +16 16 16 +252 252 252 0 0 0 0 0 0 diff --git a/graphics/pokemon/enamorus/therian/back.png b/graphics/pokemon/enamorus/therian/back.png index a563156e4d1f0bfbd1794b70c0f5efd6268142ba..04a5286fc159cb9de072a6516241cbcac97adb7a 100644 GIT binary patch delta 880 zcmV-$1CRX11^Wh&7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!hbI8aDP zNQfXHz(_FgSP-yau&7XI_`o>mfZ)i0n6R+85D*af`1k+-00000sz1Q)0008{Nkl-XtQ3KBZ>@Ord}5rTha~pVCth8i35g@`Rsv8UlE7 zflmn(kOn}y2jJ%bNdSI4zXRZW$zl7LUjmwhmw+*gAfgk>9Uvh+0SJF$4KVt099T9fo=a@u6GO>K+{VI!Ggf$Vwq|{Ov5G2YT-40Y@vP44wMln1B(WIf!)$skgRxw3mY04}X^)GzV111)*)_r)x?u`z0U~ zq6cXCMI}8*TQs(P4?Q5)F?Ke(2$UXF3* zEePLKPUGr59}xQ-GypcDyZOuF1$6T7_sbvJ_bF3!NuWay=HqC9pRgcZuq)U_4sn=$ z)Rgf3e1Gh>t}m=zAg8VXYOmdJEL|Wk7Xp!ceg9rTch692S!Y+=V^?s7{7A#eef=S=1w65Y*6z-l{I{&tk0>M?)7-Jub?Y^z8fe4IQ12vE~NV1H3wj$gD#*JNQ=N+sEj#?a>|&N zTWKsS!19aB=f7Ok3WC|yH95j~OJb)F#Vi|f0Z3C85O@NV%T`PPx2nhKjlk;|N;P9|H0hJOuKoiZ?nGE-e40i80000rH delta 698 zcmV;r0!97%2F3-D7=Hu<00013M{Ml?001yhOjJdj)ue+dG1Y3E5D*a6K{-lFO8@`= zw6wkd#W{PVgJN@Hl*OFp_U17;G46xr0000{xoCR;00L1-L_t(YiS3gyZ__{&$FDjW z1X58tB(5_WRxcy?1_L>_HFuZwkZv;}an^M4%bdx*z9rA;icpGfV@-H-~_;di50X zDzh1W-Up_l1p?GpSsJ{%830=Q93L&yma(_rdH@KOEXTCEOqnUjXaFP%bPfDS-#Y0T1IA3+KZ)r=`umeFK4k9t0B;N!`&rOg>UBR( zz^qvuy9~7(4*+VUIcoOZVZIv13D{Wh67j8!O6Y?jN1KXUH3p^4-rW8dIhj6AaDg4s0$4XT$PyDfbF&zl&GnT3|E(Eu>r6< zZ-$;VYJc2Q+RaenK)V#00Cx|-?O}&)3T^}AoXgDyazmhwJ7*l$NZGpOMGLq_g`rTM z)2i;&qH6&bxnje(vaGFgEQ*X?Zu>OKxQ>j=z2l2M5IKKq?bK|05F8ftdJQseO7S-I zPv4CbfHVXU*XA+>>;n+j07Sk7f0=fH37kly2s2p3PCELnc}#q#2nl0OTVQq~Azm{% gW_*0w0sc*Y0LQW(V+I-782IB^h7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!hbFgQp^ zNRS{Hz$hs2C@8o%Sg1%)_`o>uP>A4gn6R+85D*af`1k+-00000^%HE`0008vNklte$o2!#ViQzv=<*Bu8miMh2)e~q<^xttF~q#1^PVSl9dmHbDI3XC&hwEF<3uF4 z6X5Dy0nX_NBJ`#Rnnnpei~ez$-W3s7pIi#tY4+Fs)OY=mM}Z2s9daSfbkS_s#G5OWBs&zS~xujUz}X-UF$9zuvA#%xCLwR8bq zV79BL^Y$F#n1gE53j|pR2z*8G^(;b6`pId2B_}jdM}P1|IR#M8VNCfY6@cx@XhU5D zjnMb3s)un(rjJ={MP|Wdv=X;^okJ;nsxLF!F+~uHFDiDHu0JCT&%va%))T5esYD4H zMbhOUFAMfStVV&s7vL>`vH1S@j7g+Kh=HnlHEVYD+Lqv#7)8?b0A$+fx7JU>>orxg zVMa||1Aj^dbjv~Ha=lN<7v*gPyXJ{Na2KeiFJ&jxJzLz+J9h0G%>@3F5!gM=4N=^2 zS&h#CSj$A5xa!Noa7pP+_Ig9;W9Tj_=FlPAb)mp&<~Wxv^weLz>;GpS*Y)fCg{8)_=vk=`h#^1Hdki<5_#wW*qmKLE?~^p!Dnj=!0H5 z2b{dhh0*?M*HM7_*Yl%3oa@z{0czh8i)#EcK%ZX#e(e}(yZ}i3YymPHbBLd|aQ8Ng zE>V-N@0&i{z06)ran*kZ&{B!^eFuo)>b^*=zH7ZD=@RhH91y+%c$S_Lp!^bm90&cq ie+XD|eE+ujKkXOJaX6uAO$%ZG0000XYAi}y(IC)iZDB~)!USs+>U03*_01T0Xg zq*JiByU6yy2V=I7nx_pSN?5@zMFPv_AYe@U)fh-WwOB834(g6-fKq1%fv2`I0O@0k zSm46~D^Q@Y?tq{+biD$IA$?b2XNq2kU5SkfO4%Q zKi;Rt9DgYkZcn5{WX`njd3+PYCU+FJ7hXw2Ux1?AN(bwf9$ z?#uy!E_GFw*xJClc22su-;v)69AG~d;*y3e@+JHY;E@IB*8#9yH~^9K z9S|LkpBKl&!z#>ZE%@-cB!eOh*2xf5v}o&-vJ-lYHk|6-&VQnX^E%@~VfIse{4-ke%|ds<@v00E9kL_t(|obA%RYQr!P2XMKA zy(TdfIv5f|=#UOIf^K~YgZ8wcB4lcp%D8xq1=;%w20uVOXn*UREs)Kx&}ZmL@n(tz2xS#KTmW9xzF7-#{PKWzf#0O#YgBL=4gq(YL9QOe-Rlx9ifsdR6GHg9C>74jR zen2+X1B56cvpn}O9vLIOcqX?jvH>{DZqtC(O|lRf!`RL>z{KMboiBtC%zM-Uw89TD zg}xAP`4MThFn{s-L-j?L9}V3WlovomPmV5R9hV@BAVdd}0tglXV6W}I#ls2&F=LF! z9gvn80aw)?5dbJgWLyj4G)-9xv@$F%!AT4OCA5GQKrT8AlKLx}TUtp8c}59jM+bI2pvu@5eN(Ivlt3_1CUk-Nql~>*z*Jy0arf?Z0pQZIWfLS^tUTA9 reV%TOta^aVfLIA`6j1%ffPYZGU^9f6(9)#r00000NkvXXu0mjf$LH1L delta 433 zcmV;i0Z#sd1iu527=H)@0001;w}I>c0004VQb$4nuFf3k0000jP)t-sl+mF80RSp2 zDHWav8%7U3aWxTYL{o)YN=!+w*q{6T`io;Z0Hm3CQ77A-TxYv*Bme*bKuJVFR9J=W zl*x}?r696Ow&It~<3!vFv5g0Z=FxZQ5T)+kcUf}r&fzcEafS)D=kjqG({0;_W+=R|q zD1i00o1_w0Rw!%Bd-C(5b!QfBzWSJfE53k zzX;~|I0Jq$$A8}=%n;0F<=<-a-HW|D??ri()w~8){qt00E~-L_t(|obA#-OT$1I2JnLj zg=|?fUZF##wx`h1A#KG$m)<83E|95UAzh?`(A?&zqm5AEmVb^Seg!wbg0qW*Zs*8m;kbqp#C+6 zP73^81F#c7*w%Xn?4g{SaFc<^VT?hi2CQ^P1l5!)A_0;LA8LVPSr#jS(hd_!5Q{dT zgch&_$b+^6JAaGfDNQ>CvO)tkIk0uWv~nOSY8PQ{tbeEth+F`1lhqw5kckfT8bG$A zo8*RkO5RHj;);tVAa=-#UKK!uikI0V{Q{7c$o)ha@FB?n7%0$PoV|SvQa~6#a+6zswL0%@fTtB^Sh R%>V!Z00>D%PDHLkV1j<|;?Dp8 delta 524 zcmV+n0`vWx1epYo7=H)@0001;w}I>c0004VQb$4nuFf3k0000jP)t-sl+mF8001g1 zDHWavN=!*TaWxqm7;R&0g^Pi}06Yu=14}~PGAKeh0R$|l8wR4lnIIhk7Fi%S1Pj?UT|i<64%a3@aUmf$ zh(Krt=4&x1!VncApT!+iGR7blK_S%!!>{zfG@clIvzp6owopD8=*L&9175COdGxm#BiO(k>HEp z2%HxV&+EL;Aa8;3!q3;h(BbzH>@W-kUH&8RqXoV%=<}Z*d@K1i6!iFJj5yLGLE%pX zh{-qkc8XixhGHw6(2*ckLD|L1FS%5L&k?^l&3;So`F~tx%hR`=Xhd-}L8AQ)BO@#me O002ovP6b4+LSTXqzvD{) diff --git a/graphics/pokemon/ogerpon/cornerstone/front.png b/graphics/pokemon/ogerpon/cornerstone/front.png index 8e96be70e7c8b2c23299a744da89feb1e71aaae0..9b7f2792387428bc1e2c71509de805da7ee5df96 100644 GIT binary patch delta 937 zcmV;a16KUP2eSu|7=Hu<00013M{Ml?001yhOjJeg=Cm;}F_fH?5D*YSb1_=1Fn;0F<=<-a-HW|L&Xsi()ww2HIT!00TZrL_t(|oQ>5nNE=ZY0N@KJ zWc6JjV4eH}Z*a=xnafp03SO{Fg_3);i$m_<6@)?|!yR25B7fvf1<7<2p(!g#D8X*7__Zfq#7Iahja=QR+P!R*ST9heJ z7NQIScL^|q7k@g@Du!}&7lpEDgGW6O9!&LvAXpA%3K%m8FeuQOs4t}qWU2#hzl<#a zJb-o-*;4k#fCn=|RlqKEN&$@du@M38fPxU-5CqnjbcuL10x|WOG2Ei;uBS`jh$y9k ziK%|2*-}7^mME*$AgF(09`-Aot1j01h$sk;3PGvA)_*^$Rrs5(0%9<@7eoQiTf8_u zVqkx|!4j6(A%iM~6{__k@`xLzI1cyn?1JuxQHwHrO-qihVnj)=nDe#55@T_Wp+fZQ%zj z1C-eO{u<^5f{w+;fn^d>+HPasXROf?!z~O4rGRge(odDI^HyLX*hvE&SI!f)p7U0S zV0Sjv0WVavi9vgB`Lr0(5*LeShwi>#Y7} zF@V{@=_|?e=5&`zf1!3jvAYsT1#~QxbvJYw%AOh|mTF~P zr!MWDDxm4zl`wM<%-*LS#%8gZxG(3zh9#5{<<c0004VQb$4nuFf3k0000jP)t-sl+mF8001g1 zDHWavN=!*TaWxqm7;R&0g^PM&s$4k}6NUjgJ0Opk1BwTWrPwG?7ATWHeUaMS}-@+t-6X%p!^ck;~5A`CEAN!*g zh)DI*0CnMj1UqqFPXoZyA>XE-0PwyiR{w@Dz5H_h9f0@8&fNgyJ{o}2B|-F$9YR(; z^E&_r(j~zF8h?D!NE%|$-vM^a2f<1p|H?qRCMckk)Jw<+`|kQ%3jmbovk1Twh?+!P zq=4xZ-ti=z=mE(7u`t;689UH6F`UVpUI7^f zZAx=WuYU#*J)P9iaW+7(Qg74r6?Fr0tp5;(vqea+AE4GqWV|Z$XbIXD-U*m;=w*%L z46+52l9bR!(E&+{nbKi!xQkNnIzuZ|fQ-1ZMvxMwD8fD(`@+^oI1q$J5IC-4!L~pb zAsg?FW!pxCFD(K|4erkez`EPJ`h*~b$l8~10)N-FRyIH*+yKmlZi=LkD+V8c?F{gX zUd_QK2%dt4Mu0tKHNwTMf$b1tLU;qvD$iPR z;~TvqT6Iwe(1I_dUc14>bDk5(06k#RI|==hfU^;3)Z@6p#rYQe>*APgJ&CB4PY9zQ z0DlUFZwa=+1tEM#FarR5M`#9?Zwbx7@+F}gSiU5T03*;x1b?(*cLN0&elm+>ZX$|_ACcCKHh~5&U)vt3qA@>y_h`udJSY6&M zlX_T}1tZoy3TeI+?Dq8FkPXnqsafib7Bmw}&%8T|nW?=kvJ-lYHk|6-&VQnX_3oB)erIse{4-ke%1X2uEt00VkSL_t(|oW0dQXxmsE2k@sH zX!b*?+=?^3s;E%NaPA8p$}NV6GoKD=wxamyuzTbTMK2`N!GF=%SxU<_*x|S%6x8Hx zUYfyMhD>Q8i??34j)g4VOz!vO*p+NK-TJ_`;C=l4z4y~Ugudm-O%9fR$ejPKJUO!L zxyfP@EICef7OX=2D$U&h%DFGVa$JP;89>Vlr8tLh45|p1W&zbHEf?_`gj;r1A@iUD zfKdsSTty=@tAALfe^xf6S@ST)4>XbjM1sF)NS7()J|P5?bcJQ|<0|dYwGA8tOp3FB zmY3JMo!y{G%iPBiWRM^UV1wnYZY$&f!lIA>H-1lpe5<`50LX`ih+v7Nbds)-Z*J{Z zxcn6&awX`eB6u^Oe?~E_a07rNchWdX2nF+yh0rSxz<)vXb4h|e=aYH7OoI?w&AdN! zal9A(^bR5#{cXX=MtKU+A+0dne!)aXe1HC*HwG|d9hE<&Y=e6Ec1Jgk_XNiOd`bZn zG@-`~>vvxKW*mz{BZ|R^oEL8-PyPj^$&F+pb?+<(*QBfy*u512b%=|LOeM? zgFYky3V*oQ#?MEiLj5r;;t4q;ECt{a2-(MvcX7dg+!4{=r+zvC!-0Nvd4U1Q3a6H@ zk;e8EDDlzeCB_#Y214K!%f&1SP+c5#_o5NL7>$NP9NLbnH&_y=MjUZ58hTeoTikLy zy??!gaie1Kx-_~9_}$B+gF_cL0E`o^PpJy~e}BC>+0FX14w~Y?(}&0>ZJr{W01T-m17a~ zgMX&(Kn3&MWG67slJ|xp*v?xoSF=G_@L^l&d89DJAW^k!2galOh^6PJi*;%am|x7f z$JlhkHMi!}?CihG;pt3u7R1LTFdiU=t2cl`6~6SvfB=9x3xQS~z_(wleg%-P0F^AP zF#$7A;^~Vc0004VQb$4nuFf3k0000jP)t-sl+mF80RSp2 zDHWav8%7U3aWxTYL{o)YN=!+w*q{6T`io;Z0Hm3CQ77A-TxYv*Bme*dlu1NER9JfGLb7cl{Rt2+%7)2!wAa zM%AeP+Q0@d3rzBnB4G*1_1_GDAa7apub1nQf_O)703qa(CpP^=IyC>+0A>X+v*>fv zvy4Pde-2>Lx_|$YOUZ1>)bJi(48(9|pC)xbDFIW^IVj~tX)_Sd2sD8(nddC=xg``X zdi^;-LQbMnfQki(uRMhgxFGn#O;|+01^zMEL51gQ-=|n1mz);3K`X zOAvAy6IVfSr5d8jbH>lLkj{a{!zn-q(?V5Br>1d)Tr*HhS$7ov9#0`aFzPI^f|M$P zMWhw^D}S{I$UKg7py47dNFyVU$>$mvfNo1m8a@c9EuZm-MOcspNtI+z2#Egn9Lm0k z@pB=htb$=HFL-Q``3O;SK&_B`H^n_;t!;t=1WaN9OttP0dR+sUkNq%t)3f{^k->#^ zsTyIcWQo5g#C~rD$v@5W3=7F>SnEBhUaJT(=YRi%uev7HzaNA0?6}j z8nkU~)f>X>8jG|pqI|~+$n%EST@@NYpI|cm%uEg=1B@2J#=f!S+#!5GGO?Ba2C&~h z4~U-7oM4gkjFgff&B03e4iNnag)~Lk)R{tT7V;6`A3^m30D+Yd4PX`ykGRmwXDe;B zfPY@8{bnPa9FZYxa&Ks6!C>fTaCvWP-Is)q1YYs>^_1#ji0>CSJA!-g4 zaIZ0_15aTKNxmcQ=r_QocgXD`ka%+MdEAMdavAau0-!K8b_=l)00000NkvXXt^-0~ Ef_Ik83;+NC diff --git a/graphics/pokemon/ogerpon/hearthflame/back.png b/graphics/pokemon/ogerpon/hearthflame/back.png index d6d927f19d5a051631c1ef4b2bc6b6f425aa1f6f..73f95efbf2cafea2a6d0e259646f71ac17f71f51 100644 GIT binary patch delta 521 zcmV+k0`~ot1eOGl7=Hu<00013M{Ml?001yhOjJeg=Cn#mO4Xbg|K34Cb1_=1F%S?C zDJd!LIVqeF5K;&T|NsA_%@})XF#y&7i()zbplFN$00E&%L_t(|obA%RYJ*S|2k;b% zf}2ZxkP9I=WiT|9LYKHFq`lBCX&}_0gIl@y209glw%#RMpMRiZUM7oOljBSVIvf_AIoIxdq5~lCAX9-y*PZ(SL+pE9z`X}Z zb;vA{qXcsVezs8pU87S04zMwm05_*{MrNA65**B{2ltlmHfo?}9+;^+V*y8yDpp8M z&!^KFV~ks%0)MbHhc?ANV_$d-1xU@+x9qb3fVRaND9Hia0eG#?v4)jhfB;2n4Glq* z1IBmwqWq&No=H-I*yfxQy9o@EgvE@Q$ZAH!2=a)4D1jY@A#Z@j41)-86n#JnCEz&_ zi}r)4dW-s&MpOV1p#Vt*A{8*g3SdO*5JnQleE|Ci@PCr0GYTL&DlqN<<&06@*Thre zE)_UNymtYdAtJ`7fKXaL=9n#NKtxh!PfHLGR)WEk1f%U8`F$z?c0004VQb$4nuFf3k0000mP)t-sl+vUC001d0 zDG;3i<~%VuaWOH4tb-gF)#mp9#!9SdAe@=3F}~)cG%-p{O1+6%1%%aT0004#Nkl8vu4ejHS2$hxO4$} zNE$%?{r0j#d@N9c-dw!E_xscUCg=rA!2Cl2Ab*n;@ZOW~PX*baSOx1I=!Oc!1`W;z zVm_k^h**0=zy^&D<8z51IDfw*AWIwSLdp&q4Nh>qZl-;FUN_O4^$F9iCY zITdvI;}n;3Tn&XUuImXx6ByqPqI`wE0K5F^X>P!VFMmI}OF=!x);~`8fgr%Ob36!! zd=bbVeO0ao-}p2P5GpT%^#NiRK>F(i2q;@N{}ZqYAg>I6qHrw$?}>eZ@t@D$pdExd zrQIWF*ONDt{#1Z|0GF-=+=9oEPZm;FM}r6!!=4Z2A!rxEz(2*&ClLpC)rkNA002ov KPDHLkU;%>3gy2a4 diff --git a/graphics/pokemon/ogerpon/hearthflame/front.png b/graphics/pokemon/ogerpon/hearthflame/front.png index d8b9cb7b2346a9b49c50b60e3484b0c8dc3e03c4..098041cf76ae5b047a5e9c617c8c5c1ae8d5e481 100644 GIT binary patch delta 937 zcmV;a16KUL2eSu|7=Hu<00013M{Ml?001yhOjJeg=Cn#mO4Xbg|K34Cb1_=1F%S?C zDJd!LIVqeF5K;&T|NsB)oB(@jF#y&7i()ydz4YY(00TZrL_t(|oR!tVOWRN!2k;am z1y8;z73UE43Pq3hL8;qigH#XmGRW(>arU)!J1mz5yvRK0OMh-t2zh!L2-;*I$mYiE zQSqdw{RO*v=+X0juW7e7O_e=p3i*Bd{k{H@Hj46JYvPf5;@Kl2ky(^)V=v=sokNbu zh@u_?QWGJ7h%rjbF<=qIc>`I-V26niY?GYl?UPKNvHSp#7a)-@KtKTZeHShL1&*wX zgYGuga2*0%qXoU(Tk?Gfyd`;77w+85CusHl<{IV@1%<;jtG0tLGXT&vVncxMpUtAv z_UsP;SATMn5m4ZE>+DGzp-myyi-w76egp{57N@`4?K|NXOBRa&l`LS)Kep!X0$;ea z)TpsRu!b>a^L%y=X606BwE>gw)O&+c*Kk&;^OLrJ%qp~G)c}MEy-TXHvZ8uUAdCj3 zB@@8W^Zq@CNS-m$lwKNX00i0zw;w2VIK$R8?SC@g0R%RD++QDe>rj8KYpYkR1IY7W z;O8?gT(-O3I@dJqIs_y?&|zFO`KCJ--0D}@c!!x&njVBTmk|8w1#N~uCCdi=-b zs(&_^N=L+ZT3FV-!mRQGU<5d9}sx(}Kp z>Vnu!By~m89t2dQx&+!Xn$qHWREoN}1)!*-*vD2fy<#B=REUbZ8Y(i;v>YTvmEyjq zii~L)ps48;GjY00000 LNkvXXu0mjf+Ge!n delta 948 zcmV;l155m~2fhc87=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sl+vUC001d0 zDG;3i<~%VuaWOH4tb-gF)#mp9#!9SdAe@=3F}~)cG%-p{O1+6%1%%aT0009#Nklq@7xre7RjdIms#p)YQ|Q=Kxhf?ttL(TY4Q=_54TzP`T-^49LJ` zNvQ!?Ke+zFfC3iQ=LSfLD5Yfj>lq-@*Z?V0DU@&N8Ia!qh{6EX-vNM-M*}RS*kZc= z8Zc(o|2e>t(SHDx(-mOMe}6roH~ zH6TyZw9fqUyk<$HZixzD!YN>yUauDjst3Y0l>h=foB^iS%nn|Ytq{tw*lq|d5vKrz z5JX=*XsrNF=^l{U6yRWfO{&*!fblm5ICch7TSOk49ZX1cLIp@qdA2pAz5urR4MFr- zDhSez{(nH;^n;96_fj%|KqLn;{(b?gK4|l>GIj&cW`LGuN64LC34*}P#SzWW%b|)F zdIC09r?&=Vy}0?01{jw@bw71-*DJxZ?-8TaAop7-DxYQAc7_V*5epWN0WsJ{vRR_r z^^Ii%s0a+jgg|^iH-JrZ-_({qJRb`IFwdmTB!Bx-Ujd+(w!;h04S|DVb_>f9;C&M0 zz1ay-%P`k-`;1`vN|-STBf!IlBQn%l;44Ym0`!*Ugp&g@fKlWo*aN}?cO~6z>GXgd z>P51iPi#2gAMd4r^xwQ_;&NlV%0D1I-p=m`dqgu#a=>2QGTsqez4nB|BDfO*;Qsh4 zL4PlrXs|yLg6QR>{E6TOhF=M8VEBW{UO_Lwv-?y-Z-NM_|1VN%(}%io@P~pojGc2#>1{ zNH+D|Qm`+3VU1RZVnG1+8iRgYU27o=!7X;g9ldk`(pJz}rrWJe-sAyquGtCZY{-A@ W8$}4~HHMb}0000WlPuCx7J!FJNzQ z`F;F;e;jDq|GDntdCT6p&-uPjm>f=wj;vexyOw}s5jT!KTx#Z)cSSrojvX&mgNJSb zz_|}$MIMJ}hXnQ>R)~E7VH@aV;Mg2i@S_l2!si4!U=&3VvmYaXKRS2R^%dYPV0xVI zoDmCX2hbyLO@9U>#u$Ya5TH$>O-5kO*eeRmO*DH`a~9xWOGFNsi#>(8on-|GT)xvV zkmP_-ccW?axhcNHyabDkQYx|*NQ;hzP^THO0FXxn0tH!`rnCVX9fpwLEc$>FD4;oz zi}r)0dW!m%Mp6J7fq;1h5)2q=1t6kz5ym`S^Z}RyfPb63>?nYoVBpvR%8o-m*X6(D zy;R^F@!18SLq;4gfgq%QnMXFR0U1fG6DdI;SP8VL0*BSZ&-b(djIyGk4b&T@^rZy4 z0+W?>vfgt5A1xi%K_b{Bw5;Lp`Kytq3XmO8E5U~XYF-Ptg7XJ&k&ItQlUySJ0000< LMNUMnLIPldrc>k{ delta 458 zcmV;*0X6=X1lR+R7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sl+mF8001g1 zDHWav3qW~2aWzUzNe^180Dk2)hNwqXWH-Iz)aLh-TOp}>N|>9g`=DGg00042Nklt9Uuc+#CbTN==8h54f+WDgt4(D01jsc@ z9-^QCE~Mcma?ThcGGs*o{=uTjulu+qQk(^ri|1iD#y0!CUBaE>5L#D}5RdXi(Bi8x_W6$B z0bfqBe3E%6{C41u1e64zLI7ouC6b(Lnx)CisFwz1|yU`;)uu;jJd&Mg0Z2U5`RMFH6g@WE85|pCV1(P zOqnw@9owd31`p}GljHhBYM@IWB!lng_kTK_WJUQe_2}^fK+_*+fN|#EK*}^<$pmaD zN;PKPqSO^ag9dhOcD+bxBs4vfX0xE!6oBr*3`W{vGgG8ma-D9i*!G;mVnA~%5_^o< zEH)vEpe|$e8Gm4!iWt%JeV@`*2DLc3-lS&fkb0fqwB<`+=U+|D=asvDCxB}CE{w=( z?$iZ#N^%+M^uQ2+j9MO}c(_2kT*T6XT0Q4FER*97RBd%Wx}$JI=%QYlJQ?CE#W`cr!c_%Uwzj;3Ho2 zU+QS#j7Y#k^ZxNsmk&XhJZv4@TqA_~5#S$2$A3~KZ8&gd*xrAtBeZapp9YFTmV{{U zUw;*#AAyMnR3(J?C4wOVog?DHI+=X_RBMwgW_1u6{E^D^I;3QvjizI$ohJ&JS&!P_ zEC%xoCBElK*2vbvm2P|rL7 z*n0y&Wr-R0VD>#3{m`V@5X26V))j>Q3NXUD0BDZwpty{zraKz|G@Zr%Y^7`SHWNUF zR&jSjWe%&0jf7T4+;ys~P!|mpwKng>ZUiZ8?1}~si?$=C2b?+q>N%N|SSnGIPs~jH Y27ghvGnl9eVE_OC07*qoM6N<$f)UA?t^fc4 delta 950 zcmV;n14;ai2fzoA7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sl+mF8001g1 zDHWav3qW~2aWzUzNe^180Dk2)hNwqXWH-Iz)aLh-TOp}>N|>9g`=DGg0009%Nkltd`R41^6LDK6^!zilT8H&@qnO@ExWXXj%GA)&)?8GlZret-SpGySOHR35_5 zfUFk)n{PO zSA;KKJVgz!0Q+=E_J81UAG3#R0Hs18DuAc}a?4@> z5Ki=O00}1my@xY4uqIM~bX2+k%x3=pSn;!K2XPL_NsuhcE*$QF0eo5k2o->290A&a zm}xFqaB@fr-~d2q1_IGBjaFMi5DUm*r(Xi>FXa#%S%-SlTUn_EIRUl+fO(PhFWni` zX!2UyLVqY~DIb+vsDZkE&*<(3d+q}FnoQgb5T`vM_IC?~?W@>(ZN(a!=mkJCr|q54 zhDZTW=aY*6Np^q?34u=KgWfC|AUi&OmfuYRfF6LfHN$w4*zc>1qHa0O1cq zly?VP3~bv>0E|6A2-|jiW$XwFLH@RlXY67e(SIfcP%Oa2H-IdUkIJ|syR@JbKZq1tBEaL`V2AB1@OVCGdlFh77P*Rw3}`5vz!(P224NG|F2k z7~%4jVq-#rDu4$0lEI{ph1>5$$=%i)CL3=*yz?CGHcUETzdY0qE_%K7gmwM-vDyJv z#ehlCzr1p0}PA1FnmHTesnOy(l7zryYl z>RY$l!tFdvQ`KhxdbG&#&veTITJmU*ES#bqqx2RxjnjDVB#49neOZ!Zb@@x^re3UL z!AaIN2c(z!ZYfv+;A_f-s20fj(+#}>N-q_ZB`M#CJNgD_`V6^U1hO7l(fYU(WyRFaRJ}4>@NgkA*X8TOeJY zN_fO$pqEgGgnp;Ga?HbY_u6N{xvm8T1?J(~(!>Ti0005aNkl!n8yHkvjr~%3?>i)qWv0%>;FUqyc=O2cA$4N-AQ&=<9-6q2po$U=YD|I&q#9E zt9Ko8eF9J~q10zUFF_(VfIh-%faI~lOZ?OWCh)Sug_! zfXfz=fg`{rLVsV5eQk4PE zEoe-jqBJ)qLcr55q#m|_lp%!E2*&_Q5kjCrK-MXsX~7VnuHOR!0X&1W0A05hAjcB~ zex3oG+xOC`K9U;1t_j{(1Q+GKf0({R8$jNXD?o?441aLa5bsO*N@Vr4`OwFni%iq4TYtAsDMY&FC+0{O7?Ej) z;&=jP_#eX&P=N>F;RG>Nz<3YPKe|%E6cRJhcm23<{y72!Aem1#}C4>zXDugTc>wc?_hla zHh+pI0(>CEWl!jz>`%bz$L1_aP6XH!a0x9-S_#r0!8-u%v@Aa$q$J<_Z{4~zreDn3 w5z-|qs3$c5000hUSV?A0O#mtY000O800000007cclK=n!07*qoM6N<$g4sm;=>Px# diff --git a/graphics/pokemon/sinistcha/front.png b/graphics/pokemon/sinistcha/front.png index 4131a22b9f68f9c39c9323f9993f47aafa008971..eeb1b7a71a775b8baa64059d8a005d3d2b39b87d 100644 GIT binary patch delta 629 zcmV-*0*d{H1&#%fB!2;OQb$4nuFf3k0000mP)t-snbM>s8yieIIyq-0X+#@pTOeJY zN_fO$pqEgGgnp;Ga?HbY_u6N{xvm8T1?J(~(jJ}90006ENklM-DMNV$cBc2SEXvgJ=zk5Af-q01*x$7x9#V^O-`Peh>zeqYn_7&0090!ZQ(7 z4}k4Ote(qHst$$t*CS37VBH51y40sya2%16SsO_=J%9EOwbp9&0ABc%Q9cwswr|y1 zH4qmd5F*G-6x4*uL9KV#sbxne0>DKIYwDK#r~vhf=i&jp0_vwF?7eoZwZe}D56KC* zYCjiV^An;Kr`^rX3M; zUZ3N_$Z6xrG{e3yZOswK+>65+k4Z^f$H32o46mN8>jXYAkHioC|GT~bd2b`Y1hB3N P00000NkvXXu0mjfPVO0L delta 621 zcmV-z0+RiX1%?HXB!4YXOjJd4#iUF+I%z~3lZr&2nS$HWk*B(HEg>N@V#r7-9l8|eLK{3w zA>I+dP}`1yD@ry_p)@z}h9M%f9f2SK?=-=U(ZF%z{2QXro5T zm7fZjlmxt$X9~6ox?;8dM8OC5iYGkXJ~z~(4m@WaZh_&t)KstQ%JSCF(a(1B+d##r zltPwLKv3H`&VSMBSO!)jMfIYZ5HJLzA;K8E3_`wOTjF?|Vv00KPjMmhSH)j^Fd1nz;uLV7*)5U_m>6Pg1d- ziGawswLUOB&IXO5dF#jt2BronN|84l0dB&GCk426?0>J~8xy?((9Ia@gn(Li9;8I@ zI}8XgwMt5Wqi+Tt3BV%(c?WouQ-T8>bQj>sx=degJqa79l<$$j|@)01jnXNoGw=04e|g00;m8000000Mb*F00000NkvXX Hu0mjfC*KyY diff --git a/graphics/pokemon/sinistcha/normal.pal b/graphics/pokemon/sinistcha/normal.pal index 16008ccdf1..0697645151 100644 --- a/graphics/pokemon/sinistcha/normal.pal +++ b/graphics/pokemon/sinistcha/normal.pal @@ -1,18 +1,19 @@ JASC-PAL 0100 -15 -115 197 164 +16 +153 210 164 +37 27 27 76 58 58 +57 103 37 105 68 27 -147 138 68 -159 153 130 -219 210 145 -167 186 114 -45 33 33 -51 99 34 +106 91 32 93 158 74 120 196 99 -247 215 98 +160 151 80 +135 132 126 +167 186 114 +204 195 116 +247 218 103 +193 185 174 5 5 5 -208 210 193 -241 237 235 +230 225 219 diff --git a/graphics/pokemon/sinistcha/shiny.pal b/graphics/pokemon/sinistcha/shiny.pal index c769e9d1a1..6b9d62ab8c 100644 --- a/graphics/pokemon/sinistcha/shiny.pal +++ b/graphics/pokemon/sinistcha/shiny.pal @@ -1,18 +1,19 @@ JASC-PAL 0100 -15 -115 197 164 +16 +153 210 164 +10 48 0 32 88 15 -105 68 27 -147 138 68 -159 153 130 -219 210 145 -167 186 114 -45 33 33 -51 99 34 +57 103 37 +143 133 51 +106 91 32 93 158 74 120 196 99 -247 215 98 +160 151 80 +135 132 126 +167 186 114 +204 195 116 +247 218 103 +193 185 174 5 5 5 -208 210 193 -241 237 235 +230 225 219 diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index 37eefda7f9..fd86f22ddc 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -2655,7 +2655,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Dipplin, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicYOffset = 0, + .backPicYOffset = 1, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_Dipplin, .shinyPalette = gMonShinyPalette_Dipplin, @@ -7730,7 +7730,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_EnamorusTherian, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicYOffset = 2, + .backPicYOffset = 0, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_EnamorusTherian, .shinyPalette = gMonShinyPalette_EnamorusTherian, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index d617d36f1b..7402619b9a 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -7086,13 +7086,13 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .trainerOffset = 0, .frontPic = gMonFrontPic_Sinistcha, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 10, + .frontPicYOffset = 3, .frontAnimFrames = sAnims_Sinistcha, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .enemyMonElevation = 10, .backPic = gMonBackPic_Sinistcha, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicYOffset = 13, + .backPicYOffset = 4, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_Sinistcha, .shinyPalette = gMonShinyPalette_Sinistcha, @@ -7147,13 +7147,13 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .trainerOffset = 0, .frontPic = gMonFrontPic_Sinistcha, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 10, + .frontPicYOffset = 3, .frontAnimFrames = sAnims_Sinistcha, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .enemyMonElevation = 10, .backPic = gMonBackPic_Sinistcha, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicYOffset = 13, + .backPicYOffset = 4, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_Sinistcha, .shinyPalette = gMonShinyPalette_Sinistcha, @@ -7370,78 +7370,78 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = #endif //P_FAMILY_FEZANDIPITI #if P_FAMILY_OGERPON -#define OGERPON_SPECIES_INFO(Form1, Form2, type, ability, color, iconpalette, isTeraform) \ - { \ - .baseHP = 80, \ - .baseAttack = 120, \ - .baseDefense = 84, \ - .baseSpeed = 110, \ - .baseSpAttack = 60, \ - .baseSpDefense = 96, \ - .types = MON_TYPES(TYPE_GRASS, type), \ - .forceTeraType = type, \ - .catchRate = 5, \ - .expYield = 275, \ - .evYield_Attack = 3, \ - .genderRatio = MON_FEMALE, \ - .eggCycles = 10, \ - .friendship = STANDARD_FRIENDSHIP, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ability, ABILITY_NONE }, \ - .bodyColor = color, \ - .speciesName = _("Ogerpon"), \ - .cryId = CRY_OGERPON, \ - .natDexNum = NATIONAL_DEX_OGERPON, \ - .categoryName = _("Mask"), \ - .height = 12, \ - .weight = 398, \ - .description = gOgerpon##Form1##MaskPokedexText, \ - .pokemonScale = 356, \ - .pokemonOffset = 17, \ - .trainerScale = 256, \ - .trainerOffset = 0, \ - .frontPic = gMonFrontPic_Ogerpon##Form2, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Ogerpon, \ - /*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \ - .backPic = gMonBackPic_Ogerpon##Form2, \ - .backPicSize = MON_COORDS_SIZE(64, 64), \ - .backPicYOffset = 0, \ - /*.backAnimId = BACK_ANIM_NONE,*/ \ - .palette = gMonPalette_Ogerpon##Form2, \ - .shinyPalette = gMonShinyPalette_Ogerpon##Form2, \ - .iconSprite = gMonIcon_Ogerpon##Form1, \ - .iconPalIndex = iconpalette, \ - SHADOW(7, 13, SHADOW_SIZE_L) \ - FOOTPRINT(Ogerpon) \ - OVERWORLD( \ - sPicTable_Ogerpon##Form2, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Ogerpon##Form2, \ - gShinyOverworldPalette_Ogerpon##Form2 \ - ) \ - .levelUpLearnset = sOgerponLevelUpLearnset, \ - .teachableLearnset = sOgerponTeachableLearnset, \ - .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \ - .formChangeTable = sOgerponFormChangeTable, \ - .isLegendary = TRUE, \ - .isTeraForm = isTeraform, \ - .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ +#define OGERPON_SPECIES_INFO(Form1, Form2, type, ability, color, frontYOffset, backYOffset, iconpalette, isTeraform) \ + { \ + .baseHP = 80, \ + .baseAttack = 120, \ + .baseDefense = 84, \ + .baseSpeed = 110, \ + .baseSpAttack = 60, \ + .baseSpDefense = 96, \ + .types = MON_TYPES(TYPE_GRASS, type), \ + .forceTeraType = type, \ + .catchRate = 5, \ + .expYield = 275, \ + .evYield_Attack = 3, \ + .genderRatio = MON_FEMALE, \ + .eggCycles = 10, \ + .friendship = STANDARD_FRIENDSHIP, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ability, ABILITY_NONE }, \ + .bodyColor = color, \ + .speciesName = _("Ogerpon"), \ + .cryId = CRY_OGERPON, \ + .natDexNum = NATIONAL_DEX_OGERPON, \ + .categoryName = _("Mask"), \ + .height = 12, \ + .weight = 398, \ + .description = gOgerpon##Form1##MaskPokedexText, \ + .pokemonScale = 356, \ + .pokemonOffset = 17, \ + .trainerScale = 256, \ + .trainerOffset = 0, \ + .frontPic = gMonFrontPic_Ogerpon##Form2, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = frontYOffset, \ + .frontAnimFrames = sAnims_Ogerpon, \ + /*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \ + .backPic = gMonBackPic_Ogerpon##Form2, \ + .backPicSize = MON_COORDS_SIZE(64, 64), \ + .backPicYOffset = backYOffset, \ + /*.backAnimId = BACK_ANIM_NONE,*/ \ + .palette = gMonPalette_Ogerpon##Form2, \ + .shinyPalette = gMonShinyPalette_Ogerpon##Form2, \ + .iconSprite = gMonIcon_Ogerpon##Form1, \ + .iconPalIndex = iconpalette, \ + SHADOW(7, 13, SHADOW_SIZE_L) \ + FOOTPRINT(Ogerpon) \ + OVERWORLD( \ + sPicTable_Ogerpon##Form2, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Ogerpon##Form2, \ + gShinyOverworldPalette_Ogerpon##Form2 \ + ) \ + .levelUpLearnset = sOgerponLevelUpLearnset, \ + .teachableLearnset = sOgerponTeachableLearnset, \ + .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \ + .formChangeTable = sOgerponFormChangeTable, \ + .isLegendary = TRUE, \ + .isTeraForm = isTeraform, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } - [SPECIES_OGERPON_TEAL] = OGERPON_SPECIES_INFO(Teal, Teal, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), - [SPECIES_OGERPON_WELLSPRING] = OGERPON_SPECIES_INFO(Wellspring, Wellspring, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 0, FALSE), - [SPECIES_OGERPON_HEARTHFLAME] = OGERPON_SPECIES_INFO(Hearthflame, Hearthflame, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 0, FALSE), - [SPECIES_OGERPON_CORNERSTONE] = OGERPON_SPECIES_INFO(Cornerstone, Cornerstone, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 0, FALSE), + [SPECIES_OGERPON_TEAL] = OGERPON_SPECIES_INFO(Teal, Teal, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, 7, 1, FALSE), + [SPECIES_OGERPON_WELLSPRING] = OGERPON_SPECIES_INFO(Wellspring, Wellspring, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 1, 7, 0, FALSE), + [SPECIES_OGERPON_HEARTHFLAME] = OGERPON_SPECIES_INFO(Hearthflame, Hearthflame, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 1, 7, 0, FALSE), + [SPECIES_OGERPON_CORNERSTONE] = OGERPON_SPECIES_INFO(Cornerstone, Cornerstone, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 1, 7, 0, FALSE), #if P_TERA_FORMS - [SPECIES_OGERPON_TEAL_TERA] = OGERPON_SPECIES_INFO(Teal, TealTera, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 1, TRUE), - [SPECIES_OGERPON_WELLSPRING_TERA] = OGERPON_SPECIES_INFO(Wellspring, WellspringTera, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0, TRUE), - [SPECIES_OGERPON_HEARTHFLAME_TERA] = OGERPON_SPECIES_INFO(Hearthflame, HearthflameTera, TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK, BODY_COLOR_RED, 0, TRUE), - [SPECIES_OGERPON_CORNERSTONE_TERA] = OGERPON_SPECIES_INFO(Cornerstone, CornerstoneTera, TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK, BODY_COLOR_GRAY, 0, TRUE), + [SPECIES_OGERPON_TEAL_TERA] = OGERPON_SPECIES_INFO(Teal, TealTera, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 0, 0, 1, TRUE), + [SPECIES_OGERPON_WELLSPRING_TERA] = OGERPON_SPECIES_INFO(Wellspring, WellspringTera, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0, 0, 0, TRUE), + [SPECIES_OGERPON_HEARTHFLAME_TERA] = OGERPON_SPECIES_INFO(Hearthflame, HearthflameTera, TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK, BODY_COLOR_RED, 0, 0, 0, TRUE), + [SPECIES_OGERPON_CORNERSTONE_TERA] = OGERPON_SPECIES_INFO(Cornerstone, CornerstoneTera, TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK, BODY_COLOR_GRAY, 0, 0, 0, TRUE), #endif //P_TERA_FORMS #endif //P_FAMILY_OGERPON From 7eee3b35c2a5d607d5f3b2037dc96067052e5347 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 11 Dec 2024 05:05:09 -0300 Subject: [PATCH 478/544] Added missing tests + Fix Coaching/Crafty Shield interaction (#5796) Co-authored-by: hedara90 <90hedara@gmail.com> --- src/battle_util.c | 4 +- test/battle/ability/flower_gift.c | 27 +++++- test/battle/move_effect/coaching.c | 122 ++++++++++++++++++++++++- test/battle/move_effect/cosmic_power.c | 19 +++- test/test_runner.c | 5 + 5 files changed, 168 insertions(+), 9 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 9cb4da700b..d2f5314742 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8633,8 +8633,8 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) && IsMoveMakingContact(move, gBattlerAttacker) && GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST) return FALSE; - else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD - && IS_MOVE_STATUS(move)) + else if ((gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD) + && IS_MOVE_STATUS(move) && gMovesInfo[move].effect != EFFECT_COACHING) return TRUE; else if (gMovesInfo[move].ignoresProtect) return FALSE; diff --git a/test/battle/ability/flower_gift.c b/test/battle/ability/flower_gift.c index 68712641e0..5ceb26c5c1 100644 --- a/test/battle/ability/flower_gift.c +++ b/test/battle/ability/flower_gift.c @@ -63,7 +63,32 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when its abili } } -TO_DO_BATTLE_TEST("Forecast transforms Castform back to normal under Cloud Nine/Air Lock"); +SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal under Cloud Nine/Air Lock") +{ + u32 species = 0, ability = 0; + PARAMETRIZE { species = SPECIES_PSYDUCK; ability = ABILITY_CLOUD_NINE; } + PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } + GIVEN { + PLAYER(SPECIES_CHERRIM_OVERCAST) { Ability(ABILITY_FLOWER_GIFT); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); } + TURN { SWITCH(opponent, 1); } + } SCENE { + // transforms + ABILITY_POPUP(player, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + // back to normal + ABILITY_POPUP(opponent, ability); + ABILITY_POPUP(player, ABILITY_FLOWER_GIFT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Cherrim transformed!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_CHERRIM_OVERCAST); + } +} DOUBLE_BATTLE_TEST("Flower Gift increases the attack of Cherrim and its allies by 1.5x", s16 damageL, s16 damageR) { diff --git a/test/battle/move_effect/coaching.c b/test/battle/move_effect/coaching.c index 2f50aceab5..451ac80495 100644 --- a/test/battle/move_effect/coaching.c +++ b/test/battle/move_effect/coaching.c @@ -1,8 +1,120 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Coaching raises Attack and Defense of ally by 1 stage each"); -TO_DO_BATTLE_TEST("Coaching doesn't raise stats of the user"); -TO_DO_BATTLE_TEST("Coaching bypasses protection of allies"); -TO_DO_BATTLE_TEST("Coaching fails in single battles"); -TO_DO_BATTLE_TEST("Coaching fails if there's no ally"); +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_COACHING].effect == EFFECT_COACHING); +} + +DOUBLE_BATTLE_TEST("Coaching raises Attack and Defense of ally by 1 stage each") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_COACHING, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COACHING, playerLeft); + MESSAGE("Wynaut's Attack rose!"); + MESSAGE("Wynaut's Defense rose!"); + } +} + +DOUBLE_BATTLE_TEST("Coaching bypasses Protect") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_PROTECT].effect == EFFECT_PROTECT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_PROTECT); MOVE(playerLeft, MOVE_COACHING, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COACHING, playerLeft); + MESSAGE("Wynaut's Attack rose!"); + MESSAGE("Wynaut's Defense rose!"); + } +} + +DOUBLE_BATTLE_TEST("Coaching bypasses Crafty Shield") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_CRAFTY_SHIELD].effect == EFFECT_PROTECT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_CRAFTY_SHIELD); MOVE(playerLeft, MOVE_COACHING, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COACHING, playerLeft); + MESSAGE("Wynaut's Attack rose!"); + MESSAGE("Wynaut's Defense rose!"); + } +} + +DOUBLE_BATTLE_TEST("Coaching fails if all allies are is semi-invulnerable") +{ + KNOWN_FAILING; // Coaching succeeds + GIVEN { + ASSUME(gMovesInfo[MOVE_FLY].effect == EFFECT_SEMI_INVULNERABLE); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_HAWLUCHA); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_FLY, target: opponentLeft); MOVE(playerLeft, MOVE_COACHING, target: playerRight); } + } SCENE { + MESSAGE("Hawlucha used Fly!"); + MESSAGE("Wobbuffet used Coaching!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COACHING, playerLeft); + MESSAGE("Hawlucha's Attack rose!"); + MESSAGE("Hawlucha's Defense rose!"); + } + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Coaching fails in single battles") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_COACHING); } + } SCENE { + MESSAGE("But it failed!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COACHING, player); + MESSAGE("Wynaut's Attack rose!"); + MESSAGE("Wynaut's Defense rose!"); + } + } +} + +DOUBLE_BATTLE_TEST("Coaching fails if there's no ally") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: playerRight); } + TURN { MOVE(playerLeft, MOVE_COACHING, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + MESSAGE("Wynaut fainted!"); + MESSAGE("Wobbuffet used Coaching!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COACHING, playerLeft); + MESSAGE("Wynaut's Attack rose!"); + MESSAGE("Wynaut's Defense rose!"); + } + MESSAGE("But it failed!"); + } +} diff --git a/test/battle/move_effect/cosmic_power.c b/test/battle/move_effect/cosmic_power.c index 8680e9f28e..3b52fbe046 100644 --- a/test/battle/move_effect/cosmic_power.c +++ b/test/battle/move_effect/cosmic_power.c @@ -1,4 +1,21 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Cosmic Power increases the user's Defense and Sp. Defense by 1 stage each"); +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_COSMIC_POWER].effect == EFFECT_COSMIC_POWER); +} + +SINGLE_BATTLE_TEST("Cosmic Power increases the user's Defense and Sp. Defense by 1 stage each") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_COSMIC_POWER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COSMIC_POWER, player); + MESSAGE("Wobbuffet's Defense rose!"); + MESSAGE("Wobbuffet's Sp. Def rose!"); + } +} diff --git a/test/test_runner.c b/test/test_runner.c index 1ff37fe8bc..d3196a20e1 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -356,9 +356,14 @@ top: if (gTestRunnerState.result == TEST_RESULT_PASS) { if (gTestRunnerState.result != gTestRunnerState.expectedResult) + { + Test_MgbaPrintf(":L%s:%d", gTestRunnerState.test->filename, SourceLine(0)); Test_MgbaPrintf(":U%s%s\e[0m", color, result); + } else + { Test_MgbaPrintf(":P%s%s\e[0m", color, result); + } } else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL) Test_MgbaPrintf(":A%s%s\e[0m", color, result); From a669c4c10901ae2adf22bd907c07eb2aa2815c3a Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 13 Dec 2024 08:26:12 -0600 Subject: [PATCH 479/544] New Enamorus-Incarnate sprite (#5797) --- graphics/pokemon/enamorus/anim_front.png | Bin 0 -> 1755 bytes graphics/pokemon/enamorus/back.png | Bin 734 -> 773 bytes graphics/pokemon/enamorus/front.png | Bin 785 -> 0 bytes graphics/pokemon/enamorus/normal.pal | 28 ++++++++-------- graphics/pokemon/enamorus/shiny.pal | 30 +++++++++--------- src/data/graphics/pokemon.h | 2 +- .../pokemon/species_info/gen_8_families.h | 4 +-- src/data/pokemon_graphics/front_pic_anims.h | 2 +- 8 files changed, 33 insertions(+), 33 deletions(-) create mode 100644 graphics/pokemon/enamorus/anim_front.png delete mode 100755 graphics/pokemon/enamorus/front.png diff --git a/graphics/pokemon/enamorus/anim_front.png b/graphics/pokemon/enamorus/anim_front.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b21fc52aeb8b64b517601826a4875021dd5736 GIT binary patch literal 1755 zcmV<11|<23P)EX>4Tx04R}tkv&MmKpe$iQ^g_`hjx(SkfAzR5ET(zq>4qbP}&NuI+$Gg1x*@~ z6cyJ6ykH@F@r8h{K$3LSDQzS=msDr--A9s!_g> zb6MfM#aXS^S^J*+g~5WhlHoedVI;7GBvKF|qmBxyun?nFBgI6T_TwJ@h~rO@OD0zZ zj2sK7L51Y_!T;cQw`Os2!c7Xsf!-I}{ulxJc7ayIw!e>UyLAHipMfi_?J%DuE$-~a#sFi=cXMVZs3|NsBAw7qF+a}W>^?SZPf zQH6diM*quE$ueM_Bt0l7D6wsadrxjsGD~k7FRigaQvd(}32;bRa{vG?BLDy{BLR4& zKXw2B00(qQO+^Rj3uO|&v< zl17$^8=FLHFju4qhN}ZU*r;%GTwv9tFa&GmtFF^3l{SUzAL%`FxX~wLCi)2p%gR>>E7K8w?I1m8xI(MRw&g28UQd z{?v16IM&y4q?2pEF zf8>c2L)&F+=nMq)g0f?0aK5+F{;q91-QLzQYQU#u&29UrgKpbKvHu z7Rj|phE?H9F`JcnL^uazQ88B4|TUFYDWFvwP4%XafvTleEpYxoxgxWH5lF zR`I7+tJ5;99$0a@qSmc%Xvf@aeZ8td0TiV`b!E-k>hZ4x2oRe_F@Mrj03~Uu%Ql!H zVI+M4Caox1f_w=p%?SH!X7w7_Dh?p*7f0`j;x`;3SG(*I6k%@i* z3=z|XwYLbc%n%V>e6$($CWs+Iy0AKt0Ah%cF7`Wd0|gi&qKkMCVu+9~?()bP;u@xl zg>9reMobrr4tNdI1@Zkb5z}-4sr2#p-J*Z#@l*1rlM{e0B#r*uVEmMPZvyr#**T${ zKiJ5doKdJCp12`@+zi+i=trOR`2mbr(7oa2f8Jo{PUBoyl+&^Mngfb2#IWh9Jqi}# zT?rJkVV_rl%^z=I#iJW%GK^3oHa9DT}|>u`=@6F9`5e^44D3LIj8{)6+Xv%ez* zko}M^GUlELK<2x4`>2^|6EuSbIo`V4&D@tfscjEA%4ISLd3%Qk|M4Y(yIc_F)pkTHHxS%)>P0^yxa-v2&wsIzF5wxV+o@wP*4Oo% zeBj_b+Oyz}35*bcgUfKwf@>F`f8eB_z*zvhK~O+D4t4;@^hbc}0H6Y(09^BL1@x)_ zH3y`nABSoI9O|$e7&t7Tn_18Aq$v8afx3neoXD6kV>{Rf99ckA8P-3_*g&tVJWm2= z(02$%ecAPWqJLS>yXGbau0E6oKmbZA*z}5^GKv*?Lu57egjHS{cj)B@N` zm=A^$XjkLwpfo|$66A8OxeG{-^vtkWV7EsJ1yiDtzm_zjHbH8mmNAV9v M07*qoM6N<$f*H?OF#rGn delta 691 zcmV;k0!;md2HpjbH-FNkbv#i@N=l6(A;3>E^js6OX0@nSZU4nQ>4)dfgPydsy$}!( z{QUd?0000009>-HTmS$9TuDShR9JG|hZqrPn$3uzNWS`XE2gzo>z-``bCTjvnulz#=4d@dGk4Xr5z1=xOZx=vbzkpSkXM-UNz``a@U^YEb3ZeQ%oFK3mu%625mxZMy z{X}~=em)rh71nY&q!*P?KP3X#0}z1JlOdZDY6*p504`!tHQWvPs$$guseZn4DuPp{R2=s7Z-C_V9 zAe*k0XpfU0M8?NE@V2HewuoQK*f`x z5VfFO2rz=jBCagUx`qjy1wjk~xhr9U)dA8GXMF}R>VN3zG{Tw&c>eM^@QbadPeq6q z0=GKul?XbaBk@wlQyu~Y*6U2XbV8<*SmuGCn+KsnsQ0ss)e4MCW^&*oiHBlUL$(SB zpw*KZE)0NP-FT8-2&KKx)!{(n<)*nAhk>O80WfEGf>Iz~+52dBfChU3m`h`Sc006o&R`DYPkVRjU=R1NvA|uZyOXFsm1HfCeP#N)x zQ5W`Wk9E!V_AbxTuLO)I$HTV6z9oYPx#Fi=cXMVZp1b}~9jN=lO<9>*>z^DZvCK3=X$SO3L4^Hh)Ebey!by$}!({QUd? z000000Ngc#c>n+ck4Z#9R9J=0m)m;dFbISLwqz@y_kZ1;L5g$ewiSD|BtA4>=NAHm z<=gFlHHCfNW#rajdfizPp;W7apyOu1a(Y~G?%_Uu@FYOT)%x{IhTs9P2f+RTz@R~m zui1!1ZVpa>&-iJiBBci)2o&+8W|jj4L1zgm_32V_iZK5ka?h6{$7K||g)g_8z%u%6 zv%YOiLxfM{4$Ba>vKbGH1cv;6KN5tkl$}T8Qkr@Y7IT5wZqV{*b^(x*Re)D%m!XD+ zzLW%@Zrj#)1VDA_R{k;$Xz6A*f+bA{yk>HycW=K!+% zi&b=}-BX#A9ZhWyt1vKd%INX`;`>Fw%J3Ayxdxs9Kg7|dQ$a*S6r2!B0-!D_eYAs0 z3VJh8xaML=f>h^YrG#FxauNn0^e6&J?pB8bWdh*AW1FyO%B;-@GzY`E(OBIladXt& zyAA;En~(kSnh)IAMMLdcntD7~#@}muttlRa{$`5+>))6y0rYd&H~m5sH8#lK5Ol!< zCfw|=2wR$if7R0`oBAZco`8p~%t0Rnn_JyW@3D3Nt(@FG?bU&W7qG8@H`u7KpAZ9} z*O;IBSQkI~;6A1s=WzRlh3B;Y{{H0iWygm<9t29qi$|`#4UDII;=26-s*En^!SKK) P00000NkvXXu0mjf$JTVe diff --git a/graphics/pokemon/enamorus/normal.pal b/graphics/pokemon/enamorus/normal.pal index 43c4eb7a07..b8986ffd46 100755 --- a/graphics/pokemon/enamorus/normal.pal +++ b/graphics/pokemon/enamorus/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -118 50 58 -74 74 74 -147 33 30 -199 46 41 -243 46 46 -187 62 94 -174 74 87 -255 197 60 -243 84 143 -224 116 156 +153 211 165 +255 255 255 180 180 189 +105 106 115 16 16 16 -252 252 252 -0 0 0 -0 0 0 +237 129 170 +185 81 133 +126 44 70 +255 203 81 +201 50 96 +157 36 61 +40 40 40 +177 109 135 +123 79 110 +82 50 75 +111 26 47 diff --git a/graphics/pokemon/enamorus/shiny.pal b/graphics/pokemon/enamorus/shiny.pal index edbd1c73cb..41b6650a75 100644 --- a/graphics/pokemon/enamorus/shiny.pal +++ b/graphics/pokemon/enamorus/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -153 210 164 -117 60 81 -74 74 74 -141 33 33 -192 79 50 -244 92 19 -179 102 181 -168 87 109 -255 197 60 -233 135 231 -207 131 158 -180 180 189 +153 211 165 +255 255 255 +194 184 173 +115 107 104 16 16 16 -252 252 252 -0 0 0 -0 0 0 +251 142 224 +198 83 185 +127 58 131 +255 197 32 +246 81 4 +205 35 35 +40 40 40 +230 131 164 +189 82 106 +107 51 74 +140 29 49 diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 39b11560d4..8801942e53 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -18880,7 +18880,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //P_FAMILY_LANDORUS #if P_FAMILY_ENAMORUS - const u32 gMonFrontPic_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); + const u32 gMonFrontPic_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/anim_front.4bpp.lz"); const u32 gMonPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); const u32 gMonBackPic_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); const u32 gMonShinyPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index fd86f22ddc..ee08542523 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -7660,7 +7660,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .trainerOffset = 1, .frontPic = gMonFrontPic_EnamorusIncarnate, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 1, + .frontPicYOffset = 0, .frontAnimFrames = sAnims_EnamorusIncarnate, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .enemyMonElevation = 7, @@ -7672,7 +7672,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EnamorusIncarnate, .iconSprite = gMonIcon_EnamorusIncarnate, .iconPalIndex = 1, - SHADOW(0, 17, SHADOW_SIZE_M) + SHADOW(-3, 19, SHADOW_SIZE_M) FOOTPRINT(Enamorus) OVERWORLD( sPicTable_EnamorusIncarnate, diff --git a/src/data/pokemon_graphics/front_pic_anims.h b/src/data/pokemon_graphics/front_pic_anims.h index deceeb0420..56ec319a57 100644 --- a/src/data/pokemon_graphics/front_pic_anims.h +++ b/src/data/pokemon_graphics/front_pic_anims.h @@ -9794,7 +9794,7 @@ PLACEHOLDER_ANIM_SINGLE_FRAME(Calyrex); #endif //P_FAMILY_CALYREX #if P_FAMILY_ENAMORUS -PLACEHOLDER_ANIM_SINGLE_FRAME(EnamorusIncarnate); +PLACEHOLDER_ANIM_TWO_FRAMES(EnamorusIncarnate); PLACEHOLDER_ANIM_SINGLE_FRAME(EnamorusTherian); #endif //P_FAMILY_ENAMORUS From 861c579c11d995c1f5d3c7d3c591988935913697 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 13 Dec 2024 23:39:51 +0100 Subject: [PATCH 480/544] remove sBirchSpeechPlatformBlackPal (#2075) --- graphics/birch_speech/bg2.pal | 10 +++++++++- src/main_menu.c | 3 +-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/graphics/birch_speech/bg2.pal b/graphics/birch_speech/bg2.pal index 3457f9b455..33f619ee44 100644 --- a/graphics/birch_speech/bg2.pal +++ b/graphics/birch_speech/bg2.pal @@ -1,6 +1,6 @@ JASC-PAL 0100 -8 +16 255 255 164 255 255 106 222 222 90 @@ -9,3 +9,11 @@ JASC-PAL 123 123 49 90 90 32 57 57 16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/src/main_menu.c b/src/main_menu.c index 6a6ee99557..10b34728b3 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -255,7 +255,6 @@ static const u16 sBirchSpeechBgPals[][16] = { static const u32 sBirchSpeechShadowGfx[] = INCBIN_U32("graphics/birch_speech/shadow.4bpp.lz"); static const u32 sBirchSpeechBgMap[] = INCBIN_U32("graphics/birch_speech/map.bin.lz"); static const u16 sBirchSpeechBgGradientPal[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal"); -static const u16 sBirchSpeechPlatformBlackPal[] = {RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK}; #define MENU_LEFT 2 #define MENU_TOP_WIN0 1 @@ -1278,7 +1277,7 @@ static void Task_NewGameBirchSpeech_Init(u8 taskId) LZ77UnCompVram(sBirchSpeechShadowGfx, (void *)VRAM); LZ77UnCompVram(sBirchSpeechBgMap, (void *)(BG_SCREEN_ADDR(7))); LoadPalette(sBirchSpeechBgPals, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP); - LoadPalette(sBirchSpeechPlatformBlackPal, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(8)); + LoadPalette(&sBirchSpeechBgGradientPal[8], BG_PLTT_ID(0) + 1, PLTT_SIZEOF(8)); ScanlineEffect_Stop(); ResetSpriteData(); FreeAllSpritePalettes(); From beeca545aa8dfc1c38f826f5b8ecbba84f6624b3 Mon Sep 17 00:00:00 2001 From: RavePossum <145081120+ravepossum@users.noreply.github.com> Date: Sun, 15 Dec 2024 09:10:42 -0500 Subject: [PATCH 481/544] Fix HGSS dex sort orders working incorrectly (#5790) --- src/pokedex_plus_hgss.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 74b57fa3a5..8782044769 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -2560,11 +2560,11 @@ static void CreatePokedexList(u8 dexMode, u8 order) } break; case ORDER_ALPHABETICAL: - for (i = 0; i < NUM_SPECIES - 1; i++) + for (i = 0; i < NATIONAL_DEX_COUNT; i++) { temp_dexNum = gPokedexOrder_Alphabetical[i]; - if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN)) + if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2578,7 +2578,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Weight[i]; - if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) + if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2592,7 +2592,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Weight[i]; - if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) + if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2606,7 +2606,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Height[i]; - if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) + if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; @@ -2620,7 +2620,7 @@ static void CreatePokedexList(u8 dexMode, u8 order) { temp_dexNum = gPokedexOrder_Height[i]; - if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) + if ((!temp_isHoennDex || NationalToHoennOrder(temp_dexNum) != 0) && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT)) { sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum; sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE; From c7a2ef337197ae1acfd6cd3cf8577b6b4a904a4f Mon Sep 17 00:00:00 2001 From: iriv24 <40581123+iriv24@users.noreply.github.com> Date: Sun, 15 Dec 2024 10:04:06 -0500 Subject: [PATCH 482/544] Prevent Key Items that open other menus from causing a crash if registered and used from the field (#5810) --- src/item_use.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/item_use.c b/src/item_use.c index c04d9b9911..c9be4f5caa 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1400,9 +1400,17 @@ void ItemUseOutOfBattle_ZygardeCube(u8 taskId) void ItemUseOutOfBattle_Fusion(u8 taskId) { - gItemUseCB = ItemUseCB_Fusion; - gTasks[taskId].data[0] = FALSE; - SetUpItemUseCallback(taskId); + if (!gTasks[taskId].tUsingRegisteredKeyItem) + { + gItemUseCB = ItemUseCB_Fusion; + gTasks[taskId].data[0] = FALSE; + SetUpItemUseCallback(taskId); + } + else + { + // TODO: handle key items with callbacks to menus allow to be used by registering them. + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } } void Task_UseHoneyOnField(u8 taskId) @@ -1552,10 +1560,18 @@ static void ItemUseOnFieldCB_TownMap(u8 taskId) void ItemUseOutOfBattle_TownMap(u8 taskId) { - sItemUseOnFieldCB = ItemUseOnFieldCB_TownMap; - gFieldCallback = FieldCB_UseItemOnField; - gBagMenu->newScreenCallback = CB2_ReturnToField; - Task_FadeAndCloseBagMenu(taskId); + if (!gTasks[taskId].tUsingRegisteredKeyItem) + { + sItemUseOnFieldCB = ItemUseOnFieldCB_TownMap; + gFieldCallback = FieldCB_UseItemOnField; + gBagMenu->newScreenCallback = CB2_ReturnToField; + Task_FadeAndCloseBagMenu(taskId); + } + else + { + // TODO: handle key items with callbacks to menus allow to be used by registering them. + DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem); + } } #undef tUsingRegisteredKeyItem From 39bc916ca82879a86e33b4ee197575cac390c5d9 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 15 Dec 2024 12:04:30 -0300 Subject: [PATCH 483/544] Fix website not showing the "How to add mon" 1.10 tutorial (#5813) --- docs/SUMMARY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 597534e318..21584f3ad7 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -12,6 +12,7 @@ - [How to add a new move](tutorials/how_to_new_move.md) - [How to add a new trainer class](tutorials/how_to_trainer_class.md) - [How to add a new Pokémon]() + - [v1.10.x](tutorials/how_to_new_pokemon_1_10_0.md) - [v1.9.x](tutorials/how_to_new_pokemon_1_9_0.md) - [v1.8.x](tutorials/how_to_new_pokemon_1_8_0.md) - [v1.7.x](tutorials/how_to_new_pokemon_1_7_0.md) From 12f199c641996798c852492230fc1b8c59df5bd3 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:54:50 +0100 Subject: [PATCH 484/544] Fixes absorb still draining HP when flinched (#5814) --- src/battle_script_commands.c | 4 +++- test/battle/move_effect/absorb.c | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 12a2e215bf..f37a18b2ed 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5674,7 +5674,9 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_ABSORB: - if (gMovesInfo[gCurrentMove].effect == EFFECT_ABSORB) + if (gMovesInfo[gCurrentMove].effect == EFFECT_ABSORB + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + && TARGET_TURN_DAMAGED) { if (gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && gMovesInfo[gCurrentMove].healingMove) { diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index d046876b1b..f06c970585 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -125,4 +125,20 @@ SINGLE_BATTLE_TEST("Draining Kiss recovers 75% of the damage dealt") } } +SINGLE_BATTLE_TEST("Absorb does not drain any HP if user flinched") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_ABSORB); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); + MESSAGE("The opposing Wobbuffet had its energy drained!"); + } + } +} + TO_DO_BATTLE_TEST("Absorb recovers 50% of the damage dealt to a Substitute"); From 99ba36b446c79c4b671077c966a71eeacfc9c446 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 17 Dec 2024 09:47:37 +0100 Subject: [PATCH 485/544] Fixes Tidy Up (#5819) --- data/battle_scripts_1.s | 6 ++++++ src/battle_script_commands.c | 4 ++-- test/battle/move_effect/tidy_up.c | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 1eb74cea31..2441b9547d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -134,7 +134,11 @@ BattleScript_EffectTidyUp:: pause B_WAIT_TIME_MED ppreduce waitstate + saveattacker + savetarget trytidyup FALSE, BattleScript_EffectTidyUpDoMoveAnimation + restoreattacker + restoretarget goto BattleScript_EffectDragonDanceFromStatUp BattleScript_EffectTidyUpDoMoveAnimation:: @@ -143,6 +147,8 @@ BattleScript_EffectTidyUpDoMoveAnimation:: trytidyup TRUE, NULL printstring STRINGID_TIDYINGUPCOMPLETE waitmessage B_WAIT_TIME_LONG + restoreattacker + restoretarget goto BattleScript_EffectDragonDanceFromStatUp BattleScript_EffectUpperHand:: diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index f37a18b2ed..1d03cf3f56 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8839,8 +8839,8 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) static bool32 TryTidyUpClear(u32 battlerAtk, bool32 clear) { - s32 i; - u8 saveBattler = gBattlerAttacker; + u32 i; + u32 saveBattler = gBattlerAttacker; for (i = 0; i < NUM_BATTLE_SIDES; i++) { diff --git a/test/battle/move_effect/tidy_up.c b/test/battle/move_effect/tidy_up.c index 986e9a2ba3..fcb78ba962 100644 --- a/test/battle/move_effect/tidy_up.c +++ b/test/battle/move_effect/tidy_up.c @@ -99,3 +99,24 @@ AI_SINGLE_BATTLE_TEST("AI will try to remove hazards if slower then target even TURN { EXPECT_MOVE(opponent, MOVE_TIDY_UP); } } } + +SINGLE_BATTLE_TEST("Tidy Up raises Attack and Speed by one after clearing hazards on opposing field") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); } + TURN { MOVE(player, MOVE_TIDY_UP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TIDY_UP, player); + MESSAGE("Tidying up complete!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Attack rose!"); + MESSAGE("Wobbuffet's Speed rose!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); + } +} From 11bc9bd2f2c9067b2de21f8a902902febbba2809 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Wed, 18 Dec 2024 08:39:34 -0500 Subject: [PATCH 486/544] Ally Switch extra battlerId tracking (#5823) Co-authored-by: ghoulslash --- src/battle_anim_effects_1.c | 77 +++++++++++++++++++++++++++ test/battle/move_effect/ally_switch.c | 74 +++++++++++++++++++++++++ test/battle/move_effect/sticky_web.c | 28 ++++++++++ 3 files changed, 179 insertions(+) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index d5efe499eb..1d50cee3d1 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -6642,6 +6642,79 @@ static void ReloadBattlerSprites(u32 battler, struct Pokemon *party) } } +static void TrySwapSkyDropTargets(u32 battlerAtk, u32 battlerPartner) +{ + u32 i, temp; + + // battlerAtk is using Ally Switch + // check if our partner is the target of sky drop + // If so, change that index to battlerAtk + for (i = 0; i < gBattlersCount; i++) { + if (gBattleStruct->skyDropTargets[i] == battlerPartner) { + gBattleStruct->skyDropTargets[i] = battlerAtk; + break; + } + } + + // Then swap our own sky drop targets with the partner in case our partner is mid-skydrop + SWAP(gBattleStruct->skyDropTargets[battlerAtk], gBattleStruct->skyDropTargets[battlerPartner], temp); +} + +#define TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, side, field) \ + if (gSideTimers[side].field == battlerAtk) \ + gSideTimers[side].field = battlerPartner; \ + else if (gSideTimers[side].field == battlerPartner) \ + gSideTimers[side].field = battlerAtk; + +static void TrySwapStickyWebBattlerId(u32 battlerAtk, u32 battlerPartner) +{ + u32 atkSide = GetBattlerSide(battlerAtk); + u32 oppSide = GetBattlerSide(BATTLE_OPPOSITE(battlerAtk)); + + // not all of these are needed to be swapped, but are done so to be robust to anything in the future that might care about them + TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, atkSide, reflectBattlerId); + TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, atkSide, lightscreenBattlerId); + TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, atkSide, mistBattlerId); + TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, atkSide, safeguardBattlerId); + TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, atkSide, auroraVeilBattlerId); + TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, atkSide, tailwindBattlerId); + TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, atkSide, luckyChantBattlerId); + + // if we've set sticky web on the opposing side, need to swap stickyWebBattlerId for mirror armor + TRY_SIDE_TIMER_BATTLER_ID_SWAP(battlerAtk, battlerPartner, oppSide, stickyWebBattlerId); +} +#undef TRY_SIDE_TIMER_BATTLER_ID_SWAP + +static void TrySwapWishBattlerIds(u32 battlerAtk, u32 battlerPartner) +{ + u32 i, temp; + u32 oppSide = GetBattlerSide(BATTLE_OPPOSITE(battlerAtk)); + + // if used future sight on opposing side, properly track who used it + if (gSideStatuses[oppSide] & SIDE_STATUS_FUTUREATTACK) { + for (i = 0; i < gBattlersCount; i++) { + if (IsAlly(i,battlerAtk)) + continue; // only on opposing side + if (gWishFutureKnock.futureSightBattlerIndex[i] == battlerAtk) { + // if target was attacked with future sight from us, now they'll be the partner slot + gWishFutureKnock.futureSightBattlerIndex[i] = battlerPartner; + gWishFutureKnock.futureSightPartyIndex[i] = gBattlerPartyIndexes[battlerPartner]; + break; + } else if (gWishFutureKnock.futureSightBattlerIndex[i] == battlerPartner) { + gWishFutureKnock.futureSightBattlerIndex[i] = battlerAtk; + gWishFutureKnock.futureSightPartyIndex[i] = gBattlerPartyIndexes[battlerAtk]; + break; + } + } + } + + // swap wish party indices + if (gWishFutureKnock.wishCounter[battlerAtk] > 0 + || gWishFutureKnock.wishCounter[battlerPartner] > 0) { + SWAP(gWishFutureKnock.wishPartyId[battlerAtk], gWishFutureKnock.wishPartyId[battlerPartner], temp); + } +} + static void AnimTask_AllySwitchDataSwap(u8 taskId) { s32 i, j; @@ -6692,6 +6765,10 @@ static void AnimTask_AllySwitchDataSwap(u8 taskId) SwitchTwoBattlersInParty(battlerAtk, battlerPartner); SWAP(gBattlerPartyIndexes[battlerAtk], gBattlerPartyIndexes[battlerPartner], temp); + TrySwapSkyDropTargets(battlerAtk, battlerPartner); + TrySwapStickyWebBattlerId(battlerAtk, battlerPartner); + TrySwapWishBattlerIds(battlerAtk, battlerPartner); + // For Snipe Shot and abilities Stalwart/Propeller Tail - keep the original target. for (i = 0; i < MAX_BATTLERS_COUNT; i++) { diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index c7aa52d7c5..974730f120 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -203,5 +203,79 @@ DOUBLE_BATTLE_TEST("Ally Switch works if ally used two-turn move like Dig") } } +DOUBLE_BATTLE_TEST("Ally switch swaps sky drop targets if being used by partner") +{ + u8 visibility; + GIVEN { + ASSUME(gMovesInfo[MOVE_SKY_DROP].effect == EFFECT_SKY_DROP); + PLAYER(SPECIES_FEAROW) { Speed(100); } + PLAYER(SPECIES_XATU) { Speed(150); } + OPPONENT(SPECIES_ARON) { Speed(25); Ability(ABILITY_STURDY); } + OPPONENT(SPECIES_WYNAUT) { Speed(30); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SKY_DROP, target: opponentLeft); } + TURN { MOVE(playerRight, MOVE_ALLY_SWITCH); SKIP_TURN(playerLeft); MOVE(opponentRight, MOVE_MUD_SPORT); MOVE(opponentLeft, MOVE_IRON_DEFENSE); } + } SCENE { + MESSAGE("Fearow used Sky Drop!"); + MESSAGE("Fearow took the opposing Aron into the sky!"); + // turn 2 + MESSAGE("Xatu used Ally Switch!"); + MESSAGE("Xatu and Fearow switched places!"); + MESSAGE("Fearow used Sky Drop!"); + HP_BAR(opponentLeft); + MESSAGE("The opposing Wynaut used Mud Sport!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MUD_SPORT, opponentRight); + MESSAGE("The opposing Aron used Iron Defense!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_IRON_DEFENSE, opponentLeft); + } THEN { + // all battlers should be visible + visibility = gBattleSpritesDataPtr->battlerData[0].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[1].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[2].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[3].invisible; + EXPECT_EQ(visibility, 0); + } +} + +DOUBLE_BATTLE_TEST("Ally switch swaps opposing sky drop targets if partner is being held in the air") +{ + u8 visibility; + GIVEN { + ASSUME(gMovesInfo[MOVE_SKY_DROP].effect == EFFECT_SKY_DROP); + PLAYER(SPECIES_ARON) { Speed(25); Ability(ABILITY_STURDY); } + PLAYER(SPECIES_WYNAUT) { Speed(30); } + OPPONENT(SPECIES_FEAROW) { Speed(100); } + OPPONENT(SPECIES_XATU) { Speed(150); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SKY_DROP, target: playerLeft); } + TURN { MOVE(opponentRight, MOVE_ALLY_SWITCH); SKIP_TURN(opponentLeft); MOVE(playerRight, MOVE_MUD_SPORT); MOVE(playerLeft, MOVE_IRON_DEFENSE); } + } SCENE { + MESSAGE("The opposing Fearow used Sky Drop!"); + MESSAGE("The opposing Fearow took Aron into the sky!"); + // turn 2 + MESSAGE("The opposing Xatu used Ally Switch!"); + MESSAGE("The opposing Xatu and the opposing Fearow switched places!"); + MESSAGE("The opposing Fearow used Sky Drop!"); + HP_BAR(playerLeft); + MESSAGE("Wynaut used Mud Sport!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MUD_SPORT, playerRight); + MESSAGE("Aron used Iron Defense!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_IRON_DEFENSE, playerLeft); + } THEN { + // all battlers should be visible + visibility = gBattleSpritesDataPtr->battlerData[0].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[1].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[2].invisible; + EXPECT_EQ(visibility, 0); + visibility = gBattleSpritesDataPtr->battlerData[3].invisible; + EXPECT_EQ(visibility, 0); + } +} + // Triple Battles required to test //TO_DO_BATTLE_TEST("Ally Switch fails if the user is in the middle of the field in a Triple Battle"); diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index f1fff0fd1e..e99368aa7d 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -271,3 +271,31 @@ SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Memento") MESSAGE("A sticky web has been laid out on the ground around your team!"); } } + +DOUBLE_BATTLE_TEST("Sticky Web setter has their speed lowered with Mirror Armor even after Ally Switch") +{ + GIVEN { + PLAYER(SPECIES_SQUIRTLE); + PLAYER(SPECIES_CHARMANDER); + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); } // Iron Ball, so that flying type Corviknight is affected by Sticky Web. + OPPONENT(SPECIES_CATERPIE); + OPPONENT(SPECIES_NATU); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_STICKY_WEB); } + TURN { MOVE(opponentRight, MOVE_ALLY_SWITCH); } + TURN { SWITCH(playerRight, 2); } + } SCENE { + // Turn 1 - set up sticky web + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); + MESSAGE("A sticky web has been laid out on the ground around your team!"); + // Turn 2 - ally switch + MESSAGE("The opposing Natu used Ally Switch!"); + // turn 3 - send our corviknight + SEND_IN_MESSAGE("Corviknight"); + MESSAGE("Corviknight was caught in a sticky web!"); + ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); + // sticky web setter - caterpie (now opponentRight) gets speed lowered + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("The opposing Caterpie's Speed fell!"); + } +} From 8f59d9c94fcd29163b5c03ebc2389aef4ea8de79 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 18 Dec 2024 21:39:32 +0100 Subject: [PATCH 487/544] Fixes Shed Tail substitute health (#5826) --- src/battle_script_commands.c | 5 ++++- test/battle/move_effect/shed_tail.c | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1d03cf3f56..7d342b0b73 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12638,7 +12638,10 @@ static void Cmd_setsubstitute(void) gBattleMons[gBattlerAttacker].status2 |= STATUS2_SUBSTITUTE; gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_WRAPPED; - gDisableStructs[gBattlerAttacker].substituteHP = gBattleMoveDamage; + if (factor == 2) + gDisableStructs[gBattlerAttacker].substituteHP = gBattleMoveDamage / 2; + else + gDisableStructs[gBattlerAttacker].substituteHP = gBattleMoveDamage; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SUBSTITUTE; gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE; } diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c index 51d7652460..6e337f4fe7 100644 --- a/test/battle/move_effect/shed_tail.c +++ b/test/battle/move_effect/shed_tail.c @@ -99,3 +99,26 @@ AI_SINGLE_BATTLE_TEST("AI will use Shed Tail to pivot to another mon while in da TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_SHED_TAIL); } } } + +SINGLE_BATTLE_TEST("Shed Tail creates a Substitute with 1/4 of user maximum health") +{ + u32 hp; + PARAMETRIZE { hp = 160; } + PARAMETRIZE { hp = 164; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].argument == 40); + ASSUME(gMovesInfo[MOVE_DRAGON_RAGE].effect == EFFECT_FIXED_DAMAGE_ARG); + PLAYER(SPECIES_BULBASAUR) { MaxHP(hp); } + PLAYER(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + } WHEN { + TURN { MOVE(player, MOVE_SHED_TAIL); MOVE(opponent, MOVE_DRAGON_RAGE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHED_TAIL, player); + if (hp == 160) + MESSAGE("Bulbasaur's substitute faded!"); + else + NOT MESSAGE("Bulbasaur's substitute faded!"); + } +} From f4a0cc0055b4117d2f8b90da3cfc573be70be0a9 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:51:03 +0000 Subject: [PATCH 488/544] Adds Thief/Covet config to send stolen item to bag and Pickup config to pickup user's item in wild battles (#5829) --- include/config/battle.h | 2 + src/battle_script_commands.c | 34 +++-- src/battle_util.c | 2 +- test/battle/ability/pickup.c | 19 ++- .../battle/move_effect_secondary/steal_item.c | 129 ++++++++++++++++++ 5 files changed, 174 insertions(+), 12 deletions(-) create mode 100644 test/battle/move_effect_secondary/steal_item.c diff --git a/include/config/battle.h b/include/config/battle.h index f38be8949c..db3e6dcc77 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -154,6 +154,7 @@ #define B_ABILITY_TRIGGER_CHANCE GEN_LATEST // In Gen3, Shed Skin, Cute Charm, Flame Body, Static and Poison Point have a 1/3 chance to trigger. In Gen 4+ it's 30%. // In Gen3, Effect Spore has a 10% chance to sleep, poison or paralyze, with an equal chance. // In Gen4, it's 30%. In Gen5+ it has 11% to sleep, 9% chance to poison and 10% chance to paralyze. +#define B_PICKUP_WILD GEN_LATEST // In Gen9+, Pickup allows its user to pickup its own used item at the end of the turn in wild battles. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore HP activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. @@ -163,6 +164,7 @@ #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_RETURN_STOLEN_NPC_ITEMS GEN_LATEST // In Gen5+, Thief and Covet no longer steal items from NPCs. +#define B_STEAL_WILD_ITEMS GEN_LATEST // In Gen9, Thief and Covet steal a wild pokemon's item and send it to the bag. Before Gen9, the stolen item would be held by the Thief/Covet user. #define B_RESTORE_HELD_BATTLE_ITEMS GEN_LATEST // In Gen9, all non-berry items are restored after battle. #define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Latis' 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. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 7d342b0b73..1bbef29586 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2852,17 +2852,26 @@ static void CheckSetUnburden(u8 battler) void StealTargetItem(u8 battlerStealer, u8 battlerItem) { gLastUsedItem = gBattleMons[battlerItem].item; - gBattleMons[battlerItem].item = 0; + gBattleMons[battlerItem].item = ITEM_NONE; - RecordItemEffectBattle(battlerItem, 0); - RecordItemEffectBattle(battlerStealer, ItemId_GetHoldEffect(gLastUsedItem)); - gBattleMons[battlerStealer].item = gLastUsedItem; + if (B_STEAL_WILD_ITEMS >= GEN_9 + && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE)) + && MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_STEAL_ITEM) + && battlerStealer == gBattlerAttacker) // ensure that Pickpocket isn't activating this + { + AddBagItem(gLastUsedItem, 1); + } + else + { + RecordItemEffectBattle(battlerStealer, ItemId_GetHoldEffect(gLastUsedItem)); + gBattleMons[battlerStealer].item = gLastUsedItem; + gBattleResources->flags->flags[battlerStealer] &= ~RESOURCE_FLAG_UNBURDEN; + BtlController_EmitSetMonData(battlerStealer, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gLastUsedItem), &gLastUsedItem); // set attacker item + MarkBattlerForControllerExec(battlerStealer); + } + RecordItemEffectBattle(battlerItem, ITEM_NONE); CheckSetUnburden(battlerItem); - gBattleResources->flags->flags[battlerStealer] &= ~RESOURCE_FLAG_UNBURDEN; - - BtlController_EmitSetMonData(battlerStealer, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gLastUsedItem), &gLastUsedItem); // set attacker item - MarkBattlerForControllerExec(battlerStealer); BtlController_EmitSetMonData(battlerItem, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gBattlerTarget].item), &gBattleMons[battlerItem].item); // remove target item MarkBattlerForControllerExec(battlerItem); @@ -3544,8 +3553,13 @@ void SetMoveEffect(bool32 primary, bool32 certain) else { StealTargetItem(gBattlerAttacker, gBattlerTarget); // Attacker steals target item - gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS) - gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later + + if (!(B_STEAL_WILD_ITEMS >= GEN_9 + && !(gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_PALACE)))) + { + gBattleMons[gBattlerAttacker].item = ITEM_NONE; // Item assigned later on with thief (see MOVEEND_CHANGED_ITEMS) + gBattleStruct->changedItems[gBattlerAttacker] = gLastUsedItem; // Stolen item to be assigned later + } BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_ItemSteal; } diff --git a/src/battle_util.c b/src/battle_util.c index d2f5314742..def2742a1b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -11557,7 +11557,7 @@ u16 GetUsedHeldItem(u32 battler) bool32 CantPickupItem(u32 battler) { // Used by RandomUniformExcept() for RNG_PICKUP - if (battler == gBattlerAttacker && gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK)) + if (battler == gBattlerAttacker && (B_PICKUP_WILD < GEN_9 || gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK))) return TRUE; return !(IsBattlerAlive(battler) && GetUsedHeldItem(battler) && gBattleStruct->canPickupItem & (1u << battler)); } diff --git a/test/battle/ability/pickup.c b/test/battle/ability/pickup.c index 927e1b3468..a6dabb66cc 100644 --- a/test/battle/ability/pickup.c +++ b/test/battle/ability/pickup.c @@ -23,7 +23,24 @@ SINGLE_BATTLE_TEST("Pickup grants an item used by another Pokémon") } } -SINGLE_BATTLE_TEST("Pickup doesn't grant the user their item") +WILD_BATTLE_TEST("Pickup grants an item used by itself in wild battles (Gen 9)") +{ + GIVEN { + ASSUME(B_PICKUP_WILD >= GEN_9); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } THEN { + EXPECT_EQ(player->item, ITEM_SITRUS_BERRY); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant the user their item outside wild battles") { GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect_secondary/steal_item.c b/test/battle/move_effect_secondary/steal_item.c new file mode 100644 index 0000000000..8a4ae931d2 --- /dev/null +++ b/test/battle/move_effect_secondary/steal_item.c @@ -0,0 +1,129 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_THIEF, MOVE_EFFECT_STEAL_ITEM) == TRUE); + ASSUME(MoveHasAdditionalEffect(MOVE_COVET, MOVE_EFFECT_STEAL_ITEM) == TRUE); +} + +SINGLE_BATTLE_TEST("Thief and Covet steal target's held item") +{ + u32 move; + PARAMETRIZE { move = MOVE_THIEF; } + PARAMETRIZE { move = MOVE_COVET; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_HYPER_POTION); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_STEAL, opponent); + } THEN { + EXPECT_EQ(player->item, ITEM_HYPER_POTION); + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Thief and Covet steal player's held item if opponent is a trainer") +{ + u32 move; + PARAMETRIZE { move = MOVE_THIEF; } + PARAMETRIZE { move = MOVE_COVET; } + GIVEN { + ASSUME(B_TRAINERS_KNOCK_OFF_ITEMS == TRUE); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_HYPER_POTION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_STEAL, player); + } THEN { + EXPECT_EQ(opponent->item, ITEM_HYPER_POTION); + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +WILD_BATTLE_TEST("Thief and Covet don't steal player's held item if opponent is a wild mon") +{ + u32 move; + PARAMETRIZE { move = MOVE_THIEF; } + PARAMETRIZE { move = MOVE_COVET; } + GIVEN { + ASSUME(B_TRAINERS_KNOCK_OFF_ITEMS == TRUE); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_HYPER_POTION); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + HP_BAR(player); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_STEAL, player); + } THEN { + EXPECT_EQ(player->item, ITEM_HYPER_POTION); + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Thief and Covet don't steal target's held item if user is holding an item") +{ + u32 move; + PARAMETRIZE { move = MOVE_THIEF; } + PARAMETRIZE { move = MOVE_COVET; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_POTION); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_HYPER_POTION); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_STEAL, opponent); + } THEN { + EXPECT_EQ(player->item, ITEM_POTION); + EXPECT_EQ(opponent->item, ITEM_HYPER_POTION); + } +} + +SINGLE_BATTLE_TEST("Thief and Covet don't steal target's held item if target has no item") +{ + u32 move; + PARAMETRIZE { move = MOVE_THIEF; } + PARAMETRIZE { move = MOVE_COVET; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_STEAL, opponent); + } +} + +// Test can't currently verify if the item is sent to Bag +WILD_BATTLE_TEST("Thief and Covet steal target's held item and it's added to Bag in wild battles (Gen 9)") +{ + u32 move; + PARAMETRIZE { move = MOVE_THIEF; } + PARAMETRIZE { move = MOVE_COVET; } + GIVEN { + ASSUME(B_STEAL_WILD_ITEMS >= GEN_9); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_HYPER_POTION); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_STEAL, opponent); + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} From 6bba281360f0a1a0b03007e1154eb0c47a20396a Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Thu, 19 Dec 2024 12:54:42 +0000 Subject: [PATCH 489/544] Fixes Clear Amulet displaying the wrong battler and Starting Status displaying the wrong message (#5831) --- src/battle_message.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 76b9fde5cc..7841c18eac 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -707,7 +707,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_NOONEWILLBEABLETORUNAWAY] = COMPOUND_STRING("No one will be able to run away during the next turn!"), [STRINGID_DESTINYKNOTACTIVATES] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"), [STRINGID_CLOAKEDINAFREEZINGLIGHT] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} became cloaked in a freezing light!"), - [STRINGID_CLEARAMULETWONTLOWERSTATS] = COMPOUND_STRING("The effects of the {B_LAST_ITEM} held by {B_DEF_NAME_WITH_PREFIX2} prevents its stats from being lowered!"), + [STRINGID_CLEARAMULETWONTLOWERSTATS] = COMPOUND_STRING("The effects of the {B_LAST_ITEM} held by {B_SCR_NAME_WITH_PREFIX2} prevents its stats from being lowered!"), [STRINGID_FERVENTWISHREACHED] = COMPOUND_STRING("{B_ATK_TRAINER_NAME}'s fervent wish has reached {B_ATK_NAME_WITH_PREFIX2}!"), [STRINGID_AIRLOCKACTIVATES] = COMPOUND_STRING("The effects of the weather disappeared."), [STRINGID_PRESSUREENTERS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} is exerting its pressure!"), @@ -1286,7 +1286,10 @@ const u16 gWeatherStartsStringIds[] = const u16 gTerrainStartsStringIds[] = { - STRINGID_MISTSWIRLSAROUND, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_ISCOVEREDWITHGRASS, STRINGID_SEEMSWEIRD, + [B_MSG_TERRAIN_SET_MISTY] = STRINGID_MISTSWIRLSAROUND, + [B_MSG_TERRAIN_SET_ELECTRIC] = STRINGID_ELECTRICCURRENTISRUNNING, + [B_MSG_TERRAIN_SET_PSYCHIC] = STRINGID_SEEMSWEIRD, + [B_MSG_TERRAIN_SET_GRASSY] = STRINGID_ISCOVEREDWITHGRASS, }; const u16 gPrimalWeatherBlocksStringIds[] = From b22a867e119268e898e18dfb47cfc5f7bf308c89 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:12:01 +0100 Subject: [PATCH 490/544] Fixes Room Service (#5827) --- data/battle_scripts_1.s | 2 +- src/battle_script_commands.c | 5 +++- test/battle/hold_effect/room_service.c | 33 ++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 test/battle/hold_effect/room_service.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2441b9547d..d8eb279661 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9101,7 +9101,7 @@ BattleScript_BerryStatRaiseEnd2:: BattleScript_BerryStatRaiseEnd2_AbilityPopup: call BattleScript_AbilityPopUp BattleScript_BerryStatRaiseEnd2_Anim: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseEnd2_End + statbuffchange STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_AFFECTS_USER, BattleScript_BerryStatRaiseEnd2_End setgraphicalstatchangevalues playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1bbef29586..a157d938a3 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11934,7 +11934,10 @@ static void Cmd_statbuffchange(void) const u8 *ptrBefore = gBattlescriptCurrInstr; const u8 *failInstr = cmd->failInstr; - if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), GET_STAT_BUFF_ID(gBattleScripting.statChanger), flags, failInstr) == STAT_CHANGE_WORKED) + if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), + GET_STAT_BUFF_ID(gBattleScripting.statChanger), + flags, + failInstr) == STAT_CHANGE_WORKED) gBattlescriptCurrInstr = cmd->nextInstr; else if (gBattlescriptCurrInstr == ptrBefore) // Prevent infinite looping. gBattlescriptCurrInstr = failInstr; diff --git a/test/battle/hold_effect/room_service.c b/test/battle/hold_effect/room_service.c new file mode 100644 index 0000000000..04b6450e05 --- /dev/null +++ b/test/battle/hold_effect/room_service.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_ROOM_SERVICE].holdEffect == HOLD_EFFECT_ROOM_SERVICE); +} + +SINGLE_BATTLE_TEST("Room Serive decreases the holder's seep by one stage") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE); + ASSUME(gMovesInfo[MOVE_TRICK_ROOM].effect == EFFECT_TRICK_ROOM); + ASSUME(gMovesInfo[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); Item(ITEM_ROOM_SERVICE); } + OPPONENT(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_TRICK_ROOM); } + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK_ROOM, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + HP_BAR(opponent); + MESSAGE("2 sent out Wynaut!"); + ABILITY_POPUP(player, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + } THEN { + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); + } +} From a797e901b25a793441b1b20644025bf23cebaa7c Mon Sep 17 00:00:00 2001 From: AERDU Date: Fri, 20 Dec 2024 08:46:58 +0000 Subject: [PATCH 491/544] B_LAST_USED_BALL and .importance (#5834) --- src/battle_util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index def2742a1b..5644696776 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -569,7 +569,8 @@ void HandleAction_ThrowBall(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; gLastUsedItem = gBallToDisplay; - RemoveBagItem(gLastUsedItem, 1); + if (!ItemId_GetImportance(gLastUsedItem)) + RemoveBagItem(gLastUsedItem, 1); gBattlescriptCurrInstr = BattleScript_BallThrow; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } From 4ac9dea30e60d6e82d4eec8988e92b7fc74f829b Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:11:18 +0000 Subject: [PATCH 492/544] Fixes Quash-affected battlers having the wrong order for End Turn effects (#5838) --- src/battle_anim_effects_1.c | 1 + src/battle_util.c | 7 +------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 1d50cee3d1..da0faed032 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -6757,6 +6757,7 @@ static void AnimTask_AllySwitchDataSwap(u8 taskId) break; } SWAP(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], temp); + SWAP(gActionsByTurnOrder[i], gActionsByTurnOrder[j], temp); break; } } diff --git a/src/battle_util.c b/src/battle_util.c index 5644696776..0776b6e392 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1679,17 +1679,12 @@ u8 DoFieldEndTurnEffects(void) switch (gBattleStruct->turnCountersTracker) { case ENDTURN_ORDER: - for (i = 0; i < gBattlersCount; i++) - { - gBattlerByTurnOrder[i] = i; - } for (i = 0; i < gBattlersCount - 1; i++) { s32 j; for (j = i + 1; j < gBattlersCount; j++) { - if (!gProtectStructs[i].quash - && !gProtectStructs[j].quash + if (!(gProtectStructs[i].quash && gProtectStructs[j].quash) && GetWhichBattlerFaster(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE) == -1) SwapTurnOrder(i, j); } From e579333427db46576d44c759ff803ced2bc3b11d Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 20 Dec 2024 11:23:51 +0100 Subject: [PATCH 493/544] Egg cycle length fix (#5828) Co-authored-by: Hedara Co-authored-by: Bassoonian --- include/config/pokemon.h | 2 +- include/global.h | 3 +-- src/daycare.c | 8 +++++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 23015614c0..259ad3c117 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -55,7 +55,7 @@ #define P_SHOW_TERA_TYPE GEN_8 // Since Gen 9, the Tera Type is shown on the summary screen. #define P_TM_LITERACY GEN_LATEST // Since Gen 6, TM illiterate Pokémon can learn TMs that teach moves that are in their level-up learnsets. #define P_CAN_FORGET_HIDDEN_MOVE FALSE // If TRUE, Pokémon can forget any move, even if it is a Hidden Move. -#define P_EGG_CYCLE_LENGTH GEN_LATEST // Since Gen 8, egg cycles take half as many steps as before. +#define P_EGG_CYCLE_LENGTH GEN_LATEST // Since Gen 8, egg cycles take half as many steps as before. Previous Gens have some varied step counts around 255. #define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid won't be shiny. #define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be shiny #define P_SHOW_DYNAMIC_TYPES FALSE // If TRUE, all moves with dynamic type changes will be reflected as their current type in battle/summary screens instead of just select ones like in vanilla. diff --git a/include/global.h b/include/global.h index 5846f09359..687281eaa7 100644 --- a/include/global.h +++ b/include/global.h @@ -815,8 +815,7 @@ struct DayCare { struct DaycareMon mons[DAYCARE_MON_COUNT]; u32 offspringPersonality; - u8 stepCounter; - //u8 padding[3]; + u32 stepCounter; }; struct LilycoveLadyQuiz diff --git a/src/daycare.c b/src/daycare.c index 013e0b05ba..912537af56 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1154,11 +1154,17 @@ static bool8 TryProduceOrHatchEgg(struct DayCare *daycare) } // Try to hatch Egg - if (++daycare->stepCounter == ((P_EGG_CYCLE_LENGTH >= GEN_8) ? 127 : 255)) + daycare->stepCounter++; + if (((P_EGG_CYCLE_LENGTH <= GEN_3 || P_EGG_CYCLE_LENGTH == GEN_7) && daycare->stepCounter >= 256) + || (P_EGG_CYCLE_LENGTH == GEN_4 && daycare->stepCounter >= 255) + || ((P_EGG_CYCLE_LENGTH == GEN_5 || P_EGG_CYCLE_LENGTH == GEN_6) && daycare->stepCounter >= 257) + || (P_EGG_CYCLE_LENGTH >= GEN_8 && daycare->stepCounter >= 128)) { u32 eggCycles; u8 toSub = GetEggCyclesToSubtract(); + daycare->stepCounter = 0; + for (i = 0; i < gPlayerPartyCount; i++) { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) From 5cc0b35d81c657fefb8fc82ad683d7e17766a096 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 20 Dec 2024 12:20:46 +0100 Subject: [PATCH 494/544] Replace power checks with IS_MOVE_STATUS (#5820) Co-authored-by: Eduardo Quezada --- include/battle.h | 6 +++--- src/battle_ai_main.c | 8 ++++---- src/battle_ai_switch_items.c | 14 +++++++------- src/battle_ai_util.c | 4 ++-- src/battle_arena.c | 4 ++-- src/battle_dome.c | 4 ++-- src/battle_main.c | 2 +- src/battle_script_commands.c | 4 ++-- src/battle_util.c | 6 +++--- test/battle/ability/anger_shell.c | 4 ++-- test/battle/ability/battle_bond.c | 2 +- test/battle/ability/berserk.c | 4 ++-- test/battle/ability/desolate_land.c | 4 ++-- test/battle/ability/electromorphosis.c | 6 +++--- test/battle/ability/frisk.c | 4 ++-- test/battle/ability/innards_out.c | 6 +++--- test/battle/ability/magician.c | 2 +- test/battle/ability/primordial_sea.c | 4 ++-- test/battle/ability/rattled.c | 8 ++++---- test/battle/ability/stamina.c | 4 ++-- test/battle/ability/weak_armor.c | 4 ++-- test/battle/ability/wind_power.c | 8 ++++---- test/battle/form_change/primal_reversion.c | 6 +++--- test/battle/move_effect/charge.c | 4 ++-- 24 files changed, 61 insertions(+), 61 deletions(-) diff --git a/include/battle.h b/include/battle.h index 37f2359641..f0571d747e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -843,9 +843,9 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects. #define F_DYNAMIC_TYPE_SET (1 << 7) // Set for all dynamic types to distinguish a dynamic type of Normal (0) from no dynamic type. -#define IS_MOVE_PHYSICAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) -#define IS_MOVE_SPECIAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_SPECIAL) -#define IS_MOVE_STATUS(move)(gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) +#define IS_MOVE_PHYSICAL(move) (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) +#define IS_MOVE_SPECIAL(move) (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_SPECIAL) +#define IS_MOVE_STATUS(move) (gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) #define IS_MOVE_RECOIL(move)(gMovesInfo[move].recoil > 0 || gMovesInfo[move].effect == EFFECT_RECOIL_IF_MISS) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 3c031de092..d245be8cd5 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -433,7 +433,7 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 if (move != 0 && move != 0xFFFF - //&& gMovesInfo[move].power != 0 /* we want to get effectiveness and accuracy of status moves */ + //&& !IS_MOVE_STATUS(gMovesInfo[move]) /* we want to get effectiveness and accuracy of status moves */ && !(aiData->moveLimitations[battlerAtk] & (1u << moveIndex))) { dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, rollType); @@ -2607,8 +2607,8 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) return score; - if (gMovesInfo[move].power == 0) - return score; // can't make anything faint with no power + if (IS_MOVE_STATUS(move)) + return score; // status moves aren't accounted here if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0) && gMovesInfo[move].effect != EFFECT_EXPLOSION) { @@ -4916,7 +4916,7 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor { if (IS_TARGETING_PARTNER(battlerAtk, battlerDef) || CountUsablePartyMons(battlerAtk) == 0 - || gMovesInfo[move].power != 0 + || !IS_MOVE_STATUS(move) || !HasMoveEffect(battlerAtk, EFFECT_BATON_PASS) || IsBattlerTrapped(battlerAtk, TRUE)) return score; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 47f5cae740..b41daa741b 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -122,8 +122,8 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) hasStatusMove = TRUE; } - // Only check damage if move has power - if (gMovesInfo[aiMove].power != 0) + // Only check damage if it's a damaging move + if (!IS_MOVE_STATUS(aiMove)) { // Check if mon has a super effective move if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= AI_EFFECTIVENESS_x2) @@ -156,7 +156,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { playerMove = gBattleMons[opposingBattler].moves[i]; - if (playerMove != MOVE_NONE && gMovesInfo[playerMove].power != 0) + if (playerMove != MOVE_NONE && !IS_MOVE_STATUS(playerMove)) { damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; if (damageTaken > maxDamageTaken) @@ -1238,7 +1238,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva for (j = 0; j < MAX_MON_MOVES; j++) { aiMove = AI_DATA->switchinCandidate.battleMon.moves[j]; - if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) + if (aiMove != MOVE_NONE && !IS_MOVE_STATUS(aiMove)) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j); dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, rollType); @@ -1694,7 +1694,7 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle for (i = 0; i < MAX_MON_MOVES; i++) { playerMove = gBattleMons[opposingBattler].moves[i]; - if (playerMove != MOVE_NONE && gMovesInfo[playerMove].power != 0) + if (playerMove != MOVE_NONE && !IS_MOVE_STATUS(playerMove)) { damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE, DMG_ROLL_HIGHEST); if (damageTaken > maxDamageTaken) @@ -1822,7 +1822,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, { aiMove = AI_DATA->switchinCandidate.battleMon.moves[j]; - if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) + if (aiMove != MOVE_NONE && !IS_MOVE_STATUS(aiMove)) { if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_CONSERVATIVE) damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST); @@ -1852,7 +1852,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, } // Check for mon with resistance and super effective move for best type matchup mon with effective move - if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) + if (aiMove != MOVE_NONE && !IS_MOVE_STATUS(aiMove)) { if (typeMatchup < bestResistEffective) { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index c033061dc9..267fc476c2 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2378,7 +2378,7 @@ bool32 HasDamagingMove(u32 battlerId) for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && gMovesInfo[moves[i]].power != 0) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !IS_MOVE_STATUS(moves[i])) return TRUE; } @@ -2393,7 +2393,7 @@ bool32 HasDamagingMoveOfType(u32 battlerId, u32 type) for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE - && gMovesInfo[moves[i]].type == type && gMovesInfo[moves[i]].power != 0) + && !IS_MOVE_STATUS(moves[i]].type == type && gMovesInfo[moves[i])) return TRUE; } diff --git a/src/battle_arena.c b/src/battle_arena.c index b292ff8837..8868a4246e 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -360,7 +360,7 @@ void BattleArena_AddMindPoints(u8 battler) // All moves with power != 0 give 1 point, with the following exceptions: // - Counter, Mirror Coat, and Bide give 0 points // - Fake Out subtracts 1 point -// All moves with power == 0 give 0 points, with the following exceptions: +// All status moves give 0 points, with the following exceptions: // - Protect, Detect, and Endure subtract 1 point if (gMovesInfo[gCurrentMove].effect == EFFECT_FIRST_TURN_ONLY @@ -369,7 +369,7 @@ void BattleArena_AddMindPoints(u8 battler) { gBattleStruct->arenaMindPoints[battler]--; } - else if (gMovesInfo[gCurrentMove].power != 0 + else if (!IS_MOVE_STATUS(gCurrentMove) && gMovesInfo[gCurrentMove].effect != EFFECT_COUNTER && gMovesInfo[gCurrentMove].effect != EFFECT_MIRROR_COAT && gMovesInfo[gCurrentMove].effect != EFFECT_METAL_BURST diff --git a/src/battle_dome.c b/src/battle_dome.c index 1d79333290..8b376c7e75 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -4326,7 +4326,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) allocatedArray[k] = IsDomeStatusMoveEffect(move); break; case MOVE_POINTS_DMG: - allocatedArray[k] = (gMovesInfo[move].power != 0) ? 1 : 0; + allocatedArray[k] = (!IS_MOVE_STATUS(move)) ? 1 : 0; break; case MOVE_POINTS_DEF: allocatedArray[k] = IsDomeDefensiveMoveEffect(gMovesInfo[move].effect) ? 1 : 0; @@ -5108,7 +5108,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun moveIds[i * MAX_MON_MOVES + j] = gFacilityTrainerMons[DOME_MONS[winnerTournamentId][i]].moves[j]; movePower = gMovesInfo[moveIds[i * MAX_MON_MOVES + j]].power; - if (movePower == 0) + if (IS_MOVE_STATUS(moveIds[i * MAX_MON_MOVES + j])) movePower = 40; else if (movePower == 1) movePower = 60; diff --git a/src/battle_main.c b/src/battle_main.c index 075dd3dd3c..332f6c461e 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4839,7 +4839,7 @@ s8 GetMovePriority(u32 battler, u16 move) s8 priority; u16 ability = GetBattlerAbility(battler); - if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE && gMovesInfo[move].power != 0) + if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(move)) move = GetUsableZMove(battler, move); priority = gMovesInfo[move].priority; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a157d938a3..2279b35369 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5727,7 +5727,7 @@ static void Cmd_moveend(void) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED - && gMovesInfo[gCurrentMove].power != 0 + && !IS_MOVE_STATUS(gCurrentMove) && CompareStat(gBattlerTarget, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN)) { SET_STATCHANGER(STAT_ATK, 1, FALSE); @@ -8694,7 +8694,7 @@ static void Cmd_useitemonopponent(void) static bool32 HasAttackerFaintedTarget(void) { if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && gMovesInfo[gCurrentMove].power != 0 + && !IS_MOVE_STATUS(gCurrentMove) && (gLastHitBy[gBattlerTarget] == 0xFF || gLastHitBy[gBattlerTarget] == gBattlerAttacker) && gBattleStruct->moveTarget[gBattlerAttacker] == gBattlerTarget && gBattlerTarget != gBattlerAttacker diff --git a/src/battle_util.c b/src/battle_util.c index 0776b6e392..4484fe254a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -225,7 +225,7 @@ void HandleAction_UseMove(void) } else if (IsDoubleBattle() && gSideTimers[side].followmeTimer == 0 - && (gMovesInfo[gCurrentMove].power != 0 || (moveTarget != MOVE_TARGET_USER && moveTarget != MOVE_TARGET_ALL_BATTLERS)) + && (!IS_MOVE_STATUS(gCurrentMove) || (moveTarget != MOVE_TARGET_USER && moveTarget != MOVE_TARGET_ALL_BATTLERS)) && ((GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) || (GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_STORM_DRAIN && moveType == TYPE_WATER))) { @@ -5693,7 +5693,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_COLOR_CHANGE: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && move != MOVE_STRUGGLE - && gMovesInfo[move].power != 0 + && !IS_MOVE_STATUS(move) && TARGET_TURN_DAMAGED && !IS_BATTLER_OF_TYPE(battler, moveType) && moveType != TYPE_STELLAR @@ -8647,7 +8647,7 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) return TRUE; else if (gProtectStructs[battlerDef].spikyShielded) return TRUE; - else if (gProtectStructs[battlerDef].kingsShielded && gMovesInfo[move].power != 0) + else if (gProtectStructs[battlerDef].kingsShielded && !IS_MOVE_STATUS(move)) return TRUE; else if (gProtectStructs[battlerDef].maxGuarded) return TRUE; diff --git a/test/battle/ability/anger_shell.c b/test/battle/ability/anger_shell.c index c5b490216b..cf28fad28c 100644 --- a/test/battle/ability/anger_shell.c +++ b/test/battle/ability/anger_shell.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Anger Shell activates only if the target had more than 50% o PARAMETRIZE { hp = 254; activates = TRUE; } GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); PLAYER(SPECIES_KLAWF) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(hp); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Anger Shell lowers Def/Sp.Def by 1 and raises Atk/Sp.Atk/Spd { u16 maxHp = 500; GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); PLAYER(SPECIES_KLAWF) { Ability(ABILITY_ANGER_SHELL); MaxHP(maxHp); HP(maxHp / 2 + 1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c index f61a6d171c..ef2b2753b3 100644 --- a/test/battle/ability/battle_bond.c +++ b/test/battle/ability/battle_bond.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_WATER_GUN].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_WATER_GUN)); } SINGLE_BATTLE_TEST("Battle Bond does not transform species other than Greninja") diff --git a/test/battle/ability/berserk.c b/test/battle/ability/berserk.c index 3bf269e1ee..7d7f905170 100644 --- a/test/battle/ability/berserk.c +++ b/test/battle/ability/berserk.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Berserk activates only if the target had more than 50% of it PARAMETRIZE { hp = 254; activates = TRUE; } GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); PLAYER(SPECIES_DRAMPA) { Ability(ABILITY_BERSERK); MaxHP(maxHp); HP(hp); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Berserk raises Sp.Atk by 1") { u16 maxHp = 500; GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); PLAYER(SPECIES_DRAMPA) { Ability(ABILITY_BERSERK); MaxHP(maxHp); HP(maxHp / 2 + 1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/ability/desolate_land.c b/test/battle/ability/desolate_land.c index 06d604e8fc..18fe76b0c9 100644 --- a/test/battle/ability/desolate_land.c +++ b/test/battle/ability/desolate_land.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_WATER_GUN].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_WATER_GUN)); ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves") DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints the message only once with moves hitting multiple targets") { GIVEN { - ASSUME(gMovesInfo[MOVE_SURF].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_SURF)); ASSUME(gMovesInfo[MOVE_SURF].type == TYPE_WATER); ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY); PLAYER(SPECIES_GROUDON) {Item(ITEM_RED_ORB); {Speed(5);}} diff --git a/test/battle/ability/electromorphosis.c b/test/battle/ability/electromorphosis.c index 094b2843bf..0f0ac1c39a 100644 --- a/test/battle/ability/electromorphosis.c +++ b/test/battle/ability/electromorphosis.c @@ -10,11 +10,11 @@ SINGLE_BATTLE_TEST("Electromorphosis sets up Charge when hit by any move") PARAMETRIZE {move = MOVE_GUST; } GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); - ASSUME(gMovesInfo[MOVE_GUST].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); + ASSUME(!IS_MOVE_STATUS(MOVE_GUST)); ASSUME(gMovesInfo[MOVE_GUST].category == DAMAGE_CATEGORY_SPECIAL); ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); - ASSUME(gMovesInfo[MOVE_THUNDER_SHOCK].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_THUNDER_SHOCK)); ASSUME(gMovesInfo[MOVE_THUNDER_SHOCK].type == TYPE_ELECTRIC); PLAYER(SPECIES_BELLIBOLT) { Ability(ABILITY_ELECTROMORPHOSIS); Speed(10); } diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c index 3c892329c3..28bd477a35 100644 --- a/test/battle/ability/frisk.c +++ b/test/battle/ability/frisk.c @@ -42,7 +42,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching PARAMETRIZE { target = playerRight; } GIVEN { - ASSUME(gMovesInfo[MOVE_POUND].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_POUND)); PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); }; @@ -65,7 +65,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for opponent in a Double Battle after switchi PARAMETRIZE { target = opponentRight; } GIVEN { - ASSUME(gMovesInfo[MOVE_POUND].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_POUND)); PLAYER(SPECIES_WYNAUT) { Item(ITEM_POTION); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET) { HP(1); } diff --git a/test/battle/ability/innards_out.c b/test/battle/ability/innards_out.c index bc59bcfa0b..5837b98d1f 100644 --- a/test/battle/ability/innards_out.c +++ b/test/battle/ability/innards_out.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Innards Out deal dmg on fainting equal to the amount of dmg PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { HP(70); SpAttack(1000); } OPPONENT(SPECIES_WOBBUFFET); - ASSUME(gMovesInfo[MOVE_PSYCHIC].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_PSYCHIC)); ASSUME(gMovesInfo[MOVE_PSYCHIC].category == DAMAGE_CATEGORY_SPECIAL); } WHEN { TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); if (hp == 100) { SEND_OUT(opponent, 1); } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Innards Out does not trigger after Gastro Acid has been used PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); - ASSUME(gMovesInfo[MOVE_PSYCHIC].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_PSYCHIC)); ASSUME(gMovesInfo[MOVE_GASTRO_ACID].effect == EFFECT_GASTRO_ACID); } WHEN { TURN { MOVE(opponent, MOVE_GASTRO_ACID); } @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Innards Out does not damage Magic Guard Pokemon") PLAYER(SPECIES_PYUKUMUKU) { HP(1); Ability(ABILITY_INNARDS_OUT); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); } - ASSUME(gMovesInfo[MOVE_PSYCHIC].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_PSYCHIC)); } WHEN { TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); } } SCENE { diff --git a/test/battle/ability/magician.c b/test/battle/ability/magician.c index a951c2f973..14e553a763 100644 --- a/test/battle/ability/magician.c +++ b/test/battle/ability/magician.c @@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Magician does not get self-damage recoil after stealing Life { GIVEN { ASSUME(gItemsInfo[ITEM_LIFE_ORB].holdEffect == HOLD_EFFECT_LIFE_ORB); - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); PLAYER(SPECIES_DELPHOX) { Ability(ABILITY_MAGICIAN); Item(ITEM_NONE); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIFE_ORB); } } WHEN { diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c index 643dca161c..01ed892874 100644 --- a/test/battle/ability/primordial_sea.c +++ b/test/battle/ability/primordial_sea.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_EMBER].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_EMBER)); ASSUME(gMovesInfo[MOVE_EMBER].type == TYPE_FIRE); } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves") DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints the message only once with moves hitting multiple targets") { GIVEN { - ASSUME(gMovesInfo[MOVE_ERUPTION].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_ERUPTION)); ASSUME(gMovesInfo[MOVE_ERUPTION].type == TYPE_FIRE); ASSUME(gMovesInfo[MOVE_ERUPTION].target == MOVE_TARGET_BOTH); PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB); {Speed(5);}} diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index 5d3e47db33..da8157d28a 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -4,13 +4,13 @@ ASSUMPTIONS { ASSUME(gMovesInfo[MOVE_FURY_CUTTER].type == TYPE_BUG); - ASSUME(gMovesInfo[MOVE_FURY_CUTTER].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_FURY_CUTTER)); ASSUME(gMovesInfo[MOVE_FEINT_ATTACK].type == TYPE_DARK); - ASSUME(gMovesInfo[MOVE_FEINT_ATTACK].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_FEINT_ATTACK)); ASSUME(gMovesInfo[MOVE_SHADOW_PUNCH].type == TYPE_GHOST); - ASSUME(gMovesInfo[MOVE_SHADOW_PUNCH].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_SHADOW_PUNCH)); ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); } SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost type move") diff --git a/test/battle/ability/stamina.c b/test/battle/ability/stamina.c index 527026284c..f5b89bb86b 100644 --- a/test/battle/ability/stamina.c +++ b/test/battle/ability/stamina.c @@ -24,8 +24,8 @@ SINGLE_BATTLE_TEST("Stamina raises Defense by 1 when hit by a move") PARAMETRIZE {move = MOVE_GUST; } GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); - ASSUME(gMovesInfo[MOVE_GUST].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); + ASSUME(!IS_MOVE_STATUS(MOVE_GUST)); ASSUME(gMovesInfo[MOVE_GUST].category == DAMAGE_CATEGORY_SPECIAL); ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_STAMINA); } diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c index 7fd7e10ef7..0d264e7ff9 100644 --- a/test/battle/ability/weak_armor.c +++ b/test/battle/ability/weak_armor.c @@ -3,8 +3,8 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); - ASSUME(gMovesInfo[MOVE_GUST].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); + ASSUME(!IS_MOVE_STATUS(MOVE_GUST)); ASSUME(gMovesInfo[MOVE_GUST].category == DAMAGE_CATEGORY_SPECIAL); ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); ASSUME(B_WEAK_ARMOR_SPEED >= GEN_7); diff --git a/test/battle/ability/wind_power.c b/test/battle/ability/wind_power.c index 6ccf896eaa..a62fa9c47a 100644 --- a/test/battle/ability/wind_power.c +++ b/test/battle/ability/wind_power.c @@ -3,13 +3,13 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_THUNDERBOLT].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_THUNDERBOLT)); ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); - ASSUME(gMovesInfo[MOVE_AIR_CUTTER].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); + ASSUME(!IS_MOVE_STATUS(MOVE_AIR_CUTTER)); ASSUME(gMovesInfo[MOVE_AIR_CUTTER].target == MOVE_TARGET_BOTH); ASSUME(gMovesInfo[MOVE_AIR_CUTTER].windMove == TRUE); - ASSUME(gMovesInfo[MOVE_PETAL_BLIZZARD].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_PETAL_BLIZZARD)); ASSUME(gMovesInfo[MOVE_PETAL_BLIZZARD].target == MOVE_TARGET_FOES_AND_ALLY); ASSUME(gMovesInfo[MOVE_PETAL_BLIZZARD].windMove == TRUE); ASSUME(gMovesInfo[MOVE_TACKLE].windMove == FALSE); diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 72e2a7e3c6..d4e682e8de 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -120,7 +120,7 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player fas SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon is fainted") { GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); PLAYER(SPECIES_WOBBUFFET) {HP(1); } PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } OPPONENT(SPECIES_WOBBUFFET); @@ -156,7 +156,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is switched in") SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject Button") { GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); ASSUME(gItemsInfo[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_EJECT_BUTTON); } PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } @@ -177,7 +177,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Card") { GIVEN { - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); ASSUME(gItemsInfo[ITEM_RED_CARD].holdEffect == HOLD_EFFECT_RED_CARD); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } diff --git a/test/battle/move_effect/charge.c b/test/battle/move_effect/charge.c index f95a137993..b057fa4753 100644 --- a/test/battle/move_effect/charge.c +++ b/test/battle/move_effect/charge.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_THUNDERBOLT].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_THUNDERBOLT)); ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); } @@ -115,7 +115,7 @@ SINGLE_BATTLE_TEST("Charge's effect is removed regardless if the next move is El GIVEN { ASSUME(gMovesInfo[MOVE_TACKLE].type != TYPE_ELECTRIC); - ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + ASSUME(!IS_MOVE_STATUS(MOVE_TACKLE)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { From 742f7a4875f2e83ab86c605825aedaae4a5dd1cf Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Fri, 20 Dec 2024 21:24:23 +0000 Subject: [PATCH 495/544] Fixes Cotton Down and Gulp Missile not interacting correctly with stat reduction prevention effects (#5841) --- data/battle_scripts_1.s | 16 ++++----- test/battle/ability/cotton_down.c | 34 ++++++++++++++++++ test/battle/ability/gulp_missile.c | 57 ++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 9 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d8eb279661..3e1888b031 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1218,7 +1218,6 @@ BattleScript_StrengthSapLower: playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_StrengthSapHp @ Drain HP without lowering a stat BattleScript_StrengthSapHp: jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapManipulateDmg @@ -6396,18 +6395,14 @@ BattleScript_GulpMissileGulping:: datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER jumpiffainted BS_ATTACKER, TRUE, BattleScript_GulpMissileNoSecondEffectGulping - jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_CLEAR_AMULET, BattleScript_GulpMissileNoSecondEffectGulping - jumpifability BS_ATTACKER, ABILITY_CLEAR_BODY, BattleScript_GulpMissileNoSecondEffectGulping - jumpifability BS_ATTACKER, ABILITY_FULL_METAL_BODY, BattleScript_GulpMissileNoSecondEffectGulping - jumpifability BS_ATTACKER, ABILITY_WHITE_SMOKE, BattleScript_GulpMissileNoSecondEffectGulping - jumpifflowerveilattacker BattleScript_GulpMissileNoSecondEffectGulping BattleScript_GulpMissileNoDmgGulping: handleformchange BS_TARGET, 0 playanimation BS_TARGET, B_ANIM_FORM_CHANGE waitanimation swapattackerwithtarget @ to make gStatDownStringIds down below print the right battler setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_GulpMissileGorgingTargetDefenseCantGoLower + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_GulpMissileGulpingEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_GulpMissileGulpingTargetDefenseCantGoLower setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatDownStringIds @@ -6419,9 +6414,11 @@ BattleScript_GulpMissileNoSecondEffectGulping: playanimation BS_TARGET, B_ANIM_FORM_CHANGE waitanimation return -BattleScript_GulpMissileGorgingTargetDefenseCantGoLower: +BattleScript_GulpMissileGulpingTargetDefenseCantGoLower: printstring STRINGID_STATSWONTDECREASE waitmessage B_WAIT_TIME_LONG +BattleScript_GulpMissileGulpingEnd: + swapattackerwithtarget @ restore the battlers, just in case return BattleScript_SeedSowerActivates:: @@ -7152,7 +7149,8 @@ BattleScript_CottonDownLoop: jumpiffainted BS_TARGET, TRUE, BattleScript_CottonDownLoopIncrement setstatchanger STAT_SPEED, 1, TRUE jumpifbyteequal gBattlerTarget, gEffectBattler, BattleScript_CottonDownLoopIncrement - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CottonDownTargetSpeedCantGoLower + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_CottonDownLoopIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_CottonDownTargetSpeedCantGoLower setgraphicalstatchangevalues playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatDownStringIds diff --git a/test/battle/ability/cotton_down.c b/test/battle/ability/cotton_down.c index 4d0dab9dcc..02a0f18f63 100644 --- a/test/battle/ability/cotton_down.c +++ b/test/battle/ability/cotton_down.c @@ -62,3 +62,37 @@ DOUBLE_BATTLE_TEST("Cotton Down drops speed by one of all other battlers on the EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); } } + +DOUBLE_BATTLE_TEST("Cotton Down correctly gets blocked by stat reduction preventing abilities") +{ + GIVEN { + PLAYER(SPECIES_METAGROSS) { Ability(ABILITY_CLEAR_BODY); } + PLAYER(SPECIES_WYNAUT) { Item(ITEM_CLEAR_AMULET); } + OPPONENT(SPECIES_ELDEGOSS) { Ability(ABILITY_COTTON_DOWN); } + OPPONENT(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + ABILITY_POPUP(opponentLeft, ABILITY_COTTON_DOWN); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Metagross's Speed fell!"); + } + ABILITY_POPUP(playerLeft, ABILITY_CLEAR_BODY); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Wynaut's Speed fell!"); + } + MESSAGE("The effects of the Clear Amulet held by Wynaut prevents its stats from being lowered!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("The opposing Corviknight's Speed fell!"); + } + ABILITY_POPUP(opponentRight, ABILITY_MIRROR_ARMOR); + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/ability/gulp_missile.c b/test/battle/ability/gulp_missile.c index f5e1fd9d9d..189702a4be 100644 --- a/test/battle/ability/gulp_missile.c +++ b/test/battle/ability/gulp_missile.c @@ -92,6 +92,7 @@ SINGLE_BATTLE_TEST("(Gulp Missile) Transformed Cramorant deal 1/4 of damage oppo MESSAGE("The opposing Wobbuffet's Defense fell!"); } THEN { EXPECT_EQ(gulpMissileDamage, opponent->maxHP / 4); + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); } } @@ -133,3 +134,59 @@ SINGLE_BATTLE_TEST("(Gulp Missile) triggers even if the user is fainted by oppos STATUS_ICON(opponent, paralysis: TRUE); } } + +SINGLE_BATTLE_TEST("(Gulp Missile) Transformed Cramorant Gulping lowers defense but is prevented by stat reduction preventing abilities") +{ + u32 species, ability; + PARAMETRIZE { species = SPECIES_METAGROSS; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE { species = SPECIES_CORVIKNIGHT; ability = ABILITY_MIRROR_ARMOR; } + PARAMETRIZE { species = SPECIES_CHATOT; ability = ABILITY_BIG_PECKS; } + GIVEN { + PLAYER(SPECIES_CRAMORANT) { Ability(ABILITY_GULP_MISSILE); } + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SURF); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, player); + HP_BAR(opponent); + ABILITY_POPUP(player, ABILITY_GULP_MISSILE); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_GULP_MISSILE); + ABILITY_POPUP(opponent, ability); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("(Gulp Missile) Transformed Cramorant Gulping lowers defense and still triggers other effects after") +{ + // Make sure attacker and target are correct after triggering the ability + u32 ability; + PARAMETRIZE { ability = ABILITY_INFILTRATOR; } + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].makesContact == TRUE); + PLAYER(SPECIES_CRAMORANT) { Ability(ABILITY_GULP_MISSILE); Item(ITEM_ROCKY_HELMET); } + OPPONENT(SPECIES_DRAGAPULT) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_SURF); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, player); + HP_BAR(opponent); + ABILITY_POPUP(player, ABILITY_GULP_MISSILE); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_GULP_MISSILE); + HP_BAR(opponent); + if (ability == ABILITY_INFILTRATOR) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Dragapult's Defense fell!"); + } else { + ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + HP_BAR(opponent); + } +} From 9a0b5756ca7b773b2b5fc86097e9f30ed4d80243 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 20 Dec 2024 18:25:18 -0300 Subject: [PATCH 496/544] Fix "PlantCloak" references (#5821) --- src/data/graphics/pokemon.h | 32 ++++++++--------- .../object_event_pic_tables_followers.h | 8 ++--- src/data/pokemon/level_up_learnsets/gen_1.h | 2 +- src/data/pokemon/level_up_learnsets/gen_2.h | 2 +- src/data/pokemon/level_up_learnsets/gen_3.h | 2 +- src/data/pokemon/level_up_learnsets/gen_4.h | 2 +- src/data/pokemon/level_up_learnsets/gen_5.h | 2 +- src/data/pokemon/level_up_learnsets/gen_6.h | 2 +- src/data/pokemon/level_up_learnsets/gen_7.h | 2 +- src/data/pokemon/level_up_learnsets/gen_8.h | 2 +- src/data/pokemon/level_up_learnsets/gen_9.h | 2 +- .../pokemon/species_info/gen_4_families.h | 36 +++++++++---------- src/data/pokemon/teachable_learnsets.h | 2 +- 13 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 8801942e53..726a0414f4 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -14459,11 +14459,11 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ #endif //P_FAMILY_SHIELDON #if P_FAMILY_BURMY - const u32 gMonFrontPic_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/anim_front.4bpp.lz"); - const u32 gMonPalette_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/normal.gbapal.lz"); - const u32 gMonBackPic_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/back.4bpp.lz"); - const u32 gMonShinyPalette_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/shiny.gbapal.lz"); - const u8 gMonIcon_BurmyPlantCloak[] = INCBIN_U8("graphics/pokemon/burmy/icon.4bpp"); + const u32 gMonFrontPic_BurmyPlant[] = INCBIN_U32("graphics/pokemon/burmy/anim_front.4bpp.lz"); + const u32 gMonPalette_BurmyPlant[] = INCBIN_U32("graphics/pokemon/burmy/normal.gbapal.lz"); + const u32 gMonBackPic_BurmyPlant[] = INCBIN_U32("graphics/pokemon/burmy/back.4bpp.lz"); + const u32 gMonShinyPalette_BurmyPlant[] = INCBIN_U32("graphics/pokemon/burmy/shiny.gbapal.lz"); + const u8 gMonIcon_BurmyPlant[] = INCBIN_U8("graphics/pokemon/burmy/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_Burmy[] = INCBIN_U8("graphics/pokemon/burmy/footprint.1bpp"); #endif //P_FOOTPRINTS @@ -14481,24 +14481,24 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonIcon_BurmyTrash[] = INCBIN_U8("graphics/pokemon/burmy/trash/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_BurmyPlantCloak[] = INCBIN_COMP("graphics/pokemon/burmy/overworld.4bpp"); + const u32 gObjectEventPic_BurmyPlant[] = INCBIN_COMP("graphics/pokemon/burmy/overworld.4bpp"); const u32 gObjectEventPic_BurmySandy[] = INCBIN_COMP("graphics/pokemon/burmy/sandy/overworld.4bpp"); const u32 gObjectEventPic_BurmyTrash[] = INCBIN_COMP("graphics/pokemon/burmy/trash/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - const u32 gOverworldPalette_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/overworld_normal.gbapal.lz"); + const u32 gOverworldPalette_BurmyPlant[] = INCBIN_U32("graphics/pokemon/burmy/overworld_normal.gbapal.lz"); const u32 gOverworldPalette_BurmySandy[] = INCBIN_U32("graphics/pokemon/burmy/sandy/overworld_normal.gbapal.lz"); const u32 gOverworldPalette_BurmyTrash[] = INCBIN_U32("graphics/pokemon/burmy/trash/overworld_normal.gbapal.lz"); - const u32 gShinyOverworldPalette_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_BurmyPlant[] = INCBIN_U32("graphics/pokemon/burmy/overworld_shiny.gbapal.lz"); const u32 gShinyOverworldPalette_BurmySandy[] = INCBIN_U32("graphics/pokemon/burmy/sandy/overworld_shiny.gbapal.lz"); const u32 gShinyOverworldPalette_BurmyTrash[] = INCBIN_U32("graphics/pokemon/burmy/trash/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS - const u32 gMonFrontPic_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/anim_front.4bpp.lz"); - const u32 gMonPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/normal.gbapal.lz"); - const u32 gMonBackPic_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/back.4bpp.lz"); - const u32 gMonShinyPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/shiny.gbapal.lz"); - const u8 gMonIcon_WormadamPlantCloak[] = INCBIN_U8("graphics/pokemon/wormadam/icon.4bpp"); + const u32 gMonFrontPic_WormadamPlant[] = INCBIN_U32("graphics/pokemon/wormadam/anim_front.4bpp.lz"); + const u32 gMonPalette_WormadamPlant[] = INCBIN_U32("graphics/pokemon/wormadam/normal.gbapal.lz"); + const u32 gMonBackPic_WormadamPlant[] = INCBIN_U32("graphics/pokemon/wormadam/back.4bpp.lz"); + const u32 gMonShinyPalette_WormadamPlant[] = INCBIN_U32("graphics/pokemon/wormadam/shiny.gbapal.lz"); + const u8 gMonIcon_WormadamPlant[] = INCBIN_U8("graphics/pokemon/wormadam/icon.4bpp"); #if P_FOOTPRINTS const u8 gMonFootprint_Wormadam[] = INCBIN_U8("graphics/pokemon/wormadam/footprint.1bpp"); #endif //P_FOOTPRINTS @@ -14516,14 +14516,14 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonIcon_WormadamTrash[] = INCBIN_U8("graphics/pokemon/wormadam/trash/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_WormadamPlantCloak[] = INCBIN_COMP("graphics/pokemon/wormadam/overworld.4bpp"); + const u32 gObjectEventPic_WormadamPlant[] = INCBIN_COMP("graphics/pokemon/wormadam/overworld.4bpp"); const u32 gObjectEventPic_WormadamSandy[] = INCBIN_COMP("graphics/pokemon/wormadam/sandy/overworld.4bpp"); const u32 gObjectEventPic_WormadamTrash[] = INCBIN_COMP("graphics/pokemon/wormadam/trash/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - const u32 gOverworldPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/overworld_normal.gbapal.lz"); + const u32 gOverworldPalette_WormadamPlant[] = INCBIN_U32("graphics/pokemon/wormadam/overworld_normal.gbapal.lz"); const u32 gOverworldPalette_WormadamSandy[] = INCBIN_U32("graphics/pokemon/wormadam/sandy/overworld_normal.gbapal.lz"); const u32 gOverworldPalette_WormadamTrash[] = INCBIN_U32("graphics/pokemon/wormadam/trash/overworld_normal.gbapal.lz"); - const u32 gShinyOverworldPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_WormadamPlant[] = INCBIN_U32("graphics/pokemon/wormadam/overworld_shiny.gbapal.lz"); const u32 gShinyOverworldPalette_WormadamSandy[] = INCBIN_U32("graphics/pokemon/wormadam/sandy/overworld_shiny.gbapal.lz"); const u32 gShinyOverworldPalette_WormadamTrash[] = INCBIN_U32("graphics/pokemon/wormadam/trash/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h index 276e8fcf65..07193cedc7 100644 --- a/src/data/object_events/object_event_pic_tables_followers.h +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -3136,8 +3136,8 @@ static const struct SpriteFrameImage sPicTable_Bastiodon[] = { #endif //P_FAMILY_SHIELDON #if P_FAMILY_BURMY -static const struct SpriteFrameImage sPicTable_BurmyPlantCloak[] = { - overworld_ascending_frames(gObjectEventPic_BurmyPlantCloak, 4, 4), +static const struct SpriteFrameImage sPicTable_BurmyPlant[] = { + overworld_ascending_frames(gObjectEventPic_BurmyPlant, 4, 4), }; static const struct SpriteFrameImage sPicTable_BurmySandy[] = { overworld_ascending_frames(gObjectEventPic_BurmySandy, 4, 4), @@ -3145,8 +3145,8 @@ static const struct SpriteFrameImage sPicTable_BurmySandy[] = { static const struct SpriteFrameImage sPicTable_BurmyTrash[] = { overworld_ascending_frames(gObjectEventPic_BurmyTrash, 4, 4), }; -static const struct SpriteFrameImage sPicTable_WormadamPlantCloak[] = { - overworld_ascending_frames(gObjectEventPic_WormadamPlantCloak, 4, 4), +static const struct SpriteFrameImage sPicTable_WormadamPlant[] = { + overworld_ascending_frames(gObjectEventPic_WormadamPlant, 4, 4), }; static const struct SpriteFrameImage sPicTable_WormadamSandy[] = { overworld_ascending_frames(gObjectEventPic_WormadamSandy, 4, 4), diff --git a/src/data/pokemon/level_up_learnsets/gen_1.h b/src/data/pokemon/level_up_learnsets/gen_1.h index 8470b1b14e..f1e7cd32ff 100644 --- a/src/data/pokemon/level_up_learnsets/gen_1.h +++ b/src/data/pokemon/level_up_learnsets/gen_1.h @@ -7717,7 +7717,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE(10, MOVE_PROTECT), LEVEL_UP_MOVE(15, MOVE_BUG_BITE), diff --git a/src/data/pokemon/level_up_learnsets/gen_2.h b/src/data/pokemon/level_up_learnsets/gen_2.h index 0f39631c4f..3d74d70b23 100644 --- a/src/data/pokemon/level_up_learnsets/gen_2.h +++ b/src/data/pokemon/level_up_learnsets/gen_2.h @@ -7961,7 +7961,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE(10, MOVE_PROTECT), LEVEL_UP_MOVE(15, MOVE_BUG_BITE), diff --git a/src/data/pokemon/level_up_learnsets/gen_3.h b/src/data/pokemon/level_up_learnsets/gen_3.h index 81e6d06b46..cedd09b308 100644 --- a/src/data/pokemon/level_up_learnsets/gen_3.h +++ b/src/data/pokemon/level_up_learnsets/gen_3.h @@ -8187,7 +8187,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE(10, MOVE_PROTECT), LEVEL_UP_MOVE(15, MOVE_BUG_BITE), diff --git a/src/data/pokemon/level_up_learnsets/gen_4.h b/src/data/pokemon/level_up_learnsets/gen_4.h index 5c9f6872b5..4b302539b2 100644 --- a/src/data/pokemon/level_up_learnsets/gen_4.h +++ b/src/data/pokemon/level_up_learnsets/gen_4.h @@ -9461,7 +9461,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE(10, MOVE_PROTECT), LEVEL_UP_MOVE(15, MOVE_BUG_BITE), diff --git a/src/data/pokemon/level_up_learnsets/gen_5.h b/src/data/pokemon/level_up_learnsets/gen_5.h index cb99b6375d..2403f17b96 100644 --- a/src/data/pokemon/level_up_learnsets/gen_5.h +++ b/src/data/pokemon/level_up_learnsets/gen_5.h @@ -9920,7 +9920,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE(10, MOVE_PROTECT), LEVEL_UP_MOVE(15, MOVE_BUG_BITE), diff --git a/src/data/pokemon/level_up_learnsets/gen_6.h b/src/data/pokemon/level_up_learnsets/gen_6.h index 32e5849cda..c5a3a39acf 100644 --- a/src/data/pokemon/level_up_learnsets/gen_6.h +++ b/src/data/pokemon/level_up_learnsets/gen_6.h @@ -10382,7 +10382,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE(10, MOVE_PROTECT), LEVEL_UP_MOVE(15, MOVE_BUG_BITE), diff --git a/src/data/pokemon/level_up_learnsets/gen_7.h b/src/data/pokemon/level_up_learnsets/gen_7.h index f88e4bcba7..77d2fc2deb 100644 --- a/src/data/pokemon/level_up_learnsets/gen_7.h +++ b/src/data/pokemon/level_up_learnsets/gen_7.h @@ -10610,7 +10610,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), diff --git a/src/data/pokemon/level_up_learnsets/gen_8.h b/src/data/pokemon/level_up_learnsets/gen_8.h index 67d263c859..65b557a486 100644 --- a/src/data/pokemon/level_up_learnsets/gen_8.h +++ b/src/data/pokemon/level_up_learnsets/gen_8.h @@ -10633,7 +10633,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), diff --git a/src/data/pokemon/level_up_learnsets/gen_9.h b/src/data/pokemon/level_up_learnsets/gen_9.h index 9f6985bc9a..0bdfbe1eb3 100644 --- a/src/data/pokemon/level_up_learnsets/gen_9.h +++ b/src/data/pokemon/level_up_learnsets/gen_9.h @@ -10291,7 +10291,7 @@ static const struct LevelUpMove sBurmyLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sWormadamPlantCloakLevelUpLearnset[] = { +static const struct LevelUpMove sWormadamPlantLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE), LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH), diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index b84284de29..be0cfba99e 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -1656,29 +1656,29 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, - .frontPic = gMonFrontPic_BurmyPlantCloak, + .frontPic = gMonFrontPic_BurmyPlant, .frontPicSize = MON_COORDS_SIZE(32, 56), .frontPicYOffset = 13, .frontAnimFrames = sAnims_Burmy, .frontAnimId = ANIM_V_STRETCH, .enemyMonElevation = 10, - .backPic = gMonBackPic_BurmyPlantCloak, + .backPic = gMonBackPic_BurmyPlant, .backPicSize = MON_COORDS_SIZE(40, 56), .backPicYOffset = 6, .backAnimId = BACK_ANIM_H_SHAKE, - .palette = gMonPalette_BurmyPlantCloak, - .shinyPalette = gMonShinyPalette_BurmyPlantCloak, - .iconSprite = gMonIcon_BurmyPlantCloak, + .palette = gMonPalette_BurmyPlant, + .shinyPalette = gMonShinyPalette_BurmyPlant, + .iconSprite = gMonIcon_BurmyPlant, .iconPalIndex = 1, SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( - sPicTable_BurmyPlantCloak, + sPicTable_BurmyPlant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, - gOverworldPalette_BurmyPlantCloak, - gShinyOverworldPalette_BurmyPlantCloak + gOverworldPalette_BurmyPlant, + gShinyOverworldPalette_BurmyPlant ) .tmIlliterate = TRUE, .levelUpLearnset = sBurmyLevelUpLearnset, @@ -1858,32 +1858,32 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, - .frontPic = gMonFrontPic_WormadamPlantCloak, + .frontPic = gMonFrontPic_WormadamPlant, .frontPicSize = MON_COORDS_SIZE(48, 56), .frontPicYOffset = 10, .frontAnimFrames = sAnims_Wormadam, .frontAnimId = ANIM_SWING_CONVEX_FAST_SHORT, .enemyMonElevation = 8, - .backPic = gMonBackPic_WormadamPlantCloak, + .backPic = gMonBackPic_WormadamPlant, .backPicSize = MON_COORDS_SIZE(56, 64), .backPicYOffset = 2, .backAnimId = BACK_ANIM_V_SHAKE, - .palette = gMonPalette_WormadamPlantCloak, - .shinyPalette = gMonShinyPalette_WormadamPlantCloak, - .iconSprite = gMonIcon_WormadamPlantCloak, + .palette = gMonPalette_WormadamPlant, + .shinyPalette = gMonShinyPalette_WormadamPlant, + .iconSprite = gMonIcon_WormadamPlant, .iconPalIndex = 1, SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( - sPicTable_WormadamPlantCloak, + sPicTable_WormadamPlant, SIZE_32x32, SHADOW_SIZE_M, TRACKS_FOOT, - gOverworldPalette_WormadamPlantCloak, - gShinyOverworldPalette_WormadamPlantCloak + gOverworldPalette_WormadamPlant, + gShinyOverworldPalette_WormadamPlant ) - .levelUpLearnset = sWormadamPlantCloakLevelUpLearnset, - .teachableLearnset = sWormadamPlantCloakTeachableLearnset, + .levelUpLearnset = sWormadamPlantLevelUpLearnset, + .teachableLearnset = sWormadamPlantTeachableLearnset, .formSpeciesIdTable = sWormadamFormSpeciesIdTable, }, diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index 46354db5a0..b0755d6039 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -18903,7 +18903,7 @@ static const u16 sBurmyTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sWormadamPlantCloakTeachableLearnset[] = { +static const u16 sWormadamPlantTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DIG, From c3133193e218b0a31df582c8d906c71ad1f51cc7 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 21 Dec 2024 03:30:25 -0600 Subject: [PATCH 497/544] Fix Hit Escape moves giving Exp to the mon that switches in (#5844) --- data/battle_scripts_1.s | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 3e1888b031..7359b4469a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2790,6 +2790,10 @@ BattleScript_EffectHitEscape:: jumpifbattleend BattleScript_HitEscapeEnd jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_HitEscapeEnd jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd + jumpiffainted BS_TARGET, FALSE, BattleScript_HitEscapeSwitch + setbyte sGIVEEXP_STATE, 0 + getexp BS_TARGET +BattleScript_HitEscapeSwitch: goto BattleScript_MoveSwitch BattleScript_HitEscapeEnd: end From e175c5aca889ed3f6fb9604238b289b1d220ee0c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 21 Dec 2024 07:48:31 -0300 Subject: [PATCH 498/544] Changes Various defines to an Enum (#5840) Co-authored-by: Bassoonian Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- .../how_to_battle_script_command_macro.md | 76 +++-- include/constants/battle_script_commands.h | 264 +++++++++--------- src/battle_script_commands.c | 3 +- 3 files changed, 170 insertions(+), 173 deletions(-) diff --git a/docs/tutorials/how_to_battle_script_command_macro.md b/docs/tutorials/how_to_battle_script_command_macro.md index 042a87601d..2bbf503fbe 100644 --- a/docs/tutorials/how_to_battle_script_command_macro.md +++ b/docs/tutorials/how_to_battle_script_command_macro.md @@ -1,51 +1,47 @@ ## How to add new Battle Script Commands/Macros -To preface this tutorial, the battle engine upgrade has exhausted all battle script command IDs, and instead uses the `various` command to effectively add new commands. This is preferential to creating a secondary battle script command table like is done in the CFRU. +To preface this tutorial, the battle engine upgrade has exhausted all battle script command IDs. Historically, we've used the `various` command to effectively add new commands. However, this has caused issues of maintainability and readability due to the massive switch needed for it. Thanks to the cleanup made by the team and contributors, we now are able to call an infinite amount of commands by using `callnative`. This is preferential to creating a secondary battle script command table like is done in the CFRU. -In general, `gBattlescriptCurrInstr` tracks the current battle script position as a ROM address. Fortunately, we don't need to worry about ROM addresses when using the decomps, but it is important to understand because of how the `various` command is set up. +In general, `gBattlescriptCurrInstr` tracks the current battle script position as a ROM address. Fortunately, we don't need to worry about ROM addresses when using the decomps, but it is important to understand because of how the `callnative` command is set up. ``` -.macro various battler:req, param1:req - .byte 0x76 - .byte \battler - .byte \param1 - .endm + .macro callnative func:req + .byte 0xff + .4byte \func + .endm ``` +`callnative` uses the last battle script command ID in order to pass a native function as an argument. Additional optional arguments are added recursively via a macro, so no need to worry about how they need to align to the amount of instructions to skip. -`various` is 3 bytes in size, so if we wanted to advance to the next battle script command, we would write `gBattlescriptCurrInstr += 3`. Coincidentally, this is found at the end of `Cmd_Various` in `src/battle_script_commands.c`. - -Now, how might we add a custom various command case? Here are the steps. We will use `VARIOUS_SET_SIMPLE_BEAM` as an example. -### 1. Add a definition to `include/constants/battle_script_commands.h`. - -For example, `#define VARIOUS_SET_SIMPLE_BEAM 39` - -### 2. Create a macro in `asm/macros/battle_script.inc`. For example: +Now, how might we add a custom `callnative` command? Here are the steps. We will use `BS_TrySetOctolock` as an example. +### 1. Create a macro in `asm/macros/battle_script.inc`. For example: ```c -.macro setabilitysimple battler:req, ptr:req - various \battler VARIOUS_SET_SIMPLE_BEAM - .4byte \ptr - .endm + .macro trysetoctolock battler:req, failInstr:req + callnative BS_TrySetOctolock + .byte \battler + .4byte \failInstr + .endm ``` - -### 3. Add your new various command ID to `Cmd_Various`. For example: +### 2. Add your new callnative command ID to `src/battle_script_commands.c`. For example: ```c - case VARIOUS_SET_SIMPLE_BEAM: - if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability) - || gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE) - { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); - } - else - { - gBattleMons[gBattlerTarget].ability = ABILITY_SIMPLE; - RecordAbilityBattle(gActiveBattler, ABILITY_SIMPLE); - gBattlescriptCurrInstr += 7; - } - return; +void BS_TrySetOctolock(void) +{ + NATIVE_ARGS(u8 battler, const u8 *failInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (gDisableStructs[battler].octolock) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gDisableStructs[battler].octolock = TRUE; + gBattleMons[battler].status2 |= STATUS2_ESCAPE_PREVENTION; + gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} ``` - -The macros' `battler` argument is the battler who will be affected/considered by your command. In our case, which battler we will try to give `ABILITY_SIMPLE`. Note that `gActiveBattler` is always set to this battler at the beginning of `Cmd_Various`. - -The `ptr` argument is an extra argument that, in this case, provides a battle script to jump to in the event that we fail to set `ABILITY_SIMPLE`. We must add the `.4byte \ptr` inside our macro. So now when we want to advance to the next battle script command in our script, we must increment `gBattlescriptCurrInstr` by `7` because our overall macro is 3 bytes for the various command, and 4 bytes for the pointer. *IMPORTANT* the `return` at the end of the switch case is required because remember that `various` always defaults to `gBattlescriptCurrInstr += 3` at the very end of the function, so if we included `gBattlescriptCurrInstr += 7` with a `break`, we would end up effectively doing `gBattlescriptCurrInstr += 10`. - -This behavior can be found under the `else` statement in the example above, corresponding to `ABILITY_SIMPLE` being correctly applied. If we are unable to set `ABILITY_SIMPLE`, however, notice the following `gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);`. This means we are jumping to the battle script provided by the pointer 3 bytes after our various command (which is the `ptr` argument described previously). We still must `return` or else we would actually jump to 3 bytes after the `ptr` battle script begins. +Each of the arguments defined in the macro (`battler`, `failInstr`) need to be called at the start of the command using `NATIVE_ARGS`. +The byte count in the macro should correspond to the type that will be used for the command (eg, `u8` is `byte`, while the pointer are `4byte`). +These arguments can then be accessed as `cmd->battler` and `cmd->battler`. +`gBattlescriptCurrInstr = cmd->nextInstr;` advances to the next instruction. diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 050a20d933..54052e5390 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -88,138 +88,138 @@ #define CMP_COMMON_BITS 4 #define CMP_NO_COMMON_BITS 5 -// Cmd_various -#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0 -#define VARIOUS_IS_RUNNING_IMPOSSIBLE 1 -#define VARIOUS_GET_MOVE_TARGET 2 -#define VARIOUS_GET_BATTLER_FAINTED 3 -#define VARIOUS_RESET_SWITCH_IN_ABILITY_BITS 4 -#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 5 -#define VARIOUS_RESET_PLAYER_FAINTED 6 -#define VARIOUS_PALACE_FLAVOR_TEXT 7 -#define VARIOUS_ARENA_JUDGMENT_WINDOW 8 -#define VARIOUS_ARENA_OPPONENT_MON_LOST 9 -#define VARIOUS_ARENA_PLAYER_MON_LOST 10 -#define VARIOUS_ARENA_BOTH_MONS_LOST 11 -#define VARIOUS_EMIT_YESNOBOX 12 -#define VARIOUS_DRAW_ARENA_REF_TEXT_BOX 13 -#define VARIOUS_ERASE_ARENA_REF_TEXT_BOX 14 -#define VARIOUS_ARENA_JUDGMENT_STRING 15 -#define VARIOUS_ARENA_WAIT_STRING 16 -#define VARIOUS_WAIT_CRY 17 -#define VARIOUS_RETURN_OPPONENT_MON1 18 -#define VARIOUS_RETURN_OPPONENT_MON2 19 -#define VARIOUS_VOLUME_DOWN 20 -#define VARIOUS_VOLUME_UP 21 -#define VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT 22 -#define VARIOUS_PALACE_TRY_ESCAPE_STATUS 23 -#define VARIOUS_SET_TELEPORT_OUTCOME 24 -#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 25 -#define VARIOUS_STAT_TEXT_BUFFER 26 -#define VARIOUS_SWITCHIN_ABILITIES 27 -#define VARIOUS_INSTANT_HP_DROP 28 -#define VARIOUS_CLEAR_STATUS 29 -#define VARIOUS_RESTORE_PP 30 -#define VARIOUS_TRY_ACTIVATE_MOXIE 31 -#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 32 -#define VARIOUS_PLAY_MOVE_ANIMATION 33 -#define VARIOUS_SET_LUCKY_CHANT 34 -#define VARIOUS_SUCKER_PUNCH_CHECK 35 -#define VARIOUS_SET_SIMPLE_BEAM 36 -#define VARIOUS_TRY_ENTRAINMENT 37 -#define VARIOUS_SET_LAST_USED_ABILITY 38 -#define VARIOUS_INVERT_STAT_STAGES 39 -#define VARIOUS_TRY_ME_FIRST 40 -#define VARIOUS_JUMP_IF_BATTLE_END 41 -#define VARIOUS_TRY_ELECTRIFY 42 -#define VARIOUS_TRY_REFLECT_TYPE 43 -#define VARIOUS_TRY_SOAK 44 -#define VARIOUS_HANDLE_MEGA_EVO 45 -#define VARIOUS_TRY_LAST_RESORT 46 -#define VARIOUS_SET_ARG_TO_BATTLE_DAMAGE 47 -#define VARIOUS_TRY_AUTOTOMIZE 48 -#define VARIOUS_ABILITY_POPUP 49 -#define VARIOUS_JUMP_IF_TARGET_ALLY 50 -#define VARIOUS_TRY_SYNCHRONOISE 51 -#define VARIOUS_PSYCHO_SHIFT 52 -#define VARIOUS_CURE_STATUS 53 -#define VARIOUS_POWER_TRICK 54 -#define VARIOUS_AFTER_YOU 55 -#define VARIOUS_BESTOW 56 -#define VARIOUS_JUMP_IF_NOT_GROUNDED 57 -#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 58 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 59 -#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 60 -#define VARIOUS_SET_AURORA_VEIL 61 -#define VARIOUS_TRY_THIRD_TYPE 62 -#define VARIOUS_ACUPRESSURE 63 -#define VARIOUS_SET_POWDER 64 -#define VARIOUS_SPECTRAL_THIEF 65 -#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 66 -#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 67 -#define VARIOUS_JUMP_IF_ROAR_FAILS 68 -#define VARIOUS_TRY_INSTRUCT 69 -#define VARIOUS_JUMP_IF_NOT_BERRY 70 -#define VARIOUS_TRACE_ABILITY 71 -#define VARIOUS_UPDATE_NICK 72 -#define VARIOUS_TRY_ILLUSION_OFF 73 -#define VARIOUS_SET_SPRITEIGNORE0HP 74 -#define VARIOUS_HANDLE_FORM_CHANGE 75 -#define VARIOUS_GET_STAT_VALUE 76 -#define VARIOUS_JUMP_IF_FULL_HP 77 -#define VARIOUS_LOSE_TYPE 78 -#define VARIOUS_TRY_ACTIVATE_SOULHEART 79 -#define VARIOUS_TRY_ACTIVATE_RECEIVER 80 -#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 81 -#define VARIOUS_TRY_FRISK 82 -#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 83 -#define VARIOUS_TRY_FAIRY_LOCK 84 -#define VARIOUS_JUMP_IF_NO_ALLY 85 -#define VARIOUS_POISON_TYPE_IMMUNITY 86 -#define VARIOUS_JUMP_IF_HOLD_EFFECT 87 -#define VARIOUS_INFATUATE_WITH_BATTLER 88 -#define VARIOUS_SET_LAST_USED_ITEM 89 -#define VARIOUS_PARALYZE_TYPE_IMMUNITY 90 -#define VARIOUS_JUMP_IF_ABSENT 91 -#define VARIOUS_DESTROY_ABILITY_POPUP 92 -#define VARIOUS_TOTEM_BOOST 93 -#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 94 -#define VARIOUS_MOVEEND_ITEM_EFFECTS 95 -#define VARIOUS_TERRAIN_SEED 96 -#define VARIOUS_MAKE_INVISIBLE 97 -#define VARIOUS_ROOM_SERVICE 98 -#define VARIOUS_EERIE_SPELL_PP_REDUCE 99 -#define VARIOUS_JUMP_IF_TEAM_HEALTHY 100 -#define VARIOUS_TRY_HEAL_QUARTER_HP 101 -#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 102 -#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 103 -#define VARIOUS_GET_ROTOTILLER_TARGETS 104 -#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 105 -#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 106 -#define VARIOUS_CONSUME_BERRY 107 -#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 108 -#define VARIOUS_JUMP_IF_SPECIES 109 -#define VARIOUS_UPDATE_ABILITY_POPUP 110 -#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 111 -#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 112 -#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 113 -#define VARIOUS_TRY_NO_RETREAT 114 -#define VARIOUS_CHECK_POLTERGEIST 115 -#define VARIOUS_CUT_1_3_HP_RAISE_STATS 116 -#define VARIOUS_TRY_END_NEUTRALIZING_GAS 117 -#define VARIOUS_JUMP_IF_UNDER_200 118 -#define VARIOUS_SET_SKY_DROP 119 -#define VARIOUS_CLEAR_SKY_DROP 120 -#define VARIOUS_SKY_DROP_YAWN 121 -#define VARIOUS_CURE_CERTAIN_STATUSES 122 -#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 123 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 124 -#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 125 -#define VARIOUS_SAVE_BATTLER_ITEM 126 -#define VARIOUS_RESTORE_BATTLER_ITEM 127 -#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 128 -#define VARIOUS_SWAP_SIDE_STATUSES 129 -#define VARIOUS_SWAP_STATS 130 +enum CmdVarious +{ + VARIOUS_CANCEL_MULTI_TURN_MOVES, + VARIOUS_IS_RUNNING_IMPOSSIBLE, + VARIOUS_GET_MOVE_TARGET, + VARIOUS_GET_BATTLER_FAINTED, + VARIOUS_RESET_SWITCH_IN_ABILITY_BITS, + VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP, + VARIOUS_RESET_PLAYER_FAINTED, + VARIOUS_PALACE_FLAVOR_TEXT, + VARIOUS_ARENA_JUDGMENT_WINDOW, + VARIOUS_ARENA_OPPONENT_MON_LOST, + VARIOUS_ARENA_PLAYER_MON_LOST, + VARIOUS_ARENA_BOTH_MONS_LOST, + VARIOUS_EMIT_YESNOBOX, + VARIOUS_DRAW_ARENA_REF_TEXT_BOX, + VARIOUS_ERASE_ARENA_REF_TEXT_BOX, + VARIOUS_ARENA_JUDGMENT_STRING, + VARIOUS_ARENA_WAIT_STRING, + VARIOUS_WAIT_CRY, + VARIOUS_RETURN_OPPONENT_MON1, + VARIOUS_RETURN_OPPONENT_MON2, + VARIOUS_VOLUME_DOWN, + VARIOUS_VOLUME_UP, + VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT, + VARIOUS_PALACE_TRY_ESCAPE_STATUS, + VARIOUS_SET_TELEPORT_OUTCOME, + VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC, + VARIOUS_STAT_TEXT_BUFFER, + VARIOUS_SWITCHIN_ABILITIES, + VARIOUS_INSTANT_HP_DROP, + VARIOUS_CLEAR_STATUS, + VARIOUS_RESTORE_PP, + VARIOUS_TRY_ACTIVATE_MOXIE, + VARIOUS_TRY_ACTIVATE_FELL_STINGER, + VARIOUS_PLAY_MOVE_ANIMATION, + VARIOUS_SET_LUCKY_CHANT, + VARIOUS_SUCKER_PUNCH_CHECK, + VARIOUS_SET_SIMPLE_BEAM, + VARIOUS_TRY_ENTRAINMENT, + VARIOUS_SET_LAST_USED_ABILITY, + VARIOUS_INVERT_STAT_STAGES, + VARIOUS_TRY_ME_FIRST, + VARIOUS_JUMP_IF_BATTLE_END, + VARIOUS_TRY_ELECTRIFY, + VARIOUS_TRY_SOAK, + VARIOUS_TRY_LAST_RESORT, + VARIOUS_SET_ARG_TO_BATTLE_DAMAGE, + VARIOUS_TRY_AUTOTOMIZE, + VARIOUS_ABILITY_POPUP, + VARIOUS_JUMP_IF_TARGET_ALLY, + VARIOUS_TRY_SYNCHRONOISE, + VARIOUS_PSYCHO_SHIFT, + VARIOUS_CURE_STATUS, + VARIOUS_POWER_TRICK, + VARIOUS_AFTER_YOU, + VARIOUS_BESTOW, + VARIOUS_JUMP_IF_NOT_GROUNDED, + VARIOUS_HANDLE_TRAINER_SLIDE_MSG, + VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF, + VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON, + VARIOUS_SET_AURORA_VEIL, + VARIOUS_TRY_THIRD_TYPE, + VARIOUS_ACUPRESSURE, + VARIOUS_SET_POWDER, + VARIOUS_SPECTRAL_THIEF, + VARIOUS_GRAVITY_ON_AIRBORNE_MONS, + VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS, + VARIOUS_JUMP_IF_ROAR_FAILS, + VARIOUS_TRY_INSTRUCT, + VARIOUS_JUMP_IF_NOT_BERRY, + VARIOUS_TRACE_ABILITY, + VARIOUS_UPDATE_NICK, + VARIOUS_TRY_ILLUSION_OFF, + VARIOUS_SET_SPRITEIGNORE0HP, + VARIOUS_HANDLE_FORM_CHANGE, + VARIOUS_GET_STAT_VALUE, + VARIOUS_JUMP_IF_FULL_HP, + VARIOUS_LOSE_TYPE, + VARIOUS_TRY_ACTIVATE_SOULHEART, + VARIOUS_TRY_ACTIVATE_RECEIVER, + VARIOUS_TRY_ACTIVATE_BEAST_BOOST, + VARIOUS_TRY_FRISK, + VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED, + VARIOUS_TRY_FAIRY_LOCK, + VARIOUS_JUMP_IF_NO_ALLY, + VARIOUS_POISON_TYPE_IMMUNITY, + VARIOUS_JUMP_IF_HOLD_EFFECT, + VARIOUS_INFATUATE_WITH_BATTLER, + VARIOUS_SET_LAST_USED_ITEM, + VARIOUS_PARALYZE_TYPE_IMMUNITY, + VARIOUS_JUMP_IF_ABSENT, + VARIOUS_DESTROY_ABILITY_POPUP, + VARIOUS_TOTEM_BOOST, + VARIOUS_TRY_ACTIVATE_GRIM_NEIGH, + VARIOUS_MOVEEND_ITEM_EFFECTS, + VARIOUS_TERRAIN_SEED, + VARIOUS_MAKE_INVISIBLE, + VARIOUS_ROOM_SERVICE, + VARIOUS_EERIE_SPELL_PP_REDUCE, + VARIOUS_JUMP_IF_TEAM_HEALTHY, + VARIOUS_TRY_HEAL_QUARTER_HP, + VARIOUS_JUMP_IF_PRANKSTER_BLOCKED, + VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER, + VARIOUS_GET_ROTOTILLER_TARGETS, + VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED, + VARIOUS_TRY_ACTIVATE_BATTLE_BOND, + VARIOUS_CONSUME_BERRY, + VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL, + VARIOUS_JUMP_IF_SPECIES, + VARIOUS_UPDATE_ABILITY_POPUP, + VARIOUS_JUMP_IF_WEATHER_AFFECTED, + VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED, + VARIOUS_SET_ATTACKER_STICKY_WEB_USER, + VARIOUS_TRY_NO_RETREAT, + VARIOUS_CHECK_POLTERGEIST, + VARIOUS_CUT_1_3_HP_RAISE_STATS, + VARIOUS_TRY_END_NEUTRALIZING_GAS, + VARIOUS_JUMP_IF_UNDER_200, + VARIOUS_SET_SKY_DROP, + VARIOUS_CLEAR_SKY_DROP, + VARIOUS_SKY_DROP_YAWN, + VARIOUS_CURE_CERTAIN_STATUSES, + VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES, + VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY, + VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT, + VARIOUS_SAVE_BATTLER_ITEM, + VARIOUS_RESTORE_BATTLER_ITEM, + VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM, + VARIOUS_SWAP_SIDE_STATUSES, + VARIOUS_SWAP_STATS, +}; // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b2f46f124c..244aab3ed0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9146,13 +9146,14 @@ static void Cmd_various(void) s32 i; u8 data[10]; u32 battler, bits; + enum CmdVarious variousId = cmd->id; if (gBattleControllerExecFlags) return; battler = GetBattlerForBattleScript(cmd->battler); - switch (cmd->id) + switch (variousId) { // Roar will fail in a double wild battle when used by the player against one of the two alive wild mons. // Also when an opposing wild mon uses it againt its partner. From d16f6185f7701f70083e3c33f1646de810da30e3 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 21 Dec 2024 16:27:35 +0100 Subject: [PATCH 499/544] Fix IS_MOVE_STATUS regression (#5848) --- src/battle_ai_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 267fc476c2..b68112374d 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2393,7 +2393,7 @@ bool32 HasDamagingMoveOfType(u32 battlerId, u32 type) for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE - && !IS_MOVE_STATUS(moves[i]].type == type && gMovesInfo[moves[i])) + && gMovesInfo[moves[i]].type == type && !IS_MOVE_STATUS(moves[i])) return TRUE; } From f61a0f6a30b667ceef00669f38a487edb8096779 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 21 Dec 2024 19:45:50 +0100 Subject: [PATCH 500/544] Sheer Force fix and move effect cleanup (#5812) --- asm/macros/battle_script.inc | 10 - data/battle_scripts_1.s | 56 +- include/battle_scripts.h | 14 +- include/constants/battle.h | 10 +- include/constants/battle_move_effects.h | 7 - include/pokemon.h | 10 +- src/battle_ai_main.c | 11 +- src/battle_script_commands.c | 170 ++-- src/battle_util.c | 5 + src/data/battle_move_effects.h | 42 - src/data/moves_info.h | 62 +- test/battle/ability/sheer_force.c | 949 +++++++++++++++++- test/battle/move_effect/salt_cure.c | 2 +- test/battle/move_effect_secondary/haze.c | 32 + .../ion_deluge.c} | 22 +- .../battle/move_effect_secondary/leech_seed.c | 37 + .../move_effect_secondary/light_screen.c | 32 + test/battle/move_effect_secondary/reflect.c | 32 + 18 files changed, 1266 insertions(+), 237 deletions(-) create mode 100644 test/battle/move_effect_secondary/haze.c rename test/battle/{move_effect/plasma_fists.c => move_effect_secondary/ion_deluge.c} (80%) create mode 100644 test/battle/move_effect_secondary/leech_seed.c create mode 100644 test/battle/move_effect_secondary/light_screen.c create mode 100644 test/battle/move_effect_secondary/reflect.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 7ae4403ff9..fbc724a81e 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1425,11 +1425,6 @@ callnative BS_TryRevertWeatherForm .endm - .macro applysaltcure battler:req - callnative BS_ApplySaltCure - .byte \battler - .endm - .macro trysetoctolock battler:req, failInstr:req callnative BS_TrySetOctolock .byte \battler @@ -2214,11 +2209,6 @@ .4byte \jumpInstr .endm - .macro eeriespellppreduce failInstr:req - various BS_TARGET, VARIOUS_EERIE_SPELL_PP_REDUCE - .4byte \failInstr - .endm - .macro jumpifteamhealthy battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_TEAM_HEALTHY .4byte \jumpInstr diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 7359b4469a..d94ba2363b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -396,16 +396,10 @@ BattleScript_EffectHit_Pledge:: tryfaintmon BS_TARGET return -BattleScript_EffectSaltCure:: - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - jumpiffainted BS_TARGET, TRUE, BattleScript_EffectSaltCure_End - jumpifsubstituteblocks BattleScript_EffectSaltCure_End - applysaltcure BS_TARGET +BattleScript_MoveEffectSaltCure:: printstring STRINGID_TARGETISBEINGSALTCURED waitmessage B_WAIT_TIME_LONG -BattleScript_EffectSaltCure_End: - goto BattleScript_MoveEnd + return BattleScript_SaltCureExtraDamage:: playanimation BS_TARGET, B_ANIM_SALT_CURE_DAMAGE, NULL @@ -949,13 +943,10 @@ BattleScript_HyperspaceFuryRemoveProtect:: waitmessage B_WAIT_TIME_LONG return -BattleScript_EffectPlasmaFists:: - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - orword gFieldStatuses, STATUS_FIELD_ION_DELUGE +BattleScript_MoveEffectIonDeluge:: printstring STRINGID_IONDELUGEON waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_EffectSparklySwirl:: call BattleScript_EffectHit_Ret @@ -966,41 +957,25 @@ BattleScript_EffectSparklySwirl:: waitstate goto BattleScript_MoveEnd -BattleScript_EffectFreezyFrost:: - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - normalisebuffs +BattleScript_MoveEffectHaze:: printstring STRINGID_STATCHANGESGONE waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return -BattleScript_EffectSappySeed:: - jumpifstatus3 BS_TARGET, STATUS3_LEECHSEED, BattleScript_EffectHit - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - jumpifhasnohp BS_TARGET, BattleScript_MoveEnd - setseeded - printfromtable gLeechSeedStringIds +BattleScript_MoveEffectLeechSeed:: + printstring STRINGID_PKMNSEEDED waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectBaddyBad:: - jumpifsideaffecting BS_ATTACKER, SIDE_STATUS_REFLECT, BattleScript_EffectHit - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - setreflect +BattleScript_MoveEffectReflect:: printfromtable gReflectLightScreenSafeguardStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return -BattleScript_EffectGlitzyGlow:: - jumpifsideaffecting BS_ATTACKER, SIDE_STATUS_LIGHTSCREEN, BattleScript_EffectHit - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - setlightscreen +BattleScript_MoveEffectLightScreen:: printfromtable gReflectLightScreenSafeguardStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_EffectStuffCheeks:: attackcanceler @@ -4065,13 +4040,10 @@ BattleScript_EffectDestinyBond:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectEerieSpell:: - call BattleScript_EffectHit_Ret - tryfaintmon BS_TARGET - eeriespellppreduce BattleScript_MoveEnd +BattleScript_MoveEffectEerieSpell:: printstring STRINGID_PKMNREDUCEDPP waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + return BattleScript_EffectSpite:: attackcanceler diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 3c58b28e1e..158dfb5dc3 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -804,18 +804,18 @@ extern const u8 BattleScript_EffectGeomancy[]; extern const u8 BattleScript_EffectFairyLock[]; extern const u8 BattleScript_EffectAllySwitch[]; extern const u8 BattleScript_EffectRelicSong[]; -extern const u8 BattleScript_EffectEerieSpell[]; +extern const u8 BattleScript_MoveEffectEerieSpell[]; extern const u8 BattleScript_EffectJungleHealing[]; extern const u8 BattleScript_EffectCoaching[]; extern const u8 BattleScript_EffectDecorate[]; extern const u8 BattleScript_EffectRecoilHP25[]; extern const u8 BattleScript_EffectStuffCheeks[]; -extern const u8 BattleScript_EffectGlitzyGlow[]; -extern const u8 BattleScript_EffectBaddyBad[]; -extern const u8 BattleScript_EffectSappySeed[]; -extern const u8 BattleScript_EffectFreezyFrost[]; +extern const u8 BattleScript_MoveEffectLightScreen[]; +extern const u8 BattleScript_MoveEffectReflect[]; +extern const u8 BattleScript_MoveEffectLeechSeed[]; +extern const u8 BattleScript_MoveEffectHaze[]; extern const u8 BattleScript_EffectSparklySwirl[]; -extern const u8 BattleScript_EffectPlasmaFists[]; +extern const u8 BattleScript_MoveEffectIonDeluge[]; extern const u8 BattleScript_EffectHyperspaceFury[]; extern const u8 BattleScript_EffectAuraWheel[]; extern const u8 BattleScript_EffectPhotonGeyser[]; @@ -838,7 +838,7 @@ extern const u8 BattleScript_EffectRevivalBlessing[]; extern const u8 BattleScript_EffectSnow[]; extern const u8 BattleScript_EffectTakeHeart[]; extern const u8 BattleScript_EffectCorrosiveGas[]; -extern const u8 BattleScript_EffectSaltCure[]; +extern const u8 BattleScript_MoveEffectSaltCure[]; extern const u8 BattleScript_EffectChillyReception[]; extern const u8 BattleScript_EffectMaxMove[]; extern const u8 BattleScript_EffectGlaiveRush[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index ed19a72d9c..d9c4e1301c 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -405,8 +405,16 @@ #define MOVE_EFFECT_PSYCHIC_NOISE 78 #define MOVE_EFFECT_TERA_BLAST 79 #define MOVE_EFFECT_ORDER_UP 80 +#define MOVE_EFFECT_ION_DELUGE 81 +#define MOVE_EFFECT_AROMATHERAPY 82 // No functionality yet +#define MOVE_EFFECT_HAZE 83 +#define MOVE_EFFECT_LEECH_SEED 84 +#define MOVE_EFFECT_REFLECT 85 +#define MOVE_EFFECT_LIGHT_SCREEN 86 +#define MOVE_EFFECT_SALT_CURE 87 +#define MOVE_EFFECT_EERIE_SPELL 88 -#define NUM_MOVE_EFFECTS 81 +#define NUM_MOVE_EFFECTS 88 #define MOVE_EFFECT_AFFECTS_USER 0x2000 #define MOVE_EFFECT_CERTAIN 0x4000 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index b1472d0280..d0e4839bce 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -282,7 +282,6 @@ enum { EFFECT_ALLY_SWITCH, EFFECT_RELIC_SONG, EFFECT_BODY_PRESS, - EFFECT_EERIE_SPELL, EFFECT_JUNGLE_HEALING, EFFECT_COACHING, EFFECT_LASH_OUT, @@ -293,12 +292,7 @@ enum { EFFECT_RECOIL_HP_25, EFFECT_STUFF_CHEEKS, EFFECT_GRAV_APPLE, - EFFECT_GLITZY_GLOW, - EFFECT_BADDY_BAD, - EFFECT_SAPPY_SEED, - EFFECT_FREEZY_FROST, EFFECT_SPARKLY_SWIRL, - EFFECT_PLASMA_FISTS, EFFECT_HYPERSPACE_FURY, EFFECT_AURA_WHEEL, EFFECT_PHOTON_GEYSER, @@ -331,7 +325,6 @@ enum { EFFECT_COLLISION_COURSE, EFFECT_CORROSIVE_GAS, EFFECT_POPULATION_BOMB, - EFFECT_SALT_CURE, EFFECT_CHILLY_RECEPTION, EFFECT_MAX_MOVE, EFFECT_GLAIVE_RUSH, diff --git a/include/pokemon.h b/include/pokemon.h index 8a618f5fe1..069290b363 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -564,8 +564,12 @@ struct MoveInfo #define EFFECTS_ARR(...) (const struct AdditionalEffect[]) {__VA_ARGS__} #define ADDITIONAL_EFFECTS(...) EFFECTS_ARR( __VA_ARGS__ ), .numAdditionalEffects = ARRAY_COUNT(EFFECTS_ARR( __VA_ARGS__ )) -// Just a hack to make a move boosted by Sheer Force despite having no secondary effects affected -#define SHEER_FORCE_HACK { .moveEffect = 0, .chance = 100, } +enum SheerForceBoost +{ + SHEER_FORCE_AUTO_BOOST, // This is the default state when a move has a move effect with a chance + SHEER_FORCE_BOOST, // If a move effect doesn't have an effect with a chance this can force a boost + SHEER_FORCE_NO_BOOST, // Prevents a Sheer Force boost +}; struct AdditionalEffect { @@ -573,6 +577,8 @@ struct AdditionalEffect u8 self:1; u8 onlyIfTargetRaisedStats:1; u8 onChargeTurnOnly:1; + u8 sheerForceBoost:2; // Handles edge cases for Sheer Force + u8 padding:3; u8 chance; // 0% = effect certain, primary effect }; diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index d245be8cd5..538b0e4732 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2511,8 +2511,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-4); break; //TODO - //case EFFECT_PLASMA_FISTS: - //break; //case EFFECT_SHELL_TRAP: //break; //case EFFECT_BEAK_BLAST: @@ -4416,10 +4414,6 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) || gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY) ADJUST_SCORE(GOOD_EFFECT); break; - case EFFECT_SALT_CURE: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_WATER) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL)) - ADJUST_SCORE(DECENT_EFFECT); - break; } // move effect checks // check move additional effects that are likely to happen @@ -4664,6 +4658,11 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (!HasMoveWithAdditionalEffect(battlerDef, MOVE_EFFECT_RAPID_SPIN) && ShouldTrap(battlerAtk, battlerDef, move)) ADJUST_SCORE(BEST_EFFECT); break; + case MOVE_EFFECT_SALT_CURE: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_WATER) || IS_BATTLER_OF_TYPE(battlerDef, TYPE_STEEL)) + ADJUST_SCORE(DECENT_EFFECT); + break; + } } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 244aab3ed0..40f9db64c6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2904,7 +2904,8 @@ void SetMoveEffect(bool32 primary, bool32 certain) bool32 statusChanged = FALSE; bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR); u32 flags = 0; - u16 battlerAbility; + u32 battlerAbility; + u32 side; bool8 activateAfterFaint = FALSE; // NULL move effect @@ -3992,6 +3993,117 @@ void SetMoveEffect(bool32 primary, bool32 certain) } } break; + case MOVE_EFFECT_ION_DELUGE: + if (!(gFieldStatuses & STATUS_FIELD_ION_DELUGE)) + { + gFieldStatuses |= STATUS_FIELD_ION_DELUGE; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectIonDeluge; + } + break; + // TODO: The moves aromatherapy and heal bell need a refactor first + // case MOVE_EFFECT_AROMATHERAPY: + // break; + case MOVE_EFFECT_HAZE: + for (i = 0; i < gBattlersCount; i++) + TryResetBattlerStatChanges(i); + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectHaze; + break; + case MOVE_EFFECT_LEECH_SEED: + if (!IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) && !(gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED)) + { + gStatuses3[gBattlerTarget] |= gBattlerAttacker; + gStatuses3[gBattlerTarget] |= STATUS3_LEECHSEED; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectLeechSeed; + } + break; + case MOVE_EFFECT_REFLECT: + side = GetBattlerSide(gBattlerAttacker); + if (!(gSideStatuses[side] & SIDE_STATUS_REFLECT)) + { + gSideStatuses[side] |= SIDE_STATUS_REFLECT; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[side].reflectTimer = 8; + else + gSideTimers[side].reflectTimer = 5; + gSideTimers[side].reflectBattlerId = gBattlerAttacker; + + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectReflect; + } + break; + case MOVE_EFFECT_LIGHT_SCREEN: + side = GetBattlerSide(gBattlerAttacker); + if (!(gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN)) + { + gSideStatuses[side] |= SIDE_STATUS_LIGHTSCREEN; + if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LIGHT_CLAY) + gSideTimers[side].lightscreenTimer = 8; + else + gSideTimers[side].lightscreenTimer = 5; + gSideTimers[side].lightscreenBattlerId = gBattlerAttacker; + + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; + else + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectLightScreen; + } + break; + case MOVE_EFFECT_SALT_CURE: + if (!(gStatuses4[gBattlerTarget] & STATUS4_SALT_CURE)) + { + gStatuses4[gBattlerTarget] |= STATUS4_SALT_CURE; + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectSaltCure; + } + break; + case MOVE_EFFECT_EERIE_SPELL: + if (gLastMoves[gBattlerTarget] != MOVE_NONE && gLastMoves[gBattlerTarget] != 0xFFFF) + { + u32 i; + + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (gLastMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i]) + break; + } + + if (i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0) + { + u32 ppToDeduct = 3; + + if (gBattleMons[gBattlerTarget].pp[i] < ppToDeduct) + ppToDeduct = gBattleMons[gBattlerTarget].pp[i]; + + PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) + ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) + gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct; + if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i)) + && !(gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED)) + { + BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]); + MarkBattlerForControllerExec(gBattlerTarget); + } + + if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF) + CancelMultiTurnMoves(gBattlerTarget); + + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_MoveEffectEerieSpell; + } + } + break; } } } @@ -10459,53 +10571,6 @@ static void Cmd_various(void) MarkBattlerForControllerExec(battler); break; } - case VARIOUS_EERIE_SPELL_PP_REDUCE: - { - VARIOUS_ARGS(const u8 *failInstr); - if (gLastMoves[battler] != 0 && gLastMoves[battler] != 0xFFFF) - { - s32 i; - - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (gLastMoves[battler] == gBattleMons[battler].moves[i]) - break; - } - - if (i != MAX_MON_MOVES && gBattleMons[battler].pp[i] != 0) - { - s32 ppToDeduct = 3; - - if (gBattleMons[battler].pp[i] < ppToDeduct) - ppToDeduct = gBattleMons[battler].pp[i]; - - PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[battler]) - ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); - PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) - gBattleMons[battler].pp[i] -= ppToDeduct; - if (!(gDisableStructs[battler].mimickedMoves & (1u << i)) - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) - { - BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[battler].pp[i]), &gBattleMons[battler].pp[i]); - MarkBattlerForControllerExec(battler); - } - - if (gBattleMons[battler].pp[i] == 0 && gBattleStruct->skyDropTargets[battler] == 0xFF) - CancelMultiTurnMoves(battler); - - gBattlescriptCurrInstr = cmd->nextInstr; // continue - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; // cant reduce pp - } - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; // cant reduce pp - } - return; - } case VARIOUS_JUMP_IF_TEAM_HEALTHY: { VARIOUS_ARGS(const u8 *jumpInstr); @@ -16539,15 +16604,6 @@ void BS_JumpIfElectricAbilityAffected(void) gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ApplySaltCure(void) -{ - NATIVE_ARGS(u8 battler); - - u8 battler = GetBattlerForBattleScript(cmd->battler); - gStatuses4[battler] |= STATUS4_SALT_CURE; - gBattlescriptCurrInstr = cmd->nextInstr; -} - void BS_JumpIfArgument(void) { NATIVE_ARGS(u8 argument, const u8 *jumpInstr); diff --git a/src/battle_util.c b/src/battle_util.c index 45be169dfd..1e0341f337 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -11783,8 +11783,13 @@ bool32 MoveIsAffectedBySheerForce(u32 move) u32 i; for (i = 0; i < gMovesInfo[move].numAdditionalEffects; i++) { + if (gMovesInfo[move].additionalEffects[i].sheerForceBoost == SHEER_FORCE_NO_BOOST) + continue; + if (gMovesInfo[move].additionalEffects[i].chance > 0) return TRUE; + if (gMovesInfo[move].additionalEffects[i].sheerForceBoost == SHEER_FORCE_BOOST) + return TRUE; } return FALSE; } diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index b5b3e539c8..ae9e831e4a 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -1811,12 +1811,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_EERIE_SPELL] = - { - .battleScript = BattleScript_EffectEerieSpell, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_JUNGLE_HEALING] = { .battleScript = BattleScript_EffectJungleHealing, @@ -1880,42 +1874,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_GLITZY_GLOW] = - { - .battleScript = BattleScript_EffectGlitzyGlow, - .battleTvScore = 0, // TODO: Assign points - }, - - [EFFECT_BADDY_BAD] = - { - .battleScript = BattleScript_EffectBaddyBad, - .battleTvScore = 0, // TODO: Assign points - }, - - [EFFECT_SAPPY_SEED] = - { - .battleScript = BattleScript_EffectSappySeed, - .battleTvScore = 0, // TODO: Assign points - }, - - [EFFECT_FREEZY_FROST] = - { - .battleScript = BattleScript_EffectFreezyFrost, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_SPARKLY_SWIRL] = { .battleScript = BattleScript_EffectSparklySwirl, .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_PLASMA_FISTS] = - { - .battleScript = BattleScript_EffectPlasmaFists, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_HYPERSPACE_FURY] = { .battleScript = BattleScript_EffectHyperspaceFury, @@ -2113,12 +2077,6 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleTvScore = 0, // TODO: Assign points }, - [EFFECT_SALT_CURE] = - { - .battleScript = BattleScript_EffectSaltCure, - .battleTvScore = 0, // TODO: Assign points - }, - [EFFECT_CHILLY_RECEPTION] = { .battleScript = BattleScript_EffectChillyReception, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 180d0d74ac..4ff3b71f4c 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -16757,7 +16757,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Hits with electrical fists.\n" "Normal moves turn Electric."), - .effect = EFFECT_PLASMA_FISTS, + .effect = EFFECT_HIT, .power = 100, .type = TYPE_ELECTRIC, .accuracy = 100, @@ -16772,6 +16772,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_ION_DELUGE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), .battleAnimScript = gBattleAnimMove_PlasmaFists, }, @@ -16820,6 +16825,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_EVS_PLUS_1, .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, }), #endif .battleAnimScript = gBattleAnimMove_ZippyZap, @@ -16869,6 +16875,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, }), .battleAnimScript = gBattleAnimMove_FloatyFall, }, @@ -16936,6 +16943,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, }), .battleAnimScript = gBattleAnimMove_BuzzyBuzz, }, @@ -16961,6 +16969,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_BURN, .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, }), .battleAnimScript = gBattleAnimMove_SizzlySlide, }, @@ -16971,7 +16980,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Telekinetic force that sets\n" "wall, lowering Sp. Atk damage."), - .effect = EFFECT_GLITZY_GLOW, + .effect = EFFECT_HIT, .power = B_UPDATED_MOVE_DATA >= GEN_8 ? 80 : 90, .type = TYPE_PSYCHIC, .accuracy = B_UPDATED_MOVE_DATA >= GEN_8 ? 95 : 100, @@ -16981,6 +16990,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LIGHT_SCREEN, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), .battleAnimScript = gBattleAnimMove_GlitzyGlow, }, @@ -16990,7 +17004,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Acting badly, attacks. Sets\n" "wall, lowering Attack damage."), - .effect = EFFECT_BADDY_BAD, + .effect = EFFECT_HIT, .power = B_UPDATED_MOVE_DATA >= GEN_8 ? 80 : 90, .type = TYPE_DARK, .accuracy = B_UPDATED_MOVE_DATA >= GEN_8 ? 95 : 100, @@ -17000,6 +17014,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_REFLECT, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), .battleAnimScript = gBattleAnimMove_BaddyBad, }, @@ -17009,7 +17028,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Giant stalk scatters seeds\n" "that drain HP every turn."), - .effect = EFFECT_SAPPY_SEED, + .effect = EFFECT_HIT, .power = B_UPDATED_MOVE_DATA >= GEN_8 ? 100 : 90, .type = TYPE_GRASS, .accuracy = B_UPDATED_MOVE_DATA >= GEN_8 ? 90 : 100, @@ -17020,6 +17039,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_LEECH_SEED, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), .battleAnimScript = gBattleAnimMove_SappySeed, }, @@ -17029,7 +17053,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Crystal from cold haze hits.\n" "Eliminates all stat changes."), - .effect = EFFECT_FREEZY_FROST, + .effect = EFFECT_HIT, .power = B_UPDATED_MOVE_DATA >= GEN_8 ? 100 : 90, .type = TYPE_ICE, .accuracy = B_UPDATED_MOVE_DATA >= GEN_8 ? 90 : 100, @@ -17039,6 +17063,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_HAZE, + .chance = 100, + .sheerForceBoost = SHEER_FORCE_NO_BOOST, + }), .battleAnimScript = gBattleAnimMove_FreezyFrost, }, @@ -17048,7 +17077,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Wrap foe with whirlwind of\n" "scent. Heals party's status."), - .effect = EFFECT_SPARKLY_SWIRL, + .effect = EFFECT_SPARKLY_SWIRL, // Temprorary .power = B_UPDATED_MOVE_DATA >= GEN_8 ? 120 : 90, .type = TYPE_FAIRY, .accuracy = B_UPDATED_MOVE_DATA >= GEN_8 ? 85 : 100, @@ -17058,6 +17087,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, + // .additionalEffects = ADDITIONAL_EFFECTS({ + // .moveEffect = 0, // MOVE_EFFECT_AROMATHERAPY, Added 0 for Sheer Force boost + // .chance = 100, + // .sheerForceBoost = SHEER_FORCE_NO_BOOST, + // }), .battleAnimScript = gBattleAnimMove_SparklySwirl, }, @@ -18682,7 +18716,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Attacks with psychic power.\n" "Foe's last move has 3 PP cut."), - .effect = EFFECT_EERIE_SPELL, + .effect = EFFECT_HIT, .power = 80, .type = TYPE_PSYCHIC, .accuracy = 100, @@ -18696,6 +18730,10 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_EERIE_SPELL, + .chance = 100, + }), .battleAnimScript = gBattleAnimMove_EerieSpell, }, @@ -19497,7 +19535,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "Hurts foe every turn. Double\n" "damage to Steel and Water."), - .effect = EFFECT_SALT_CURE, + .effect = EFFECT_HIT, .power = 40, .type = TYPE_ROCK, .accuracy = 100, @@ -19506,6 +19544,10 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_SALT_CURE, + .chance = 100, + }), .battleAnimScript = gBattleAnimMove_SaltCure, }, @@ -20402,7 +20444,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_ATK_PLUS_1, .self = TRUE, .onChargeTurnOnly = TRUE, - }, SHEER_FORCE_HACK), + .sheerForceBoost = SHEER_FORCE_BOOST, + }), .battleAnimScript = gBattleAnimMove_ElectroShot, }, @@ -20676,6 +20719,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_TOXIC, .chance = 50, + .sheerForceBoost = SHEER_FORCE_BOOST, }), .battleAnimScript = gBattleAnimMove_MalignantChain, }, diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c index 97dee48a31..e06e56c2c5 100644 --- a/test/battle/ability/sheer_force.c +++ b/test/battle/ability/sheer_force.c @@ -7,64 +7,909 @@ ASSUMPTIONS ASSUME(MoveIsAffectedBySheerForce(MOVE_ELECTRO_SHOT) == TRUE); } -SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of moves", s16 damage) +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Magnitude", s16 damage) { - s32 j; - u32 ability = 0, move = 0; - - for (j = 1; j < MOVES_COUNT; j++) - { - if (MoveIsAffectedBySheerForce(j) - //&& gMovesInfo[j].effect != EFFECT_ORDER_UP - && gMovesInfo[j].effect != EFFECT_AURA_WHEEL - && gMovesInfo[j].effect != EFFECT_PLACEHOLDER) - { - PARAMETRIZE { ability = ABILITY_ANGER_POINT; move = j; } - PARAMETRIZE { ability = ABILITY_SHEER_FORCE; move = j; } - } - } - + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } GIVEN { - PLAYER(SPECIES_TAUROS) { Ability(ability); Status1(move == MOVE_SNORE ? STATUS1_SLEEP : STATUS1_NONE); } + PLAYER(SPECIES_TAUROS) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - if (move == MOVE_ALLURING_VOICE || move == MOVE_BURNING_JEALOUSY) // Alluring Voice requires the target to boost stats to have an effect - TURN { MOVE(opponent, MOVE_AGILITY); MOVE(player, move); } - else if (move == MOVE_UPPER_HAND) // Upper Hand requires the target to be using a damaging priority move - TURN { MOVE(opponent, MOVE_QUICK_ATTACK); MOVE(player, move); } - else - TURN { MOVE(player, move); } - if (gMovesInfo[move].effect == EFFECT_TWO_TURNS_ATTACK || gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE) { - TURN { SKIP_TURN(player); } - TURN { ; } - } + TURN { MOVE(player, MOVE_MAGNITUDE); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent, captureDamage: &results[i].damage); - if (ability == ABILITY_SHEER_FORCE) { - NONE_OF { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - STATUS_ICON(opponent, STATUS1_FREEZE); - STATUS_ICON(opponent, STATUS1_POISON); - STATUS_ICON(opponent, STATUS1_BURN); - STATUS_ICON(opponent, STATUS1_TOXIC_POISON); - STATUS_ICON(opponent, STATUS1_PARALYSIS); - MESSAGE("Wobbuffet is confused!"); - MESSAGE("Wobbuffet flinched and couldn't move!"); - } - // Volt Tackle/Flare Blitz edge case: recoil happens, but target isn't statused - if (gMovesInfo[move].recoil > 0) - { - HP_BAR(player); - MESSAGE("Tauros was damaged by the recoil!"); - } - } } FINALLY { - s32 j; - for (j = 0; j < gBattleTestRunnerState->parametersCount; j+=2) - { - EXPECT_GT(results[j+1].damage, results[j].damage); - } + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Eruption", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PRESENT); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Water Spout", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PRESENT); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Present", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PRESENT); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Psywave", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYWAVE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Round", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROUND); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Gyro Ball", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GYRO_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Electro Ball", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ELECTRO_BALL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Dragon Energy", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_ENERGY); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Belch", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); HP(1); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BELCH); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Shell Trap", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SHELL_TRAP); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Burn Up", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ZEN_MODE; } + GIVEN { + PLAYER(SPECIES_DARMANITAN) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Double Shock", s16 damage) +{ + u16 move = 0; + PARAMETRIZE { move = MOVE_SKILL_SWAP; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_PIKACHU); + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }; + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_DOUBLE_SHOCK); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Steel Roller", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_GRASSY_TERRAIN); MOVE(player, MOVE_STEEL_ROLLER); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Synchronoise", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); HP(1); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_CHANSEY); + } WHEN { + TURN { MOVE(player, MOVE_SYNCHRONOISE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Aura Wheel", s16 damage) +{ + u16 move = 0; + PARAMETRIZE { move = MOVE_SKILL_SWAP; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_MORPEKO); + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }; + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_AURA_WHEEL); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Hyperspace Fury", s16 damage) +{ + u16 move = 0; + PARAMETRIZE { move = MOVE_SKILL_SWAP; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_HOOPA_UNBOUND); + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }; + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_HYPERSPACE_FURY); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Bolt Beak", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BOLT_BEAK); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Fishious Rend", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FISHIOUS_REND); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Comeuppance", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_COMEUPPANCE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} +SINGLE_BATTLE_TEST("Sheer Force doesn't boost Comeuppance", s16 damage) +{ + u16 ability = 0; + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; } + PARAMETRIZE { ability = ABILITY_ANGER_POINT; } + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PAYBACK); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + EXPECT_NE(results[0].damage, 0); + } +} + +static inline bool32 IgnoreMoveForSheerForceBoost(u32 move) +{ + switch (move) { + case MOVE_PSYWAVE: // Just skip Psywve + case MOVE_PRESENT: // And Present... + case MOVE_MAGNITUDE: // And Magnitude... + case MOVE_ERUPTION: // And Eruption... + case MOVE_WATER_SPOUT: + case MOVE_GYRO_BALL: + case MOVE_SYNCHRONOISE: + case MOVE_ELECTRO_BALL: + case MOVE_ROUND: + case MOVE_BELCH: + case MOVE_HYPERSPACE_FURY: + case MOVE_BURN_UP: + case MOVE_SHELL_TRAP: + case MOVE_BOLT_BEAK: + case MOVE_FISHIOUS_REND: + case MOVE_AURA_WHEEL: + case MOVE_STEEL_ROLLER: + case MOVE_DRAGON_ENERGY: + case MOVE_DOUBLE_SHOCK: + case MOVE_COMEUPPANCE: + case MOVE_UPPER_HAND: // Bugged? + case MOVE_GLITZY_GLOW: // Light Screen Move Effect seems to be bugged + case MOVE_PAYBACK: + return TRUE; + } + return FALSE; +} + +static inline bool32 IsMoveSheerForceBoosted(u32 move) +{ + switch (move) { + case MOVE_AIR_SLASH: + case MOVE_ANCIENT_POWER: + case MOVE_ASTONISH: + case MOVE_BITE: + case MOVE_BLIZZARD: + case MOVE_BODY_SLAM: + case MOVE_BOUNCE: + case MOVE_BREAKING_SWIPE: + case MOVE_BUBBLE: + case MOVE_BUBBLE_BEAM: + case MOVE_BUG_BUZZ: + case MOVE_BULLDOZE: + case MOVE_BURNING_JEALOUSY: + case MOVE_CHARGE_BEAM: + case MOVE_CHILLING_WATER: + case MOVE_CONFUSION: + case MOVE_CRUNCH: + case MOVE_CRUSH_CLAW: + case MOVE_DARK_PULSE: + case MOVE_DRAGON_RUSH: + case MOVE_DRAGON_BREATH: + case MOVE_DYNAMIC_PUNCH: + case MOVE_EARTH_POWER: + case MOVE_EMBER: + case MOVE_ESPER_WING: + case MOVE_EXTRASENSORY: + case MOVE_FAKE_OUT: + case MOVE_FIRE_BLAST: + case MOVE_FIRE_FANG: + case MOVE_FIRE_PUNCH: + case MOVE_FLAME_CHARGE: + case MOVE_FLAME_WHEEL: + case MOVE_FLAMETHROWER: + case MOVE_FLARE_BLITZ: + case MOVE_FLASH_CANNON: + case MOVE_FOCUS_BLAST: + case MOVE_FORCE_PALM: + case MOVE_GUNK_SHOT: + case MOVE_HEADBUTT: + case MOVE_HEAT_WAVE: + case MOVE_HURRICANE: + case MOVE_ICE_BEAM: + case MOVE_ICE_FANG: + case MOVE_ICE_PUNCH: + case MOVE_ICICLE_CRASH: + case MOVE_ICY_WIND: + case MOVE_IRON_HEAD: + case MOVE_IRON_TAIL: + case MOVE_LAVA_PLUME: + case MOVE_LIQUIDATION: + case MOVE_LOW_SWEEP: + case MOVE_METAL_CLAW: + case MOVE_MUD_BOMB: + case MOVE_MUDDY_WATER: + case MOVE_MUD_SHOT: + case MOVE_MUD_SLAP: + case MOVE_MYSTICAL_FIRE: + case MOVE_PLAY_ROUGH: + case MOVE_POISON_FANG: + case MOVE_POISON_JAB: + case MOVE_POISON_STING: + case MOVE_POISON_TAIL: + case MOVE_POUNCE: + case MOVE_POWER_UP_PUNCH: + case MOVE_PSYBEAM: + case MOVE_PSYCHIC: + case MOVE_RAZOR_SHELL: + case MOVE_ROCK_CLIMB: + case MOVE_ROCK_SLIDE: + case MOVE_ROCK_SMASH: + case MOVE_ROCK_TOMB: + case MOVE_SANDSEAR_STORM: + case MOVE_SCALD: + case MOVE_SCORCHING_SANDS: + case MOVE_SECRET_POWER: + case MOVE_SHADOW_BALL: + case MOVE_SIGNAL_BEAM: + case MOVE_SKY_ATTACK: + case MOVE_SLUDGE_BOMB: + case MOVE_SLUDGE_WAVE: + case MOVE_SNARL: + case MOVE_SNORE: + case MOVE_STEEL_WING: + case MOVE_STOMP: + case MOVE_STONE_AXE: + case MOVE_STRUGGLE_BUG: + case MOVE_THROAT_CHOP: + case MOVE_THUNDER: + case MOVE_THUNDER_FANG: + case MOVE_THUNDERBOLT: + case MOVE_THUNDER_PUNCH: + case MOVE_TRAILBLAZE: + case MOVE_TWISTER: + case MOVE_UPPER_HAND: + case MOVE_WATER_PULSE: + case MOVE_WATERFALL: + case MOVE_ZAP_CANNON: + case MOVE_ZEN_HEADBUTT: + case MOVE_ACID: + case MOVE_ACID_SPRAY: + case MOVE_ALLURING_VOICE: + case MOVE_ANCHOR_SHOT: + case MOVE_APPLE_ACID: + case MOVE_AQUA_STEP: + case MOVE_AURA_WHEEL: + case MOVE_AURORA_BEAM: + case MOVE_AXE_KICK: + case MOVE_BARB_BARRAGE: + case MOVE_BITTER_MALICE: + case MOVE_BLAZE_KICK: + case MOVE_BLAZING_TORQUE: + case MOVE_BLEAKWIND_STORM: + case MOVE_BLUE_FLARE: + case MOVE_BOLT_STRIKE: + case MOVE_BONE_CLUB: + case MOVE_CEASELESS_EDGE: + case MOVE_CHATTER: + case MOVE_CLANGOROUS_SOULBLAZE: + case MOVE_COMBAT_TORQUE: + case MOVE_CONSTRICT: + case MOVE_CROSS_POISON: + case MOVE_DIAMOND_STORM: + case MOVE_DIRE_CLAW: + case MOVE_DISCHARGE: + case MOVE_DIZZY_PUNCH: + case MOVE_DOUBLE_IRON_BASH: + case MOVE_DRUM_BEATING: + case MOVE_EERIE_SPELL: + case MOVE_ELECTROWEB: + case MOVE_ENERGY_BALL: + case MOVE_FIERY_DANCE: + case MOVE_FIERY_WRATH: + case MOVE_FREEZING_GLARE: + case MOVE_FIRE_LASH: + case MOVE_FREEZE_DRY: + case MOVE_FREEZE_SHOCK: + case MOVE_GENESIS_SUPERNOVA: + case MOVE_GLACIATE: + case MOVE_GRAV_APPLE: + case MOVE_HEART_STAMP: + case MOVE_HYPER_FANG: + case MOVE_ICE_BURN: + case MOVE_INFERNAL_PARADE: + case MOVE_INFERNO: + case MOVE_LEAF_TORNADO: + case MOVE_LICK: + case MOVE_LUMINA_CRASH: + case MOVE_LUNGE: + case MOVE_LUSTER_PURGE: + case MOVE_MAGICAL_TORQUE: + case MOVE_MALIGNANT_CHAIN: + case MOVE_MATCHA_GOTCHA: + case MOVE_METEOR_MASH: + case MOVE_MIRROR_SHOT: + case MOVE_MIST_BALL: + case MOVE_MOONBLAST: + case MOVE_MORTAL_SPIN: + case MOVE_MOUNTAIN_GALE: + case MOVE_MYSTICAL_POWER: + case MOVE_NEEDLE_ARM: + case MOVE_NIGHT_DAZE: + case MOVE_NOXIOUS_TORQUE: + case MOVE_NUZZLE: + case MOVE_OCTAZOOKA: + case MOVE_OMINOUS_WIND: + case MOVE_ORDER_UP: + case MOVE_POWDER_SNOW: + case MOVE_PSYSHIELD_BASH: + case MOVE_PYRO_BALL: + case MOVE_RAPID_SPIN: + case MOVE_RELIC_SONG: + case MOVE_ROLLING_KICK: + case MOVE_SACRED_FIRE: + case MOVE_SALT_CURE: + case MOVE_SEARING_SHOT: + case MOVE_SEED_FLARE: + case MOVE_SHADOW_BONE: + case MOVE_SHELL_SIDE_ARM: + case MOVE_SILVER_WIND: + case MOVE_SKITTER_SMACK: + case MOVE_SLUDGE: + case MOVE_SMOG: + case MOVE_SPARK: + case MOVE_SPARKLING_ARIA: + case MOVE_SPIRIT_BREAK: + case MOVE_SPIRIT_SHACKLE: + case MOVE_SPLISHY_SPLASH: + case MOVE_SPRINGTIDE_STORM: + case MOVE_STEAM_ERUPTION: + case MOVE_STEAMROLLER: + case MOVE_STOKED_SPARKSURFER: + case MOVE_STRANGE_STEAM: + case MOVE_SYRUP_BOMB: + case MOVE_THUNDER_SHOCK: + case MOVE_THUNDEROUS_KICK: + case MOVE_TORCH_SONG: + case MOVE_TRI_ATTACK: + case MOVE_TRIPLE_ARROWS: + case MOVE_TROP_KICK: + case MOVE_TWINEEDLE: + case MOVE_VOLT_TACKLE: + case MOVE_WICKED_TORQUE: + case MOVE_WILDBOLT_STORM: + case MOVE_ZING_ZAP: + case MOVE_ELECTRO_SHOT: + case MOVE_PSYCHIC_NOISE: + return TRUE; + } + return FALSE; +} + +// Test split into four parts that handles ~1/4 of all moves each +DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to boost 1") +{ + s16 damage1, damage2; + u32 move = 0; + for (u32 j = 1; j < MOVES_COUNT; j += 4) + if (gMovesInfo[j].category != DAMAGE_CATEGORY_STATUS && !IgnoreMoveForSheerForceBoost(j)) + PARAMETRIZE { move = j; } + GIVEN { + PLAYER(SPECIES_STEELIX) { Ability(ABILITY_SHEER_FORCE); Item(ITEM_BLUK_BERRY); } + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); Level(100); Item(ITEM_BLUK_BERRY); } + OPPONENT(SPECIES_STEELIX) { Ability(ABILITY_STURDY); Item(ITEM_BLUK_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); Level(100); Item(ITEM_BLUK_BERRY); } + } WHEN { + if (move == MOVE_ALLURING_VOICE || move == MOVE_BURNING_JEALOUSY) // Alluring Voice requires the target to boost stats to have an effect + TURN { MOVE(opponentRight, MOVE_AGILITY); MOVE(playerRight, MOVE_AGILITY); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_UPPER_HAND) // Upper Hand requires the target to be using a damaging priority move + TURN { MOVE(opponentRight, MOVE_QUICK_ATTACK, target: playerLeft); MOVE(playerRight, move, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_COUNTER || move == MOVE_UPPER_HAND) + TURN { MOVE(opponentRight, MOVE_QUICK_ATTACK, target: playerLeft); + MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentLeft); + MOVE(playerLeft, move, target: opponentRight); + MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_MIRROR_COAT || move == MOVE_METAL_BURST) + TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_SUCKER_PUNCH || move == MOVE_THUNDERCLAP) + TURN { MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_DREAM_EATER) + { + TURN { MOVE(playerLeft, MOVE_HYPNOSIS, target: opponentRight); MOVE(opponentLeft, MOVE_HYPNOSIS, target: playerRight); } + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else if (move == MOVE_SNORE) + { + TURN { MOVE(opponentRight, MOVE_HYPNOSIS, target: playerLeft); MOVE(playerRight, MOVE_HYPNOSIS, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else if (move == MOVE_SPIT_UP || move == MOVE_LAST_RESORT) + { + TURN { MOVE(playerLeft, MOVE_STOCKPILE); MOVE(opponentLeft, MOVE_STOCKPILE); } + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + if (gMovesInfo[move].effect == EFFECT_TWO_TURNS_ATTACK || gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE || gMovesInfo[move].effect == EFFECT_SOLAR_BEAM || gMovesInfo[move].effect == EFFECT_SKY_DROP) + { + TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + TURN { ; } + } + if (gMovesInfo[move].effect == EFFECT_FUTURE_SIGHT) + { + TURN { ; } + TURN { ; } + } + if (gMovesInfo[move].effect == EFFECT_BIDE) + { + TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + } + } SCENE { + if (gMovesInfo[move].effect != EFFECT_FUTURE_SIGHT) + { + HP_BAR(opponentRight, captureDamage: &damage1); + HP_BAR(playerRight, captureDamage: &damage2); + } + else + { + HP_BAR(playerRight, captureDamage: &damage2); + HP_BAR(opponentRight, captureDamage: &damage1); + } + } THEN { + if (IsMoveSheerForceBoosted(move)) + EXPECT_GT(damage1, damage2); + else + EXPECT_EQ(damage2, damage1); + } +} +DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to boost 2") +{ + s16 damage1, damage2; + u32 move = 0; + for (u32 j = 2; j < MOVES_COUNT; j += 4) + if (gMovesInfo[j].category != DAMAGE_CATEGORY_STATUS && !IgnoreMoveForSheerForceBoost(j)) + PARAMETRIZE { move = j; } + GIVEN { + PLAYER(SPECIES_STEELIX) { Ability(ABILITY_SHEER_FORCE); Item(ITEM_BLUK_BERRY); } + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); Level(100); Item(ITEM_BLUK_BERRY); } + OPPONENT(SPECIES_STEELIX) { Ability(ABILITY_STURDY); Item(ITEM_BLUK_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); Level(100); Item(ITEM_BLUK_BERRY); } + } WHEN { + if (move == MOVE_ALLURING_VOICE || move == MOVE_BURNING_JEALOUSY) // Alluring Voice requires the target to boost stats to have an effect + TURN { MOVE(opponentRight, MOVE_AGILITY); MOVE(playerRight, MOVE_AGILITY); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_UPPER_HAND) // Upper Hand requires the target to be using a damaging priority move + TURN { MOVE(opponentRight, MOVE_QUICK_ATTACK, target: playerLeft); MOVE(playerRight, move, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_COUNTER || move == MOVE_UPPER_HAND) + TURN { MOVE(opponentRight, MOVE_QUICK_ATTACK, target: playerLeft); + MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentLeft); + MOVE(playerLeft, move, target: opponentRight); + MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_MIRROR_COAT || move == MOVE_METAL_BURST) + TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_SUCKER_PUNCH || move == MOVE_THUNDERCLAP) + TURN { MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_DREAM_EATER) + { + TURN { MOVE(playerLeft, MOVE_HYPNOSIS, target: opponentRight); MOVE(opponentLeft, MOVE_HYPNOSIS, target: playerRight); } + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else if (move == MOVE_SNORE) + { + TURN { MOVE(opponentRight, MOVE_HYPNOSIS, target: playerLeft); MOVE(playerRight, MOVE_HYPNOSIS, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else if (move == MOVE_SPIT_UP || move == MOVE_LAST_RESORT) + { + TURN { MOVE(playerLeft, MOVE_STOCKPILE); MOVE(opponentLeft, MOVE_STOCKPILE); } + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + if (gMovesInfo[move].effect == EFFECT_TWO_TURNS_ATTACK || gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE || gMovesInfo[move].effect == EFFECT_SOLAR_BEAM || gMovesInfo[move].effect == EFFECT_SKY_DROP) + { + TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + TURN { ; } + } + if (gMovesInfo[move].effect == EFFECT_FUTURE_SIGHT) + { + TURN { ; } + TURN { ; } + } + if (gMovesInfo[move].effect == EFFECT_BIDE) + { + TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + } + } SCENE { + if (gMovesInfo[move].effect != EFFECT_FUTURE_SIGHT) + { + HP_BAR(opponentRight, captureDamage: &damage1); + HP_BAR(playerRight, captureDamage: &damage2); + } + else + { + HP_BAR(playerRight, captureDamage: &damage2); + HP_BAR(opponentRight, captureDamage: &damage1); + } + } THEN { + if (IsMoveSheerForceBoosted(move)) + EXPECT_GT(damage1, damage2); + else + EXPECT_EQ(damage2, damage1); + } +} +DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to boost 3") +{ + s16 damage1, damage2; + u32 move = 0; + for (u32 j = 3; j < MOVES_COUNT; j += 4) + if (gMovesInfo[j].category != DAMAGE_CATEGORY_STATUS && !IgnoreMoveForSheerForceBoost(j)) + PARAMETRIZE { move = j; } + GIVEN { + PLAYER(SPECIES_STEELIX) { Ability(ABILITY_SHEER_FORCE); Item(ITEM_BLUK_BERRY); } + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); Level(100); Item(ITEM_BLUK_BERRY); } + OPPONENT(SPECIES_STEELIX) { Ability(ABILITY_STURDY); Item(ITEM_BLUK_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); Level(100); Item(ITEM_BLUK_BERRY); } + } WHEN { + if (move == MOVE_ALLURING_VOICE || move == MOVE_BURNING_JEALOUSY) // Alluring Voice requires the target to boost stats to have an effect + TURN { MOVE(opponentRight, MOVE_AGILITY); MOVE(playerRight, MOVE_AGILITY); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_UPPER_HAND) // Upper Hand requires the target to be using a damaging priority move + TURN { MOVE(opponentRight, MOVE_QUICK_ATTACK, target: playerLeft); MOVE(playerRight, move, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_COUNTER || move == MOVE_UPPER_HAND) + TURN { MOVE(opponentRight, MOVE_QUICK_ATTACK, target: playerLeft); + MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentLeft); + MOVE(playerLeft, move, target: opponentRight); + MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_MIRROR_COAT || move == MOVE_METAL_BURST) + TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_SUCKER_PUNCH || move == MOVE_THUNDERCLAP) + TURN { MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_DREAM_EATER) + { + TURN { MOVE(playerLeft, MOVE_HYPNOSIS, target: opponentRight); MOVE(opponentLeft, MOVE_HYPNOSIS, target: playerRight); } + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else if (move == MOVE_SNORE) + { + TURN { MOVE(opponentRight, MOVE_HYPNOSIS, target: playerLeft); MOVE(playerRight, MOVE_HYPNOSIS, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else if (move == MOVE_SPIT_UP || move == MOVE_LAST_RESORT) + { + TURN { MOVE(playerLeft, MOVE_STOCKPILE); MOVE(opponentLeft, MOVE_STOCKPILE); } + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + if (gMovesInfo[move].effect == EFFECT_TWO_TURNS_ATTACK || gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE || gMovesInfo[move].effect == EFFECT_SOLAR_BEAM || gMovesInfo[move].effect == EFFECT_SKY_DROP) + { + TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + TURN { ; } + } + if (gMovesInfo[move].effect == EFFECT_FUTURE_SIGHT) + { + TURN { ; } + TURN { ; } + } + if (gMovesInfo[move].effect == EFFECT_BIDE) + { + TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + } + } SCENE { + if (gMovesInfo[move].effect != EFFECT_FUTURE_SIGHT) + { + HP_BAR(opponentRight, captureDamage: &damage1); + HP_BAR(playerRight, captureDamage: &damage2); + } + else + { + HP_BAR(playerRight, captureDamage: &damage2); + HP_BAR(opponentRight, captureDamage: &damage1); + } + } THEN { + if (IsMoveSheerForceBoosted(move)) + EXPECT_GT(damage1, damage2); + else + EXPECT_EQ(damage2, damage1); + } +} +DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to boost 4") +{ + s16 damage1, damage2; + u32 move = 0; + for (u32 j = 4; j < MOVES_COUNT; j += 4) + { + if (gMovesInfo[j].category != DAMAGE_CATEGORY_STATUS && !IgnoreMoveForSheerForceBoost(j)) + PARAMETRIZE { move = j; } + } + GIVEN { + PLAYER(SPECIES_STEELIX) { Ability(ABILITY_SHEER_FORCE); Item(ITEM_BLUK_BERRY); } + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); Level(100); Item(ITEM_BLUK_BERRY); } + OPPONENT(SPECIES_STEELIX) { Ability(ABILITY_STURDY); Item(ITEM_BLUK_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); Level(100); Item(ITEM_BLUK_BERRY); } + } WHEN { + if (move == MOVE_ALLURING_VOICE || move == MOVE_BURNING_JEALOUSY) // Alluring Voice requires the target to boost stats to have an effect + TURN { MOVE(opponentRight, MOVE_AGILITY); MOVE(playerRight, MOVE_AGILITY); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_UPPER_HAND) // Upper Hand requires the target to be using a damaging priority move + TURN { MOVE(opponentRight, MOVE_QUICK_ATTACK, target: playerLeft); MOVE(playerRight, move, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_COUNTER || move == MOVE_UPPER_HAND) + TURN { MOVE(opponentRight, MOVE_QUICK_ATTACK, target: playerLeft); + MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentLeft); + MOVE(playerLeft, move, target: opponentRight); + MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_MIRROR_COAT || move == MOVE_METAL_BURST) + TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_SUCKER_PUNCH || move == MOVE_THUNDERCLAP) + TURN { MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + else if (move == MOVE_DREAM_EATER) + { + TURN { MOVE(playerLeft, MOVE_HYPNOSIS, target: opponentRight); MOVE(opponentLeft, MOVE_HYPNOSIS, target: playerRight); } + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else if (move == MOVE_SNORE) + { + TURN { MOVE(opponentRight, MOVE_HYPNOSIS, target: playerLeft); MOVE(playerRight, MOVE_HYPNOSIS, target: opponentLeft); MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else if (move == MOVE_SPIT_UP || move == MOVE_LAST_RESORT) + { + TURN { MOVE(playerLeft, MOVE_STOCKPILE); MOVE(opponentLeft, MOVE_STOCKPILE); } + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + } + else + TURN { MOVE(playerLeft, move, target: opponentRight); MOVE(opponentLeft, move, target: playerRight); } + if (gMovesInfo[move].effect == EFFECT_TWO_TURNS_ATTACK || gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE || gMovesInfo[move].effect == EFFECT_SOLAR_BEAM || gMovesInfo[move].effect == EFFECT_SKY_DROP) + { + TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + TURN { ; } + } + if (gMovesInfo[move].effect == EFFECT_FUTURE_SIGHT) + { + TURN { ; } + TURN { ; } + } + if (gMovesInfo[move].effect == EFFECT_BIDE) + { + TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } + } + } SCENE { + if (gMovesInfo[move].effect != EFFECT_FUTURE_SIGHT) + { + HP_BAR(opponentRight, captureDamage: &damage1); + HP_BAR(playerRight, captureDamage: &damage2); + } + else + { + HP_BAR(playerRight, captureDamage: &damage2); + HP_BAR(opponentRight, captureDamage: &damage1); + } + } THEN { + if (IsMoveSheerForceBoosted(move)) + EXPECT_GT(damage1, damage2); + else + EXPECT_EQ(damage2, damage1); } } diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index 495a7e8c80..afe811da50 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_SALT_CURE].effect == EFFECT_SALT_CURE); + ASSUME(MoveHasAdditionalEffect(MOVE_SALT_CURE, MOVE_EFFECT_SALT_CURE) == TRUE); } SINGLE_BATTLE_TEST("Salt Cure inflicts 1/8 of the target's maximum HP as damage per turn") diff --git a/test/battle/move_effect_secondary/haze.c b/test/battle/move_effect_secondary/haze.c new file mode 100644 index 0000000000..c3831f0768 --- /dev/null +++ b/test/battle/move_effect_secondary/haze.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_FREEZY_FROST, MOVE_EFFECT_HAZE) == TRUE); +} + +SINGLE_BATTLE_TEST("Freeze Frost restores stat changes when it was succesful") +{ + bool32 moveSuccess; + PARAMETRIZE { moveSuccess = FALSE; } + PARAMETRIZE { moveSuccess = TRUE; } + + GIVEN { + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FREEZY_FROST, hit: moveSuccess); } + } SCENE { + if (moveSuccess == TRUE) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FREEZY_FROST, player); + MESSAGE("All stat changes were eliminated!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FREEZY_FROST, player); + MESSAGE("All stat changes were eliminated!"); + } + } + } +} diff --git a/test/battle/move_effect/plasma_fists.c b/test/battle/move_effect_secondary/ion_deluge.c similarity index 80% rename from test/battle/move_effect/plasma_fists.c rename to test/battle/move_effect_secondary/ion_deluge.c index 93c8869026..efc66903bc 100644 --- a/test/battle/move_effect/plasma_fists.c +++ b/test/battle/move_effect_secondary/ion_deluge.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - ASSUME(gMovesInfo[MOVE_PLASMA_FISTS].effect == EFFECT_PLASMA_FISTS); + ASSUME(MoveHasAdditionalEffect(MOVE_PLASMA_FISTS, MOVE_EFFECT_ION_DELUGE) == TRUE); } SINGLE_BATTLE_TEST("Ion Duldge turns normal moves into electric for the remainder of the current turn") @@ -47,6 +47,26 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal moves into electric for the remain } } +SINGLE_BATTLE_TEST("Plasma Fists does not set up Ion Deluge if it does not connect") +{ + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_PHANPY].types[0] == TYPE_GROUND || gSpeciesInfo[SPECIES_PHANPY].types[1] == TYPE_GROUND); + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_PHANPY); + } WHEN { + TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Krabby used Plasma Fists!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); + MESSAGE("A deluge of ions showers the battlefield!"); + } + MESSAGE("The opposing Phanpy used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NOT MESSAGE("It's super effective!"); + } +} + SINGLE_BATTLE_TEST("Plasma Fists type-changing effect does not override Pixilate") { GIVEN { diff --git a/test/battle/move_effect_secondary/leech_seed.c b/test/battle/move_effect_secondary/leech_seed.c new file mode 100644 index 0000000000..c5a8db57cc --- /dev/null +++ b/test/battle/move_effect_secondary/leech_seed.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_SAPPY_SEED, MOVE_EFFECT_LEECH_SEED) == TRUE); +} + +SINGLE_BATTLE_TEST("Sappy Seed can seed the target") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SAPPY_SEED); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SAPPY_SEED, player); + MESSAGE("The opposing Wobbuffet was seeded!"); + MESSAGE("The opposing Wobbuffet's health is sapped by Leech Seed!"); + } +} + +SINGLE_BATTLE_TEST("Sappy Seed is not going to seed the target if it fails") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SAPPY_SEED, hit: FALSE); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SAPPY_SEED, player); + MESSAGE("The opposing Wobbuffet was seeded!"); + MESSAGE("The opposing Wobbuffet's health is sapped by Leech Seed!"); + } + } +} diff --git a/test/battle/move_effect_secondary/light_screen.c b/test/battle/move_effect_secondary/light_screen.c new file mode 100644 index 0000000000..244e469893 --- /dev/null +++ b/test/battle/move_effect_secondary/light_screen.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_GLITZY_GLOW, MOVE_EFFECT_LIGHT_SCREEN) == TRUE); +} + +SINGLE_BATTLE_TEST("Glitzy Glow sets up Light Screen when it was succesful") +{ + bool32 moveSuccess; + PARAMETRIZE { moveSuccess = FALSE; } + PARAMETRIZE { moveSuccess = TRUE; } + + GIVEN { + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GLITZY_GLOW, hit: moveSuccess); } + } SCENE { + if (moveSuccess == TRUE) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GLITZY_GLOW, player); + MESSAGE("Light Screen made your team stronger against special moves!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GLITZY_GLOW, player); + MESSAGE("Light Screen made your team stronger against special moves!"); + } + } + } +} diff --git a/test/battle/move_effect_secondary/reflect.c b/test/battle/move_effect_secondary/reflect.c new file mode 100644 index 0000000000..6a0dda06d8 --- /dev/null +++ b/test/battle/move_effect_secondary/reflect.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(MoveHasAdditionalEffect(MOVE_BADDY_BAD, MOVE_EFFECT_REFLECT) == TRUE); +} + +SINGLE_BATTLE_TEST("Baddy Bad sets up Reflect when it was succesful") +{ + bool32 moveSuccess; + PARAMETRIZE { moveSuccess = FALSE; } + PARAMETRIZE { moveSuccess = TRUE; } + + GIVEN { + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BADDY_BAD, hit: moveSuccess); } + } SCENE { + if (moveSuccess == TRUE) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BADDY_BAD, player); + MESSAGE("Reflect made your team stronger against physical moves!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BADDY_BAD, player); + MESSAGE("Reflect made your team stronger against physical moves!"); + } + } + } +} From 5560f339d03c4098dd4d361e16921a4079ad489c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 22 Dec 2024 00:26:46 +0100 Subject: [PATCH 501/544] Remove unused various (#5851) --- include/constants/battle_script_commands.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 54052e5390..c4797e94ae 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -187,7 +187,6 @@ enum CmdVarious VARIOUS_TERRAIN_SEED, VARIOUS_MAKE_INVISIBLE, VARIOUS_ROOM_SERVICE, - VARIOUS_EERIE_SPELL_PP_REDUCE, VARIOUS_JUMP_IF_TEAM_HEALTHY, VARIOUS_TRY_HEAL_QUARTER_HP, VARIOUS_JUMP_IF_PRANKSTER_BLOCKED, From 570c6521d9d16c34ad00309e1002ebc5b214d944 Mon Sep 17 00:00:00 2001 From: Cafe <46283144+Cafeei@users.noreply.github.com> Date: Sun, 22 Dec 2024 21:43:24 +0400 Subject: [PATCH 502/544] Misc pokemon sprite fixes (#5846) --- graphics/pokemon/ariados/anim_front.png | Bin 1397 -> 1289 bytes graphics/pokemon/diggersby/anim_front.png | Bin 1436 -> 1417 bytes graphics/pokemon/diggersby/back.png | Bin 830 -> 757 bytes graphics/pokemon/diggersby/shiny.pal | 2 +- graphics/pokemon/duraludon/overworld.png | Bin 1141 -> 796 bytes graphics/pokemon/honedge/anim_front.png | Bin 1102 -> 1066 bytes graphics/pokemon/honedge/back.png | Bin 548 -> 485 bytes graphics/pokemon/honedge/normal.pal | 14 +++++++------- graphics/pokemon/maractus/back.png | Bin 880 -> 794 bytes graphics/pokemon/pichu/spiky_eared/front.png | Bin 481 -> 0 bytes .../pokemon/pichu/spiky_eared/overworld.png | Bin 472 -> 620 bytes graphics/pokemon/pincurchin/anim_front.png | Bin 1097 -> 1047 bytes .../pokemon/species_info/gen_1_families.h | 5 +++-- src/data/pokemon_graphics/front_pic_anims.h | 12 +++++++++++- 14 files changed, 22 insertions(+), 11 deletions(-) delete mode 100644 graphics/pokemon/pichu/spiky_eared/front.png diff --git a/graphics/pokemon/ariados/anim_front.png b/graphics/pokemon/ariados/anim_front.png index 945c4d188f301dfeeaca1073eaad560fa684855a..82d947054b8448b7206c6294c27f8ee71c0b8081 100644 GIT binary patch delta 1223 zcmV;&1UUQk3W*Ak7#0Wv0001tU!Pb20004VQb$4nuFf3kks&^R1cymPK~!jg?U>uv zvnmWlfkil|?fXCOKav2V6-&SFt38^#Rx=GD1Qy2p>}NM-zx8)t60F0wfE$9Hi0%$B z6`ge>g1rr{8Abpm`zZhsUA)KOsr-UM2(K^l_oo6d2v>l4e~p0R@y{5DoSy?|2uDB^ z=%hab=oEov|I5^WUIXZqZi#8yzpI3#WtKEJ)J?Y}OUPwrx=V1;9H3PyyaKXVo3vd-l%>@6vz} ztorZfWeI{akR^nhjsyzPTLozP`1|kzK+ZWQdg0trwcL@ay{6l~& zAe%MzTo5vF9vW!~Y3Lu|oi%8qPc?0sO93b$4E-emUK6+vJ?AXxVZ(EH;F zU3@%?r=sUtD1>9sM?fut$K$nJ_RxDL^e=ADClaUNaRHDS&`lr1a{`_)DVgp0*sflQ zRNCQxc$<}gIFRk~sh>MV1H%Ys&p1Q$w*WJY?Pvc(`{~A?Zv5%S2Kdi(W6^zo)Qz3) z`-^VOdF^%I$GWkTeML8Z;IGPaE4pt{-8V1#L^pP_Pj%mf={&p0($F?K&h2L?n2;0?o9ZBV%iIk)8;F|;bN~j`Liq%@m=eG zM}(^_vI`;J6S(bon^Kj|yK;p{cDZ7?LqsAjfhxXh_3h^!xj(oGfW<1Bd@tqOD=cp9 zH-xC}s@_}q9we3$28b9@t`Ca8s&AvGniva!q`h5_pcb$C7xgWVT&#MJq(NR?A;9S+ z%2|Dvr=d)MN@(Ze*J97XhBzgb<002ovPDHLkV1fj4Qy~BV delta 1332 zcmV-414zIR?c*gj1LR0g#AWh2{j z69FY-Z#W$Ml&kEVcau!8UyB47UK&~N92QM53Y)#-dD>Tu9nXc%A_q?;NqjyW>bw9w z1ntGbIXufqdslWWAE#FKvma@Hmr zJYphk)>-8dK-UuspkO!9H6nB~bxXjeK;LSr`57pY zn^P`Uh$(yDp5{QLtAAgh^Ctm_ z2m<6K#j=kl0P}?Ys=Ix3ZX2#R>5iiF3|+*@JuBB`A8>(fXgCZ&mK1-3jBZTJOFVnH_hJ9J8&u#{DkBAk300&Zx3Bv0!@ zm{;Vm-f3OmcHK`#vmRyDLqPcEcIEW?_t~2kl`NYpe2`Yhd$UI+p>Z>aK2(=9?xg?; z9(40TH~%ZTxk9>lpKgDm=$7~BCi;p{ey?r@vPilqzvn!KEME0XMz)(QtR-I-he`z? zQCI_69D-4et6~7~W$_*7pn;a;V{b?ylCW~}puI>a;a7eRo=`;%U*=VNu*i2=EMv@^E*M3S%>A*^iI*_Q*v{iXo0P5VS*2In752MGSD%xZ%k?r&=Cu+=E~ z<52#AQ@0=h9rC6o`||*=NK7#&0QMC(DD|yA0cwGGi}8OzsPEGt1-mE!mlx=YEd6i9 zgh4ifaZhd5*M#yCOYY>(iU>2J9b|&;__g?VM>Ed%zlCR~KNjYdfq|6_EdwCTPcZ)qz+~xvv;G0QM)wUUk<}Rh0000 z<0=eAEul+r`v1RoN&?K)X`HI_a%OnwOijF(g#ZCN$ML^!VC`F-H4GsH>b}|1hO1!@ zpb$P1I&EpK-T?Q6l{#Ptz<_u|V3811anM5>0%7`kL11At{Rrr?NQgPci6E>RLSP>B zMD)S}sQQT@I=?%A>5rol2(dl`lYW87FMg#wwgL2nqF3+6JbadVB7!!6meA;10M^l? zBy0n)XyF3@ks3WULz=(WN}x%Po%|rz*(CFSxRm|j8K5Ta<;Ou00${Yi32+TKa;r~0 zY30nC^bimLGXR;dM09{ep!V&`e28eofH6kkajB?62O#QyV>d*aVi=;Tvb0IGRA2|t zQGGCrDyzO;E>|hSYu-WXgDe4@yCtcys$de9Hzq;_=uHneLOi)9x;Df<1Xbzv7Pk?Y z+mULUvIm_7lf4(tHV2riGOMes=Ph3JgFj$@2QpkXk70f=BY;~8xt z+J_PN(#x*^vB85F&kQ(iB#H85u)oWZ>j0{6fD?XBIN>}`e=`;RdgKSd`=@ES<38nR|Dv}@L&Qgd(d>@OTfc_KBPf>|NOkI4FPN?;oY>S`U&tb z1?klDUK4l=U?Hpln|fP~A||{(__lQ3G(t?ZG=1d4iW~E|0#@8r6PyzYI-U4V|W?N4(5+Nc2v$DttV7UR9|CCbZlOCeF2f@ihXkIU}0_23@>xI4)A+mCQ zVLq$)2r@G-&njuqO-*E_1f%-tl5@tz?=kFvdwtq{$?PL!Ho)~hSMn_&bpY~tCRz%A zUlLCbAfFBsL1YOix9oDDVda;277Wl3n9h6|paYcZ-hcJqMfs&-@EOEl%&X=={k||3X6GMF#f$3t5iA2mfN+QT*VL z7iEkH(HO1Cpl%6N><7PzuMLFH zPOaGwB{xL8G7v_yxdTYIkCKnV6aq1?^tQ#Py|n&Xmn#wGjSdW8n`N-%m4BP{Ahv0000< KMNUMnLSTZN!hn(h delta 1371 zcmV-h1*H0k3!Dp(7zqRe0000r9~PbbnU_00X4Rxo*8Y1@U5H18W_d>T8OTo5E&p)DM(1^u=3BMJqrvYm1ES$ z&t-@i(5J^H0DBqj$N;h=8=?nge7cj6cbJ2O>KhXxgNnfXFQY_fupux2S~WxxZL;-H zKd;#U28dOUM)*N>WiJ{wfsm;l9;ko8q7CLU1X2DAd`tVieM)@<_U1H&3V=8?e(zPV zz6cOdWBM3GE1%j$ly}HpC5_uqOTW^?bN}V2F_Vxx`x5R zXON$%A|Z+maA~{FvmAbeJUc_@9wx>r3C1sh6d!~TGnk@NzKNYs0GJVYk1~JAuWwRW zwz7F2t5grC8h{A^PoV^$ki*DIpnIfi0>~bvqcYz&S*f!K83DNde#2Qv4lo*9u&H`n+7;e{M_BgR7;q zk8MR-VA%?!22dd;tALl)fPA$C3?aT<{vno2k>dVw`0;ev64OwKEnI)Ln{FU1%?%Lr z_+Kb2aRMF-!>vSOn=JqmS>hc|!At3^I?^AWeI8F!> zZmWA=1CBFB0rK8=UndCkrP@O+0xdcAsVqW{!JPx;OCWDG>(5UrUk7(H8`0r4-93w4 zfKM5tG2I9sr<1Am&uTzG52V=aZxoPDguc4DsDKWZw*8LL{`-F%OFP1224Kb~NgdeU zWcz;n(+qN~y~i;DZ)AvZH?!-Q&p^J|!>`LvEr%)=(2S7LP zr6|I*d>z(-z^Z@MROD=4Y3Ee{a;BC8?bEun?^wP2=p;81Ca}K|nn0Ia7zslgfEJhX z20DLjBn+jyr!F8XCCqMCTd+Y?0;Pn>YAd=UH;U>Ew&7k$nBN*#duL#Q76H;3yp}s5 zX%!%6PszzFnUe>OTrm?$XJ})8gP#50M;j89dlmpopD-D4Pl2|kC^d_ z7|YJ5sx3!j{Q02)GRE`65JV1oqP`yErZ-z!N{m@zLvRyViUJdtyr=+z2~X^xN@EpV d>5l)%{sK3xp0s_iF6jUO002ovPDHLkV1l+Fc?|#n diff --git a/graphics/pokemon/diggersby/back.png b/graphics/pokemon/diggersby/back.png index 36a4373816244f47b4aff340d91a6009b4dfd1a0..a1cc29260da624ce9402617900bedbd8e662e64c 100644 GIT binary patch delta 700 zcmV;t0z>`22K5Dy7#0Wv0001;w}I>c0004VQb$4nuFf3kkvG{00C5{SN@-Y?ITzyVsue$pO^B4}cs2a@xN;2&mowRG(`bJ|cjea?WeVY611t zkDb)=eP(L%fCobF z{{ldN{;1evt0~!ML zSCnB00U))L90Qe-158Kps_%QfTJQkXUx_sp>4gvgc9-gsrXt*$+wFhdLR3LS@D@73 ztwc=?EaYDRM3K`@_zEDD?JPV3B$#ZG*g^vwtNsBX!9pK05tDAc5{XcjXA80-+)kQ6 z61A%Vbc0&PQ6EK&1pq=@7JsMmzPHOtYT=L?hdGC&7Xv^gcnjzyNSA8>tA%!}(NZk| zT|djCNzmH~okuZe<^X@d^_J)&!FV`CP+K?yqCvboLAN_vziPh)ivgkseIuy5Ha2p# zZ32)^TeV-9IUo>ef3Y-t0cb6SIdeJBley&FK}1Ble@ikwn;i(Nmd_T2^_gnxY8yy% zWJ?oCE@>&{95FI8p}RDII){_K)HwC$te`tLFra{q6hXwdyc2&~&>KMCswx5`TyFUs z({8?m`(rgYR8Iy%3)AQFC%}?!EqtM;6|h>M&j2=#7XoPd7tb6cOxJKvA}!xbR2?Ji zxq<3PW7&Q~Hyj|u2I-Aj)Hfg?xY-r=jjDB^#0Yl!7_eb@IPExo3n*h0Ey316w*0FJ ij1mMtPyc@te*hFVwL{ENcu?Q~00006*4dY delta 773 zcmV+g1N!{+1-=H57$yV*00013M{Ml?0004VQb$4nuFf3k00004XF*Lt006O%3;baP zkuDblczAG;NFIOL^9R%b000SaNLh0L01m?d01m?e$8V@)0007)Nkl*zRy&{en3keU4} z%YwianZhhPzxlpzSCXBN)XhKoqj>x=fa!%d47i}Tz4?D2aHD}yJPafj@Mi-A0}Xg{ zKfWezLkMQt0fKnePdEXHW%yAHfW){TfB-S(5db|27sM2ek;AnF3WNms%Aqeo0-^Ho z<`TG&pahUe4-IrB=m-SRIYxo%Lookx5s^G#?vLa`NQ^HWgai<9d*z{kFpBV%l zD-sBVdcc237yyZo!P0DK2@6c(m@aEH(ExNKV1R%C9P4=`RzN+nyGsuPczV~EN)HYA zdT#7ax*i7C0L;vc@GyW4YeK*<5UtG~y{7}f&YuhbQv;+sdoltxa>+Zu{-G1XypA|WN>1Gb3-;;Ncr3`G z=2T3Dh~qhP+*%tt?o_lnvlkJ=os+7=HFye9O~SyIzf=-=gBc|d+BSWOF5g7F1>Rr; zsw_z?5aQdpOl$Pc6;QVr;al}=B(jF3tyC5Ou8+^>^63l+McF1ydDbXvClNq(cq+^C zRF!|fvakCcq+B`^Kq1?A>J|t5E%#Va+U5puahd-q%c3Ywr?NQw-t)J8stgElwt4$Q z^ozp*e;#r7%>o&|w%gS^byWSN?FVDA6d&K&_6yNzbjVr&P8X1mCe2I)tk0ePqipC9 z+biHjO-heuErIGvfv-rSl?gCH)z84&Rl-fTEA^XDLgkkc&K=@q z0B{&x^QmXi1@6CNqwLc2 z00NpxL_t(oh3%Hza_b-rgwYB_L)!HH-}a1zHckKLu8R)}-`~cf8{^ z@Spjsfr~%G-}3X>{d34uI)7chyrjS7=kJTFFygvExWHSYKjnmrcmgA?DZ<1;FYqSq zSx(GNoa!U40oGV2h1>)_$BBPgys;yGpFp3ZnZUM6@Hpwn!o1qPi1!J^1TL2_<|gnd zt_%F(7vSq|1ZWdF7h@{Mo z#^c0HWF}*$1UeBtz*DUvV6Z++-Qf8V*LPf`h(?jZhx%Nu9w*xY-=2J{Fyg6-2t;&! znPG1C%dH~bT?)HE9Gb=FkPUQ!J?&=vh$oa%t8NRM->W|QH9){^iRyJ8fi}!|1Y8b? z0L9jsx%8h8@PyiRsZ)P4x29f&M>rR*RBUHO3RN!r2v>>8x`VY-gbr6WfMn;CMqYEa z@<3wh#sVXbT%@9G+fz`bWIVuam#_=O#Og_I_|ZX3AJpjNDDNJgt1wzWUJ$BzC?Hpo zowE#l6KD#H_S@lmL;Q33Iv-Z|HF`j=Awf~)~6^sH^A!$rJ zAm#}w(QaCcuMl#-&@H$*oht15W&(PJ&E}sA?AuF|gg*QYpM1@0aM|@aIP1FSoNXhg z1^nRY`@Gj7dRukq0VB?bl zds1d`ZaWd)TVp#W@LJ%IItomk%o28zW(8VQUtxf!wL~xP#`h&xxWfea9q)K5{sFU+ V9N8^vPb~ld002ovPDHLkV1lq0X3YQq delta 1087 zcmV-F1i<^82K5M#7zqRe0002CwraMKE*b;9w7ro_8-It?YC8Y`1OQ1yK~#9!?Uqe! z8&wd;=j}RKmymkBaorF#%6g5J8W1*e2*|XORkaroA_C>cg)1Lw)k}J;5aLz|sp5nL zLgIh`p&aO`ZsLTN?=&t+Rivit4NYn{O4bW;6Q|w}-hO#^U*pmWj(u{x@27b?|DD;H zaR45z|9@#w|Mf=dUmQNeKa60{4#r(w^Y$&x8b0v)J3l8F@*M0?T;e(TC-1xOH86o>A>J0KW^N+HxyPR}=h zV!a~U>6yEUh(5S}DE@`N4E>CvO*EoY>O9`KagT~C+I;);ZyQ5=)w`WZtu1kk0?}~O zO@EQ_V)>^dzMKSEh#th>;RMG!f^B7Ib6n9Uxi&M$K}#u^(yzPkfMV}lTU9vk#RQmx z@q&3hHb$|#3BrT|zrO|$!+%WM8khTutwkAl=jIK?ihxU6jkh2;@0H-C zl3My1cFIL4N+$Q^poK3jpmWxNR(;>syaCZNW4H5-1GBuI1ZLvWHgb=KMu5bE=4~<#b>&_E4d-;!&y4-F=%&|h~yl?(|^i~=1J_RWY7Xrg>a81-% zt!>7P z1^v^tD>zmOgsk3%=ymu>(6002ovPDHLk FV1jdb6j}fP diff --git a/graphics/pokemon/honedge/anim_front.png b/graphics/pokemon/honedge/anim_front.png index 9a5dc7507809643b91813b1243b272fcc0da2d32..6376e2d1e2cd5341e14d258126bfcc07f5f67603 100644 GIT binary patch delta 1057 zcmV++1m6432&xE>7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!gIFgPS< zl@JgRP(UdE*Mzm6T8L;kX5sx{z}Qe&Sg5F|*x1-(R8YyegQtsbd`OVh000B1Nkl zwTOTT@PIME27eBM4;B$~J1m@lK7tQE1Z!>Zb_%drHy@<55yS;>o4^GiD}fmpN(&DoH88-fzUiT+3JN%~+LRRF zM&AG+1Aw5ajdmdlqR}@!gj@n;K!P9wYy6r)J+7=PW|dj-TKO`u!^AZGO+PqYB)9wb0L2@IdqEkLAYBbo1? zzP5?iQzQ*2C!zB@LB5pEQvgs;LXTVt&8tA$*gavjuM*8;V8k0)`;Bk>r!n?W-00^l z>_u;;jd=3nuyPk*%WcGL0_w%r0M4!G)rc9UVy1Kk(gdyrlbt&)K{0e6On%@fP8@4>H1IoUWP6mD$bWK80K`!MU58Lp$c-%eI0g_xlIQiQg6;Chez5_^^epz9t|kNGWWg5zn!|Jp z^mV=f$nV2RK)I`dc>qM&L^+Og0Eh~p0q^}25%YD`?1-i*++4T~5$>-1#t4gc{u+B7 b&=davmHRj;z3%8T00000NkvXXu0mjfXvx&! delta 1093 zcmV-L1iJgG2+jzQ7=Hu<0000QD42jyh*&ri^S8kO000SaNLh0L01m_e01m_fl`9S# z000BTNklD(*6ox5KlK=sg(m@(SE%s30V8Ver+6A@X0R!sfmeg?bQG;fk`goG1bHt;vWeGR?eSZIYzj=HQ zp|8hqYTxXLlZRHKL@0S^1L`ewKpY$3K$4b4;em!MDSptgx+O(WbC6XdU>Q)X5gen> z04zn6*-pS&0)IssE1;-|vhV+B1N?yf@w>kQ3`O{iJ>f5zUj&pHV=qE}#vT^~r!RWl zGj@^zh9ZJf|EFGb#!j6A03Q$DMXv+ad6of&D(Urm|L1p|VgL=UM#I4)0JN0_z~C+I zWLL&$l?EI{(GCEufNhP+`>Ww!R^WOx{D{`Tw#MfGSAQE||8h%X0Kn?6N@Sn&3qund zpwBsnAF4M+01x*xAZPc0;b;R80vbY%>AF^J!>Yy%2=^|8O52Os9g*u&16sqIr|x1g z`xK~(8&u!pWRJTd79tNUZIDSq55OpBRBGT(;?9PuqRKnc@y3OsVzTbzuFGmHJnx9} zbKc;tqJQfI>nbj%y)fVdMy^EPB9V32SD0HoVfO0BzG*-(|9ip4BbXhxLMoDEqM zGKr}-SsZ~vx7o`XU0F6!RX5(4x|1W`cop@Wdq7rWH9?*PjqfAKfA7jvt}_JyTx~=g z^(eY`Dj!BGn__K5Oh3JGl@H7RluW2L!thnBE`JNA+6dDNw2|~=Y>4L$HVJ$^U+z$9 zk7LVd%+5j0HsWE;px6qO>n-~hQU3M84uBooODHpY0u5MgzyY({M1y0i04B>dqVV{> z|I89D`|PRs=W%g7U<@9JlR^UGPZO#RPb|Q1G4T#rL5kA1?D;Qo7XWjer8+qj<1t8_ zc7Kdkz%=_#DOU>7F#7;JR|1?))2Ru7J{x-Lz;cl$2A~u{nR=&a7XYXUWomocYGIUsGNWv*X{)&zKs3sJ z?M;Q8n7_Qtf1D&jE-as>2GUt^9O3D7q71hsmqDh9ZR+8agi>|@Zlp~D=036* zTY-2k#;FZx&xJ7D`5ZBa-OBa|;>BirGoRdoSd?Pdag@ diff --git a/graphics/pokemon/honedge/back.png b/graphics/pokemon/honedge/back.png index d9092fa13a9e1c27158ebbca4e775be35a96b629..b1bc8634b008040a9f88b58110ae3254d552fd38 100644 GIT binary patch delta 412 zcmV;N0b~B81my#e7#0Wv0001;w}I>c0004VQb$4nuFf3kkv=|u0b@x-K~z|U?Uu`O z!ypVr%~Lk?|G&2*0SOME2$-~sR*Q_YILB9#@%T9Y>!YQVQd_vzS}!XIHwJ&!c%4wS zC@B1@f%pwU#nbhyA@K!Uh|mZo4R;>@T5ER%);i}V44E$i0Oz&@czf@?d0JlZ~!Xv<(02KiE z2!!{7iocyD+*rvVoniAiP)Ar297fQCOu+Q;SwY>y?+ZqTTCg+(UQi6%0%izG>+3wv z^I8|2xp={_2Xz&})%`YpI|N0nAOa`A{znn29>(vKzgpktk{WGq-HoyU0000VGd00DhTL_t(Y$Ia9|Zi6rs0AM4KvZlU4Nr#M7 zmRhM|_1Ta#CiY{<(0X8bAMeiy^8Ze7H^$>M zz8~Xp7EcgBAxaSt#Bl~Lg0YpLL|NlgCOZZ>Z#CzN{AH-A~&FyU_BoIt}f3*kkPvfm=?Nw&WAw? z2LWj+Hk|he{RL6Bgf=zt43UZUa6Wf}E)M(LEL(PK*oJIBO0Br)syuc)X zV6|eRsH(&RR<%-!+2FJWU7?skyitrX;s&MCVE^S@Bvhz$0#zRe!1sZ8Kv6cPf(L|8 zMX6wj=4gXfP_g1Df%TY0Fb)AYSIE^rhz@?HK=a_p&8?LaJUAif3N|2 z1n4dYL2pw*ypvlLOr?|`7O)o)>;P;l&p>zC15yG(77@VfQ~7Cu-dFpFhmapmY2jkR S8MWI00000p diff --git a/graphics/pokemon/honedge/normal.pal b/graphics/pokemon/honedge/normal.pal index 51f60119df..d6a8a50995 100644 --- a/graphics/pokemon/honedge/normal.pal +++ b/graphics/pokemon/honedge/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 8 48 56 -0 128 160 +36 103 149 16 16 16 80 64 40 -248 208 128 -176 152 88 +255 215 132 +181 158 90 136 104 56 -152 232 248 +102 225 253 96 192 216 80 88 88 168 168 168 216 216 216 -48 56 40 -152 128 80 -136 88 56 +99 84 80 +201 185 131 +167 139 110 diff --git a/graphics/pokemon/maractus/back.png b/graphics/pokemon/maractus/back.png index bc83adca5ccf5e6a8a9173e177bfb49087baf7bf..66a652084021503e0b559f98905f10b185ec28bb 100644 GIT binary patch delta 724 zcmV;_0xSLS2AT$t7#0Wv0001;w}I>c0004VQb$4nuFf3kkv=|u0+>leK~z|U?Uu_D zq#z7M#eliI{{MHU5*|dQO31mnV9XEcz=6ogIhQ4%-K!bXkEy_^rS-50Li^eQ=m{8TTjrZd2u@N_ zoWiBv7}Woq@c~$WQ%W_Jw;3>5bVaX(8pEE5b={#?1mvpAb@IrqZO~cOEx7SIhUpYEqokFOUc>=Naz87*4hDpI{yEnf0YLA8X7UrDS#`G?8LbA)9A$w8h^HI^wLfn2(1M78A~OQK5@IZX zhc+w#NnHhmNE8G>%&}me^^!-MI)E6F_mL_35Y>M_!~mghv5CA3q;p|HW8w3 z^50$P^#d2K2r{sAYe#DZU}Jo8;(V$RfIwxN$6%d*^rtiv delta 810 zcmV+_1J(SR2Ji-u7$yV*00013M{Ml?0004VQb$4nuFf3k00004XF*Lt006O%3;baP zkuE-e010qNS#tmY4#NNd4#NS*Z>VGd00PNLL_t(Y$JLa-Yui8+$IoOD%@TQOmJB&4 zWN5&kP&v+$!D%R^n*}K}lR++YDJb{^rXZRodKLB57Akuwc#&^1WH6DpLbeWVNWjbe zFMTJ8)+bphbnABzr+Xj0AKyDf3aaQjDG`Q$)(Fw*_F4(>mQp0Dl!|hIZmwP9qXf_p zpt_)R`-h%XD+na9ab;cWRhesPmy|xRtQQhoQm9gu`v_Rye|7IWNDbU={0e%9^iIyzb$!%)^K$9WacOmfs z^~SOmQvjqHm{ZFD*RqaOA8-iPGnof}({xGzAW9c=Owk)n-Dt?z41t>B69RqgzQ->b z(a`K6qxy)4eDf>;I5)!S-eAgR6BW=v8e#CU(b*kd@{5>zxfGhGF&2*v+ujXBKH?E6 z%6H?BUE6Ml1I|b1wIZ+@^G7zyz_{OSFN=@tM23N8bzbKI4JSzAoz$sf4M;10bXXZc z0uy^=nU*v`G`67s79jp2AbnV!`~|q=4_?aAk#X@U^styiu27I4P?E z#4z@nVfZvw2}r|r7~#>!2Twk=2D2Pt%5Y2y}MB{QV~Z_gxcte;}QJzk6&qmH?y7jT!g59cMVnR|q0>Nir_?PY#_z z3w|Kos>>8Xbk=eT3D{|Blmz$(>wO;ZnUh)RBM<>EdY!fCXb|Av;0{0zTm*hsV5~-# ol)wawK;#j)3xI-&|0Y6y0a*>lqc@&Zy8r+H07*qoM6N<$g2IekVgLXD diff --git a/graphics/pokemon/pichu/spiky_eared/front.png b/graphics/pokemon/pichu/spiky_eared/front.png deleted file mode 100644 index 15b9201a2701daab43812595a4a6b1d14e2690cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrK|P)tPlVI0AflIgIX!}?v#{^d+z4V=6jTjARxUdDF6Tf_I0wH00009 za7bBm001r{001r{0eGc9b^rhX2XskIMF-~w2MjX?!4P%g0003*Nkl*%9r)81<}Hhy{pc*g{o2M>Kr{1|A?nG9yB~0lY!CBJluy1RjE` z#OQNoP;c?@{q)^;XUmMO>wi}kRC&ttAh3~(FuG*CWPaatdwiBseDyxT&g+FUqce>AzY( XOsY)IQbIt300000NkvXXu0mjfro+1G diff --git a/graphics/pokemon/pichu/spiky_eared/overworld.png b/graphics/pokemon/pichu/spiky_eared/overworld.png index 7208db51085002bc11051917cabc0defcd65b66d..36c10400037084e2af39461b6998976580236f0e 100644 GIT binary patch delta 593 zcmcb?{D#G-Gr-TCmrII^fq{Y7)59f*fq@aoWKiH>29l@B!>$1-#^NA%Cx&(BWL^R} z1`|~^>VY&I{BJKX2C8}G>EalY(fD@y#VlP#9@o2uo#knAfBx^^dt~F%fXO_}y0rz( z1qH6Yi=J65&B;Xuyo~xkRy)>v99Z72Q1jjFAp^&KU-{26wvTQ7iVrxN*lvmcV%s#M z{$-1~&7;e!u1UF0s4rj;{j16@=-)b$CnSQFdAz=X1hcz{nc*s_^yhUQoe=9%&G2|pYo;6vD;bRq!ib+f%7!imzL>yp6}AO zoO3wTSk0PNxa!aOPesPDVGGpnFr}cn+I8C2cC&E&vE!=SInJKh$!vJMut%v>#*abry5#(Qj}|R<>xxzquDg9h zYVK9dX3pa$@67Q3K6O%|q^n1QyPgxC z5R_GWcx`xT ze?$Fmr$j=(x7RE5a9_`FVdQ&MBb@0Gr4OrvLx| delta 444 zcmV;t0Ym=m1lR*5iBL{Q4GJ0x0000DNk~Le0002M0000W1Oos70JgSjwg3PCB#|;G ze;7yD*Z=?lZ%IT!RCt{2)WJ%_KoADtSxWBRH7kgx1i@=Vo}gt+>rJJt;LVcc9u<56 zU%;csf_U%QmvdLKnVs!Mq&;Q|ft^3hx6QTz=&P^3`s(YTC4-3=?mODf76}u!OCgi* z>z3I8%JB9~sdQ*BNdOe-PyRdB1I;4Of4V?*rWcENJHP`~YH|WF(6)|TfPo6f<}+yr zx}X_o@(JC50|G?zDs#5XKvfo4;Hn+qfi@3=Fh`X12stP;B3`r|4tlu@0+@8wK2aaE z4aBP;_*WhwmQ#8p9E5m=GbA^#fe_nuIFIlJk<9ZzIC;hK8)K33r2qqY?t!LJj|ANT1A)J+ m`N03?9Nbae>Hhh_>I(@PV*$uc4mxuH00002$u+u7#Roy0001tU!Pb2000DMK}|sb0I`mI`%#mTdp>^yl1W5CRA_p0Gm6?|`{#^ig0{!T?zOIs*W|G(e1?`4uo*O;|f2#<&46geu^y z68ahVN`M$KHUNeYpu8N+^U8p!o_|t|qehfUt&uIw;0yfQT3n5gekwEaVab zXcnT4-U;4={pY$7*a)GArh70}oM;3VKquI^9!$wh{yV|m2GH!ueCMzL;x>uzj6V=U zl@P0z`Fw=hz|w;Hb~Ya|V!%N{p9dn&W+|55MfSg_aWx`(+T$N;hy@)W2oQ?UOzsck-L7`GU zl=B&Eilq(9g~U$8sTjUiqm$&Wn){0|UyR-fI!sltm4pup`gtCPunb}9N_cKnccE26 zrg1V;2(e$;15D6N5xC~pYl)f0VXwDV>r<^FrA$3X>}P))>azfQX16z^e?ZC{Bpec& z0H#E5{sEP0bP0zAWugvHLI<#;oJc##!y4~-(v&l`u2I_i2b9YvZNoCZ&B6Aa4%`Xd zKj1Q#RN7%0kJJmRezB2s&9$%p%5@kd>Sl06+LaHz6iOtNa<&FkfK>lLccP|eQqYGL zDU50Ibf53me6JjVp!3n_N9}Jx=Er=26bRF5< zXYU_KUkuDTu{@klM*uC7ocRYtX9DbIz~}yf@Tap`Dthz}x|vk|WO7pOIv-T9+xrJ0 z#?e2>In(Y?I?NyagP3>zK~h6vyiFa)=pV$re?S@+&p7A)!Q{>P*guf(`UmV}^AGG< zX+AH#1T(9DVCTOV1ZP1_ zK>z@;j|==^1(7j6e*ghuOGiWihy@);000ARNklBjE6vs~(Lx(#^Jao%o zw{$C*D2XWXl$36T&|rIMmYO_4u%}?((yk%-0wpGMTjEcU(&f^Sw8IIm4J3>7U3yQF zZAo{HDBaq;$@cr}z5jbU$v;Bw;~x&EOi*k7rNC*F2{!H$f4GEH0R_&2U9i$5omgNo z5?`~jnFyT6rl3+s0bd0a)E=4DD;v5*g%43sg-yf8B3Z7Zpo@Zz-y}}KMr~oGv5*R? zz?)97i}Pgr#V)CKIl!>f-mbnfY(DIbpxp(31b(}*+C>-nsDcN(fYEL|;^3Qec07QN z&UayB4g7s`f6l7zp-cDxJ>cASL$*hl)nPB7OL%d5q<3X;prh?^6bwhYi8Vjm9YGqs z_LkXzcVHIW8!j3OcP`lNdi=R*{x z^&1B{5^Y{!VAHnDQp7mb1 z>tEb8-GIBzig|rp!zC45fi*deHS2xKRw)yZyBplcef)XIGJz<`vl0Q7B?4JyfzCdu z{O{qcMfxEm`JhQ_7Rg8vTVP(%*o0uZkzz%2S`kI)K@btqAT;VQL8HW^AWRmo$A|(J zrHdBSe>N-)0!CzTj#VhNMLlLAL319te!8RAmIn9`9a`n)5F2g@asy#Dji7I=7*4YOU-xe_3s5rLh$A!;R*LAk_R2itILjAU{Nx zUEW82c#Zs!KT_|-c0Y)i5C>dsJ(3Bs5&-sC71tR4K|3j7^@`EP)z~}r>e8BVkP}ou&8Gg9_9Y2U` zT!DU1S@SrIT Date: Sun, 22 Dec 2024 19:39:17 -0300 Subject: [PATCH 503/544] Fixed Wish triggering Disguise (#5860) --- data/battle_scripts_1.s | 2 +- test/battle/ability/disguise.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d94ba2363b..752c352022 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6738,7 +6738,7 @@ BattleScript_WishComesTrue:: playanimation BS_TARGET, B_ANIM_WISH_HEAL printstring STRINGID_PKMNWISHCAMETRUE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_TARGET datahpupdate BS_TARGET printstring STRINGID_PKMNREGAINEDHEALTH diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c index 3a8df70be5..9c5f917e9d 100644 --- a/test/battle/ability/disguise.c +++ b/test/battle/ability/disguise.c @@ -173,3 +173,19 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu blocks a move after getting Gastro Acid Ba ABILITY_POPUP(player, ABILITY_DISGUISE); } } + +SINGLE_BATTLE_TEST("Disguise does not break from a teammate's Wish") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_WISH].effect == EFFECT_WISH); + PLAYER(SPECIES_JIRACHI); + PLAYER(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); HP(219); MaxHP(220); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_WISH); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WISH, player); + NOT ABILITY_POPUP(player, ABILITY_DISGUISE); + } +} From f9fed98665607626866ecd88458734c224ae288e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 22 Dec 2024 19:39:48 -0300 Subject: [PATCH 504/544] Fixed MOVE_EFFECT_FREEZE_OR_FROSTBITE not being usable in battle scripts (#5859) --- include/constants/battle.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/constants/battle.h b/include/constants/battle.h index d9c4e1301c..a7300e6517 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -331,7 +331,11 @@ #define MOVE_EFFECT_TOXIC 6 #define MOVE_EFFECT_FROSTBITE 7 #define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_FROSTBITE // All above move effects apply primary status -#define MOVE_EFFECT_FREEZE_OR_FROSTBITE (B_USE_FROSTBITE == TRUE ? MOVE_EFFECT_FROSTBITE : MOVE_EFFECT_FREEZE) +#if B_USE_FROSTBITE == TRUE +#define MOVE_EFFECT_FREEZE_OR_FROSTBITE MOVE_EFFECT_FROSTBITE +#else +#define MOVE_EFFECT_FREEZE_OR_FROSTBITE MOVE_EFFECT_FREEZE +#endif #define MOVE_EFFECT_CONFUSION 8 #define MOVE_EFFECT_FLINCH 9 #define MOVE_EFFECT_TRI_ATTACK 10 From 8cb2f3196140968f850a1b23f9fd4cea56546c51 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 23 Dec 2024 09:51:19 -0300 Subject: [PATCH 505/544] Removed redundant call to FillPalBufferBlack in FRLG whiteout sequence (#5854) --- src/field_screen_effect.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 073c92f3e0..e07d067afc 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -1374,7 +1374,6 @@ static void Task_RushInjuredPokemonToCenter(u8 taskId) ClearWindowTilemap(windowId); CopyWindowToVram(windowId, COPYWIN_MAP); RemoveWindow(windowId); - FillPalBufferBlack(); FadeInFromBlack(); gTasks[taskId].tState = FRLG_WHITEOUT_HEAL_SCRIPT; break; From 878724c9aee9a9003307a795dd84dfbfbc14a02e Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Wed, 25 Dec 2024 14:59:28 +0100 Subject: [PATCH 506/544] Install instructions (#5876) Co-authored-by: Hedara --- INSTALL.md | 588 +++-------------------------- docs/install/chromeos/CHROME_OS.md | 14 + docs/install/linux/ARCH_LINUX.md | 6 + docs/install/linux/DEBIAN.md | 6 + docs/install/linux/NIXOS.md | 5 + docs/install/linux/OTHERS.md | 11 + docs/install/linux/UBUNTU.md | 6 + docs/install/mac/MAC_OS.md | 93 +++++ docs/install/windows/CYGWIN.md | 4 + docs/install/windows/MSYS2.md | 4 + docs/install/windows/WSL.md | 87 +++++ 11 files changed, 289 insertions(+), 535 deletions(-) create mode 100644 docs/install/chromeos/CHROME_OS.md create mode 100644 docs/install/linux/ARCH_LINUX.md create mode 100644 docs/install/linux/DEBIAN.md create mode 100644 docs/install/linux/NIXOS.md create mode 100644 docs/install/linux/OTHERS.md create mode 100644 docs/install/linux/UBUNTU.md create mode 100644 docs/install/mac/MAC_OS.md create mode 100644 docs/install/windows/CYGWIN.md create mode 100644 docs/install/windows/MSYS2.md create mode 100644 docs/install/windows/WSL.md diff --git a/INSTALL.md b/INSTALL.md index fc1aeb5ba8..25e6adb428 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,564 +1,82 @@ # Instructions +Install instructions for each supported operating system can be found in their respective directories under `docs/install/`. +Lines to those can be found under each heading. +This file only contains a short introduction to each supported system. +If you run into trouble, ask for help on Discord (see [README.md](README.md)). -These instructions explain how to set up the tools required to build **pokeemerald Expansion**, which assembles the source files into a ROM (pokeemerald.gba). - -These instructions come with notes which can be expanded by clicking the "Note..." text. -In general, you should not need to open these unless if you get an error or if you need additional clarification. - -If you run into trouble, ask for help on Discord or IRC (see [README.md](README.md)). +After completing the install instructions for your OS, proceed to [Building pokeemerald-expansion](#building-pokeemerald-expansion). ## Windows -Windows has instructions for building with three possible terminals, providing 3 different options in case the user stumbles upon unexpected errors. -- [Windows 10/11 (WSL1)](#windows-1011-wsl1) (**Fastest, highly recommended**, Windows 10 and 11 only) -- [Windows (msys2)](#windows-msys2) (Second fastest) -- [Windows (Cygwin)](#windows-cygwin) (Slowest) - -Unscientific benchmarks suggest **msys2 is 2x slower** than WSL1, and **Cygwin is 5-6x slower** than WSL1. - - -All of the Windows instructions assume that the default drive is C:\\. If this differs to your actual drive letter, then replace C with the correct drive letter when reading the instructions. +**Windows needs one of the systems to build the project** **A note of caution**: As Windows 7 and Windows 8 are officially unsupported by Microsoft, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10/11 instructions. -## Windows 10/11 (WSL1) -WSL1 is the preferred terminal to build **pokeemerald Expansion**. The following instructions will explain how to install WSL1 (referred to interchangeably as WSL). -- If WSL (Debian or Ubuntu) is **not installed**, then go to [Installing WSL1](#Installing-WSL1). -- Otherwise, if WSL is installed, but it **hasn't previously been set up for another decompilation project**, then go to [Setting up WSL1](#Setting-up-WSL1). -- Otherwise, **open WSL** and go to [Choosing where to store pokeemerald Expansion (WSL1)](#Choosing-where-to-store-pokeemerald-expansion-WSL1). +On Windows, the project can be built using the following systems: +- WSL2, fastest +- WSL1, 7 times slower than WSL2 +- Msys2, 20 times slower than WSL2 (**NOTE**: Currently broken on pret upstream) +- Cygwin, 30 timer slower than WSL2 (**NOTE**: Currently broken on pret upstream) -### Installing WSL1 -1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following commands (Right Click or Shift+Insert is paste in the Powershell). +**NOTE**: Only WSL systems are recommended. - ```powershell - wsl --install -d Ubuntu --enable-wsl1 - ``` +[WSL Install instructions](docs/install/windows/WSL.md) -2. Once the process finishes, restart your machine. +[Msys2 Install instructions](docs/install/windows/MSYS2.md) -3. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL1. - - ```powershell - wsl --set-version Ubuntu 1 - ``` -
- Note... - - > WSL may open automatically after restarting, but you can ignore it for now. -
- -### Setting up WSL1 -Some tips before proceeding: -- In WSL, Copy and Paste is either done via - - **right-click** (selection + right click to Copy, right click with no selection to Paste) - - **Ctrl+Shift+C/Ctrl+Shift+V** (enabled by right-clicking the title bar, going to Properties, then checking the checkbox next to "Use Ctrl+Shift+C/V as Copy/Paste"). -- Some of the commands that you'll run will ask for your WSL password and/or confirmation to perform the stated action. This is to be expected, just enter your WSL password and/or the yes action when necessary. - -1. Open **Ubuntu** (e.g. using Search). -2. WSL/Ubuntu will set up its own installation when it runs for the first time. Once WSL/Ubuntu finishes installing, it will ask for a username and password (to be input in). -
- Note... - - > When typing in the password, there will be no visible response, but the terminal will still read in input. -
- -3. Update WSL/Ubuntu before continuing. Do this by running the following command. These commands will likely take a long time to finish: - - ```bash - sudo apt update && sudo apt upgrade - ``` - -> Note: If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**, then follow the [legacy WSL1 instructions](docs/legacy_WSL1_INSTALL.md) from here. - -4. Certain packages are required to build pokeemerald Expansion. Install these packages by running the following command: - - ```bash - sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev - ``` -
- Note... - - > If the above command does not work, try the above command but replacing `apt` with `apt-get`. -
- This will install GCC v10 on Ubuntu 22.04. pokeemerald Expansion works with GCC v10, but remote repositories and the RHH Team use GCC v13 for stricter error-checking. If you want to upgrade from v10 to v13, also follow the devkitpro install instructions. - -### Installing devkitARM on WSL1 - -1. Change directory to somewhere you can download a package, such as **C:\Users\\_\_\Downloads** (the Downloads location for most users). To do so, enter this command, where *\ is your **Windows** username: - - ```bash - cd /mnt/c/Users//Downloads - ``` - -2. Once the directory has been changed, run the following commands to install devkitARM. - - ```bash - sudo apt install wget - wget https://apt.devkitpro.org/install-devkitpro-pacman - chmod +x ./install-devkitpro-pacman - sudo ./install-devkitpro-pacman - sudo dkp-pacman -S gba-dev - ``` - The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. - -3. Run the following command to set devkitPro related environment variables (alternatively, close and re-open WSL): - - ```bash - source /etc/profile.d/devkit-env.sh - ``` - -devkitARM is now installed. - -### Installing Python on WSL1 - -To install Python on WSL1, simply run the following commands: - -```bash -sudo apt update && sudo apt upgrade -sudo apt install python3 -``` - -Python is now installed. - -### Choosing where to store pokeemerald Expansion (WSL1) -WSL has its own file system that's not natively accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to store pokeemerald Expansion within Windows. - -For example, say you want to store pokeemerald Expansion in **C:\Users\\_\_\Desktop\decomps**. First, ensure that the folder already exists. Then, enter this command to **change directory** to said folder, where *\* is your **Windows** username: - -```bash -cd /mnt/c/Users//Desktop/decomps -``` - -
- Notes... - -> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL. -> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Desktop/decomp folder"`. -> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed -
- -If this works, then proceed to [Installation](#installation). - -Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using msys2](#windows-msys2). - -## Windows (msys2) - -- If devkitARM is **not installed**, then go to [Installing devkitARM](#installing-devkitarm). -- If devkitARM is installed, but msys2 **hasn't previously been set up for another decompilation project**, then go to [Setting up msys2](#setting-up-msys2). -- Otherwise, **open msys2** and go to [Choosing where to store pokeemerald Expansion (msys2)](#choosing-where-to-store-pokeemerald-expansion-msys2). - -### Installing devkitARM -1. Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases). -2. Run the devkitPro installer. In the "Choose Components" screen, uncheck everything except GBA Development unless if you plan to install other devkitPro components for other purposes. Keep the install location as C:\devkitPro and leave the Start Menu option unchanged. - -### Setting up msys2 - -Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. - -1. Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. - -2. Certain packages are required to build pokeemerald Expansion. Install these by running the following two commands: - - ```bash - pacman -Sy msys2-keyring - pacman -S make gcc zlib-devel git - ``` -
- Note... - - > The commands will ask for confirmation, just enter the yes action when prompted. -
- -3. Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). - -4. Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\⁠_\_**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: - - ```bash - cd Downloads - ``` - -
- Notes... - - > Note 1: While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. - > Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. - > Note 3: Windows path names are case-insensitive so adhering to capitalization isn’t needed. - > Note 4: If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there. -
- -5. Run the following commands to uncompress and install libpng. - - ```bash - tar xf libpng-1.6.37.tar.xz - cd libpng-1.6.37 - ./configure --prefix=/usr - make check - make install - ``` - -6. Then finally, run the following command to change back to the user profile folder. - - ```bash - cd - ``` - -### Installing Python on msys2 - -To install Python on msys2, simply run the following commands: - -```bash -pacman -S mingw-w64-x86_64-python3 -``` - -Python is now installed. - -### Choosing where to store pokeemerald Expansion (msys2) -At this point, you can choose a folder to store pokeemerald Expansion into. If you're okay with storing pokeemerald Expansion in the user profile folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald Expansion is stored when changing directory to the pokeemerald-expansion folder. - -For example, if you want to store pokeemerald Expansion in **C:\Users\\_\_\Desktop\decomps** (where *\* is your **Windows** username), enter this command: - -```bash -cd Desktop/decomps -``` - -If this works, then proceed to [Installation](#installation). - -Otherwise, ask for help on Discord or IRC (see [README.md](README.md)), or continue reading below for [Windows instructions using Cygwin](#windows-cygwin). - -## Windows (Cygwin) -1. If devkitARM is **not installed**, then follow the instructions used to [install devkitARM](#installing-devkitarm) for the msys2 setup before continuing. *Remember to not continue following the msys2 instructions by mistake!* - -2. - - If Cygwin is **not installed**, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). - - If Cygwin is installed, but **is not configured to work with devkitARM**, then go to [Configuring devkitARM for Cygwin](#configuring-devkitarm-for-cygwin). - - Otherwise, **open Cygwin** and go to [Choosing where to store pokeemerald Expansion (Cygwin)](#choosing-where-to-store-pokeemerald-expansion-cygwin) - -### Installing Cygwin -1. Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit. - -2. Run the Cygwin setup. Within the Cygwin setup, leave the default settings until the "Choose A Download Site" screen. - -3. At "Choose a Download Site", select any mirror within the Available Download Sites. - -4. At "Select Packages", set the view to "Full" (top left) and search for the following packages: - - `make` - - `git` - - `gcc-core` - - `gcc-g++` - - `libpng-devel` - - To quickly find these, use the search bar and type the name of each package. Ensure that the selected package name is the **exact** same as the one you're trying to download, e.g. `cmake` is **NOT** the same as `make`. - -5. For each package, double click on the text that says "**Skip**" next to each package to select the most recent version to install. If the text says anything other than "**Skip**", (e.g. Keep or a version number), then the package is or will be installed and you don't need to do anything. - -6. Once all required packages have been selected, finish the installation. - -### Configuring devkitARM for Cygwin - -Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. - -1. Open **Cygwin**. - -2. Run the following commands to configure devkitPro to work with Cygwin. - - ```bash - export DEVKITPRO=/cygdrive/c/devkitpro - echo export DEVKITPRO=$DEVKITPRO >> ~/.bashrc - export DEVKITARM=$DEVKITPRO/devkitARM - echo export DEVKITARM=$DEVKITARM >> ~/.bashrc - ``` - -
- Note... - - > Replace the drive letter c with the actual drive letter if it is not c. -
- -### Choosing where to store pokeemerald Expansion (Cygwin) - -Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. If you don't want to store pokeemerald Expansion there, you'll need to account for where ppokeemerald Expansion is stored when **changing directory** to the pokeemerald-expansion folder. - -For example, if you want to store pokeemerald Expansion in **C:\Users\\_\_\Desktop\decomps**, enter this command, where *\* is your **Windows** username: -```bash -cd c:/Users//Desktop/decomps -``` -Note that the directory **must exist** in Windows. If you want to store pokeemerald Expansion in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. - -
- Notes... - -> Note 1: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. -> Note 2: Windows path names are case-insensitive so adhering to capitalization isn't needed -
- -If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). - -## macOS -1. If the Xcode Command Line Tools are not installed, download the tools [here](https://developer.apple.com/xcode/resources/), open your Terminal, and run the following command: - - ```bash - xcode-select --install - ``` - -2. - If libpng is **not installed**, then go to [Installing libpng (macOS)](#installing-libpng-macos). - - If pkg-config is **not installed**, then go to [Installing pkg-config (macos)](#installing-pkg-config-macos). - - If devkitARM is **not installed**, then go to [Installing devkitARM (macOS)](#installing-devkitarm-macos). - - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald Expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos) - -### Installing libpng (macOS) -
- Note for advanced users... - -> This guide installs libpng via Homebrew as it is the easiest method, however advanced users can install libpng through other means if they so desire. -
- -1. Open the Terminal. -2. If Homebrew is not installed, then install [Homebrew](https://brew.sh/) by following the instructions on the website. -3. Run the following command to install libpng. - - ```bash - brew install libpng - ``` - libpng is now installed. - - Continue to [Installing pkg-config (macOS)](#installing-pkg-config-macos) if **pkg-config is not installed**. Otherwise, continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**. - - If both pkg-config and devkitARM are already installed, go to [Choosing where to store pokeemerald Expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos). - -### Installing pkg-config (macOS) -
- Note for advanced users... - -> This guide installs pkg-config via Homebrew as it is the easiest method, however advanced users can install pkg-config through other means if they so desire. -
- -1. Open the Terminal. -2. If Homebrew is not installed, then install [Homebrew](https://brew.sh/) by following the instructions on the website. -3. Run the following command to install libpng. - - ```bash - brew install pkg-config - ``` - pkg-config is now installed. - - Continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**, otherwise, go to [Choosing where to store pokeemerald Expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos). - -### Installing devkitARM (macOS) -1. Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases). -2. Open the package to install devkitPro pacman. -3. In the Terminal, run the following commands to install devkitARM: - - ```bash - sudo dkp-pacman -Sy - sudo dkp-pacman -S gba-dev - sudo dkp-pacman -S devkitarm-rules - ``` - - The command with gba-dev will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. - -4. After the tools are installed, devkitARM must now be made accessible from anywhere by the system. To do so, run the following commands: - - ```bash - export DEVKITPRO=/opt/devkitpro - echo "export DEVKITPRO=$DEVKITPRO" >> ~/.zshrc - export DEVKITARM=$DEVKITPRO/devkitARM - echo "export DEVKITARM=$DEVKITARM" >> ~/.zshrc - - echo "if [ -f ~/.zshrc ]; then . ~/.zshrc; fi" >> ~/.zprofile - ``` - *Note: Starting with macOS 10.15, the default Unix shell is now zsh. If you migrated from an older version of macOS, you might still be using bash. You can check my running `echo $0` in the terminal.* -
- If your terminal is using bash instead of zsh... - - ```bash - export DEVKITPRO=/opt/devkitpro - echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc - export DEVKITARM=$DEVKITPRO/devkitARM - echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc - - echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile - ``` -
- -### Installing Python (macOS) -1. Download the latest Python package from [here](https://www.python.org/downloads/). -2. Open the package to install Python. - -Python is now installed. - -### Choosing where to store pokeemerald Expansion (macOS) -At this point, you can choose a folder to store pokeemerald Expansion into. If you're okay with storing pokeemerald Expansion in the user folder, then proceed to [Installation](#installation). Otherwise, you'll need to account for where pokeemerald Expansion is stored when changing directory to the pokeemerald-expansion folder. - -For example, if you want to store pokeemerald Expansion in **~/Desktop/decomps**, enter this command to **change directory** to the desired folder: -```bash -cd Desktop/decomps -``` -Note that the directory **must exist** in the folder system. If you want to store pokeemerald Expansion in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Finder) before executing the `cd` command. - -
- Note... - -> Note: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Desktop/decomp folder"` -
- -If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). +[Cygwin Install instructions](docs/install/windows/CYGWIN.md) ## Linux -Open Terminal and enter the following commands, depending on which distro you're using. +The project can be built on any Linux distribution. +Distributions with instructions: +- [Ubuntu](docs/install/linux/UBUNTU.md) +- [Debian](docs/install/linux/DEBIAN.md) +- [Arch Linux](docs/install/linux/ARCH_LINUX.md) +- [NixOS](docs/install/linux/NIXOS.md) -### Debian/Ubuntu-based distributions -Run the following command to install the necessary packages: -```bash -sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev -``` -Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). -
- Note for legacy repos... +Other distributions have to infer what to do from [general instructions](docs/install/linux/OTHERS.md). -> If the repository you plan to build has an **[older revision of the INSTALL.md](https://github.com/pret/pokeemerald/blob/571c598/INSTALL.md)**, -> then you will have to install devkitARM. Install all the above packages except for the arm-none-eabi packages, and follow the instructions to -> [install devkitARM on Debian/Ubuntu-based distributions](#installing-devkitarm-on-debianubuntu-based-distributions). -
+## Mac +Some extra considerations exist to get the testing system working. -### Installing devkitARM on Debian/Ubuntu-based distributions +[Mac instructions](docs/install/mac/MAC_OS.md) -1. Change directory to somewhere you can download a packages, like a Downloads folder. Then, run the following commands to install devkitARM: +## ChromeOS +Only tested on x86_64 based systems. - ```bash - wget https://apt.devkitpro.org/install-devkitpro-pacman - chmod +x ./install-devkitpro-pacman - sudo ./install-devkitpro-pacman - sudo dkp-pacman -S gba-dev - ``` - The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. +[Chrome OS instructions](docs/install/chromeos/CHROME_OS.md) -4. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal): - - ```bash - source /etc/profile.d/devkit-env.sh - ``` - -devkitARM is now installed. - -### Arch Linux -Run this command as root to install the necessary packages: -```bash -pacman -S base-devel arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib git libpng -``` - -### Installing devkitARM on Arch Linux - -1. Follow [devkitPro's instructions](https://devkitpro.org/wiki/devkitPro_pacman#Customising_Existing_Pacman_Install) to configure `pacman` to download devkitPro packages. -2. Install `gba-dev`: run the following command as root. +# Building pokeemerald-expansion +Follow these steps to build `pokeemerald-expansion`. +1. Navigate to the directory you want to keep the project in, be aware of any system specific limitations. +2. Download `pokeemerald-expansion` with `git` ```console - pacman -S gba-dev - ``` - This will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. - -3. Run the following command to set devkitPro related environment variables (alternatively, close and re-open the Terminal): - - ```bash - source /etc/profile.d/devkit-env.sh - ``` - -devkitARM is now installed. - -Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). - -### NixOS -Run the following command to start an interactive shell with the necessary packages: -```bash -nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng -``` -Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). - -### NixOS -Run the following command to start an interactive shell with the necessary packages: -```bash -nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng -``` -Then proceed to [Choosing where to store pokeemerald Expansion (Linux)](#choosing-where-to-store-pokeemerald-expansion-linux). - -### Other distributions -_(Specific instructions for other distributions would be greatly appreciated!)_ - -1. Try to find the required software in its repositories: - - `gcc` - - `g++` - - `make` - - `git` - - `libpng-dev` - -2. Follow the instructions [here](https://devkitpro.org/wiki/devkitPro_pacman) to install devkitPro pacman. As a reminder, the goal is to configure an existing pacman installation to recognize devkitPro's repositories. -3. Once devkitPro pacman is configured, run the following commands: - - ```bash - sudo pacman -Sy - sudo pacman -S gba-dev - ``` - - The last command will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. - -### Installing Python in Linux -Installing Python depends on your distribution, please refere to the instructions [here](https://docs.python-guide.org/starting/install3/linux/). - -### Choosing where to store pokeemerald Expansion (Linux) -At this point, you can choose a folder to store pokeemerald Expansion into. If so, you'll have to account for the modified folder path when changing directory to the pokeemerald-expansion folder. - -If this works, then proceed to [Installation](#installation). Otherwise, ask for help on Discord or IRC (see [README.md](README.md)). - -## Installation - -
- Note for Windows users... - -> Consider adding an exception for the `pokeemerald-expansion` and/or `decomps` folder in Windows Security using -> [these instructions](https://support.microsoft.com/help/4028485). This prevents Microsoft Defender from -> scanning them which might improve performance while building. -
- -1. If pokeemerald Expansion is not already downloaded (some users may prefer to download pokeemerald Expansion via a git client like GitHub Desktop), run: - - ```bash git clone https://github.com/rh-hideout/pokeemerald-expansion ``` +3. Navigate to the newly downloaded project. -
- Note for WSL1... + ```console + cd pokeemerald-expansion + ``` +4. Build the project. - > If you get an error stating `fatal: could not set 'core.filemode' to 'false'`, then run the following commands: - > ```bash - > cd - > sudo umount /mnt/c - > sudo mount -t drvfs C: /mnt/c -o metadata,noatime - > cd - > ``` - > Where *\* is the path of the folder [where you chose to store pokeemerald Expansion](#Choosing-where-to-store-pokeemerald-expansion-WSL1). Then run the `git clone` command again. -
+ ```console + make + ``` +5. If everything worked correctly, something very similar to this should be seen. -Now you're ready to build pokeemerald Expansion. - -## Build pokeemerald Expansion - -If you aren't in the pokeemerald-expansion directory already, then **change directory** to the pokeemerald-expansion folder: -```bash -cd pokeemerald-expansion -``` -To build **pokeemerald.gba** (Note: to speed up builds, see [Parallel builds](#parallel-builds)): -```bash -make -``` -If it has built successfully you will have the output file **pokeemerald.gba** in your project folder. -
-Note for Windows... -> If you switched terminals since the last build (e.g. from msys2 to WSL1), you must run `make clean-tools` once before any subsequent `make` commands. -
+ ```console + arm-none-eabi-ld: warning: ../../pokeemerald.elf has a LOAD segment with RWX permissions + Memory region Used Size Region Size %age Used + EWRAM: 243354 B 256 KB 92.83% + IWRAM: 30492 B 32 KB 93.05% + ROM: 26072244 B 32 MB 77.70% + cd build/modern && arm-none-eabi-ld -T ../../ld_script_modern.ld --print-memory-usage -o ../../pokeemerald.elf | cat + tools/gbafix/gbafix pokeemerald.elf -t"POKEMON EMER" -cBPEE -m01 -r0 --silent + arm-none-eabi-objcopy -O binary pokeemerald.elf pokeemerald.gba + tools/gbafix/gbafix pokeemerald.gba -p --silent + ``` + And the build ROM will be in the directory as `pokeemerald.gba`. # Building guidance diff --git a/docs/install/chromeos/CHROME_OS.md b/docs/install/chromeos/CHROME_OS.md new file mode 100644 index 0000000000..7fa57e5968 --- /dev/null +++ b/docs/install/chromeos/CHROME_OS.md @@ -0,0 +1,14 @@ +# Instructions for ChromeOS + +1. Enable the Linux terminal by following the instructions on [this page](https://chromeos.dev/en/productivity/terminal). Be sure to allocate enough space for the Linux install. +2. After the Linux terminal has finished installing, run the following command in the terminal to update and upgrade the Linux terminal: + + ```console + sudo apt update && apt upgrade + ``` +3. Then install all dependencies by running the following command: + + ```console + sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev python3 + ``` +**NOTE**: The project must be kept in a directory inside the Linux filesystem, for example under `~/Decomps/pokeemerald-expansion` diff --git a/docs/install/linux/ARCH_LINUX.md b/docs/install/linux/ARCH_LINUX.md new file mode 100644 index 0000000000..1d69e5c39c --- /dev/null +++ b/docs/install/linux/ARCH_LINUX.md @@ -0,0 +1,6 @@ +# Arch Linux instructions +## Installing dependencies +Run the following command from the command line: +```console +sudo pacman -S base-devel arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib git libpng python +``` diff --git a/docs/install/linux/DEBIAN.md b/docs/install/linux/DEBIAN.md new file mode 100644 index 0000000000..a63d3f985e --- /dev/null +++ b/docs/install/linux/DEBIAN.md @@ -0,0 +1,6 @@ +# Debian instructions +## Installing dependencies +Open a terminal and run the following command from the command line: +```console +sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev python3 +``` diff --git a/docs/install/linux/NIXOS.md b/docs/install/linux/NIXOS.md new file mode 100644 index 0000000000..6c613466b6 --- /dev/null +++ b/docs/install/linux/NIXOS.md @@ -0,0 +1,5 @@ +# NixOS instructions +Run the following command to start an interactive shell with the necessary packages: +```bash +nix-shell -p pkgsCross.arm-embedded.stdenv.cc git pkg-config libpng +``` diff --git a/docs/install/linux/OTHERS.md b/docs/install/linux/OTHERS.md new file mode 100644 index 0000000000..eb83331ed9 --- /dev/null +++ b/docs/install/linux/OTHERS.md @@ -0,0 +1,11 @@ +# Instructions for other distributions +1. Try to find the required software in its repositories: + - `gcc` + - `g++` + - `arm-none-eabi-gcc` + - `arm-none-eabi-binutils` + - `arm-none-eabi-newlib` + - `make` + - `git` + - `libpng-dev` + - `python3` diff --git a/docs/install/linux/UBUNTU.md b/docs/install/linux/UBUNTU.md new file mode 100644 index 0000000000..41beb8067a --- /dev/null +++ b/docs/install/linux/UBUNTU.md @@ -0,0 +1,6 @@ +# Ubuntu instructions +## Installing dependencies +Open a terminal and run the following command from the command line: +```console +sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev python3 +``` diff --git a/docs/install/mac/MAC_OS.md b/docs/install/mac/MAC_OS.md new file mode 100644 index 0000000000..8ffa4df089 --- /dev/null +++ b/docs/install/mac/MAC_OS.md @@ -0,0 +1,93 @@ +# Instructions for macOS +1. If the Xcode Command Line Tools are not installed, download the tools [here](https://developer.apple.com/xcode/resources/), open your Terminal, and run the following command: + + ```bash + xcode-select --install + ``` + +2. - If libpng is **not installed**, then go to [Installing libpng (macOS)](#installing-libpng-macos). + - If pkg-config is **not installed**, then go to [Installing pkg-config (macos)](#installing-pkg-config-macos). + - If devkitARM is **not installed**, then go to [Installing devkitARM (macOS)](#installing-devkitarm-macos). + - Otherwise, **open the Terminal** and go to [Choosing where to store pokeemerald-expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos) + +### Installing libpng (macOS) +
+ Note for advanced users... + +> This guide installs libpng via Homebrew as it is the easiest method, however advanced users can install libpng through other means if they so desire. +
+ +1. Open the Terminal. +2. If Homebrew is not installed, then install [Homebrew](https://brew.sh/) by following the instructions on the website. +3. Run the following command to install libpng. + + ```bash + brew install libpng + ``` + libpng is now installed. + + Continue to [Installing pkg-config (macOS)](#installing-pkg-config-macos) if **pkg-config is not installed**. Otherwise, continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**. + + If both pkg-config and devkitARM are already installed, go to [Choosing where to store pokeemerald-expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos). + +### Installing pkg-config (macOS) +
+ Note for advanced users... + +> This guide installs pkg-config via Homebrew as it is the easiest method, however advanced users can install pkg-config through other means if they so desire. +
+ +1. Open the Terminal. +2. If Homebrew is not installed, then install [Homebrew](https://brew.sh/) by following the instructions on the website. +3. Run the following command to install libpng. + + ```bash + brew install pkg-config + ``` + pkg-config is now installed. + + Continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**, otherwise, go to [Choosing where to store pokeemerald-expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos). + +### Installing devkitARM (macOS) +1. Download the `devkitpro-pacman-installer.pkg` package from [here](https://github.com/devkitPro/pacman/releases). +2. Open the package to install devkitPro pacman. +3. In the Terminal, run the following commands to install devkitARM: + + ```bash + sudo dkp-pacman -Sy + sudo dkp-pacman -S gba-dev + sudo dkp-pacman -S devkitarm-rules + ``` + + The command with gba-dev will ask for the selection of packages to install. Just press Enter to install all of them, followed by entering Y to proceed with the installation. + +4. After the tools are installed, devkitARM must now be made accessible from anywhere by the system. To do so, run the following commands: + + ```bash + export DEVKITPRO=/opt/devkitpro + echo "export DEVKITPRO=$DEVKITPRO" >> ~/.zshrc + export DEVKITARM=$DEVKITPRO/devkitARM + echo "export DEVKITARM=$DEVKITARM" >> ~/.zshrc + + echo "if [ -f ~/.zshrc ]; then . ~/.zshrc; fi" >> ~/.zprofile + ``` + *Note: Starting with macOS 10.15, the default Unix shell is now zsh. If you migrated from an older version of macOS, you might still be using bash. You can check my running `echo $0` in the terminal.* +
+ If your terminal is using bash instead of zsh... + + ```bash + export DEVKITPRO=/opt/devkitpro + echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc + export DEVKITARM=$DEVKITPRO/devkitARM + echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc + + echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile + ``` +
+ +### Installing Python (macOS) +1. Download the latest Python package from [here](https://www.python.org/downloads/). +2. Open the package to install Python. + +Python is now installed. + diff --git a/docs/install/windows/CYGWIN.md b/docs/install/windows/CYGWIN.md new file mode 100644 index 0000000000..c9ca728c22 --- /dev/null +++ b/docs/install/windows/CYGWIN.md @@ -0,0 +1,4 @@ +# cygwin +Don't, just don't. +Currently doesn't work on current Expansion versions. +This is a bug from upstream pret `pokeemerald`. diff --git a/docs/install/windows/MSYS2.md b/docs/install/windows/MSYS2.md new file mode 100644 index 0000000000..ce7176b912 --- /dev/null +++ b/docs/install/windows/MSYS2.md @@ -0,0 +1,4 @@ +# msys2 +Don't, just don't. +Currently doesn't work on current Expansion versions. +This is a bug from upstream pret `pokeemerald`. diff --git a/docs/install/windows/WSL.md b/docs/install/windows/WSL.md new file mode 100644 index 0000000000..9534966488 --- /dev/null +++ b/docs/install/windows/WSL.md @@ -0,0 +1,87 @@ +# Windows WSL instructions +## Choosing WSL version +If you must store your project on the Windows file system (under /mnt/c/), you should use WSL1. +If you want the best performance and least amount of issues with Windows interfering with compiling the project, use WSL2 and store the project on the Linux file system (under ~/). +## Installing WSL +1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following commands (Right Click or Shift+Insert is paste in the Powershell). + + ```powershell + wsl --install -d Ubuntu --enable-wsl1 + ``` + +2. Once the process finishes, restart your machine. + +### WSL1 +3a. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL1. + + ```powershell + wsl --set-version Ubuntu 1 + ``` +### WSL2 +3a. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL2. + + ```powershell + wsl --set-version Ubuntu 2 + ``` + +
+ Note... + + > WSL may open automatically after restarting, but you can ignore it for now. +
+ +## Installing dependencies +Some tips before proceeding: +- In WSL, Copy and Paste is either done via + - **right-click** (selection + right click to Copy, right click with no selection to Paste) + - **Ctrl+Shift+C/Ctrl+Shift+V** (enabled by right-clicking the title bar, going to Properties, then checking the checkbox next to "Use Ctrl+Shift+C/V as Copy/Paste"). +- Some of the commands that you'll run will ask for your WSL password and/or confirmation to perform the stated action. This is to be expected, just enter your WSL password and/or the yes action when necessary. + +1. Open **Ubuntu** (e.g. using Search). +2. WSL/Ubuntu will set up its own installation when it runs for the first time. Once WSL/Ubuntu finishes installing, it will ask for a username and password (to be input in). +
+ Note... + + > When typing in the password, there will be no visible response, but the terminal will still read in input. +
+ +3. Update WSL/Ubuntu before continuing. Do this by running the following command. These commands will likely take a long time to finish: + + ```bash + sudo apt update && sudo apt upgrade + ``` + +4. Certain packages are required to build pokeemerald Expansion. Install these packages by running the following command: + + ```bash + sudo apt install build-essential binutils-arm-none-eabi gcc-arm-none-eabi libnewlib-arm-none-eabi git libpng-dev python3 + ``` + +## Choosing a location to store pokeemerald Expansion, WSL1 +WSL has its own file system that's not natively accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to store pokeemerald Expansion within Windows. + +For example, say you want to store pokeemerald Expansion in **C:\Users\\_\_\Desktop\decomps**. First, ensure that the folder already exists. Then, enter this command to **change directory** to said folder, where *\* is your **Windows** username: + +```bash +cd /mnt/c/Users//Desktop/decomps +``` + +
+ Notes... + +> Note 1: The Windows C:\ drive is called /mnt/c/ in WSL. +> Note 2: If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "/mnt/c/users//Desktop/decomp folder"`. +> Note 3: Windows path names are case-insensitive so adhering to capitalization isn't needed +
+ +## Choosing a location to store pokeemerald Expansion, WSL2 +WSL has its own file system that's not natively accessible from Windows, but Windows files *are* accessible from WSL. But accessing files on the Windows file system with WSL2 is very slow, so you're going to want to store pokeemerald Expansion within WSL2. +To access the files on the WSL filesystem from Windowsm, you have to open the WSL filesystem as a network attached storage in the file explorer, it should be at the bottom of the left sidebar as "Ubuntu". + +Thus you're going to make sure that you're in the WSL filesystem, then create the folder for decomps if it doesn't already exist, then move into that folder. + +```bash +cd ~/ +mkdir decomps +cd decomps +``` From 816d3020fa442107e7d83fcc893b18d507518512 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 25 Dec 2024 22:42:14 +0100 Subject: [PATCH 507/544] Fixes UB in caps.c (#5878) --- src/caps.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/caps.c b/src/caps.c index 9c30e55527..941509c2a4 100644 --- a/src/caps.c +++ b/src/caps.c @@ -54,7 +54,7 @@ u32 GetSoftLevelCapExpValue(u32 level, u32 expValue) if (B_LEVEL_CAP_EXP_UP) { levelDifference = currentLevelCap - level; - if (levelDifference > ARRAY_COUNT(sExpScalingUp)) + if (levelDifference > ARRAY_COUNT(sExpScalingUp) - 1) return expValue + (expValue / sExpScalingUp[ARRAY_COUNT(sExpScalingUp) - 1]); else return expValue + (expValue / sExpScalingUp[levelDifference]); @@ -71,7 +71,7 @@ u32 GetSoftLevelCapExpValue(u32 level, u32 expValue) else if (B_EXP_CAP_TYPE == EXP_CAP_SOFT) { levelDifference = level - currentLevelCap; - if (levelDifference > ARRAY_COUNT(sExpScalingDown)) + if (levelDifference > ARRAY_COUNT(sExpScalingDown) - 1) return expValue / sExpScalingDown[ARRAY_COUNT(sExpScalingDown) - 1]; else return expValue / sExpScalingDown[levelDifference]; From 6a1ed7e33aeca6302395088836296b1229af7bb6 Mon Sep 17 00:00:00 2001 From: RavePossum <145081120+ravepossum@users.noreply.github.com> Date: Thu, 26 Dec 2024 10:28:07 -0700 Subject: [PATCH 508/544] Change install.md to mention make debug instead of DINFO=1 (#5882) --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 25e6adb428..6e52559f67 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -110,9 +110,9 @@ To compile the `modern` target with this toolchain, the subdirectories `lib`, `i ### Building with debug info -To build **pokeemerald.elf** with debug symbols under a modern toolchain: +To build **pokeemerald.elf** with debug symbols and debug-compatible optimization under a modern toolchain: ```bash -make DINFO=1 +make debug ``` # Useful additional tools From 2c9352921c2fa7fdeecca865e11ebf71595185a7 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 26 Dec 2024 17:04:03 -0300 Subject: [PATCH 509/544] Fixed Ally Switch breaking Illusion (#5879) --- src/battle_anim_effects_1.c | 1 + test/battle/move_effect/ally_switch.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 826586cf9b..a3104122d1 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -6736,6 +6736,7 @@ static void AnimTask_AllySwitchDataSwap(u8 taskId) SwapStructData(&gSpecialStatuses[battlerAtk], &gSpecialStatuses[battlerPartner], data, sizeof(struct SpecialStatus)); SwapStructData(&gProtectStructs[battlerAtk], &gProtectStructs[battlerPartner], data, sizeof(struct ProtectStruct)); SwapStructData(&gBattleSpritesDataPtr->battlerData[battlerAtk], &gBattleSpritesDataPtr->battlerData[battlerPartner], data, sizeof(struct BattleSpriteInfo)); + SwapStructData(&gBattleStruct->illusion[battlerAtk], &gBattleStruct->illusion[battlerPartner], data, sizeof(struct Illusion)); SWAP(gBattleSpritesDataPtr->battlerData[battlerAtk].invisible, gBattleSpritesDataPtr->battlerData[battlerPartner].invisible, temp); SWAP(gTransformedPersonalities[battlerAtk], gTransformedPersonalities[battlerPartner], temp); diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index 974730f120..dee29a58e0 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -277,5 +277,21 @@ DOUBLE_BATTLE_TEST("Ally switch swaps opposing sky drop targets if partner is be } } +DOUBLE_BATTLE_TEST("Ally Switch swaps Illusion data") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ALLY_SWITCH].effect == EFFECT_ALLY_SWITCH); + PLAYER(SPECIES_HOOPA); + PLAYER(SPECIES_ZOROARK); + PLAYER(SPECIES_MAMOSWINE); // the third member here is required for zoroark + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_ALLY_SWITCH); } + } THEN { + EXPECT(&gPlayerParty[2] == gBattleStruct->illusion[0].mon); + } +} + // Triple Battles required to test //TO_DO_BATTLE_TEST("Ally Switch fails if the user is in the middle of the field in a Triple Battle"); From 91c7bd9e53464ee78f9bf26758de93607ce5bba5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 26 Dec 2024 17:22:45 -0300 Subject: [PATCH 510/544] Fixed givemon not respecting perfect IVs for species (#5873) --- include/pokemon.h | 1 + src/daycare.c | 21 ----------------- src/pokemon.c | 5 ++-- src/script_pokemon_util.c | 49 ++++++++++++++++++++++++++++++++++----- test/pokemon.c | 44 +++++++++++++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 29 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index 069290b363..8aca6c58d5 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -891,6 +891,7 @@ u16 GetFormChangeTargetSpecies(struct Pokemon *mon, u16 method, u32 arg); u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32 arg); bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method); u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove); +void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv); bool32 SpeciesHasGenderDifferences(u16 species); bool32 TryFormChange(u32 monId, u32 side, u16 method); void TryToSetBattleFormChangeMoves(struct Pokemon *mon, u16 method); diff --git a/src/daycare.c b/src/daycare.c index 912537af56..4997f4efe9 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -590,27 +590,6 @@ static void UNUSED TriggerPendingDaycareMaleEgg(void) _TriggerPendingDaycareMaleEgg(&gSaveBlock1Ptr->daycare); } -// Removes the selected index from the given IV list and shifts the remaining -// elements to the left. -static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) -{ - s32 i, j; - u8 temp[NUM_STATS]; - - ivs[selectedIv] = 0xFF; - for (i = 0; i < NUM_STATS; i++) - { - temp[i] = ivs[i]; - } - - j = 0; - for (i = 0; i < NUM_STATS; i++) - { - if (temp[i] != 0xFF) - ivs[j++] = temp[i]; - } -} - static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) { u16 motherItem = GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM); diff --git a/src/pokemon.c b/src/pokemon.c index 72aa2c7c62..c60e95cc6a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -75,7 +75,6 @@ static void EncryptBoxMon(struct BoxPokemon *boxMon); static void DecryptBoxMon(struct BoxPokemon *boxMon); static void Task_PlayMapChosenOrBattleBGM(u8 taskId); static bool8 ShouldSkipFriendshipChange(void); -static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv); void TrySpecialOverworldEvo(); EWRAM_DATA static u8 sLearningMoveTableID = 0; @@ -6659,7 +6658,9 @@ u16 MonTryLearningNewMoveEvolution(struct Pokemon *mon, bool8 firstMove) return 0; } -static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) +// Removes the selected index from the given IV list and shifts the remaining +// elements to the left. +void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) { s32 i, j; u8 temp[NUM_STATS]; diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index 020094389a..fc248435a9 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -487,12 +487,49 @@ void ScrCmd_createmon(struct ScriptContext *ctx) u8 speedEv = PARSE_FLAG(8, 0); u8 spAtkEv = PARSE_FLAG(9, 0); u8 spDefEv = PARSE_FLAG(10, 0); - u8 hpIv = PARSE_FLAG(11, Random() % (MAX_PER_STAT_IVS + 1)); - u8 atkIv = PARSE_FLAG(12, Random() % (MAX_PER_STAT_IVS + 1)); - u8 defIv = PARSE_FLAG(13, Random() % (MAX_PER_STAT_IVS + 1)); - u8 speedIv = PARSE_FLAG(14, Random() % (MAX_PER_STAT_IVS + 1)); - u8 spAtkIv = PARSE_FLAG(15, Random() % (MAX_PER_STAT_IVS + 1)); - u8 spDefIv = PARSE_FLAG(16, Random() % (MAX_PER_STAT_IVS + 1)); + u8 hpIv = Random() % (MAX_PER_STAT_IVS + 1); + u8 atkIv = Random() % (MAX_PER_STAT_IVS + 1); + u8 defIv = Random() % (MAX_PER_STAT_IVS + 1); + u8 speedIv = Random() % (MAX_PER_STAT_IVS + 1); + u8 spAtkIv = Random() % (MAX_PER_STAT_IVS + 1); + u8 spDefIv = Random() % (MAX_PER_STAT_IVS + 1); + + // Perfect IV calculation + u32 i; + u8 availableIVs[NUM_STATS]; + u8 selectedIvs[NUM_STATS]; + if (gSpeciesInfo[species].perfectIVCount != 0) + { + // Initialize a list of IV indices. + for (i = 0; i < NUM_STATS; i++) + availableIVs[i] = i; + + // Select the IVs that will be perfected. + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) + { + u8 index = Random() % (NUM_STATS - i); + selectedIvs[i] = availableIVs[index]; + RemoveIVIndexFromList(availableIVs, index); + } + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) + { + switch (selectedIvs[i]) + { + case STAT_HP: hpIv = MAX_PER_STAT_IVS; break; + case STAT_ATK: atkIv = MAX_PER_STAT_IVS; break; + case STAT_DEF: defIv = MAX_PER_STAT_IVS; break; + case STAT_SPEED: speedIv = MAX_PER_STAT_IVS; break; + case STAT_SPATK: spAtkIv = MAX_PER_STAT_IVS; break; + case STAT_SPDEF: spDefIv = MAX_PER_STAT_IVS; break; + } + } + } + hpIv = PARSE_FLAG(11, hpIv); + atkIv = PARSE_FLAG(12, atkIv); + defIv = PARSE_FLAG(13, defIv); + speedIv = PARSE_FLAG(14, speedIv); + spAtkIv = PARSE_FLAG(15, spAtkIv); + spDefIv = PARSE_FLAG(16, spDefIv); u16 move1 = PARSE_FLAG(17, MOVE_NONE); u16 move2 = PARSE_FLAG(18, MOVE_NONE); u16 move3 = PARSE_FLAG(19, MOVE_NONE); diff --git a/test/pokemon.c b/test/pokemon.c index f5431559ee..00b08ebb79 100644 --- a/test/pokemon.c +++ b/test/pokemon.c @@ -210,6 +210,50 @@ TEST("givemon [simple]") EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_LEVEL), 100); } +TEST("givemon respects perfectIVCount") +{ + ZeroPlayerPartyMons(); + u32 perfectIVs[6] = {0}; + + ASSUME(gSpeciesInfo[SPECIES_MEW].perfectIVCount == 3); + ASSUME(gSpeciesInfo[SPECIES_CELEBI].perfectIVCount == 3); + ASSUME(gSpeciesInfo[SPECIES_JIRACHI].perfectIVCount == 3); + ASSUME(gSpeciesInfo[SPECIES_MANAPHY].perfectIVCount == 3); + ASSUME(gSpeciesInfo[SPECIES_VICTINI].perfectIVCount == 3); + ASSUME(gSpeciesInfo[SPECIES_DIANCIE].perfectIVCount == 3); + + RUN_OVERWORLD_SCRIPT( + givemon SPECIES_MEW, 100; + givemon SPECIES_CELEBI, 100; + givemon SPECIES_JIRACHI, 100; + givemon SPECIES_MANAPHY, 100; + givemon SPECIES_VICTINI, 100; + givemon SPECIES_DIANCIE, 100; + ); + + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_MEW); + EXPECT_EQ(GetMonData(&gPlayerParty[1], MON_DATA_SPECIES), SPECIES_CELEBI); + EXPECT_EQ(GetMonData(&gPlayerParty[2], MON_DATA_SPECIES), SPECIES_JIRACHI); + EXPECT_EQ(GetMonData(&gPlayerParty[3], MON_DATA_SPECIES), SPECIES_MANAPHY); + EXPECT_EQ(GetMonData(&gPlayerParty[4], MON_DATA_SPECIES), SPECIES_VICTINI); + EXPECT_EQ(GetMonData(&gPlayerParty[5], MON_DATA_SPECIES), SPECIES_DIANCIE); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_LEVEL), 100); + EXPECT_EQ(GetMonData(&gPlayerParty[1], MON_DATA_LEVEL), 100); + EXPECT_EQ(GetMonData(&gPlayerParty[2], MON_DATA_LEVEL), 100); + EXPECT_EQ(GetMonData(&gPlayerParty[3], MON_DATA_LEVEL), 100); + EXPECT_EQ(GetMonData(&gPlayerParty[4], MON_DATA_LEVEL), 100); + EXPECT_EQ(GetMonData(&gPlayerParty[5], MON_DATA_LEVEL), 100); + for (u32 j = 0; j < 6; j++) + { + for (u32 k = 0; k < NUM_STATS; k++) + { + if (GetMonData(&gPlayerParty[j], MON_DATA_HP_IV + k) == MAX_PER_STAT_IVS) + perfectIVs[j]++; + } + EXPECT_GE(perfectIVs[j], 3); + } +} + TEST("givemon [moves]") { ZeroPlayerPartyMons(); From 767e5a1f29bf74a2b664095f4ec7744f4f23811e Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Fri, 27 Dec 2024 01:55:56 -0500 Subject: [PATCH 511/544] Fix Script Scrollable Multichoice Arrow Positions (#5884) Co-authored-by: ghoulslash --- src/field_specials.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/field_specials.c b/src/field_specials.c index f5154f8424..7e05fb6cc5 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2766,10 +2766,12 @@ static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId) struct ScrollArrowsTemplate template = sScrollableMultichoice_ScrollArrowsTemplate; if (task->tMaxItemsOnScreen != task->tNumItems) { + u32 y0 = (8 * (task->tTop - 1)); + template.firstX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8; - template.firstY = 8; + template.firstY = 8 + y0; template.secondX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8; - template.secondY = task->tHeight * 8 + 10; + template.secondY = task->tHeight * 8 + 10 + y0; template.fullyUpThreshold = 0; template.fullyDownThreshold = task->tNumItems - task->tMaxItemsOnScreen; task->tScrollArrowId = AddScrollIndicatorArrowPair(&template, &gScrollableMultichoice_ScrollOffset); From dccf2632b25c2d0d0c9d879873ffa15073d8f72b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 27 Dec 2024 07:16:30 -0300 Subject: [PATCH 512/544] Added missing Belch tests (#5881) --- test/battle/move_effect/belch.c | 66 +++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/test/battle/move_effect/belch.c b/test/battle/move_effect/belch.c index 2a732e0e45..f8e28929f9 100644 --- a/test/battle/move_effect/belch.c +++ b/test/battle/move_effect/belch.c @@ -21,7 +21,7 @@ AI_SINGLE_BATTLE_TEST("AI: Belch has nonzero score after eating a berry") TURN { MOVE(player, MOVE_MUD_SHOT); EXPECT_MOVE(opponent, MOVE_TACKLE); } TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_BELCH);} } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, opponent); } } @@ -53,6 +53,64 @@ SINGLE_BATTLE_TEST("Belch cannot be used if the user has not eaten a berry") } } -TO_DO_BATTLE_TEST("Belch can still be used after switching out"); -TO_DO_BATTLE_TEST("Belch can still be used after fainting"); -TO_DO_BATTLE_TEST("Belch can still be used after restoring the consumed berry"); +SINGLE_BATTLE_TEST("Belch can still be used after switching out") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_STUFF_CHEEKS].effect == EFFECT_STUFF_CHEEKS); + PLAYER(SPECIES_GREEDENT) { Item(ITEM_ORAN_BERRY); } + PLAYER(SPECIES_SKWOVET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STUFF_CHEEKS); } + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + TURN { MOVE(player, MOVE_BELCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUFF_CHEEKS, player); + SWITCH_OUT_MESSAGE("Greedent"); + SWITCH_OUT_MESSAGE("Skwovet"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); + } +} + +SINGLE_BATTLE_TEST("Belch can still be used after fainting") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_STUFF_CHEEKS].effect == EFFECT_STUFF_CHEEKS); + ASSUME(gMovesInfo[MOVE_FISSURE].effect == EFFECT_OHKO); + ASSUME(gMovesInfo[MOVE_REVIVAL_BLESSING].effect == EFFECT_REVIVAL_BLESSING); + PLAYER(SPECIES_GREEDENT) { Item(ITEM_ORAN_BERRY); } + PLAYER(SPECIES_SKWOVET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STUFF_CHEEKS); MOVE(opponent, MOVE_FISSURE); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_REVIVAL_BLESSING, partyIndex: 0); } + TURN { SWITCH(player, 0); } + TURN { MOVE(player, MOVE_BELCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUFF_CHEEKS, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FISSURE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVIVAL_BLESSING, player); + SWITCH_OUT_MESSAGE("Skwovet"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); + } +} + +SINGLE_BATTLE_TEST("Belch can still be used after restoring the consumed berry") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_STUFF_CHEEKS].effect == EFFECT_STUFF_CHEEKS); + ASSUME(gMovesInfo[MOVE_RECYCLE].effect == EFFECT_RECYCLE); + PLAYER(SPECIES_GREEDENT) { Item(ITEM_ORAN_BERRY); } + PLAYER(SPECIES_SKWOVET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STUFF_CHEEKS); } + TURN { MOVE(player, MOVE_RECYCLE); } + TURN { MOVE(player, MOVE_BELCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUFF_CHEEKS, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RECYCLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, player); + } +} From 445ba32679873cf513bdfe9d2e15b861de3f9082 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 29 Dec 2024 12:54:33 +0100 Subject: [PATCH 513/544] Fixes gen3 Style Shadows out of place (#5880) --- src/battle_gfx_sfx_util.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 611c1bec59..1f768274aa 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -1185,7 +1185,7 @@ void CreateEnemyShadowSprite(u32 battler) { gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, GetBattlerSpriteCoord(battler, BATTLER_COORD_X), - GetBattlerSpriteCoord(battler, BATTLER_COORD_Y), + GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + 29, 0xC8); if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES) { @@ -1247,9 +1247,11 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) return; } - s8 xOffset = 0, yOffset = 0, size = SHADOW_SIZE_S; + s8 xOffset = 0, UNUSED yOffset = 0, size = SHADOW_SIZE_S; if (gAnimScriptActive || battlerSprite->invisible) + { invisible = TRUE; + } else if (transformSpecies != SPECIES_NONE) { xOffset = gSpeciesInfo[transformSpecies].enemyShadowXOffset; @@ -1267,21 +1269,19 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) yOffset = gSpeciesInfo[species].enemyShadowYOffset + 16; size = gSpeciesInfo[species].enemyShadowSize; } - else - { - yOffset = 29; - } if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) invisible = TRUE; shadowSprite->x = battlerSprite->x + xOffset; shadowSprite->x2 = battlerSprite->x2; - shadowSprite->y = battlerSprite->y + yOffset; shadowSprite->invisible = invisible; if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE) + { shadowSprite->oam.tileNum = shadowSprite->tBaseTileNum + (8 * size); + shadowSprite->y = battlerSprite->y + yOffset; + } } #undef tBattlerId From 7ddb4cdc1b080a91163529e9f540a23773722cc9 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Dec 2024 10:18:33 -0300 Subject: [PATCH 514/544] Fixed TODO tests not showing up when filtering by name (#5894) --- include/test/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/test/battle.h b/include/test/battle.h index 7cf7053988..d73443c30d 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -742,7 +742,7 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState; /* Test */ #define TO_DO_BATTLE_TEST(_name) \ - TEST("TODO: " _name) \ + TEST(_name) \ { \ TO_DO; \ } From 433058edc1ffc6cebfc6c12a6169180606107f3b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Dec 2024 10:27:08 -0300 Subject: [PATCH 515/544] Added missing Move Effect TODO tests - Volume D (#5887) --- test/battle/ability/liquid_ooze.c | 112 +++++++++++ test/battle/crit_chance.c | 73 ------- test/battle/gimmick/dynamax.c | 34 ---- test/battle/move_effect/absorb.c | 38 ---- test/battle/move_effect/baton_pass.c | 3 - test/battle/move_effect/curse.c | 2 + test/battle/move_effect/dark_void.c | 42 ++++ test/battle/move_effect/decorate.c | 5 + test/battle/move_effect/defense_curl.c | 37 ++++ test/battle/move_effect/defense_down.c | 2 +- test/battle/move_effect/defense_down_2.c | 32 +++ test/battle/move_effect/defense_up.c | 2 +- test/battle/move_effect/defense_up_2.c | 32 +++ test/battle/move_effect/defense_up_3.c | 32 +++ test/battle/move_effect/defog.c | 59 +++--- test/battle/move_effect/destiny_bond.c | 31 +++ test/battle/move_effect/disable.c | 20 ++ test/battle/move_effect/do_nothing.c | 4 + .../double_power_on_arg_status.c | 0 test/battle/move_effect/dragon_cheer.c | 77 ++++++++ test/battle/move_effect/dragon_dance.c | 4 + test/battle/move_effect/dragon_darts.c | 184 ++++++++---------- test/battle/move_effect/dream_eater.c | 4 + test/battle/move_effect/dynamax_double_dmg.c | 20 ++ test/battle/move_effect/leech_seed.c | 19 -- test/battle/move_effect/strength_sap.c | 31 --- 26 files changed, 568 insertions(+), 331 deletions(-) create mode 100644 test/battle/ability/liquid_ooze.c create mode 100644 test/battle/move_effect/dark_void.c create mode 100644 test/battle/move_effect/decorate.c create mode 100644 test/battle/move_effect/defense_curl.c create mode 100644 test/battle/move_effect/defense_down_2.c create mode 100644 test/battle/move_effect/defense_up_2.c create mode 100644 test/battle/move_effect/defense_up_3.c create mode 100644 test/battle/move_effect/disable.c create mode 100644 test/battle/move_effect/do_nothing.c rename test/battle/{move_effect_secondary => move_effect}/double_power_on_arg_status.c (100%) create mode 100644 test/battle/move_effect/dragon_cheer.c create mode 100644 test/battle/move_effect/dragon_dance.c create mode 100644 test/battle/move_effect/dynamax_double_dmg.c diff --git a/test/battle/ability/liquid_ooze.c b/test/battle/ability/liquid_ooze.c new file mode 100644 index 0000000000..bb4da48f86 --- /dev/null +++ b/test/battle/ability/liquid_ooze.c @@ -0,0 +1,112 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Liquid Ooze causes Absorb users to lose HP instead of heal") +{ + s16 damage; + s16 healed; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } + } WHEN { + TURN { MOVE(player, MOVE_ABSORB); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + MESSAGE("Wobbuffet sucked up the liquid ooze!"); + } THEN { + EXPECT_MUL_EQ(damage, Q_4_12(0.5), healed); + } +} + +SINGLE_BATTLE_TEST("Liquid Ooze causes Leech Seed users to lose HP instead of heal") +{ + s16 damage; + s16 healed; + + GIVEN { + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } + } WHEN { + TURN { MOVE(player, MOVE_LEECH_SEED); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); + HP_BAR(opponent, captureDamage: &damage); + HP_BAR(player, captureDamage: &healed); + } THEN { + EXPECT_EQ(damage, healed); + } +} + +DOUBLE_BATTLE_TEST("Liquid Ooze causes Matcha Gatcha users to lose HP instead of heal") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_MATCHA_GOTCHA].effect == EFFECT_ABSORB); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(playerLeft); + MESSAGE("Wobbuffet sucked up the liquid ooze!"); + MESSAGE("Wobbuffet fainted!"); + } +} + +DOUBLE_BATTLE_TEST("Liquid Ooze will faint Matcha Gatcha users if it deals enough damage") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_MATCHA_GOTCHA].effect == EFFECT_ABSORB); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(playerLeft); + MESSAGE("Wobbuffet sucked up the liquid ooze!"); + MESSAGE("Wobbuffet fainted!"); + } +} + +SINGLE_BATTLE_TEST("Liquid Ooze causes Strength Sap users to lose HP instead of heal") +{ + s16 lostHp; + s32 atkStat; + + PARAMETRIZE { atkStat = 100; } + PARAMETRIZE { atkStat = 490; } // Checks that attacker can faint with no problems. + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Attack(atkStat); Ability(ABILITY_LIQUID_OOZE); } + } WHEN { + TURN { MOVE(player, MOVE_STRENGTH_SAP); if (atkStat == 490) { SEND_OUT(player, 1); } } + } SCENE { + MESSAGE("Wobbuffet used Strength Sap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Wobbuffet's Attack fell!"); + ABILITY_POPUP(opponent, ABILITY_LIQUID_OOZE); + HP_BAR(player, captureDamage: &lostHp); + MESSAGE("Wobbuffet sucked up the liquid ooze!"); + if (atkStat >= 490) { + MESSAGE("Wobbuffet fainted!"); + SEND_IN_MESSAGE("Wobbuffet"); + } + } THEN { + EXPECT_EQ(lostHp, atkStat); + } +} + +TO_DO_BATTLE_TEST("Liquid Ooze does not cause Dream Eater users to lose HP instead of heal (Gen 3-4"); +TO_DO_BATTLE_TEST("Liquid Ooze causes Dream Eater users to lose HP instead of heal (Gen 5+"); diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c index 3ff4e80b4e..7287266e98 100644 --- a/test/battle/crit_chance.c +++ b/test/battle/crit_chance.c @@ -271,76 +271,3 @@ SINGLE_BATTLE_TEST("Crit Chance: Focus Energy increases critical hit ratio by tw MESSAGE("A critical hit!"); } } - -SINGLE_BATTLE_TEST("Crit Chance: Dragon Cheer fails in a single battle") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_DRAGON_CHEER); } - } SCENE { - MESSAGE("But it failed!"); - } -} - -DOUBLE_BATTLE_TEST("Crit Chance: Dragon Cheer increases critical hit ratio by one on non Dragon types") -{ - PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gMovesInfo[MOVE_TACKLE].criticalHitStage == 0); - ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_CHEER, target: playerRight); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_CHEER, playerLeft); - MESSAGE("Wynaut is getting pumped!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); - MESSAGE("A critical hit!"); - } -} - -DOUBLE_BATTLE_TEST("Crit Chance: Dragon Cheer increases critical hit ratio by two on Dragon types") -{ - PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); - GIVEN { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gMovesInfo[MOVE_TACKLE].criticalHitStage == 0); - ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_DRATINI); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_CHEER, target: playerRight); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_CHEER, playerLeft); - MESSAGE("Dratini is getting pumped!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); - MESSAGE("A critical hit!"); - } -} - -DOUBLE_BATTLE_TEST("Crit Chance: Dragon Cheer fails if critical hit stage was already increased by Focus Energy") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1); - ASSUME(gMovesInfo[MOVE_FOCUS_ENERGY].effect == EFFECT_FOCUS_ENERGY); - ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(playerLeft, MOVE_FOCUS_ENERGY); MOVE(playerRight, MOVE_DRAGON_CHEER, target: playerLeft); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, playerLeft); - MESSAGE("But it failed!"); - } -} diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 374b4d55d5..33199a77fe 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -102,22 +102,6 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves") } } -// can't be used at all in Raid, see "Documenting Dynamax" -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; - OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } - } WHEN { - TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } - } SCENE { - MESSAGE("The opposing Wobbuffet used Destiny Bond!"); - MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("The opposing Wobbuffet fainted!"); - NONE_OF { HP_BAR(player); } - } -} - SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") { GIVEN { @@ -362,24 +346,6 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon take double damage from Dynamax Cannon", s16 damage) -{ - u32 dynamax; - PARAMETRIZE { dynamax = GIMMICK_NONE; } - PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } - GIVEN { - ASSUME(gMovesInfo[MOVE_DYNAMAX_CANNON].effect == EFFECT_DYNAMAX_DOUBLE_DMG); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); MOVE(opponent, MOVE_DYNAMAX_CANNON); } - } SCENE { - HP_BAR(player, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); - } -} - SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves deal 1/4 damage through protect", s16 damage) { bool32 protected; diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index f06c970585..8c235cf07c 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -24,25 +24,6 @@ SINGLE_BATTLE_TEST("Absorb recovers 50% of the damage dealt") } } -SINGLE_BATTLE_TEST("Absorb deals 50% of the damage dealt to user agains Liquid Ooze") -{ - s16 damage; - s16 healed; - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } - } WHEN { - TURN { MOVE(player, MOVE_ABSORB); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); - HP_BAR(opponent, captureDamage: &damage); - HP_BAR(player, captureDamage: &healed); - MESSAGE("Wobbuffet sucked up the liquid ooze!"); - } THEN { - EXPECT_MUL_EQ(damage, Q_4_12(0.5), healed); - } -} - SINGLE_BATTLE_TEST("Absorb fails if Heal Block applies") { GIVEN { @@ -88,25 +69,6 @@ DOUBLE_BATTLE_TEST("Matcha Gatcha recovers 50% of the damage dealt from both tar } } -DOUBLE_BATTLE_TEST("Matcha Gatcha will faint the pokemon if Liquid Ooze drain deals enough damage") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_MATCHA_GOTCHA].effect == EFFECT_ABSORB); - PLAYER(SPECIES_WOBBUFFET) { HP(1); } - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(playerLeft, MOVE_MATCHA_GOTCHA); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_MATCHA_GOTCHA, playerLeft); - HP_BAR(opponentLeft); - HP_BAR(playerLeft); - MESSAGE("Wobbuffet sucked up the liquid ooze!"); - MESSAGE("Wobbuffet fainted!"); - } -} - SINGLE_BATTLE_TEST("Draining Kiss recovers 75% of the damage dealt") { s16 damage; diff --git a/test/battle/move_effect/baton_pass.c b/test/battle/move_effect/baton_pass.c index b6a27179f3..57f678470a 100644 --- a/test/battle/move_effect/baton_pass.c +++ b/test/battle/move_effect/baton_pass.c @@ -39,9 +39,6 @@ TO_DO_BATTLE_TEST("Baton Pass doesn't pass ability changes"); // TO_DO_BATTLE_TEST("Baton Pass passes confusion status"); // test/battle/status2/confusion.c -TO_DO_BATTLE_TEST("Baton Pass passes Cursed status"); // test/battle/move_effect/curse.c -TO_DO_BATTLE_TEST("Baton Pass doesn't pass Disable's effect"); // test/battle/move_effect/disable.c -TO_DO_BATTLE_TEST("Baton Pass passes Dragon Cheer's effect"); // test/battle/move_effect/dragon_cheer.c TO_DO_BATTLE_TEST("Baton Pass passes Fairy lock's escape prevention effect"); // test/battle/move_effect/fairy_lock.c TO_DO_BATTLE_TEST("Baton Pass passes Focus Energy's effect"); // test/battle/move_effect/focus_energy.c TO_DO_BATTLE_TEST("Baton Pass passes Heal Block's effect"); // test/battle/move_effect/heal_block.c diff --git a/test/battle/move_effect/curse.c b/test/battle/move_effect/curse.c index 0696dfc4ca..0269659b37 100644 --- a/test/battle/move_effect/curse.c +++ b/test/battle/move_effect/curse.c @@ -67,3 +67,5 @@ SINGLE_BATTLE_TEST("Curse applies to the opponent if user is afflicted by Trick- HP_BAR(opponent, damage: opponentMaxHP / 4); } } + +TO_DO_BATTLE_TEST("Baton Pass passes Cursed status"); diff --git a/test/battle/move_effect/dark_void.c b/test/battle/move_effect/dark_void.c new file mode 100644 index 0000000000..b7af9a58b2 --- /dev/null +++ b/test/battle/move_effect/dark_void.c @@ -0,0 +1,42 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_DARK_VOID].effect == EFFECT_DARK_VOID); +} + +SINGLE_BATTLE_TEST("Dark Void 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_DARKRAI); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DARK_VOID); MOVE(opponent, MOVE_CELEBRATE); } + for (count = 0; count < turns; ++count) + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DARK_VOID, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + MESSAGE("The opposing Wobbuffet fell asleep!"); + STATUS_ICON(opponent, sleep: TRUE); + for (count = 0; count < turns; ++count) + { + if (count < turns - 1) + MESSAGE("The opposing Wobbuffet is fast asleep."); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + } + MESSAGE("The opposing Wobbuffet woke up!"); + STATUS_ICON(opponent, none: TRUE); + } +} + +TO_DO_BATTLE_TEST("Dark Void can only be used by Darkrai (Gen7+)"); +TO_DO_BATTLE_TEST("Dark Void can be used by Pokémon other than Darkrai (Gen4-6)"); +TO_DO_BATTLE_TEST("Dark Void can be used by a Pokémon transformed into Darkrai"); diff --git a/test/battle/move_effect/decorate.c b/test/battle/move_effect/decorate.c new file mode 100644 index 0000000000..5eef9dc305 --- /dev/null +++ b/test/battle/move_effect/decorate.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Decorate raises the target's Attack by 2 stages"); +TO_DO_BATTLE_TEST("Decorate raises the target's Sp. Attack by 2 stages"); diff --git a/test/battle/move_effect/defense_curl.c b/test/battle/move_effect/defense_curl.c new file mode 100644 index 0000000000..da9acbbeda --- /dev/null +++ b/test/battle/move_effect/defense_curl.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_DEFENSE_CURL].effect == EFFECT_DEFENSE_CURL); +} + +SINGLE_BATTLE_TEST("Defense Curl raises Defense by 1 stage", s16 damage) +{ + bool32 raiseDefense; + PARAMETRIZE { raiseDefense = FALSE; } + PARAMETRIZE { raiseDefense = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseDefense) TURN { MOVE(player, MOVE_DEFENSE_CURL); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (raiseDefense) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFENSE_CURL, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Defense rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.5), results[0].damage); + } +} + +TO_DO_BATTLE_TEST("Defense Curl doubles the power of Rollout and Ice Ball"); +TO_DO_BATTLE_TEST("Defense Curl's effect cannot be stacked"); +TO_DO_BATTLE_TEST("Defense Curl's effect is removed when switching out"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Defense Curl's effect"); diff --git a/test/battle/move_effect/defense_down.c b/test/battle/move_effect/defense_down.c index 0552a9c67e..bda3a128d7 100644 --- a/test/battle/move_effect/defense_down.c +++ b/test/battle/move_effect/defense_down.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_TAIL_WHIP].effect == EFFECT_DEFENSE_DOWN); } -SINGLE_BATTLE_TEST("Tail Whip lowers Defense", s16 damage) +SINGLE_BATTLE_TEST("Tail Whip lowers Defense by 1 stage", s16 damage) { bool32 lowerDefense; PARAMETRIZE { lowerDefense = FALSE; } diff --git a/test/battle/move_effect/defense_down_2.c b/test/battle/move_effect/defense_down_2.c new file mode 100644 index 0000000000..121d638536 --- /dev/null +++ b/test/battle/move_effect/defense_down_2.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_SCREECH].effect == EFFECT_DEFENSE_DOWN_2); +} + +SINGLE_BATTLE_TEST("Screech lowers Defense by 2 stages", s16 damage) +{ + bool32 lowerDefense; + PARAMETRIZE { lowerDefense = FALSE; } + PARAMETRIZE { lowerDefense = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (lowerDefense) TURN { MOVE(player, MOVE_SCREECH); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (lowerDefense) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Wobbuffet's Defense harshly fell!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} diff --git a/test/battle/move_effect/defense_up.c b/test/battle/move_effect/defense_up.c index 513d6e1c29..9840760254 100644 --- a/test/battle/move_effect/defense_up.c +++ b/test/battle/move_effect/defense_up.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_HARDEN].effect == EFFECT_DEFENSE_UP); } -SINGLE_BATTLE_TEST("Harden raises Defense", s16 damage) +SINGLE_BATTLE_TEST("Harden raises Defense by 1 stage", s16 damage) { bool32 raiseDefense; PARAMETRIZE { raiseDefense = FALSE; } diff --git a/test/battle/move_effect/defense_up_2.c b/test/battle/move_effect/defense_up_2.c new file mode 100644 index 0000000000..18fbac53d6 --- /dev/null +++ b/test/battle/move_effect/defense_up_2.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_IRON_DEFENSE].effect == EFFECT_DEFENSE_UP_2); +} + +SINGLE_BATTLE_TEST("Iron Defense raises Defense by 2 stages", s16 damage) +{ + bool32 raiseDefense; + PARAMETRIZE { raiseDefense = FALSE; } + PARAMETRIZE { raiseDefense = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseDefense) TURN { MOVE(player, MOVE_IRON_DEFENSE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (raiseDefense) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_IRON_DEFENSE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Defense sharply rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(2.0), results[0].damage); + } +} diff --git a/test/battle/move_effect/defense_up_3.c b/test/battle/move_effect/defense_up_3.c new file mode 100644 index 0000000000..983bbb2446 --- /dev/null +++ b/test/battle/move_effect/defense_up_3.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_COTTON_GUARD].effect == EFFECT_DEFENSE_UP_3); +} + +SINGLE_BATTLE_TEST("Cotton Guard raises Defense by 3 stages", s16 damage) +{ + bool32 raiseDefense; + PARAMETRIZE { raiseDefense = FALSE; } + PARAMETRIZE { raiseDefense = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseDefense) TURN { MOVE(player, MOVE_COTTON_GUARD); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (raiseDefense) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COTTON_GUARD, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Defense drastically rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(2.5), results[0].damage); + } +} diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index d5838d7ffd..a429da4511 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -19,7 +19,7 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_GUST].category == DAMAGE_CATEGORY_SPECIAL); } -SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1") +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 stage") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -51,7 +51,8 @@ SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute } } -DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light Screen from opponent's side", s16 damagePhysical, s16 damageSpecial) +TO_DO_BATTLE_TEST("Defog doesn't remove Reflect or Light Screen from the user's side"); +DOUBLE_BATTLE_TEST("Defog removes Reflect and Light Screen from target's side", s16 damagePhysical, s16 damageSpecial) { u16 move; @@ -71,8 +72,6 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponentRight); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("The opposing Wobbuffet's evasiveness fell!"); MESSAGE("The opposing team's Reflect wore off!"); MESSAGE("The opposing team's Light Screen wore off!"); } @@ -86,7 +85,8 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light } } -DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard from opponent's side") +TO_DO_BATTLE_TEST("Defog doesn't remove Mist or Safeguard from the user's side"); +DOUBLE_BATTLE_TEST("Defog removes Mist and Safeguard from target's side") { u16 move; @@ -105,7 +105,6 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("The opposing Wobbuffet is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); MESSAGE("The opposing team's Mist wore off!"); MESSAGE("The opposing team's Safeguard wore off!"); @@ -131,7 +130,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard } } -DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side (Gen 6+)") +TO_DO_BATTLE_TEST("Defog removes Stealth Rock and Sticky Web from target's side"); +TO_DO_BATTLE_TEST("Defog doesn't remove Stealth Rock or Sticky Web from user's side (Gen 4-5)"); +DOUBLE_BATTLE_TEST("Defog removes Stealth Rock and Sticky Web from user's side (Gen 6+)") { u16 move; @@ -151,13 +152,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentRight); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - if (move == MOVE_DEFOG) { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("The opposing Wobbuffet's evasiveness fell!"); - if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); - } + if (move == MOVE_DEFOG && B_DEFOG_EFFECT_CLEARING >= GEN_6) { + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); } // Switch happens SWITCH_OUT_MESSAGE("Wobbuffet"); @@ -181,7 +178,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S } } -SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player's side") +TO_DO_BATTLE_TEST("Defog removes Spikes from target's side"); +TO_DO_BATTLE_TEST("Defog doesn't remove Spikes from user's side (Gen 4-5)"); +SINGLE_BATTLE_TEST("Defog removes Spikes from user's side (Gen 6+)") { u16 move; @@ -197,12 +196,8 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, opponent); ANIMATION(ANIM_TYPE_MOVE, move, player); - if (move == MOVE_DEFOG) { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Wobbuffet's evasiveness fell!"); - if (B_DEFOG_EFFECT_CLEARING >= GEN_6) - MESSAGE("The spikes disappeared from the ground around your team!"); - } + if (move == MOVE_DEFOG && B_DEFOG_EFFECT_CLEARING >= GEN_6) + MESSAGE("The spikes disappeared from the ground around your team!"); // Switch happens SWITCH_OUT_MESSAGE("Wobbuffet"); SEND_IN_MESSAGE("Wobbuffet"); @@ -219,7 +214,8 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player } } -SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") +TO_DO_BATTLE_TEST("Defog doesn't remove terrain (Gen 4-7)"); +SINGLE_BATTLE_TEST("Defog removes terrain (Gen 8+)") { u16 move; @@ -235,8 +231,6 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponent); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's evasiveness fell!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_8) { if (move == MOVE_PSYCHIC_TERRAIN) { MESSAGE("The weirdness disappeared from the battlefield!"); @@ -263,7 +257,9 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") } } -SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from opponent's side") +TO_DO_BATTLE_TEST("Defog removes Toxic Spikes from target's side"); +TO_DO_BATTLE_TEST("Defog doesn't remove Toxic Spikes from user's side (Gen 4-5)"); +SINGLE_BATTLE_TEST("Defog removes Toxic Spikes from user's side (Gen 6+)") { u16 move; @@ -279,12 +275,8 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); ANIMATION(ANIM_TYPE_MOVE, move, opponent); - if (move == MOVE_DEFOG) { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's evasiveness fell!"); - if (B_DEFOG_EFFECT_CLEARING >= GEN_6) - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); - } + if (move == MOVE_DEFOG && B_DEFOG_EFFECT_CLEARING >= GEN_6) + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); // Switch happens MESSAGE("2 sent out Wobbuffet!"); if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { @@ -302,7 +294,8 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from } } -DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from player's side", s16 damagePhysical, s16 damageSpecial) +TO_DO_BATTLE_TEST("Defog doesn't remove Aurora Veil from the user's side"); +DOUBLE_BATTLE_TEST("Defog removes Aurora Veil from target's side", s16 damagePhysical, s16 damageSpecial) { u16 move; @@ -338,7 +331,7 @@ 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") +DOUBLE_BATTLE_TEST("Defog removes everything it can") { GIVEN { ASSUME(gMovesInfo[MOVE_HAIL].effect == EFFECT_HAIL); diff --git a/test/battle/move_effect/destiny_bond.c b/test/battle/move_effect/destiny_bond.c index ba49e0ec43..b8ce84f759 100644 --- a/test/battle/move_effect/destiny_bond.c +++ b/test/battle/move_effect/destiny_bond.c @@ -15,3 +15,34 @@ SINGLE_BATTLE_TEST("Destiny Bond faints the opposing mon if it fainted from the MESSAGE("The opposing Wobbuffet fainted!"); } } + +TO_DO_BATTLE_TEST("Destiny Bond's effect disappears if the user takes a new turn - Move"); +TO_DO_BATTLE_TEST("Destiny Bond's effect disappears if the user takes a new turn - Sleep"); +TO_DO_BATTLE_TEST("Destiny Bond's effect disappears if the user takes a new turn - Paralysis"); +TO_DO_BATTLE_TEST("Destiny Bond's effect disappears if the user takes a new turn - Flinching"); +TO_DO_BATTLE_TEST("Destiny Bond's effect doesn't trigger on indirect damage - Sandstorm"); +TO_DO_BATTLE_TEST("Destiny Bond's effect doesn't trigger on indirect damage - Leech Seed"); +TO_DO_BATTLE_TEST("Destiny Bond's effect doesn't trigger on indirect damage - Future Sight"); +TO_DO_BATTLE_TEST("Destiny Bond's effect bypasses Focus Sash"); +TO_DO_BATTLE_TEST("Destiny Bond's effect bypasses Sturdy"); +TO_DO_BATTLE_TEST("Destiny Bond's effect bypasses Magic Guard"); +TO_DO_BATTLE_TEST("Destiny Bond's effect can trigger on the next turn if the user hasn't moved yet"); +TO_DO_BATTLE_TEST("Destiny Bond can be used multiple times in a row (Gen 2-6)"); +TO_DO_BATTLE_TEST("Destiny Bond always fails if it was successfully used the previous turn (Gen 7+)"); +TO_DO_BATTLE_TEST("Destiny Bond cannot be used in Raids"); + +// can't be used at all in Raid, see "Documenting Dynamax" +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } + } WHEN { + TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } + } SCENE { + MESSAGE("The opposing Wobbuffet used Destiny Bond!"); + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("The opposing Wobbuffet fainted!"); + NONE_OF { HP_BAR(player); } + } +} diff --git a/test/battle/move_effect/disable.c b/test/battle/move_effect/disable.c new file mode 100644 index 0000000000..9864b360e2 --- /dev/null +++ b/test/battle/move_effect/disable.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Disable prevents the target from using a random move (Gen 1)"); +TO_DO_BATTLE_TEST("Disable prevents the target from using the last move used (Gen 2+)"); +TO_DO_BATTLE_TEST("Disable fails if one of the target's moves is already disabled"); +TO_DO_BATTLE_TEST("Disable fails if the target haven't used a move yet (Gen 2+)"); +TO_DO_BATTLE_TEST("Disable fails if the last move used was Struggle (Gen 2+)"); +TO_DO_BATTLE_TEST("Disable fails if the last move used was a Max Move"); +TO_DO_BATTLE_TEST("Disabled moves can still be used via Sleep Talk"); +TO_DO_BATTLE_TEST("Disabled moves can still be used via Metronome"); +TO_DO_BATTLE_TEST("Disabled moves can still be used via Mirror Move"); +TO_DO_BATTLE_TEST("Disable lasts 0-7 turns (Gen 1)"); +TO_DO_BATTLE_TEST("Disable lasts 2-8 turns (Gen 2)"); +TO_DO_BATTLE_TEST("Disable lasts 2-5 turns (Gen 3)"); +TO_DO_BATTLE_TEST("Disable lasts 4-7 turns (Gen 4)"); +TO_DO_BATTLE_TEST("Disable lasts 4 turns (Gen 5+)"); +TO_DO_BATTLE_TEST("Disable's timer only counts down when trying to use a move (Gen 1-2)"); +TO_DO_BATTLE_TEST("Disable's timer counts down regardless of the action (Gen 3+)"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Disable's effect"); diff --git a/test/battle/move_effect/do_nothing.c b/test/battle/move_effect/do_nothing.c new file mode 100644 index 0000000000..60ff198b52 --- /dev/null +++ b/test/battle/move_effect/do_nothing.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Splash does nothing"); diff --git a/test/battle/move_effect_secondary/double_power_on_arg_status.c b/test/battle/move_effect/double_power_on_arg_status.c similarity index 100% rename from test/battle/move_effect_secondary/double_power_on_arg_status.c rename to test/battle/move_effect/double_power_on_arg_status.c diff --git a/test/battle/move_effect/dragon_cheer.c b/test/battle/move_effect/dragon_cheer.c new file mode 100644 index 0000000000..e02dd84dd2 --- /dev/null +++ b/test/battle/move_effect/dragon_cheer.c @@ -0,0 +1,77 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Dragon Cheer fails in a single battle") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_CHEER); } + } SCENE { + MESSAGE("But it failed!"); + } +} + +DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by one on non-Dragon types") +{ + PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); + ASSUME(gMovesInfo[MOVE_TACKLE].criticalHitStage == 0); + ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DRAGON_CHEER, target: playerRight); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_CHEER, playerLeft); + MESSAGE("Wynaut is getting pumped!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + MESSAGE("A critical hit!"); + } +} + +DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by two on Dragon types") +{ + PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT); + GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); + ASSUME(gMovesInfo[MOVE_TACKLE].criticalHitStage == 0); + ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_DRATINI); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DRAGON_CHEER, target: playerRight); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_CHEER, playerLeft); + MESSAGE("Dratini is getting pumped!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + MESSAGE("A critical hit!"); + } +} + +DOUBLE_BATTLE_TEST("Dragon Cheer fails if critical hit stage was already increased by Focus Energy") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1); + ASSUME(gMovesInfo[MOVE_FOCUS_ENERGY].effect == EFFECT_FOCUS_ENERGY); + ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FOCUS_ENERGY); MOVE(playerRight, MOVE_DRAGON_CHEER, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, playerLeft); + MESSAGE("But it failed!"); + } +} + +TO_DO_BATTLE_TEST("Baton Pass passes Dragon Cheer's effect"); diff --git a/test/battle/move_effect/dragon_dance.c b/test/battle/move_effect/dragon_dance.c new file mode 100644 index 0000000000..52587cc098 --- /dev/null +++ b/test/battle/move_effect/dragon_dance.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Dragon Dance increases Attack and Speed by one stage each"); diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c index dfe629896f..336d9cd1a5 100644 --- a/test/battle/move_effect/dragon_darts.c +++ b/test/battle/move_effect/dragon_darts.c @@ -23,156 +23,134 @@ SINGLE_BATTLE_TEST("Dragon Darts strikes twice") DOUBLE_BATTLE_TEST("Dragon Darts strikes each opponent once in a double battle") { + struct BattlePokemon *chosenTarget = NULL; + struct BattlePokemon *secondaryTarget = NULL; + PARAMETRIZE { chosenTarget = opponentLeft; secondaryTarget = opponentRight; } + PARAMETRIZE { chosenTarget = opponentRight; secondaryTarget = opponentLeft; } + GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentLeft); + HP_BAR(chosenTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(secondaryTarget); MESSAGE("The Pokémon was hit 2 time(s)!"); } } DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target protects") { + struct BattlePokemon *chosenTarget = NULL; + struct BattlePokemon *secondaryTarget = NULL; + PARAMETRIZE { chosenTarget = opponentLeft; secondaryTarget = opponentRight; } + PARAMETRIZE { chosenTarget = opponentRight; secondaryTarget = opponentLeft; } GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponentLeft, MOVE_PROTECT); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); } + TURN { MOVE(chosenTarget, MOVE_PROTECT); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, chosenTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(secondaryTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(secondaryTarget); MESSAGE("The Pokémon was hit 2 time(s)!"); } } -DOUBLE_BATTLE_TEST("Dragon Darts strikes the right ally twice if the target is a fairy type") +DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if the other one is Fairy-type") { + struct BattlePokemon *chosenTarget = NULL; + struct BattlePokemon *finalTarget = NULL; + u32 speciesLeft, speciesRight; + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentRight; speciesLeft = SPECIES_CLEFAIRY; speciesRight = SPECIES_WOBBUFFET; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentRight; speciesLeft = SPECIES_CLEFAIRY; speciesRight = SPECIES_WOBBUFFET; } + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentLeft; speciesLeft = SPECIES_WOBBUFFET; speciesRight = SPECIES_CLEFAIRY; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentLeft; speciesLeft = SPECIES_WOBBUFFET; speciesRight = SPECIES_CLEFAIRY; } GIVEN { + ASSUME(gSpeciesInfo[SPECIES_CLEFAIRY].types[0] == TYPE_FAIRY || gSpeciesInfo[SPECIES_CLEFAIRY].types[1] == TYPE_FAIRY); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_CLEFAIRY); - OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(speciesLeft); + OPPONENT(speciesRight); } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(finalTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(finalTarget); MESSAGE("The Pokémon was hit 2 time(s)!"); } } -DOUBLE_BATTLE_TEST("Dragon Darts strikes the left ally twice if the target is a fairy type") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_CLEFAIRY); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); - MESSAGE("The Pokémon was hit 2 time(s)!"); - } -} - -DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if electrified and right ally has Volt Absorb") +DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if electrified and the other one has Volt Absorb") { + struct BattlePokemon *chosenTarget = NULL; + struct BattlePokemon *finalTarget = NULL; + u32 abilityLeft, abilityRight; + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentLeft; abilityLeft = ABILITY_WATER_ABSORB; abilityRight = ABILITY_VOLT_ABSORB; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentLeft; abilityLeft = ABILITY_WATER_ABSORB; abilityRight = ABILITY_VOLT_ABSORB; } + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentRight; abilityLeft = ABILITY_VOLT_ABSORB; abilityRight = ABILITY_WATER_ABSORB; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentRight; abilityLeft = ABILITY_VOLT_ABSORB; abilityRight = ABILITY_WATER_ABSORB; } GIVEN { ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }; + OPPONENT(SPECIES_LANTURN) { Ability(abilityLeft); }; + OPPONENT(SPECIES_LANTURN) { Ability(abilityRight); }; } WHEN { - TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } + TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentLeft); + HP_BAR(finalTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentLeft); + HP_BAR(finalTarget); MESSAGE("The Pokémon was hit 2 time(s)!"); } } -DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if electrified and left ally has Volt Absorb") +DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if electrified and the other one has Motor Drive") { + struct BattlePokemon *chosenTarget = NULL; + struct BattlePokemon *finalTarget = NULL; + u32 abilityLeft, abilityRight; + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentLeft; abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_MOTOR_DRIVE; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentLeft; abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_MOTOR_DRIVE; } + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentRight; abilityLeft = ABILITY_MOTOR_DRIVE; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentRight; abilityLeft = ABILITY_MOTOR_DRIVE; abilityRight = ABILITY_VITAL_SPIRIT; } GIVEN { ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }; - OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityLeft); }; + OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityRight); }; } WHEN { - TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } + TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(finalTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(finalTarget); MESSAGE("The Pokémon was hit 2 time(s)!"); } } -DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if electrified and right ally has Motor Drive") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_ELECTIVIRE) { Ability(ABILITY_MOTOR_DRIVE); }; - } WHEN { - TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentLeft); - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentLeft); - MESSAGE("The Pokémon was hit 2 time(s)!"); - } -} - -DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if electrified and left ally has Motor Drive") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_ELECTIVIRE) { Ability(ABILITY_MOTOR_DRIVE); }; - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); - ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); - MESSAGE("The Pokémon was hit 2 time(s)!"); - } -} - - -DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target is in a semi-invulnerable turn") +DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if the other one is in a semi-invulnerable turn") { + struct BattlePokemon *chosenTarget = NULL; + struct BattlePokemon *finalTarget = NULL; + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentRight; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentLeft; } GIVEN { ASSUME(gMovesInfo[MOVE_FLY].effect == EFFECT_SEMI_INVULNERABLE); PLAYER(SPECIES_WOBBUFFET); @@ -180,13 +158,13 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target is in a se OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponentLeft, MOVE_FLY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); } + TURN { MOVE(chosenTarget, MOVE_FLY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_FLY, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLY, chosenTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(finalTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(finalTarget); MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -210,39 +188,49 @@ DOUBLE_BATTLE_TEST("Dragon Darts is not effected by Wide Guard") } } -DOUBLE_BATTLE_TEST("Dragon Darts strikes hit the ally if the target fainted") +DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if the other one is fainted") { + struct BattlePokemon *chosenTarget = NULL; + struct BattlePokemon *finalTarget = NULL; + u32 hpLeft, hpRight; + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentRight; hpLeft = 1; hpRight = 101; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentLeft; hpLeft = 101; hpRight = 1; } GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1); } - OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(hpLeft); } + OPPONENT(SPECIES_WOBBUFFET) { HP(hpRight); } } WHEN { - TURN { MOVE(playerRight, MOVE_SONIC_BOOM, target: opponentLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); } + TURN { MOVE(playerRight, MOVE_SONIC_BOOM, target: chosenTarget); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SONIC_BOOM, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(finalTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentRight); + HP_BAR(finalTarget); MESSAGE("The Pokémon was hit 2 time(s)!"); } } DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if one strike misses") { + struct BattlePokemon *chosenTarget = NULL; + struct BattlePokemon *finalTarget = NULL; + u32 itemLeft, itemRight; + PARAMETRIZE { chosenTarget = opponentLeft; finalTarget = opponentRight; itemLeft = ITEM_BRIGHT_POWDER; itemRight = ITEM_NONE; } + PARAMETRIZE { chosenTarget = opponentRight; finalTarget = opponentLeft; itemLeft = ITEM_NONE; itemRight = ITEM_BRIGHT_POWDER; } GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(itemLeft); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(itemRight); }; } WHEN { - TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight, hit: FALSE); } + TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget, hit: FALSE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentLeft); + HP_BAR(finalTarget); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); - HP_BAR(opponentLeft); + HP_BAR(finalTarget); MESSAGE("The Pokémon was hit 2 time(s)!"); } } diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c index 7dfa6525d9..85bdb42ac9 100644 --- a/test/battle/move_effect/dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -54,3 +54,7 @@ SINGLE_BATTLE_TEST("Dream Eater fails if Heal Block applies") } } } + +TO_DO_BATTLE_TEST("Dream Eater works on targets with Comatose"); +TO_DO_BATTLE_TEST("Dream Eater fails if the target is behind a Substitute (Gen 1-4)"); +TO_DO_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen 5+)"); diff --git a/test/battle/move_effect/dynamax_double_dmg.c b/test/battle/move_effect/dynamax_double_dmg.c new file mode 100644 index 0000000000..593f969862 --- /dev/null +++ b/test/battle/move_effect/dynamax_double_dmg.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Dynamax Cannon causes double damage to Dynamaxed Pokemon", s16 damage) +{ + u32 dynamax; + PARAMETRIZE { dynamax = GIMMICK_NONE; } + PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; } + GIVEN { + ASSUME(gMovesInfo[MOVE_DYNAMAX_CANNON].effect == EFFECT_DYNAMAX_DOUBLE_DMG); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); MOVE(opponent, MOVE_DYNAMAX_CANNON); } + } SCENE { + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage); + } +} diff --git a/test/battle/move_effect/leech_seed.c b/test/battle/move_effect/leech_seed.c index 67e829cf8a..1ed050a2e0 100644 --- a/test/battle/move_effect/leech_seed.c +++ b/test/battle/move_effect/leech_seed.c @@ -58,25 +58,6 @@ SINGLE_BATTLE_TEST("Leech Seed recovery is prevented by Heal Block") } } -SINGLE_BATTLE_TEST("Leech Seed recovery will drain the hp of user if leech seeded mon has Liquid Ooze") -{ - s16 damage; - s16 healed; - - GIVEN { - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_TENTACOOL) { Ability(ABILITY_LIQUID_OOZE); } - } WHEN { - TURN { MOVE(player, MOVE_LEECH_SEED); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); - HP_BAR(opponent, captureDamage: &damage); - HP_BAR(player, captureDamage: &healed); - } THEN { - EXPECT_EQ(damage, healed); - } -} - TO_DO_BATTLE_TEST("Leech Seed doesn't affect already seeded targets") TO_DO_BATTLE_TEST("Leech Seed's effect is paused until a new battler replaces the original user's position") // Faint, can't be replaced, then revived. TO_DO_BATTLE_TEST("Leech Seed's effect pause still prevents it from being seeded again") diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c index 0246d0881f..813b2abfb2 100644 --- a/test/battle/move_effect/strength_sap.c +++ b/test/battle/move_effect/strength_sap.c @@ -165,34 +165,3 @@ SINGLE_BATTLE_TEST("Strength Sap restores more HP if Big Root is held", s16 hp) EXPECT_GT(abs(results[1].hp), abs(results[0].hp)); } } - -SINGLE_BATTLE_TEST("Strength Sap makes attacker lose HP if target's ability is Liquid Ooze") -{ - s16 lostHp; - s32 atkStat; - - PARAMETRIZE { atkStat = 100; } - PARAMETRIZE { atkStat = 490; } // Checks that attacker can faint with no problems. - - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Attack(atkStat); Ability(ABILITY_LIQUID_OOZE); } - } WHEN { - TURN { MOVE(player, MOVE_STRENGTH_SAP); if (atkStat == 490) { SEND_OUT(player, 1); } } - } SCENE { - MESSAGE("Wobbuffet used Strength Sap!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Wobbuffet's Attack fell!"); - ABILITY_POPUP(opponent, ABILITY_LIQUID_OOZE); - HP_BAR(player, captureDamage: &lostHp); - MESSAGE("Wobbuffet sucked up the liquid ooze!"); - if (atkStat >= 490) { - MESSAGE("Wobbuffet fainted!"); - SEND_IN_MESSAGE("Wobbuffet"); - } - } THEN { - EXPECT_EQ(lostHp, atkStat); - } -} From ca31145d36734e8c0d5c7fc26d78b47e951f708f Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sun, 29 Dec 2024 10:51:33 -0500 Subject: [PATCH 516/544] Fix Salt Cure script (#5895) Co-authored-by: ghoulslash --- data/battle_scripts_1.s | 11 +++-------- test/battle/move_effect/salt_cure.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 752c352022..dba914924d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -407,13 +407,13 @@ BattleScript_SaltCureExtraDamage:: call BattleScript_HurtTarget_NoString printstring STRINGID_TARGETISHURTBYSALTCURE waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET end2 BattleScript_HurtTarget_NoString: orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_TARGET datahpupdate BS_TARGET - tryfaintmon BS_TARGET return BattleScript_EffectCorrosiveGas:: @@ -7582,13 +7582,8 @@ BattleScript_AbilityPopUp: return BattleScript_AbilityPopUpScripting: - .if B_ABILITY_POP_UP == TRUE - showabilitypopup BS_SCRIPTING - pause 40 - .endif - recordability BS_SCRIPTING - sethword sABILITY_OVERWRITE, 0 - return + copybyte gBattlerAbility, sBATTLER + goto BattleScript_AbilityPopUp BattleScript_AbilityPopUpOverwriteThenNormal: setbyte sFIXED_ABILITY_POPUP, TRUE diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index afe811da50..94e3ead5cc 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -117,3 +117,18 @@ SINGLE_BATTLE_TEST("Salt Cure residual damage does not inflict any damage agains } } } + +SINGLE_BATTLE_TEST("If Salt Cure faints the target, messages will be applied in the correct order") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(25); } + } WHEN { + TURN { MOVE(player, MOVE_SALT_CURE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); + MESSAGE("The opposing Wobbuffet is being salt cured!"); + MESSAGE("The opposing Wobbuffet is hurt by Salt Cure!"); + MESSAGE("The opposing Wobbuffet fainted!"); + } +} From 49ab12aab98dd5ed62805c7d15775d04e2715277 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Dec 2024 13:30:39 -0300 Subject: [PATCH 517/544] Backport changes from the wiki (#5900) --- docs/tutorials/how_to_new_pokemon_1_10_0.md | 18 ++++++++++++++++++ docs/tutorials/how_to_new_pokemon_1_9_0.md | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/docs/tutorials/how_to_new_pokemon_1_10_0.md b/docs/tutorials/how_to_new_pokemon_1_10_0.md index f6eaedee99..4d836fc7d3 100644 --- a/docs/tutorials/how_to_new_pokemon_1_10_0.md +++ b/docs/tutorials/how_to_new_pokemon_1_10_0.md @@ -858,6 +858,24 @@ static const u16 sPecharuntTeachableLearnset[] = { #endif ``` +_NOTE: At the top of this file, you will probably see this warning:_ +``` +// +// DO NOT MODIFY THIS FILE! It is auto-generated from tools/learnset_helpers/teachable.py` +// +``` +The expansion includes a tool called the learnset helper, which aims to automate the generation of valid teachable moves. At the time of writing, this tool only supports generating TM and Tutor learnsets. However, in the future it may be expanded to deal with level up learnsets and egg moves. + +Ignore the warning shown above the first time you're adding your teachable moves (as otherwise the compiler will complain about the array not existing), but in the future (if you're using the learnset helper) simply edit what teachable moves your Pokémon can learn in one of the JSON files found in `tools/learnset_helpers/porymoves_files`. It doesn't really matter which one you add your new Pokémon to, as the tool pulls from all of the files in this folder. + +The learnset helper is useful if you plan on changing and/or increasing the available TMs and Tutor moves in your game. As an example, Bulbasaur learns Rage by TM in Red/Blue/Yellow, but in Emerald this TM does not exist. But since `tools/learnset_helpers/porymoves_files/rby.json` defines "MOVE_RAGE" as a TM move for Bulbasaur, that move would automatically be added to the `sBulbasaurTeachableLearnset` array if you were to add a Rage TM at any point. + +The learnset helper can be toggled on/off in `include/config/pokemon.h`: +``` +// Learnset helper toggles +#define P_LEARNSET_HELPER_TEACHABLE TRUE // If TRUE, teachable_learnsets.h will be populated by tools/learnset_helpers/teachable.py using the included JSON files based on available TMs and tutors. +``` + Once more, we need to register the learnset in `gSpeciesInfo`: ```diff diff --git a/docs/tutorials/how_to_new_pokemon_1_9_0.md b/docs/tutorials/how_to_new_pokemon_1_9_0.md index e64f8e6e66..aad3332873 100644 --- a/docs/tutorials/how_to_new_pokemon_1_9_0.md +++ b/docs/tutorials/how_to_new_pokemon_1_9_0.md @@ -839,6 +839,24 @@ static const u16 sPecharuntTeachableLearnset[] = { #endif ``` +_NOTE: At the top of this file, you will probably see this warning:_ +``` +// +// DO NOT MODIFY THIS FILE! It is auto-generated from tools/learnset_helpers/teachable.py` +// +``` +The expansion includes a tool called the learnset helper, which aims to automate the generation of valid teachable moves. At the time of writing, this tool only supports generating TM and Tutor learnsets. However, in the future it may be expanded to deal with level up learnsets and egg moves. + +Ignore the warning shown above the first time you're adding your teachable moves (as otherwise the compiler will complain about the array not existing), but in the future (if you're using the learnset helper) simply edit what teachable moves your Pokémon can learn in one of the JSON files found in `tools/learnset_helpers/porymoves_files`. It doesn't really matter which one you add your new Pokémon to, as the tool pulls from all of the files in this folder. + +The learnset helper is useful if you plan on changing and/or increasing the available TMs and Tutor moves in your game. As an example, Bulbasaur learns Rage by TM in Red/Blue/Yellow, but in Emerald this TM does not exist. But since `tools/learnset_helpers/porymoves_files/rby.json` defines "MOVE_RAGE" as a TM move for Bulbasaur, that move would automatically be added to the `sBulbasaurTeachableLearnset` array if you were to add a Rage TM at any point. + +The learnset helper can be toggled on/off in `include/config/pokemon.h`: +``` +// Learnset helper toggles +#define P_LEARNSET_HELPER_TEACHABLE TRUE // If TRUE, teachable_learnsets.h will be populated by tools/learnset_helpers/teachable.py using the included JSON files based on available TMs and tutors. +``` + Once more, we need to register the learnset in `gSpeciesInfo`: ```diff From 1bd1e934f1ee7f52bbf01419085e5a433a8e6534 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Dec 2024 13:52:35 -0300 Subject: [PATCH 518/544] Comment out Ally Switch Illusion test (#5901) --- test/battle/move_effect/ally_switch.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index dee29a58e0..cd5a347d68 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -277,6 +277,8 @@ DOUBLE_BATTLE_TEST("Ally switch swaps opposing sky drop targets if partner is be } } +// Test passes in isolation but fails on CI +/* DOUBLE_BATTLE_TEST("Ally Switch swaps Illusion data") { GIVEN { @@ -292,6 +294,7 @@ DOUBLE_BATTLE_TEST("Ally Switch swaps Illusion data") EXPECT(&gPlayerParty[2] == gBattleStruct->illusion[0].mon); } } +*/ // Triple Battles required to test //TO_DO_BATTLE_TEST("Ally Switch fails if the user is in the middle of the field in a Triple Battle"); From a10f63e317dbcb1b520c5216e5936c873b87e18b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Dec 2024 14:18:40 -0300 Subject: [PATCH 519/544] Fixed leaking tasks not showing up in summary (#5890) --- test/test_runner.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_runner.c b/test/test_runner.c index d3196a20e1..4715c19189 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -276,7 +276,7 @@ top: { if (gTasks[i].isActive) { - Test_MgbaPrintf("%p: task not freed", gTasks[i].func); + Test_MgbaPrintf(":L%s:%d - %p: task not freed", gTestRunnerState.test->filename, SourceLine(0), gTasks[i].func); gTestRunnerState.result = TEST_RESULT_FAIL; } } From e64da065e8016643d21c2fe95897c57d2a951e71 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 29 Dec 2024 22:24:09 +0100 Subject: [PATCH 520/544] Fixes Eject Pack / Intimidate issue (#5902) --- src/battle_util.c | 12 ++++++++++++ test/battle/hold_effect/eject_pack.c | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/battle_util.c b/src/battle_util.c index 1e0341f337..a9956615a1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8322,6 +8322,18 @@ u32 ItemBattleEffects(enum ItemEffect caseID, u32 battler, bool32 moveTurn) gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; } break; + case HOLD_EFFECT_EJECT_PACK: + if (gProtectStructs[battler].statFell + && gProtectStructs[battler].disableEjectPack == 0 + && CountUsablePartyMons(battler) > 0) + { + gBattleScripting.battler = battler; + gPotentialItemEffectBattler = battler; + effect = ITEM_STATS_CHANGE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_EjectPackActivates; + } + break; } break; } diff --git a/test/battle/hold_effect/eject_pack.c b/test/battle/hold_effect/eject_pack.c index 9272a23a7c..b3a2d34b63 100644 --- a/test/battle/hold_effect/eject_pack.c +++ b/test/battle/hold_effect/eject_pack.c @@ -85,3 +85,19 @@ SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Emergency EXPECT(opponent->species == SPECIES_WYNAUT); } } + +SINGLE_BATTLE_TEST("Eject Pack activates once intimidate mon switches in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { SWITCH(opponent, 1); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet is switched out with the Eject Pack!"); + } +} From 009de5c98cb83d6f2b63d65880ffd2a19cdd01ee Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Dec 2024 19:28:39 -0300 Subject: [PATCH 521/544] Setting Battle configs during tests (#5803) Co-authored-by: sbird --- Makefile | 2 ++ include/constants/generational_changes.h | 10 ++++++ include/generational_changes.h | 41 ++++++++++++++++++++++++ include/test/battle.h | 13 ++++++++ src/battle_main.c | 3 +- src/generational_changes.c | 19 +++++++++++ test/battle/ability/gale_wings.c | 16 ++++----- test/test_runner_battle.c | 8 +++++ 8 files changed, 103 insertions(+), 9 deletions(-) create mode 100644 include/constants/generational_changes.h create mode 100644 include/generational_changes.h create mode 100644 src/generational_changes.c diff --git a/Makefile b/Makefile index 71d2a48af9..656b0847dd 100644 --- a/Makefile +++ b/Makefile @@ -350,6 +350,8 @@ $(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi # Annoyingly we can't turn this on just for src/data/trainers.h $(C_BUILDDIR)/data.o: CFLAGS += -fno-show-column -fno-diagnostics-show-caret +$(TEST_BUILDDIR)/%.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init + # Dependency rules (for the *.c & *.s sources to .o files) # Have to be explicit or else missing files won't be reported. diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h new file mode 100644 index 0000000000..557b34b653 --- /dev/null +++ b/include/constants/generational_changes.h @@ -0,0 +1,10 @@ +#ifndef GUARD_CONSTANTS_GENERATIONAL_CHANGES_H +#define GUARD_CONSTANTS_GENERATIONAL_CHANGES_H + +enum GenConfigTag +{ + GEN_CONFIG_GALE_WINGS, + GEN_CONFIG_COUNT +}; + +#endif // GUARD_CONSTANTS_GENERATIONAL_CHANGES_H diff --git a/include/generational_changes.h b/include/generational_changes.h new file mode 100644 index 0000000000..5a726007c3 --- /dev/null +++ b/include/generational_changes.h @@ -0,0 +1,41 @@ +#ifndef GUARD_GENERATIONAL_CHANGES_H +#define GUARD_GENERATIONAL_CHANGES_H + +#include "constants/generational_changes.h" +#include "config/battle.h" + +static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] = +{ + [GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS, +}; + +#if TESTING +extern u8 *gGenerationalChangesTestOverride; +#endif + +static inline u32 GetGenConfig(enum GenConfigTag configTag) +{ + if (configTag >= GEN_CONFIG_COUNT) return GEN_LATEST; +#if TESTING + if (gGenerationalChangesTestOverride == NULL) return sGenerationalChanges[configTag]; + return gGenerationalChangesTestOverride[configTag]; +#else + return sGenerationalChanges[configTag]; +#endif +} + +static inline void SetGenConfig(enum GenConfigTag configTag, u32 value) +{ +#if TESTING + if (configTag >= GEN_CONFIG_COUNT) return; + if (gGenerationalChangesTestOverride == NULL) return; + gGenerationalChangesTestOverride[configTag] = value; +#endif +} + +#if TESTING +void TestInitConfigData(void); +void TestFreeConfigData(void); +#endif + +#endif // GUARD_GENERATIONAL_CHANGES_H diff --git a/include/test/battle.h b/include/test/battle.h index d73443c30d..c8ab519ba0 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -287,6 +287,16 @@ * GIVEN { * FLAG_SET(FLAG_SYS_EXAMPLE_FLAG); * + * WITH_CONFIG(configTag, value) + * Runs the test with a specified config override. `configTag` must be + * of `enum GenConfigTag` + * Example: + * GIVEN { + * WITH_CONFIG(GEN_CONFIG_GALE_WINGS, GEN_6); + * } + * The `value` may be inferred from a local variable, e.g. set by + * PARAMETRIZE. + * * PLAYER(species) and OPPONENT(species) * Adds the species to the player's or opponent's party respectively. * The Pokémon can be further customized with the following functions: @@ -488,6 +498,7 @@ #include "battle.h" #include "battle_anim.h" #include "data.h" +#include "generational_changes.h" #include "item.h" #include "random.h" #include "recorded_battle.h" @@ -822,6 +833,7 @@ struct moveWithPP { #define AI_LOG AILogScores(__LINE__) #define FLAG_SET(flagId) SetFlagForTest(__LINE__, flagId) +#define WITH_CONFIG(configTag, value) TestSetConfig(__LINE__, configTag, value) #define PLAYER(species) for (OpenPokemon(__LINE__, B_SIDE_PLAYER, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) #define OPPONENT(species) for (OpenPokemon(__LINE__, B_SIDE_OPPONENT, species); gBattleTestRunnerState->data.currentMon; ClosePokemon(__LINE__)) @@ -855,6 +867,7 @@ struct moveWithPP { #define Shadow(isShadow) Shadow_(__LINE__, shadow) void SetFlagForTest(u32 sourceLine, u16 flagId); +void TestSetConfig(u32 sourceLine, enum GenConfigTag configTag, u32 value); void ClearFlagAfterTest(void); void OpenPokemon(u32 sourceLine, u32 side, u32 species); void ClosePokemon(u32 sourceLine); diff --git a/src/battle_main.c b/src/battle_main.c index 7508c6cb3a..3dad2c67d6 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -24,6 +24,7 @@ #include "event_data.h" #include "evolution_scene.h" #include "field_weather.h" +#include "generational_changes.h" #include "graphics.h" #include "gpu_regs.h" #include "international_string_util.h" @@ -4851,7 +4852,7 @@ s8 GetMovePriority(u32 battler, u16 move) return gMovesInfo[MOVE_MAX_GUARD].priority; if (ability == ABILITY_GALE_WINGS - && (B_GALE_WINGS < GEN_7 || BATTLER_MAX_HP(battler)) + && (GetGenConfig(GEN_CONFIG_GALE_WINGS) < GEN_7 || BATTLER_MAX_HP(battler)) && gMovesInfo[move].type == TYPE_FLYING) { priority++; diff --git a/src/generational_changes.c b/src/generational_changes.c new file mode 100644 index 0000000000..1ad29aa675 --- /dev/null +++ b/src/generational_changes.c @@ -0,0 +1,19 @@ +#include "global.h" +#include "generational_changes.h" +#include "malloc.h" +#include "constants/generational_changes.h" + +#if TESTING +EWRAM_DATA u8 *gGenerationalChangesTestOverride = NULL; + +void TestInitConfigData(void) +{ + gGenerationalChangesTestOverride = Alloc(sizeof(sGenerationalChanges)); + memcpy(gGenerationalChangesTestOverride, sGenerationalChanges, sizeof(sGenerationalChanges)); +} + +void TestFreeConfigData(void) +{ + TRY_FREE_AND_SET_NULL(gGenerationalChangesTestOverride) +} +#endif diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c index eff4589649..c7a03d0914 100644 --- a/test/battle/ability/gale_wings.c +++ b/test/battle/ability/gale_wings.c @@ -1,20 +1,22 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP") +SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP (Gen 7+)") { - u16 hp; - PARAMETRIZE { hp = 100; } - PARAMETRIZE { hp = 99; } + u32 hp, config; + PARAMETRIZE { hp = 100; config = GEN_7; } + PARAMETRIZE { hp = 99; config = GEN_7; } + PARAMETRIZE { hp = 100; config = GEN_6; } + PARAMETRIZE { hp = 99; config = GEN_6; } GIVEN { - ASSUME(B_GALE_WINGS >= GEN_7); + WITH_CONFIG(GEN_CONFIG_GALE_WINGS, config); ASSUME(gMovesInfo[MOVE_AERIAL_ACE].type == TYPE_FLYING); PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(hp); MaxHP(100); Speed(1);} OPPONENT(SPECIES_WOBBUFFET) { Speed(100);}; } WHEN { TURN { MOVE(player, MOVE_AERIAL_ACE); } } SCENE { - if (hp == 100) { + if (hp == 100 || config <= GEN_6) { MESSAGE("Talonflame used Aerial Ace!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); } @@ -31,7 +33,6 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority to Flying-type moves") PARAMETRIZE { move = MOVE_AERIAL_ACE; } PARAMETRIZE { move = MOVE_FLARE_BLITZ; } GIVEN { - ASSUME(B_GALE_WINGS >= GEN_7); ASSUME(gMovesInfo[MOVE_AERIAL_ACE].type == TYPE_FLYING); ASSUME(gMovesInfo[MOVE_FLARE_BLITZ].type == TYPE_FIRE); PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(100); MaxHP(100); Speed(1);} @@ -58,7 +59,6 @@ SINGLE_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Natural PARAMETRIZE { move = MOVE_JUDGMENT; heldItem = ITEM_SKY_PLATE; } PARAMETRIZE { move = MOVE_HIDDEN_POWER; heldItem = ITEM_NONE; } GIVEN { - ASSUME(B_GALE_WINGS >= GEN_7); ASSUME(gMovesInfo[MOVE_NATURAL_GIFT].effect == EFFECT_NATURAL_GIFT); ASSUME(gMovesInfo[MOVE_JUDGMENT].effect == EFFECT_CHANGE_TYPE_ON_ITEM); // IV combinations sourced from https://www.smogon.com/forums/threads/hidden-power-iv-combinations.78083/ diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index c55ef489b3..9484e6df6c 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -160,6 +160,7 @@ static void BattleTest_SetUp(void *data) { const struct BattleTest *test = data; memset(STATE, 0, sizeof(*STATE)); + TestInitConfigData(); InvokeTestFunction(test); STATE->parameters = STATE->parametersCount; if (STATE->parametersCount == 0 && test->resultsSize > 0) @@ -1417,6 +1418,7 @@ static void BattleTest_TearDown(void *data) // Free resources that aren't cleaned up when the battle was // aborted unexpectedly. ClearFlagAfterTest(); + TestFreeConfigData(); if (STATE->tearDownBattle) TearDownBattle(); } @@ -1513,6 +1515,12 @@ void SetFlagForTest(u32 sourceLine, u16 flagId) FlagSet(flagId); } +void TestSetConfig(u32 sourceLine, enum GenConfigTag configTag, u32 value) +{ + INVALID_IF(!STATE->runGiven, "WITH_CONFIG outside of GIVEN"); + SetGenConfig(configTag, value); +} + void ClearFlagAfterTest(void) { if (DATA.flagId != 0) From f864bf8b707e342cdd4771a564d89d852435f0df Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 30 Dec 2024 09:01:20 +0100 Subject: [PATCH 522/544] Adds Generational config for Magic Guard (Fix for Gen4+) (#5893) --- include/config/battle.h | 1 + src/battle_util.c | 5 ++++- test/battle/ability/magic_guard.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/include/config/battle.h b/include/config/battle.h index db3e6dcc77..f1ba1944dc 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -155,6 +155,7 @@ // In Gen3, Effect Spore has a 10% chance to sleep, poison or paralyze, with an equal chance. // In Gen4, it's 30%. In Gen5+ it has 11% to sleep, 9% chance to poison and 10% chance to paralyze. #define B_PICKUP_WILD GEN_LATEST // In Gen9+, Pickup allows its user to pickup its own used item at the end of the turn in wild battles. +#define B_MAGIC_GUARD GEN_LATEST // In Gen4+, Magic Guard ignores immobilization caused by paralysis // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore HP activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. diff --git a/src/battle_util.c b/src/battle_util.c index a9956615a1..66e219fff5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3484,7 +3484,10 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_PARALYSED: // paralysis - if (!gBattleStruct->isAtkCancelerForCalledMove && (gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && !RandomPercentage(RNG_PARALYSIS, 75)) + if (!gBattleStruct->isAtkCancelerForCalledMove + && gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS + && (GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD && B_MAGIC_GUARD >= GEN_4) + && !RandomPercentage(RNG_PARALYSIS, 75)) { gProtectStructs[gBattlerAttacker].prlzImmobility = TRUE; // This is removed in FRLG and Emerald for some reason diff --git a/test/battle/ability/magic_guard.c b/test/battle/ability/magic_guard.c index 5579652265..20e8eb779c 100644 --- a/test/battle/ability/magic_guard.c +++ b/test/battle/ability/magic_guard.c @@ -15,3 +15,32 @@ SINGLE_BATTLE_TEST("Magic Guard prevents recoil damage to the user") NOT HP_BAR(player); } } + +SINGLE_BATTLE_TEST("Magic Guard ignores immobilization that can be caused by paralysis") +{ + if (B_MAGIC_GUARD >= GEN_4) + PASSES_RANDOMLY(1, 1, RNG_PARALYSIS); + else + PASSES_RANDOMLY(75, 100, RNG_PARALYSIS); + GIVEN { + PLAYER(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS);} + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } +} + +SINGLE_BATTLE_TEST("Magic Guard does not ignore speed stat changes caused by paralysis") +{ + GIVEN { + PLAYER(SPECIES_CLEFABLE) { Speed(100); Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS);} + OPPONENT(SPECIES_WOBBUFFET) { Speed(99); } + } WHEN { + TURN { } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } +} From 07a7f87bac4d8b659276a3a61aa91efed027c314 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 30 Dec 2024 18:19:09 -0300 Subject: [PATCH 523/544] Improve README.md (#5640) --- README.md | 89 ++++++++++++++++++++++++++----------------------------- 1 file changed, 42 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 277dae2be7..4c6dff9fdd 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ # pokeemerald-expansion -### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there. +pokeemerald-expansion is ***a romhack base*** based off pret's [pokeemerald](https://github.com/pret/pokeemerald) decompilation project. ***It is NOT a playable romhack,*** but it has multiple features available to romhackers so that they can create their own games, so it's not meant to be played on its own. -## What is pokeemerald-expansion? - -pokeemerald-expansion is a decomp hack base project based off pret's [pokeemerald](https://github.com/pret/pokeemerald) decompilation project. It's recommended that any new projects that plan on using it, to clone this repository instead of pret's vanilla repository, as we regurlarly incorporate pret's documentation changes. This is ***NOT*** a standalone romhack, and as such, most features will be unavailable and/or unbalanced if played as is. +## Should I use this or vanilla pokeemerald for my hack? +The main advantage of using vanilla pokeemerald as a base is being able to link with other official GBA Pokémon games for battles and trading, pokeemerald-expansion can battle and trade with itself out of the box. If you don't mind losing full vanilla compatiblitity, we recommend using pokeemerald-expansion. Otherwise, use pret's pokeemerald. You'll still receive documentation improvements from pret, as we regurlarly incorporate pret's documentation changes. ## Using pokeemerald-expansion @@ -14,8 +13,46 @@ You can phrase it as the following: Based off RHH's pokeemerald-expansion 1.10.0 https://github.com/rh-hideout/pokeemerald-expansion/ ``` +#### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there. + Please follow the instructions in `INSTALL.md` to get pokeemerald-expansion set up on your machine. +### If I already have a project based on regular pokeemerald, can I use pokeemerald-expansion? +Yes! Keep in mind that we keep up with pret's documentation of pokeemerald, which means that if your project a bit old, you might get merge conflicts that you need to solve manually. +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH master`. + +With this, you'll get the latest version of pokeemerald-expansion, plus a couple of bugfixes that haven't yet been released into the next patch version :) + +## Documentation +[Please click here to visit our documentation page.](https://rh-hideout.github.io/pokeemerald-expansion/) + +## **How do I update my version of pokeemerald-expansion?** +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Check your current version. + - You can check in the debug menu's `Utilities -> Expansion Version` option. + - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](docs/CHANGELOG.md) to determine your version based on the features available on your repository. +- ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on. Check the [online documentation site](https://rh-hideout.github.io/pokeemerald-expansion/CHANGELOG.html) to see the latest versions of each step.) +- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.9.3, use `git pull RHH expansion/1.9.3`). + - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on) +- Alternatively, you can update to unreleased versions of the expansion. + - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`. + - ***upcoming (unstable, with potential bugs):*** It contains unreleased **features** that will come in the next minor version. To merge, use `git pull RHH upcoming`. + +### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :) + +## Who maintains the project? +The project was originally started by DizzyEgg alongside other contributors. Now it is maintained by a team in the ROM Hacking Hideout's community called the "Expansion Senate". ROM Hacking Hideout (RHH for short) is a Discord-based ROM hacking community specialized in Pokémon romhacks. A lot of the discussion in regards of the development of the project happens there. + +[Click here to join the RHH Discord Server!](https://discord.gg/6CzjAG6GZk) + +## There's a bug in the project. How do I let you guys know? +Please submit any issues with the project [here](https://github.com/rh-hideout/pokeemerald-expansion/issues) and make sure that the issue wasn't reported by someone else by searching using the filters. You may also join the Discord server to try getting more in-depth support from the team and other members of the server. + +## Can I contribute even if I'm not a member of ROM Hacking Hideout? +Yes! Contributions are welcome via Pull Requests and they will be reviewed by maintainers in due time. +Also, *please follow the Pull Request template and feel free to discuss how the reviews are being handled. **Communication is key!*** Don't feel discouraged if we take a bit to review your PR, we'll get to it. + ## What features are included? - ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**: - [Battle configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h) @@ -160,46 +197,4 @@ Please follow the instructions in `INSTALL.md` to get pokeemerald-expansion set - All bugfixes from pret included. - Fixed overworld snow effect. -There are some mechanics, moves and abilities that are missing and being developed. Check [the project's milestones](https://github.com/rh-hideout/pokeemerald-expansion/milestones) to see which ones. - - -### [Documentation on features can be found here](https://github.com/rh-hideout/pokeemerald-expansion/wiki) - -## If I already have a project based on regular pokeemerald, can I use pokeemerald-expansion? -Yes! Keep in mind that we keep up with pret's documentation of pokeemerald, which means that if your project a bit old, you might get merge conflicts that you need to solve manually. -- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. -- Once you have your remote set up, run the command `git pull RHH master`. - -With this, you'll get the latest version of pokeemerald-expansion, plus a couple of bugfixes that haven't been released into the next patch version :) - -## **How do I update my version of pokeemerald-expansion?** -- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. -- Check your current version. - - You can check in the debug menu's `Utilities -> Expansion Version` option. - - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](CHANGELOG.md) to determine your version based on the features available on your repository. -- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.10.0, use `git pull RHH expansion/1.10.0`). - - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on) -- Alternatively, you can update to unreleased versions of the expansion. - - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`. - - ***upcoming (unstable, with potential bugs):*** It contains unreleased **features** that will come in the next minor version. To merge, use `git pull RHH upcoming`. - -### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :) - -## There's a bug in the project. How do I let you guys know? -Please submit any issues with the project [here](https://github.com/rh-hideout/pokeemerald-expansion/issues). Make sure that the issue wasn't reported by someone else by searching using the filters. - -## Can I contribute even if I'm not a member of ROM Hacking Hideout? - -Yes! Contributions are welcome via Pull Requests and they will be reviewed by maintainers. Don't feel discouraged if we take a bit to review your PR, we'll get to it. - -## Who maintains the project? - -The project was originally started by DizzyEgg alongside other contributors. - -The project has now gotten larger and DizzyEgg is now maintaining the project as part of the ROM Hacking Hideout community. Some members of this community are taking on larger roles to help maintain the project. - -## What is the ROM Hacking Hideout? - -A Discord-based ROM hacking community that has many members who hack using the disassembly and decompilation projects for Pokémon. Quite a few contributors to the original feature branches by DizzyEgg were members of ROM Hacking Hideout. You can call it RHH for short! - -[Click here to join the RHH Discord Server!](https://discord.gg/6CzjAG6GZk) +There are some mechanics, moves and abilities that are missing and being developed. Check [the project's milestones](https://github.com/rh-hideout/pokeemerald-expansion/milestones) and our [issues page](https://github.com/rh-hideout/pokeemerald-expansion/issues) to see which ones. From bf125c8f5e249d960c18bb946f7b60a6ebb77678 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Mon, 30 Dec 2024 23:51:48 +0100 Subject: [PATCH 524/544] Fix wrong value for NUM_MOVE_EFFECTS (#5913) --- include/constants/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/battle.h b/include/constants/battle.h index a7300e6517..bdabd816d5 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -418,7 +418,7 @@ #define MOVE_EFFECT_SALT_CURE 87 #define MOVE_EFFECT_EERIE_SPELL 88 -#define NUM_MOVE_EFFECTS 88 +#define NUM_MOVE_EFFECTS 89 #define MOVE_EFFECT_AFFECTS_USER 0x2000 #define MOVE_EFFECT_CERTAIN 0x4000 From 7e0c1f932314f71c7d4da69ded47ef1b165fa44f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 31 Dec 2024 00:36:07 +0100 Subject: [PATCH 525/544] New U-turn animation to fix visibility (#5910) --- data/battle_anim_scripts.s | 37 +++++++++++++++---------------------- src/battle_anim_new.c | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 80d50710ba..ae8642feb4 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -350,34 +350,27 @@ gBattleAnimMove_MetalBurst:: waitforvisualfinish end +@Credits: Skeli gBattleAnimMove_UTurn:: - loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER - setalpha 12, 8 - playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER - createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 - playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER - createvisualtask AnimTask_CanBattlerSwitch, 1, ANIM_ATTACKER - jumpretfalse UTurnVisible - createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, TRUE -UTurnContinue: - delay 20 - createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 - createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 - playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - waitforvisualfinish - clearmonbg ANIM_DEF_PARTNER - createvisualtask AnimTask_CanBattlerSwitch, 1, ANIM_ATTACKER - jumpretfalse UTurnLast + splitbgprio ANIM_TARGET + setalpha 8, 8 invisible ANIM_ATTACKER -UTurnLast: - blendoff + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gUTurnBallSpriteTemplate, ANIM_TARGET, 2, 0, 0, 21 waitforvisualfinish + playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + createsprite gUTurnBallBackSpriteTemplate, ANIM_ATTACKER, 3, 4, 0, -16, 36 + waitforvisualfinish + visible ANIM_ATTACKER + clearmonbg ANIM_TARGET + blendoff end -UTurnVisible: - createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE - goto UTurnContinue gBattleAnimMove_CloseCombat:: loadspritegfx ANIM_TAG_IMPACT diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 50bb83305f..2d1ad3e807 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -4380,6 +4380,29 @@ const struct SpriteTemplate gSpriteTemplate_FlipTurnBack = { .callback = AnimAbsorptionOrb }; +// U-Turn +const struct SpriteTemplate gUTurnBallSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimShadowBall, +}; + +const struct SpriteTemplate gUTurnBallBackSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_RAZOR_LEAF, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gAffineAnims_ShadowBall, + .callback = AnimAbsorptionOrb, +}; + // wicked blow static const union AffineAnimCmd sSpriteAffineAnim_DrainPunchFist[] = { AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size From 9d30299148134f02b69852b1191792d56afd76af Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 31 Dec 2024 00:38:01 +0100 Subject: [PATCH 526/544] Fixes Stance Change, Sleep Talk interaction (#5909) --- include/battle_util.h | 2 ++ src/battle_script_commands.c | 17 ----------------- src/battle_util.c | 23 +++++++++++++++++++++++ test/battle/ability/stance_change.c | 1 - 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index 82f4ed2ce1..fc3840e800 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -101,6 +101,7 @@ enum { CANCELLER_FLAGS, CANCELLER_SKY_DROP, + CANCELLER_STANCE_CHANGE_1, CANCELLER_ASLEEP, CANCELLER_FROZEN, CANCELLER_OBEDIENCE, @@ -117,6 +118,7 @@ enum CANCELLER_IN_LOVE, CANCELLER_BIDE, CANCELLER_THAW, + CANCELLER_STANCE_CHANGE_2, CANCELLER_POWDER_MOVE, CANCELLER_POWDER_STATUS, CANCELLER_THROAT_CHOP, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 40f9db64c6..055f9e9c3b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1125,19 +1125,6 @@ static bool32 NoTargetPresent(u8 battler, u32 move) return FALSE; } -static bool32 TryFormChangeBeforeMove(void) -{ - bool32 result = TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_BEFORE_MOVE); - if (!result) - result = TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY); - if (!result) - return FALSE; - - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_AttackerFormChange; - return TRUE; -} - bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) { if ((ability == ABILITY_PROTEAN || ability == ABILITY_LIBERO) @@ -1206,8 +1193,6 @@ static void Cmd_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_MoveEnd; return; } - if (B_STANCE_CHANGE_FAIL < GEN_7 && TryFormChangeBeforeMove()) - return; if (AtkCanceller_UnableToUseMove(moveType)) return; @@ -1267,8 +1252,6 @@ static void Cmd_attackcanceler(void) gMoveResultFlags |= MOVE_RESULT_MISSED; return; } - if (B_STANCE_CHANGE_FAIL >= GEN_7 && TryFormChangeBeforeMove()) - return; gHitMarker &= ~HITMARKER_ALLOW_NO_PP; diff --git a/src/battle_util.c b/src/battle_util.c index 66e219fff5..535c026145 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3209,6 +3209,19 @@ void SetAtkCancellerForCalledMove(void) gBattleStruct->isAtkCancelerForCalledMove = TRUE; } +static inline bool32 TryFormChangeBeforeMove(void) +{ + bool32 result = TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_BEFORE_MOVE); + if (!result) + result = TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_BEFORE_MOVE_CATEGORY); + if (!result) + return FALSE; + + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AttackerFormChange; + return TRUE; +} + u8 AtkCanceller_UnableToUseMove(u32 moveType) { u32 effect = 0; @@ -3233,6 +3246,11 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) } gBattleStruct->atkCancellerTracker++; break; + case CANCELLER_STANCE_CHANGE_1: + if (B_STANCE_CHANGE_FAIL < GEN_7 && TryFormChangeBeforeMove()) + effect = 1; + gBattleStruct->atkCancellerTracker++; + break; case CANCELLER_ASLEEP: // check being asleep if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) { @@ -3573,6 +3591,11 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) } gBattleStruct->atkCancellerTracker++; break; + case CANCELLER_STANCE_CHANGE_2: + if (B_STANCE_CHANGE_FAIL >= GEN_7 && TryFormChangeBeforeMove()) + effect = 1; + gBattleStruct->atkCancellerTracker++; + break; case CANCELLER_POWDER_MOVE: if ((gMovesInfo[gCurrentMove].powderMove) && (gBattlerAttacker != gBattlerTarget)) { diff --git a/test/battle/ability/stance_change.c b/test/battle/ability/stance_change.c index 8221e16385..f8a0c70b3e 100644 --- a/test/battle/ability/stance_change.c +++ b/test/battle/ability/stance_change.c @@ -63,7 +63,6 @@ SINGLE_BATTLE_TEST("Stance Change changes Aegislash from Blade to Shield when us SINGLE_BATTLE_TEST("Stance Change doesn't change Aegislash to Shield if King's Shield is called by a different move - Sleep Talk") { - KNOWN_FAILING; // Currently does change form GIVEN { ASSUME(gMovesInfo[MOVE_SLEEP_TALK].effect == EFFECT_SLEEP_TALK); PLAYER(SPECIES_AEGISLASH_BLADE) { Moves(MOVE_KINGS_SHIELD, MOVE_SLEEP_TALK); Status1(STATUS1_SLEEP_TURN(3)); } From 13dcd35db01faedc859f582ebfe7d0e11b68e5fb Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 31 Dec 2024 00:39:13 +0100 Subject: [PATCH 527/544] Fixes Round doubling it's BP if previous Round failed (#5907) --- src/battle_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 535c026145..2625a4b7cf 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9121,7 +9121,7 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData case EFFECT_ROUND: for (i = 0; i < gBattlersCount; i++) { - if (i != battlerAtk && IsBattlerAlive(i) && gLastMoves[i] == MOVE_ROUND) + if (i != battlerAtk && IsBattlerAlive(i) && gMovesInfo[gLastUsedMove].effect == EFFECT_ROUND) { basePower *= 2; break; From e1275594c5492d0a63e23618905ae3f915d58163 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 31 Dec 2024 18:55:42 -0300 Subject: [PATCH 528/544] Renamed OW type effectiveness function for clarity (#5917) --- include/battle_util.h | 2 +- src/battle_util.c | 2 +- src/event_object_movement.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index fc3840e800..5c151665b9 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -237,7 +237,7 @@ s32 CalculateMoveDamageVars(struct DamageCalculationData *damageCalcData, u32 fi uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u32 defAbility, bool32 recordAbilities); uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); uq4_12_t GetTypeModifier(u32 atkType, u32 defType); -uq4_12_t GetTypeEffectiveness(struct Pokemon *mon, u8 moveType); +uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, u8 moveType); s32 GetStealthHazardDamage(u8 hazardType, u32 battler); s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp); bool32 CanMegaEvolve(u32 battler); diff --git a/src/battle_util.c b/src/battle_util.c index 2625a4b7cf..4dfb39dc66 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10670,7 +10670,7 @@ static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier) } } -uq4_12_t GetTypeEffectiveness(struct Pokemon *mon, u8 moveType) +uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, u8 moveType) { uq4_12_t modifier = UQ_4_12(1.0); u16 abilityDef = GetMonAbility(mon); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 47640b8f4e..0645d7073a 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2520,7 +2520,7 @@ void GetFollowerAction(struct ScriptContext *ctx) // Essentially a big switch fo } if (multi < NUMBER_OF_MON_TYPES) { - multi = GetTypeEffectiveness(mon, multi); + multi = GetOverworldTypeEffectiveness(mon, multi); if (multi <= UQ_4_12(0.5)) condEmotes[condCount++] = (struct SpecialEmote) {.emotion = FOLLOWER_EMOTION_HAPPY, .index = 32}; else if (multi >= UQ_4_12(2.0)) From 6b8665d08f357e995939b15cd911e721f21402c9 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 1 Jan 2025 06:24:23 -0300 Subject: [PATCH 529/544] Speed up tests in headless mode (#5889) --- include/battle_gfx_sfx_util.h | 1 + include/config/battle.h | 3 +- src/battle_controllers.c | 5 ++- src/battle_gfx_sfx_util.c | 12 +++++++ src/battle_intro.c | 56 +++++++++++++++++++++++++++++ src/battle_main.c | 66 +++++++++++++++++++++-------------- src/battle_script_commands.c | 4 +++ src/pokemon.c | 5 +-- src/pokemon_animation.c | 6 +++- test/test_runner.c | 2 +- 10 files changed, 128 insertions(+), 32 deletions(-) diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h index 968f8d48dc..dd85b2658c 100644 --- a/include/battle_gfx_sfx_util.h +++ b/include/battle_gfx_sfx_util.h @@ -6,6 +6,7 @@ void FreeBattleSpritesData(void); u16 ChooseMoveAndTargetInBattlePalace(u32 battler); void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite); void SpriteCB_TrainerSlideIn(struct Sprite *sprite); +void SpriteCB_TrainerSpawn(struct Sprite *sprite); void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isStatus2, u32 status); bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument); void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId); diff --git a/include/config/battle.h b/include/config/battle.h index f1ba1944dc..cdb0caacfe 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -226,7 +226,8 @@ // Interface settings #define B_ABILITY_POP_UP TRUE // In Gen5+, the Pokémon abilities are displayed in a pop-up, when they activate in battle. -#define B_FAST_INTRO TRUE // If set to TRUE, battle intro texts print at the same time as animation of a Pokémon, as opposing to waiting for the animation to end. +#define B_FAST_INTRO_PKMN_TEXT TRUE // If set to TRUE, battle intro texts print at the same time as animation of a Pokémon, as opposing to waiting for the animation to end. +#define B_FAST_INTRO_NO_SLIDE FALSE // If set to TRUE, the slide animation that happens at the beginning of the battle is skipped. #define B_FAST_HP_DRAIN TRUE // If set to TRUE, HP bars will move faster. #define B_FAST_EXP_GROW TRUE // If set to TRUE, EXP bars will move faster. #define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 Pokémon, will be shown before selecting a move. diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 553eb7a85c..a5581cf735 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -2542,7 +2542,10 @@ void BtlController_HandleDrawTrainerPic(u32 battler, u32 trainerPicId, bool32 is gSprites[gBattlerSpriteIds[battler]].x2 = DISPLAY_WIDTH; gSprites[gBattlerSpriteIds[battler]].sSpeedX = -2; } - gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn; + if (B_FAST_INTRO_NO_SLIDE || gTestRunnerHeadless) + gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_TrainerSpawn; + else + gSprites[gBattlerSpriteIds[battler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[battler] = Controller_WaitForTrainerPic; } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 1f768274aa..620ef57d94 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -435,6 +435,18 @@ void SpriteCB_TrainerSlideIn(struct Sprite *sprite) } } +void SpriteCB_TrainerSpawn(struct Sprite *sprite) +{ + if (!(gIntroSlideFlags & 1)) + { + sprite->x2 = 0; + if (sprite->y2 != 0) + sprite->callback = SpriteCB_TrainerSlideVertical; + else + sprite->callback = SpriteCallbackDummy; + } +} + // Slide up to 0 if necessary (used by multi battle intro) static void SpriteCB_TrainerSlideVertical(struct Sprite *sprite) { diff --git a/src/battle_intro.c b/src/battle_intro.c index a6b1607285..b951c163c8 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -8,6 +8,7 @@ #include "main.h" #include "scanline_effect.h" #include "task.h" +#include "test_runner.h" #include "trig.h" #include "constants/battle_partner.h" #include "constants/trainers.h" @@ -17,6 +18,7 @@ static void BattleIntroSlide2(u8); static void BattleIntroSlide3(u8); static void BattleIntroSlideLink(u8); static void BattleIntroSlidePartner(u8); +static void BattleIntroNoSlide(u8); static const u8 sBattleAnimBgCnts[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT}; @@ -149,9 +151,59 @@ static void BattleIntroSlideEnd(u8 taskId) SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); } +static void BattleIntroNoSlide(u8 taskId) +{ + switch (gTasks[taskId].tState) + { + case 0: + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTasks[taskId].data[2] = 16; + gTasks[taskId].tState++; + gIntroSlideFlags &= ~1; + } + else + { + gTasks[taskId].data[2] = 1; + gTasks[taskId].tState++; + gIntroSlideFlags &= ~1; + } + break; + case 1: + gTasks[taskId].data[2]--; + if (gTasks[taskId].data[2] == 0) + { + gTasks[taskId].tState++; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + gScanlineEffect.state = 3; + } + break; + case 2: + gBattle_WIN0V -= 0xFF * 2; + if ((gBattle_WIN0V & 0xFF00) == 0) + { + gTasks[taskId].tState++; + } + break; + case 3: + gTasks[taskId].tState++; + CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE); + SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); + SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256); + break; + case 4: + BattleIntroSlideEnd(taskId); + break; + } +} + static void BattleIntroSlide1(u8 taskId) { int i; + if (B_FAST_INTRO_NO_SLIDE || gTestRunnerHeadless) + return BattleIntroNoSlide(taskId); gBattle_BG1_X += 6; switch (gTasks[taskId].tState) @@ -237,6 +289,8 @@ static void BattleIntroSlide1(u8 taskId) static void BattleIntroSlide2(u8 taskId) { int i; + if (B_FAST_INTRO_NO_SLIDE || gTestRunnerHeadless) + return BattleIntroNoSlide(taskId); switch (gTasks[taskId].tTerrain) { @@ -349,6 +403,8 @@ static void BattleIntroSlide2(u8 taskId) static void BattleIntroSlide3(u8 taskId) { int i; + if (B_FAST_INTRO_NO_SLIDE || gTestRunnerHeadless) + return BattleIntroNoSlide(taskId); gBattle_BG1_X += 8; switch (gTasks[taskId].tState) diff --git a/src/battle_main.c b/src/battle_main.c index 3dad2c67d6..2391b4f370 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -487,21 +487,24 @@ static void CB2_InitBattleInternal(void) else { gBattle_WIN0V = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); - ScanlineEffect_Clear(); - - for (i = 0; i < DISPLAY_HEIGHT / 2; i++) + if (B_FAST_INTRO_NO_SLIDE == FALSE && !gTestRunnerHeadless) { - gScanlineEffectRegBuffers[0][i] = 0xF0; - gScanlineEffectRegBuffers[1][i] = 0xF0; - } + ScanlineEffect_Clear(); - for (; i < DISPLAY_HEIGHT; i++) - { - gScanlineEffectRegBuffers[0][i] = 0xFF10; - gScanlineEffectRegBuffers[1][i] = 0xFF10; - } + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) + { + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; + } - ScanlineEffect_SetParams(sIntroScanlineParams16Bit); + for (; i < DISPLAY_HEIGHT; i++) + { + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; + } + + ScanlineEffect_SetParams(sIntroScanlineParams16Bit); + } } ResetPaletteFade(); @@ -532,7 +535,8 @@ static void CB2_InitBattleInternal(void) LoadBattleTextboxAndBackground(); ResetSpriteData(); ResetTasks(); - DrawBattleEntryBackground(); + if (B_FAST_INTRO_NO_SLIDE == FALSE && !gTestRunnerHeadless) + DrawBattleEntryBackground(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = MAX_BATTLERS_COUNT; SetVBlankCallback(VBlankCB_Battle); @@ -2650,17 +2654,24 @@ void SpriteCB_WildMon(struct Sprite *sprite) { sprite->callback = SpriteCB_MoveWildMonToRight; StartSpriteAnimIfDifferent(sprite, 0); - if (WILD_DOUBLE_BATTLE) - BeginNormalPaletteFade((0x10000 << sprite->sBattler) | (0x10000 << BATTLE_PARTNER(sprite->sBattler)), 0, 10, 10, RGB(8, 8, 8)); - else - BeginNormalPaletteFade((0x10000 << sprite->sBattler), 0, 10, 10, RGB(8, 8, 8)); + if (B_FAST_INTRO_NO_SLIDE == FALSE && !gTestRunnerHeadless) + { + if (WILD_DOUBLE_BATTLE) + BeginNormalPaletteFade((0x10000 << sprite->sBattler) | (0x10000 << BATTLE_PARTNER(sprite->sBattler)), 0, 10, 10, RGB(8, 8, 8)); + else + BeginNormalPaletteFade((0x10000 << sprite->sBattler), 0, 10, 10, RGB(8, 8, 8)); + } } static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite) { if ((gIntroSlideFlags & 1) == 0) { - sprite->x2 += 2; + if (B_FAST_INTRO_NO_SLIDE == FALSE && !gTestRunnerHeadless) + sprite->x2 += 2; + else + sprite->x2 = 0; + if (sprite->x2 == 0) { sprite->callback = SpriteCB_WildMonShowHealthbox; @@ -2676,10 +2687,13 @@ static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite) SetHealthboxSpriteVisible(gHealthboxSpriteIds[sprite->sBattler]); sprite->callback = SpriteCB_WildMonAnimate; StartSpriteAnimIfDifferent(sprite, 0); - if (WILD_DOUBLE_BATTLE) - BeginNormalPaletteFade((0x10000 << sprite->sBattler) | (0x10000 << BATTLE_PARTNER(sprite->sBattler)), 0, 10, 0, RGB(8, 8, 8)); - else - BeginNormalPaletteFade((0x10000 << sprite->sBattler), 0, 10, 0, RGB(8, 8, 8)); + if (B_FAST_INTRO_NO_SLIDE == FALSE && !gTestRunnerHeadless) + { + if (WILD_DOUBLE_BATTLE) + BeginNormalPaletteFade((0x10000 << sprite->sBattler) | (0x10000 << BATTLE_PARTNER(sprite->sBattler)), 0, 10, 0, RGB(8, 8, 8)); + else + BeginNormalPaletteFade((0x10000 << sprite->sBattler), 0, 10, 0, RGB(8, 8, 8)); + } } } @@ -3561,7 +3575,7 @@ static void DoBattleIntro(void) } else // Skip party summary since it is a wild battle. { - if (B_FAST_INTRO == TRUE) + if (B_FAST_INTRO_PKMN_TEXT == TRUE) gBattleStruct->introState = BATTLE_INTRO_STATE_INTRO_TEXT; // Don't wait for sprite, print message at the same time. else gBattleStruct->introState++; // Wait for sprite to load. @@ -3633,7 +3647,7 @@ static void DoBattleIntro(void) } else { - if (B_FAST_INTRO == TRUE) + if (B_FAST_INTRO_PKMN_TEXT == TRUE) gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; else gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM; @@ -3672,7 +3686,7 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A); MarkBattlerForControllerExec(battler); } - if (B_FAST_INTRO == TRUE + if (B_FAST_INTRO_PKMN_TEXT == TRUE && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK))) gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; // Print at the same time as trainer sends out second mon. else @@ -3695,7 +3709,7 @@ static void DoBattleIntro(void) battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); // A hack that makes fast intro work in trainer battles too. - if (B_FAST_INTRO == TRUE + if (B_FAST_INTRO_PKMN_TEXT == TRUE && gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_RECORDED | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_RECORDED_IS_MASTER | BATTLE_TYPE_LINK)) && gSprites[gHealthboxSpriteIds[battler ^ BIT_SIDE]].callback == SpriteCallbackDummy) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 055f9e9c3b..3c719049a6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2773,6 +2773,8 @@ static void Cmd_waitmessage(void) else { u16 toWait = cmd->time; + if (gTestRunnerHeadless) + gPauseCounterBattle = toWait; if (++gPauseCounterBattle >= toWait) { gPauseCounterBattle = 0; @@ -5273,6 +5275,8 @@ static void Cmd_pause(void) if (gBattleControllerExecFlags == 0) { u16 value = cmd->frames; + if (gTestRunnerHeadless) + gPauseCounterBattle = value; if (++gPauseCounterBattle >= value) { gPauseCounterBattle = 0; diff --git a/src/pokemon.c b/src/pokemon.c index c60e95cc6a..c5162ecfd0 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -39,6 +39,7 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "test_runner.h" #include "text.h" #include "trainer_hill.h" #include "util.h" @@ -6277,7 +6278,7 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality) bool8 HasTwoFramesAnimation(u16 species) { - return P_TWO_FRAME_FRONT_SPRITES && species != SPECIES_UNOWN; + return P_TWO_FRAME_FRONT_SPRITES && species != SPECIES_UNOWN && !gTestRunnerHeadless; } static bool8 ShouldSkipFriendshipChange(void) @@ -6896,7 +6897,7 @@ void HealBoxPokemon(struct BoxPokemon *boxMon) u16 GetCryIdBySpecies(u16 species) { species = SanitizeSpeciesId(species); - if (P_CRIES_ENABLED == FALSE || gSpeciesInfo[species].cryId >= CRY_COUNT) + if (P_CRIES_ENABLED == FALSE || gSpeciesInfo[species].cryId >= CRY_COUNT || gTestRunnerHeadless) return CRY_NONE; return gSpeciesInfo[species].cryId; } diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index d7c0bb343c..6bd32ee514 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -5,6 +5,7 @@ #include "pokemon_animation.h" #include "sprite.h" #include "task.h" +#include "test_runner.h" #include "trig.h" #include "util.h" #include "data.h" @@ -508,7 +509,10 @@ static void Task_HandleMonAnimation(u8 taskId) for (i = 2; i < ARRAY_COUNT(sprite->data); i++) sprite->data[i] = 0; - sprite->callback = sMonAnimFunctions[gTasks[taskId].tAnimId]; + if (gTestRunnerHeadless) + sprite->callback = WaitAnimEnd; + else + sprite->callback = sMonAnimFunctions[gTasks[taskId].tAnimId]; sIsSummaryAnim = FALSE; gTasks[taskId].tState++; diff --git a/test/test_runner.c b/test/test_runner.c index 4715c19189..7a81d1dc9f 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -10,7 +10,7 @@ #include "test_runner.h" #include "test/test.h" -#define TIMEOUT_SECONDS 55 +#define TIMEOUT_SECONDS 60 void CB2_TestRunner(void); From 55f0d3aad5a420d2903b51ffc3655bc30bb0d7e8 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 1 Jan 2025 12:06:20 -0300 Subject: [PATCH 530/544] Added missing Move Effect TODO tests - Volume E (#5915) Co-authored-by: Bassoonian --- test/battle/ability/electric_surge.c | 4 + test/battle/ability/grassy_surge.c | 4 + test/battle/ability/mimicry.c | 72 +++++++++ test/battle/ability/misty_surge.c | 4 + test/battle/ability/psychic_surge.c | 4 + test/battle/gimmick/dynamax.c | 35 ---- test/battle/hold_effect/seeds.c | 62 +++++++ test/battle/move_effect/beak_blast.c | 1 + test/battle/move_effect/echoed_voice.c | 7 + .../electric_terrain.c} | 19 --- test/battle/move_effect/electrify.c | 5 + test/battle/move_effect/electro_ball.c | 5 + test/battle/move_effect/encore.c | 152 +++++++++--------- test/battle/move_effect/endeavor.c | 6 + test/battle/move_effect/endure.c | 35 ++++ test/battle/move_effect/entrainment.c | 6 + test/battle/move_effect/evasion_down.c | 4 + test/battle/move_effect/evasion_down_2.c | 4 + test/battle/move_effect/evasion_up.c | 2 +- test/battle/move_effect/evasion_up_2.c | 28 ++++ test/battle/move_effect/expanding_force.c | 4 + test/battle/move_effect/extreme_evoboost.c | 4 + .../grassy.c => move_effect/grassy_terrain.c} | 19 --- .../move_effect/hit_set_remove_terrain.c | 36 +---- .../misty.c => move_effect/misty_terrain.c} | 19 --- test/battle/move_effect/multi_hit.c | 24 --- .../psychic_terrain.c} | 19 --- .../terrain.c} | 0 28 files changed, 341 insertions(+), 243 deletions(-) create mode 100644 test/battle/ability/electric_surge.c create mode 100644 test/battle/ability/grassy_surge.c create mode 100644 test/battle/ability/mimicry.c create mode 100644 test/battle/ability/misty_surge.c create mode 100644 test/battle/ability/psychic_surge.c create mode 100644 test/battle/hold_effect/seeds.c create mode 100644 test/battle/move_effect/echoed_voice.c rename test/battle/{terrain/electric.c => move_effect/electric_terrain.c} (74%) create mode 100644 test/battle/move_effect/electrify.c create mode 100644 test/battle/move_effect/electro_ball.c create mode 100644 test/battle/move_effect/endeavor.c create mode 100644 test/battle/move_effect/endure.c create mode 100644 test/battle/move_effect/entrainment.c create mode 100644 test/battle/move_effect/evasion_down.c create mode 100644 test/battle/move_effect/evasion_down_2.c create mode 100644 test/battle/move_effect/evasion_up_2.c create mode 100644 test/battle/move_effect/expanding_force.c create mode 100644 test/battle/move_effect/extreme_evoboost.c rename test/battle/{terrain/grassy.c => move_effect/grassy_terrain.c} (80%) rename test/battle/{terrain/misty.c => move_effect/misty_terrain.c} (78%) rename test/battle/{terrain/psychic.c => move_effect/psychic_terrain.c} (84%) rename test/battle/{terrain/starting_terrain.c => starting_status/terrain.c} (100%) diff --git a/test/battle/ability/electric_surge.c b/test/battle/ability/electric_surge.c new file mode 100644 index 0000000000..3509f1c687 --- /dev/null +++ b/test/battle/ability/electric_surge.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Electric Surge creates Electric Terrain when entering the battle"); diff --git a/test/battle/ability/grassy_surge.c b/test/battle/ability/grassy_surge.c new file mode 100644 index 0000000000..ccdb471d9f --- /dev/null +++ b/test/battle/ability/grassy_surge.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Grassy Surge creates Grassy Terrain when entering the battle"); diff --git a/test/battle/ability/mimicry.c b/test/battle/ability/mimicry.c new file mode 100644 index 0000000000..fbdb5cf98a --- /dev/null +++ b/test/battle/ability/mimicry.c @@ -0,0 +1,72 @@ +#include "global.h" +#include "test/battle.h" + +static const u16 terrainData[][2] = +{ + { MOVE_ELECTRIC_TERRAIN, TYPE_ELECTRIC, }, + { MOVE_PSYCHIC_TERRAIN, TYPE_PSYCHIC, }, + { MOVE_GRASSY_TERRAIN, TYPE_GRASS, }, + { MOVE_MISTY_TERRAIN, TYPE_FAIRY, }, +}; + +SINGLE_BATTLE_TEST("Mimicry changes the battler's type based on Terrain") +{ + u32 j; + u32 terrainMove = MOVE_NONE; + u32 terrainType = TYPE_NONE; + + for (j = 0; j < ARRAY_COUNT(terrainData); j++) + PARAMETRIZE { terrainMove = terrainData[j][0]; terrainType = terrainData[j][1]; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(player, terrainMove); } + } SCENE { + ABILITY_POPUP(opponent); + switch (terrainMove) + { + case MOVE_ELECTRIC_TERRAIN: MESSAGE("The opposing Stunfisk's type changed to Electric!"); break; + case MOVE_PSYCHIC_TERRAIN: MESSAGE("The opposing Stunfisk's type changed to Psychic!"); break; + case MOVE_GRASSY_TERRAIN: MESSAGE("The opposing Stunfisk's type changed to Grass!"); break; + case MOVE_MISTY_TERRAIN: MESSAGE("The opposing Stunfisk's type changed to Fairy!"); break; + } + } THEN { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], terrainType); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[1], terrainType); + } +} + +SINGLE_BATTLE_TEST("Mimicry restores the battler's types when terrain is removed by Steel Roller and Ice Spinner") +{ + u32 j; + u32 terrainMove = MOVE_NONE; + u32 removeTerrainMove = MOVE_NONE; + + for (j = 0; j < ARRAY_COUNT(terrainData); j++) + { + PARAMETRIZE { removeTerrainMove = MOVE_STEEL_ROLLER; terrainMove = terrainData[j][0]; } + PARAMETRIZE { removeTerrainMove = MOVE_ICE_SPINNER; terrainMove = terrainData[j][0]; } + } + + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_STUNFISK_GALAR].types[0] == TYPE_GROUND); + ASSUME(gSpeciesInfo[SPECIES_STUNFISK_GALAR].types[1] == TYPE_STEEL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } + } WHEN { + TURN { MOVE(opponent, terrainMove); MOVE(player, removeTerrainMove); } + } SCENE { + switch (terrainMove) + { + case MOVE_ELECTRIC_TERRAIN: MESSAGE("The electricity disappeared from the battlefield."); break; + case MOVE_PSYCHIC_TERRAIN: MESSAGE("The weirdness disappeared from the battlefield!"); break; + case MOVE_GRASSY_TERRAIN: MESSAGE("The grass disappeared from the battlefield."); break; + case MOVE_MISTY_TERRAIN: MESSAGE("The mist disappeared from the battlefield."); break; + } + } THEN { + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_GROUND); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[1], TYPE_STEEL); + } +} diff --git a/test/battle/ability/misty_surge.c b/test/battle/ability/misty_surge.c new file mode 100644 index 0000000000..229d26c3ba --- /dev/null +++ b/test/battle/ability/misty_surge.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Misty Surge creates Misty Terrain when entering the battle"); diff --git a/test/battle/ability/psychic_surge.c b/test/battle/ability/psychic_surge.c new file mode 100644 index 0000000000..d840e8d440 --- /dev/null +++ b/test/battle/ability/psychic_surge.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Psychic Surge creates Psychic Terrain when entering the battle"); diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 33199a77fe..f910f551a4 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -227,41 +227,6 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed o } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_ENCORE); } - TURN { MOVE(player, MOVE_EMBER); } - } SCENE { - MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("The opposing Wobbuffet used Encore!"); - MESSAGE("But it failed!"); - MESSAGE("Wobbuffet used Max Flare!"); - } -} - -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after reverting") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; // yes, this speed is necessary - OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; - } WHEN { - TURN { MOVE(player, MOVE_ARM_THRUST, gimmick: GIMMICK_DYNAMAX); } - TURN { MOVE(player, MOVE_ARM_THRUST); } - TURN { MOVE(player, MOVE_ARM_THRUST); } - TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_TACKLE); } - } SCENE { - MESSAGE("Wobbuffet used Max Knuckle!"); - MESSAGE("Wobbuffet used Max Knuckle!"); - MESSAGE("Wobbuffet used Max Knuckle!"); - MESSAGE("The opposing Wobbuffet used Encore!"); - MESSAGE("Wobbuffet used Arm Thrust!"); - } -} - // Max Moves don't make contact, so Cursed Body doesn't need to be tested, but it is coded for. SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled") { diff --git a/test/battle/hold_effect/seeds.c b/test/battle/hold_effect/seeds.c new file mode 100644 index 0000000000..10a415bd63 --- /dev/null +++ b/test/battle/hold_effect/seeds.c @@ -0,0 +1,62 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Electric Seed raises the holder's Defense on Electric Terrain") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ELECTRIC_SEED); } + OPPONENT(SPECIES_WOBBUFFET); + } 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!"); + } +} + +SINGLE_BATTLE_TEST("Grassy Seed raises the holder's Defense on Grassy Terrain") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_GRASSY_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSY_SEED); } + OPPONENT(SPECIES_WOBBUFFET); + } 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!"); + } +} + +SINGLE_BATTLE_TEST("Misty Seed raises the holder's Sp. Defense on Misty Terrain") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_MISTY_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MISTY_SEED); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MISTY_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); + } +} + +SINGLE_BATTLE_TEST("Psychic Seed raises the holder's Sp. Defense on Psychic Terrain") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); + ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PSYCHIC_SEED); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); + } +} diff --git a/test/battle/move_effect/beak_blast.c b/test/battle/move_effect/beak_blast.c index e716b7717f..a07b28f992 100644 --- a/test/battle/move_effect/beak_blast.c +++ b/test/battle/move_effect/beak_blast.c @@ -113,4 +113,5 @@ SINGLE_BATTLE_TEST("Beak Blast burns only when contact moves are used") } TO_DO_BATTLE_TEST("Beak Blast's charging message is shown regardless if it would've missed"); +TO_DO_BATTLE_TEST("Beak Blast fails if it's forced by Encore after choosing a different move"); TO_DO_BATTLE_TEST("Bulletproof is immune to Beak Blast but not to the burn it causes"); diff --git a/test/battle/move_effect/echoed_voice.c b/test/battle/move_effect/echoed_voice.c new file mode 100644 index 0000000000..3c36270454 --- /dev/null +++ b/test/battle/move_effect/echoed_voice.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Echoed Voice's power is multiplied for every consecutive turn used, capped at 5"); +TO_DO_BATTLE_TEST("Echoed Voice's power is reset when using a different move"); +TO_DO_BATTLE_TEST("Echoed Voice's power is increased even if it misses"); +TO_DO_BATTLE_TEST("Echoed Voice's power is increased even if it's blocked by Protect"); diff --git a/test/battle/terrain/electric.c b/test/battle/move_effect/electric_terrain.c similarity index 74% rename from test/battle/terrain/electric.c rename to test/battle/move_effect/electric_terrain.c index b3811d056c..bf6d2536e6 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/move_effect/electric_terrain.c @@ -19,25 +19,6 @@ SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asl } } -SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") -{ - GIVEN { - ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); - ASSUME(gItemsInfo[ITEM_ELECTRIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_ELECTRIC_TERRAIN); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ELECTRIC_SEED); } - OPPONENT(SPECIES_STUNFISK_GALAR) { 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("The opposing Stunfisk's type changed to Electric!"); - } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_ELECTRIC); - } -} - SINGLE_BATTLE_TEST("Electric Terrain increases power of Electric-type moves by 30/50 percent", s16 damage) { bool32 terrain; diff --git a/test/battle/move_effect/electrify.c b/test/battle/move_effect/electrify.c new file mode 100644 index 0000000000..71373cdd58 --- /dev/null +++ b/test/battle/move_effect/electrify.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Electrify makes the target's move Electric-type for the remainder of the turn"); +TO_DO_BATTLE_TEST("Electrify can change status moves to Electric-type"); // Test type immunity diff --git a/test/battle/move_effect/electro_ball.c b/test/battle/move_effect/electro_ball.c new file mode 100644 index 0000000000..a74445c00c --- /dev/null +++ b/test/battle/move_effect/electro_ball.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Electro Ball inflicts more damage the faster the user is compared to the target"); +TO_DO_BATTLE_TEST("Electro Ball considers speed modifiers"); // Stat modifiers, paralysis, Iron Ball, Abilities diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index ec68297ca0..dc7968b2a5 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -6,91 +6,56 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_ENCORE].effect == EFFECT_ENCORE); } -SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for player: Encore used before move") +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns: Encore used before move") { + struct BattlePokemon *encoreUser = NULL; + struct BattlePokemon *encoreTarget = NULL; + u32 speedPlayer, speedOpponent; + PARAMETRIZE { encoreUser = opponent; encoreTarget = player; speedPlayer = 10; speedOpponent = 20; } + PARAMETRIZE { encoreUser = player; encoreTarget = opponent; speedPlayer = 20; speedOpponent = 10; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(10); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(20); } + PLAYER(SPECIES_WOBBUFFET) { Speed(speedPlayer); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOpponent); } } WHEN { - TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); } - TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_CELEBRATE); } - // TURN { FORCED_MOVE(player); } - TURN { FORCED_MOVE(player); } - TURN { FORCED_MOVE(player); } - TURN { MOVE(player, MOVE_SPLASH); } + TURN { MOVE(encoreUser, MOVE_CELEBRATE); MOVE(encoreTarget, MOVE_CELEBRATE); } + TURN { MOVE(encoreUser, MOVE_ENCORE); MOVE(encoreTarget, MOVE_CELEBRATE); } + TURN { FORCED_MOVE(encoreTarget); } + TURN { FORCED_MOVE(encoreTarget); } + TURN { MOVE(encoreTarget, MOVE_SPLASH); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreUser); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, encoreUser); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, encoreTarget); } } SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for player: Encore used after move") { + struct BattlePokemon *encoreUser = NULL; + struct BattlePokemon *encoreTarget = NULL; + u32 speedPlayer, speedOpponent; + PARAMETRIZE { encoreUser = opponent; encoreTarget = player; speedPlayer = 20; speedOpponent = 10; } + PARAMETRIZE { encoreUser = player; encoreTarget = opponent; speedPlayer = 10; speedOpponent = 20; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(20); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } + PLAYER(SPECIES_WOBBUFFET) { Speed(speedPlayer); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOpponent); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_ENCORE); } - TURN { FORCED_MOVE(player); } - TURN { FORCED_MOVE(player); } - TURN { FORCED_MOVE(player); } - TURN { MOVE(player, MOVE_SPLASH); } + TURN { MOVE(encoreTarget, MOVE_CELEBRATE); MOVE(encoreUser, MOVE_ENCORE); } + TURN { FORCED_MOVE(encoreTarget); } + TURN { FORCED_MOVE(encoreTarget); } + TURN { FORCED_MOVE(encoreTarget); } + TURN { MOVE(encoreTarget, MOVE_SPLASH); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, player); - } -} - -SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for opponent: Encore used before move") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(20); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } - } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } - TURN { MOVE(player, MOVE_ENCORE); MOVE(opponent, MOVE_CELEBRATE); } - // TURN { FORCED_MOVE(opponent); } - TURN { FORCED_MOVE(opponent); } - TURN { FORCED_MOVE(opponent); } - TURN { MOVE(opponent, MOVE_SPLASH); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); - } -} - -SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for opponent: Encore used after move") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(10); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(20); } - } WHEN { - TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_ENCORE); } - TURN { FORCED_MOVE(opponent); } - TURN { FORCED_MOVE(opponent); } - TURN { FORCED_MOVE(opponent); } - TURN { MOVE(opponent, MOVE_SPLASH); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, encoreUser); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, encoreTarget); } } @@ -121,3 +86,44 @@ SINGLE_BATTLE_TEST("Encore overrides the chosen move if it occurs first") ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); } } + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_ENCORE); } + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + MESSAGE("Wobbuffet used Max Strike!"); + MESSAGE("The opposing Wobbuffet used Encore!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Max Flare!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after reverting") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; // yes, this speed is necessary + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; + } WHEN { + TURN { MOVE(player, MOVE_ARM_THRUST, gimmick: GIMMICK_DYNAMAX); } + TURN { MOVE(player, MOVE_ARM_THRUST); } + TURN { MOVE(player, MOVE_ARM_THRUST); } + TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Max Knuckle!"); + MESSAGE("Wobbuffet used Max Knuckle!"); + MESSAGE("Wobbuffet used Max Knuckle!"); + MESSAGE("The opposing Wobbuffet used Encore!"); + MESSAGE("Wobbuffet used Arm Thrust!"); + } +} + +TO_DO_BATTLE_TEST("Encore's effect ends if the encored move runs out of PP"); +TO_DO_BATTLE_TEST("Encore lasts for 2-6 turns (Gen 2-3)"); +TO_DO_BATTLE_TEST("Encore lasts for 4-8 turns (Gen 4)"); +TO_DO_BATTLE_TEST("Encore lasts for 3 turns (Gen 5+)"); +TO_DO_BATTLE_TEST("Encore randomly chooses an opponent target"); diff --git a/test/battle/move_effect/endeavor.c b/test/battle/move_effect/endeavor.c new file mode 100644 index 0000000000..72eeaccdaf --- /dev/null +++ b/test/battle/move_effect/endeavor.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Endeavor sets the the target's HP to the user's current HP"); +TO_DO_BATTLE_TEST("Endeavor doesn't fail if the user's HP is greater or equal than the target, but it doesn't heal the target"); +TO_DO_BATTLE_TEST("Endeavor fails on Ghost-type Pokémon"); diff --git a/test/battle/move_effect/endure.c b/test/battle/move_effect/endure.c new file mode 100644 index 0000000000..04f150d3ce --- /dev/null +++ b/test/battle/move_effect/endure.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Endure allows the user to survive any attack with 1 HP left"); + +SINGLE_BATTLE_TEST("Endure does not prevent multiple hits and stat changes occur at the end of the turn") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SCALE_SHOT].effect == EFFECT_MULTI_HIT); + ASSUME(gMovesInfo[MOVE_ENDURE].effect == EFFECT_ENDURE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + } WHEN { + TURN { MOVE(opponent, MOVE_ENDURE); MOVE(player, MOVE_SCALE_SHOT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENDURE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + MESSAGE("The Pokémon was hit 5 time(s)!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Defense fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's Speed rose!"); + } +} + +TO_DO_BATTLE_TEST("Endure's success rate decreases for every consecutively used turn"); +TO_DO_BATTLE_TEST("Endure uses the same counter as Protect"); +TO_DO_BATTLE_TEST("Endure doesn't trigger effects that require damage to be done to the Pokémon (Gen 2-4)"); // Eg. Rough Skin +TO_DO_BATTLE_TEST("Endure triggers effects that require damage to be done to the Pokémon (Gen 5+)"); // Eg. Rough Skin +TO_DO_BATTLE_TEST("Endure doesn't protect against Future Sight (Gen 2-4)"); +TO_DO_BATTLE_TEST("Endure protects against Future Sight (Gen 5+)"); diff --git a/test/battle/move_effect/entrainment.c b/test/battle/move_effect/entrainment.c new file mode 100644 index 0000000000..b43f6dcbc1 --- /dev/null +++ b/test/battle/move_effect/entrainment.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Entrainment changes the target's Ability to match the user's"); +TO_DO_BATTLE_TEST("Entrainment fails if the user's ability has cantBeCopied flag"); +TO_DO_BATTLE_TEST("Entrainment fails if the targets's ability has cantBeOverwritten flag"); diff --git a/test/battle/move_effect/evasion_down.c b/test/battle/move_effect/evasion_down.c new file mode 100644 index 0000000000..ecc0db135b --- /dev/null +++ b/test/battle/move_effect/evasion_down.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Sweet Scent lowers evasion by 1 stage (Gen 2-5)"); diff --git a/test/battle/move_effect/evasion_down_2.c b/test/battle/move_effect/evasion_down_2.c new file mode 100644 index 0000000000..7584406e4c --- /dev/null +++ b/test/battle/move_effect/evasion_down_2.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Sweet Scent lowers evasion by 1 stage (Gen 6+)"); diff --git a/test/battle/move_effect/evasion_up.c b/test/battle/move_effect/evasion_up.c index 7058694e9d..48722a7596 100644 --- a/test/battle/move_effect/evasion_up.c +++ b/test/battle/move_effect/evasion_up.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_DOUBLE_TEAM].effect == EFFECT_EVASION_UP); } -SINGLE_BATTLE_TEST("Double Team raises Evasion") +SINGLE_BATTLE_TEST("Double Team raises Evasion by 1 stage") { PASSES_RANDOMLY(gMovesInfo[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { diff --git a/test/battle/move_effect/evasion_up_2.c b/test/battle/move_effect/evasion_up_2.c new file mode 100644 index 0000000000..cd5cb543a9 --- /dev/null +++ b/test/battle/move_effect/evasion_up_2.c @@ -0,0 +1,28 @@ +#include "global.h" +#include "test/battle.h" + +// There's no move with EFFECT_EVASION_UP_2 effect. Below is a theoretical test. + +/* +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_X].effect == EFFECT_EVASION_UP_2); +} + +SINGLE_BATTLE_TEST("Double Team raises Evasion by 1 stage") +{ + PASSES_RANDOMLY(gMovesInfo[MOVE_SCRATCH].accuracy * 3 / 5, 100, RNG_ACCURACY); + GIVEN { + ASSUME(gMovesInfo[MOVE_SCRATCH].accuracy == 100); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_X); MOVE(opponent, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_X, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's evasiveness sharply rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); + } +} +*/ diff --git a/test/battle/move_effect/expanding_force.c b/test/battle/move_effect/expanding_force.c new file mode 100644 index 0000000000..74b78fdd86 --- /dev/null +++ b/test/battle/move_effect/expanding_force.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Expanding Force's power increases by 50% if the user is affected by Psychic Terrain"); diff --git a/test/battle/move_effect/extreme_evoboost.c b/test/battle/move_effect/extreme_evoboost.c new file mode 100644 index 0000000000..c43a6f7374 --- /dev/null +++ b/test/battle/move_effect/extreme_evoboost.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Extreme Evoboost increases the user's Attack, Defense, Special Attack, Special Defense, and Speed stats by 2 stages each"); diff --git a/test/battle/terrain/grassy.c b/test/battle/move_effect/grassy_terrain.c similarity index 80% rename from test/battle/terrain/grassy.c rename to test/battle/move_effect/grassy_terrain.c index b247933dd2..90e878b6dd 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/move_effect/grassy_terrain.c @@ -18,25 +18,6 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") } } -SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") -{ - GIVEN { - ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffect == HOLD_EFFECT_SEEDS); - ASSUME(gItemsInfo[ITEM_GRASSY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_GRASSY_TERRAIN); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSY_SEED); } - OPPONENT(SPECIES_STUNFISK_GALAR) { 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("The opposing Stunfisk's type changed to Grass!"); - } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_GRASS); - } -} - SINGLE_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 percent", s16 damage) { bool32 terrain; diff --git a/test/battle/move_effect/hit_set_remove_terrain.c b/test/battle/move_effect/hit_set_remove_terrain.c index a48d316d3f..feeca62560 100644 --- a/test/battle/move_effect/hit_set_remove_terrain.c +++ b/test/battle/move_effect/hit_set_remove_terrain.c @@ -83,7 +83,7 @@ SINGLE_BATTLE_TEST("Ice Spinner doesn't fail if there is no terrain on the field } } -AI_SINGLE_BATTLE_TEST("Steel Roller will not be chosen by the AI if it might fail") +AI_SINGLE_BATTLE_TEST("AI will not choose Steel Roller if it might fail") { u32 move; @@ -104,7 +104,7 @@ AI_SINGLE_BATTLE_TEST("Steel Roller will not be chosen by the AI if it might fai } } -AI_SINGLE_BATTLE_TEST("Ice Spinner can be chosen by the AI regardless if there is a terrain or not") +AI_SINGLE_BATTLE_TEST("AI will can choose Ice Spinner regardless if there is a terrain or not") { u32 move; @@ -124,35 +124,3 @@ AI_SINGLE_BATTLE_TEST("Ice Spinner can be chosen by the AI regardless if there i } } } - -SINGLE_BATTLE_TEST("Steel Roller and Ice Spinner reverts typing on Mimicry users") -{ - u32 j; - static const u16 terrainMoves[] = - { - MOVE_ELECTRIC_TERRAIN, - MOVE_PSYCHIC_TERRAIN, - MOVE_GRASSY_TERRAIN, - MOVE_MISTY_TERRAIN, - }; - - u16 terrainMove = MOVE_NONE; - u16 removeTerrainMove = MOVE_NONE; - - for (j = 0; j < ARRAY_COUNT(terrainMoves); j++) - { - PARAMETRIZE { removeTerrainMove = MOVE_STEEL_ROLLER; terrainMove = terrainMoves[j]; } - PARAMETRIZE { removeTerrainMove = MOVE_ICE_SPINNER; terrainMove = terrainMoves[j]; } - } - - GIVEN { - ASSUME(gSpeciesInfo[SPECIES_STUNFISK_GALAR].types[1] == TYPE_STEEL); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } - } WHEN { - TURN { MOVE(opponent, terrainMove); MOVE(player, removeTerrainMove); } - TURN { MOVE(player, MOVE_TOXIC); } - } SCENE { - MESSAGE("It doesn't affect the opposing Stunfisk…"); - } -} diff --git a/test/battle/terrain/misty.c b/test/battle/move_effect/misty_terrain.c similarity index 78% rename from test/battle/terrain/misty.c rename to test/battle/move_effect/misty_terrain.c index e43cf4a253..b96f0c650d 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/move_effect/misty_terrain.c @@ -19,25 +19,6 @@ SINGLE_BATTLE_TEST("Misty Terrain protects grounded battlers from non-volatile s } } -SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") -{ - GIVEN { - ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffect == HOLD_EFFECT_SEEDS); - ASSUME(gItemsInfo[ITEM_MISTY_SEED].holdEffectParam == HOLD_EFFECT_PARAM_MISTY_TERRAIN); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_MISTY_SEED); } - OPPONENT(SPECIES_STUNFISK_GALAR) { 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. Def of Wobbuffet rose!"); - ABILITY_POPUP(opponent); - MESSAGE("The opposing Stunfisk's type changed to Fairy!"); - } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_FAIRY); - } -} - SINGLE_BATTLE_TEST("Misty Terrain does not increase the power of Fairy-type moves", s16 damage) { bool32 terrain; diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index e2331efbf7..802c4f455e 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -200,30 +200,6 @@ DOUBLE_BATTLE_TEST("Scale Shot does not corrupt the next turn move used") } } -SINGLE_BATTLE_TEST("Endure does not prevent multiple hits and stat changes occur at the end of the turn") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_SCALE_SHOT].effect == EFFECT_MULTI_HIT); - ASSUME(gMovesInfo[MOVE_ENDURE].effect == EFFECT_ENDURE); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1); } - } WHEN { - TURN { MOVE(opponent, MOVE_ENDURE); MOVE(player, MOVE_SCALE_SHOT); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_ENDURE, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("The Pokémon was hit 5 time(s)!"); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's Defense fell!"); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet's Speed rose!"); - } -} - SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after the 4th hit of Loaded Dice") { PASSES_RANDOMLY(50, 100, RNG_LOADED_DICE); diff --git a/test/battle/terrain/psychic.c b/test/battle/move_effect/psychic_terrain.c similarity index 84% rename from test/battle/terrain/psychic.c rename to test/battle/move_effect/psychic_terrain.c index 9ac88f29da..b85653a0be 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/move_effect/psychic_terrain.c @@ -18,25 +18,6 @@ SINGLE_BATTLE_TEST("Psychic Terrain protects grounded battlers from priority mov } } -SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") -{ - GIVEN { - ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffect == HOLD_EFFECT_SEEDS); - ASSUME(gItemsInfo[ITEM_PSYCHIC_SEED].holdEffectParam == HOLD_EFFECT_PARAM_PSYCHIC_TERRAIN); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PSYCHIC_SEED); } - OPPONENT(SPECIES_STUNFISK_GALAR) { 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. Def of Wobbuffet rose!"); - ABILITY_POPUP(opponent); - MESSAGE("The opposing Stunfisk's type changed to Psychic!"); - } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_PSYCHIC); - } -} - SINGLE_BATTLE_TEST("Psychic Terrain increases power of Psychic-type moves by 30/50 percent", s16 damage) { bool32 terrain; diff --git a/test/battle/terrain/starting_terrain.c b/test/battle/starting_status/terrain.c similarity index 100% rename from test/battle/terrain/starting_terrain.c rename to test/battle/starting_status/terrain.c From 8d818445d29a820829e28d04579f492b0d35233c Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:29:45 -0500 Subject: [PATCH 531/544] Fixed ace switching bugs (#5922) --- src/battle_ai_switch_items.c | 19 +++++------- test/battle/ai/ai_switching.c | 58 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index b41daa741b..f6e0facb12 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -917,7 +917,6 @@ bool32 ShouldSwitch(u32 battler) struct Pokemon *party; s32 i; s32 availableToSwitch; - bool32 hasAceMon = FALSE; if (gBattleMons[battler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) return FALSE; @@ -966,7 +965,6 @@ bool32 ShouldSwitch(u32 battler) continue; if (IsAceMon(battler, i)) { - hasAceMon = TRUE; continue; } @@ -974,12 +972,7 @@ bool32 ShouldSwitch(u32 battler) } if (availableToSwitch == 0) - { - if (hasAceMon) // If the ace mon is the only available mon, use it - availableToSwitch++; - else return FALSE; - } // NOTE: The sequence of the below functions matter! Do not change unless you have carefully considered the outcome. // Since the order is sequencial, and some of these functions prompt switch to specific party members. @@ -1771,7 +1764,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, { int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE; int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE, trapperId = PARTY_SIZE; - int i, j, aliveCount = 0, bits = 0; + int i, j, aliveCount = 0, bits = 0, aceMonCount = 0; s32 defensiveMonHitKOThreshold = 3; // 3HKO threshold that candidate defensive mons must exceed s32 playerMonHP = gBattleMons[opposingBattler].hp, maxDamageDealt = 0, damageDealt = 0; u32 aiMove, hitsToKOAI, maxHitsToKO = 0; @@ -1794,6 +1787,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else if (IsAceMon(battler, i)) { aceMonId = i; + aceMonCount++; continue; } else @@ -1940,7 +1934,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, else if (batonPassId != PARTY_SIZE) return batonPassId; } // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. - if (aceMonId != PARTY_SIZE && IsSwitchOutEffect(gMovesInfo[gLastUsedMove].effect)) + if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount && IsSwitchOutEffect(gMovesInfo[gLastUsedMove].effect)) return aceMonId; return PARTY_SIZE; @@ -2018,7 +2012,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) // This all handled by the GetBestMonIntegrated function if the AI_FLAG_SMART_MON_CHOICES flag is set else { - s32 i, aliveCount = 0; + s32 i, aliveCount = 0, aceMonCount = 0; u32 invalidMons = 0, aceMonId = PARTY_SIZE; // Get invalid slots ids. for (i = firstId; i < lastId; i++) @@ -2035,6 +2029,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) else if (IsAceMon(battler, i)) // Save Ace Pokemon for last. { aceMonId = i; + aceMonCount++; invalidMons |= 1u << i; } else @@ -2054,8 +2049,8 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) if (bestMonId != PARTY_SIZE) return bestMonId; - // If ace mon is the last available Pokemon and switch move was used - switch to the mon. - if (aceMonId != PARTY_SIZE) + // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. + if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount && IsSwitchOutEffect(gMovesInfo[gLastUsedMove].effect)) return aceMonId; return PARTY_SIZE; diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 7f2368261d..45210efea6 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -909,3 +909,61 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI correctly handles abilities TURN { MOVE(player, MOVE_WATER_GUN); EXPECT_MOVE(opponent, MOVE_ABSORB); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI won't switch out if Yawn'd with only Ace mon remaining") +{ + u32 aceFlag; + PARAMETRIZE{ aceFlag = 0; } + PARAMETRIZE{ aceFlag = AI_FLAG_ACE_POKEMON; } + GIVEN { + ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | aceFlag | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_SLOWKING) { Moves(MOVE_YAWN, MOVE_CONFUSION, MOVE_POWER_GEM, MOVE_WATER_PULSE); Item(ITEM_LEFTOVERS); } + OPPONENT(SPECIES_SCOLIPEDE) { Moves(MOVE_POISON_TAIL); } + OPPONENT(SPECIES_ABSOL) { Moves(MOVE_KNOCK_OFF, MOVE_CRUNCH); } + } WHEN { + TURN { MOVE(player, MOVE_YAWN); EXPECT_MOVE(opponent, MOVE_POISON_TAIL); } + if (aceFlag) + TURN { MOVE(player, MOVE_POWER_GEM); EXPECT_MOVE(opponent, MOVE_POISON_TAIL); } + else + TURN { MOVE(player, MOVE_POWER_GEM); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI won't switch in ace mon after U-Turn if other options available") +{ + u32 aceFlag; + PARAMETRIZE{ aceFlag = 0; } + PARAMETRIZE{ aceFlag = AI_FLAG_ACE_POKEMON; } + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | aceFlag | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_SMART_SWITCHING); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_SURF); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_U_TURN); } + OPPONENT(SPECIES_NUMEL) { Level(5); Moves(MOVE_SPLASH); } + OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_BUG_BITE); } + } WHEN { + if (aceFlag) + TURN { EXPECT_MOVE(opponent, MOVE_U_TURN); EXPECT_SEND_OUT(opponent, 1); MOVE(player, MOVE_SURF); } + else + TURN { EXPECT_MOVE(opponent, MOVE_U_TURN); EXPECT_SEND_OUT(opponent, 2); MOVE(player, MOVE_SURF); } + } +} + +AI_SINGLE_BATTLE_TEST("Switch AI: AI won't switch in ace mon after U-Turn if other options available") +{ + u32 aceFlag; + PARAMETRIZE{ aceFlag = 0; } + PARAMETRIZE{ aceFlag = AI_FLAG_ACE_POKEMON; } + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | aceFlag | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_SURF); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_U_TURN); } + OPPONENT(SPECIES_NUMEL) { Level(5); Moves(MOVE_SPLASH); } + OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_BUG_BITE); } + } WHEN { + if (aceFlag) + TURN { EXPECT_MOVE(opponent, MOVE_U_TURN); EXPECT_SEND_OUT(opponent, 1); MOVE(player, MOVE_SURF); } + else + TURN { EXPECT_MOVE(opponent, MOVE_U_TURN); EXPECT_SEND_OUT(opponent, 2); MOVE(player, MOVE_SURF); } + } +} From 89699939de8998c67611122175f75cc7255ec097 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 1 Jan 2025 16:17:49 -0300 Subject: [PATCH 532/544] Version 1.10.1 --- .../ISSUE_TEMPLATE/01_battle_engine_bugs.yaml | 3 +- .../ISSUE_TEMPLATE/02_battle_ai_issues.yaml | 3 +- .github/ISSUE_TEMPLATE/04_other_errors.yaml | 3 +- CHANGELOG.md | 1 + README.md | 2 +- docs/SUMMARY.md | 1 + docs/changelogs/1.10.x/1.10.1.md | 140 ++++++++++++++++++ include/constants/expansion.h | 4 +- 8 files changed, 151 insertions(+), 6 deletions(-) create mode 100644 docs/changelogs/1.10.x/1.10.1.md diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 0a3eff0e43..88c5cabd28 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.10.0 (Latest release) + - 1.10.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.10.0 - 1.9.4 - 1.9.3 - 1.9.2 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 4b8eec3a43..e49c54e756 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.10.0 (Latest release) + - 1.10.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.10.0 - 1.9.4 - 1.9.3 - 1.9.2 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index 54335ca5e4..02bc0399b1 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.10.0 (Latest release) + - 1.10.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.10.0 - 1.9.4 - 1.9.3 - 1.9.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 13d6e4f4eb..963e05d7bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Pokeemerald-Expansion Changelogs ## 1.10.x +- **[Version 1.10.1](docs/changelogs/1.10.x/1.10.1.md) - 🧹 Bugfix Release** - **[Version 1.10.0](docs/changelogs/1.10.x/1.10.0.md) - ✨ Feature Release** ## 1.9.x diff --git a/README.md b/README.md index 4c6dff9fdd..70317fac5c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The main advantage of using vanilla pokeemerald as a base is being able to link If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` -Based off RHH's pokeemerald-expansion 1.10.0 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.10.1 https://github.com/rh-hideout/pokeemerald-expansion/ ``` #### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there. diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 21584f3ad7..fe13ea72ee 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -20,6 +20,7 @@ - [How to use the Testing System](tutorials/how_to_testing_system.md) - [Changelog](./CHANGELOG.md) - [1.10.x]() + - [Version 1.10.1](changelogs/1.10.x/1.10.1.md) - [Version 1.10.0](changelogs/1.10.x/1.10.0.md) - [1.9.x]() - [Version 1.9.4](changelogs/1.9.x/1.9.4.md) diff --git a/docs/changelogs/1.10.x/1.10.1.md b/docs/changelogs/1.10.x/1.10.1.md new file mode 100644 index 0000000000..4eb4ea8e0d --- /dev/null +++ b/docs/changelogs/1.10.x/1.10.1.md @@ -0,0 +1,140 @@ +# Version 1.10.1 + +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.10.1`. +``` + +## 🧬 General 🧬 +### Added +* Added `FONT_SHORT_NARROWER` by @AsparagusEduardo (commit originally by @agsmgmaster64) in [#5101](https://github.com/rh-hideout/pokeemerald-expansion/pull/5101) + * Narrower font tweaks and font fitting fixes by @kittenchilly in [#5782](https://github.com/rh-hideout/pokeemerald-expansion/pull/5782) + +### Changed +* Adds Thief/Covet config to send stolen item to bag and Pickup config to pickup user's item in wild battles by @PhallenTree in [#5829](https://github.com/rh-hideout/pokeemerald-expansion/pull/5829) + +### Fixed +* trainerproc: Fix showing incorrect error context by @mrgriffin in [#5769](https://github.com/rh-hideout/pokeemerald-expansion/pull/5769) +* Fixes UB in caps.c by @AlexOn1ine in [#5878](https://github.com/rh-hideout/pokeemerald-expansion/pull/5878) + +## 🗺️ Overworld 🗺️ +### Fixed +* Fix Off-by-One Error in Move Relearner by @iriv24 and @luckytyphlosion in [#5778](https://github.com/rh-hideout/pokeemerald-expansion/pull/5778) +* Fix HGSS dex sort orders working incorrectly by @ravepossum in [#5790](https://github.com/rh-hideout/pokeemerald-expansion/pull/5790) +* Egg cycle length fix by @hedara90 and @/BolaDeQueijo on discord discovered the issue. in [#5828](https://github.com/rh-hideout/pokeemerald-expansion/pull/5828) +* Fixed givemon not respecting perfect IVs for species by @AsparagusEduardo in [#5873](https://github.com/rh-hideout/pokeemerald-expansion/pull/5873) + - Also removed redundant `RemoveIVIndexFromList` function in `src/daycare.c`, so it uses `src/pokemon.c`'s instead +* Fix Script Scrollable Multichoice Arrow Positions by @ghoulslash in [#5884](https://github.com/rh-hideout/pokeemerald-expansion/pull/5884) + +## 🐉 Pokémon 🐉 +### Changed +* Updated Ogerpon, Enamorus and Sinistcha sprites by @kittenchilly in [#5793](https://github.com/rh-hideout/pokeemerald-expansion/pull/5793) +* New Enamorus-Incarnate sprite by @kittenchilly in [#5797](https://github.com/rh-hideout/pokeemerald-expansion/pull/5797) + +### Fixed +* Fixes Wormadam define for teachable learnset script by @AlexOn1ine in [#5783](https://github.com/rh-hideout/pokeemerald-expansion/pull/5783) +* Fix "PlantCloak" references by @AsparagusEduardo in [#5821](https://github.com/rh-hideout/pokeemerald-expansion/pull/5821) +* Misc pokemon sprite fixes by @Cafeei in [#5846](https://github.com/rh-hideout/pokeemerald-expansion/pull/5846) + +## ⚔️ Battle General ⚔️ +### Changed +* Adds Thief/Covet config to send stolen item to bag and Pickup config to pickup user's item in wild battles by @PhallenTree in [#5829](https://github.com/rh-hideout/pokeemerald-expansion/pull/5829) + +### Fixed +* Fixes items preventing other switch in effects by @AlexOn1ine in [#5732](https://github.com/rh-hideout/pokeemerald-expansion/pull/5732) +* Fix Pokemon with No Guard failing OHKO Moves into Semi-Invulnerable Pokemon by @iriv24 and @Cafeei in [#5779](https://github.com/rh-hideout/pokeemerald-expansion/pull/5779) +* Fix move category and category icon when PSS is off by @ravepossum in [#5786](https://github.com/rh-hideout/pokeemerald-expansion/pull/5786) +* Added the missing config to use new terrains by @hedara90 in [#5792](https://github.com/rh-hideout/pokeemerald-expansion/pull/5792) +* Fixes Shed Tail substitute health by @AlexOn1ine in [#5826](https://github.com/rh-hideout/pokeemerald-expansion/pull/5826) +* `B_LAST_USED_BALL` and `.importance` by @AERDU in [#5834](https://github.com/rh-hideout/pokeemerald-expansion/pull/5834) + - prevents `B_LAST_USED_BALL` from removing balls with `.importance = 1` +* Fixes Quash-affected battlers having the wrong order for End Turn effects by @PhallenTree in [#5838](https://github.com/rh-hideout/pokeemerald-expansion/pull/5838) +* Fixes Cotton Down and Gulp Missile not interacting correctly with stat reduction prevention effects by @PhallenTree in [#5841](https://github.com/rh-hideout/pokeemerald-expansion/pull/5841) +* Fix Hit Escape moves giving Exp to the mon that switches in by @kittenchilly in [#5844](https://github.com/rh-hideout/pokeemerald-expansion/pull/5844) +* Fixed Wish triggering Disguise by @AsparagusEduardo in [#5860](https://github.com/rh-hideout/pokeemerald-expansion/pull/5860) +* Fixed `MOVE_EFFECT_FREEZE_OR_FROSTBITE` not being usable in battle scripts by @AsparagusEduardo in [#5859](https://github.com/rh-hideout/pokeemerald-expansion/pull/5859) +* Fixed Ally Switch breaking Illusion by @AsparagusEduardo in [#5879](https://github.com/rh-hideout/pokeemerald-expansion/pull/5879) +* Fixes gen3 Style Shadows out of place by @AlexOn1ine in [#5880](https://github.com/rh-hideout/pokeemerald-expansion/pull/5880) +* Fix Salt Cure script by @ghoulslash in [#5895](https://github.com/rh-hideout/pokeemerald-expansion/pull/5895) +* Fixes Eject Pack / Intimidate issue by @AlexOn1ine in [#5902](https://github.com/rh-hideout/pokeemerald-expansion/pull/5902) +* Adds Generational config for Magic Guard (Fix for Gen4+) by @AlexOn1ine in [#5893](https://github.com/rh-hideout/pokeemerald-expansion/pull/5893) +* Fixes Stance Change, Sleep Talk interaction by @AlexOn1ine in [#5909](https://github.com/rh-hideout/pokeemerald-expansion/pull/5909) +* Fixes Round doubling it's BP if previous Round failed by @AlexOn1ine in [#5907](https://github.com/rh-hideout/pokeemerald-expansion/pull/5907) + +## 🤹 Moves 🤹 +### Fixed +* Fixes absorb still draining HP when flinched by @AlexOn1ine in [#5814](https://github.com/rh-hideout/pokeemerald-expansion/pull/5814) +* Fixes Tidy Up by @AlexOn1ine in [#5819](https://github.com/rh-hideout/pokeemerald-expansion/pull/5819) +* Ally Switch extra battlerId tracking by @ghoulslash in [#5823](https://github.com/rh-hideout/pokeemerald-expansion/pull/5823) +* Sheer Force fix and move effect cleanup by @AlexOn1ine in [#5812](https://github.com/rh-hideout/pokeemerald-expansion/pull/5812) +* New U-turn animation to fix visibility by @AlexOn1ine in [#5910](https://github.com/rh-hideout/pokeemerald-expansion/pull/5910) + +## 🧶 Items 🧶 +### Fixed +* Prevent Key Items that open other menus from causing a crash if registered and used from the field by @iriv24 in [#5810](https://github.com/rh-hideout/pokeemerald-expansion/pull/5810) +* Fixes Clear Amulet displaying the wrong battler and Starting Status displaying the wrong message by @PhallenTree in [#5831](https://github.com/rh-hideout/pokeemerald-expansion/pull/5831) +* Fixes Room Service lowering the opposite mon in specific scenario by @AlexOn1ine in [#5827](https://github.com/rh-hideout/pokeemerald-expansion/pull/5827) + +## 🤖 Battle AI 🤖 +### Fixed +* Fixed ace switching bugs by @Pawkkie and @iriv24 for their diligent testing and debugging support in [#5922](https://github.com/rh-hideout/pokeemerald-expansion/pull/5922) + +## 🧹 Other Cleanup 🧹 +* Converted Stance Change to proper Form Change + Tests by @AsparagusEduardo in [#5749](https://github.com/rh-hideout/pokeemerald-expansion/pull/5749) +* Removed testing strings for automatic line breaks by @hedara90 in [#5757](https://github.com/rh-hideout/pokeemerald-expansion/pull/5757) +* Added NBSP and up+down arrows to all fonts by @hedara90 in [#5767](https://github.com/rh-hideout/pokeemerald-expansion/pull/5767) + - Use `~` or `{NBSP}` to insert a non-breaking space into a string. +* Palette cleanup by @hedara90 in [#5661](https://github.com/rh-hideout/pokeemerald-expansion/pull/5661) + - Resized some move anim palettes from 256 to 16 +* Replace power checks with IS_MOVE_STATUS by @Bassoonian and @AsparagusEduardo in [#5820](https://github.com/rh-hideout/pokeemerald-expansion/pull/5820) +* Changes Various defines to an Enum by @AsparagusEduardo in [#5840](https://github.com/rh-hideout/pokeemerald-expansion/pull/5840) +* Fix `IS_MOVE_STATUS` regression by @Bassoonian in [#5848](https://github.com/rh-hideout/pokeemerald-expansion/pull/5848) +* Remove unused various by @Bassoonian in [#5851](https://github.com/rh-hideout/pokeemerald-expansion/pull/5851) +* Removed redundant call to FillPalBufferBlack in FRLG whiteout sequence by @AsparagusEduardo in [#5854](https://github.com/rh-hideout/pokeemerald-expansion/pull/5854) +* Improve README.md by @AsparagusEduardo in [#5640](https://github.com/rh-hideout/pokeemerald-expansion/pull/5640) +* Fix wrong value for NUM_MOVE_EFFECTS by @Bassoonian in [#5913](https://github.com/rh-hideout/pokeemerald-expansion/pull/5913) +* Renamed OW type effectiveness function for clarity by @AsparagusEduardo in [#5917](https://github.com/rh-hideout/pokeemerald-expansion/pull/5917) + - Renamed `GetTypeEffectiveness` to `GetOverworldTypeEffectiveness`. + +## 🧪 Test Runner 🧪 +### Changed +* Gravity fix + Sky Drop Test by @ghoulslash in [#5780](https://github.com/rh-hideout/pokeemerald-expansion/pull/5780) +* Added missing Belch tests by @AsparagusEduardo in [#5881](https://github.com/rh-hideout/pokeemerald-expansion/pull/5881) +* Added missing Move Effect TODO tests - Volume D by @AsparagusEduardo in [#5887](https://github.com/rh-hideout/pokeemerald-expansion/pull/5887) +* Comment out Ally Switch Illusion test by @AsparagusEduardo in [#5901](https://github.com/rh-hideout/pokeemerald-expansion/pull/5901) +* Fixed leaking tasks not showing up in summary by @AsparagusEduardo in [#5890](https://github.com/rh-hideout/pokeemerald-expansion/pull/5890) +* Setting Battle configs during tests by @AsparagusEduardo and @SBird1337, @mrgriffin in [#5803](https://github.com/rh-hideout/pokeemerald-expansion/pull/5803) +* Speed up tests in headless mode by @AsparagusEduardo and @SBird1337 for the original fast intro code. in [#5889](https://github.com/rh-hideout/pokeemerald-expansion/pull/5889) + - This introduced the config option `B_FAST_INTRO_NO_SLIDE` which removes the sliding into for battles. +* Added missing Move Effect TODO tests - Volume E by @AsparagusEduardo in [#5915](https://github.com/rh-hideout/pokeemerald-expansion/pull/5915) + +### Fixed +* Fix test `TIMEOUT` messaging in summary by @AsparagusEduardo in [#5772](https://github.com/rh-hideout/pokeemerald-expansion/pull/5772) +* Fix octolock + defiant by @ghoulslash in [#5781](https://github.com/rh-hideout/pokeemerald-expansion/pull/5781) +* Added missing tests + Fix Coaching/Crafty Shield interaction by @AsparagusEduardo in [#5796](https://github.com/rh-hideout/pokeemerald-expansion/pull/5796) +* Fixed TODO tests not showing up when filtering by name by @AsparagusEduardo in [#5894](https://github.com/rh-hideout/pokeemerald-expansion/pull/5894) + +## 📚 Documentation 📚 +* Fixed changelog links to changelog 1.10 by @AsparagusEduardo in [#5758](https://github.com/rh-hideout/pokeemerald-expansion/pull/5758) +* Added scope document and made changes to pull request template by @pkmnsnfrn and @Pawkkie and arguably the entire senate in [#5706](https://github.com/rh-hideout/pokeemerald-expansion/pull/5706) +* Added instructions in PR template to make crediting people more clear by @pkmnsnfrn and @AsparagusEduardo made changes to my text in [#5755](https://github.com/rh-hideout/pokeemerald-expansion/pull/5755) +* Fix website not showing the "How to add mon" 1.10 tutorial by @AsparagusEduardo in [#5813](https://github.com/rh-hideout/pokeemerald-expansion/pull/5813) +* Install instructions by @hedara90 in [#5876](https://github.com/rh-hideout/pokeemerald-expansion/pull/5876) +* Change install.md to mention make debug instead of DINFO=1 by @ravepossum in [#5882](https://github.com/rh-hideout/pokeemerald-expansion/pull/5882) +* Backport changes from the wiki by @AsparagusEduardo in [#5900](https://github.com/rh-hideout/pokeemerald-expansion/pull/5900) +* Improve README.md by @AsparagusEduardo in [#5640](https://github.com/rh-hideout/pokeemerald-expansion/pull/5640) + +## 📦 Branch Synchronisation 📦 +### pret +* 20th of December in [#5845](https://github.com/rh-hideout/pokeemerald-expansion/pull/5845) + * Fix recorded battle link player loops by @AsparagusEduardo in [pret#2071](https://github.com/pret/pokeemerald/pull/2071) + * Added `POKEMART_LIST_END` to avoid users accidentally removing it by @AsparagusEduardo in [pret#1947](https://github.com/pret/pokeemerald/pull/1947) + * Fixed brace style inconsistencies by @AsparagusEduardo in [pret#2072](https://github.com/pret/pokeemerald/pull/2072) + * remove `sBirchSpeechPlatformBlackPal` by @DizzyEggg in [pret#2075](https://github.com/pret/pokeemerald/pull/2075) + + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.10.0...expansion/1.10.1 + + + diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 24d5ed3853..b127c99ecc 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,13 +1,13 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.10.0 +// Last version: 1.10.1 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 10 #define EXPANSION_VERSION_PATCH 1 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE FALSE +#define EXPANSION_TAGGED_RELEASE TRUE #endif From e040dcb0b4be4706289d5fd4ac210c68a9c2903e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 1 Jan 2025 16:20:40 -0300 Subject: [PATCH 533/544] Begin 1.10.2 cycle --- include/constants/expansion.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/constants/expansion.h b/include/constants/expansion.h index b127c99ecc..1a3ba19065 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -4,10 +4,10 @@ // Last version: 1.10.1 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 10 -#define EXPANSION_VERSION_PATCH 1 +#define EXPANSION_VERSION_PATCH 2 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE TRUE +#define EXPANSION_TAGGED_RELEASE FALSE #endif From 92c0039a238735e254f1610edee1ba33b64596b3 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 1 Jan 2025 15:40:29 -0500 Subject: [PATCH 534/544] Cleanup fix from 5922 (#5927) --- src/battle_ai_switch_items.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index f6e0facb12..db0070da8e 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -964,9 +964,7 @@ bool32 ShouldSwitch(u32 battler) if (i == gBattleStruct->monToSwitchIntoId[battlerIn2]) continue; if (IsAceMon(battler, i)) - { continue; - } availableToSwitch++; } From b7e945fbfb7a12f9dadfb0a6fd7fea672c4703ee Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 1 Jan 2025 21:41:42 +0100 Subject: [PATCH 535/544] Reverts wrongly done partial Eject Pack fix (#5928) --- data/battle_scripts_1.s | 7 ------- include/battle_scripts.h | 1 - src/battle_script_commands.c | 10 ++-------- test/battle/hold_effect/eject_pack.c | 7 ++++--- 4 files changed, 6 insertions(+), 19 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index dba914924d..bc2f4dea3c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9634,13 +9634,6 @@ BattleScript_EjectPackActivates:: jumpifcantswitch BS_SCRIPTING, BattleScript_EjectButtonEnd goto BattleScript_EjectPackActivate_Ret -BattleScript_EjectPackMissesTiming:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_EJECTBUTTONACTIVATE - waitmessage B_WAIT_TIME_LONG - removeitem BS_SCRIPTING - return - BattleScript_DarkTypePreventsPrankster:: attackstring ppreduce diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 158dfb5dc3..1404a40718 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -421,7 +421,6 @@ extern const u8 BattleScript_EjectButtonActivates[]; extern const u8 BattleScript_EjectPackActivate_Ret[]; extern const u8 BattleScript_EjectPackActivate_End2[]; extern const u8 BattleScript_EjectPackActivates[]; -extern const u8 BattleScript_EjectPackMissesTiming[]; extern const u8 BattleScript_MentalHerbCureRet[]; extern const u8 BattleScript_MentalHerbCureEnd2[]; extern const u8 BattleScript_TerrainPreventsEnd2[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3c719049a6..82d941bbda 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6471,19 +6471,13 @@ static void Cmd_moveend(void) } else // Eject Pack { - if (gBattleResources->flags->flags[gBattlerTarget] & RESOURCE_FLAG_EMERGENCY_EXIT) - { - gBattlescriptCurrInstr = BattleScript_EjectPackMissesTiming; - gProtectStructs[battler].statFell = FALSE; - } - else + if (!(gBattleResources->flags->flags[gBattlerTarget] & RESOURCE_FLAG_EMERGENCY_EXIT)) { gBattlescriptCurrInstr = BattleScript_EjectPackActivates; AI_DATA->ejectPackSwitch = TRUE; - // Are these 2 lines below needed? - gProtectStructs[battler].statFell = FALSE; gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage = TRUE; } + gProtectStructs[battler].statFell = FALSE; } break; // Only the fastest Eject item activates } diff --git a/test/battle/hold_effect/eject_pack.c b/test/battle/hold_effect/eject_pack.c index b3a2d34b63..0d2696392f 100644 --- a/test/battle/hold_effect/eject_pack.c +++ b/test/battle/hold_effect/eject_pack.c @@ -76,12 +76,13 @@ SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Emergency } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OVERHEAT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet is switched out with the Eject Pack!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet is switched out with the Eject Pack!"); + } ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT); } THEN { EXPECT(player->species == SPECIES_WOBBUFFET); - EXPECT(player->item == ITEM_NONE); EXPECT(opponent->species == SPECIES_WYNAUT); } } From 875f0f7436773ee7ef0690a661f522ffda562848 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 1 Jan 2025 21:46:42 +0100 Subject: [PATCH 536/544] Fixes Trainer Slide messages causing corruption for recoil damage (#5926) --- src/battle_script_commands.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 82d941bbda..2f31b230ae 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10369,6 +10369,7 @@ static void Cmd_various(void) { gBattlerSpriteIds[BATTLE_PARTNER(battler)] = gBattleScripting.savedDmg >> 8; gBattlerSpriteIds[battler] = gBattleScripting.savedDmg & 0xFF; + gBattleScripting.savedDmg = 0; if (IsBattlerAlive(battler)) { SetBattlerShadowSpriteCallback(battler, gBattleMons[battler].species); From dd985dbb56e97571a167ce036d2954e5553f5499 Mon Sep 17 00:00:00 2001 From: Cafe <46283144+Cafeei@users.noreply.github.com> Date: Fri, 3 Jan 2025 16:49:42 +0400 Subject: [PATCH 537/544] Fix formatting in WSL.md (#5942) --- docs/install/windows/WSL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/install/windows/WSL.md b/docs/install/windows/WSL.md index 9534966488..a5dcbb4bbc 100644 --- a/docs/install/windows/WSL.md +++ b/docs/install/windows/WSL.md @@ -12,13 +12,13 @@ If you want the best performance and least amount of issues with Windows interfe 2. Once the process finishes, restart your machine. ### WSL1 -3a. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL1. +3. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL1. ```powershell wsl --set-version Ubuntu 1 ``` ### WSL2 -3a. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL2. +3. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL2. ```powershell wsl --set-version Ubuntu 2 From 8ccb385ce46d74b1b672f0b478752f74d58ac2a7 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 3 Jan 2025 14:15:05 +0100 Subject: [PATCH 538/544] Insomnia test used the wrong move in Turn section (#5939) --- test/battle/ability/insomnia.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/battle/ability/insomnia.c b/test/battle/ability/insomnia.c index 3098ce6d3f..524fa76338 100644 --- a/test/battle/ability/insomnia.c +++ b/test/battle/ability/insomnia.c @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Insomnia prevents yawn") PLAYER(SPECIES_DROWZEE) { Ability(ABILITY_INSOMNIA); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_SPORE); } + TURN { MOVE(opponent, MOVE_YAWN); } TURN {} TURN {} } SCENE { From c3b0f4dd7f75af3394535651c25f7bf861549eb9 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 3 Jan 2025 15:47:45 +0100 Subject: [PATCH 539/544] Fixes broken link battles (#5940) Co-authored-by: Hedara --- src/battle_util.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 4dfb39dc66..9245ef21fc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -285,7 +285,7 @@ void HandleAction_UseMove(void) gBattlerTarget = battler; } } - else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) + else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) { gBattlerTarget = SetRandomTarget(gBattlerAttacker); if (gAbsentBattlerFlags & (1u << gBattlerTarget) @@ -301,7 +301,7 @@ void HandleAction_UseMove(void) else gBattlerTarget = gBattlerAttacker; } - else if (IsDoubleBattle() && moveTarget == MOVE_TARGET_FOES_AND_ALLY) + else if (IsDoubleBattle() && moveTarget == MOVE_TARGET_FOES_AND_ALLY) { for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { @@ -932,22 +932,22 @@ static void UNUSED MarkAllBattlersForControllerExec(void) else { for (i = 0; i < gBattlersCount; i++) - gBattleControllerExecFlags |= 1 << i; + gBattleControllerExecFlags |= 1u << i; } } bool32 IsBattlerMarkedForControllerExec(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) - return (gBattleControllerExecFlags & (1 << (battler + 28))) != 0; + return (gBattleControllerExecFlags & (1u << (battler + 28))) != 0; else - return (gBattleControllerExecFlags & (1 << battler)) != 0; + return (gBattleControllerExecFlags & (1u << battler)) != 0; } void MarkBattlerForControllerExec(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) - gBattleControllerExecFlags |= 1u << (32 - MAX_BATTLERS_COUNT); + gBattleControllerExecFlags |= 1u << (battler + 32 - MAX_BATTLERS_COUNT); else gBattleControllerExecFlags |= 1u << battler; } From b8ccc29126e3d41db4e2ad66cfa2e47963a21b20 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sat, 4 Jan 2025 14:40:10 -0500 Subject: [PATCH 540/544] Update scope.md (#5948) --- docs/scope.md | 53 +++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/docs/scope.md b/docs/scope.md index 1bec4f2db7..41369eda29 100644 --- a/docs/scope.md +++ b/docs/scope.md @@ -1,11 +1,12 @@ # Document Purpose -This document is a guide for contributors and Senate to decide if a feature is within "scope" for pokeemerald-expansion. If a feature is not in scope, then it should not be merged. Even if an opened PR is within scope, this does not mean it will be merged, as acceptance criteria will often come down to the details of the implementation. +This document is a guide for contributors and Senate to decide if a feature is within "scope" for pokeemerald-expansion. "Scope" in this case comprises a list of features and concepts that could be merged if an appropriate implementation is submitted. If a feature is not in scope, then it should not be merged. Even if an opened PR is within scope, this does not mean it will be merged, as acceptance criteria will often come down to the details of the implementation. # Definitions * **Showdown Supported (SS)**: A core series game who's metagame can be played on Showdown. - * Notably, this is every [core series game](https://bulbapedia.bulbagarden.net/wiki/Core_series#List_of_core_series_games) except Pokémon Legends: Arceus. + * Includes every [core series game](https://bulbapedia.bulbagarden.net/wiki/Core_series#List_of_core_series_games) except Pokémon Legends: Arceus. + * Does not include [spin-off games](https://bulbapedia.bulbagarden.net/wiki/Spin-off_Pokémon_games) such as Pokémon Colosseum, Pokémon XD, Pokémon Trozei!, etc. * **Base Expansion Version**: "A .gba file built from an unmodified `master` or `upcoming` branch of `pokeemerald-expansion`. * **Vanilla Emerald Version**: A .gba file built from an unmodified `master` branch of pret's `pokeemerald`. @@ -17,38 +18,40 @@ A pull request meets the scope criteria if: ## In Scope Categories -1. **SS Species:** Adds Species that have appeared in a Showdown-supported title -2. **SS Moves:** Adds Moves and Move Animations that have appeared in a Showdown-supported title -3. **SS Abilities:** Adds Abilities that have appeared in a Showdown-supported title -4. **SS Items:** Adds Items that have appeared in a Showdown-supported title -5. **SS Gimmicks:** Adds Gimmicks that have appeared in a Showdown-supported title -6. **SS Battle Types:** Adds Special Battle Types that have appeared in a Showdown-supported title -7. **SS Battle Mechanics:** Adds mechanical battle changes that have appeared in a Showdown-supported title -8. **Improve Battle AI:** Improve the Battle AI in a way that allows it to approach the skill and capability of a human competitive player -9. **Base Link Compatibility:** Link compatibility with base -10. **SS Overworld / Menu Updates:** Replicate overworld or menu changes from Showdown-supported Pokémon titles -11. **Speed Up:** Speed up the player experience of features found in base -12. **Compression:** Automatically compress assets -13. **Novel Experience:** Adds a novel experience included in another Showdown Supported title -15. **Helper Features:** Eases the addition or inclusion of any of the aforementioned +1. **SS Species**: Adds Species that have appeared in a Showdown-supported title. Includes follower sprites for all defined species including battle-only ones (ie. Megas) +2. **SS Moves**: Adds Moves and Move Animations that have appeared in a Showdown-supported title +3. **SS Abilities**: Adds Abilities that have appeared in a Showdown-supported title +4. **SS Items**: Adds Items that have appeared in a Showdown-supported title +5. **SS Gimmicks**: Adds Gimmicks that have appeared in a Showdown-supported title (Dynamax, Mega Evolution, etc.) +6. **SS Battle Types**: Adds Special Battle Types that have appeared in a Showdown-supported title (Triple battles, etc.) +7. **SS Battle Mechanics**: Adds mechanical battle changes that have appeared in a Showdown-supported title, and allow developers to choose which generation suits them where applicable +8. **Battle AI Behaviour**: Improvements towards the capability of a human competitive player, and unique or interesting behaviours otherwise +9. **Base Link Compatibility**: The ability for two Base Expansion Version's to connect, trade, and battle one another +10. **SS Overworld Features**: Add overworld changes / additions from Showdown-supported Pokémon titles (followers, raids, sideways stairs, etc.) +11. **SS Menu Features**: Add menu changes / additions from Showdown-supported Pokémon titles (type effectivness indicator, PC functions, etc.) +12. **Speed Up**: Optimize code to run more efficiently, take up less space, and work better overall to improves the developer and / or player experience +13. **Compression**: Reduces the size of graphic or sound assets, etc. Includes automatic compression +14. **Novel Experience**: Adds a novel experience included in another Showdown Supported title (poffins, fishing minigames, etc.) +15. **Helper Features**: Eases the addition or inclusion of any of the aforementioned, or facilitates developer ease of use ## Not In Scope Categories -1. **Non-SS Species**: Adds Species that have NOT appeared in a Showdown-supported title -2. **Non-SS Moves**: Adds Moves and Move Animations that have NOT appeared in a Showdown-supported title -3. **Non-SS Abilities**: Adds Abilities that have NOT appeared in a Showdown-supported title -4. **Non-SS Items**: Adds Items that have NOT appeared in a Showdown-supported title -5. **Non-SS Gimmicks**: Adds Gimmicks that have NOT appeared in a Showdown-supported title +1. **Non-SS Species**: Adds Species that have NOT appeared in a Showdown-supported title (Fakemon, CAP Pokémon, etc.) +2. **Non-SS Moves**: Adds Moves and Move Animations that have NOT appeared in a Showdown-supported title +3. **Non-SS Abilities**: Adds Abilities that have NOT appeared in a Showdown-supported title +4. **Non-SS Items**: Adds Items that have NOT appeared in a Showdown-supported title +5. **Non-SS Gimmicks**: Adds Gimmicks that have NOT appeared in a Showdown-supported title (Showdown's Other Metagames, etc.) 6. **Non-SS Battle Types**: Adds Special Battle Types that have NOT appeared in a Showdown-supported title +7. **Non-SS or SS Overworld Maps**: Adds overworld maps from either Showdown-supported titles or non-Showdown-supported titles 7. **Duplicate Feature UI**: Adds functionality that duplicates the core functionality of an existing vanilla feature -8. **Vanilla Link Compatibility**: Link compatibility with vanilla +8. **Vanilla Link Compatibility**: The ability for Base Expansion Version and Vanilla Emerald Version to connect, trade, and battle one another ## Discussion Required Categories Pull Requests that fall into this category should be brought up to maintainers, who will discuss and vote as to whether or not the feature is considered in scope. Considerations for acceptance may include invasiveness of implementation, popularity, ease of maintenance, etc. -1. **Developer Ease of Use:** Lowers barrier of entry for developers to use existing behavior -2. **Fangame Features:** Adds a popular feature from other fangames -3. **Popular Non-SS Features:** Exceptions can be made for uniquely popular or requested features (Drowsy, PLA Legend Plate, etc.) +1. **Developer Ease of Use**: Lowers barrier of entry for developers to use existing behavior +2. **Fangame Features**: Adds a popular feature from other fangames +3. **Popular Non-SS Features**: Exceptions can be made for uniquely popular or requested features (Drowsy, PLA Legend Plate, etc.) 4. **External Program**: External programs like poryscript, porymoves, etc. From c6d92eaf8064a434717c4d29e5960695b627359e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 5 Jan 2025 11:32:48 -0300 Subject: [PATCH 541/544] Removed references to HANDLE_EXPANDED_MOVE_NAME in docs (#5955) --- docs/tutorials/how_to_new_move.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/how_to_new_move.md b/docs/tutorials/how_to_new_move.md index 9ddc09b904..e3a2eb0a12 100644 --- a/docs/tutorials/how_to_new_move.md +++ b/docs/tutorials/how_to_new_move.md @@ -28,7 +28,7 @@ Let's look at an example: ```c [MOVE_THUNDER_SHOCK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThunderShock", "Thunder Shock"), + .name = COMPOUND_STRING("Thunder Shock"), .description = COMPOUND_STRING( "An electrical attack that\n" "may paralyze the foe."), @@ -51,7 +51,7 @@ Let's look at an example: .contestComboMoves = {COMBO_STARTER_CHARGE}, }, ``` -The `HANDLE_EXPANDED_MOVE_NAME` allows the usage of a name of extended character length, so long as the `B_EXPANDED_MOVE_NAMES` is set to `TRUE`, whereas by default it's limited in Gen 3 to 12 characters. Most of the fields here are obvious, but the two important ones for determining what a move actually *does* are `effect` and `additionalEffects`. +Most of the fields here are obvious, but the two important ones for determining what a move actually *does* are `effect` and `additionalEffects`. The `effect` represents how the move actually works when called in battle - it can be a two turn move, or a move that only works if the target is holding an item, for example. How each effect works is pretty much unique, but the way a move of a particular effect is executed is defined by a script [`data/battle_scripts_1.s`](#databattle_scripts_1s), and any *variable* characteristics such as typing or power are defined in either [`src/battle_script_commands.c`](#srcbattle_script_commandsc) or [`src/battle_util.c`](#srcbattle_utilc), depending on the effect. The vast majority of non-status moves are simply `EFFECT_HIT`, in that they deal damage and apply `additionalEffects` (if defined). From cbd0b3ef0cf134d6fa0495cd4e589257e136bea3 Mon Sep 17 00:00:00 2001 From: shachar700 <48739719+shachar700@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:45:21 +0200 Subject: [PATCH 542/544] Field effect for cutting grass is missing setfieldeffectargument. Issue #5766 (#5952) --- data/scripts/field_move_scripts.inc | 12 ++++++++++++ include/event_scripts.h | 1 + src/fldeff_cut.c | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index 0a7660b4ce..f1bd3618e1 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -385,6 +385,18 @@ EventScript_UseDig:: lockall goto EventScript_DigCommon + +EventScript_CutGrassCommon: + isfollowerfieldmoveuser VAR_0x8004 + setfieldeffectargument 3, VAR_0x8004 @ skip pose if true + dofieldeffect FLDEFF_USE_CUT_ON_GRASS + waitstate + +@ Use Cut grass from party menu +EventScript_UseCutGrass:: + lockall + goto EventScript_CutGrassCommon + Text_CantDive: .string "The sea is deep here. A POKéMON\n" .string "may be able to go underwater.$" diff --git a/include/event_scripts.h b/include/event_scripts.h index 60a8d6123e..04bcf32760 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -405,6 +405,7 @@ extern const u8 EventScript_UseFlash[]; extern const u8 EventScript_UseCut[]; extern const u8 EventScript_UseRockSmash[]; extern const u8 EventScript_UseDig[]; +extern const u8 EventScript_UseCutGrass[]; //player pc extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC[]; diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 2304381673..a7eccf651c 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -277,8 +277,8 @@ bool8 SetUpFieldMove_Cut(void) static void FieldCallback_CutGrass(void) { - FieldEffectStart(FLDEFF_USE_CUT_ON_GRASS); gFieldEffectArguments[0] = GetCursorSelectionMonId(); + ScriptContext_SetupScript(EventScript_UseCutGrass); } bool8 FldEff_UseCutOnGrass(void) From adb4a1ff48646b553d106df7793956566950294c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 6 Jan 2025 08:03:44 -0300 Subject: [PATCH 543/544] Added the Gen. 4+ berries to gBerryCrush_BerryData (#5937) --- src/berry.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/berry.c b/src/berry.c index a287073df1..4730799e0c 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1654,6 +1654,24 @@ const struct BerryCrushBerryData gBerryCrush_BerryData[] = { [ITEM_WATMEL_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, [ITEM_DURIN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, [ITEM_BELUE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 250}, + [ITEM_CHILAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 70}, + [ITEM_OCCA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 100, .powder = 100}, + [ITEM_PASSHO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 30}, + [ITEM_WACAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_RINDO_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_YACHE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_CHOPLE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_KEBIA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_SHUCA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 20}, + [ITEM_COBA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_PAYAPA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_TANGA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_CHARTI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_KASIB_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_HABAN_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 50, .powder = 30}, + [ITEM_COLBUR_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, + [ITEM_BABIRI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 80, .powder = 50}, + [ITEM_ROSELI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 60, .powder = 50}, [ITEM_LIECHI_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, [ITEM_GANLON_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, [ITEM_SALAC_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, @@ -1661,6 +1679,13 @@ const struct BerryCrushBerryData gBerryCrush_BerryData[] = { [ITEM_APICOT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 180, .powder = 500}, [ITEM_LANSAT_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, [ITEM_STARF_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, + [ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 150, .powder = 200}, + [ITEM_MICLE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 250}, + [ITEM_CUSTAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 200, .powder = 750}, + [ITEM_JABOCA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 250}, + [ITEM_ROWAP_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 130, .powder = 250}, + [ITEM_KEE_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 500}, + [ITEM_MARANGA_BERRY - FIRST_BERRY_INDEX] = {.difficulty = 160, .powder = 500}, [ITEM_ENIGMA_BERRY_E_READER - FIRST_BERRY_INDEX] = {.difficulty = 150, .powder = 200} }; From 0294beddf1e30d082316312aa13d1b3d638c4096 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 6 Jan 2025 11:23:09 -0600 Subject: [PATCH 544/544] Add manual breaking back to "What will (mon) do?" message (#5908) --- src/battle_controller_player.c | 1 - src/battle_controller_safari.c | 1 - src/battle_message.c | 4 ++-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 00e73735e8..982c9e4f27 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -2044,7 +2044,6 @@ static void PlayerHandleChooseAction(u32 battler) ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, battler, gBattlerPartyIndexes[battler]); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo); - BreakStringAutomatic(gDisplayedStringBattle, WindowWidthPx(B_WIN_ACTION_PROMPT), 2, FONT_NORMAL); if (B_SHOW_PARTNER_TARGET && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && IsBattlerAlive(B_POSITION_PLAYER_RIGHT)) { diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 932ce47fd9..abb2aba946 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -299,7 +299,6 @@ static void SafariHandleChooseAction(u32 battler) ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2); - BreakStringAutomatic(gDisplayedStringBattle, WindowWidthPx(B_WIN_ACTION_PROMPT), 2, FONT_NORMAL); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); } diff --git a/src/battle_message.c b/src/battle_message.c index 7ad18214e1..32a0c017f3 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1406,8 +1406,8 @@ const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); const u8 gText_CongratsPkmnEvolved[] = _("Congratulations! Your {STR_VAR_1}\nevolved into {STR_VAR_2}!{WAIT_SE}\p"); const u8 gText_PkmnStoppedEvolving[] = _("Huh? {STR_VAR_1}\nstopped evolving!\p"); const u8 gText_EllipsisQuestionMark[] = _("……?\p"); -const u8 gText_WhatWillPkmnDo[] = _("What will {B_BUFF1} do?"); -const u8 gText_WhatWillPkmnDo2[] = _("What will {B_PLAYER_NAME} do?"); +const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_BUFF1} do?"); +const u8 gText_WhatWillPkmnDo2[] = _("What will\n{B_PLAYER_NAME} do?"); const u8 gText_WhatWillWallyDo[] = _("What will\nWALLY do?"); const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…"); const u8 gText_BattleMenu[] = _("Battle{CLEAR_TO 56}Bag\nPokémon{CLEAR_TO 56}Run");
- Note for advanced users: WSL2... - -> WSL2 is an option and is even faster than WSL1 if files are stored on the WSL2 file system, but some tools may have trouble interacting -> with the WSL2 file system over the network drive. For example, tools which use Qt versions before 5.15.2 such as porymap -> may have problems with parsing the \\wsl$ network drive path. -